// export testing ; export you , russians , nature , you_alt , farmer_side , mines_side , russians_alt ; export Heike , Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis , Khattam ; export Farmer , Gordon , Willard ; export Kozlov ; export ai_bases ; export ai_soldiers , ai_attacking_soldiers , ai_engineers , ai_mechanics_defend , ai_mechanics_attack , ai_scientists , ai_attacking_scientists ; export ai_apemen_engineers , ai_excepted_soldiers , ai_depot , ai_labs , ai_facts , ai_armouries , ai_bunkers , ai_turrets , ai_oil_mine , ai_siberite_mines ; export ai_fact_extensions , ai_power_plants , ai_control_tower , ai_teleporter , ai_buildings_locations , ai_captured_buildings ; export ai_vehicles_defend , ai_vehicles_attack , ai_retreating_vehicles_defend , ai_vehicles_being_repaired , ai_refuel_vehicles_list ; export ai_vehicle_pullback_hexes , ai_human_pullback_hex , ai_building_under_construction , ai_heal_these_humans , ai_all_buildings ; export ai_building_constructor , ai_vehicle_being_moved , ai_vehicles_having_been_moved , ai_upcoming_building_data , ai_cannot_rebuild_these_buildings ; export ai_near_base_dist , ai_cargo_bay , ai_cargo_bay_under_construction ; export ai_cargo_bay_destroy_tick , ai_crane , ai_crane_under_construction , ai_crane_destroy_tick , ai_crane_is_being_repaired ; export ai_crane_driver , ai_attacking_unit_hex_index , ai_retreating_attacking_humans , ai_control_tower_vehicles ; export ai_teleporter_exit_placed , ai_excepted_buildings , ai_fact_extension_replace_location , ai_dismantle_these_buildings ; export ai_units_to_export , ai_exported_units , ai_imported_units , ai_taufield_vehicles , ai_implosion_vehicles ; export ai_facts_with_ext_rebuild_map ; export ai_time_shift_data , ai_time_shift_hexes , ai_time_shift_hexes_underway ; export ai_contact_time , ai_attack_ground_info_initial , ai_attack_ground_info_sustain ; export computer_level_features_1 , ai_max_num_vehicles_defend , ai_max_num_vehicles_attack , ai_max_num_taufield_vehicles ; export ai_max_num_implosion_vehicles , ai_human_attack_delay , ai_vehicle_attack_delay , computer_level_features_2 ; export base_time_features_1 , base_time_features_2 , do_upgrade_armoury ; export cl_building , cl_rus_veh_defend , cl_rus_veh_attack , cl_rus_taufield_veh , cl_ar_implosion_veh , cl_ar_veh_attack , cl_attack_time ; export cl_ar_veh_defend ; export num_farmer_cargo_bays_destroyed , all_mines_hexes , farmer_defence_mines_centerhexes , farmer_defence_num_mines ; export farmer_mine_guy , farmer_defence_mines_hexes , war_vehicle_filter , player_bases_areas ; export farmer_attack_exit_point , buildings_except_from_lvlup , farmer_attack_anyway_phase ; export hiding_player_units , hiding_player_units_found , rus_obj_given_before_survivors_found , heike_farmer_dialogue_done , kozlov_captured ; export kozlov_has_teleported , kozlov_escaped , kozlov_teleport_event_over , farmer_vehicle , farmer_has_teleported , farmer_luring_used ; export num_damaged_or_destroyed_buildings_farmer_base , time_determined_situation , russians_defeated , farmer_defeated ; export heike_farmer_dialogue_started , time_that_has_passed , kozlov_trying_to_escape , kozlov_gained , Ralph_alive ; starting begin RandomizeAll ;
   0: CALL_OW 11
// ResetFog ;
   4: CALL_OW 335
// testing = false ;
   8: LD_ADDR_EXP 1
  12: PUSH
  13: LD_INT 0
  15: ST_TO_ADDR
// ai_bases = [ 1 , 2 , 3 ] ;
  16: LD_ADDR_EXP 25
  20: PUSH
  21: LD_INT 1
  23: PUSH
  24: LD_INT 2
  26: PUSH
  27: LD_INT 3
  29: PUSH
  30: EMPTY
  31: LIST
  32: LIST
  33: LIST
  34: ST_TO_ADDR
// ai_soldiers = [ [ ] , [ ] , [ ] ] ;
  35: LD_ADDR_EXP 26
  39: PUSH
  40: EMPTY
  41: PUSH
  42: EMPTY
  43: PUSH
  44: EMPTY
  45: PUSH
  46: EMPTY
  47: LIST
  48: LIST
  49: LIST
  50: ST_TO_ADDR
// ai_attacking_soldiers = [ [ ] , [ ] , [ ] ] ;
  51: LD_ADDR_EXP 27
  55: PUSH
  56: EMPTY
  57: PUSH
  58: EMPTY
  59: PUSH
  60: EMPTY
  61: PUSH
  62: EMPTY
  63: LIST
  64: LIST
  65: LIST
  66: ST_TO_ADDR
// ai_excepted_soldiers = [ [ ] , [ ] , [ ] ] ;
  67: LD_ADDR_EXP 34
  71: PUSH
  72: EMPTY
  73: PUSH
  74: EMPTY
  75: PUSH
  76: EMPTY
  77: PUSH
  78: EMPTY
  79: LIST
  80: LIST
  81: LIST
  82: ST_TO_ADDR
// ai_engineers = [ [ ] , [ ] , [ ] ] ;
  83: LD_ADDR_EXP 28
  87: PUSH
  88: EMPTY
  89: PUSH
  90: EMPTY
  91: PUSH
  92: EMPTY
  93: PUSH
  94: EMPTY
  95: LIST
  96: LIST
  97: LIST
  98: ST_TO_ADDR
// ai_mechanics_defend = [ [ ] , [ ] , [ ] ] ;
  99: LD_ADDR_EXP 29
 103: PUSH
 104: EMPTY
 105: PUSH
 106: EMPTY
 107: PUSH
 108: EMPTY
 109: PUSH
 110: EMPTY
 111: LIST
 112: LIST
 113: LIST
 114: ST_TO_ADDR
// ai_mechanics_attack = [ [ ] , [ ] , [ ] ] ;
 115: LD_ADDR_EXP 30
 119: PUSH
 120: EMPTY
 121: PUSH
 122: EMPTY
 123: PUSH
 124: EMPTY
 125: PUSH
 126: EMPTY
 127: LIST
 128: LIST
 129: LIST
 130: ST_TO_ADDR
// ai_scientists = [ [ ] , [ ] , [ ] ] ;
 131: LD_ADDR_EXP 31
 135: PUSH
 136: EMPTY
 137: PUSH
 138: EMPTY
 139: PUSH
 140: EMPTY
 141: PUSH
 142: EMPTY
 143: LIST
 144: LIST
 145: LIST
 146: ST_TO_ADDR
// ai_attacking_scientists = [ [ ] , [ ] , [ ] ] ;
 147: LD_ADDR_EXP 32
 151: PUSH
 152: EMPTY
 153: PUSH
 154: EMPTY
 155: PUSH
 156: EMPTY
 157: PUSH
 158: EMPTY
 159: LIST
 160: LIST
 161: LIST
 162: ST_TO_ADDR
// ai_apemen_engineers = [ [ ] , [ ] , [ ] ] ;
 163: LD_ADDR_EXP 33
 167: PUSH
 168: EMPTY
 169: PUSH
 170: EMPTY
 171: PUSH
 172: EMPTY
 173: PUSH
 174: EMPTY
 175: LIST
 176: LIST
 177: LIST
 178: ST_TO_ADDR
// ai_depot = [ 0 , 0 , 0 ] ;
 179: LD_ADDR_EXP 35
 183: PUSH
 184: LD_INT 0
 186: PUSH
 187: LD_INT 0
 189: PUSH
 190: LD_INT 0
 192: PUSH
 193: EMPTY
 194: LIST
 195: LIST
 196: LIST
 197: ST_TO_ADDR
// ai_labs = [ [ ] , [ ] , [ ] ] ;
 198: LD_ADDR_EXP 36
 202: PUSH
 203: EMPTY
 204: PUSH
 205: EMPTY
 206: PUSH
 207: EMPTY
 208: PUSH
 209: EMPTY
 210: LIST
 211: LIST
 212: LIST
 213: ST_TO_ADDR
// ai_facts = [ [ ] , [ ] , [ ] ] ;
 214: LD_ADDR_EXP 37
 218: PUSH
 219: EMPTY
 220: PUSH
 221: EMPTY
 222: PUSH
 223: EMPTY
 224: PUSH
 225: EMPTY
 226: LIST
 227: LIST
 228: LIST
 229: ST_TO_ADDR
// ai_armouries = [ [ ] , [ ] , [ ] ] ;
 230: LD_ADDR_EXP 38
 234: PUSH
 235: EMPTY
 236: PUSH
 237: EMPTY
 238: PUSH
 239: EMPTY
 240: PUSH
 241: EMPTY
 242: LIST
 243: LIST
 244: LIST
 245: ST_TO_ADDR
// ai_bunkers = [ [ ] , [ ] , [ ] ] ;
 246: LD_ADDR_EXP 39
 250: PUSH
 251: EMPTY
 252: PUSH
 253: EMPTY
 254: PUSH
 255: EMPTY
 256: PUSH
 257: EMPTY
 258: LIST
 259: LIST
 260: LIST
 261: ST_TO_ADDR
// ai_turrets = [ [ ] , [ ] , [ ] ] ;
 262: LD_ADDR_EXP 40
 266: PUSH
 267: EMPTY
 268: PUSH
 269: EMPTY
 270: PUSH
 271: EMPTY
 272: PUSH
 273: EMPTY
 274: LIST
 275: LIST
 276: LIST
 277: ST_TO_ADDR
// ai_oil_mine = [ 0 , 0 , 0 ] ;
 278: LD_ADDR_EXP 41
 282: PUSH
 283: LD_INT 0
 285: PUSH
 286: LD_INT 0
 288: PUSH
 289: LD_INT 0
 291: PUSH
 292: EMPTY
 293: LIST
 294: LIST
 295: LIST
 296: ST_TO_ADDR
// ai_siberite_mines = [ [ ] , [ ] , [ ] ] ;
 297: LD_ADDR_EXP 42
 301: PUSH
 302: EMPTY
 303: PUSH
 304: EMPTY
 305: PUSH
 306: EMPTY
 307: PUSH
 308: EMPTY
 309: LIST
 310: LIST
 311: LIST
 312: ST_TO_ADDR
// ai_fact_extensions = [ [ ] , [ ] , [ ] ] ;
 313: LD_ADDR_EXP 43
 317: PUSH
 318: EMPTY
 319: PUSH
 320: EMPTY
 321: PUSH
 322: EMPTY
 323: PUSH
 324: EMPTY
 325: LIST
 326: LIST
 327: LIST
 328: ST_TO_ADDR
// ai_power_plants = [ [ ] , [ ] , [ ] ] ;
 329: LD_ADDR_EXP 44
 333: PUSH
 334: EMPTY
 335: PUSH
 336: EMPTY
 337: PUSH
 338: EMPTY
 339: PUSH
 340: EMPTY
 341: LIST
 342: LIST
 343: LIST
 344: ST_TO_ADDR
// ai_control_tower = [ 0 , 0 , 0 ] ;
 345: LD_ADDR_EXP 45
 349: PUSH
 350: LD_INT 0
 352: PUSH
 353: LD_INT 0
 355: PUSH
 356: LD_INT 0
 358: PUSH
 359: EMPTY
 360: LIST
 361: LIST
 362: LIST
 363: ST_TO_ADDR
// ai_teleporter = [ 0 , 0 , 0 ] ;
 364: LD_ADDR_EXP 46
 368: PUSH
 369: LD_INT 0
 371: PUSH
 372: LD_INT 0
 374: PUSH
 375: LD_INT 0
 377: PUSH
 378: EMPTY
 379: LIST
 380: LIST
 381: LIST
 382: ST_TO_ADDR
// ai_buildings_locations = [ [ ] , [ ] , [ ] ] ;
 383: LD_ADDR_EXP 47
 387: PUSH
 388: EMPTY
 389: PUSH
 390: EMPTY
 391: PUSH
 392: EMPTY
 393: PUSH
 394: EMPTY
 395: LIST
 396: LIST
 397: LIST
 398: ST_TO_ADDR
// ai_captured_buildings = [ [ ] , [ ] , [ ] ] ;
 399: LD_ADDR_EXP 48
 403: PUSH
 404: EMPTY
 405: PUSH
 406: EMPTY
 407: PUSH
 408: EMPTY
 409: PUSH
 410: EMPTY
 411: LIST
 412: LIST
 413: LIST
 414: ST_TO_ADDR
// ai_vehicles_defend = [ [ ] , [ ] , [ ] ] ;
 415: LD_ADDR_EXP 49
 419: PUSH
 420: EMPTY
 421: PUSH
 422: EMPTY
 423: PUSH
 424: EMPTY
 425: PUSH
 426: EMPTY
 427: LIST
 428: LIST
 429: LIST
 430: ST_TO_ADDR
// ai_vehicles_attack = [ [ ] , [ ] , [ ] ] ;
 431: LD_ADDR_EXP 50
 435: PUSH
 436: EMPTY
 437: PUSH
 438: EMPTY
 439: PUSH
 440: EMPTY
 441: PUSH
 442: EMPTY
 443: LIST
 444: LIST
 445: LIST
 446: ST_TO_ADDR
// ai_retreating_vehicles_defend = [ [ ] , [ ] , [ ] ] ;
 447: LD_ADDR_EXP 51
 451: PUSH
 452: EMPTY
 453: PUSH
 454: EMPTY
 455: PUSH
 456: EMPTY
 457: PUSH
 458: EMPTY
 459: LIST
 460: LIST
 461: LIST
 462: ST_TO_ADDR
// ai_vehicles_being_repaired = [ [ ] , [ ] , [ ] ] ;
 463: LD_ADDR_EXP 52
 467: PUSH
 468: EMPTY
 469: PUSH
 470: EMPTY
 471: PUSH
 472: EMPTY
 473: PUSH
 474: EMPTY
 475: LIST
 476: LIST
 477: LIST
 478: ST_TO_ADDR
// ai_refuel_vehicles_list = [ [ ] , [ ] , [ ] ] ;
 479: LD_ADDR_EXP 53
 483: PUSH
 484: EMPTY
 485: PUSH
 486: EMPTY
 487: PUSH
 488: EMPTY
 489: PUSH
 490: EMPTY
 491: LIST
 492: LIST
 493: LIST
 494: ST_TO_ADDR
// ai_vehicle_pullback_hexes = [ [ [ 33 , 61 ] , [ 29 , 38 ] , [ 31 , 44 ] , [ 47 , 61 ] ] , [ ] , [ [ 87 , 33 ] , [ 91 , 34 ] , [ 97 , 36 ] ] ] ;
 495: LD_ADDR_EXP 54
 499: PUSH
 500: LD_INT 33
 502: PUSH
 503: LD_INT 61
 505: PUSH
 506: EMPTY
 507: LIST
 508: LIST
 509: PUSH
 510: LD_INT 29
 512: PUSH
 513: LD_INT 38
 515: PUSH
 516: EMPTY
 517: LIST
 518: LIST
 519: PUSH
 520: LD_INT 31
 522: PUSH
 523: LD_INT 44
 525: PUSH
 526: EMPTY
 527: LIST
 528: LIST
 529: PUSH
 530: LD_INT 47
 532: PUSH
 533: LD_INT 61
 535: PUSH
 536: EMPTY
 537: LIST
 538: LIST
 539: PUSH
 540: EMPTY
 541: LIST
 542: LIST
 543: LIST
 544: LIST
 545: PUSH
 546: EMPTY
 547: PUSH
 548: LD_INT 87
 550: PUSH
 551: LD_INT 33
 553: PUSH
 554: EMPTY
 555: LIST
 556: LIST
 557: PUSH
 558: LD_INT 91
 560: PUSH
 561: LD_INT 34
 563: PUSH
 564: EMPTY
 565: LIST
 566: LIST
 567: PUSH
 568: LD_INT 97
 570: PUSH
 571: LD_INT 36
 573: PUSH
 574: EMPTY
 575: LIST
 576: LIST
 577: PUSH
 578: EMPTY
 579: LIST
 580: LIST
 581: LIST
 582: PUSH
 583: EMPTY
 584: LIST
 585: LIST
 586: LIST
 587: ST_TO_ADDR
// ai_human_pullback_hex = [ [ 44 , 66 ] , [ 94 , 104 ] , [ 99 , 45 ] ] ;
 588: LD_ADDR_EXP 55
 592: PUSH
 593: LD_INT 44
 595: PUSH
 596: LD_INT 66
 598: PUSH
 599: EMPTY
 600: LIST
 601: LIST
 602: PUSH
 603: LD_INT 94
 605: PUSH
 606: LD_INT 104
 608: PUSH
 609: EMPTY
 610: LIST
 611: LIST
 612: PUSH
 613: LD_INT 99
 615: PUSH
 616: LD_INT 45
 618: PUSH
 619: EMPTY
 620: LIST
 621: LIST
 622: PUSH
 623: EMPTY
 624: LIST
 625: LIST
 626: LIST
 627: ST_TO_ADDR
// ai_building_under_construction = [ 0 , 0 , 0 ] ;
 628: LD_ADDR_EXP 56
 632: PUSH
 633: LD_INT 0
 635: PUSH
 636: LD_INT 0
 638: PUSH
 639: LD_INT 0
 641: PUSH
 642: EMPTY
 643: LIST
 644: LIST
 645: LIST
 646: ST_TO_ADDR
// ai_heal_these_humans = [ [ ] , [ ] , [ ] ] ;
 647: LD_ADDR_EXP 57
 651: PUSH
 652: EMPTY
 653: PUSH
 654: EMPTY
 655: PUSH
 656: EMPTY
 657: PUSH
 658: EMPTY
 659: LIST
 660: LIST
 661: LIST
 662: ST_TO_ADDR
// ai_all_buildings = [ [ ] , [ ] , [ ] ] ;
 663: LD_ADDR_EXP 58
 667: PUSH
 668: EMPTY
 669: PUSH
 670: EMPTY
 671: PUSH
 672: EMPTY
 673: PUSH
 674: EMPTY
 675: LIST
 676: LIST
 677: LIST
 678: ST_TO_ADDR
// ai_building_constructor = [ 0 , 0 , 0 ] ;
 679: LD_ADDR_EXP 59
 683: PUSH
 684: LD_INT 0
 686: PUSH
 687: LD_INT 0
 689: PUSH
 690: LD_INT 0
 692: PUSH
 693: EMPTY
 694: LIST
 695: LIST
 696: LIST
 697: ST_TO_ADDR
// ai_vehicle_being_moved = [ 0 , 0 , 0 ] ;
 698: LD_ADDR_EXP 60
 702: PUSH
 703: LD_INT 0
 705: PUSH
 706: LD_INT 0
 708: PUSH
 709: LD_INT 0
 711: PUSH
 712: EMPTY
 713: LIST
 714: LIST
 715: LIST
 716: ST_TO_ADDR
// ai_vehicles_having_been_moved = [ [ ] , [ ] , [ ] ] ;
 717: LD_ADDR_EXP 61
 721: PUSH
 722: EMPTY
 723: PUSH
 724: EMPTY
 725: PUSH
 726: EMPTY
 727: PUSH
 728: EMPTY
 729: LIST
 730: LIST
 731: LIST
 732: ST_TO_ADDR
// ai_upcoming_building_data = [ [ ] , [ ] , [ ] ] ;
 733: LD_ADDR_EXP 62
 737: PUSH
 738: EMPTY
 739: PUSH
 740: EMPTY
 741: PUSH
 742: EMPTY
 743: PUSH
 744: EMPTY
 745: LIST
 746: LIST
 747: LIST
 748: ST_TO_ADDR
// ai_cannot_rebuild_these_buildings = [ [ ] , [ ] , [ ] ] ;
 749: LD_ADDR_EXP 63
 753: PUSH
 754: EMPTY
 755: PUSH
 756: EMPTY
 757: PUSH
 758: EMPTY
 759: PUSH
 760: EMPTY
 761: LIST
 762: LIST
 763: LIST
 764: ST_TO_ADDR
// ai_near_base_dist = 18 ;
 765: LD_ADDR_EXP 64
 769: PUSH
 770: LD_INT 18
 772: ST_TO_ADDR
// ai_vehicle_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
 773: LD_ADDR_EXP 98
 777: PUSH
 778: LD_INT 0
 780: PUSH
 781: LD_INT 0
 783: PUSH
 784: LD_INT 0
 786: PUSH
 787: EMPTY
 788: LIST
 789: LIST
 790: LIST
 791: ST_TO_ADDR
// ai_human_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
 792: LD_ADDR_EXP 97
 796: PUSH
 797: LD_INT 0
 799: PUSH
 800: LD_INT 0
 802: PUSH
 803: LD_INT 0
 805: PUSH
 806: EMPTY
 807: LIST
 808: LIST
 809: LIST
 810: ST_TO_ADDR
// ai_cargo_bay = [ 0 , 0 , 0 ] ;
 811: LD_ADDR_EXP 65
 815: PUSH
 816: LD_INT 0
 818: PUSH
 819: LD_INT 0
 821: PUSH
 822: LD_INT 0
 824: PUSH
 825: EMPTY
 826: LIST
 827: LIST
 828: LIST
 829: ST_TO_ADDR
// ai_cargo_bay_under_construction = [ false , false , false ] ;
 830: LD_ADDR_EXP 66
 834: PUSH
 835: LD_INT 0
 837: PUSH
 838: LD_INT 0
 840: PUSH
 841: LD_INT 0
 843: PUSH
 844: EMPTY
 845: LIST
 846: LIST
 847: LIST
 848: ST_TO_ADDR
// ai_cargo_bay_destroy_tick = [ tick , tick , tick ] ;
 849: LD_ADDR_EXP 67
 853: PUSH
 854: LD_OWVAR 1
 858: PUSH
 859: LD_OWVAR 1
 863: PUSH
 864: LD_OWVAR 1
 868: PUSH
 869: EMPTY
 870: LIST
 871: LIST
 872: LIST
 873: ST_TO_ADDR
// ai_crane = [ 0 , 0 , 0 ] ;
 874: LD_ADDR_EXP 68
 878: PUSH
 879: LD_INT 0
 881: PUSH
 882: LD_INT 0
 884: PUSH
 885: LD_INT 0
 887: PUSH
 888: EMPTY
 889: LIST
 890: LIST
 891: LIST
 892: ST_TO_ADDR
// ai_crane_under_construction = [ false , false , false ] ;
 893: LD_ADDR_EXP 69
 897: PUSH
 898: LD_INT 0
 900: PUSH
 901: LD_INT 0
 903: PUSH
 904: LD_INT 0
 906: PUSH
 907: EMPTY
 908: LIST
 909: LIST
 910: LIST
 911: ST_TO_ADDR
// ai_crane_destroy_tick = [ tick , tick , tick ] ;
 912: LD_ADDR_EXP 70
 916: PUSH
 917: LD_OWVAR 1
 921: PUSH
 922: LD_OWVAR 1
 926: PUSH
 927: LD_OWVAR 1
 931: PUSH
 932: EMPTY
 933: LIST
 934: LIST
 935: LIST
 936: ST_TO_ADDR
// ai_crane_is_being_repaired = [ false , false , false ] ;
 937: LD_ADDR_EXP 71
 941: PUSH
 942: LD_INT 0
 944: PUSH
 945: LD_INT 0
 947: PUSH
 948: LD_INT 0
 950: PUSH
 951: EMPTY
 952: LIST
 953: LIST
 954: LIST
 955: ST_TO_ADDR
// ai_crane_driver = [ 0 , 0 , 0 ] ;
 956: LD_ADDR_EXP 72
 960: PUSH
 961: LD_INT 0
 963: PUSH
 964: LD_INT 0
 966: PUSH
 967: LD_INT 0
 969: PUSH
 970: EMPTY
 971: LIST
 972: LIST
 973: LIST
 974: ST_TO_ADDR
// ai_attacking_unit_hex_index = [ ] ;
 975: LD_ADDR_EXP 73
 979: PUSH
 980: EMPTY
 981: ST_TO_ADDR
// ai_retreating_attacking_humans = [ [ ] , [ ] , [ ] ] ;
 982: LD_ADDR_EXP 74
 986: PUSH
 987: EMPTY
 988: PUSH
 989: EMPTY
 990: PUSH
 991: EMPTY
 992: PUSH
 993: EMPTY
 994: LIST
 995: LIST
 996: LIST
 997: ST_TO_ADDR
// ai_control_tower_vehicles = [ [ ] , [ ] , [ ] ] ;
 998: LD_ADDR_EXP 75
1002: PUSH
1003: EMPTY
1004: PUSH
1005: EMPTY
1006: PUSH
1007: EMPTY
1008: PUSH
1009: EMPTY
1010: LIST
1011: LIST
1012: LIST
1013: ST_TO_ADDR
// ai_teleporter_exit_placed = [ false , false , false ] ;
1014: LD_ADDR_EXP 76
1018: PUSH
1019: LD_INT 0
1021: PUSH
1022: LD_INT 0
1024: PUSH
1025: LD_INT 0
1027: PUSH
1028: EMPTY
1029: LIST
1030: LIST
1031: LIST
1032: ST_TO_ADDR
// ai_excepted_buildings = [ [ ] , [ ] , [ ] ] ;
1033: LD_ADDR_EXP 77
1037: PUSH
1038: EMPTY
1039: PUSH
1040: EMPTY
1041: PUSH
1042: EMPTY
1043: PUSH
1044: EMPTY
1045: LIST
1046: LIST
1047: LIST
1048: ST_TO_ADDR
// ai_fact_extension_replace_location = [ [ ] , [ ] , [ ] ] ;
1049: LD_ADDR_EXP 78
1053: PUSH
1054: EMPTY
1055: PUSH
1056: EMPTY
1057: PUSH
1058: EMPTY
1059: PUSH
1060: EMPTY
1061: LIST
1062: LIST
1063: LIST
1064: ST_TO_ADDR
// ai_facts_with_ext_rebuild_map = [ ] ;
1065: LD_ADDR_EXP 85
1069: PUSH
1070: EMPTY
1071: ST_TO_ADDR
// ai_dismantle_these_buildings = [ [ ] , [ ] , [ ] ] ;
1072: LD_ADDR_EXP 79
1076: PUSH
1077: EMPTY
1078: PUSH
1079: EMPTY
1080: PUSH
1081: EMPTY
1082: PUSH
1083: EMPTY
1084: LIST
1085: LIST
1086: LIST
1087: ST_TO_ADDR
// ai_units_to_export = [ [ ] , [ ] , [ ] ] ;
1088: LD_ADDR_EXP 80
1092: PUSH
1093: EMPTY
1094: PUSH
1095: EMPTY
1096: PUSH
1097: EMPTY
1098: PUSH
1099: EMPTY
1100: LIST
1101: LIST
1102: LIST
1103: ST_TO_ADDR
// ai_exported_units = [ [ ] , [ ] , [ ] ] ;
1104: LD_ADDR_EXP 81
1108: PUSH
1109: EMPTY
1110: PUSH
1111: EMPTY
1112: PUSH
1113: EMPTY
1114: PUSH
1115: EMPTY
1116: LIST
1117: LIST
1118: LIST
1119: ST_TO_ADDR
// ai_imported_units = [ [ ] , [ ] , [ ] ] ;
1120: LD_ADDR_EXP 82
1124: PUSH
1125: EMPTY
1126: PUSH
1127: EMPTY
1128: PUSH
1129: EMPTY
1130: PUSH
1131: EMPTY
1132: LIST
1133: LIST
1134: LIST
1135: ST_TO_ADDR
// ai_taufield_vehicles = [ [ ] , [ ] , [ ] ] ;
1136: LD_ADDR_EXP 83
1140: PUSH
1141: EMPTY
1142: PUSH
1143: EMPTY
1144: PUSH
1145: EMPTY
1146: PUSH
1147: EMPTY
1148: LIST
1149: LIST
1150: LIST
1151: ST_TO_ADDR
// ai_implosion_vehicles = [ [ ] , [ ] , [ ] ] ;
1152: LD_ADDR_EXP 84
1156: PUSH
1157: EMPTY
1158: PUSH
1159: EMPTY
1160: PUSH
1161: EMPTY
1162: PUSH
1163: EMPTY
1164: LIST
1165: LIST
1166: LIST
1167: ST_TO_ADDR
// ai_time_shift_data = [ [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] ] ;
1168: LD_ADDR_EXP 86
1172: PUSH
1173: EMPTY
1174: PUSH
1175: EMPTY
1176: PUSH
1177: EMPTY
1178: PUSH
1179: EMPTY
1180: PUSH
1181: EMPTY
1182: PUSH
1183: EMPTY
1184: PUSH
1185: EMPTY
1186: PUSH
1187: EMPTY
1188: PUSH
1189: EMPTY
1190: LIST
1191: LIST
1192: LIST
1193: LIST
1194: LIST
1195: LIST
1196: LIST
1197: LIST
1198: ST_TO_ADDR
// ai_time_shift_hexes = [ [ ] , [ ] , [ ] ] ;
1199: LD_ADDR_EXP 87
1203: PUSH
1204: EMPTY
1205: PUSH
1206: EMPTY
1207: PUSH
1208: EMPTY
1209: PUSH
1210: EMPTY
1211: LIST
1212: LIST
1213: LIST
1214: ST_TO_ADDR
// ai_time_shift_hexes_underway = [ [ ] , [ ] , [ ] ] ;
1215: LD_ADDR_EXP 88
1219: PUSH
1220: EMPTY
1221: PUSH
1222: EMPTY
1223: PUSH
1224: EMPTY
1225: PUSH
1226: EMPTY
1227: LIST
1228: LIST
1229: LIST
1230: ST_TO_ADDR
// Initiate_ai_contact_time ;
1231: CALL 1604 0 0
// ai_attack_ground_info_initial = [ ] ;
1235: LD_ADDR_EXP 90
1239: PUSH
1240: EMPTY
1241: ST_TO_ADDR
// ai_attack_ground_info_sustain = [ ] ;
1242: LD_ADDR_EXP 91
1246: PUSH
1247: EMPTY
1248: ST_TO_ADDR
// InitComputerLvlSystem ;
1249: CALL 22685 0 0
// InitCrateModule ;
1253: CALL 18391 0 0
// num_farmer_cargo_bays_destroyed = 0 ;
1257: LD_ADDR_EXP 111
1261: PUSH
1262: LD_INT 0
1264: ST_TO_ADDR
// all_mines_hexes = [ ] ;
1265: LD_ADDR_EXP 112
1269: PUSH
1270: EMPTY
1271: ST_TO_ADDR
// farmer_defence_mines_centerhexes = [ ] ;
1272: LD_ADDR_EXP 113
1276: PUSH
1277: EMPTY
1278: ST_TO_ADDR
// farmer_defence_num_mines = - 1 ;
1279: LD_ADDR_EXP 114
1283: PUSH
1284: LD_INT 1
1286: NEG
1287: ST_TO_ADDR
// farmer_mine_guy = 0 ;
1288: LD_ADDR_EXP 115
1292: PUSH
1293: LD_INT 0
1295: ST_TO_ADDR
// farmer_defence_mines_hexes = [ ] ;
1296: LD_ADDR_EXP 116
1300: PUSH
1301: EMPTY
1302: ST_TO_ADDR
// war_vehicle_filter = [ [ f_not , [ f_weapon , ru_cargo_bay ] ] , [ f_not , [ f_weapon , ru_time_lapser ] ] ] ;
1303: LD_ADDR_EXP 117
1307: PUSH
1308: LD_INT 3
1310: PUSH
1311: LD_INT 34
1313: PUSH
1314: LD_INT 51
1316: PUSH
1317: EMPTY
1318: LIST
1319: LIST
1320: PUSH
1321: EMPTY
1322: LIST
1323: LIST
1324: PUSH
1325: LD_INT 3
1327: PUSH
1328: LD_INT 34
1330: PUSH
1331: LD_INT 49
1333: PUSH
1334: EMPTY
1335: LIST
1336: LIST
1337: PUSH
1338: EMPTY
1339: LIST
1340: LIST
1341: PUSH
1342: EMPTY
1343: LIST
1344: LIST
1345: ST_TO_ADDR
// player_bases_areas = [ ] ;
1346: LD_ADDR_EXP 118
1350: PUSH
1351: EMPTY
1352: ST_TO_ADDR
// farmer_attack_exit_point = 0 ;
1353: LD_ADDR_EXP 119
1357: PUSH
1358: LD_INT 0
1360: ST_TO_ADDR
// buildings_except_from_lvlup = [ ] ;
1361: LD_ADDR_EXP 120
1365: PUSH
1366: EMPTY
1367: ST_TO_ADDR
// farmer_attack_anyway_phase = 0 ;
1368: LD_ADDR_EXP 121
1372: PUSH
1373: LD_INT 0
1375: ST_TO_ADDR
// base_time_features_1 = 0 0$0 ;
1376: LD_ADDR_EXP 100
1380: PUSH
1381: LD_INT 0
1383: ST_TO_ADDR
// base_time_features_2 = 0 0$0 ;
1384: LD_ADDR_EXP 101
1388: PUSH
1389: LD_INT 0
1391: ST_TO_ADDR
// time_determined_situation = LoadVariable ( Time_determined_situation_14a_cont , 1 ) ;
1392: LD_ADDR_EXP 134
1396: PUSH
1397: LD_STRING Time_determined_situation_14a_cont
1399: PPUSH
1400: LD_INT 1
1402: PPUSH
1403: CALL_OW 30
1407: ST_TO_ADDR
// hiding_player_units = [ ] ;
1408: LD_ADDR_EXP 122
1412: PUSH
1413: EMPTY
1414: ST_TO_ADDR
// hiding_player_units_found = false ;
1415: LD_ADDR_EXP 123
1419: PUSH
1420: LD_INT 0
1422: ST_TO_ADDR
// rus_obj_given_before_survivors_found = false ;
1423: LD_ADDR_EXP 124
1427: PUSH
1428: LD_INT 0
1430: ST_TO_ADDR
// heike_farmer_dialogue_started = false ;
1431: LD_ADDR_EXP 137
1435: PUSH
1436: LD_INT 0
1438: ST_TO_ADDR
// heike_farmer_dialogue_done = false ;
1439: LD_ADDR_EXP 125
1443: PUSH
1444: LD_INT 0
1446: ST_TO_ADDR
// kozlov_trying_to_escape = false ;
1447: LD_ADDR_EXP 139
1451: PUSH
1452: LD_INT 0
1454: ST_TO_ADDR
// kozlov_captured = false ;
1455: LD_ADDR_EXP 126
1459: PUSH
1460: LD_INT 0
1462: ST_TO_ADDR
// kozlov_has_teleported = false ;
1463: LD_ADDR_EXP 127
1467: PUSH
1468: LD_INT 0
1470: ST_TO_ADDR
// kozlov_escaped = false ;
1471: LD_ADDR_EXP 128
1475: PUSH
1476: LD_INT 0
1478: ST_TO_ADDR
// kozlov_teleport_event_over = false ;
1479: LD_ADDR_EXP 129
1483: PUSH
1484: LD_INT 0
1486: ST_TO_ADDR
// kozlov_gained = false ;
1487: LD_ADDR_EXP 140
1491: PUSH
1492: LD_INT 0
1494: ST_TO_ADDR
// farmer_vehicle = 0 ;
1495: LD_ADDR_EXP 130
1499: PUSH
1500: LD_INT 0
1502: ST_TO_ADDR
// farmer_has_teleported = false ;
1503: LD_ADDR_EXP 131
1507: PUSH
1508: LD_INT 0
1510: ST_TO_ADDR
// farmer_luring_used = false ;
1511: LD_ADDR_EXP 132
1515: PUSH
1516: LD_INT 0
1518: ST_TO_ADDR
// num_damaged_or_destroyed_buildings_farmer_base = 0 ;
1519: LD_ADDR_EXP 133
1523: PUSH
1524: LD_INT 0
1526: ST_TO_ADDR
// russians_defeated = false ;
1527: LD_ADDR_EXP 135
1531: PUSH
1532: LD_INT 0
1534: ST_TO_ADDR
// farmer_defeated = false ;
1535: LD_ADDR_EXP 136
1539: PUSH
1540: LD_INT 0
1542: ST_TO_ADDR
// time_that_has_passed = 0 0$0 ;
1543: LD_ADDR_EXP 138
1547: PUSH
1548: LD_INT 0
1550: ST_TO_ADDR
// Ralph_alive = false ;
1551: LD_ADDR_EXP 141
1555: PUSH
1556: LD_INT 0
1558: ST_TO_ADDR
// LoadEnvironment ;
1559: CALL 1885 0 0
// PrepareSides ;
1563: CALL 1975 0 0
// PrepareFog ;
1567: CALL 2253 0 0
// PrepareNature ;
1571: CALL 3021 0 0
// PrepareArabians ;
1575: CALL 4003 0 0
// ScanBuildings ;
1579: CALL 7520 0 0
// PrepareComputerSides ;
1583: CALL 10820 0 0
// PrepareMines ;
1587: CALL 14021 0 0
// InitiateTimeShiftData ;
1591: CALL 1688 0 0
// InitComputerLvlFeatures ;
1595: CALL 15764 0 0
// Action ;
1599: CALL 18340 0 0
// end ;
1603: END
// function Initiate_ai_contact_time ; var i ; begin
1604: LD_INT 0
1606: PPUSH
1607: PPUSH
// ai_contact_time = [ ] ;
1608: LD_ADDR_EXP 89
1612: PUSH
1613: EMPTY
1614: ST_TO_ADDR
// for i = 1 to 8 do
1615: LD_ADDR_VAR 0 2
1619: PUSH
1620: DOUBLE
1621: LD_INT 1
1623: DEC
1624: ST_TO_ADDR
1625: LD_INT 8
1627: PUSH
1628: FOR_TO
1629: IFFALSE 1681
// ai_contact_time = ai_contact_time ^ [ [ 100000 , 100000 , 100000 , 100000 , 100000 , 100000 , 100000 , 100000 ] ] ;
1631: LD_ADDR_EXP 89
1635: PUSH
1636: LD_EXP 89
1640: PUSH
1641: LD_INT 100000
1643: PUSH
1644: LD_INT 100000
1646: PUSH
1647: LD_INT 100000
1649: PUSH
1650: LD_INT 100000
1652: PUSH
1653: LD_INT 100000
1655: PUSH
1656: LD_INT 100000
1658: PUSH
1659: LD_INT 100000
1661: PUSH
1662: LD_INT 100000
1664: PUSH
1665: EMPTY
1666: LIST
1667: LIST
1668: LIST
1669: LIST
1670: LIST
1671: LIST
1672: LIST
1673: LIST
1674: PUSH
1675: EMPTY
1676: LIST
1677: ADD
1678: ST_TO_ADDR
1679: GO 1628
1681: POP
1682: POP
// end ;
1683: LD_VAR 0 1
1687: RET
// function InitiateTimeShiftData ; var side ; begin
1688: LD_INT 0
1690: PPUSH
1691: PPUSH
// for side = 1 to 8 do
1692: LD_ADDR_VAR 0 2
1696: PUSH
1697: DOUBLE
1698: LD_INT 1
1700: DEC
1701: ST_TO_ADDR
1702: LD_INT 8
1704: PUSH
1705: FOR_TO
1706: IFFALSE 1878
// if Researched ( side , tech_st3 ) then
1708: LD_VAR 0 2
1712: PPUSH
1713: LD_INT 65
1715: PPUSH
1716: CALL_OW 325
1720: IFFALSE 1754
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 420 , 10 ] ) else
1722: LD_ADDR_EXP 86
1726: PUSH
1727: LD_EXP 86
1731: PPUSH
1732: LD_VAR 0 2
1736: PPUSH
1737: LD_INT 420
1739: PUSH
1740: LD_INT 10
1742: PUSH
1743: EMPTY
1744: LIST
1745: LIST
1746: PPUSH
1747: CALL_OW 1
1751: ST_TO_ADDR
1752: GO 1876
// if Researched ( side , tech_st2 ) then
1754: LD_VAR 0 2
1758: PPUSH
1759: LD_INT 64
1761: PPUSH
1762: CALL_OW 325
1766: IFFALSE 1800
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 420 , 10 ] ) else
1768: LD_ADDR_EXP 86
1772: PUSH
1773: LD_EXP 86
1777: PPUSH
1778: LD_VAR 0 2
1782: PPUSH
1783: LD_INT 420
1785: PUSH
1786: LD_INT 10
1788: PUSH
1789: EMPTY
1790: LIST
1791: LIST
1792: PPUSH
1793: CALL_OW 1
1797: ST_TO_ADDR
1798: GO 1876
// if Researched ( side , tech_st1 ) then
1800: LD_VAR 0 2
1804: PPUSH
1805: LD_INT 63
1807: PPUSH
1808: CALL_OW 325
1812: IFFALSE 1846
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 320 , 7 ] ) else
1814: LD_ADDR_EXP 86
1818: PUSH
1819: LD_EXP 86
1823: PPUSH
1824: LD_VAR 0 2
1828: PPUSH
1829: LD_INT 320
1831: PUSH
1832: LD_INT 7
1834: PUSH
1835: EMPTY
1836: LIST
1837: LIST
1838: PPUSH
1839: CALL_OW 1
1843: ST_TO_ADDR
1844: GO 1876
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 215 , 4 ] ) ;
1846: LD_ADDR_EXP 86
1850: PUSH
1851: LD_EXP 86
1855: PPUSH
1856: LD_VAR 0 2
1860: PPUSH
1861: LD_INT 215
1863: PUSH
1864: LD_INT 4
1866: PUSH
1867: EMPTY
1868: LIST
1869: LIST
1870: PPUSH
1871: CALL_OW 1
1875: ST_TO_ADDR
1876: GO 1705
1878: POP
1879: POP
// end ;
1880: LD_VAR 0 1
1884: RET
// function LoadEnvironment ; var list , i ; begin
1885: LD_INT 0
1887: PPUSH
1888: PPUSH
1889: PPUSH
// list = LoadVariable ( Environment_13a_cont , [ ] ) ;
1890: LD_ADDR_VAR 0 2
1894: PUSH
1895: LD_STRING Environment_13a_cont
1897: PPUSH
1898: EMPTY
1899: PPUSH
1900: CALL_OW 30
1904: ST_TO_ADDR
// if list > 0 then
1905: LD_VAR 0 2
1909: PUSH
1910: LD_INT 0
1912: GREATER
1913: IFFALSE 1970
// begin for i in ListEnvironmentArea ( whole_map_area ) do
1915: LD_ADDR_VAR 0 3
1919: PUSH
1920: LD_INT 31
1922: PPUSH
1923: CALL_OW 353
1927: PUSH
1928: FOR_IN
1929: IFFALSE 1968
// begin if not i in list then
1931: LD_VAR 0 3
1935: PUSH
1936: LD_VAR 0 2
1940: IN
1941: NOT
1942: IFFALSE 1966
// RemoveEnvironment ( i [ 1 ] , i [ 2 ] ) ;
1944: LD_VAR 0 3
1948: PUSH
1949: LD_INT 1
1951: ARRAY
1952: PPUSH
1953: LD_VAR 0 3
1957: PUSH
1958: LD_INT 2
1960: ARRAY
1961: PPUSH
1962: CALL_OW 347
// end ;
1966: GO 1928
1968: POP
1969: POP
// end ; end ;
1970: LD_VAR 0 1
1974: RET
// function PrepareSides ; begin
1975: LD_INT 0
1977: PPUSH
// nature = 0 ;
1978: LD_ADDR_EXP 4
1982: PUSH
1983: LD_INT 0
1985: ST_TO_ADDR
// russians = 3 ;
1986: LD_ADDR_EXP 3
1990: PUSH
1991: LD_INT 3
1993: ST_TO_ADDR
// farmer_side = 5 ;
1994: LD_ADDR_EXP 6
1998: PUSH
1999: LD_INT 5
2001: ST_TO_ADDR
// russians_alt = 6 ;
2002: LD_ADDR_EXP 8
2006: PUSH
2007: LD_INT 6
2009: ST_TO_ADDR
// you_alt = 7 ;
2010: LD_ADDR_EXP 5
2014: PUSH
2015: LD_INT 7
2017: ST_TO_ADDR
// you = 8 ;
2018: LD_ADDR_EXP 2
2022: PUSH
2023: LD_INT 8
2025: ST_TO_ADDR
// mines_side = 0 ;
2026: LD_ADDR_EXP 7
2030: PUSH
2031: LD_INT 0
2033: ST_TO_ADDR
// SetAttitude ( russians , farmer_side , att_friend , true ) ;
2034: LD_EXP 3
2038: PPUSH
2039: LD_EXP 6
2043: PPUSH
2044: LD_INT 1
2046: PPUSH
2047: LD_INT 1
2049: PPUSH
2050: CALL_OW 80
// SetAttitude ( russians , russians_alt , att_friend , true ) ;
2054: LD_EXP 3
2058: PPUSH
2059: LD_EXP 8
2063: PPUSH
2064: LD_INT 1
2066: PPUSH
2067: LD_INT 1
2069: PPUSH
2070: CALL_OW 80
// SetAttitude ( russians , you_alt , att_friend , true ) ;
2074: LD_EXP 3
2078: PPUSH
2079: LD_EXP 5
2083: PPUSH
2084: LD_INT 1
2086: PPUSH
2087: LD_INT 1
2089: PPUSH
2090: CALL_OW 80
// SetAttitude ( russians , you , att_enemy , true ) ;
2094: LD_EXP 3
2098: PPUSH
2099: LD_EXP 2
2103: PPUSH
2104: LD_INT 2
2106: PPUSH
2107: LD_INT 1
2109: PPUSH
2110: CALL_OW 80
// SetAttitude ( farmer_side , you_alt , att_friend , true ) ;
2114: LD_EXP 6
2118: PPUSH
2119: LD_EXP 5
2123: PPUSH
2124: LD_INT 1
2126: PPUSH
2127: LD_INT 1
2129: PPUSH
2130: CALL_OW 80
// SetAttitude ( farmer_side , russians_alt , att_friend , true ) ;
2134: LD_EXP 6
2138: PPUSH
2139: LD_EXP 8
2143: PPUSH
2144: LD_INT 1
2146: PPUSH
2147: LD_INT 1
2149: PPUSH
2150: CALL_OW 80
// SetAttitude ( farmer_side , you , att_enemy , true ) ;
2154: LD_EXP 6
2158: PPUSH
2159: LD_EXP 2
2163: PPUSH
2164: LD_INT 2
2166: PPUSH
2167: LD_INT 1
2169: PPUSH
2170: CALL_OW 80
// SetAttitude ( russians_alt , you_alt , att_friend , true ) ;
2174: LD_EXP 8
2178: PPUSH
2179: LD_EXP 5
2183: PPUSH
2184: LD_INT 1
2186: PPUSH
2187: LD_INT 1
2189: PPUSH
2190: CALL_OW 80
// SetAttitude ( russians_alt , you , att_friend , true ) ;
2194: LD_EXP 8
2198: PPUSH
2199: LD_EXP 2
2203: PPUSH
2204: LD_INT 1
2206: PPUSH
2207: LD_INT 1
2209: PPUSH
2210: CALL_OW 80
// SetAttitude ( you_alt , you , att_friend , true ) ;
2214: LD_EXP 5
2218: PPUSH
2219: LD_EXP 2
2223: PPUSH
2224: LD_INT 1
2226: PPUSH
2227: LD_INT 1
2229: PPUSH
2230: CALL_OW 80
// ChangeSideFog ( russians_alt , you ) ;
2234: LD_EXP 8
2238: PPUSH
2239: LD_EXP 2
2243: PPUSH
2244: CALL_OW 343
// end ;
2248: LD_VAR 0 1
2252: RET
// function PrepareFog ; var i , loc_list , un , temp_list , ex_loc_list , ex_id_list ; var rubun13new , rubun15new , rubun19new ; begin
2253: LD_INT 0
2255: PPUSH
2256: PPUSH
2257: PPUSH
2258: PPUSH
2259: PPUSH
2260: PPUSH
2261: PPUSH
2262: PPUSH
2263: PPUSH
2264: PPUSH
// rubun13new = rubun13 ;
2265: LD_ADDR_VAR 0 8
2269: PUSH
2270: LD_INT 24
2272: ST_TO_ADDR
// rubun15new = rubun15 ;
2273: LD_ADDR_VAR 0 9
2277: PUSH
2278: LD_INT 26
2280: ST_TO_ADDR
// rubun19new = rubun19 ;
2281: LD_ADDR_VAR 0 10
2285: PUSH
2286: LD_INT 259
2288: ST_TO_ADDR
// if difficulty <= 2 then
2289: LD_OWVAR 67
2293: PUSH
2294: LD_INT 2
2296: LESSEQUAL
2297: IFFALSE 2374
// begin ReplaceBunkerWithTurret ( rubun16 ) ;
2299: LD_INT 251
2301: PPUSH
2302: CALL 8662 0 1
// rubun13new = ReplaceBunkerWithTurret ( rubun13 ) ;
2306: LD_ADDR_VAR 0 8
2310: PUSH
2311: LD_INT 24
2313: PPUSH
2314: CALL 8662 0 1
2318: ST_TO_ADDR
// ReplaceBunkerWithTurret ( rubun12 ) ;
2319: LD_INT 47
2321: PPUSH
2322: CALL 8662 0 1
// rubun19new = ReplaceBunkerWithTurret ( rubun19 ) ;
2326: LD_ADDR_VAR 0 10
2330: PUSH
2331: LD_INT 259
2333: PPUSH
2334: CALL 8662 0 1
2338: ST_TO_ADDR
// DestroyUnit ( rubun14 ) ;
2339: LD_INT 4
2341: PPUSH
2342: CALL_OW 65
// DestroyUnit ( arbun4 ) ;
2346: LD_INT 131
2348: PPUSH
2349: CALL_OW 65
// ReplaceBunkerWithBreastwork ( arbun15 ) ;
2353: LD_INT 253
2355: PPUSH
2356: CALL 8843 0 1
// DestroyUnit ( arbun8 ) ;
2360: LD_INT 126
2362: PPUSH
2363: CALL_OW 65
// DestroyUnit ( arbun12 ) ;
2367: LD_INT 139
2369: PPUSH
2370: CALL_OW 65
// end ; if difficulty = 1 then
2374: LD_OWVAR 67
2378: PUSH
2379: LD_INT 1
2381: EQUAL
2382: IFFALSE 2469
// begin DestroyUnit ( rubun17 ) ;
2384: LD_INT 6
2386: PPUSH
2387: CALL_OW 65
// DestroyUnit ( rubun15 ) ;
2391: LD_INT 26
2393: PPUSH
2394: CALL_OW 65
// rubun15new = 0 ;
2398: LD_ADDR_VAR 0 9
2402: PUSH
2403: LD_INT 0
2405: ST_TO_ADDR
// DestroyUnit ( rubun2 ) ;
2406: LD_INT 22
2408: PPUSH
2409: CALL_OW 65
// ReplaceBunkerWithTurret ( rubun9 ) ;
2413: LD_INT 111
2415: PPUSH
2416: CALL 8662 0 1
// ReplaceBunkerWithTurret ( rubun3 ) ;
2420: LD_INT 17
2422: PPUSH
2423: CALL 8662 0 1
// ReplaceBunkerWithTurret ( rubun18 ) ;
2427: LD_INT 279
2429: PPUSH
2430: CALL 8662 0 1
// DestroyUnit ( arbun2 ) ;
2434: LD_INT 133
2436: PPUSH
2437: CALL_OW 65
// DestroyUnit ( arbun1 ) ;
2441: LD_INT 134
2443: PPUSH
2444: CALL_OW 65
// DestroyUnit ( arbun14 ) ;
2448: LD_INT 192
2450: PPUSH
2451: CALL_OW 65
// DestroyUnit ( arbun9 ) ;
2455: LD_INT 136
2457: PPUSH
2458: CALL_OW 65
// ReplaceBarracksWithArmoury ( arbar1 ) ;
2462: LD_INT 115
2464: PPUSH
2465: CALL 8995 0 1
// end ; buildings_except_from_lvlup = [ rubun13new , rubun15new , rubun19new ] ;
2469: LD_ADDR_EXP 120
2473: PUSH
2474: LD_VAR 0 8
2478: PUSH
2479: LD_VAR 0 9
2483: PUSH
2484: LD_VAR 0 10
2488: PUSH
2489: EMPTY
2490: LIST
2491: LIST
2492: LIST
2493: ST_TO_ADDR
// ex_loc_list = [ ] ;
2494: LD_ADDR_VAR 0 6
2498: PUSH
2499: EMPTY
2500: ST_TO_ADDR
// ex_id_list = [ ] ;
2501: LD_ADDR_VAR 0 7
2505: PUSH
2506: EMPTY
2507: ST_TO_ADDR
// loc_list = [ ] ;
2508: LD_ADDR_VAR 0 3
2512: PUSH
2513: EMPTY
2514: ST_TO_ADDR
// for i in FilterAllUnits ( [ f_type , unit_building ] ) do
2515: LD_ADDR_VAR 0 2
2519: PUSH
2520: LD_INT 21
2522: PUSH
2523: LD_INT 3
2525: PUSH
2526: EMPTY
2527: LIST
2528: LIST
2529: PPUSH
2530: CALL_OW 69
2534: PUSH
2535: FOR_IN
2536: IFFALSE 2742
// begin loc_list = loc_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , GetBWeapon ( i ) , GetNation ( i ) , GetSide ( i ) ] ] ;
2538: LD_ADDR_VAR 0 3
2542: PUSH
2543: LD_VAR 0 3
2547: PUSH
2548: LD_VAR 0 2
2552: PPUSH
2553: CALL_OW 250
2557: PUSH
2558: LD_VAR 0 2
2562: PPUSH
2563: CALL_OW 251
2567: PUSH
2568: LD_VAR 0 2
2572: PPUSH
2573: CALL_OW 254
2577: PUSH
2578: LD_VAR 0 2
2582: PPUSH
2583: CALL_OW 266
2587: PUSH
2588: LD_VAR 0 2
2592: PPUSH
2593: LD_INT 1
2595: PPUSH
2596: CALL_OW 268
2600: PUSH
2601: LD_VAR 0 2
2605: PPUSH
2606: LD_INT 2
2608: PPUSH
2609: CALL_OW 268
2613: PUSH
2614: LD_VAR 0 2
2618: PPUSH
2619: CALL_OW 269
2623: PUSH
2624: LD_VAR 0 2
2628: PPUSH
2629: CALL_OW 248
2633: PUSH
2634: LD_VAR 0 2
2638: PPUSH
2639: CALL_OW 255
2643: PUSH
2644: EMPTY
2645: LIST
2646: LIST
2647: LIST
2648: LIST
2649: LIST
2650: LIST
2651: LIST
2652: LIST
2653: LIST
2654: PUSH
2655: EMPTY
2656: LIST
2657: ADD
2658: ST_TO_ADDR
// if i in buildings_except_from_lvlup then
2659: LD_VAR 0 2
2663: PUSH
2664: LD_EXP 120
2668: IN
2669: IFFALSE 2731
// ex_loc_list = Insert ( ex_loc_list , 1 , [ loc_list [ loc_list + 0 ] [ 1 ] , loc_list [ loc_list + 0 ] [ 2 ] ] ) ;
2671: LD_ADDR_VAR 0 6
2675: PUSH
2676: LD_VAR 0 6
2680: PPUSH
2681: LD_INT 1
2683: PPUSH
2684: LD_VAR 0 3
2688: PUSH
2689: LD_VAR 0 3
2693: PUSH
2694: LD_INT 0
2696: PLUS
2697: ARRAY
2698: PUSH
2699: LD_INT 1
2701: ARRAY
2702: PUSH
2703: LD_VAR 0 3
2707: PUSH
2708: LD_VAR 0 3
2712: PUSH
2713: LD_INT 0
2715: PLUS
2716: ARRAY
2717: PUSH
2718: LD_INT 2
2720: ARRAY
2721: PUSH
2722: EMPTY
2723: LIST
2724: LIST
2725: PPUSH
2726: CALL_OW 2
2730: ST_TO_ADDR
// DestroyUnit ( i ) ;
2731: LD_VAR 0 2
2735: PPUSH
2736: CALL_OW 65
// end ;
2740: GO 2535
2742: POP
2743: POP
// ClearAllFogForSide ( you ) ;
2744: LD_EXP 2
2748: PPUSH
2749: CALL_OW 520
// InitUc ;
2753: CALL_OW 18
// InitBc ;
2757: CALL_OW 21
// for i in loc_list do
2761: LD_ADDR_VAR 0 2
2765: PUSH
2766: LD_VAR 0 3
2770: PUSH
2771: FOR_IN
2772: IFFALSE 3004
// begin uc_side = i [ 9 ] ;
2774: LD_ADDR_OWVAR 20
2778: PUSH
2779: LD_VAR 0 2
2783: PUSH
2784: LD_INT 9
2786: ARRAY
2787: ST_TO_ADDR
// uc_nation = i [ 8 ] ;
2788: LD_ADDR_OWVAR 21
2792: PUSH
2793: LD_VAR 0 2
2797: PUSH
2798: LD_INT 8
2800: ARRAY
2801: ST_TO_ADDR
// bc_type = i [ 4 ] ;
2802: LD_ADDR_OWVAR 42
2806: PUSH
2807: LD_VAR 0 2
2811: PUSH
2812: LD_INT 4
2814: ARRAY
2815: ST_TO_ADDR
// bc_kind1 = i [ 5 ] ;
2816: LD_ADDR_OWVAR 44
2820: PUSH
2821: LD_VAR 0 2
2825: PUSH
2826: LD_INT 5
2828: ARRAY
2829: ST_TO_ADDR
// bc_kind2 = i [ 6 ] ;
2830: LD_ADDR_OWVAR 45
2834: PUSH
2835: LD_VAR 0 2
2839: PUSH
2840: LD_INT 6
2842: ARRAY
2843: ST_TO_ADDR
// if bc_type in [ b_oil_mine , b_siberite_mine ] then
2844: LD_OWVAR 42
2848: PUSH
2849: LD_INT 29
2851: PUSH
2852: LD_INT 30
2854: PUSH
2855: EMPTY
2856: LIST
2857: LIST
2858: IN
2859: IFFALSE 2888
// SetResourceVisibility ( i [ 1 ] , i [ 2 ] , uc_side ) ;
2861: LD_VAR 0 2
2865: PUSH
2866: LD_INT 1
2868: ARRAY
2869: PPUSH
2870: LD_VAR 0 2
2874: PUSH
2875: LD_INT 2
2877: ARRAY
2878: PPUSH
2879: LD_OWVAR 20
2883: PPUSH
2884: CALL_OW 441
// un = CreateAndPlaceBuildingXYD ( i [ 1 ] , i [ 2 ] , i [ 3 ] ) ;
2888: LD_ADDR_VAR 0 4
2892: PUSH
2893: LD_VAR 0 2
2897: PUSH
2898: LD_INT 1
2900: ARRAY
2901: PPUSH
2902: LD_VAR 0 2
2906: PUSH
2907: LD_INT 2
2909: ARRAY
2910: PPUSH
2911: LD_VAR 0 2
2915: PUSH
2916: LD_INT 3
2918: ARRAY
2919: PPUSH
2920: CALL_OW 47
2924: ST_TO_ADDR
// if i [ 7 ] > 0 then
2925: LD_VAR 0 2
2929: PUSH
2930: LD_INT 7
2932: ARRAY
2933: PUSH
2934: LD_INT 0
2936: GREATER
2937: IFFALSE 2957
// PlaceWeaponTurret ( un , i [ 7 ] ) ;
2939: LD_VAR 0 4
2943: PPUSH
2944: LD_VAR 0 2
2948: PUSH
2949: LD_INT 7
2951: ARRAY
2952: PPUSH
2953: CALL_OW 431
// if [ i [ 1 ] , i [ 2 ] ] in ex_loc_list then
2957: LD_VAR 0 2
2961: PUSH
2962: LD_INT 1
2964: ARRAY
2965: PUSH
2966: LD_VAR 0 2
2970: PUSH
2971: LD_INT 2
2973: ARRAY
2974: PUSH
2975: EMPTY
2976: LIST
2977: LIST
2978: PUSH
2979: LD_VAR 0 6
2983: IN
2984: IFFALSE 3002
// ex_id_list = ex_id_list ^ un ;
2986: LD_ADDR_VAR 0 7
2990: PUSH
2991: LD_VAR 0 7
2995: PUSH
2996: LD_VAR 0 4
3000: ADD
3001: ST_TO_ADDR
// end ;
3002: GO 2771
3004: POP
3005: POP
// buildings_except_from_lvlup = ex_id_list ;
3006: LD_ADDR_EXP 120
3010: PUSH
3011: LD_VAR 0 7
3015: ST_TO_ADDR
// end ;
3016: LD_VAR 0 1
3020: RET
// function PrepareNature ; var i , spots , num , agres , count ; begin
3021: LD_INT 0
3023: PPUSH
3024: PPUSH
3025: PPUSH
3026: PPUSH
3027: PPUSH
3028: PPUSH
// spots = [ [ 118 , 6 ] , [ 135 , 78 ] , [ 134 , 87 ] , [ 172 , 115 ] , [ 128 , 94 ] , [ 132 , 114 ] , [ 108 , 101 ] , [ 12 , 4 ] , [ 36 , 13 ] , [ 42 , 22 ] , [ 50 , 31 ] , [ 147 , 84 ] ] ;
3029: LD_ADDR_VAR 0 3
3033: PUSH
3034: LD_INT 118
3036: PUSH
3037: LD_INT 6
3039: PUSH
3040: EMPTY
3041: LIST
3042: LIST
3043: PUSH
3044: LD_INT 135
3046: PUSH
3047: LD_INT 78
3049: PUSH
3050: EMPTY
3051: LIST
3052: LIST
3053: PUSH
3054: LD_INT 134
3056: PUSH
3057: LD_INT 87
3059: PUSH
3060: EMPTY
3061: LIST
3062: LIST
3063: PUSH
3064: LD_INT 172
3066: PUSH
3067: LD_INT 115
3069: PUSH
3070: EMPTY
3071: LIST
3072: LIST
3073: PUSH
3074: LD_INT 128
3076: PUSH
3077: LD_INT 94
3079: PUSH
3080: EMPTY
3081: LIST
3082: LIST
3083: PUSH
3084: LD_INT 132
3086: PUSH
3087: LD_INT 114
3089: PUSH
3090: EMPTY
3091: LIST
3092: LIST
3093: PUSH
3094: LD_INT 108
3096: PUSH
3097: LD_INT 101
3099: PUSH
3100: EMPTY
3101: LIST
3102: LIST
3103: PUSH
3104: LD_INT 12
3106: PUSH
3107: LD_INT 4
3109: PUSH
3110: EMPTY
3111: LIST
3112: LIST
3113: PUSH
3114: LD_INT 36
3116: PUSH
3117: LD_INT 13
3119: PUSH
3120: EMPTY
3121: LIST
3122: LIST
3123: PUSH
3124: LD_INT 42
3126: PUSH
3127: LD_INT 22
3129: PUSH
3130: EMPTY
3131: LIST
3132: LIST
3133: PUSH
3134: LD_INT 50
3136: PUSH
3137: LD_INT 31
3139: PUSH
3140: EMPTY
3141: LIST
3142: LIST
3143: PUSH
3144: LD_INT 147
3146: PUSH
3147: LD_INT 84
3149: PUSH
3150: EMPTY
3151: LIST
3152: LIST
3153: PUSH
3154: EMPTY
3155: LIST
3156: LIST
3157: LIST
3158: LIST
3159: LIST
3160: LIST
3161: LIST
3162: LIST
3163: LIST
3164: LIST
3165: LIST
3166: LIST
3167: ST_TO_ADDR
// InitUc ;
3168: CALL_OW 18
// InitHc ;
3172: CALL_OW 19
// uc_side = nature ;
3176: LD_ADDR_OWVAR 20
3180: PUSH
3181: LD_EXP 4
3185: ST_TO_ADDR
// uc_nation = nation_nature ;
3186: LD_ADDR_OWVAR 21
3190: PUSH
3191: LD_INT 0
3193: ST_TO_ADDR
// agres = - 10 + difficulty * 20 ;
3194: LD_ADDR_VAR 0 5
3198: PUSH
3199: LD_INT 10
3201: NEG
3202: PUSH
3203: LD_OWVAR 67
3207: PUSH
3208: LD_INT 20
3210: MUL
3211: PLUS
3212: ST_TO_ADDR
// count = [ 4 , 3 , 2 ] [ difficulty ] ;
3213: LD_ADDR_VAR 0 6
3217: PUSH
3218: LD_INT 4
3220: PUSH
3221: LD_INT 3
3223: PUSH
3224: LD_INT 2
3226: PUSH
3227: EMPTY
3228: LIST
3229: LIST
3230: LIST
3231: PUSH
3232: LD_OWVAR 67
3236: ARRAY
3237: ST_TO_ADDR
// hc_class = class_apeman ;
3238: LD_ADDR_OWVAR 28
3242: PUSH
3243: LD_INT 12
3245: ST_TO_ADDR
// for i = 1 to count do
3246: LD_ADDR_VAR 0 2
3250: PUSH
3251: DOUBLE
3252: LD_INT 1
3254: DEC
3255: ST_TO_ADDR
3256: LD_VAR 0 6
3260: PUSH
3261: FOR_TO
3262: IFFALSE 3490
// begin if spots = 0 then
3264: LD_VAR 0 3
3268: PUSH
3269: LD_INT 0
3271: EQUAL
3272: IFFALSE 3278
// exit ;
3274: POP
3275: POP
3276: GO 3998
// uc_direction = Rand ( 0 , 5 ) ;
3278: LD_ADDR_OWVAR 24
3282: PUSH
3283: LD_INT 0
3285: PPUSH
3286: LD_INT 5
3288: PPUSH
3289: CALL_OW 12
3293: ST_TO_ADDR
// hc_agressivity = Rand ( - 1 * agres , agres ) ;
3294: LD_ADDR_OWVAR 35
3298: PUSH
3299: LD_INT 1
3301: NEG
3302: PUSH
3303: LD_VAR 0 5
3307: MUL
3308: PPUSH
3309: LD_VAR 0 5
3313: PPUSH
3314: CALL_OW 12
3318: ST_TO_ADDR
// hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
3319: LD_ADDR_OWVAR 29
3323: PUSH
3324: LD_INT 11
3326: PPUSH
3327: LD_INT 13
3329: PPUSH
3330: CALL_OW 12
3334: PUSH
3335: LD_INT 10
3337: PPUSH
3338: LD_INT 11
3340: PPUSH
3341: CALL_OW 12
3345: PUSH
3346: EMPTY
3347: LIST
3348: LIST
3349: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
3350: LD_ADDR_OWVAR 27
3354: PUSH
3355: LD_INT 1
3357: PPUSH
3358: LD_INT 2
3360: PPUSH
3361: CALL_OW 12
3365: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 1 ) , Rand ( 0 , 1 ) , 0 , 0 ] ;
3366: LD_ADDR_OWVAR 31
3370: PUSH
3371: LD_INT 0
3373: PPUSH
3374: LD_INT 1
3376: PPUSH
3377: CALL_OW 12
3381: PUSH
3382: LD_INT 0
3384: PPUSH
3385: LD_INT 1
3387: PPUSH
3388: CALL_OW 12
3392: PUSH
3393: LD_INT 0
3395: PUSH
3396: LD_INT 0
3398: PUSH
3399: EMPTY
3400: LIST
3401: LIST
3402: LIST
3403: LIST
3404: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
3405: LD_ADDR_VAR 0 4
3409: PUSH
3410: LD_INT 1
3412: PPUSH
3413: LD_VAR 0 3
3417: PPUSH
3418: CALL_OW 12
3422: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
3423: CALL_OW 44
3427: PPUSH
3428: LD_VAR 0 3
3432: PUSH
3433: LD_VAR 0 4
3437: ARRAY
3438: PUSH
3439: LD_INT 1
3441: ARRAY
3442: PPUSH
3443: LD_VAR 0 3
3447: PUSH
3448: LD_VAR 0 4
3452: ARRAY
3453: PUSH
3454: LD_INT 2
3456: ARRAY
3457: PPUSH
3458: LD_INT 5
3460: PPUSH
3461: LD_INT 0
3463: PPUSH
3464: CALL_OW 50
// spots = Delete ( spots , num ) ;
3468: LD_ADDR_VAR 0 3
3472: PUSH
3473: LD_VAR 0 3
3477: PPUSH
3478: LD_VAR 0 4
3482: PPUSH
3483: CALL_OW 3
3487: ST_TO_ADDR
// end ;
3488: GO 3261
3490: POP
3491: POP
// count = [ 0 , 1 , 2 ] [ difficulty ] ;
3492: LD_ADDR_VAR 0 6
3496: PUSH
3497: LD_INT 0
3499: PUSH
3500: LD_INT 1
3502: PUSH
3503: LD_INT 2
3505: PUSH
3506: EMPTY
3507: LIST
3508: LIST
3509: LIST
3510: PUSH
3511: LD_OWVAR 67
3515: ARRAY
3516: ST_TO_ADDR
// hc_gallery = nature_foreg ;
3517: LD_ADDR_OWVAR 33
3521: PUSH
3522: LD_STRING nature_foreg
3524: ST_TO_ADDR
// hc_face_number = 3 ;
3525: LD_ADDR_OWVAR 34
3529: PUSH
3530: LD_INT 3
3532: ST_TO_ADDR
// hc_class = class_tiger ;
3533: LD_ADDR_OWVAR 28
3537: PUSH
3538: LD_INT 14
3540: ST_TO_ADDR
// hc_sex = sex_male ;
3541: LD_ADDR_OWVAR 27
3545: PUSH
3546: LD_INT 1
3548: ST_TO_ADDR
// for i = 1 to count do
3549: LD_ADDR_VAR 0 2
3553: PUSH
3554: DOUBLE
3555: LD_INT 1
3557: DEC
3558: ST_TO_ADDR
3559: LD_VAR 0 6
3563: PUSH
3564: FOR_TO
3565: IFFALSE 3768
// begin if spots = 0 then
3567: LD_VAR 0 3
3571: PUSH
3572: LD_INT 0
3574: EQUAL
3575: IFFALSE 3581
// exit ;
3577: POP
3578: POP
3579: GO 3998
// uc_direction = Rand ( 0 , 5 ) ;
3581: LD_ADDR_OWVAR 24
3585: PUSH
3586: LD_INT 0
3588: PPUSH
3589: LD_INT 5
3591: PPUSH
3592: CALL_OW 12
3596: ST_TO_ADDR
// hc_agressivity = Rand ( 0 , agres ) ;
3597: LD_ADDR_OWVAR 35
3601: PUSH
3602: LD_INT 0
3604: PPUSH
3605: LD_VAR 0 5
3609: PPUSH
3610: CALL_OW 12
3614: ST_TO_ADDR
// hc_attr = [ Rand ( 11 , 12 ) , Rand ( 10 , 11 ) ] ;
3615: LD_ADDR_OWVAR 29
3619: PUSH
3620: LD_INT 11
3622: PPUSH
3623: LD_INT 12
3625: PPUSH
3626: CALL_OW 12
3630: PUSH
3631: LD_INT 10
3633: PPUSH
3634: LD_INT 11
3636: PPUSH
3637: CALL_OW 12
3641: PUSH
3642: EMPTY
3643: LIST
3644: LIST
3645: ST_TO_ADDR
// hc_skills = [ Rand ( 2 , difficulty + 1 ) , 0 , 0 , 0 ] ;
3646: LD_ADDR_OWVAR 31
3650: PUSH
3651: LD_INT 2
3653: PPUSH
3654: LD_OWVAR 67
3658: PUSH
3659: LD_INT 1
3661: PLUS
3662: PPUSH
3663: CALL_OW 12
3667: PUSH
3668: LD_INT 0
3670: PUSH
3671: LD_INT 0
3673: PUSH
3674: LD_INT 0
3676: PUSH
3677: EMPTY
3678: LIST
3679: LIST
3680: LIST
3681: LIST
3682: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
3683: LD_ADDR_VAR 0 4
3687: PUSH
3688: LD_INT 1
3690: PPUSH
3691: LD_VAR 0 3
3695: PPUSH
3696: CALL_OW 12
3700: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
3701: CALL_OW 44
3705: PPUSH
3706: LD_VAR 0 3
3710: PUSH
3711: LD_VAR 0 4
3715: ARRAY
3716: PUSH
3717: LD_INT 1
3719: ARRAY
3720: PPUSH
3721: LD_VAR 0 3
3725: PUSH
3726: LD_VAR 0 4
3730: ARRAY
3731: PUSH
3732: LD_INT 2
3734: ARRAY
3735: PPUSH
3736: LD_INT 5
3738: PPUSH
3739: LD_INT 0
3741: PPUSH
3742: CALL_OW 50
// spots = Delete ( spots , num ) ;
3746: LD_ADDR_VAR 0 3
3750: PUSH
3751: LD_VAR 0 3
3755: PPUSH
3756: LD_VAR 0 4
3760: PPUSH
3761: CALL_OW 3
3765: ST_TO_ADDR
// end ;
3766: GO 3564
3768: POP
3769: POP
// hc_class = class_phororhacos ;
3770: LD_ADDR_OWVAR 28
3774: PUSH
3775: LD_INT 18
3777: ST_TO_ADDR
// hc_gallery = nature_foreg ;
3778: LD_ADDR_OWVAR 33
3782: PUSH
3783: LD_STRING nature_foreg
3785: ST_TO_ADDR
// hc_face_number = 1 ;
3786: LD_ADDR_OWVAR 34
3790: PUSH
3791: LD_INT 1
3793: ST_TO_ADDR
// hc_skills = [ 0 , 0 , 0 , 0 ] ;
3794: LD_ADDR_OWVAR 31
3798: PUSH
3799: LD_INT 0
3801: PUSH
3802: LD_INT 0
3804: PUSH
3805: LD_INT 0
3807: PUSH
3808: LD_INT 0
3810: PUSH
3811: EMPTY
3812: LIST
3813: LIST
3814: LIST
3815: LIST
3816: ST_TO_ADDR
// for i = 1 to 2 do
3817: LD_ADDR_VAR 0 2
3821: PUSH
3822: DOUBLE
3823: LD_INT 1
3825: DEC
3826: ST_TO_ADDR
3827: LD_INT 2
3829: PUSH
3830: FOR_TO
3831: IFFALSE 3996
// begin if spots = 0 then
3833: LD_VAR 0 3
3837: PUSH
3838: LD_INT 0
3840: EQUAL
3841: IFFALSE 3847
// exit ;
3843: POP
3844: POP
3845: GO 3998
// uc_direction = Rand ( 0 , 5 ) ;
3847: LD_ADDR_OWVAR 24
3851: PUSH
3852: LD_INT 0
3854: PPUSH
3855: LD_INT 5
3857: PPUSH
3858: CALL_OW 12
3862: ST_TO_ADDR
// hc_agressivity = Rand ( - 30 , 0 ) ;
3863: LD_ADDR_OWVAR 35
3867: PUSH
3868: LD_INT 30
3870: NEG
3871: PPUSH
3872: LD_INT 0
3874: PPUSH
3875: CALL_OW 12
3879: ST_TO_ADDR
// hc_attr = [ Rand ( 9 , 10 ) , Rand ( 11 , 12 ) ] ;
3880: LD_ADDR_OWVAR 29
3884: PUSH
3885: LD_INT 9
3887: PPUSH
3888: LD_INT 10
3890: PPUSH
3891: CALL_OW 12
3895: PUSH
3896: LD_INT 11
3898: PPUSH
3899: LD_INT 12
3901: PPUSH
3902: CALL_OW 12
3906: PUSH
3907: EMPTY
3908: LIST
3909: LIST
3910: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
3911: LD_ADDR_VAR 0 4
3915: PUSH
3916: LD_INT 1
3918: PPUSH
3919: LD_VAR 0 3
3923: PPUSH
3924: CALL_OW 12
3928: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
3929: CALL_OW 44
3933: PPUSH
3934: LD_VAR 0 3
3938: PUSH
3939: LD_VAR 0 4
3943: ARRAY
3944: PUSH
3945: LD_INT 1
3947: ARRAY
3948: PPUSH
3949: LD_VAR 0 3
3953: PUSH
3954: LD_VAR 0 4
3958: ARRAY
3959: PUSH
3960: LD_INT 2
3962: ARRAY
3963: PPUSH
3964: LD_INT 5
3966: PPUSH
3967: LD_INT 0
3969: PPUSH
3970: CALL_OW 50
// spots = Delete ( spots , num ) ;
3974: LD_ADDR_VAR 0 3
3978: PUSH
3979: LD_VAR 0 3
3983: PPUSH
3984: LD_VAR 0 4
3988: PPUSH
3989: CALL_OW 3
3993: ST_TO_ADDR
// end ;
3994: GO 3830
3996: POP
3997: POP
// end ;
3998: LD_VAR 0 1
4002: RET
// function PrepareArabians ; var with_player_list , escaped_list , i , temp_unit , val , k , temp_list , temp_list_2 , g , t , temp_list_3 ; begin
4003: LD_INT 0
4005: PPUSH
4006: PPUSH
4007: PPUSH
4008: PPUSH
4009: PPUSH
4010: PPUSH
4011: PPUSH
4012: PPUSH
4013: PPUSH
4014: PPUSH
4015: PPUSH
4016: PPUSH
// InitHc ;
4017: CALL_OW 19
// InitUc ;
4021: CALL_OW 18
// uc_side = you ;
4025: LD_ADDR_OWVAR 20
4029: PUSH
4030: LD_EXP 2
4034: ST_TO_ADDR
// uc_nation = nation_arabian ;
4035: LD_ADDR_OWVAR 21
4039: PUSH
4040: LD_INT 2
4042: ST_TO_ADDR
// with_player_list = [ ] ;
4043: LD_ADDR_VAR 0 2
4047: PUSH
4048: EMPTY
4049: ST_TO_ADDR
// escaped_list = [ ] ;
4050: LD_ADDR_VAR 0 3
4054: PUSH
4055: EMPTY
4056: ST_TO_ADDR
// if not testing then
4057: LD_EXP 1
4061: NOT
4062: IFFALSE 5102
// begin Heike = CreateCharacter ( Heike_14a_cont ) ;
4064: LD_ADDR_EXP 9
4068: PUSH
4069: LD_STRING Heike_14a_cont
4071: PPUSH
4072: CALL_OW 34
4076: ST_TO_ADDR
// with_player_list = with_player_list ^ Heike ;
4077: LD_ADDR_VAR 0 2
4081: PUSH
4082: LD_VAR 0 2
4086: PUSH
4087: LD_EXP 9
4091: ADD
4092: ST_TO_ADDR
// if TestCharacters ( Olaf_14a_cont ) then
4093: LD_STRING Olaf_14a_cont
4095: PPUSH
4096: CALL_OW 28
4100: IFFALSE 4133
// begin Olaf = CreateCharacter ( Olaf_14a_cont ) ;
4102: LD_ADDR_EXP 10
4106: PUSH
4107: LD_STRING Olaf_14a_cont
4109: PPUSH
4110: CALL_OW 34
4114: ST_TO_ADDR
// with_player_list = with_player_list ^ Olaf ;
4115: LD_ADDR_VAR 0 2
4119: PUSH
4120: LD_VAR 0 2
4124: PUSH
4125: LD_EXP 10
4129: ADD
4130: ST_TO_ADDR
// end else
4131: GO 4181
// if TestCharacters ( Olaf_14a_not_sel ) then
4133: LD_STRING Olaf_14a_not_sel
4135: PPUSH
4136: CALL_OW 28
4140: IFFALSE 4173
// begin Olaf = CreateCharacter ( Olaf_14a_not_sel ) ;
4142: LD_ADDR_EXP 10
4146: PUSH
4147: LD_STRING Olaf_14a_not_sel
4149: PPUSH
4150: CALL_OW 34
4154: ST_TO_ADDR
// escaped_list = escaped_list ^ Olaf ;
4155: LD_ADDR_VAR 0 3
4159: PUSH
4160: LD_VAR 0 3
4164: PUSH
4165: LD_EXP 10
4169: ADD
4170: ST_TO_ADDR
// end else
4171: GO 4181
// Olaf = 0 ;
4173: LD_ADDR_EXP 10
4177: PUSH
4178: LD_INT 0
4180: ST_TO_ADDR
// if TestCharacters ( Sonya_14a_cont ) then
4181: LD_STRING Sonya_14a_cont
4183: PPUSH
4184: CALL_OW 28
4188: IFFALSE 4221
// begin Sonya = CreateCharacter ( Sonya_14a_cont ) ;
4190: LD_ADDR_EXP 11
4194: PUSH
4195: LD_STRING Sonya_14a_cont
4197: PPUSH
4198: CALL_OW 34
4202: ST_TO_ADDR
// with_player_list = with_player_list ^ Sonya ;
4203: LD_ADDR_VAR 0 2
4207: PUSH
4208: LD_VAR 0 2
4212: PUSH
4213: LD_EXP 11
4217: ADD
4218: ST_TO_ADDR
// end else
4219: GO 4269
// if TestCharacters ( Sonya_14a_not_sel ) then
4221: LD_STRING Sonya_14a_not_sel
4223: PPUSH
4224: CALL_OW 28
4228: IFFALSE 4261
// begin Sonya = CreateCharacter ( Sonya_14a_not_sel ) ;
4230: LD_ADDR_EXP 11
4234: PUSH
4235: LD_STRING Sonya_14a_not_sel
4237: PPUSH
4238: CALL_OW 34
4242: ST_TO_ADDR
// escaped_list = escaped_list ^ Sonya ;
4243: LD_ADDR_VAR 0 3
4247: PUSH
4248: LD_VAR 0 3
4252: PUSH
4253: LD_EXP 11
4257: ADD
4258: ST_TO_ADDR
// end else
4259: GO 4269
// Sonya = 0 ;
4261: LD_ADDR_EXP 11
4265: PUSH
4266: LD_INT 0
4268: ST_TO_ADDR
// if TestCharacters ( Oswald_14a_cont ) then
4269: LD_STRING Oswald_14a_cont
4271: PPUSH
4272: CALL_OW 28
4276: IFFALSE 4309
// begin Oswald = CreateCharacter ( Oswald_14a_cont ) ;
4278: LD_ADDR_EXP 12
4282: PUSH
4283: LD_STRING Oswald_14a_cont
4285: PPUSH
4286: CALL_OW 34
4290: ST_TO_ADDR
// with_player_list = with_player_list ^ Oswald ;
4291: LD_ADDR_VAR 0 2
4295: PUSH
4296: LD_VAR 0 2
4300: PUSH
4301: LD_EXP 12
4305: ADD
4306: ST_TO_ADDR
// end else
4307: GO 4357
// if TestCharacters ( Oswald_14a_not_sel ) then
4309: LD_STRING Oswald_14a_not_sel
4311: PPUSH
4312: CALL_OW 28
4316: IFFALSE 4349
// begin Oswald = CreateCharacter ( Oswald_14a_not_sel ) ;
4318: LD_ADDR_EXP 12
4322: PUSH
4323: LD_STRING Oswald_14a_not_sel
4325: PPUSH
4326: CALL_OW 34
4330: ST_TO_ADDR
// escaped_list = escaped_list ^ Oswald ;
4331: LD_ADDR_VAR 0 3
4335: PUSH
4336: LD_VAR 0 3
4340: PUSH
4341: LD_EXP 12
4345: ADD
4346: ST_TO_ADDR
// end else
4347: GO 4357
// Oswald = 0 ;
4349: LD_ADDR_EXP 12
4353: PUSH
4354: LD_INT 0
4356: ST_TO_ADDR
// if TestCharacters ( Ralph_14a_cont ) then
4357: LD_STRING Ralph_14a_cont
4359: PPUSH
4360: CALL_OW 28
4364: IFFALSE 4405
// begin Ralph = CreateCharacter ( Ralph_14a_cont ) ;
4366: LD_ADDR_EXP 13
4370: PUSH
4371: LD_STRING Ralph_14a_cont
4373: PPUSH
4374: CALL_OW 34
4378: ST_TO_ADDR
// with_player_list = with_player_list ^ Ralph ;
4379: LD_ADDR_VAR 0 2
4383: PUSH
4384: LD_VAR 0 2
4388: PUSH
4389: LD_EXP 13
4393: ADD
4394: ST_TO_ADDR
// Ralph_alive = true ;
4395: LD_ADDR_EXP 141
4399: PUSH
4400: LD_INT 1
4402: ST_TO_ADDR
// end else
4403: GO 4461
// if TestCharacters ( Ralph_14a_not_sel ) then
4405: LD_STRING Ralph_14a_not_sel
4407: PPUSH
4408: CALL_OW 28
4412: IFFALSE 4453
// begin Ralph = CreateCharacter ( Ralph_14a_not_sel ) ;
4414: LD_ADDR_EXP 13
4418: PUSH
4419: LD_STRING Ralph_14a_not_sel
4421: PPUSH
4422: CALL_OW 34
4426: ST_TO_ADDR
// escaped_list = escaped_list ^ Ralph ;
4427: LD_ADDR_VAR 0 3
4431: PUSH
4432: LD_VAR 0 3
4436: PUSH
4437: LD_EXP 13
4441: ADD
4442: ST_TO_ADDR
// Ralph_alive = true ;
4443: LD_ADDR_EXP 141
4447: PUSH
4448: LD_INT 1
4450: ST_TO_ADDR
// end else
4451: GO 4461
// Ralph = 0 ;
4453: LD_ADDR_EXP 13
4457: PUSH
4458: LD_INT 0
4460: ST_TO_ADDR
// if TestCharacters ( Kowalski_14a_cont ) then
4461: LD_STRING Kowalski_14a_cont
4463: PPUSH
4464: CALL_OW 28
4468: IFFALSE 4501
// begin Kowalski = CreateCharacter ( Kowalski_14a_cont ) ;
4470: LD_ADDR_EXP 14
4474: PUSH
4475: LD_STRING Kowalski_14a_cont
4477: PPUSH
4478: CALL_OW 34
4482: ST_TO_ADDR
// with_player_list = with_player_list ^ Kowalski ;
4483: LD_ADDR_VAR 0 2
4487: PUSH
4488: LD_VAR 0 2
4492: PUSH
4493: LD_EXP 14
4497: ADD
4498: ST_TO_ADDR
// end else
4499: GO 4549
// if TestCharacters ( Kowalski_14a_not_sel ) then
4501: LD_STRING Kowalski_14a_not_sel
4503: PPUSH
4504: CALL_OW 28
4508: IFFALSE 4541
// begin Kowalski = CreateCharacter ( Kowalski_14a_not_sel ) ;
4510: LD_ADDR_EXP 14
4514: PUSH
4515: LD_STRING Kowalski_14a_not_sel
4517: PPUSH
4518: CALL_OW 34
4522: ST_TO_ADDR
// escaped_list = escaped_list ^ Kowalski ;
4523: LD_ADDR_VAR 0 3
4527: PUSH
4528: LD_VAR 0 3
4532: PUSH
4533: LD_EXP 14
4537: ADD
4538: ST_TO_ADDR
// end else
4539: GO 4549
// Kowalski = 0 ;
4541: LD_ADDR_EXP 14
4545: PUSH
4546: LD_INT 0
4548: ST_TO_ADDR
// if TestCharacters ( Suze_14a_cont ) then
4549: LD_STRING Suze_14a_cont
4551: PPUSH
4552: CALL_OW 28
4556: IFFALSE 4589
// begin Suze = CreateCharacter ( Suze_14a_cont ) ;
4558: LD_ADDR_EXP 15
4562: PUSH
4563: LD_STRING Suze_14a_cont
4565: PPUSH
4566: CALL_OW 34
4570: ST_TO_ADDR
// with_player_list = with_player_list ^ Suze ;
4571: LD_ADDR_VAR 0 2
4575: PUSH
4576: LD_VAR 0 2
4580: PUSH
4581: LD_EXP 15
4585: ADD
4586: ST_TO_ADDR
// end else
4587: GO 4637
// if TestCharacters ( Suze_14a_not_sel ) then
4589: LD_STRING Suze_14a_not_sel
4591: PPUSH
4592: CALL_OW 28
4596: IFFALSE 4629
// begin Suze = CreateCharacter ( Suze_14a_not_sel ) ;
4598: LD_ADDR_EXP 15
4602: PUSH
4603: LD_STRING Suze_14a_not_sel
4605: PPUSH
4606: CALL_OW 34
4610: ST_TO_ADDR
// escaped_list = escaped_list ^ Suze ;
4611: LD_ADDR_VAR 0 3
4615: PUSH
4616: LD_VAR 0 3
4620: PUSH
4621: LD_EXP 15
4625: ADD
4626: ST_TO_ADDR
// end else
4627: GO 4637
// Suze = 0 ;
4629: LD_ADDR_EXP 15
4633: PUSH
4634: LD_INT 0
4636: ST_TO_ADDR
// if TestCharacters ( MarkB_14a_cont ) then
4637: LD_STRING MarkB_14a_cont
4639: PPUSH
4640: CALL_OW 28
4644: IFFALSE 4677
// begin MarkB = CreateCharacter ( MarkB_14a_cont ) ;
4646: LD_ADDR_EXP 16
4650: PUSH
4651: LD_STRING MarkB_14a_cont
4653: PPUSH
4654: CALL_OW 34
4658: ST_TO_ADDR
// with_player_list = with_player_list ^ MarkB ;
4659: LD_ADDR_VAR 0 2
4663: PUSH
4664: LD_VAR 0 2
4668: PUSH
4669: LD_EXP 16
4673: ADD
4674: ST_TO_ADDR
// end else
4675: GO 4725
// if TestCharacters ( MarkB_14a_not_sel ) then
4677: LD_STRING MarkB_14a_not_sel
4679: PPUSH
4680: CALL_OW 28
4684: IFFALSE 4717
// begin MarkB = CreateCharacter ( MarkB_14a_not_sel ) ;
4686: LD_ADDR_EXP 16
4690: PUSH
4691: LD_STRING MarkB_14a_not_sel
4693: PPUSH
4694: CALL_OW 34
4698: ST_TO_ADDR
// escaped_list = escaped_list ^ MarkB ;
4699: LD_ADDR_VAR 0 3
4703: PUSH
4704: LD_VAR 0 3
4708: PUSH
4709: LD_EXP 16
4713: ADD
4714: ST_TO_ADDR
// end else
4715: GO 4725
// MarkB = 0 ;
4717: LD_ADDR_EXP 16
4721: PUSH
4722: LD_INT 0
4724: ST_TO_ADDR
// if TestCharacters ( Kurt_14a_cont ) then
4725: LD_STRING Kurt_14a_cont
4727: PPUSH
4728: CALL_OW 28
4732: IFFALSE 4765
// begin Kurt = CreateCharacter ( Kurt_14a_cont ) ;
4734: LD_ADDR_EXP 17
4738: PUSH
4739: LD_STRING Kurt_14a_cont
4741: PPUSH
4742: CALL_OW 34
4746: ST_TO_ADDR
// with_player_list = with_player_list ^ Kurt ;
4747: LD_ADDR_VAR 0 2
4751: PUSH
4752: LD_VAR 0 2
4756: PUSH
4757: LD_EXP 17
4761: ADD
4762: ST_TO_ADDR
// end else
4763: GO 4813
// if TestCharacters ( Kurt_14a_not_sel ) then
4765: LD_STRING Kurt_14a_not_sel
4767: PPUSH
4768: CALL_OW 28
4772: IFFALSE 4805
// begin Kurt = CreateCharacter ( Kurt_14a_not_sel ) ;
4774: LD_ADDR_EXP 17
4778: PUSH
4779: LD_STRING Kurt_14a_not_sel
4781: PPUSH
4782: CALL_OW 34
4786: ST_TO_ADDR
// escaped_list = escaped_list ^ Kurt ;
4787: LD_ADDR_VAR 0 3
4791: PUSH
4792: LD_VAR 0 3
4796: PUSH
4797: LD_EXP 17
4801: ADD
4802: ST_TO_ADDR
// end else
4803: GO 4813
// Kurt = 0 ;
4805: LD_ADDR_EXP 17
4809: PUSH
4810: LD_INT 0
4812: ST_TO_ADDR
// if TestCharacters ( Martin_14a_cont ) then
4813: LD_STRING Martin_14a_cont
4815: PPUSH
4816: CALL_OW 28
4820: IFFALSE 4853
// begin Martin = CreateCharacter ( Martin_14a_cont ) ;
4822: LD_ADDR_EXP 18
4826: PUSH
4827: LD_STRING Martin_14a_cont
4829: PPUSH
4830: CALL_OW 34
4834: ST_TO_ADDR
// with_player_list = with_player_list ^ Martin ;
4835: LD_ADDR_VAR 0 2
4839: PUSH
4840: LD_VAR 0 2
4844: PUSH
4845: LD_EXP 18
4849: ADD
4850: ST_TO_ADDR
// end else
4851: GO 4901
// if TestCharacters ( Martin_14a_not_sel ) then
4853: LD_STRING Martin_14a_not_sel
4855: PPUSH
4856: CALL_OW 28
4860: IFFALSE 4893
// begin Martin = CreateCharacter ( Martin_14a_not_sel ) ;
4862: LD_ADDR_EXP 18
4866: PUSH
4867: LD_STRING Martin_14a_not_sel
4869: PPUSH
4870: CALL_OW 34
4874: ST_TO_ADDR
// escaped_list = escaped_list ^ Martin ;
4875: LD_ADDR_VAR 0 3
4879: PUSH
4880: LD_VAR 0 3
4884: PUSH
4885: LD_EXP 18
4889: ADD
4890: ST_TO_ADDR
// end else
4891: GO 4901
// Martin = 0 ;
4893: LD_ADDR_EXP 18
4897: PUSH
4898: LD_INT 0
4900: ST_TO_ADDR
// if TestCharacters ( Louis_14a_cont ) then
4901: LD_STRING Louis_14a_cont
4903: PPUSH
4904: CALL_OW 28
4908: IFFALSE 4941
// begin Louis = CreateCharacter ( Louis_14a_cont ) ;
4910: LD_ADDR_EXP 19
4914: PUSH
4915: LD_STRING Louis_14a_cont
4917: PPUSH
4918: CALL_OW 34
4922: ST_TO_ADDR
// with_player_list = with_player_list ^ Louis ;
4923: LD_ADDR_VAR 0 2
4927: PUSH
4928: LD_VAR 0 2
4932: PUSH
4933: LD_EXP 19
4937: ADD
4938: ST_TO_ADDR
// end else
4939: GO 4989
// if TestCharacters ( Louis_14a_not_sel ) then
4941: LD_STRING Louis_14a_not_sel
4943: PPUSH
4944: CALL_OW 28
4948: IFFALSE 4981
// begin Louis = CreateCharacter ( Louis_14a_not_sel ) ;
4950: LD_ADDR_EXP 19
4954: PUSH
4955: LD_STRING Louis_14a_not_sel
4957: PPUSH
4958: CALL_OW 34
4962: ST_TO_ADDR
// escaped_list = escaped_list ^ Louis ;
4963: LD_ADDR_VAR 0 3
4967: PUSH
4968: LD_VAR 0 3
4972: PUSH
4973: LD_EXP 19
4977: ADD
4978: ST_TO_ADDR
// end else
4979: GO 4989
// Louis = 0 ;
4981: LD_ADDR_EXP 19
4985: PUSH
4986: LD_INT 0
4988: ST_TO_ADDR
// if TestCharacters ( Khattam_14a_cont ) then
4989: LD_STRING Khattam_14a_cont
4991: PPUSH
4992: CALL_OW 28
4996: IFFALSE 5029
// begin Khattam = CreateCharacter ( Khattam_14a_cont ) ;
4998: LD_ADDR_EXP 20
5002: PUSH
5003: LD_STRING Khattam_14a_cont
5005: PPUSH
5006: CALL_OW 34
5010: ST_TO_ADDR
// with_player_list = with_player_list ^ Khattam ;
5011: LD_ADDR_VAR 0 2
5015: PUSH
5016: LD_VAR 0 2
5020: PUSH
5021: LD_EXP 20
5025: ADD
5026: ST_TO_ADDR
// end else
5027: GO 5077
// if TestCharacters ( Khattam_14a_not_sel ) then
5029: LD_STRING Khattam_14a_not_sel
5031: PPUSH
5032: CALL_OW 28
5036: IFFALSE 5069
// begin Khattam = CreateCharacter ( Khattam_14a_not_sel ) ;
5038: LD_ADDR_EXP 20
5042: PUSH
5043: LD_STRING Khattam_14a_not_sel
5045: PPUSH
5046: CALL_OW 34
5050: ST_TO_ADDR
// escaped_list = escaped_list ^ Khattam ;
5051: LD_ADDR_VAR 0 3
5055: PUSH
5056: LD_VAR 0 3
5060: PUSH
5061: LD_EXP 20
5065: ADD
5066: ST_TO_ADDR
// end else
5067: GO 5077
// Khattam = 0 ;
5069: LD_ADDR_EXP 20
5073: PUSH
5074: LD_INT 0
5076: ST_TO_ADDR
// with_player_list = with_player_list ^ ( CreateCharacterSet ( Others_14a_cont ) diff 0 ) ;
5077: LD_ADDR_VAR 0 2
5081: PUSH
5082: LD_VAR 0 2
5086: PUSH
5087: LD_STRING Others_14a_cont
5089: PPUSH
5090: CALL_OW 31
5094: PUSH
5095: LD_INT 0
5097: DIFF
5098: ADD
5099: ST_TO_ADDR
// end else
5100: GO 5675
// begin InitHc ;
5102: CALL_OW 19
// PrepareSoldier ( sex_female , 9 ) ;
5106: LD_INT 2
5108: PPUSH
5109: LD_INT 9
5111: PPUSH
5112: CALL_OW 381
// hc_name = Heike ;
5116: LD_ADDR_OWVAR 26
5120: PUSH
5121: LD_STRING Heike
5123: ST_TO_ADDR
// Heike = CreateHuman ;
5124: LD_ADDR_EXP 9
5128: PUSH
5129: CALL_OW 44
5133: ST_TO_ADDR
// PrepareMechanic ( sex_male , 9 ) ;
5134: LD_INT 1
5136: PPUSH
5137: LD_INT 9
5139: PPUSH
5140: CALL_OW 383
// hc_name = Olaf ;
5144: LD_ADDR_OWVAR 26
5148: PUSH
5149: LD_STRING Olaf
5151: ST_TO_ADDR
// Olaf = CreateHuman ;
5152: LD_ADDR_EXP 10
5156: PUSH
5157: CALL_OW 44
5161: ST_TO_ADDR
// PrepareScientist ( sex_female , 9 ) ;
5162: LD_INT 2
5164: PPUSH
5165: LD_INT 9
5167: PPUSH
5168: CALL_OW 384
// hc_name = Sonya ;
5172: LD_ADDR_OWVAR 26
5176: PUSH
5177: LD_STRING Sonya
5179: ST_TO_ADDR
// Sonya = CreateHuman ;
5180: LD_ADDR_EXP 11
5184: PUSH
5185: CALL_OW 44
5189: ST_TO_ADDR
// PrepareSoldier ( sex_male , 9 ) ;
5190: LD_INT 1
5192: PPUSH
5193: LD_INT 9
5195: PPUSH
5196: CALL_OW 381
// hc_name = Oswald ;
5200: LD_ADDR_OWVAR 26
5204: PUSH
5205: LD_STRING Oswald
5207: ST_TO_ADDR
// Oswald = CreateHuman ;
5208: LD_ADDR_EXP 12
5212: PUSH
5213: CALL_OW 44
5217: ST_TO_ADDR
// PrepareSoldier ( sex_male , 9 ) ;
5218: LD_INT 1
5220: PPUSH
5221: LD_INT 9
5223: PPUSH
5224: CALL_OW 381
// hc_name = Ralph ;
5228: LD_ADDR_OWVAR 26
5232: PUSH
5233: LD_STRING Ralph
5235: ST_TO_ADDR
// Ralph = CreateHuman ;
5236: LD_ADDR_EXP 13
5240: PUSH
5241: CALL_OW 44
5245: ST_TO_ADDR
// Ralph_alive = true ;
5246: LD_ADDR_EXP 141
5250: PUSH
5251: LD_INT 1
5253: ST_TO_ADDR
// PrepareSoldier ( sex_male , 9 ) ;
5254: LD_INT 1
5256: PPUSH
5257: LD_INT 9
5259: PPUSH
5260: CALL_OW 381
// hc_name = Kowalski ;
5264: LD_ADDR_OWVAR 26
5268: PUSH
5269: LD_STRING Kowalski
5271: ST_TO_ADDR
// Kowalski = CreateHuman ;
5272: LD_ADDR_EXP 14
5276: PUSH
5277: CALL_OW 44
5281: ST_TO_ADDR
// PrepareSoldier ( sex_female , 9 ) ;
5282: LD_INT 2
5284: PPUSH
5285: LD_INT 9
5287: PPUSH
5288: CALL_OW 381
// hc_name = Suze ;
5292: LD_ADDR_OWVAR 26
5296: PUSH
5297: LD_STRING Suze
5299: ST_TO_ADDR
// Suze = CreateHuman ;
5300: LD_ADDR_EXP 15
5304: PUSH
5305: CALL_OW 44
5309: ST_TO_ADDR
// PrepareScientist ( sex_male , 9 ) ;
5310: LD_INT 1
5312: PPUSH
5313: LD_INT 9
5315: PPUSH
5316: CALL_OW 384
// hc_name = Mark ;
5320: LD_ADDR_OWVAR 26
5324: PUSH
5325: LD_STRING Mark
5327: ST_TO_ADDR
// MarkB = CreateHuman ;
5328: LD_ADDR_EXP 16
5332: PUSH
5333: CALL_OW 44
5337: ST_TO_ADDR
// PrepareSoldier ( sex_male , 9 ) ;
5338: LD_INT 1
5340: PPUSH
5341: LD_INT 9
5343: PPUSH
5344: CALL_OW 381
// hc_name = Kurt ;
5348: LD_ADDR_OWVAR 26
5352: PUSH
5353: LD_STRING Kurt
5355: ST_TO_ADDR
// Kurt = CreateHuman ;
5356: LD_ADDR_EXP 17
5360: PUSH
5361: CALL_OW 44
5365: ST_TO_ADDR
// PrepareMechanic ( sex_male , 9 ) ;
5366: LD_INT 1
5368: PPUSH
5369: LD_INT 9
5371: PPUSH
5372: CALL_OW 383
// hc_name = Martin ;
5376: LD_ADDR_OWVAR 26
5380: PUSH
5381: LD_STRING Martin
5383: ST_TO_ADDR
// Martin = CreateHuman ;
5384: LD_ADDR_EXP 18
5388: PUSH
5389: CALL_OW 44
5393: ST_TO_ADDR
// PrepareSoldier ( sex_male , 9 ) ;
5394: LD_INT 1
5396: PPUSH
5397: LD_INT 9
5399: PPUSH
5400: CALL_OW 381
// hc_name = Louis ;
5404: LD_ADDR_OWVAR 26
5408: PUSH
5409: LD_STRING Louis
5411: ST_TO_ADDR
// Louis = CreateHuman ;
5412: LD_ADDR_EXP 19
5416: PUSH
5417: CALL_OW 44
5421: ST_TO_ADDR
// SetClass ( Louis , class_mortar ) ;
5422: LD_EXP 19
5426: PPUSH
5427: LD_INT 8
5429: PPUSH
5430: CALL_OW 336
// PrepareScientist ( sex_male , 9 ) ;
5434: LD_INT 1
5436: PPUSH
5437: LD_INT 9
5439: PPUSH
5440: CALL_OW 384
// hc_name = Khattam ;
5444: LD_ADDR_OWVAR 26
5448: PUSH
5449: LD_STRING Khattam
5451: ST_TO_ADDR
// Khattam = CreateHuman ;
5452: LD_ADDR_EXP 20
5456: PUSH
5457: CALL_OW 44
5461: ST_TO_ADDR
// with_player_list = [ Heike , Oswald ] diff 0 ;
5462: LD_ADDR_VAR 0 2
5466: PUSH
5467: LD_EXP 9
5471: PUSH
5472: LD_EXP 12
5476: PUSH
5477: EMPTY
5478: LIST
5479: LIST
5480: PUSH
5481: LD_INT 0
5483: DIFF
5484: ST_TO_ADDR
// escaped_list = [ Olaf , Sonya , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis , Khattam ] diff 0 ;
5485: LD_ADDR_VAR 0 3
5489: PUSH
5490: LD_EXP 10
5494: PUSH
5495: LD_EXP 11
5499: PUSH
5500: LD_EXP 13
5504: PUSH
5505: LD_EXP 14
5509: PUSH
5510: LD_EXP 15
5514: PUSH
5515: LD_EXP 16
5519: PUSH
5520: LD_EXP 17
5524: PUSH
5525: LD_EXP 18
5529: PUSH
5530: LD_EXP 19
5534: PUSH
5535: LD_EXP 20
5539: PUSH
5540: EMPTY
5541: LIST
5542: LIST
5543: LIST
5544: LIST
5545: LIST
5546: LIST
5547: LIST
5548: LIST
5549: LIST
5550: LIST
5551: PUSH
5552: LD_INT 0
5554: DIFF
5555: ST_TO_ADDR
// InitHc ;
5556: CALL_OW 19
// for i = 1 to [ 5 , 4 , 3 ] [ difficulty ] do
5560: LD_ADDR_VAR 0 4
5564: PUSH
5565: DOUBLE
5566: LD_INT 1
5568: DEC
5569: ST_TO_ADDR
5570: LD_INT 5
5572: PUSH
5573: LD_INT 4
5575: PUSH
5576: LD_INT 3
5578: PUSH
5579: EMPTY
5580: LIST
5581: LIST
5582: LIST
5583: PUSH
5584: LD_OWVAR 67
5588: ARRAY
5589: PUSH
5590: FOR_TO
5591: IFFALSE 5647
// begin PrepareHuman ( false , [ class_soldier , class_mechanic , class_scientistic ] [ Rand ( 1 , 3 ) ] , 9 ) ;
5593: LD_INT 0
5595: PPUSH
5596: LD_INT 1
5598: PUSH
5599: LD_INT 3
5601: PUSH
5602: LD_INT 4
5604: PUSH
5605: EMPTY
5606: LIST
5607: LIST
5608: LIST
5609: PUSH
5610: LD_INT 1
5612: PPUSH
5613: LD_INT 3
5615: PPUSH
5616: CALL_OW 12
5620: ARRAY
5621: PPUSH
5622: LD_INT 9
5624: PPUSH
5625: CALL_OW 380
// with_player_list = with_player_list ^ CreateHuman ;
5629: LD_ADDR_VAR 0 2
5633: PUSH
5634: LD_VAR 0 2
5638: PUSH
5639: CALL_OW 44
5643: ADD
5644: ST_TO_ADDR
// end ;
5645: GO 5590
5647: POP
5648: POP
// PrepareEngineer ( false , 9 ) ;
5649: LD_INT 0
5651: PPUSH
5652: LD_INT 9
5654: PPUSH
5655: CALL_OW 382
// with_player_list = with_player_list ^ CreateHuman ;
5659: LD_ADDR_VAR 0 2
5663: PUSH
5664: LD_VAR 0 2
5668: PUSH
5669: CALL_OW 44
5673: ADD
5674: ST_TO_ADDR
// end ; val = LoadVariable ( Num_people_to_next_map_14a , 6 + 1 ) ;
5675: LD_ADDR_VAR 0 6
5679: PUSH
5680: LD_STRING Num_people_to_next_map_14a
5682: PPUSH
5683: LD_INT 6
5685: PUSH
5686: LD_INT 1
5688: PLUS
5689: PPUSH
5690: CALL_OW 30
5694: ST_TO_ADDR
// val = [ 17 , 15 , 14 ] [ difficulty ] - val ;
5695: LD_ADDR_VAR 0 6
5699: PUSH
5700: LD_INT 17
5702: PUSH
5703: LD_INT 15
5705: PUSH
5706: LD_INT 14
5708: PUSH
5709: EMPTY
5710: LIST
5711: LIST
5712: LIST
5713: PUSH
5714: LD_OWVAR 67
5718: ARRAY
5719: PUSH
5720: LD_VAR 0 6
5724: MINUS
5725: ST_TO_ADDR
// if Ralph in escaped_list and Sonya in escaped_list then
5726: LD_EXP 13
5730: PUSH
5731: LD_VAR 0 3
5735: IN
5736: PUSH
5737: LD_EXP 11
5741: PUSH
5742: LD_VAR 0 3
5746: IN
5747: AND
5748: IFFALSE 5807
// begin SetLastMission ( Ralph , 17 ) ;
5750: LD_EXP 13
5754: PPUSH
5755: LD_INT 17
5757: PPUSH
5758: CALL_OW 245
// SaveCharacters ( Ralph , Ralph_14a_cont2_run_away ) ;
5762: LD_EXP 13
5766: PPUSH
5767: LD_STRING Ralph_14a_cont2_run_away
5769: PPUSH
5770: CALL_OW 38
// escaped_list = escaped_list diff Ralph ;
5774: LD_ADDR_VAR 0 3
5778: PUSH
5779: LD_VAR 0 3
5783: PUSH
5784: LD_EXP 13
5788: DIFF
5789: ST_TO_ADDR
// DestroyUnit ( Ralph ) ;
5790: LD_EXP 13
5794: PPUSH
5795: CALL_OW 65
// Ralph = 0 ;
5799: LD_ADDR_EXP 13
5803: PUSH
5804: LD_INT 0
5806: ST_TO_ADDR
// end ; if escaped_list < val then
5807: LD_VAR 0 3
5811: PUSH
5812: LD_VAR 0 6
5816: LESS
5817: IFFALSE 5895
// begin InitHc ;
5819: CALL_OW 19
// while escaped_list < val do
5823: LD_VAR 0 3
5827: PUSH
5828: LD_VAR 0 6
5832: LESS
5833: IFFALSE 5893
// begin PrepareHuman ( false , [ class_soldier , class_engineer , class_mechanic , class_scientistic ] [ Rand ( 1 , 4 ) ] , 8 ) ;
5835: LD_INT 0
5837: PPUSH
5838: LD_INT 1
5840: PUSH
5841: LD_INT 2
5843: PUSH
5844: LD_INT 3
5846: PUSH
5847: LD_INT 4
5849: PUSH
5850: EMPTY
5851: LIST
5852: LIST
5853: LIST
5854: LIST
5855: PUSH
5856: LD_INT 1
5858: PPUSH
5859: LD_INT 4
5861: PPUSH
5862: CALL_OW 12
5866: ARRAY
5867: PPUSH
5868: LD_INT 8
5870: PPUSH
5871: CALL_OW 380
// escaped_list = escaped_list ^ CreateHuman ;
5875: LD_ADDR_VAR 0 3
5879: PUSH
5880: LD_VAR 0 3
5884: PUSH
5885: CALL_OW 44
5889: ADD
5890: ST_TO_ADDR
// end ;
5891: GO 5823
// end else
5893: GO 6778
// if escaped_list > val then
5895: LD_VAR 0 3
5899: PUSH
5900: LD_VAR 0 6
5904: GREATER
5905: IFFALSE 6778
// begin if Sonya in escaped_list then
5907: LD_EXP 11
5911: PUSH
5912: LD_VAR 0 3
5916: IN
5917: IFFALSE 5950
// begin temp_list = [ Sonya ] ;
5919: LD_ADDR_VAR 0 8
5923: PUSH
5924: LD_EXP 11
5928: PUSH
5929: EMPTY
5930: LIST
5931: ST_TO_ADDR
// escaped_list = escaped_list diff Sonya ;
5932: LD_ADDR_VAR 0 3
5936: PUSH
5937: LD_VAR 0 3
5941: PUSH
5942: LD_EXP 11
5946: DIFF
5947: ST_TO_ADDR
// end else
5948: GO 5957
// temp_list = [ ] ;
5950: LD_ADDR_VAR 0 8
5954: PUSH
5955: EMPTY
5956: ST_TO_ADDR
// temp_list_2 = [ [ ] , [ ] , [ ] , [ ] ] ;
5957: LD_ADDR_VAR 0 9
5961: PUSH
5962: EMPTY
5963: PUSH
5964: EMPTY
5965: PUSH
5966: EMPTY
5967: PUSH
5968: EMPTY
5969: PUSH
5970: EMPTY
5971: LIST
5972: LIST
5973: LIST
5974: LIST
5975: ST_TO_ADDR
// temp_list_3 = [ skill_combat , skill_engineering , skill_mechanical , skill_scientistic ] ;
5976: LD_ADDR_VAR 0 12
5980: PUSH
5981: LD_INT 1
5983: PUSH
5984: LD_INT 2
5986: PUSH
5987: LD_INT 3
5989: PUSH
5990: LD_INT 4
5992: PUSH
5993: EMPTY
5994: LIST
5995: LIST
5996: LIST
5997: LIST
5998: ST_TO_ADDR
// for i in escaped_list do
5999: LD_ADDR_VAR 0 4
6003: PUSH
6004: LD_VAR 0 3
6008: PUSH
6009: FOR_IN
6010: IFFALSE 6163
// begin g = GetSkill ( i , skill_combat ) ;
6012: LD_ADDR_VAR 0 10
6016: PUSH
6017: LD_VAR 0 4
6021: PPUSH
6022: LD_INT 1
6024: PPUSH
6025: CALL_OW 259
6029: ST_TO_ADDR
// k = 1 ;
6030: LD_ADDR_VAR 0 7
6034: PUSH
6035: LD_INT 1
6037: ST_TO_ADDR
// for t = 2 to temp_list_3 do
6038: LD_ADDR_VAR 0 11
6042: PUSH
6043: DOUBLE
6044: LD_INT 2
6046: DEC
6047: ST_TO_ADDR
6048: LD_VAR 0 12
6052: PUSH
6053: FOR_TO
6054: IFFALSE 6122
// begin if GetSkill ( i , temp_list_3 [ t ] ) > g then
6056: LD_VAR 0 4
6060: PPUSH
6061: LD_VAR 0 12
6065: PUSH
6066: LD_VAR 0 11
6070: ARRAY
6071: PPUSH
6072: CALL_OW 259
6076: PUSH
6077: LD_VAR 0 10
6081: GREATER
6082: IFFALSE 6120
// begin g = GetSkill ( i , temp_list_3 [ t ] ) ;
6084: LD_ADDR_VAR 0 10
6088: PUSH
6089: LD_VAR 0 4
6093: PPUSH
6094: LD_VAR 0 12
6098: PUSH
6099: LD_VAR 0 11
6103: ARRAY
6104: PPUSH
6105: CALL_OW 259
6109: ST_TO_ADDR
// k = t ;
6110: LD_ADDR_VAR 0 7
6114: PUSH
6115: LD_VAR 0 11
6119: ST_TO_ADDR
// end ; end ;
6120: GO 6053
6122: POP
6123: POP
// temp_list_2 = Replace ( temp_list_2 , k , temp_list_2 [ k ] ^ i ) ;
6124: LD_ADDR_VAR 0 9
6128: PUSH
6129: LD_VAR 0 9
6133: PPUSH
6134: LD_VAR 0 7
6138: PPUSH
6139: LD_VAR 0 9
6143: PUSH
6144: LD_VAR 0 7
6148: ARRAY
6149: PUSH
6150: LD_VAR 0 4
6154: ADD
6155: PPUSH
6156: CALL_OW 1
6160: ST_TO_ADDR
// end ;
6161: GO 6009
6163: POP
6164: POP
// while escaped_list + temp_list > val do
6165: LD_VAR 0 3
6169: PUSH
6170: LD_VAR 0 8
6174: PLUS
6175: PUSH
6176: LD_VAR 0 6
6180: GREATER
6181: IFFALSE 6762
// begin if escaped_list = 0 then
6183: LD_VAR 0 3
6187: PUSH
6188: LD_INT 0
6190: EQUAL
6191: IFFALSE 6195
// break ;
6193: GO 6762
// g = 1 ;
6195: LD_ADDR_VAR 0 10
6199: PUSH
6200: LD_INT 1
6202: ST_TO_ADDR
// for k = 2 to temp_list_2 do
6203: LD_ADDR_VAR 0 7
6207: PUSH
6208: DOUBLE
6209: LD_INT 2
6211: DEC
6212: ST_TO_ADDR
6213: LD_VAR 0 9
6217: PUSH
6218: FOR_TO
6219: IFFALSE 6265
// begin if temp_list_2 [ k ] + 0 > temp_list_2 [ g ] + 0 then
6221: LD_VAR 0 9
6225: PUSH
6226: LD_VAR 0 7
6230: ARRAY
6231: PUSH
6232: LD_INT 0
6234: PLUS
6235: PUSH
6236: LD_VAR 0 9
6240: PUSH
6241: LD_VAR 0 10
6245: ARRAY
6246: PUSH
6247: LD_INT 0
6249: PLUS
6250: GREATER
6251: IFFALSE 6263
// g = k ;
6253: LD_ADDR_VAR 0 10
6257: PUSH
6258: LD_VAR 0 7
6262: ST_TO_ADDR
// end ;
6263: GO 6218
6265: POP
6266: POP
// temp_list_3 = temp_list_2 [ g ] ;
6267: LD_ADDR_VAR 0 12
6271: PUSH
6272: LD_VAR 0 9
6276: PUSH
6277: LD_VAR 0 10
6281: ARRAY
6282: ST_TO_ADDR
// t = Rand ( 1 , temp_list_3 ) ;
6283: LD_ADDR_VAR 0 11
6287: PUSH
6288: LD_INT 1
6290: PPUSH
6291: LD_VAR 0 12
6295: PPUSH
6296: CALL_OW 12
6300: ST_TO_ADDR
// i = temp_list_2 [ g ] [ t ] ;
6301: LD_ADDR_VAR 0 4
6305: PUSH
6306: LD_VAR 0 9
6310: PUSH
6311: LD_VAR 0 10
6315: ARRAY
6316: PUSH
6317: LD_VAR 0 11
6321: ARRAY
6322: ST_TO_ADDR
// temp_list_2 = Replace ( temp_list_2 , g , temp_list_2 [ g ] diff i ) ;
6323: LD_ADDR_VAR 0 9
6327: PUSH
6328: LD_VAR 0 9
6332: PPUSH
6333: LD_VAR 0 10
6337: PPUSH
6338: LD_VAR 0 9
6342: PUSH
6343: LD_VAR 0 10
6347: ARRAY
6348: PUSH
6349: LD_VAR 0 4
6353: DIFF
6354: PPUSH
6355: CALL_OW 1
6359: ST_TO_ADDR
// case i of Olaf :
6360: LD_VAR 0 4
6364: PUSH
6365: LD_EXP 10
6369: DOUBLE
6370: EQUAL
6371: IFTRUE 6375
6373: GO 6394
6375: POP
// begin k = Olaf ;
6376: LD_ADDR_VAR 0 7
6380: PUSH
6381: LD_STRING Olaf
6383: ST_TO_ADDR
// Olaf = 0 ;
6384: LD_ADDR_EXP 10
6388: PUSH
6389: LD_INT 0
6391: ST_TO_ADDR
// end ; Sonya :
6392: GO 6694
6394: LD_EXP 11
6398: DOUBLE
6399: EQUAL
6400: IFTRUE 6404
6402: GO 6423
6404: POP
// begin k = Sonya ;
6405: LD_ADDR_VAR 0 7
6409: PUSH
6410: LD_STRING Sonya
6412: ST_TO_ADDR
// Sonya = 0 ;
6413: LD_ADDR_EXP 11
6417: PUSH
6418: LD_INT 0
6420: ST_TO_ADDR
// end ; Oswald :
6421: GO 6694
6423: LD_EXP 12
6427: DOUBLE
6428: EQUAL
6429: IFTRUE 6433
6431: GO 6452
6433: POP
// begin k = Oswald ;
6434: LD_ADDR_VAR 0 7
6438: PUSH
6439: LD_STRING Oswald
6441: ST_TO_ADDR
// Oswald = 0 ;
6442: LD_ADDR_EXP 12
6446: PUSH
6447: LD_INT 0
6449: ST_TO_ADDR
// end ; Ralph :
6450: GO 6694
6452: LD_EXP 13
6456: DOUBLE
6457: EQUAL
6458: IFTRUE 6462
6460: GO 6481
6462: POP
// begin k = Ralph ;
6463: LD_ADDR_VAR 0 7
6467: PUSH
6468: LD_STRING Ralph
6470: ST_TO_ADDR
// Ralph = 0 ;
6471: LD_ADDR_EXP 13
6475: PUSH
6476: LD_INT 0
6478: ST_TO_ADDR
// end ; Kowalski :
6479: GO 6694
6481: LD_EXP 14
6485: DOUBLE
6486: EQUAL
6487: IFTRUE 6491
6489: GO 6510
6491: POP
// begin k = Kowalski ;
6492: LD_ADDR_VAR 0 7
6496: PUSH
6497: LD_STRING Kowalski
6499: ST_TO_ADDR
// Kowalski = 0 ;
6500: LD_ADDR_EXP 14
6504: PUSH
6505: LD_INT 0
6507: ST_TO_ADDR
// end ; Suze :
6508: GO 6694
6510: LD_EXP 15
6514: DOUBLE
6515: EQUAL
6516: IFTRUE 6520
6518: GO 6539
6520: POP
// begin k = Suze ;
6521: LD_ADDR_VAR 0 7
6525: PUSH
6526: LD_STRING Suze
6528: ST_TO_ADDR
// Suze = 0 ;
6529: LD_ADDR_EXP 15
6533: PUSH
6534: LD_INT 0
6536: ST_TO_ADDR
// end ; MarkB :
6537: GO 6694
6539: LD_EXP 16
6543: DOUBLE
6544: EQUAL
6545: IFTRUE 6549
6547: GO 6568
6549: POP
// begin k = MarkB ;
6550: LD_ADDR_VAR 0 7
6554: PUSH
6555: LD_STRING MarkB
6557: ST_TO_ADDR
// MarkB = 0 ;
6558: LD_ADDR_EXP 16
6562: PUSH
6563: LD_INT 0
6565: ST_TO_ADDR
// end ; Kurt :
6566: GO 6694
6568: LD_EXP 17
6572: DOUBLE
6573: EQUAL
6574: IFTRUE 6578
6576: GO 6597
6578: POP
// begin k = Kurt ;
6579: LD_ADDR_VAR 0 7
6583: PUSH
6584: LD_STRING Kurt
6586: ST_TO_ADDR
// Kurt = 0 ;
6587: LD_ADDR_EXP 17
6591: PUSH
6592: LD_INT 0
6594: ST_TO_ADDR
// end ; Martin :
6595: GO 6694
6597: LD_EXP 18
6601: DOUBLE
6602: EQUAL
6603: IFTRUE 6607
6605: GO 6626
6607: POP
// begin k = Martin ;
6608: LD_ADDR_VAR 0 7
6612: PUSH
6613: LD_STRING Martin
6615: ST_TO_ADDR
// Martin = 0 ;
6616: LD_ADDR_EXP 18
6620: PUSH
6621: LD_INT 0
6623: ST_TO_ADDR
// end ; Louis :
6624: GO 6694
6626: LD_EXP 19
6630: DOUBLE
6631: EQUAL
6632: IFTRUE 6636
6634: GO 6655
6636: POP
// begin k = Louis ;
6637: LD_ADDR_VAR 0 7
6641: PUSH
6642: LD_STRING Louis
6644: ST_TO_ADDR
// Louis = 0 ;
6645: LD_ADDR_EXP 19
6649: PUSH
6650: LD_INT 0
6652: ST_TO_ADDR
// end ; Khattam :
6653: GO 6694
6655: LD_EXP 20
6659: DOUBLE
6660: EQUAL
6661: IFTRUE 6665
6663: GO 6684
6665: POP
// begin k = Khattam ;
6666: LD_ADDR_VAR 0 7
6670: PUSH
6671: LD_STRING Khattam
6673: ST_TO_ADDR
// Khattam = 0 ;
6674: LD_ADDR_EXP 20
6678: PUSH
6679: LD_INT 0
6681: ST_TO_ADDR
// end ; else
6682: GO 6694
6684: POP
// k = - 1 ; end ;
6685: LD_ADDR_VAR 0 7
6689: PUSH
6690: LD_INT 1
6692: NEG
6693: ST_TO_ADDR
// if k > - 1 then
6694: LD_VAR 0 7
6698: PUSH
6699: LD_INT 1
6701: NEG
6702: GREATER
6703: IFFALSE 6744
// begin SetLastMission ( i , 17 ) ;
6705: LD_VAR 0 4
6709: PPUSH
6710: LD_INT 17
6712: PPUSH
6713: CALL_OW 245
// SaveCharacters ( i , k & _14a_cont2_run_away ) ;
6717: LD_VAR 0 4
6721: PPUSH
6722: LD_VAR 0 7
6726: PUSH
6727: LD_STRING _14a_cont2_run_away
6729: STR
6730: PPUSH
6731: CALL_OW 38
// DestroyUnit ( i ) ;
6735: LD_VAR 0 4
6739: PPUSH
6740: CALL_OW 65
// end ; escaped_list = escaped_list diff i ;
6744: LD_ADDR_VAR 0 3
6748: PUSH
6749: LD_VAR 0 3
6753: PUSH
6754: LD_VAR 0 4
6758: DIFF
6759: ST_TO_ADDR
// end ;
6760: GO 6165
// escaped_list = escaped_list ^ temp_list ;
6762: LD_ADDR_VAR 0 3
6766: PUSH
6767: LD_VAR 0 3
6771: PUSH
6772: LD_VAR 0 8
6776: ADD
6777: ST_TO_ADDR
// end ; if UnitFilter ( escaped_list , [ f_class , class_engineer ] ) = 0 and escaped_list > 0 then
6778: LD_VAR 0 3
6782: PPUSH
6783: LD_INT 25
6785: PUSH
6786: LD_INT 2
6788: PUSH
6789: EMPTY
6790: LIST
6791: LIST
6792: PPUSH
6793: CALL_OW 72
6797: PUSH
6798: LD_INT 0
6800: EQUAL
6801: PUSH
6802: LD_VAR 0 3
6806: PUSH
6807: LD_INT 0
6809: GREATER
6810: AND
6811: IFFALSE 6829
// SetClass ( escaped_list [ 1 ] , class_engineer ) ;
6813: LD_VAR 0 3
6817: PUSH
6818: LD_INT 1
6820: ARRAY
6821: PPUSH
6822: LD_INT 2
6824: PPUSH
6825: CALL_OW 336
// k = 1 ;
6829: LD_ADDR_VAR 0 7
6833: PUSH
6834: LD_INT 1
6836: ST_TO_ADDR
// for i in escaped_list do
6837: LD_ADDR_VAR 0 4
6841: PUSH
6842: LD_VAR 0 3
6846: PUSH
6847: FOR_IN
6848: IFFALSE 6903
// if GetClass ( i ) = class_mortar then
6850: LD_VAR 0 4
6854: PPUSH
6855: CALL_OW 257
6859: PUSH
6860: LD_INT 8
6862: EQUAL
6863: IFFALSE 6901
// begin k = k - 1 ;
6865: LD_ADDR_VAR 0 7
6869: PUSH
6870: LD_VAR 0 7
6874: PUSH
6875: LD_INT 1
6877: MINUS
6878: ST_TO_ADDR
// if k < 0 then
6879: LD_VAR 0 7
6883: PUSH
6884: LD_INT 0
6886: LESS
6887: IFFALSE 6901
// SetClass ( i , class_soldier ) ;
6889: LD_VAR 0 4
6893: PPUSH
6894: LD_INT 1
6896: PPUSH
6897: CALL_OW 336
// end ;
6901: GO 6847
6903: POP
6904: POP
// if not testing then
6905: LD_EXP 1
6909: NOT
6910: IFFALSE 6929
// temp_list_2 = LoadVariable ( Vehicles_14a_cont , [ ] ) else
6912: LD_ADDR_VAR 0 9
6916: PUSH
6917: LD_STRING Vehicles_14a_cont
6919: PPUSH
6920: EMPTY
6921: PPUSH
6922: CALL_OW 30
6926: ST_TO_ADDR
6927: GO 7041
// temp_list_2 = [ [ nation_arabian , ar_half_tracked , engine_siberite , control_manual , ar_cargo_bay , 80 , 20 , 0 ] , [ nation_russian , ru_medium_tracked , engine_combustion , control_manual , ru_gun , 0 , 0 , 0 ] , [ nation_arabian , ar_half_tracked , engine_siberite , control_manual , ar_gatling_gun , 0 , 0 , 0 ] ] ;
6929: LD_ADDR_VAR 0 9
6933: PUSH
6934: LD_INT 2
6936: PUSH
6937: LD_INT 14
6939: PUSH
6940: LD_INT 3
6942: PUSH
6943: LD_INT 1
6945: PUSH
6946: LD_INT 32
6948: PUSH
6949: LD_INT 80
6951: PUSH
6952: LD_INT 20
6954: PUSH
6955: LD_INT 0
6957: PUSH
6958: EMPTY
6959: LIST
6960: LIST
6961: LIST
6962: LIST
6963: LIST
6964: LIST
6965: LIST
6966: LIST
6967: PUSH
6968: LD_INT 3
6970: PUSH
6971: LD_INT 22
6973: PUSH
6974: LD_INT 1
6976: PUSH
6977: LD_INT 1
6979: PUSH
6980: LD_INT 44
6982: PUSH
6983: LD_INT 0
6985: PUSH
6986: LD_INT 0
6988: PUSH
6989: LD_INT 0
6991: PUSH
6992: EMPTY
6993: LIST
6994: LIST
6995: LIST
6996: LIST
6997: LIST
6998: LIST
6999: LIST
7000: LIST
7001: PUSH
7002: LD_INT 2
7004: PUSH
7005: LD_INT 14
7007: PUSH
7008: LD_INT 3
7010: PUSH
7011: LD_INT 1
7013: PUSH
7014: LD_INT 25
7016: PUSH
7017: LD_INT 0
7019: PUSH
7020: LD_INT 0
7022: PUSH
7023: LD_INT 0
7025: PUSH
7026: EMPTY
7027: LIST
7028: LIST
7029: LIST
7030: LIST
7031: LIST
7032: LIST
7033: LIST
7034: LIST
7035: PUSH
7036: EMPTY
7037: LIST
7038: LIST
7039: LIST
7040: ST_TO_ADDR
// for i in temp_list_2 do
7041: LD_ADDR_VAR 0 4
7045: PUSH
7046: LD_VAR 0 9
7050: PUSH
7051: FOR_IN
7052: IFFALSE 7419
// begin uc_nation = i [ 1 ] ;
7054: LD_ADDR_OWVAR 21
7058: PUSH
7059: LD_VAR 0 4
7063: PUSH
7064: LD_INT 1
7066: ARRAY
7067: ST_TO_ADDR
// vc_chassis = i [ 2 ] ;
7068: LD_ADDR_OWVAR 37
7072: PUSH
7073: LD_VAR 0 4
7077: PUSH
7078: LD_INT 2
7080: ARRAY
7081: ST_TO_ADDR
// vc_engine = i [ 3 ] ;
7082: LD_ADDR_OWVAR 39
7086: PUSH
7087: LD_VAR 0 4
7091: PUSH
7092: LD_INT 3
7094: ARRAY
7095: ST_TO_ADDR
// vc_control = i [ 4 ] ;
7096: LD_ADDR_OWVAR 38
7100: PUSH
7101: LD_VAR 0 4
7105: PUSH
7106: LD_INT 4
7108: ARRAY
7109: ST_TO_ADDR
// vc_weapon = i [ 5 ] ;
7110: LD_ADDR_OWVAR 40
7114: PUSH
7115: LD_VAR 0 4
7119: PUSH
7120: LD_INT 5
7122: ARRAY
7123: ST_TO_ADDR
// val = CreateVehicle ;
7124: LD_ADDR_VAR 0 6
7128: PUSH
7129: CALL_OW 45
7133: ST_TO_ADDR
// if vc_weapon in [ us_cargo_bay , ru_cargo_bay , ar_cargo_bay ] then
7134: LD_OWVAR 40
7138: PUSH
7139: LD_INT 12
7141: PUSH
7142: LD_INT 51
7144: PUSH
7145: LD_INT 32
7147: PUSH
7148: EMPTY
7149: LIST
7150: LIST
7151: LIST
7152: IN
7153: IFFALSE 7218
// begin AddCargo ( val , mat_cans , i [ 6 ] ) ;
7155: LD_VAR 0 6
7159: PPUSH
7160: LD_INT 1
7162: PPUSH
7163: LD_VAR 0 4
7167: PUSH
7168: LD_INT 6
7170: ARRAY
7171: PPUSH
7172: CALL_OW 291
// AddCargo ( val , mat_oil , i [ 7 ] ) ;
7176: LD_VAR 0 6
7180: PPUSH
7181: LD_INT 2
7183: PPUSH
7184: LD_VAR 0 4
7188: PUSH
7189: LD_INT 7
7191: ARRAY
7192: PPUSH
7193: CALL_OW 291
// AddCargo ( val , mat_siberit , i [ 8 ] ) ;
7197: LD_VAR 0 6
7201: PPUSH
7202: LD_INT 3
7204: PPUSH
7205: LD_VAR 0 4
7209: PUSH
7210: LD_INT 8
7212: ARRAY
7213: PPUSH
7214: CALL_OW 291
// end ; if vc_engine = engine_combustion then
7218: LD_OWVAR 39
7222: PUSH
7223: LD_INT 1
7225: EQUAL
7226: IFFALSE 7248
// SetFuel ( val , Rand ( 70 , 80 ) ) ;
7228: LD_VAR 0 6
7232: PPUSH
7233: LD_INT 70
7235: PPUSH
7236: LD_INT 80
7238: PPUSH
7239: CALL_OW 12
7243: PPUSH
7244: CALL_OW 240
// temp_unit = 0 ;
7248: LD_ADDR_VAR 0 5
7252: PUSH
7253: LD_INT 0
7255: ST_TO_ADDR
// temp_list_2 = UnitFilter ( with_player_list , [ f_class , class_mechanic ] ) ;
7256: LD_ADDR_VAR 0 9
7260: PUSH
7261: LD_VAR 0 2
7265: PPUSH
7266: LD_INT 25
7268: PUSH
7269: LD_INT 3
7271: PUSH
7272: EMPTY
7273: LIST
7274: LIST
7275: PPUSH
7276: CALL_OW 72
7280: ST_TO_ADDR
// if temp_list_2 > 0 then
7281: LD_VAR 0 9
7285: PUSH
7286: LD_INT 0
7288: GREATER
7289: IFFALSE 7307
// temp_unit = temp_list_2 [ 1 ] else
7291: LD_ADDR_VAR 0 5
7295: PUSH
7296: LD_VAR 0 9
7300: PUSH
7301: LD_INT 1
7303: ARRAY
7304: ST_TO_ADDR
7305: GO 7331
// if with_player_list > 0 then
7307: LD_VAR 0 2
7311: PUSH
7312: LD_INT 0
7314: GREATER
7315: IFFALSE 7331
// temp_unit = with_player_list [ 1 ] ;
7317: LD_ADDR_VAR 0 5
7321: PUSH
7322: LD_VAR 0 2
7326: PUSH
7327: LD_INT 1
7329: ARRAY
7330: ST_TO_ADDR
// if temp_unit > 0 then
7331: LD_VAR 0 5
7335: PUSH
7336: LD_INT 0
7338: GREATER
7339: IFFALSE 7371
// begin with_player_list = with_player_list diff temp_unit ;
7341: LD_ADDR_VAR 0 2
7345: PUSH
7346: LD_VAR 0 2
7350: PUSH
7351: LD_VAR 0 5
7355: DIFF
7356: ST_TO_ADDR
// PlaceHumanInUnit ( temp_unit , val ) ;
7357: LD_VAR 0 5
7361: PPUSH
7362: LD_VAR 0 6
7366: PPUSH
7367: CALL_OW 52
// end ; SetDir ( val , [ 0 , 5 ] [ Rand ( 1 , 2 ) ] ) ;
7371: LD_VAR 0 6
7375: PPUSH
7376: LD_INT 0
7378: PUSH
7379: LD_INT 5
7381: PUSH
7382: EMPTY
7383: LIST
7384: LIST
7385: PUSH
7386: LD_INT 1
7388: PPUSH
7389: LD_INT 2
7391: PPUSH
7392: CALL_OW 12
7396: ARRAY
7397: PPUSH
7398: CALL_OW 233
// PlaceUnitArea ( val , player_enter_area , false ) ;
7402: LD_VAR 0 6
7406: PPUSH
7407: LD_INT 10
7409: PPUSH
7410: LD_INT 0
7412: PPUSH
7413: CALL_OW 49
// end ;
7417: GO 7051
7419: POP
7420: POP
// for i in with_player_list do
7421: LD_ADDR_VAR 0 4
7425: PUSH
7426: LD_VAR 0 2
7430: PUSH
7431: FOR_IN
7432: IFFALSE 7451
// PlaceUnitArea ( i , player_enter_area , false ) ;
7434: LD_VAR 0 4
7438: PPUSH
7439: LD_INT 10
7441: PPUSH
7442: LD_INT 0
7444: PPUSH
7445: CALL_OW 49
7449: GO 7431
7451: POP
7452: POP
// for i in escaped_list do
7453: LD_ADDR_VAR 0 4
7457: PUSH
7458: LD_VAR 0 3
7462: PUSH
7463: FOR_IN
7464: IFFALSE 7503
// begin SetSide ( i , you_alt ) ;
7466: LD_VAR 0 4
7470: PPUSH
7471: LD_EXP 5
7475: PPUSH
7476: CALL_OW 235
// PlaceUnitXYR ( i , 140 , 50 , 4 , false ) ;
7480: LD_VAR 0 4
7484: PPUSH
7485: LD_INT 140
7487: PPUSH
7488: LD_INT 50
7490: PPUSH
7491: LD_INT 4
7493: PPUSH
7494: LD_INT 0
7496: PPUSH
7497: CALL_OW 50
// end ;
7501: GO 7463
7503: POP
7504: POP
// hiding_player_units = escaped_list ;
7505: LD_ADDR_EXP 122
7509: PUSH
7510: LD_VAR 0 3
7514: ST_TO_ADDR
// end ;
7515: LD_VAR 0 1
7519: RET
// function ScanBuildings ; var side , i , temp_list , base , area , temp_list_2 , k ; begin
7520: LD_INT 0
7522: PPUSH
7523: PPUSH
7524: PPUSH
7525: PPUSH
7526: PPUSH
7527: PPUSH
7528: PPUSH
7529: PPUSH
// for base in ai_bases do
7530: LD_ADDR_VAR 0 5
7534: PUSH
7535: LD_EXP 25
7539: PUSH
7540: FOR_IN
7541: IFFALSE 8004
// begin if base = 2 then
7543: LD_VAR 0 5
7547: PUSH
7548: LD_INT 2
7550: EQUAL
7551: IFFALSE 7555
// continue ;
7553: GO 7540
// area = GetBaseArea ( base ) ;
7555: LD_ADDR_VAR 0 6
7559: PUSH
7560: LD_VAR 0 5
7564: PPUSH
7565: CALL 27032 0 1
7569: ST_TO_ADDR
// side = GetBaseSide ( base ) ;
7570: LD_ADDR_VAR 0 2
7574: PUSH
7575: LD_VAR 0 5
7579: PPUSH
7580: CALL 27103 0 1
7584: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_building ] , [ f_inarea , area ] ] ) ) ;
7585: LD_ADDR_EXP 58
7589: PUSH
7590: LD_EXP 58
7594: PPUSH
7595: LD_VAR 0 5
7599: PPUSH
7600: LD_INT 22
7602: PUSH
7603: LD_VAR 0 2
7607: PUSH
7608: EMPTY
7609: LIST
7610: LIST
7611: PUSH
7612: LD_INT 21
7614: PUSH
7615: LD_INT 3
7617: PUSH
7618: EMPTY
7619: LIST
7620: LIST
7621: PUSH
7622: LD_INT 95
7624: PUSH
7625: LD_VAR 0 6
7629: PUSH
7630: EMPTY
7631: LIST
7632: LIST
7633: PUSH
7634: EMPTY
7635: LIST
7636: LIST
7637: LIST
7638: PPUSH
7639: CALL_OW 69
7643: PPUSH
7644: CALL_OW 1
7648: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
7649: LD_ADDR_VAR 0 3
7653: PUSH
7654: LD_EXP 58
7658: PUSH
7659: LD_VAR 0 5
7663: ARRAY
7664: PUSH
7665: FOR_IN
7666: IFFALSE 7687
// UpdateBuildingBasicVariables ( base , i , true ) ;
7668: LD_VAR 0 5
7672: PPUSH
7673: LD_VAR 0 3
7677: PPUSH
7678: LD_INT 1
7680: PPUSH
7681: CALL 9147 0 3
7685: GO 7665
7687: POP
7688: POP
// if base = 3 then
7689: LD_VAR 0 5
7693: PUSH
7694: LD_INT 3
7696: EQUAL
7697: IFFALSE 7717
// SetBName ( ai_depot [ base ] , campbar ) ;
7699: LD_EXP 35
7703: PUSH
7704: LD_VAR 0 5
7708: ARRAY
7709: PPUSH
7710: LD_STRING campbar
7712: PPUSH
7713: CALL_OW 500
// temp_list = [ ] ;
7717: LD_ADDR_VAR 0 4
7721: PUSH
7722: EMPTY
7723: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
7724: LD_ADDR_VAR 0 3
7728: PUSH
7729: LD_EXP 58
7733: PUSH
7734: LD_VAR 0 5
7738: ARRAY
7739: PUSH
7740: FOR_IN
7741: IFFALSE 7902
// begin if base = 3 and i = ai_teleporter [ base ] then
7743: LD_VAR 0 5
7747: PUSH
7748: LD_INT 3
7750: EQUAL
7751: PUSH
7752: LD_VAR 0 3
7756: PUSH
7757: LD_EXP 46
7761: PUSH
7762: LD_VAR 0 5
7766: ARRAY
7767: EQUAL
7768: AND
7769: IFFALSE 7801
// begin ai_excepted_buildings = Replace ( ai_excepted_buildings , base , [ i ] ) ;
7771: LD_ADDR_EXP 77
7775: PUSH
7776: LD_EXP 77
7780: PPUSH
7781: LD_VAR 0 5
7785: PPUSH
7786: LD_VAR 0 3
7790: PUSH
7791: EMPTY
7792: LIST
7793: PPUSH
7794: CALL_OW 1
7798: ST_TO_ADDR
// continue ;
7799: GO 7740
// end ; temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , GetBWeapon ( i ) ] ] ;
7801: LD_ADDR_VAR 0 4
7805: PUSH
7806: LD_VAR 0 4
7810: PUSH
7811: LD_VAR 0 3
7815: PPUSH
7816: CALL_OW 250
7820: PUSH
7821: LD_VAR 0 3
7825: PPUSH
7826: CALL_OW 251
7830: PUSH
7831: LD_VAR 0 3
7835: PPUSH
7836: CALL_OW 254
7840: PUSH
7841: LD_VAR 0 3
7845: PPUSH
7846: CALL_OW 266
7850: PUSH
7851: LD_VAR 0 3
7855: PPUSH
7856: LD_INT 1
7858: PPUSH
7859: CALL_OW 268
7863: PUSH
7864: LD_VAR 0 3
7868: PPUSH
7869: LD_INT 2
7871: PPUSH
7872: CALL_OW 268
7876: PUSH
7877: LD_VAR 0 3
7881: PPUSH
7882: CALL_OW 269
7886: PUSH
7887: EMPTY
7888: LIST
7889: LIST
7890: LIST
7891: LIST
7892: LIST
7893: LIST
7894: LIST
7895: PUSH
7896: EMPTY
7897: LIST
7898: ADD
7899: ST_TO_ADDR
// end ;
7900: GO 7740
7902: POP
7903: POP
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
7904: LD_ADDR_EXP 47
7908: PUSH
7909: LD_EXP 47
7913: PPUSH
7914: LD_VAR 0 5
7918: PPUSH
7919: LD_VAR 0 4
7923: PPUSH
7924: CALL_OW 1
7928: ST_TO_ADDR
// SortBuildingLocationsListInCorrectOrder ( base ) ;
7929: LD_VAR 0 5
7933: PPUSH
7934: CALL 10359 0 1
// for i in ai_siberite_mines [ base ] ^ ai_oil_mine [ base ] do
7938: LD_ADDR_VAR 0 3
7942: PUSH
7943: LD_EXP 42
7947: PUSH
7948: LD_VAR 0 5
7952: ARRAY
7953: PUSH
7954: LD_EXP 41
7958: PUSH
7959: LD_VAR 0 5
7963: ARRAY
7964: ADD
7965: PUSH
7966: FOR_IN
7967: IFFALSE 8000
// SetResourceVisibility ( GetX ( i ) , GetY ( i ) , side ) ;
7969: LD_VAR 0 3
7973: PPUSH
7974: CALL_OW 250
7978: PPUSH
7979: LD_VAR 0 3
7983: PPUSH
7984: CALL_OW 251
7988: PPUSH
7989: LD_VAR 0 2
7993: PPUSH
7994: CALL_OW 441
7998: GO 7966
8000: POP
8001: POP
// end ;
8002: GO 7540
8004: POP
8005: POP
// temp_list = [ [ 96 , 108 , 0 , b_depot , 0 , 0 , 0 ] , [ 91 , 98 , 3 , b_breastwork , 0 , 0 , 0 ] , [ 97 , 100 , 3 , b_breastwork , 0 , 0 , 0 ] , [ 87 , 111 , Rand ( 0 , 5 ) , b_siberite_mine , 0 , 0 , 0 ] ] ;
8006: LD_ADDR_VAR 0 4
8010: PUSH
8011: LD_INT 96
8013: PUSH
8014: LD_INT 108
8016: PUSH
8017: LD_INT 0
8019: PUSH
8020: LD_INT 0
8022: PUSH
8023: LD_INT 0
8025: PUSH
8026: LD_INT 0
8028: PUSH
8029: LD_INT 0
8031: PUSH
8032: EMPTY
8033: LIST
8034: LIST
8035: LIST
8036: LIST
8037: LIST
8038: LIST
8039: LIST
8040: PUSH
8041: LD_INT 91
8043: PUSH
8044: LD_INT 98
8046: PUSH
8047: LD_INT 3
8049: PUSH
8050: LD_INT 31
8052: PUSH
8053: LD_INT 0
8055: PUSH
8056: LD_INT 0
8058: PUSH
8059: LD_INT 0
8061: PUSH
8062: EMPTY
8063: LIST
8064: LIST
8065: LIST
8066: LIST
8067: LIST
8068: LIST
8069: LIST
8070: PUSH
8071: LD_INT 97
8073: PUSH
8074: LD_INT 100
8076: PUSH
8077: LD_INT 3
8079: PUSH
8080: LD_INT 31
8082: PUSH
8083: LD_INT 0
8085: PUSH
8086: LD_INT 0
8088: PUSH
8089: LD_INT 0
8091: PUSH
8092: EMPTY
8093: LIST
8094: LIST
8095: LIST
8096: LIST
8097: LIST
8098: LIST
8099: LIST
8100: PUSH
8101: LD_INT 87
8103: PUSH
8104: LD_INT 111
8106: PUSH
8107: LD_INT 0
8109: PPUSH
8110: LD_INT 5
8112: PPUSH
8113: CALL_OW 12
8117: PUSH
8118: LD_INT 30
8120: PUSH
8121: LD_INT 0
8123: PUSH
8124: LD_INT 0
8126: PUSH
8127: LD_INT 0
8129: PUSH
8130: EMPTY
8131: LIST
8132: LIST
8133: LIST
8134: LIST
8135: LIST
8136: LIST
8137: LIST
8138: PUSH
8139: EMPTY
8140: LIST
8141: LIST
8142: LIST
8143: LIST
8144: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , 2 , temp_list ) ;
8145: LD_ADDR_EXP 47
8149: PUSH
8150: LD_EXP 47
8154: PPUSH
8155: LD_INT 2
8157: PPUSH
8158: LD_VAR 0 4
8162: PPUSH
8163: CALL_OW 1
8167: ST_TO_ADDR
// SortBuildingLocationsListInCorrectOrder ( 2 ) ;
8168: LD_INT 2
8170: PPUSH
8171: CALL 10359 0 1
// SetResourceVisibility ( 87 , 111 , russians ) ;
8175: LD_INT 87
8177: PPUSH
8178: LD_INT 111
8180: PPUSH
8181: LD_EXP 3
8185: PPUSH
8186: CALL_OW 441
// if time_determined_situation = 2 then
8190: LD_EXP 134
8194: PUSH
8195: LD_INT 2
8197: EQUAL
8198: IFFALSE 8411
// begin InitUc ;
8200: CALL_OW 18
// InitBc ;
8204: CALL_OW 21
// uc_side = russians ;
8208: LD_ADDR_OWVAR 20
8212: PUSH
8213: LD_EXP 3
8217: ST_TO_ADDR
// uc_nation = nation_russian ;
8218: LD_ADDR_OWVAR 21
8222: PUSH
8223: LD_INT 3
8225: ST_TO_ADDR
// for i = 1 to ai_buildings_locations [ 2 ] do
8226: LD_ADDR_VAR 0 3
8230: PUSH
8231: DOUBLE
8232: LD_INT 1
8234: DEC
8235: ST_TO_ADDR
8236: LD_EXP 47
8240: PUSH
8241: LD_INT 2
8243: ARRAY
8244: PUSH
8245: FOR_TO
8246: IFFALSE 8409
// if ai_buildings_locations [ 2 ] [ i ] [ 4 ] = b_depot then
8248: LD_EXP 47
8252: PUSH
8253: LD_INT 2
8255: ARRAY
8256: PUSH
8257: LD_VAR 0 3
8261: ARRAY
8262: PUSH
8263: LD_INT 4
8265: ARRAY
8266: PUSH
8267: LD_INT 0
8269: EQUAL
8270: IFFALSE 8407
// begin bc_type = b_depot ;
8272: LD_ADDR_OWVAR 42
8276: PUSH
8277: LD_INT 0
8279: ST_TO_ADDR
// k = CreateAndPlaceBuildingXYD ( ai_buildings_locations [ 2 ] [ i ] [ 1 ] , ai_buildings_locations [ 2 ] [ i ] [ 2 ] , ai_buildings_locations [ 2 ] [ i ] [ 3 ] ) ;
8280: LD_ADDR_VAR 0 8
8284: PUSH
8285: LD_EXP 47
8289: PUSH
8290: LD_INT 2
8292: ARRAY
8293: PUSH
8294: LD_VAR 0 3
8298: ARRAY
8299: PUSH
8300: LD_INT 1
8302: ARRAY
8303: PPUSH
8304: LD_EXP 47
8308: PUSH
8309: LD_INT 2
8311: ARRAY
8312: PUSH
8313: LD_VAR 0 3
8317: ARRAY
8318: PUSH
8319: LD_INT 2
8321: ARRAY
8322: PPUSH
8323: LD_EXP 47
8327: PUSH
8328: LD_INT 2
8330: ARRAY
8331: PUSH
8332: LD_VAR 0 3
8336: ARRAY
8337: PUSH
8338: LD_INT 3
8340: ARRAY
8341: PPUSH
8342: CALL_OW 47
8346: ST_TO_ADDR
// temp_list = ai_all_buildings [ 2 ] ^ k ;
8347: LD_ADDR_VAR 0 4
8351: PUSH
8352: LD_EXP 58
8356: PUSH
8357: LD_INT 2
8359: ARRAY
8360: PUSH
8361: LD_VAR 0 8
8365: ADD
8366: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , 2 , temp_list ) ;
8367: LD_ADDR_EXP 58
8371: PUSH
8372: LD_EXP 58
8376: PPUSH
8377: LD_INT 2
8379: PPUSH
8380: LD_VAR 0 4
8384: PPUSH
8385: CALL_OW 1
8389: ST_TO_ADDR
// UpdateBuildingBasicVariables ( 2 , k , true ) ;
8390: LD_INT 2
8392: PPUSH
8393: LD_VAR 0 8
8397: PPUSH
8398: LD_INT 1
8400: PPUSH
8401: CALL 9147 0 3
// break ;
8405: GO 8409
// end ;
8407: GO 8245
8409: POP
8410: POP
// end ; if time_determined_situation = 3 then
8411: LD_EXP 134
8415: PUSH
8416: LD_INT 3
8418: EQUAL
8419: IFFALSE 8577
// begin InitUc ;
8421: CALL_OW 18
// InitBc ;
8425: CALL_OW 21
// uc_side = russians ;
8429: LD_ADDR_OWVAR 20
8433: PUSH
8434: LD_EXP 3
8438: ST_TO_ADDR
// uc_nation = nation_russian ;
8439: LD_ADDR_OWVAR 21
8443: PUSH
8444: LD_INT 3
8446: ST_TO_ADDR
// for i in ai_buildings_locations [ 2 ] do
8447: LD_ADDR_VAR 0 3
8451: PUSH
8452: LD_EXP 47
8456: PUSH
8457: LD_INT 2
8459: ARRAY
8460: PUSH
8461: FOR_IN
8462: IFFALSE 8575
// begin bc_type = i [ 4 ] ;
8464: LD_ADDR_OWVAR 42
8468: PUSH
8469: LD_VAR 0 3
8473: PUSH
8474: LD_INT 4
8476: ARRAY
8477: ST_TO_ADDR
// k = CreateAndPlaceBuildingXYD ( i [ 1 ] , i [ 2 ] , i [ 3 ] ) ;
8478: LD_ADDR_VAR 0 8
8482: PUSH
8483: LD_VAR 0 3
8487: PUSH
8488: LD_INT 1
8490: ARRAY
8491: PPUSH
8492: LD_VAR 0 3
8496: PUSH
8497: LD_INT 2
8499: ARRAY
8500: PPUSH
8501: LD_VAR 0 3
8505: PUSH
8506: LD_INT 3
8508: ARRAY
8509: PPUSH
8510: CALL_OW 47
8514: ST_TO_ADDR
// temp_list = ai_all_buildings [ 2 ] ^ k ;
8515: LD_ADDR_VAR 0 4
8519: PUSH
8520: LD_EXP 58
8524: PUSH
8525: LD_INT 2
8527: ARRAY
8528: PUSH
8529: LD_VAR 0 8
8533: ADD
8534: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , 2 , temp_list ) ;
8535: LD_ADDR_EXP 58
8539: PUSH
8540: LD_EXP 58
8544: PPUSH
8545: LD_INT 2
8547: PPUSH
8548: LD_VAR 0 4
8552: PPUSH
8553: CALL_OW 1
8557: ST_TO_ADDR
// UpdateBuildingBasicVariables ( 2 , k , true ) ;
8558: LD_INT 2
8560: PPUSH
8561: LD_VAR 0 8
8565: PPUSH
8566: LD_INT 1
8568: PPUSH
8569: CALL 9147 0 3
// end ;
8573: GO 8461
8575: POP
8576: POP
// end ; for i in ai_fact_extensions [ 1 ] do
8577: LD_ADDR_VAR 0 3
8581: PUSH
8582: LD_EXP 43
8586: PUSH
8587: LD_INT 1
8589: ARRAY
8590: PUSH
8591: FOR_IN
8592: IFFALSE 8655
// if GetBType ( i ) = b_ext_noncombat then
8594: LD_VAR 0 3
8598: PPUSH
8599: CALL_OW 266
8603: PUSH
8604: LD_INT 19
8606: EQUAL
8607: IFFALSE 8653
// begin ai_fact_extension_replace_location = Replace ( ai_fact_extension_replace_location , 1 , [ GetX ( i ) , GetY ( i ) ] ) ;
8609: LD_ADDR_EXP 78
8613: PUSH
8614: LD_EXP 78
8618: PPUSH
8619: LD_INT 1
8621: PPUSH
8622: LD_VAR 0 3
8626: PPUSH
8627: CALL_OW 250
8631: PUSH
8632: LD_VAR 0 3
8636: PPUSH
8637: CALL_OW 251
8641: PUSH
8642: EMPTY
8643: LIST
8644: LIST
8645: PPUSH
8646: CALL_OW 1
8650: ST_TO_ADDR
// break ;
8651: GO 8655
// end ;
8653: GO 8591
8655: POP
8656: POP
// end ;
8657: LD_VAR 0 1
8661: RET
// function ReplaceBunkerWithTurret ( id ) ; var un , temp_list ; begin
8662: LD_INT 0
8664: PPUSH
8665: PPUSH
8666: PPUSH
// InitUc ;
8667: CALL_OW 18
// InitBc ;
8671: CALL_OW 21
// uc_nation = GetNation ( id ) ;
8675: LD_ADDR_OWVAR 21
8679: PUSH
8680: LD_VAR 0 1
8684: PPUSH
8685: CALL_OW 248
8689: ST_TO_ADDR
// uc_side = GetSide ( id ) ;
8690: LD_ADDR_OWVAR 20
8694: PUSH
8695: LD_VAR 0 1
8699: PPUSH
8700: CALL_OW 255
8704: ST_TO_ADDR
// temp_list = [ GetX ( id ) , GetY ( id ) , GetDir ( id ) , GetBWeapon ( id ) ] ;
8705: LD_ADDR_VAR 0 4
8709: PUSH
8710: LD_VAR 0 1
8714: PPUSH
8715: CALL_OW 250
8719: PUSH
8720: LD_VAR 0 1
8724: PPUSH
8725: CALL_OW 251
8729: PUSH
8730: LD_VAR 0 1
8734: PPUSH
8735: CALL_OW 254
8739: PUSH
8740: LD_VAR 0 1
8744: PPUSH
8745: CALL_OW 269
8749: PUSH
8750: EMPTY
8751: LIST
8752: LIST
8753: LIST
8754: LIST
8755: ST_TO_ADDR
// DestroyUnit ( id ) ;
8756: LD_VAR 0 1
8760: PPUSH
8761: CALL_OW 65
// bc_type = b_turret ;
8765: LD_ADDR_OWVAR 42
8769: PUSH
8770: LD_INT 33
8772: ST_TO_ADDR
// un = CreateAndPlaceBuildingXYD ( temp_list [ 1 ] , temp_list [ 2 ] , temp_list [ 3 ] ) ;
8773: LD_ADDR_VAR 0 3
8777: PUSH
8778: LD_VAR 0 4
8782: PUSH
8783: LD_INT 1
8785: ARRAY
8786: PPUSH
8787: LD_VAR 0 4
8791: PUSH
8792: LD_INT 2
8794: ARRAY
8795: PPUSH
8796: LD_VAR 0 4
8800: PUSH
8801: LD_INT 3
8803: ARRAY
8804: PPUSH
8805: CALL_OW 47
8809: ST_TO_ADDR
// PlaceWeaponTurret ( un , temp_list [ 4 ] ) ;
8810: LD_VAR 0 3
8814: PPUSH
8815: LD_VAR 0 4
8819: PUSH
8820: LD_INT 4
8822: ARRAY
8823: PPUSH
8824: CALL_OW 431
// result = un ;
8828: LD_ADDR_VAR 0 2
8832: PUSH
8833: LD_VAR 0 3
8837: ST_TO_ADDR
// end ;
8838: LD_VAR 0 2
8842: RET
// function ReplaceBunkerWithBreastwork ( id ) ; var un , temp_list ; begin
8843: LD_INT 0
8845: PPUSH
8846: PPUSH
8847: PPUSH
// InitUc ;
8848: CALL_OW 18
// InitBc ;
8852: CALL_OW 21
// uc_nation = GetNation ( id ) ;
8856: LD_ADDR_OWVAR 21
8860: PUSH
8861: LD_VAR 0 1
8865: PPUSH
8866: CALL_OW 248
8870: ST_TO_ADDR
// uc_side = GetSide ( id ) ;
8871: LD_ADDR_OWVAR 20
8875: PUSH
8876: LD_VAR 0 1
8880: PPUSH
8881: CALL_OW 255
8885: ST_TO_ADDR
// temp_list = [ GetX ( id ) , GetY ( id ) , GetDir ( id ) ] ;
8886: LD_ADDR_VAR 0 4
8890: PUSH
8891: LD_VAR 0 1
8895: PPUSH
8896: CALL_OW 250
8900: PUSH
8901: LD_VAR 0 1
8905: PPUSH
8906: CALL_OW 251
8910: PUSH
8911: LD_VAR 0 1
8915: PPUSH
8916: CALL_OW 254
8920: PUSH
8921: EMPTY
8922: LIST
8923: LIST
8924: LIST
8925: ST_TO_ADDR
// DestroyUnit ( id ) ;
8926: LD_VAR 0 1
8930: PPUSH
8931: CALL_OW 65
// bc_type = b_breastwork ;
8935: LD_ADDR_OWVAR 42
8939: PUSH
8940: LD_INT 31
8942: ST_TO_ADDR
// un = CreateAndPlaceBuildingXYD ( temp_list [ 1 ] , temp_list [ 2 ] , temp_list [ 3 ] ) ;
8943: LD_ADDR_VAR 0 3
8947: PUSH
8948: LD_VAR 0 4
8952: PUSH
8953: LD_INT 1
8955: ARRAY
8956: PPUSH
8957: LD_VAR 0 4
8961: PUSH
8962: LD_INT 2
8964: ARRAY
8965: PPUSH
8966: LD_VAR 0 4
8970: PUSH
8971: LD_INT 3
8973: ARRAY
8974: PPUSH
8975: CALL_OW 47
8979: ST_TO_ADDR
// result = un ;
8980: LD_ADDR_VAR 0 2
8984: PUSH
8985: LD_VAR 0 3
8989: ST_TO_ADDR
// end ;
8990: LD_VAR 0 2
8994: RET
// function ReplaceBarracksWithArmoury ( id ) ; var un , temp_list ; begin
8995: LD_INT 0
8997: PPUSH
8998: PPUSH
8999: PPUSH
// InitUc ;
9000: CALL_OW 18
// InitBc ;
9004: CALL_OW 21
// uc_nation = GetNation ( id ) ;
9008: LD_ADDR_OWVAR 21
9012: PUSH
9013: LD_VAR 0 1
9017: PPUSH
9018: CALL_OW 248
9022: ST_TO_ADDR
// uc_side = GetSide ( id ) ;
9023: LD_ADDR_OWVAR 20
9027: PUSH
9028: LD_VAR 0 1
9032: PPUSH
9033: CALL_OW 255
9037: ST_TO_ADDR
// temp_list = [ GetX ( id ) , GetY ( id ) , GetDir ( id ) ] ;
9038: LD_ADDR_VAR 0 4
9042: PUSH
9043: LD_VAR 0 1
9047: PPUSH
9048: CALL_OW 250
9052: PUSH
9053: LD_VAR 0 1
9057: PPUSH
9058: CALL_OW 251
9062: PUSH
9063: LD_VAR 0 1
9067: PPUSH
9068: CALL_OW 254
9072: PUSH
9073: EMPTY
9074: LIST
9075: LIST
9076: LIST
9077: ST_TO_ADDR
// DestroyUnit ( id ) ;
9078: LD_VAR 0 1
9082: PPUSH
9083: CALL_OW 65
// bc_type = b_armoury ;
9087: LD_ADDR_OWVAR 42
9091: PUSH
9092: LD_INT 4
9094: ST_TO_ADDR
// un = CreateAndPlaceBuildingXYD ( temp_list [ 1 ] , temp_list [ 2 ] , temp_list [ 3 ] ) ;
9095: LD_ADDR_VAR 0 3
9099: PUSH
9100: LD_VAR 0 4
9104: PUSH
9105: LD_INT 1
9107: ARRAY
9108: PPUSH
9109: LD_VAR 0 4
9113: PUSH
9114: LD_INT 2
9116: ARRAY
9117: PPUSH
9118: LD_VAR 0 4
9122: PUSH
9123: LD_INT 3
9125: ARRAY
9126: PPUSH
9127: CALL_OW 47
9131: ST_TO_ADDR
// result = un ;
9132: LD_ADDR_VAR 0 2
9136: PUSH
9137: LD_VAR 0 3
9141: ST_TO_ADDR
// end ;
9142: LD_VAR 0 2
9146: RET
// export function UpdateBuildingBasicVariables ( base , un , add ) ; var temp_list ; begin
9147: LD_INT 0
9149: PPUSH
9150: PPUSH
// case GetBType ( un ) of b_depot , b_warehouse :
9151: LD_VAR 0 2
9155: PPUSH
9156: CALL_OW 266
9160: PUSH
9161: LD_INT 0
9163: DOUBLE
9164: EQUAL
9165: IFTRUE 9175
9167: LD_INT 1
9169: DOUBLE
9170: EQUAL
9171: IFTRUE 9175
9173: GO 9252
9175: POP
// if add then
9176: LD_VAR 0 3
9180: IFFALSE 9209
// ai_depot = Replace ( ai_depot , base , un ) else
9182: LD_ADDR_EXP 35
9186: PUSH
9187: LD_EXP 35
9191: PPUSH
9192: LD_VAR 0 1
9196: PPUSH
9197: LD_VAR 0 2
9201: PPUSH
9202: CALL_OW 1
9206: ST_TO_ADDR
9207: GO 9250
// if un = ai_depot [ base ] then
9209: LD_VAR 0 2
9213: PUSH
9214: LD_EXP 35
9218: PUSH
9219: LD_VAR 0 1
9223: ARRAY
9224: EQUAL
9225: IFFALSE 9250
// ai_depot = Replace ( ai_depot , base , 0 ) ; b_lab , b_lab_half , b_lab_full :
9227: LD_ADDR_EXP 35
9231: PUSH
9232: LD_EXP 35
9236: PPUSH
9237: LD_VAR 0 1
9241: PPUSH
9242: LD_INT 0
9244: PPUSH
9245: CALL_OW 1
9249: ST_TO_ADDR
9250: GO 10354
9252: LD_INT 6
9254: DOUBLE
9255: EQUAL
9256: IFTRUE 9272
9258: LD_INT 7
9260: DOUBLE
9261: EQUAL
9262: IFTRUE 9272
9264: LD_INT 8
9266: DOUBLE
9267: EQUAL
9268: IFTRUE 9272
9270: GO 9352
9272: POP
// begin if add then
9273: LD_VAR 0 3
9277: IFFALSE 9303
// temp_list = ai_labs [ base ] ^ un else
9279: LD_ADDR_VAR 0 5
9283: PUSH
9284: LD_EXP 36
9288: PUSH
9289: LD_VAR 0 1
9293: ARRAY
9294: PUSH
9295: LD_VAR 0 2
9299: ADD
9300: ST_TO_ADDR
9301: GO 9325
// temp_list = ai_labs [ base ] diff un ;
9303: LD_ADDR_VAR 0 5
9307: PUSH
9308: LD_EXP 36
9312: PUSH
9313: LD_VAR 0 1
9317: ARRAY
9318: PUSH
9319: LD_VAR 0 2
9323: DIFF
9324: ST_TO_ADDR
// ai_labs = Replace ( ai_labs , base , temp_list ) ;
9325: LD_ADDR_EXP 36
9329: PUSH
9330: LD_EXP 36
9334: PPUSH
9335: LD_VAR 0 1
9339: PPUSH
9340: LD_VAR 0 5
9344: PPUSH
9345: CALL_OW 1
9349: ST_TO_ADDR
// end ; b_factory , b_workshop :
9350: GO 10354
9352: LD_INT 3
9354: DOUBLE
9355: EQUAL
9356: IFTRUE 9366
9358: LD_INT 2
9360: DOUBLE
9361: EQUAL
9362: IFTRUE 9366
9364: GO 9446
9366: POP
// begin if add then
9367: LD_VAR 0 3
9371: IFFALSE 9397
// temp_list = ai_facts [ base ] ^ un else
9373: LD_ADDR_VAR 0 5
9377: PUSH
9378: LD_EXP 37
9382: PUSH
9383: LD_VAR 0 1
9387: ARRAY
9388: PUSH
9389: LD_VAR 0 2
9393: ADD
9394: ST_TO_ADDR
9395: GO 9419
// temp_list = ai_facts [ base ] diff un ;
9397: LD_ADDR_VAR 0 5
9401: PUSH
9402: LD_EXP 37
9406: PUSH
9407: LD_VAR 0 1
9411: ARRAY
9412: PUSH
9413: LD_VAR 0 2
9417: DIFF
9418: ST_TO_ADDR
// ai_facts = Replace ( ai_facts , base , temp_list ) ;
9419: LD_ADDR_EXP 37
9423: PUSH
9424: LD_EXP 37
9428: PPUSH
9429: LD_VAR 0 1
9433: PPUSH
9434: LD_VAR 0 5
9438: PPUSH
9439: CALL_OW 1
9443: ST_TO_ADDR
// end ; b_armoury , b_barracks , b_fort :
9444: GO 10354
9446: LD_INT 4
9448: DOUBLE
9449: EQUAL
9450: IFTRUE 9466
9452: LD_INT 5
9454: DOUBLE
9455: EQUAL
9456: IFTRUE 9466
9458: LD_INT 35
9460: DOUBLE
9461: EQUAL
9462: IFTRUE 9466
9464: GO 9546
9466: POP
// begin if add then
9467: LD_VAR 0 3
9471: IFFALSE 9497
// temp_list = ai_armouries [ base ] ^ un else
9473: LD_ADDR_VAR 0 5
9477: PUSH
9478: LD_EXP 38
9482: PUSH
9483: LD_VAR 0 1
9487: ARRAY
9488: PUSH
9489: LD_VAR 0 2
9493: ADD
9494: ST_TO_ADDR
9495: GO 9519
// temp_list = ai_armouries [ base ] diff un ;
9497: LD_ADDR_VAR 0 5
9501: PUSH
9502: LD_EXP 38
9506: PUSH
9507: LD_VAR 0 1
9511: ARRAY
9512: PUSH
9513: LD_VAR 0 2
9517: DIFF
9518: ST_TO_ADDR
// ai_armouries = Replace ( ai_armouries , base , temp_list ) ;
9519: LD_ADDR_EXP 38
9523: PUSH
9524: LD_EXP 38
9528: PPUSH
9529: LD_VAR 0 1
9533: PPUSH
9534: LD_VAR 0 5
9538: PPUSH
9539: CALL_OW 1
9543: ST_TO_ADDR
// end ; b_breastwork , b_bunker :
9544: GO 10354
9546: LD_INT 31
9548: DOUBLE
9549: EQUAL
9550: IFTRUE 9560
9552: LD_INT 32
9554: DOUBLE
9555: EQUAL
9556: IFTRUE 9560
9558: GO 9640
9560: POP
// begin if add then
9561: LD_VAR 0 3
9565: IFFALSE 9591
// temp_list = ai_bunkers [ base ] ^ un else
9567: LD_ADDR_VAR 0 5
9571: PUSH
9572: LD_EXP 39
9576: PUSH
9577: LD_VAR 0 1
9581: ARRAY
9582: PUSH
9583: LD_VAR 0 2
9587: ADD
9588: ST_TO_ADDR
9589: GO 9613
// temp_list = ai_bunkers [ base ] diff un ;
9591: LD_ADDR_VAR 0 5
9595: PUSH
9596: LD_EXP 39
9600: PUSH
9601: LD_VAR 0 1
9605: ARRAY
9606: PUSH
9607: LD_VAR 0 2
9611: DIFF
9612: ST_TO_ADDR
// ai_bunkers = Replace ( ai_bunkers , base , temp_list ) ;
9613: LD_ADDR_EXP 39
9617: PUSH
9618: LD_EXP 39
9622: PPUSH
9623: LD_VAR 0 1
9627: PPUSH
9628: LD_VAR 0 5
9632: PPUSH
9633: CALL_OW 1
9637: ST_TO_ADDR
// end ; b_turret :
9638: GO 10354
9640: LD_INT 33
9642: DOUBLE
9643: EQUAL
9644: IFTRUE 9648
9646: GO 9728
9648: POP
// begin if add then
9649: LD_VAR 0 3
9653: IFFALSE 9679
// temp_list = ai_turrets [ base ] ^ un else
9655: LD_ADDR_VAR 0 5
9659: PUSH
9660: LD_EXP 40
9664: PUSH
9665: LD_VAR 0 1
9669: ARRAY
9670: PUSH
9671: LD_VAR 0 2
9675: ADD
9676: ST_TO_ADDR
9677: GO 9701
// temp_list = ai_turrets [ base ] diff un ;
9679: LD_ADDR_VAR 0 5
9683: PUSH
9684: LD_EXP 40
9688: PUSH
9689: LD_VAR 0 1
9693: ARRAY
9694: PUSH
9695: LD_VAR 0 2
9699: DIFF
9700: ST_TO_ADDR
// ai_turrets = Replace ( ai_turrets , base , temp_list ) ;
9701: LD_ADDR_EXP 40
9705: PUSH
9706: LD_EXP 40
9710: PPUSH
9711: LD_VAR 0 1
9715: PPUSH
9716: LD_VAR 0 5
9720: PPUSH
9721: CALL_OW 1
9725: ST_TO_ADDR
// end ; b_oil_mine :
9726: GO 10354
9728: LD_INT 29
9730: DOUBLE
9731: EQUAL
9732: IFTRUE 9736
9734: GO 9813
9736: POP
// if add then
9737: LD_VAR 0 3
9741: IFFALSE 9770
// ai_oil_mine = Replace ( ai_oil_mine , base , un ) else
9743: LD_ADDR_EXP 41
9747: PUSH
9748: LD_EXP 41
9752: PPUSH
9753: LD_VAR 0 1
9757: PPUSH
9758: LD_VAR 0 2
9762: PPUSH
9763: CALL_OW 1
9767: ST_TO_ADDR
9768: GO 9811
// if un = ai_oil_mine [ base ] then
9770: LD_VAR 0 2
9774: PUSH
9775: LD_EXP 41
9779: PUSH
9780: LD_VAR 0 1
9784: ARRAY
9785: EQUAL
9786: IFFALSE 9811
// ai_oil_mine = Replace ( ai_oil_mine , base , 0 ) ; b_siberite_mine :
9788: LD_ADDR_EXP 41
9792: PUSH
9793: LD_EXP 41
9797: PPUSH
9798: LD_VAR 0 1
9802: PPUSH
9803: LD_INT 0
9805: PPUSH
9806: CALL_OW 1
9810: ST_TO_ADDR
9811: GO 10354
9813: LD_INT 30
9815: DOUBLE
9816: EQUAL
9817: IFTRUE 9821
9819: GO 9901
9821: POP
// begin if add then
9822: LD_VAR 0 3
9826: IFFALSE 9852
// temp_list = ai_siberite_mines [ base ] ^ un else
9828: LD_ADDR_VAR 0 5
9832: PUSH
9833: LD_EXP 42
9837: PUSH
9838: LD_VAR 0 1
9842: ARRAY
9843: PUSH
9844: LD_VAR 0 2
9848: ADD
9849: ST_TO_ADDR
9850: GO 9874
// temp_list = ai_siberite_mines [ base ] diff un ;
9852: LD_ADDR_VAR 0 5
9856: PUSH
9857: LD_EXP 42
9861: PUSH
9862: LD_VAR 0 1
9866: ARRAY
9867: PUSH
9868: LD_VAR 0 2
9872: DIFF
9873: ST_TO_ADDR
// ai_siberite_mines = Replace ( ai_siberite_mines , base , temp_list ) ;
9874: LD_ADDR_EXP 42
9878: PUSH
9879: LD_EXP 42
9883: PPUSH
9884: LD_VAR 0 1
9888: PPUSH
9889: LD_VAR 0 5
9893: PPUSH
9894: CALL_OW 1
9898: ST_TO_ADDR
// end ; b_ext_gun , b_ext_noncombat , b_ext_laser , b_ext_computer , b_ext_radar , b_ext_rocket , b_ext_siberium , b_ext_track , b_ext_stitch :
9899: GO 10354
9901: LD_INT 17
9903: DOUBLE
9904: EQUAL
9905: IFTRUE 9957
9907: LD_INT 19
9909: DOUBLE
9910: EQUAL
9911: IFTRUE 9957
9913: LD_INT 25
9915: DOUBLE
9916: EQUAL
9917: IFTRUE 9957
9919: LD_INT 24
9921: DOUBLE
9922: EQUAL
9923: IFTRUE 9957
9925: LD_INT 20
9927: DOUBLE
9928: EQUAL
9929: IFTRUE 9957
9931: LD_INT 18
9933: DOUBLE
9934: EQUAL
9935: IFTRUE 9957
9937: LD_INT 21
9939: DOUBLE
9940: EQUAL
9941: IFTRUE 9957
9943: LD_INT 16
9945: DOUBLE
9946: EQUAL
9947: IFTRUE 9957
9949: LD_INT 23
9951: DOUBLE
9952: EQUAL
9953: IFTRUE 9957
9955: GO 10037
9957: POP
// begin if add then
9958: LD_VAR 0 3
9962: IFFALSE 9988
// temp_list = ai_fact_extensions [ base ] ^ un else
9964: LD_ADDR_VAR 0 5
9968: PUSH
9969: LD_EXP 43
9973: PUSH
9974: LD_VAR 0 1
9978: ARRAY
9979: PUSH
9980: LD_VAR 0 2
9984: ADD
9985: ST_TO_ADDR
9986: GO 10010
// temp_list = ai_fact_extensions [ base ] diff un ;
9988: LD_ADDR_VAR 0 5
9992: PUSH
9993: LD_EXP 43
9997: PUSH
9998: LD_VAR 0 1
10002: ARRAY
10003: PUSH
10004: LD_VAR 0 2
10008: DIFF
10009: ST_TO_ADDR
// ai_fact_extensions = Replace ( ai_fact_extensions , base , temp_list ) ;
10010: LD_ADDR_EXP 43
10014: PUSH
10015: LD_EXP 43
10019: PPUSH
10020: LD_VAR 0 1
10024: PPUSH
10025: LD_VAR 0 5
10029: PPUSH
10030: CALL_OW 1
10034: ST_TO_ADDR
// end ; b_solar_power , b_oil_power , b_siberite_power :
10035: GO 10354
10037: LD_INT 27
10039: DOUBLE
10040: EQUAL
10041: IFTRUE 10057
10043: LD_INT 26
10045: DOUBLE
10046: EQUAL
10047: IFTRUE 10057
10049: LD_INT 28
10051: DOUBLE
10052: EQUAL
10053: IFTRUE 10057
10055: GO 10137
10057: POP
// begin if add then
10058: LD_VAR 0 3
10062: IFFALSE 10088
// temp_list = ai_power_plants [ base ] ^ un else
10064: LD_ADDR_VAR 0 5
10068: PUSH
10069: LD_EXP 44
10073: PUSH
10074: LD_VAR 0 1
10078: ARRAY
10079: PUSH
10080: LD_VAR 0 2
10084: ADD
10085: ST_TO_ADDR
10086: GO 10110
// temp_list = ai_power_plants [ base ] diff un ;
10088: LD_ADDR_VAR 0 5
10092: PUSH
10093: LD_EXP 44
10097: PUSH
10098: LD_VAR 0 1
10102: ARRAY
10103: PUSH
10104: LD_VAR 0 2
10108: DIFF
10109: ST_TO_ADDR
// ai_power_plants = Replace ( ai_power_plants , base , temp_list ) ;
10110: LD_ADDR_EXP 44
10114: PUSH
10115: LD_EXP 44
10119: PPUSH
10120: LD_VAR 0 1
10124: PPUSH
10125: LD_VAR 0 5
10129: PPUSH
10130: CALL_OW 1
10134: ST_TO_ADDR
// end ; b_control_tower :
10135: GO 10354
10137: LD_INT 36
10139: DOUBLE
10140: EQUAL
10141: IFTRUE 10145
10143: GO 10222
10145: POP
// begin if add then
10146: LD_VAR 0 3
10150: IFFALSE 10179
// ai_control_tower = Replace ( ai_control_tower , base , un ) else
10152: LD_ADDR_EXP 45
10156: PUSH
10157: LD_EXP 45
10161: PPUSH
10162: LD_VAR 0 1
10166: PPUSH
10167: LD_VAR 0 2
10171: PPUSH
10172: CALL_OW 1
10176: ST_TO_ADDR
10177: GO 10220
// if un = ai_control_tower [ base ] then
10179: LD_VAR 0 2
10183: PUSH
10184: LD_EXP 45
10188: PUSH
10189: LD_VAR 0 1
10193: ARRAY
10194: EQUAL
10195: IFFALSE 10220
// ai_control_tower = Replace ( ai_control_tower , base , 0 ) ;
10197: LD_ADDR_EXP 45
10201: PUSH
10202: LD_EXP 45
10206: PPUSH
10207: LD_VAR 0 1
10211: PPUSH
10212: LD_INT 0
10214: PPUSH
10215: CALL_OW 1
10219: ST_TO_ADDR
// end ; b_teleport :
10220: GO 10354
10222: LD_INT 34
10224: DOUBLE
10225: EQUAL
10226: IFTRUE 10230
10228: GO 10353
10230: POP
// begin if add then
10231: LD_VAR 0 3
10235: IFFALSE 10287
// begin ai_teleporter = Replace ( ai_teleporter , base , un ) ;
10237: LD_ADDR_EXP 46
10241: PUSH
10242: LD_EXP 46
10246: PPUSH
10247: LD_VAR 0 1
10251: PPUSH
10252: LD_VAR 0 2
10256: PPUSH
10257: CALL_OW 1
10261: ST_TO_ADDR
// ai_teleporter_exit_placed = Replace ( ai_teleporter_exit_placed , base , false ) ;
10262: LD_ADDR_EXP 76
10266: PUSH
10267: LD_EXP 76
10271: PPUSH
10272: LD_VAR 0 1
10276: PPUSH
10277: LD_INT 0
10279: PPUSH
10280: CALL_OW 1
10284: ST_TO_ADDR
// end else
10285: GO 10351
// if un = ai_teleporter [ base ] then
10287: LD_VAR 0 2
10291: PUSH
10292: LD_EXP 46
10296: PUSH
10297: LD_VAR 0 1
10301: ARRAY
10302: EQUAL
10303: IFFALSE 10351
// begin ai_teleporter = Replace ( ai_teleporter , base , 0 ) ;
10305: LD_ADDR_EXP 46
10309: PUSH
10310: LD_EXP 46
10314: PPUSH
10315: LD_VAR 0 1
10319: PPUSH
10320: LD_INT 0
10322: PPUSH
10323: CALL_OW 1
10327: ST_TO_ADDR
// ai_teleporter_exit_placed = Replace ( ai_teleporter_exit_placed , base , false ) ;
10328: LD_ADDR_EXP 76
10332: PUSH
10333: LD_EXP 76
10337: PPUSH
10338: LD_VAR 0 1
10342: PPUSH
10343: LD_INT 0
10345: PPUSH
10346: CALL_OW 1
10350: ST_TO_ADDR
// end ; end ; end ;
10351: GO 10354
10353: POP
// end ;
10354: LD_VAR 0 4
10358: RET
// export function SortBuildingLocationsListInCorrectOrder ( base ) ; var i , temp_list , p ; begin
10359: LD_INT 0
10361: PPUSH
10362: PPUSH
10363: PPUSH
10364: PPUSH
// temp_list = [ ] ;
10365: LD_ADDR_VAR 0 4
10369: PUSH
10370: EMPTY
10371: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
10372: LD_ADDR_VAR 0 3
10376: PUSH
10377: LD_EXP 47
10381: PUSH
10382: LD_VAR 0 1
10386: ARRAY
10387: PUSH
10388: FOR_IN
10389: IFFALSE 10762
// begin case i [ 4 ] of b_depot , b_warehouse :
10391: LD_VAR 0 3
10395: PUSH
10396: LD_INT 4
10398: ARRAY
10399: PUSH
10400: LD_INT 0
10402: DOUBLE
10403: EQUAL
10404: IFTRUE 10414
10406: LD_INT 1
10408: DOUBLE
10409: EQUAL
10410: IFTRUE 10414
10412: GO 10425
10414: POP
// p = 100 ; b_armoury , b_barracks , b_fort :
10415: LD_ADDR_VAR 0 5
10419: PUSH
10420: LD_INT 100
10422: ST_TO_ADDR
10423: GO 10744
10425: LD_INT 4
10427: DOUBLE
10428: EQUAL
10429: IFTRUE 10445
10431: LD_INT 5
10433: DOUBLE
10434: EQUAL
10435: IFTRUE 10445
10437: LD_INT 35
10439: DOUBLE
10440: EQUAL
10441: IFTRUE 10445
10443: GO 10456
10445: POP
// p = 99 ; b_solar_power , b_oil_power , b_siberite_power :
10446: LD_ADDR_VAR 0 5
10450: PUSH
10451: LD_INT 99
10453: ST_TO_ADDR
10454: GO 10744
10456: LD_INT 27
10458: DOUBLE
10459: EQUAL
10460: IFTRUE 10476
10462: LD_INT 26
10464: DOUBLE
10465: EQUAL
10466: IFTRUE 10476
10468: LD_INT 28
10470: DOUBLE
10471: EQUAL
10472: IFTRUE 10476
10474: GO 10487
10476: POP
// p = 98 ; b_breastwork :
10477: LD_ADDR_VAR 0 5
10481: PUSH
10482: LD_INT 98
10484: ST_TO_ADDR
10485: GO 10744
10487: LD_INT 31
10489: DOUBLE
10490: EQUAL
10491: IFTRUE 10495
10493: GO 10506
10495: POP
// p = 97 ; b_factory , b_workshop :
10496: LD_ADDR_VAR 0 5
10500: PUSH
10501: LD_INT 97
10503: ST_TO_ADDR
10504: GO 10744
10506: LD_INT 3
10508: DOUBLE
10509: EQUAL
10510: IFTRUE 10520
10512: LD_INT 2
10514: DOUBLE
10515: EQUAL
10516: IFTRUE 10520
10518: GO 10531
10520: POP
// p = 96 ; b_ext_gun , b_ext_noncombat , b_ext_laser , b_ext_computer , b_ext_radar , b_ext_rocket , b_ext_siberium , b_ext_track , b_ext_stitch :
10521: LD_ADDR_VAR 0 5
10525: PUSH
10526: LD_INT 96
10528: ST_TO_ADDR
10529: GO 10744
10531: LD_INT 17
10533: DOUBLE
10534: EQUAL
10535: IFTRUE 10587
10537: LD_INT 19
10539: DOUBLE
10540: EQUAL
10541: IFTRUE 10587
10543: LD_INT 25
10545: DOUBLE
10546: EQUAL
10547: IFTRUE 10587
10549: LD_INT 24
10551: DOUBLE
10552: EQUAL
10553: IFTRUE 10587
10555: LD_INT 20
10557: DOUBLE
10558: EQUAL
10559: IFTRUE 10587
10561: LD_INT 18
10563: DOUBLE
10564: EQUAL
10565: IFTRUE 10587
10567: LD_INT 21
10569: DOUBLE
10570: EQUAL
10571: IFTRUE 10587
10573: LD_INT 16
10575: DOUBLE
10576: EQUAL
10577: IFTRUE 10587
10579: LD_INT 23
10581: DOUBLE
10582: EQUAL
10583: IFTRUE 10587
10585: GO 10598
10587: POP
// p = 95 ; b_bunker :
10588: LD_ADDR_VAR 0 5
10592: PUSH
10593: LD_INT 95
10595: ST_TO_ADDR
10596: GO 10744
10598: LD_INT 32
10600: DOUBLE
10601: EQUAL
10602: IFTRUE 10606
10604: GO 10617
10606: POP
// p = 94 ; b_control_tower :
10607: LD_ADDR_VAR 0 5
10611: PUSH
10612: LD_INT 94
10614: ST_TO_ADDR
10615: GO 10744
10617: LD_INT 36
10619: DOUBLE
10620: EQUAL
10621: IFTRUE 10625
10623: GO 10636
10625: POP
// p = 93 ; b_turret :
10626: LD_ADDR_VAR 0 5
10630: PUSH
10631: LD_INT 93
10633: ST_TO_ADDR
10634: GO 10744
10636: LD_INT 33
10638: DOUBLE
10639: EQUAL
10640: IFTRUE 10644
10642: GO 10655
10644: POP
// p = 92 ; b_lab , b_lab_half , b_lab_full :
10645: LD_ADDR_VAR 0 5
10649: PUSH
10650: LD_INT 92
10652: ST_TO_ADDR
10653: GO 10744
10655: LD_INT 6
10657: DOUBLE
10658: EQUAL
10659: IFTRUE 10675
10661: LD_INT 7
10663: DOUBLE
10664: EQUAL
10665: IFTRUE 10675
10667: LD_INT 8
10669: DOUBLE
10670: EQUAL
10671: IFTRUE 10675
10673: GO 10686
10675: POP
// p = 91 ; b_teleport :
10676: LD_ADDR_VAR 0 5
10680: PUSH
10681: LD_INT 91
10683: ST_TO_ADDR
10684: GO 10744
10686: LD_INT 34
10688: DOUBLE
10689: EQUAL
10690: IFTRUE 10694
10692: GO 10705
10694: POP
// p = 90 ; b_siberite_mine :
10695: LD_ADDR_VAR 0 5
10699: PUSH
10700: LD_INT 90
10702: ST_TO_ADDR
10703: GO 10744
10705: LD_INT 30
10707: DOUBLE
10708: EQUAL
10709: IFTRUE 10713
10711: GO 10724
10713: POP
// p = 89 ; b_oil_mine :
10714: LD_ADDR_VAR 0 5
10718: PUSH
10719: LD_INT 89
10721: ST_TO_ADDR
10722: GO 10744
10724: LD_INT 29
10726: DOUBLE
10727: EQUAL
10728: IFTRUE 10732
10730: GO 10743
10732: POP
// p = 88 ; end ;
10733: LD_ADDR_VAR 0 5
10737: PUSH
10738: LD_INT 88
10740: ST_TO_ADDR
10741: GO 10744
10743: POP
// temp_list = temp_list ^ p ;
10744: LD_ADDR_VAR 0 4
10748: PUSH
10749: LD_VAR 0 4
10753: PUSH
10754: LD_VAR 0 5
10758: ADD
10759: ST_TO_ADDR
// end ;
10760: GO 10388
10762: POP
10763: POP
// temp_list = SortListByListDesc ( ai_buildings_locations [ base ] , temp_list ) ;
10764: LD_ADDR_VAR 0 4
10768: PUSH
10769: LD_EXP 47
10773: PUSH
10774: LD_VAR 0 1
10778: ARRAY
10779: PPUSH
10780: LD_VAR 0 4
10784: PPUSH
10785: CALL_OW 77
10789: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
10790: LD_ADDR_EXP 47
10794: PUSH
10795: LD_EXP 47
10799: PPUSH
10800: LD_VAR 0 1
10804: PPUSH
10805: LD_VAR 0 4
10809: PPUSH
10810: CALL_OW 1
10814: ST_TO_ADDR
// end ;
10815: LD_VAR 0 2
10819: RET
// function PrepareComputerSides ; var i , temp_list , side , base , num ; begin
10820: LD_INT 0
10822: PPUSH
10823: PPUSH
10824: PPUSH
10825: PPUSH
10826: PPUSH
10827: PPUSH
// for base in ai_bases do
10828: LD_ADDR_VAR 0 5
10832: PUSH
10833: LD_EXP 25
10837: PUSH
10838: FOR_IN
10839: IFFALSE 11922
// begin side = GetBaseSide ( base ) ;
10841: LD_ADDR_VAR 0 4
10845: PUSH
10846: LD_VAR 0 5
10850: PPUSH
10851: CALL 27103 0 1
10855: ST_TO_ADDR
// InitUc ;
10856: CALL_OW 18
// InitHc ;
10860: CALL_OW 19
// uc_side = side ;
10864: LD_ADDR_OWVAR 20
10868: PUSH
10869: LD_VAR 0 4
10873: ST_TO_ADDR
// case side of russians :
10874: LD_VAR 0 4
10878: PUSH
10879: LD_EXP 3
10883: DOUBLE
10884: EQUAL
10885: IFTRUE 10889
10887: GO 10900
10889: POP
// uc_nation = nation_russian ; farmer_side :
10890: LD_ADDR_OWVAR 21
10894: PUSH
10895: LD_INT 3
10897: ST_TO_ADDR
10898: GO 10922
10900: LD_EXP 6
10904: DOUBLE
10905: EQUAL
10906: IFTRUE 10910
10908: GO 10921
10910: POP
// uc_nation = nation_arabian ; end ;
10911: LD_ADDR_OWVAR 21
10915: PUSH
10916: LD_INT 2
10918: ST_TO_ADDR
10919: GO 10922
10921: POP
// case base of 1 :
10922: LD_VAR 0 5
10926: PUSH
10927: LD_INT 1
10929: DOUBLE
10930: EQUAL
10931: IFTRUE 10935
10933: GO 11059
10935: POP
// begin temp_list = CreateUnitsWithClass ( [ 1 , 3 , 4 ] [ difficulty ] + UnitFilter ( buildings_except_from_lvlup , [ f_or , [ f_btype , b_bunker ] , [ f_btype , b_breastwork ] ] ) , class_soldier , side ) ;
10936: LD_ADDR_VAR 0 3
10940: PUSH
10941: LD_INT 1
10943: PUSH
10944: LD_INT 3
10946: PUSH
10947: LD_INT 4
10949: PUSH
10950: EMPTY
10951: LIST
10952: LIST
10953: LIST
10954: PUSH
10955: LD_OWVAR 67
10959: ARRAY
10960: PUSH
10961: LD_EXP 120
10965: PPUSH
10966: LD_INT 2
10968: PUSH
10969: LD_INT 30
10971: PUSH
10972: LD_INT 32
10974: PUSH
10975: EMPTY
10976: LIST
10977: LIST
10978: PUSH
10979: LD_INT 30
10981: PUSH
10982: LD_INT 31
10984: PUSH
10985: EMPTY
10986: LIST
10987: LIST
10988: PUSH
10989: EMPTY
10990: LIST
10991: LIST
10992: LIST
10993: PPUSH
10994: CALL_OW 72
10998: PLUS
10999: PPUSH
11000: LD_INT 1
11002: PPUSH
11003: LD_VAR 0 4
11007: PPUSH
11008: CALL 13437 0 3
11012: ST_TO_ADDR
// temp_list = temp_list ^ CreateUnitsWithClass ( [ 2 , 3 , 4 ] [ difficulty ] , class_bazooker , side ) ;
11013: LD_ADDR_VAR 0 3
11017: PUSH
11018: LD_VAR 0 3
11022: PUSH
11023: LD_INT 2
11025: PUSH
11026: LD_INT 3
11028: PUSH
11029: LD_INT 4
11031: PUSH
11032: EMPTY
11033: LIST
11034: LIST
11035: LIST
11036: PUSH
11037: LD_OWVAR 67
11041: ARRAY
11042: PPUSH
11043: LD_INT 9
11045: PPUSH
11046: LD_VAR 0 4
11050: PPUSH
11051: CALL 13437 0 3
11055: ADD
11056: ST_TO_ADDR
// end ; 2 :
11057: GO 11261
11059: LD_INT 2
11061: DOUBLE
11062: EQUAL
11063: IFTRUE 11067
11065: GO 11152
11067: POP
// begin temp_list = CreateUnitsWithClass ( [ 2 , 1 , 0 ] [ difficulty ] , class_soldier , side ) ;
11068: LD_ADDR_VAR 0 3
11072: PUSH
11073: LD_INT 2
11075: PUSH
11076: LD_INT 1
11078: PUSH
11079: LD_INT 0
11081: PUSH
11082: EMPTY
11083: LIST
11084: LIST
11085: LIST
11086: PUSH
11087: LD_OWVAR 67
11091: ARRAY
11092: PPUSH
11093: LD_INT 1
11095: PPUSH
11096: LD_VAR 0 4
11100: PPUSH
11101: CALL 13437 0 3
11105: ST_TO_ADDR
// temp_list = temp_list ^ CreateUnitsWithClass ( [ 0 , 1 , 2 ] [ difficulty ] , class_bazooker , side ) ;
11106: LD_ADDR_VAR 0 3
11110: PUSH
11111: LD_VAR 0 3
11115: PUSH
11116: LD_INT 0
11118: PUSH
11119: LD_INT 1
11121: PUSH
11122: LD_INT 2
11124: PUSH
11125: EMPTY
11126: LIST
11127: LIST
11128: LIST
11129: PUSH
11130: LD_OWVAR 67
11134: ARRAY
11135: PPUSH
11136: LD_INT 9
11138: PPUSH
11139: LD_VAR 0 4
11143: PPUSH
11144: CALL 13437 0 3
11148: ADD
11149: ST_TO_ADDR
// end ; 3 :
11150: GO 11261
11152: LD_INT 3
11154: DOUBLE
11155: EQUAL
11156: IFTRUE 11160
11158: GO 11260
11160: POP
// begin temp_list = CreateUnitsWithClass ( ai_bunkers [ base ] + ai_armouries [ base ] , class_soldier , side ) ;
11161: LD_ADDR_VAR 0 3
11165: PUSH
11166: LD_EXP 39
11170: PUSH
11171: LD_VAR 0 5
11175: ARRAY
11176: PUSH
11177: LD_EXP 38
11181: PUSH
11182: LD_VAR 0 5
11186: ARRAY
11187: PLUS
11188: PPUSH
11189: LD_INT 1
11191: PPUSH
11192: LD_VAR 0 4
11196: PPUSH
11197: CALL 13437 0 3
11201: ST_TO_ADDR
// temp_list = temp_list ^ CreateUnitsWithClass ( [ 2 , 3 , 4 ] [ difficulty ] * ai_armouries [ base ] , class_mortar , side ) ;
11202: LD_ADDR_VAR 0 3
11206: PUSH
11207: LD_VAR 0 3
11211: PUSH
11212: LD_INT 2
11214: PUSH
11215: LD_INT 3
11217: PUSH
11218: LD_INT 4
11220: PUSH
11221: EMPTY
11222: LIST
11223: LIST
11224: LIST
11225: PUSH
11226: LD_OWVAR 67
11230: ARRAY
11231: PUSH
11232: LD_EXP 38
11236: PUSH
11237: LD_VAR 0 5
11241: ARRAY
11242: MUL
11243: PPUSH
11244: LD_INT 8
11246: PPUSH
11247: LD_VAR 0 4
11251: PPUSH
11252: CALL 13437 0 3
11256: ADD
11257: ST_TO_ADDR
// end ; end ;
11258: GO 11261
11260: POP
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
11261: LD_ADDR_EXP 26
11265: PUSH
11266: LD_EXP 26
11270: PPUSH
11271: LD_VAR 0 5
11275: PPUSH
11276: LD_VAR 0 3
11280: PPUSH
11281: CALL_OW 1
11285: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_soldiers [ base ] , [ ] ) ;
11286: LD_VAR 0 5
11290: PPUSH
11291: LD_EXP 26
11295: PUSH
11296: LD_VAR 0 5
11300: ARRAY
11301: PPUSH
11302: EMPTY
11303: PPUSH
11304: CALL 13817 0 3
// ai_engineers = Replace ( ai_engineers , base , CreateUnitsWithClass ( [ [ 4 , 5 , 6 ] [ difficulty ] , 1 , [ 1 , 2 , 3 ] [ difficulty ] ] [ base ] , class_engineer , side ) ) ;
11308: LD_ADDR_EXP 28
11312: PUSH
11313: LD_EXP 28
11317: PPUSH
11318: LD_VAR 0 5
11322: PPUSH
11323: LD_INT 4
11325: PUSH
11326: LD_INT 5
11328: PUSH
11329: LD_INT 6
11331: PUSH
11332: EMPTY
11333: LIST
11334: LIST
11335: LIST
11336: PUSH
11337: LD_OWVAR 67
11341: ARRAY
11342: PUSH
11343: LD_INT 1
11345: PUSH
11346: LD_INT 1
11348: PUSH
11349: LD_INT 2
11351: PUSH
11352: LD_INT 3
11354: PUSH
11355: EMPTY
11356: LIST
11357: LIST
11358: LIST
11359: PUSH
11360: LD_OWVAR 67
11364: ARRAY
11365: PUSH
11366: EMPTY
11367: LIST
11368: LIST
11369: LIST
11370: PUSH
11371: LD_VAR 0 5
11375: ARRAY
11376: PPUSH
11377: LD_INT 2
11379: PPUSH
11380: LD_VAR 0 4
11384: PPUSH
11385: CALL 13437 0 3
11389: PPUSH
11390: CALL_OW 1
11394: ST_TO_ADDR
// if ai_depot [ base ] > 0 then
11395: LD_EXP 35
11399: PUSH
11400: LD_VAR 0 5
11404: ARRAY
11405: PUSH
11406: LD_INT 0
11408: GREATER
11409: IFFALSE 11447
// PlaceComputerUnits ( base , ai_engineers [ base ] , [ ai_depot [ base ] ] ) else
11411: LD_VAR 0 5
11415: PPUSH
11416: LD_EXP 28
11420: PUSH
11421: LD_VAR 0 5
11425: ARRAY
11426: PPUSH
11427: LD_EXP 35
11431: PUSH
11432: LD_VAR 0 5
11436: ARRAY
11437: PUSH
11438: EMPTY
11439: LIST
11440: PPUSH
11441: CALL 13817 0 3
11445: GO 11469
// PlaceComputerUnits ( base , ai_engineers [ base ] , [ ] ) ;
11447: LD_VAR 0 5
11451: PPUSH
11452: LD_EXP 28
11456: PUSH
11457: LD_VAR 0 5
11461: ARRAY
11462: PPUSH
11463: EMPTY
11464: PPUSH
11465: CALL 13817 0 3
// temp_list = [ ] ;
11469: LD_ADDR_VAR 0 3
11473: PUSH
11474: EMPTY
11475: ST_TO_ADDR
// for i in ai_engineers [ base ] do
11476: LD_ADDR_VAR 0 2
11480: PUSH
11481: LD_EXP 28
11485: PUSH
11486: LD_VAR 0 5
11490: ARRAY
11491: PUSH
11492: FOR_IN
11493: IFFALSE 11521
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
11495: LD_ADDR_VAR 0 3
11499: PUSH
11500: LD_VAR 0 3
11504: PUSH
11505: LD_VAR 0 2
11509: PPUSH
11510: LD_INT 2
11512: PPUSH
11513: CALL_OW 259
11517: ADD
11518: ST_TO_ADDR
11519: GO 11492
11521: POP
11522: POP
// num = BestFromListByList ( temp_list , temp_list ) ;
11523: LD_ADDR_VAR 0 6
11527: PUSH
11528: LD_VAR 0 3
11532: PPUSH
11533: LD_VAR 0 3
11537: PPUSH
11538: CALL_OW 79
11542: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
11543: LD_ADDR_VAR 0 2
11547: PUSH
11548: LD_EXP 58
11552: PUSH
11553: LD_VAR 0 5
11557: ARRAY
11558: PUSH
11559: FOR_IN
11560: IFFALSE 11578
// SetBLevel ( i , num ) ;
11562: LD_VAR 0 2
11566: PPUSH
11567: LD_VAR 0 6
11571: PPUSH
11572: CALL_OW 241
11576: GO 11559
11578: POP
11579: POP
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , CreateUnitsWithClass ( [ 4 , 5 , 6 ] [ difficulty ] * ( base <> 2 ) , class_mechanic , side ) ) ;
11580: LD_ADDR_EXP 29
11584: PUSH
11585: LD_EXP 29
11589: PPUSH
11590: LD_VAR 0 5
11594: PPUSH
11595: LD_INT 4
11597: PUSH
11598: LD_INT 5
11600: PUSH
11601: LD_INT 6
11603: PUSH
11604: EMPTY
11605: LIST
11606: LIST
11607: LIST
11608: PUSH
11609: LD_OWVAR 67
11613: ARRAY
11614: PUSH
11615: LD_VAR 0 5
11619: PUSH
11620: LD_INT 2
11622: NONEQUAL
11623: MUL
11624: PPUSH
11625: LD_INT 3
11627: PPUSH
11628: LD_VAR 0 4
11632: PPUSH
11633: CALL 13437 0 3
11637: PPUSH
11638: CALL_OW 1
11642: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_mechanics_defend [ base ] , ai_facts [ base ] ) ;
11643: LD_VAR 0 5
11647: PPUSH
11648: LD_EXP 29
11652: PUSH
11653: LD_VAR 0 5
11657: ARRAY
11658: PPUSH
11659: LD_EXP 37
11663: PUSH
11664: LD_VAR 0 5
11668: ARRAY
11669: PPUSH
11670: CALL 13817 0 3
// if base in [ 1 , 3 ] then
11674: LD_VAR 0 5
11678: PUSH
11679: LD_INT 1
11681: PUSH
11682: LD_INT 3
11684: PUSH
11685: EMPTY
11686: LIST
11687: LIST
11688: IN
11689: IFFALSE 11811
// begin num = [ [ 4 , 5 , 6 ] [ difficulty ] , - 1 , [ 2 , 3 , 4 ] [ difficulty ] ] [ base ] ;
11691: LD_ADDR_VAR 0 6
11695: PUSH
11696: LD_INT 4
11698: PUSH
11699: LD_INT 5
11701: PUSH
11702: LD_INT 6
11704: PUSH
11705: EMPTY
11706: LIST
11707: LIST
11708: LIST
11709: PUSH
11710: LD_OWVAR 67
11714: ARRAY
11715: PUSH
11716: LD_INT 1
11718: NEG
11719: PUSH
11720: LD_INT 2
11722: PUSH
11723: LD_INT 3
11725: PUSH
11726: LD_INT 4
11728: PUSH
11729: EMPTY
11730: LIST
11731: LIST
11732: LIST
11733: PUSH
11734: LD_OWVAR 67
11738: ARRAY
11739: PUSH
11740: EMPTY
11741: LIST
11742: LIST
11743: LIST
11744: PUSH
11745: LD_VAR 0 5
11749: ARRAY
11750: ST_TO_ADDR
// num = num + Rand ( 0 , 1 ) ;
11751: LD_ADDR_VAR 0 6
11755: PUSH
11756: LD_VAR 0 6
11760: PUSH
11761: LD_INT 0
11763: PPUSH
11764: LD_INT 1
11766: PPUSH
11767: CALL_OW 12
11771: PLUS
11772: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , CreateUnitsWithClass ( num , class_scientistic , side ) ) ;
11773: LD_ADDR_EXP 31
11777: PUSH
11778: LD_EXP 31
11782: PPUSH
11783: LD_VAR 0 5
11787: PPUSH
11788: LD_VAR 0 6
11792: PPUSH
11793: LD_INT 4
11795: PPUSH
11796: LD_VAR 0 4
11800: PPUSH
11801: CALL 13437 0 3
11805: PPUSH
11806: CALL_OW 1
11810: ST_TO_ADDR
// end ; PlaceComputerUnits ( base , ai_scientists [ base ] , ai_labs [ base ] ) ;
11811: LD_VAR 0 5
11815: PPUSH
11816: LD_EXP 31
11820: PUSH
11821: LD_VAR 0 5
11825: ARRAY
11826: PPUSH
11827: LD_EXP 36
11831: PUSH
11832: LD_VAR 0 5
11836: ARRAY
11837: PPUSH
11838: CALL 13817 0 3
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_cans , 300 ) ;
11842: LD_EXP 35
11846: PUSH
11847: LD_VAR 0 5
11851: ARRAY
11852: PPUSH
11853: CALL_OW 274
11857: PPUSH
11858: LD_INT 1
11860: PPUSH
11861: LD_INT 300
11863: PPUSH
11864: CALL_OW 277
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_oil , 300 ) ;
11868: LD_EXP 35
11872: PUSH
11873: LD_VAR 0 5
11877: ARRAY
11878: PPUSH
11879: CALL_OW 274
11883: PPUSH
11884: LD_INT 2
11886: PPUSH
11887: LD_INT 300
11889: PPUSH
11890: CALL_OW 277
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_siberit , 300 ) ;
11894: LD_EXP 35
11898: PUSH
11899: LD_VAR 0 5
11903: ARRAY
11904: PPUSH
11905: CALL_OW 274
11909: PPUSH
11910: LD_INT 3
11912: PPUSH
11913: LD_INT 300
11915: PPUSH
11916: CALL_OW 277
// end ;
11920: GO 10838
11922: POP
11923: POP
// uc_side = farmer_side ;
11924: LD_ADDR_OWVAR 20
11928: PUSH
11929: LD_EXP 6
11933: ST_TO_ADDR
// uc_nation = nation_arabian ;
11934: LD_ADDR_OWVAR 21
11938: PUSH
11939: LD_INT 2
11941: ST_TO_ADDR
// if not testing then
11942: LD_EXP 1
11946: NOT
11947: IFFALSE 12398
// begin Farmer = CreateCharacter ( Farmer_14a_not_sel ) ;
11949: LD_ADDR_EXP 21
11953: PUSH
11954: LD_STRING Farmer_14a_not_sel
11956: PPUSH
11957: CALL_OW 34
11961: ST_TO_ADDR
// SetClass ( Farmer , class_soldier ) ;
11962: LD_EXP 21
11966: PPUSH
11967: LD_INT 1
11969: PPUSH
11970: CALL_OW 336
// temp_list = ai_soldiers [ 3 ] ^ Farmer ;
11974: LD_ADDR_VAR 0 3
11978: PUSH
11979: LD_EXP 26
11983: PUSH
11984: LD_INT 3
11986: ARRAY
11987: PUSH
11988: LD_EXP 21
11992: ADD
11993: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , 3 , temp_list ) ;
11994: LD_ADDR_EXP 26
11998: PUSH
11999: LD_EXP 26
12003: PPUSH
12004: LD_INT 3
12006: PPUSH
12007: LD_VAR 0 3
12011: PPUSH
12012: CALL_OW 1
12016: ST_TO_ADDR
// PlaceUnitXYR ( Farmer , ai_human_pullback_hex [ 3 ] [ 1 ] , ai_human_pullback_hex [ 3 ] [ 2 ] , 7 , false ) ;
12017: LD_EXP 21
12021: PPUSH
12022: LD_EXP 55
12026: PUSH
12027: LD_INT 3
12029: ARRAY
12030: PUSH
12031: LD_INT 1
12033: ARRAY
12034: PPUSH
12035: LD_EXP 55
12039: PUSH
12040: LD_INT 3
12042: ARRAY
12043: PUSH
12044: LD_INT 2
12046: ARRAY
12047: PPUSH
12048: LD_INT 7
12050: PPUSH
12051: LD_INT 0
12053: PPUSH
12054: CALL_OW 50
// if TestCharacters ( Gordon_13a_cont ) then
12058: LD_STRING Gordon_13a_cont
12060: PPUSH
12061: CALL_OW 28
12065: IFFALSE 12219
// begin Gordon = CreateCharacter ( Gordon_13a_cont ) ;
12067: LD_ADDR_EXP 22
12071: PUSH
12072: LD_STRING Gordon_13a_cont
12074: PPUSH
12075: CALL_OW 34
12079: ST_TO_ADDR
// SetClass ( Gordon , class_soldier ) ;
12080: LD_EXP 22
12084: PPUSH
12085: LD_INT 1
12087: PPUSH
12088: CALL_OW 336
// temp_list = ai_soldiers [ 3 ] ^ Gordon ;
12092: LD_ADDR_VAR 0 3
12096: PUSH
12097: LD_EXP 26
12101: PUSH
12102: LD_INT 3
12104: ARRAY
12105: PUSH
12106: LD_EXP 22
12110: ADD
12111: ST_TO_ADDR
// if difficulty = 3 then
12112: LD_OWVAR 67
12116: PUSH
12117: LD_INT 3
12119: EQUAL
12120: IFFALSE 12153
// begin DestroyUnit ( temp_list [ 1 ] ) ;
12122: LD_VAR 0 3
12126: PUSH
12127: LD_INT 1
12129: ARRAY
12130: PPUSH
12131: CALL_OW 65
// temp_list = Delete ( temp_list , 1 ) ;
12135: LD_ADDR_VAR 0 3
12139: PUSH
12140: LD_VAR 0 3
12144: PPUSH
12145: LD_INT 1
12147: PPUSH
12148: CALL_OW 3
12152: ST_TO_ADDR
// end ; ai_soldiers = Replace ( ai_soldiers , 3 , temp_list ) ;
12153: LD_ADDR_EXP 26
12157: PUSH
12158: LD_EXP 26
12162: PPUSH
12163: LD_INT 3
12165: PPUSH
12166: LD_VAR 0 3
12170: PPUSH
12171: CALL_OW 1
12175: ST_TO_ADDR
// PlaceUnitXYR ( Gordon , ai_human_pullback_hex [ 3 ] [ 1 ] , ai_human_pullback_hex [ 3 ] [ 2 ] , 7 , false ) ;
12176: LD_EXP 22
12180: PPUSH
12181: LD_EXP 55
12185: PUSH
12186: LD_INT 3
12188: ARRAY
12189: PUSH
12190: LD_INT 1
12192: ARRAY
12193: PPUSH
12194: LD_EXP 55
12198: PUSH
12199: LD_INT 3
12201: ARRAY
12202: PUSH
12203: LD_INT 2
12205: ARRAY
12206: PPUSH
12207: LD_INT 7
12209: PPUSH
12210: LD_INT 0
12212: PPUSH
12213: CALL_OW 50
// end else
12217: GO 12227
// Gordon = 0 ;
12219: LD_ADDR_EXP 22
12223: PUSH
12224: LD_INT 0
12226: ST_TO_ADDR
// if TestCharacters ( Willard_13a_cont ) then
12227: LD_STRING Willard_13a_cont
12229: PPUSH
12230: CALL_OW 28
12234: IFFALSE 12388
// begin Willard = CreateCharacter ( Willard_13a_cont ) ;
12236: LD_ADDR_EXP 23
12240: PUSH
12241: LD_STRING Willard_13a_cont
12243: PPUSH
12244: CALL_OW 34
12248: ST_TO_ADDR
// SetClass ( Willard , class_mechanic ) ;
12249: LD_EXP 23
12253: PPUSH
12254: LD_INT 3
12256: PPUSH
12257: CALL_OW 336
// temp_list = ai_mechanics_defend [ 3 ] ^ Willard ;
12261: LD_ADDR_VAR 0 3
12265: PUSH
12266: LD_EXP 29
12270: PUSH
12271: LD_INT 3
12273: ARRAY
12274: PUSH
12275: LD_EXP 23
12279: ADD
12280: ST_TO_ADDR
// if difficulty = 3 then
12281: LD_OWVAR 67
12285: PUSH
12286: LD_INT 3
12288: EQUAL
12289: IFFALSE 12322
// begin DestroyUnit ( temp_list [ 1 ] ) ;
12291: LD_VAR 0 3
12295: PUSH
12296: LD_INT 1
12298: ARRAY
12299: PPUSH
12300: CALL_OW 65
// temp_list = Delete ( temp_list , 1 ) ;
12304: LD_ADDR_VAR 0 3
12308: PUSH
12309: LD_VAR 0 3
12313: PPUSH
12314: LD_INT 1
12316: PPUSH
12317: CALL_OW 3
12321: ST_TO_ADDR
// end ; ai_mechanics_defend = Replace ( ai_mechanics_defend , 3 , temp_list ) ;
12322: LD_ADDR_EXP 29
12326: PUSH
12327: LD_EXP 29
12331: PPUSH
12332: LD_INT 3
12334: PPUSH
12335: LD_VAR 0 3
12339: PPUSH
12340: CALL_OW 1
12344: ST_TO_ADDR
// PlaceUnitXYR ( Willard , ai_human_pullback_hex [ 3 ] [ 1 ] , ai_human_pullback_hex [ 3 ] [ 2 ] , 7 , false ) ;
12345: LD_EXP 23
12349: PPUSH
12350: LD_EXP 55
12354: PUSH
12355: LD_INT 3
12357: ARRAY
12358: PUSH
12359: LD_INT 1
12361: ARRAY
12362: PPUSH
12363: LD_EXP 55
12367: PUSH
12368: LD_INT 3
12370: ARRAY
12371: PUSH
12372: LD_INT 2
12374: ARRAY
12375: PPUSH
12376: LD_INT 7
12378: PPUSH
12379: LD_INT 0
12381: PPUSH
12382: CALL_OW 50
// end else
12386: GO 12396
// Willard = 0 ;
12388: LD_ADDR_EXP 23
12392: PUSH
12393: LD_INT 0
12395: ST_TO_ADDR
// end else
12396: GO 12733
// begin InitHc ;
12398: CALL_OW 19
// PrepareSoldier ( sex_male , 10 ) ;
12402: LD_INT 1
12404: PPUSH
12405: LD_INT 10
12407: PPUSH
12408: CALL_OW 381
// hc_name = Farmer ;
12412: LD_ADDR_OWVAR 26
12416: PUSH
12417: LD_STRING Farmer
12419: ST_TO_ADDR
// Farmer = CreateHuman ;
12420: LD_ADDR_EXP 21
12424: PUSH
12425: CALL_OW 44
12429: ST_TO_ADDR
// PrepareSoldier ( sex_male , 10 ) ;
12430: LD_INT 1
12432: PPUSH
12433: LD_INT 10
12435: PPUSH
12436: CALL_OW 381
// hc_name = Gordon ;
12440: LD_ADDR_OWVAR 26
12444: PUSH
12445: LD_STRING Gordon
12447: ST_TO_ADDR
// Gordon = CreateHuman ;
12448: LD_ADDR_EXP 22
12452: PUSH
12453: CALL_OW 44
12457: ST_TO_ADDR
// PrepareMechanic ( sex_male , 10 ) ;
12458: LD_INT 1
12460: PPUSH
12461: LD_INT 10
12463: PPUSH
12464: CALL_OW 383
// hc_name = Willard ;
12468: LD_ADDR_OWVAR 26
12472: PUSH
12473: LD_STRING Willard
12475: ST_TO_ADDR
// Willard = CreateHuman ;
12476: LD_ADDR_EXP 23
12480: PUSH
12481: CALL_OW 44
12485: ST_TO_ADDR
// temp_list = ai_soldiers [ 3 ] ^ Farmer ^ Gordon ;
12486: LD_ADDR_VAR 0 3
12490: PUSH
12491: LD_EXP 26
12495: PUSH
12496: LD_INT 3
12498: ARRAY
12499: PUSH
12500: LD_EXP 21
12504: ADD
12505: PUSH
12506: LD_EXP 22
12510: ADD
12511: ST_TO_ADDR
// if difficulty = 3 then
12512: LD_OWVAR 67
12516: PUSH
12517: LD_INT 3
12519: EQUAL
12520: IFFALSE 12553
// begin DestroyUnit ( temp_list [ 1 ] ) ;
12522: LD_VAR 0 3
12526: PUSH
12527: LD_INT 1
12529: ARRAY
12530: PPUSH
12531: CALL_OW 65
// temp_list = Delete ( temp_list , 1 ) ;
12535: LD_ADDR_VAR 0 3
12539: PUSH
12540: LD_VAR 0 3
12544: PPUSH
12545: LD_INT 1
12547: PPUSH
12548: CALL_OW 3
12552: ST_TO_ADDR
// end ; ai_soldiers = Replace ( ai_soldiers , 3 , temp_list ) ;
12553: LD_ADDR_EXP 26
12557: PUSH
12558: LD_EXP 26
12562: PPUSH
12563: LD_INT 3
12565: PPUSH
12566: LD_VAR 0 3
12570: PPUSH
12571: CALL_OW 1
12575: ST_TO_ADDR
// temp_list = ai_mechanics_defend [ 3 ] ^ Willard ;
12576: LD_ADDR_VAR 0 3
12580: PUSH
12581: LD_EXP 29
12585: PUSH
12586: LD_INT 3
12588: ARRAY
12589: PUSH
12590: LD_EXP 23
12594: ADD
12595: ST_TO_ADDR
// if difficulty = 3 then
12596: LD_OWVAR 67
12600: PUSH
12601: LD_INT 3
12603: EQUAL
12604: IFFALSE 12637
// begin DestroyUnit ( temp_list [ 1 ] ) ;
12606: LD_VAR 0 3
12610: PUSH
12611: LD_INT 1
12613: ARRAY
12614: PPUSH
12615: CALL_OW 65
// temp_list = Delete ( temp_list , 1 ) ;
12619: LD_ADDR_VAR 0 3
12623: PUSH
12624: LD_VAR 0 3
12628: PPUSH
12629: LD_INT 1
12631: PPUSH
12632: CALL_OW 3
12636: ST_TO_ADDR
// end ; ai_mechanics_defend = Replace ( ai_mechanics_defend , 3 , temp_list ) ;
12637: LD_ADDR_EXP 29
12641: PUSH
12642: LD_EXP 29
12646: PPUSH
12647: LD_INT 3
12649: PPUSH
12650: LD_VAR 0 3
12654: PPUSH
12655: CALL_OW 1
12659: ST_TO_ADDR
// for i in [ Farmer , Gordon , Willard ] do
12660: LD_ADDR_VAR 0 2
12664: PUSH
12665: LD_EXP 21
12669: PUSH
12670: LD_EXP 22
12674: PUSH
12675: LD_EXP 23
12679: PUSH
12680: EMPTY
12681: LIST
12682: LIST
12683: LIST
12684: PUSH
12685: FOR_IN
12686: IFFALSE 12731
// PlaceUnitXYR ( i , ai_human_pullback_hex [ 3 ] [ 1 ] , ai_human_pullback_hex [ 3 ] [ 2 ] , 7 , false ) ;
12688: LD_VAR 0 2
12692: PPUSH
12693: LD_EXP 55
12697: PUSH
12698: LD_INT 3
12700: ARRAY
12701: PUSH
12702: LD_INT 1
12704: ARRAY
12705: PPUSH
12706: LD_EXP 55
12710: PUSH
12711: LD_INT 3
12713: ARRAY
12714: PUSH
12715: LD_INT 2
12717: ARRAY
12718: PPUSH
12719: LD_INT 7
12721: PPUSH
12722: LD_INT 0
12724: PPUSH
12725: CALL_OW 50
12729: GO 12685
12731: POP
12732: POP
// end ; InitVc ;
12733: CALL_OW 20
// vc_chassis = ar_half_tracked ;
12737: LD_ADDR_OWVAR 37
12741: PUSH
12742: LD_INT 14
12744: ST_TO_ADDR
// vc_engine = engine_siberite ;
12745: LD_ADDR_OWVAR 39
12749: PUSH
12750: LD_INT 3
12752: ST_TO_ADDR
// vc_control = control_manual ;
12753: LD_ADDR_OWVAR 38
12757: PUSH
12758: LD_INT 1
12760: ST_TO_ADDR
// vc_weapon = ar_gun ;
12761: LD_ADDR_OWVAR 40
12765: PUSH
12766: LD_INT 27
12768: ST_TO_ADDR
// farmer_vehicle = CreateVehicle ;
12769: LD_ADDR_EXP 130
12773: PUSH
12774: CALL_OW 45
12778: ST_TO_ADDR
// SetDir ( farmer_vehicle , 2 ) ;
12779: LD_EXP 130
12783: PPUSH
12784: LD_INT 2
12786: PPUSH
12787: CALL_OW 233
// PlaceUnitXY ( farmer_vehicle , 100 , 17 , false ) ;
12791: LD_EXP 130
12795: PPUSH
12796: LD_INT 100
12798: PPUSH
12799: LD_INT 17
12801: PPUSH
12802: LD_INT 0
12804: PPUSH
12805: CALL_OW 48
// uc_side = russians ;
12809: LD_ADDR_OWVAR 20
12813: PUSH
12814: LD_EXP 3
12818: ST_TO_ADDR
// uc_nation = nation_russian ;
12819: LD_ADDR_OWVAR 21
12823: PUSH
12824: LD_INT 3
12826: ST_TO_ADDR
// Kozlov = NewCharacter ( Kozlov ) ;
12827: LD_ADDR_EXP 24
12831: PUSH
12832: LD_STRING Kozlov
12834: PPUSH
12835: CALL_OW 25
12839: ST_TO_ADDR
// SetClass ( Kozlov , class_scientistic ) ;
12840: LD_EXP 24
12844: PPUSH
12845: LD_INT 4
12847: PPUSH
12848: CALL_OW 336
// temp_list = ai_scientists [ 1 ] ^ Kozlov ;
12852: LD_ADDR_VAR 0 3
12856: PUSH
12857: LD_EXP 31
12861: PUSH
12862: LD_INT 1
12864: ARRAY
12865: PUSH
12866: LD_EXP 24
12870: ADD
12871: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , 1 , temp_list ) ;
12872: LD_ADDR_EXP 31
12876: PUSH
12877: LD_EXP 31
12881: PPUSH
12882: LD_INT 1
12884: PPUSH
12885: LD_VAR 0 3
12889: PPUSH
12890: CALL_OW 1
12894: ST_TO_ADDR
// PlaceUnitXYR ( Kozlov , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] , 7 , false ) ;
12895: LD_EXP 24
12899: PPUSH
12900: LD_EXP 55
12904: PUSH
12905: LD_INT 1
12907: ARRAY
12908: PUSH
12909: LD_INT 1
12911: ARRAY
12912: PPUSH
12913: LD_EXP 55
12917: PUSH
12918: LD_INT 1
12920: ARRAY
12921: PUSH
12922: LD_INT 2
12924: ARRAY
12925: PPUSH
12926: LD_INT 7
12928: PPUSH
12929: LD_INT 0
12931: PPUSH
12932: CALL_OW 50
// for side in [ russians , farmer_side ] do
12936: LD_ADDR_VAR 0 4
12940: PUSH
12941: LD_EXP 3
12945: PUSH
12946: LD_EXP 6
12950: PUSH
12951: EMPTY
12952: LIST
12953: LIST
12954: PUSH
12955: FOR_IN
12956: IFFALSE 13430
// begin SetTech ( tech_stimdrugs , side , state_researched ) ;
12958: LD_INT 5
12960: PPUSH
12961: LD_VAR 0 4
12965: PPUSH
12966: LD_INT 2
12968: PPUSH
12969: CALL_OW 322
// SetTech ( tech_targteleport , side , state_researched ) ;
12973: LD_INT 38
12975: PPUSH
12976: LD_VAR 0 4
12980: PPUSH
12981: LD_INT 2
12983: PPUSH
12984: CALL_OW 322
// SetTech ( tech_taufield , side , state_researched ) ;
12988: LD_INT 30
12990: PPUSH
12991: LD_VAR 0 4
12995: PPUSH
12996: LD_INT 2
12998: PPUSH
12999: CALL_OW 322
// SetTech ( tech_limteleport , side , state_researched ) ;
13003: LD_INT 37
13005: PPUSH
13006: LD_VAR 0 4
13010: PPUSH
13011: LD_INT 2
13013: PPUSH
13014: CALL_OW 322
// SetTech ( 31 , side , state_researched ) ;
13018: LD_INT 31
13020: PPUSH
13021: LD_VAR 0 4
13025: PPUSH
13026: LD_INT 2
13028: PPUSH
13029: CALL_OW 322
// SetTech ( tech_spacanom , side , state_researched ) ;
13033: LD_INT 29
13035: PPUSH
13036: LD_VAR 0 4
13040: PPUSH
13041: LD_INT 2
13043: PPUSH
13044: CALL_OW 322
// SetTech ( tech_taurad , side , state_researched ) ;
13048: LD_INT 28
13050: PPUSH
13051: LD_VAR 0 4
13055: PPUSH
13056: LD_INT 2
13058: PPUSH
13059: CALL_OW 322
// SetTech ( tech_bazooka , side , state_researched ) ;
13063: LD_INT 44
13065: PPUSH
13066: LD_VAR 0 4
13070: PPUSH
13071: LD_INT 2
13073: PPUSH
13074: CALL_OW 322
// SetTech ( tech_mortar , side , state_researched ) ;
13078: LD_INT 41
13080: PPUSH
13081: LD_VAR 0 4
13085: PPUSH
13086: LD_INT 2
13088: PPUSH
13089: CALL_OW 322
// SetTech ( tech_tech1 , side , state_researched ) ;
13093: LD_INT 48
13095: PPUSH
13096: LD_VAR 0 4
13100: PPUSH
13101: LD_INT 2
13103: PPUSH
13104: CALL_OW 322
// SetTech ( tech_tech2 , side , state_researched ) ;
13108: LD_INT 49
13110: PPUSH
13111: LD_VAR 0 4
13115: PPUSH
13116: LD_INT 2
13118: PPUSH
13119: CALL_OW 322
// SetTech ( tech_weap1 , side , state_researched ) ;
13123: LD_INT 51
13125: PPUSH
13126: LD_VAR 0 4
13130: PPUSH
13131: LD_INT 2
13133: PPUSH
13134: CALL_OW 322
// SetTech ( tech_sib1 , side , state_researched ) ;
13138: LD_INT 54
13140: PPUSH
13141: LD_VAR 0 4
13145: PPUSH
13146: LD_INT 2
13148: PPUSH
13149: CALL_OW 322
// SetTech ( tech_comp1 , side , state_researched ) ;
13153: LD_INT 57
13155: PPUSH
13156: LD_VAR 0 4
13160: PPUSH
13161: LD_INT 2
13163: PPUSH
13164: CALL_OW 322
// if difficulty >= 2 then
13168: LD_OWVAR 67
13172: PUSH
13173: LD_INT 2
13175: GREATEREQUAL
13176: IFFALSE 13313
// begin SetTech ( tech_tech3 , side , state_researched ) ;
13178: LD_INT 50
13180: PPUSH
13181: LD_VAR 0 4
13185: PPUSH
13186: LD_INT 2
13188: PPUSH
13189: CALL_OW 322
// SetTech ( tech_weap2 , side , state_researched ) ;
13193: LD_INT 52
13195: PPUSH
13196: LD_VAR 0 4
13200: PPUSH
13201: LD_INT 2
13203: PPUSH
13204: CALL_OW 322
// SetTech ( tech_sib2 , side , state_researched ) ;
13208: LD_INT 55
13210: PPUSH
13211: LD_VAR 0 4
13215: PPUSH
13216: LD_INT 2
13218: PPUSH
13219: CALL_OW 322
// SetTech ( tech_comp2 , side , state_researched ) ;
13223: LD_INT 58
13225: PPUSH
13226: LD_VAR 0 4
13230: PPUSH
13231: LD_INT 2
13233: PPUSH
13234: CALL_OW 322
// SetTech ( tech_st1 , side , state_researched ) ;
13238: LD_INT 63
13240: PPUSH
13241: LD_VAR 0 4
13245: PPUSH
13246: LD_INT 2
13248: PPUSH
13249: CALL_OW 322
// SetTech ( tech_opto1 , side , state_researched ) ;
13253: LD_INT 60
13255: PPUSH
13256: LD_VAR 0 4
13260: PPUSH
13261: LD_INT 2
13263: PPUSH
13264: CALL_OW 322
// SetTech ( tech_opto2 , side , state_researched ) ;
13268: LD_INT 61
13270: PPUSH
13271: LD_VAR 0 4
13275: PPUSH
13276: LD_INT 2
13278: PPUSH
13279: CALL_OW 322
// SetTech ( tech_bio1 , side , state_researched ) ;
13283: LD_INT 66
13285: PPUSH
13286: LD_VAR 0 4
13290: PPUSH
13291: LD_INT 2
13293: PPUSH
13294: CALL_OW 322
// SetTech ( tech_bio2 , side , state_researched ) ;
13298: LD_INT 67
13300: PPUSH
13301: LD_VAR 0 4
13305: PPUSH
13306: LD_INT 2
13308: PPUSH
13309: CALL_OW 322
// end ; if difficulty = 3 then
13313: LD_OWVAR 67
13317: PUSH
13318: LD_INT 3
13320: EQUAL
13321: IFFALSE 13428
// begin SetTech ( tech_weap3 , side , state_researched ) ;
13323: LD_INT 53
13325: PPUSH
13326: LD_VAR 0 4
13330: PPUSH
13331: LD_INT 2
13333: PPUSH
13334: CALL_OW 322
// SetTech ( tech_sib3 , side , state_researched ) ;
13338: LD_INT 56
13340: PPUSH
13341: LD_VAR 0 4
13345: PPUSH
13346: LD_INT 2
13348: PPUSH
13349: CALL_OW 322
// SetTech ( tech_comp3 , side , state_researched ) ;
13353: LD_INT 59
13355: PPUSH
13356: LD_VAR 0 4
13360: PPUSH
13361: LD_INT 2
13363: PPUSH
13364: CALL_OW 322
// SetTech ( tech_st2 , side , state_researched ) ;
13368: LD_INT 64
13370: PPUSH
13371: LD_VAR 0 4
13375: PPUSH
13376: LD_INT 2
13378: PPUSH
13379: CALL_OW 322
// SetTech ( tech_st3 , side , state_researched ) ;
13383: LD_INT 65
13385: PPUSH
13386: LD_VAR 0 4
13390: PPUSH
13391: LD_INT 2
13393: PPUSH
13394: CALL_OW 322
// SetTech ( tech_opto3 , side , state_researched ) ;
13398: LD_INT 62
13400: PPUSH
13401: LD_VAR 0 4
13405: PPUSH
13406: LD_INT 2
13408: PPUSH
13409: CALL_OW 322
// SetTech ( tech_bio3 , side , state_researched ) ;
13413: LD_INT 68
13415: PPUSH
13416: LD_VAR 0 4
13420: PPUSH
13421: LD_INT 2
13423: PPUSH
13424: CALL_OW 322
// end ; end ;
13428: GO 12955
13430: POP
13431: POP
// end ;
13432: LD_VAR 0 1
13436: RET
// export function CreateUnitsWithClass ( num_units , un_class , side ) ; var i , overskill ; begin
13437: LD_INT 0
13439: PPUSH
13440: PPUSH
13441: PPUSH
// result = [ ] ;
13442: LD_ADDR_VAR 0 4
13446: PUSH
13447: EMPTY
13448: ST_TO_ADDR
// InitUc ;
13449: CALL_OW 18
// InitHc ;
13453: CALL_OW 19
// case side of you , you_alt , farmer_side :
13457: LD_VAR 0 3
13461: PUSH
13462: LD_EXP 2
13466: DOUBLE
13467: EQUAL
13468: IFTRUE 13488
13470: LD_EXP 5
13474: DOUBLE
13475: EQUAL
13476: IFTRUE 13488
13478: LD_EXP 6
13482: DOUBLE
13483: EQUAL
13484: IFTRUE 13488
13486: GO 13499
13488: POP
// begin uc_nation = nation_arabian ;
13489: LD_ADDR_OWVAR 21
13493: PUSH
13494: LD_INT 2
13496: ST_TO_ADDR
// end ; russians :
13497: GO 13521
13499: LD_EXP 3
13503: DOUBLE
13504: EQUAL
13505: IFTRUE 13509
13507: GO 13520
13509: POP
// begin uc_nation = nation_russian ;
13510: LD_ADDR_OWVAR 21
13514: PUSH
13515: LD_INT 3
13517: ST_TO_ADDR
// end ; end ;
13518: GO 13521
13520: POP
// uc_side = side ;
13521: LD_ADDR_OWVAR 20
13525: PUSH
13526: LD_VAR 0 3
13530: ST_TO_ADDR
// overskill = difficulty + 7 ;
13531: LD_ADDR_VAR 0 6
13535: PUSH
13536: LD_OWVAR 67
13540: PUSH
13541: LD_INT 7
13543: PLUS
13544: ST_TO_ADDR
// for i = 1 to num_units do
13545: LD_ADDR_VAR 0 5
13549: PUSH
13550: DOUBLE
13551: LD_INT 1
13553: DEC
13554: ST_TO_ADDR
13555: LD_VAR 0 1
13559: PUSH
13560: FOR_TO
13561: IFFALSE 13634
// begin if Rand ( 1 , 3 ) = 1 then
13563: LD_INT 1
13565: PPUSH
13566: LD_INT 3
13568: PPUSH
13569: CALL_OW 12
13573: PUSH
13574: LD_INT 1
13576: EQUAL
13577: IFFALSE 13599
// PrepareHuman ( false , un_class , - overskill ) else
13579: LD_INT 0
13581: PPUSH
13582: LD_VAR 0 2
13586: PPUSH
13587: LD_VAR 0 6
13591: NEG
13592: PPUSH
13593: CALL_OW 380
13597: GO 13616
// PrepareHuman ( false , un_class , overskill ) ;
13599: LD_INT 0
13601: PPUSH
13602: LD_VAR 0 2
13606: PPUSH
13607: LD_VAR 0 6
13611: PPUSH
13612: CALL_OW 380
// result = result ^ CreateHuman ;
13616: LD_ADDR_VAR 0 4
13620: PUSH
13621: LD_VAR 0 4
13625: PUSH
13626: CALL_OW 44
13630: ADD
13631: ST_TO_ADDR
// end ;
13632: GO 13560
13634: POP
13635: POP
// end ;
13636: LD_VAR 0 4
13640: RET
// export function CreateApemenWithClass ( num_units , un_class , side ) ; var i ; begin
13641: LD_INT 0
13643: PPUSH
13644: PPUSH
// result = [ ] ;
13645: LD_ADDR_VAR 0 4
13649: PUSH
13650: EMPTY
13651: ST_TO_ADDR
// InitUc ;
13652: CALL_OW 18
// InitHc ;
13656: CALL_OW 19
// uc_side = side ;
13660: LD_ADDR_OWVAR 20
13664: PUSH
13665: LD_VAR 0 3
13669: ST_TO_ADDR
// uc_nation = nation_nature ;
13670: LD_ADDR_OWVAR 21
13674: PUSH
13675: LD_INT 0
13677: ST_TO_ADDR
// hc_class = un_class ;
13678: LD_ADDR_OWVAR 28
13682: PUSH
13683: LD_VAR 0 2
13687: ST_TO_ADDR
// for i = 1 to num_units do
13688: LD_ADDR_VAR 0 5
13692: PUSH
13693: DOUBLE
13694: LD_INT 1
13696: DEC
13697: ST_TO_ADDR
13698: LD_VAR 0 1
13702: PUSH
13703: FOR_TO
13704: IFFALSE 13810
// begin hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
13706: LD_ADDR_OWVAR 29
13710: PUSH
13711: LD_INT 11
13713: PPUSH
13714: LD_INT 13
13716: PPUSH
13717: CALL_OW 12
13721: PUSH
13722: LD_INT 10
13724: PPUSH
13725: LD_INT 11
13727: PPUSH
13728: CALL_OW 12
13732: PUSH
13733: EMPTY
13734: LIST
13735: LIST
13736: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
13737: LD_ADDR_OWVAR 27
13741: PUSH
13742: LD_INT 1
13744: PPUSH
13745: LD_INT 2
13747: PPUSH
13748: CALL_OW 12
13752: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 2 ) , Rand ( 0 , 2 ) , 0 , 0 ] ;
13753: LD_ADDR_OWVAR 31
13757: PUSH
13758: LD_INT 0
13760: PPUSH
13761: LD_INT 2
13763: PPUSH
13764: CALL_OW 12
13768: PUSH
13769: LD_INT 0
13771: PPUSH
13772: LD_INT 2
13774: PPUSH
13775: CALL_OW 12
13779: PUSH
13780: LD_INT 0
13782: PUSH
13783: LD_INT 0
13785: PUSH
13786: EMPTY
13787: LIST
13788: LIST
13789: LIST
13790: LIST
13791: ST_TO_ADDR
// result = result ^ CreateHuman ;
13792: LD_ADDR_VAR 0 4
13796: PUSH
13797: LD_VAR 0 4
13801: PUSH
13802: CALL_OW 44
13806: ADD
13807: ST_TO_ADDR
// end ;
13808: GO 13703
13810: POP
13811: POP
// end ;
13812: LD_VAR 0 4
13816: RET
// function PlaceComputerUnits ( base , un_list , buildings_list ) ; var num , i , b ; begin
13817: LD_INT 0
13819: PPUSH
13820: PPUSH
13821: PPUSH
13822: PPUSH
// num = 1 ;
13823: LD_ADDR_VAR 0 5
13827: PUSH
13828: LD_INT 1
13830: ST_TO_ADDR
// for b in buildings_list do
13831: LD_ADDR_VAR 0 7
13835: PUSH
13836: LD_VAR 0 3
13840: PUSH
13841: FOR_IN
13842: IFFALSE 13939
// begin if num > un_list then
13844: LD_VAR 0 5
13848: PUSH
13849: LD_VAR 0 2
13853: GREATER
13854: IFFALSE 13858
// break ;
13856: GO 13939
// for i = UnitsInside ( b ) + 1 to 6 do
13858: LD_ADDR_VAR 0 6
13862: PUSH
13863: DOUBLE
13864: LD_VAR 0 7
13868: PPUSH
13869: CALL_OW 313
13873: PUSH
13874: LD_INT 1
13876: PLUS
13877: DEC
13878: ST_TO_ADDR
13879: LD_INT 6
13881: PUSH
13882: FOR_TO
13883: IFFALSE 13935
// begin if num > un_list then
13885: LD_VAR 0 5
13889: PUSH
13890: LD_VAR 0 2
13894: GREATER
13895: IFFALSE 13899
// break ;
13897: GO 13935
// PlaceHumanInUnit ( un_list [ num ] , b ) ;
13899: LD_VAR 0 2
13903: PUSH
13904: LD_VAR 0 5
13908: ARRAY
13909: PPUSH
13910: LD_VAR 0 7
13914: PPUSH
13915: CALL_OW 52
// num = num + 1 ;
13919: LD_ADDR_VAR 0 5
13923: PUSH
13924: LD_VAR 0 5
13928: PUSH
13929: LD_INT 1
13931: PLUS
13932: ST_TO_ADDR
// end ;
13933: GO 13882
13935: POP
13936: POP
// end ;
13937: GO 13841
13939: POP
13940: POP
// for i = num to un_list do
13941: LD_ADDR_VAR 0 6
13945: PUSH
13946: DOUBLE
13947: LD_VAR 0 5
13951: DEC
13952: ST_TO_ADDR
13953: LD_VAR 0 2
13957: PUSH
13958: FOR_TO
13959: IFFALSE 14014
// PlaceUnitXYR ( un_list [ i ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] , 7 , false ) ;
13961: LD_VAR 0 2
13965: PUSH
13966: LD_VAR 0 6
13970: ARRAY
13971: PPUSH
13972: LD_EXP 55
13976: PUSH
13977: LD_VAR 0 1
13981: ARRAY
13982: PUSH
13983: LD_INT 1
13985: ARRAY
13986: PPUSH
13987: LD_EXP 55
13991: PUSH
13992: LD_VAR 0 1
13996: ARRAY
13997: PUSH
13998: LD_INT 2
14000: ARRAY
14001: PPUSH
14002: LD_INT 7
14004: PPUSH
14005: LD_INT 0
14007: PPUSH
14008: CALL_OW 50
14012: GO 13958
14014: POP
14015: POP
// end ;
14016: LD_VAR 0 4
14020: RET
// function PrepareMines ; var hex , temp_list , i , k , temp_list_2 ; begin
14021: LD_INT 0
14023: PPUSH
14024: PPUSH
14025: PPUSH
14026: PPUSH
14027: PPUSH
14028: PPUSH
// temp_list = [ [ 14 , 11 ] , [ 13 , 11 ] , [ 13 , 12 ] , [ 14 , 12 ] , [ 14 , 13 ] , [ 14 , 14 ] , [ 15 , 13 ] , [ 15 , 14 ] , [ 15 , 15 ] ] ;
14029: LD_ADDR_VAR 0 3
14033: PUSH
14034: LD_INT 14
14036: PUSH
14037: LD_INT 11
14039: PUSH
14040: EMPTY
14041: LIST
14042: LIST
14043: PUSH
14044: LD_INT 13
14046: PUSH
14047: LD_INT 11
14049: PUSH
14050: EMPTY
14051: LIST
14052: LIST
14053: PUSH
14054: LD_INT 13
14056: PUSH
14057: LD_INT 12
14059: PUSH
14060: EMPTY
14061: LIST
14062: LIST
14063: PUSH
14064: LD_INT 14
14066: PUSH
14067: LD_INT 12
14069: PUSH
14070: EMPTY
14071: LIST
14072: LIST
14073: PUSH
14074: LD_INT 14
14076: PUSH
14077: LD_INT 13
14079: PUSH
14080: EMPTY
14081: LIST
14082: LIST
14083: PUSH
14084: LD_INT 14
14086: PUSH
14087: LD_INT 14
14089: PUSH
14090: EMPTY
14091: LIST
14092: LIST
14093: PUSH
14094: LD_INT 15
14096: PUSH
14097: LD_INT 13
14099: PUSH
14100: EMPTY
14101: LIST
14102: LIST
14103: PUSH
14104: LD_INT 15
14106: PUSH
14107: LD_INT 14
14109: PUSH
14110: EMPTY
14111: LIST
14112: LIST
14113: PUSH
14114: LD_INT 15
14116: PUSH
14117: LD_INT 15
14119: PUSH
14120: EMPTY
14121: LIST
14122: LIST
14123: PUSH
14124: EMPTY
14125: LIST
14126: LIST
14127: LIST
14128: LIST
14129: LIST
14130: LIST
14131: LIST
14132: LIST
14133: LIST
14134: ST_TO_ADDR
// all_mines_hexes = all_mines_hexes ^ temp_list ;
14135: LD_ADDR_EXP 112
14139: PUSH
14140: LD_EXP 112
14144: PUSH
14145: LD_VAR 0 3
14149: ADD
14150: ST_TO_ADDR
// for hex in temp_list do
14151: LD_ADDR_VAR 0 2
14155: PUSH
14156: LD_VAR 0 3
14160: PUSH
14161: FOR_IN
14162: IFFALSE 14196
// PlaceMine ( hex [ 1 ] , hex [ 2 ] , mines_side , 0 ) ;
14164: LD_VAR 0 2
14168: PUSH
14169: LD_INT 1
14171: ARRAY
14172: PPUSH
14173: LD_VAR 0 2
14177: PUSH
14178: LD_INT 2
14180: ARRAY
14181: PPUSH
14182: LD_EXP 7
14186: PPUSH
14187: LD_INT 0
14189: PPUSH
14190: CALL_OW 454
14194: GO 14161
14196: POP
14197: POP
// temp_list = [ [ 16 , 14 ] , [ 16 , 15 ] , [ 16 , 16 ] , [ 16 , 17 ] , [ 17 , 15 ] , [ 17 , 16 ] , [ 17 , 17 ] , [ 17 , 18 ] , [ 18 , 15 ] , [ 18 , 16 ] , [ 18 , 17 ] , [ 18 , 18 ] , [ 18 , 19 ] , [ 18 , 20 ] , [ 19 , 19 ] , [ 19 , 20 ] , [ 20 , 20 ] ] ;
14198: LD_ADDR_VAR 0 3
14202: PUSH
14203: LD_INT 16
14205: PUSH
14206: LD_INT 14
14208: PUSH
14209: EMPTY
14210: LIST
14211: LIST
14212: PUSH
14213: LD_INT 16
14215: PUSH
14216: LD_INT 15
14218: PUSH
14219: EMPTY
14220: LIST
14221: LIST
14222: PUSH
14223: LD_INT 16
14225: PUSH
14226: LD_INT 16
14228: PUSH
14229: EMPTY
14230: LIST
14231: LIST
14232: PUSH
14233: LD_INT 16
14235: PUSH
14236: LD_INT 17
14238: PUSH
14239: EMPTY
14240: LIST
14241: LIST
14242: PUSH
14243: LD_INT 17
14245: PUSH
14246: LD_INT 15
14248: PUSH
14249: EMPTY
14250: LIST
14251: LIST
14252: PUSH
14253: LD_INT 17
14255: PUSH
14256: LD_INT 16
14258: PUSH
14259: EMPTY
14260: LIST
14261: LIST
14262: PUSH
14263: LD_INT 17
14265: PUSH
14266: LD_INT 17
14268: PUSH
14269: EMPTY
14270: LIST
14271: LIST
14272: PUSH
14273: LD_INT 17
14275: PUSH
14276: LD_INT 18
14278: PUSH
14279: EMPTY
14280: LIST
14281: LIST
14282: PUSH
14283: LD_INT 18
14285: PUSH
14286: LD_INT 15
14288: PUSH
14289: EMPTY
14290: LIST
14291: LIST
14292: PUSH
14293: LD_INT 18
14295: PUSH
14296: LD_INT 16
14298: PUSH
14299: EMPTY
14300: LIST
14301: LIST
14302: PUSH
14303: LD_INT 18
14305: PUSH
14306: LD_INT 17
14308: PUSH
14309: EMPTY
14310: LIST
14311: LIST
14312: PUSH
14313: LD_INT 18
14315: PUSH
14316: LD_INT 18
14318: PUSH
14319: EMPTY
14320: LIST
14321: LIST
14322: PUSH
14323: LD_INT 18
14325: PUSH
14326: LD_INT 19
14328: PUSH
14329: EMPTY
14330: LIST
14331: LIST
14332: PUSH
14333: LD_INT 18
14335: PUSH
14336: LD_INT 20
14338: PUSH
14339: EMPTY
14340: LIST
14341: LIST
14342: PUSH
14343: LD_INT 19
14345: PUSH
14346: LD_INT 19
14348: PUSH
14349: EMPTY
14350: LIST
14351: LIST
14352: PUSH
14353: LD_INT 19
14355: PUSH
14356: LD_INT 20
14358: PUSH
14359: EMPTY
14360: LIST
14361: LIST
14362: PUSH
14363: LD_INT 20
14365: PUSH
14366: LD_INT 20
14368: PUSH
14369: EMPTY
14370: LIST
14371: LIST
14372: PUSH
14373: EMPTY
14374: LIST
14375: LIST
14376: LIST
14377: LIST
14378: LIST
14379: LIST
14380: LIST
14381: LIST
14382: LIST
14383: LIST
14384: LIST
14385: LIST
14386: LIST
14387: LIST
14388: LIST
14389: LIST
14390: LIST
14391: ST_TO_ADDR
// all_mines_hexes = all_mines_hexes ^ temp_list ;
14392: LD_ADDR_EXP 112
14396: PUSH
14397: LD_EXP 112
14401: PUSH
14402: LD_VAR 0 3
14406: ADD
14407: ST_TO_ADDR
// for hex in temp_list do
14408: LD_ADDR_VAR 0 2
14412: PUSH
14413: LD_VAR 0 3
14417: PUSH
14418: FOR_IN
14419: IFFALSE 14453
// PlaceMine ( hex [ 1 ] , hex [ 2 ] , mines_side , 0 ) ;
14421: LD_VAR 0 2
14425: PUSH
14426: LD_INT 1
14428: ARRAY
14429: PPUSH
14430: LD_VAR 0 2
14434: PUSH
14435: LD_INT 2
14437: ARRAY
14438: PPUSH
14439: LD_EXP 7
14443: PPUSH
14444: LD_INT 0
14446: PPUSH
14447: CALL_OW 454
14451: GO 14418
14453: POP
14454: POP
// temp_list = [ [ 62 , 98 ] , [ 62 , 99 ] , [ 62 , 100 ] , [ 63 , 98 ] , [ 63 , 99 ] , [ 63 , 100 ] , [ 63 , 101 ] , [ 64 , 98 ] , [ 64 , 99 ] , [ 64 , 100 ] , [ 64 , 101 ] , [ 64 , 102 ] , [ 65 , 98 ] , [ 65 , 99 ] , [ 65 , 100 ] , [ 65 , 101 ] , [ 65 , 102 ] , [ 65 , 103 ] , [ 66 , 98 ] , [ 66 , 99 ] , [ 66 , 100 ] , [ 66 , 101 ] , [ 66 , 102 ] , [ 66 , 103 ] , [ 67 , 99 ] , [ 67 , 100 ] , [ 67 , 101 ] ] ;
14455: LD_ADDR_VAR 0 3
14459: PUSH
14460: LD_INT 62
14462: PUSH
14463: LD_INT 98
14465: PUSH
14466: EMPTY
14467: LIST
14468: LIST
14469: PUSH
14470: LD_INT 62
14472: PUSH
14473: LD_INT 99
14475: PUSH
14476: EMPTY
14477: LIST
14478: LIST
14479: PUSH
14480: LD_INT 62
14482: PUSH
14483: LD_INT 100
14485: PUSH
14486: EMPTY
14487: LIST
14488: LIST
14489: PUSH
14490: LD_INT 63
14492: PUSH
14493: LD_INT 98
14495: PUSH
14496: EMPTY
14497: LIST
14498: LIST
14499: PUSH
14500: LD_INT 63
14502: PUSH
14503: LD_INT 99
14505: PUSH
14506: EMPTY
14507: LIST
14508: LIST
14509: PUSH
14510: LD_INT 63
14512: PUSH
14513: LD_INT 100
14515: PUSH
14516: EMPTY
14517: LIST
14518: LIST
14519: PUSH
14520: LD_INT 63
14522: PUSH
14523: LD_INT 101
14525: PUSH
14526: EMPTY
14527: LIST
14528: LIST
14529: PUSH
14530: LD_INT 64
14532: PUSH
14533: LD_INT 98
14535: PUSH
14536: EMPTY
14537: LIST
14538: LIST
14539: PUSH
14540: LD_INT 64
14542: PUSH
14543: LD_INT 99
14545: PUSH
14546: EMPTY
14547: LIST
14548: LIST
14549: PUSH
14550: LD_INT 64
14552: PUSH
14553: LD_INT 100
14555: PUSH
14556: EMPTY
14557: LIST
14558: LIST
14559: PUSH
14560: LD_INT 64
14562: PUSH
14563: LD_INT 101
14565: PUSH
14566: EMPTY
14567: LIST
14568: LIST
14569: PUSH
14570: LD_INT 64
14572: PUSH
14573: LD_INT 102
14575: PUSH
14576: EMPTY
14577: LIST
14578: LIST
14579: PUSH
14580: LD_INT 65
14582: PUSH
14583: LD_INT 98
14585: PUSH
14586: EMPTY
14587: LIST
14588: LIST
14589: PUSH
14590: LD_INT 65
14592: PUSH
14593: LD_INT 99
14595: PUSH
14596: EMPTY
14597: LIST
14598: LIST
14599: PUSH
14600: LD_INT 65
14602: PUSH
14603: LD_INT 100
14605: PUSH
14606: EMPTY
14607: LIST
14608: LIST
14609: PUSH
14610: LD_INT 65
14612: PUSH
14613: LD_INT 101
14615: PUSH
14616: EMPTY
14617: LIST
14618: LIST
14619: PUSH
14620: LD_INT 65
14622: PUSH
14623: LD_INT 102
14625: PUSH
14626: EMPTY
14627: LIST
14628: LIST
14629: PUSH
14630: LD_INT 65
14632: PUSH
14633: LD_INT 103
14635: PUSH
14636: EMPTY
14637: LIST
14638: LIST
14639: PUSH
14640: LD_INT 66
14642: PUSH
14643: LD_INT 98
14645: PUSH
14646: EMPTY
14647: LIST
14648: LIST
14649: PUSH
14650: LD_INT 66
14652: PUSH
14653: LD_INT 99
14655: PUSH
14656: EMPTY
14657: LIST
14658: LIST
14659: PUSH
14660: LD_INT 66
14662: PUSH
14663: LD_INT 100
14665: PUSH
14666: EMPTY
14667: LIST
14668: LIST
14669: PUSH
14670: LD_INT 66
14672: PUSH
14673: LD_INT 101
14675: PUSH
14676: EMPTY
14677: LIST
14678: LIST
14679: PUSH
14680: LD_INT 66
14682: PUSH
14683: LD_INT 102
14685: PUSH
14686: EMPTY
14687: LIST
14688: LIST
14689: PUSH
14690: LD_INT 66
14692: PUSH
14693: LD_INT 103
14695: PUSH
14696: EMPTY
14697: LIST
14698: LIST
14699: PUSH
14700: LD_INT 67
14702: PUSH
14703: LD_INT 99
14705: PUSH
14706: EMPTY
14707: LIST
14708: LIST
14709: PUSH
14710: LD_INT 67
14712: PUSH
14713: LD_INT 100
14715: PUSH
14716: EMPTY
14717: LIST
14718: LIST
14719: PUSH
14720: LD_INT 67
14722: PUSH
14723: LD_INT 101
14725: PUSH
14726: EMPTY
14727: LIST
14728: LIST
14729: PUSH
14730: EMPTY
14731: LIST
14732: LIST
14733: LIST
14734: LIST
14735: LIST
14736: LIST
14737: LIST
14738: LIST
14739: LIST
14740: LIST
14741: LIST
14742: LIST
14743: LIST
14744: LIST
14745: LIST
14746: LIST
14747: LIST
14748: LIST
14749: LIST
14750: LIST
14751: LIST
14752: LIST
14753: LIST
14754: LIST
14755: LIST
14756: LIST
14757: LIST
14758: ST_TO_ADDR
// all_mines_hexes = all_mines_hexes ^ temp_list ;
14759: LD_ADDR_EXP 112
14763: PUSH
14764: LD_EXP 112
14768: PUSH
14769: LD_VAR 0 3
14773: ADD
14774: ST_TO_ADDR
// for hex in temp_list do
14775: LD_ADDR_VAR 0 2
14779: PUSH
14780: LD_VAR 0 3
14784: PUSH
14785: FOR_IN
14786: IFFALSE 14820
// PlaceMine ( hex [ 1 ] , hex [ 2 ] , mines_side , 0 ) ;
14788: LD_VAR 0 2
14792: PUSH
14793: LD_INT 1
14795: ARRAY
14796: PPUSH
14797: LD_VAR 0 2
14801: PUSH
14802: LD_INT 2
14804: ARRAY
14805: PPUSH
14806: LD_EXP 7
14810: PPUSH
14811: LD_INT 0
14813: PPUSH
14814: CALL_OW 454
14818: GO 14785
14820: POP
14821: POP
// temp_list = [ [ 62 , 101 ] , [ 62 , 102 ] , [ 62 , 103 ] , [ 63 , 102 ] , [ 63 , 103 ] , [ 63 , 104 ] , [ 64 , 103 ] , [ 64 , 104 ] , [ 64 , 105 ] , [ 65 , 104 ] , [ 65 , 105 ] , [ 65 , 106 ] , [ 66 , 105 ] , [ 66 , 106 ] , [ 66 , 107 ] , [ 67 , 105 ] , [ 67 , 106 ] , [ 67 , 107 ] ] ;
14822: LD_ADDR_VAR 0 3
14826: PUSH
14827: LD_INT 62
14829: PUSH
14830: LD_INT 101
14832: PUSH
14833: EMPTY
14834: LIST
14835: LIST
14836: PUSH
14837: LD_INT 62
14839: PUSH
14840: LD_INT 102
14842: PUSH
14843: EMPTY
14844: LIST
14845: LIST
14846: PUSH
14847: LD_INT 62
14849: PUSH
14850: LD_INT 103
14852: PUSH
14853: EMPTY
14854: LIST
14855: LIST
14856: PUSH
14857: LD_INT 63
14859: PUSH
14860: LD_INT 102
14862: PUSH
14863: EMPTY
14864: LIST
14865: LIST
14866: PUSH
14867: LD_INT 63
14869: PUSH
14870: LD_INT 103
14872: PUSH
14873: EMPTY
14874: LIST
14875: LIST
14876: PUSH
14877: LD_INT 63
14879: PUSH
14880: LD_INT 104
14882: PUSH
14883: EMPTY
14884: LIST
14885: LIST
14886: PUSH
14887: LD_INT 64
14889: PUSH
14890: LD_INT 103
14892: PUSH
14893: EMPTY
14894: LIST
14895: LIST
14896: PUSH
14897: LD_INT 64
14899: PUSH
14900: LD_INT 104
14902: PUSH
14903: EMPTY
14904: LIST
14905: LIST
14906: PUSH
14907: LD_INT 64
14909: PUSH
14910: LD_INT 105
14912: PUSH
14913: EMPTY
14914: LIST
14915: LIST
14916: PUSH
14917: LD_INT 65
14919: PUSH
14920: LD_INT 104
14922: PUSH
14923: EMPTY
14924: LIST
14925: LIST
14926: PUSH
14927: LD_INT 65
14929: PUSH
14930: LD_INT 105
14932: PUSH
14933: EMPTY
14934: LIST
14935: LIST
14936: PUSH
14937: LD_INT 65
14939: PUSH
14940: LD_INT 106
14942: PUSH
14943: EMPTY
14944: LIST
14945: LIST
14946: PUSH
14947: LD_INT 66
14949: PUSH
14950: LD_INT 105
14952: PUSH
14953: EMPTY
14954: LIST
14955: LIST
14956: PUSH
14957: LD_INT 66
14959: PUSH
14960: LD_INT 106
14962: PUSH
14963: EMPTY
14964: LIST
14965: LIST
14966: PUSH
14967: LD_INT 66
14969: PUSH
14970: LD_INT 107
14972: PUSH
14973: EMPTY
14974: LIST
14975: LIST
14976: PUSH
14977: LD_INT 67
14979: PUSH
14980: LD_INT 105
14982: PUSH
14983: EMPTY
14984: LIST
14985: LIST
14986: PUSH
14987: LD_INT 67
14989: PUSH
14990: LD_INT 106
14992: PUSH
14993: EMPTY
14994: LIST
14995: LIST
14996: PUSH
14997: LD_INT 67
14999: PUSH
15000: LD_INT 107
15002: PUSH
15003: EMPTY
15004: LIST
15005: LIST
15006: PUSH
15007: EMPTY
15008: LIST
15009: LIST
15010: LIST
15011: LIST
15012: LIST
15013: LIST
15014: LIST
15015: LIST
15016: LIST
15017: LIST
15018: LIST
15019: LIST
15020: LIST
15021: LIST
15022: LIST
15023: LIST
15024: LIST
15025: LIST
15026: ST_TO_ADDR
// all_mines_hexes = all_mines_hexes ^ temp_list ;
15027: LD_ADDR_EXP 112
15031: PUSH
15032: LD_EXP 112
15036: PUSH
15037: LD_VAR 0 3
15041: ADD
15042: ST_TO_ADDR
// for hex in temp_list do
15043: LD_ADDR_VAR 0 2
15047: PUSH
15048: LD_VAR 0 3
15052: PUSH
15053: FOR_IN
15054: IFFALSE 15088
// PlaceMine ( hex [ 1 ] , hex [ 2 ] , mines_side , 0 ) ;
15056: LD_VAR 0 2
15060: PUSH
15061: LD_INT 1
15063: ARRAY
15064: PPUSH
15065: LD_VAR 0 2
15069: PUSH
15070: LD_INT 2
15072: ARRAY
15073: PPUSH
15074: LD_EXP 7
15078: PPUSH
15079: LD_INT 0
15081: PPUSH
15082: CALL_OW 454
15086: GO 15053
15088: POP
15089: POP
// temp_list = [ [ 50 , 12 ] , [ 50 , 13 ] , [ 51 , 13 ] , [ 52 , 13 ] , [ 52 , 14 ] , [ 53 , 14 ] , [ 53 , 15 ] , [ 54 , 14 ] , [ 54 , 15 ] , [ 54 , 16 ] , [ 55 , 14 ] , [ 55 , 15 ] , [ 55 , 16 ] , [ 55 , 17 ] ] ;
15090: LD_ADDR_VAR 0 3
15094: PUSH
15095: LD_INT 50
15097: PUSH
15098: LD_INT 12
15100: PUSH
15101: EMPTY
15102: LIST
15103: LIST
15104: PUSH
15105: LD_INT 50
15107: PUSH
15108: LD_INT 13
15110: PUSH
15111: EMPTY
15112: LIST
15113: LIST
15114: PUSH
15115: LD_INT 51
15117: PUSH
15118: LD_INT 13
15120: PUSH
15121: EMPTY
15122: LIST
15123: LIST
15124: PUSH
15125: LD_INT 52
15127: PUSH
15128: LD_INT 13
15130: PUSH
15131: EMPTY
15132: LIST
15133: LIST
15134: PUSH
15135: LD_INT 52
15137: PUSH
15138: LD_INT 14
15140: PUSH
15141: EMPTY
15142: LIST
15143: LIST
15144: PUSH
15145: LD_INT 53
15147: PUSH
15148: LD_INT 14
15150: PUSH
15151: EMPTY
15152: LIST
15153: LIST
15154: PUSH
15155: LD_INT 53
15157: PUSH
15158: LD_INT 15
15160: PUSH
15161: EMPTY
15162: LIST
15163: LIST
15164: PUSH
15165: LD_INT 54
15167: PUSH
15168: LD_INT 14
15170: PUSH
15171: EMPTY
15172: LIST
15173: LIST
15174: PUSH
15175: LD_INT 54
15177: PUSH
15178: LD_INT 15
15180: PUSH
15181: EMPTY
15182: LIST
15183: LIST
15184: PUSH
15185: LD_INT 54
15187: PUSH
15188: LD_INT 16
15190: PUSH
15191: EMPTY
15192: LIST
15193: LIST
15194: PUSH
15195: LD_INT 55
15197: PUSH
15198: LD_INT 14
15200: PUSH
15201: EMPTY
15202: LIST
15203: LIST
15204: PUSH
15205: LD_INT 55
15207: PUSH
15208: LD_INT 15
15210: PUSH
15211: EMPTY
15212: LIST
15213: LIST
15214: PUSH
15215: LD_INT 55
15217: PUSH
15218: LD_INT 16
15220: PUSH
15221: EMPTY
15222: LIST
15223: LIST
15224: PUSH
15225: LD_INT 55
15227: PUSH
15228: LD_INT 17
15230: PUSH
15231: EMPTY
15232: LIST
15233: LIST
15234: PUSH
15235: EMPTY
15236: LIST
15237: LIST
15238: LIST
15239: LIST
15240: LIST
15241: LIST
15242: LIST
15243: LIST
15244: LIST
15245: LIST
15246: LIST
15247: LIST
15248: LIST
15249: LIST
15250: ST_TO_ADDR
// all_mines_hexes = all_mines_hexes ^ temp_list ;
15251: LD_ADDR_EXP 112
15255: PUSH
15256: LD_EXP 112
15260: PUSH
15261: LD_VAR 0 3
15265: ADD
15266: ST_TO_ADDR
// for hex in temp_list do
15267: LD_ADDR_VAR 0 2
15271: PUSH
15272: LD_VAR 0 3
15276: PUSH
15277: FOR_IN
15278: IFFALSE 15312
// PlaceMine ( hex [ 1 ] , hex [ 2 ] , mines_side , 0 ) ;
15280: LD_VAR 0 2
15284: PUSH
15285: LD_INT 1
15287: ARRAY
15288: PPUSH
15289: LD_VAR 0 2
15293: PUSH
15294: LD_INT 2
15296: ARRAY
15297: PPUSH
15298: LD_EXP 7
15302: PPUSH
15303: LD_INT 0
15305: PPUSH
15306: CALL_OW 454
15310: GO 15277
15312: POP
15313: POP
// farmer_defence_num_mines = [ 0 , 3 , 6 ] [ difficulty ] ;
15314: LD_ADDR_EXP 114
15318: PUSH
15319: LD_INT 0
15321: PUSH
15322: LD_INT 3
15324: PUSH
15325: LD_INT 6
15327: PUSH
15328: EMPTY
15329: LIST
15330: LIST
15331: LIST
15332: PUSH
15333: LD_OWVAR 67
15337: ARRAY
15338: ST_TO_ADDR
// farmer_defence_mines_centerhexes = [ [ 84 , 52 ] , [ 88 , 56 ] , [ 117 , 70 ] , [ 120 , 68 ] , [ 123 , 65 ] , [ 124 , 61 ] ] ;
15339: LD_ADDR_EXP 113
15343: PUSH
15344: LD_INT 84
15346: PUSH
15347: LD_INT 52
15349: PUSH
15350: EMPTY
15351: LIST
15352: LIST
15353: PUSH
15354: LD_INT 88
15356: PUSH
15357: LD_INT 56
15359: PUSH
15360: EMPTY
15361: LIST
15362: LIST
15363: PUSH
15364: LD_INT 117
15366: PUSH
15367: LD_INT 70
15369: PUSH
15370: EMPTY
15371: LIST
15372: LIST
15373: PUSH
15374: LD_INT 120
15376: PUSH
15377: LD_INT 68
15379: PUSH
15380: EMPTY
15381: LIST
15382: LIST
15383: PUSH
15384: LD_INT 123
15386: PUSH
15387: LD_INT 65
15389: PUSH
15390: EMPTY
15391: LIST
15392: LIST
15393: PUSH
15394: LD_INT 124
15396: PUSH
15397: LD_INT 61
15399: PUSH
15400: EMPTY
15401: LIST
15402: LIST
15403: PUSH
15404: EMPTY
15405: LIST
15406: LIST
15407: LIST
15408: LIST
15409: LIST
15410: LIST
15411: ST_TO_ADDR
// temp_list = ai_soldiers [ 3 ] diff [ Farmer , Gordon , Willard ] ;
15412: LD_ADDR_VAR 0 3
15416: PUSH
15417: LD_EXP 26
15421: PUSH
15422: LD_INT 3
15424: ARRAY
15425: PUSH
15426: LD_EXP 21
15430: PUSH
15431: LD_EXP 22
15435: PUSH
15436: LD_EXP 23
15440: PUSH
15441: EMPTY
15442: LIST
15443: LIST
15444: LIST
15445: DIFF
15446: ST_TO_ADDR
// farmer_mine_guy = temp_list [ Rand ( 1 , temp_list ) ] ;
15447: LD_ADDR_EXP 115
15451: PUSH
15452: LD_VAR 0 3
15456: PUSH
15457: LD_INT 1
15459: PPUSH
15460: LD_VAR 0 3
15464: PPUSH
15465: CALL_OW 12
15469: ARRAY
15470: ST_TO_ADDR
// temp_list = farmer_defence_mines_centerhexes ;
15471: LD_ADDR_VAR 0 3
15475: PUSH
15476: LD_EXP 113
15480: ST_TO_ADDR
// for i = 1 to farmer_defence_num_mines do
15481: LD_ADDR_VAR 0 4
15485: PUSH
15486: DOUBLE
15487: LD_INT 1
15489: DEC
15490: ST_TO_ADDR
15491: LD_EXP 114
15495: PUSH
15496: FOR_TO
15497: IFFALSE 15757
// begin k = Rand ( 1 , temp_list ) ;
15499: LD_ADDR_VAR 0 5
15503: PUSH
15504: LD_INT 1
15506: PPUSH
15507: LD_VAR 0 3
15511: PPUSH
15512: CALL_OW 12
15516: ST_TO_ADDR
// hex = temp_list [ k ] ;
15517: LD_ADDR_VAR 0 2
15521: PUSH
15522: LD_VAR 0 3
15526: PUSH
15527: LD_VAR 0 5
15531: ARRAY
15532: ST_TO_ADDR
// temp_list = Delete ( temp_list , k ) ;
15533: LD_ADDR_VAR 0 3
15537: PUSH
15538: LD_VAR 0 3
15542: PPUSH
15543: LD_VAR 0 5
15547: PPUSH
15548: CALL_OW 3
15552: ST_TO_ADDR
// temp_list_2 = GetHexesNearHex ( hex [ 1 ] , hex [ 2 ] , 3 ) ;
15553: LD_ADDR_VAR 0 6
15557: PUSH
15558: LD_VAR 0 2
15562: PUSH
15563: LD_INT 1
15565: ARRAY
15566: PPUSH
15567: LD_VAR 0 2
15571: PUSH
15572: LD_INT 2
15574: ARRAY
15575: PPUSH
15576: LD_INT 3
15578: PPUSH
15579: CALL 21988 0 3
15583: ST_TO_ADDR
// repeat k = Rand ( 1 , temp_list_2 ) ;
15584: LD_ADDR_VAR 0 5
15588: PUSH
15589: LD_INT 1
15591: PPUSH
15592: LD_VAR 0 6
15596: PPUSH
15597: CALL_OW 12
15601: ST_TO_ADDR
// if not temp_list_2 [ k ] in farmer_defence_mines_hexes then
15602: LD_VAR 0 6
15606: PUSH
15607: LD_VAR 0 5
15611: ARRAY
15612: PUSH
15613: LD_EXP 116
15617: IN
15618: NOT
15619: IFFALSE 15623
// break ;
15621: GO 15653
// temp_list_2 = Delete ( temp_list_2 , k ) ;
15623: LD_ADDR_VAR 0 6
15627: PUSH
15628: LD_VAR 0 6
15632: PPUSH
15633: LD_VAR 0 5
15637: PPUSH
15638: CALL_OW 3
15642: ST_TO_ADDR
// until temp_list_2 = 0 ;
15643: LD_VAR 0 6
15647: PUSH
15648: LD_INT 0
15650: EQUAL
15651: IFFALSE 15584
// if temp_list_2 > 0 then
15653: LD_VAR 0 6
15657: PUSH
15658: LD_INT 0
15660: GREATER
15661: IFFALSE 15755
// begin PlaceMine ( temp_list_2 [ k ] [ 1 ] , temp_list_2 [ k ] [ 2 ] , mines_side , 0 ) ;
15663: LD_VAR 0 6
15667: PUSH
15668: LD_VAR 0 5
15672: ARRAY
15673: PUSH
15674: LD_INT 1
15676: ARRAY
15677: PPUSH
15678: LD_VAR 0 6
15682: PUSH
15683: LD_VAR 0 5
15687: ARRAY
15688: PUSH
15689: LD_INT 2
15691: ARRAY
15692: PPUSH
15693: LD_EXP 7
15697: PPUSH
15698: LD_INT 0
15700: PPUSH
15701: CALL_OW 454
// all_mines_hexes = all_mines_hexes ^ [ temp_list_2 [ k ] ] ;
15705: LD_ADDR_EXP 112
15709: PUSH
15710: LD_EXP 112
15714: PUSH
15715: LD_VAR 0 6
15719: PUSH
15720: LD_VAR 0 5
15724: ARRAY
15725: PUSH
15726: EMPTY
15727: LIST
15728: ADD
15729: ST_TO_ADDR
// farmer_defence_mines_hexes = farmer_defence_mines_hexes ^ [ temp_list_2 [ k ] ] ;
15730: LD_ADDR_EXP 116
15734: PUSH
15735: LD_EXP 116
15739: PUSH
15740: LD_VAR 0 6
15744: PUSH
15745: LD_VAR 0 5
15749: ARRAY
15750: PUSH
15751: EMPTY
15752: LIST
15753: ADD
15754: ST_TO_ADDR
// end ; end ;
15755: GO 15496
15757: POP
15758: POP
// end ;
15759: LD_VAR 0 1
15763: RET
// function InitComputerLvlFeatures ; var buildings_loc , i , temp_list , p , info_list ; var temp_list_2 ; begin
15764: LD_INT 0
15766: PPUSH
15767: PPUSH
15768: PPUSH
15769: PPUSH
15770: PPUSH
15771: PPUSH
15772: PPUSH
// temp_list_2 = [ ] ;
15773: LD_ADDR_VAR 0 7
15777: PUSH
15778: EMPTY
15779: ST_TO_ADDR
// for i in buildings_except_from_lvlup diff 0 do
15780: LD_ADDR_VAR 0 3
15784: PUSH
15785: LD_EXP 120
15789: PUSH
15790: LD_INT 0
15792: DIFF
15793: PUSH
15794: FOR_IN
15795: IFFALSE 15841
// temp_list_2 = Insert ( temp_list_2 , 1 , [ GetX ( i ) , GetY ( i ) ] ) ;
15797: LD_ADDR_VAR 0 7
15801: PUSH
15802: LD_VAR 0 7
15806: PPUSH
15807: LD_INT 1
15809: PPUSH
15810: LD_VAR 0 3
15814: PPUSH
15815: CALL_OW 250
15819: PUSH
15820: LD_VAR 0 3
15824: PPUSH
15825: CALL_OW 251
15829: PUSH
15830: EMPTY
15831: LIST
15832: LIST
15833: PPUSH
15834: CALL_OW 2
15838: ST_TO_ADDR
15839: GO 15794
15841: POP
15842: POP
// buildings_loc = [ ] ;
15843: LD_ADDR_VAR 0 2
15847: PUSH
15848: EMPTY
15849: ST_TO_ADDR
// i = 1 ;
15850: LD_ADDR_VAR 0 3
15854: PUSH
15855: LD_INT 1
15857: ST_TO_ADDR
// while i <= ai_buildings_locations [ 1 ] do
15858: LD_VAR 0 3
15862: PUSH
15863: LD_EXP 47
15867: PUSH
15868: LD_INT 1
15870: ARRAY
15871: LESSEQUAL
15872: IFFALSE 16122
// begin if ai_buildings_locations [ 1 ] [ i ] [ 4 ] in [ b_breastwork , b_bunker , b_turret ] and not [ ai_buildings_locations [ 1 ] [ i ] [ 1 ] , ai_buildings_locations [ 1 ] [ i ] [ 2 ] ] in temp_list_2 then
15874: LD_EXP 47
15878: PUSH
15879: LD_INT 1
15881: ARRAY
15882: PUSH
15883: LD_VAR 0 3
15887: ARRAY
15888: PUSH
15889: LD_INT 4
15891: ARRAY
15892: PUSH
15893: LD_INT 31
15895: PUSH
15896: LD_INT 32
15898: PUSH
15899: LD_INT 33
15901: PUSH
15902: EMPTY
15903: LIST
15904: LIST
15905: LIST
15906: IN
15907: PUSH
15908: LD_EXP 47
15912: PUSH
15913: LD_INT 1
15915: ARRAY
15916: PUSH
15917: LD_VAR 0 3
15921: ARRAY
15922: PUSH
15923: LD_INT 1
15925: ARRAY
15926: PUSH
15927: LD_EXP 47
15931: PUSH
15932: LD_INT 1
15934: ARRAY
15935: PUSH
15936: LD_VAR 0 3
15940: ARRAY
15941: PUSH
15942: LD_INT 2
15944: ARRAY
15945: PUSH
15946: EMPTY
15947: LIST
15948: LIST
15949: PUSH
15950: LD_VAR 0 7
15954: IN
15955: NOT
15956: AND
15957: IFFALSE 16106
// begin buildings_loc = buildings_loc ^ [ ai_buildings_locations [ 1 ] [ i ] ] ;
15959: LD_ADDR_VAR 0 2
15963: PUSH
15964: LD_VAR 0 2
15968: PUSH
15969: LD_EXP 47
15973: PUSH
15974: LD_INT 1
15976: ARRAY
15977: PUSH
15978: LD_VAR 0 3
15982: ARRAY
15983: PUSH
15984: EMPTY
15985: LIST
15986: ADD
15987: ST_TO_ADDR
// p = HexInfo ( ai_buildings_locations [ 1 ] [ i ] [ 1 ] , ai_buildings_locations [ 1 ] [ i ] [ 2 ] ) ;
15988: LD_ADDR_VAR 0 5
15992: PUSH
15993: LD_EXP 47
15997: PUSH
15998: LD_INT 1
16000: ARRAY
16001: PUSH
16002: LD_VAR 0 3
16006: ARRAY
16007: PUSH
16008: LD_INT 1
16010: ARRAY
16011: PPUSH
16012: LD_EXP 47
16016: PUSH
16017: LD_INT 1
16019: ARRAY
16020: PUSH
16021: LD_VAR 0 3
16025: ARRAY
16026: PUSH
16027: LD_INT 2
16029: ARRAY
16030: PPUSH
16031: CALL_OW 428
16035: ST_TO_ADDR
// RemoveBuildingFromVariables ( 1 , p ) ;
16036: LD_INT 1
16038: PPUSH
16039: LD_VAR 0 5
16043: PPUSH
16044: CALL 24761 0 2
// DestroyUnit ( p ) ;
16048: LD_VAR 0 5
16052: PPUSH
16053: CALL_OW 65
// temp_list = Delete ( ai_buildings_locations [ 1 ] , i ) ;
16057: LD_ADDR_VAR 0 4
16061: PUSH
16062: LD_EXP 47
16066: PUSH
16067: LD_INT 1
16069: ARRAY
16070: PPUSH
16071: LD_VAR 0 3
16075: PPUSH
16076: CALL_OW 3
16080: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , 1 , temp_list ) ;
16081: LD_ADDR_EXP 47
16085: PUSH
16086: LD_EXP 47
16090: PPUSH
16091: LD_INT 1
16093: PPUSH
16094: LD_VAR 0 4
16098: PPUSH
16099: CALL_OW 1
16103: ST_TO_ADDR
// continue ;
16104: GO 15858
// end ; i = i + 1 ;
16106: LD_ADDR_VAR 0 3
16110: PUSH
16111: LD_VAR 0 3
16115: PUSH
16116: LD_INT 1
16118: PLUS
16119: ST_TO_ADDR
// end ;
16120: GO 15858
// temp_list = [ ] ;
16122: LD_ADDR_VAR 0 4
16126: PUSH
16127: EMPTY
16128: ST_TO_ADDR
// for i in buildings_loc do
16129: LD_ADDR_VAR 0 3
16133: PUSH
16134: LD_VAR 0 2
16138: PUSH
16139: FOR_IN
16140: IFFALSE 16166
// begin temp_list = temp_list ^ Rand ( 1 , 100 ) ;
16142: LD_ADDR_VAR 0 4
16146: PUSH
16147: LD_VAR 0 4
16151: PUSH
16152: LD_INT 1
16154: PPUSH
16155: LD_INT 100
16157: PPUSH
16158: CALL_OW 12
16162: ADD
16163: ST_TO_ADDR
// end ;
16164: GO 16139
16166: POP
16167: POP
// buildings_loc = SortListByListDesc ( buildings_loc , temp_list ) ;
16168: LD_ADDR_VAR 0 2
16172: PUSH
16173: LD_VAR 0 2
16177: PPUSH
16178: LD_VAR 0 4
16182: PPUSH
16183: CALL_OW 77
16187: ST_TO_ADDR
// info_list = [ [ cl_rus_veh_defend , 0.00 , 1.00 , [ 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ] , [ cl_building , 0.00 , 1.00 , buildings_loc ] ] ;
16188: LD_ADDR_VAR 0 6
16192: PUSH
16193: LD_EXP 104
16197: PUSH
16198: LD_REAL  0.00000000000000E+0000
16201: PUSH
16202: LD_REAL  1.00000000000000E+0000
16205: PUSH
16206: LD_INT 1
16208: PUSH
16209: LD_INT 2
16211: PUSH
16212: LD_INT 3
16214: PUSH
16215: LD_INT 4
16217: PUSH
16218: LD_INT 5
16220: PUSH
16221: LD_INT 6
16223: PUSH
16224: LD_INT 7
16226: PUSH
16227: EMPTY
16228: LIST
16229: LIST
16230: LIST
16231: LIST
16232: LIST
16233: LIST
16234: LIST
16235: PUSH
16236: EMPTY
16237: LIST
16238: LIST
16239: LIST
16240: LIST
16241: PUSH
16242: LD_EXP 103
16246: PUSH
16247: LD_REAL  0.00000000000000E+0000
16250: PUSH
16251: LD_REAL  1.00000000000000E+0000
16254: PUSH
16255: LD_VAR 0 2
16259: PUSH
16260: EMPTY
16261: LIST
16262: LIST
16263: LIST
16264: LIST
16265: PUSH
16266: EMPTY
16267: LIST
16268: LIST
16269: ST_TO_ADDR
// computer_level_features_1 = RandomizeEvenDistribution ( info_list ) ;
16270: LD_ADDR_EXP 92
16274: PUSH
16275: LD_VAR 0 6
16279: PPUSH
16280: CALL 17397 0 1
16284: ST_TO_ADDR
// base_time_features_1 = RoundDouble ( [ 65 65$0 , 50 50$0 , 40 40$0 ] [ difficulty ] / computer_level_features_1 ) ;
16285: LD_ADDR_EXP 100
16289: PUSH
16290: LD_INT 136500
16292: PUSH
16293: LD_INT 105000
16295: PUSH
16296: LD_INT 84000
16298: PUSH
16299: EMPTY
16300: LIST
16301: LIST
16302: LIST
16303: PUSH
16304: LD_OWVAR 67
16308: ARRAY
16309: PUSH
16310: LD_EXP 92
16314: DIVREAL
16315: PPUSH
16316: CALL 22634 0 1
16320: ST_TO_ADDR
// ai_max_num_vehicles_defend = Replace ( ai_max_num_vehicles_defend , 3 , [ 2 , 3 , 3 ] [ difficulty ] ) ;
16321: LD_ADDR_EXP 93
16325: PUSH
16326: LD_EXP 93
16330: PPUSH
16331: LD_INT 3
16333: PPUSH
16334: LD_INT 2
16336: PUSH
16337: LD_INT 3
16339: PUSH
16340: LD_INT 3
16342: PUSH
16343: EMPTY
16344: LIST
16345: LIST
16346: LIST
16347: PUSH
16348: LD_OWVAR 67
16352: ARRAY
16353: PPUSH
16354: CALL_OW 1
16358: ST_TO_ADDR
// ai_max_num_vehicles_attack = Replace ( ai_max_num_vehicles_attack , 3 , [ 0 , 1 , 2 ] [ difficulty ] ) ;
16359: LD_ADDR_EXP 94
16363: PUSH
16364: LD_EXP 94
16368: PPUSH
16369: LD_INT 3
16371: PPUSH
16372: LD_INT 0
16374: PUSH
16375: LD_INT 1
16377: PUSH
16378: LD_INT 2
16380: PUSH
16381: EMPTY
16382: LIST
16383: LIST
16384: LIST
16385: PUSH
16386: LD_OWVAR 67
16390: ARRAY
16391: PPUSH
16392: CALL_OW 1
16396: ST_TO_ADDR
// temp_list = [ ] ;
16397: LD_ADDR_VAR 0 4
16401: PUSH
16402: EMPTY
16403: ST_TO_ADDR
// for i = ai_max_num_vehicles_attack [ 3 ] + 1 to ai_max_num_vehicles_defend [ 3 ] do
16404: LD_ADDR_VAR 0 3
16408: PUSH
16409: DOUBLE
16410: LD_EXP 94
16414: PUSH
16415: LD_INT 3
16417: ARRAY
16418: PUSH
16419: LD_INT 1
16421: PLUS
16422: DEC
16423: ST_TO_ADDR
16424: LD_EXP 93
16428: PUSH
16429: LD_INT 3
16431: ARRAY
16432: PUSH
16433: FOR_TO
16434: IFFALSE 16454
// temp_list = temp_list ^ i ;
16436: LD_ADDR_VAR 0 4
16440: PUSH
16441: LD_VAR 0 4
16445: PUSH
16446: LD_VAR 0 3
16450: ADD
16451: ST_TO_ADDR
16452: GO 16433
16454: POP
16455: POP
// info_list = [ [ cl_ar_veh_attack , 0.00 , 0.20 , temp_list ] , [ cl_ar_implosion_veh , [ 0.70 , 0.60 , 0.50 ] [ difficulty ] , 1.00 , [ 1 , 2 , 3 ] ] , [ cl_rus_taufield_veh , [ 0.50 , 0.40 , 0.30 ] [ difficulty ] , 1.00 , [ 1 , 2 , 3 ] ] , [ cl_rus_veh_attack , 0.00 , 1.00 , [ 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ] ] ;
16456: LD_ADDR_VAR 0 6
16460: PUSH
16461: LD_EXP 108
16465: PUSH
16466: LD_REAL  0.00000000000000E+0000
16469: PUSH
16470: LD_REAL  2.00000000000000E-0001
16473: PUSH
16474: LD_VAR 0 4
16478: PUSH
16479: EMPTY
16480: LIST
16481: LIST
16482: LIST
16483: LIST
16484: PUSH
16485: LD_EXP 107
16489: PUSH
16490: LD_REAL  7.00000000000000E-0001
16493: PUSH
16494: LD_REAL  6.00000000000000E-0001
16497: PUSH
16498: LD_REAL  5.00000000000000E-0001
16501: PUSH
16502: EMPTY
16503: LIST
16504: LIST
16505: LIST
16506: PUSH
16507: LD_OWVAR 67
16511: ARRAY
16512: PUSH
16513: LD_REAL  1.00000000000000E+0000
16516: PUSH
16517: LD_INT 1
16519: PUSH
16520: LD_INT 2
16522: PUSH
16523: LD_INT 3
16525: PUSH
16526: EMPTY
16527: LIST
16528: LIST
16529: LIST
16530: PUSH
16531: EMPTY
16532: LIST
16533: LIST
16534: LIST
16535: LIST
16536: PUSH
16537: LD_EXP 106
16541: PUSH
16542: LD_REAL  5.00000000000000E-0001
16545: PUSH
16546: LD_REAL  4.00000000000000E-0001
16549: PUSH
16550: LD_REAL  3.00000000000000E-0001
16553: PUSH
16554: EMPTY
16555: LIST
16556: LIST
16557: LIST
16558: PUSH
16559: LD_OWVAR 67
16563: ARRAY
16564: PUSH
16565: LD_REAL  1.00000000000000E+0000
16568: PUSH
16569: LD_INT 1
16571: PUSH
16572: LD_INT 2
16574: PUSH
16575: LD_INT 3
16577: PUSH
16578: EMPTY
16579: LIST
16580: LIST
16581: LIST
16582: PUSH
16583: EMPTY
16584: LIST
16585: LIST
16586: LIST
16587: LIST
16588: PUSH
16589: LD_EXP 105
16593: PUSH
16594: LD_REAL  0.00000000000000E+0000
16597: PUSH
16598: LD_REAL  1.00000000000000E+0000
16601: PUSH
16602: LD_INT 1
16604: PUSH
16605: LD_INT 2
16607: PUSH
16608: LD_INT 3
16610: PUSH
16611: LD_INT 4
16613: PUSH
16614: LD_INT 5
16616: PUSH
16617: LD_INT 6
16619: PUSH
16620: LD_INT 7
16622: PUSH
16623: EMPTY
16624: LIST
16625: LIST
16626: LIST
16627: LIST
16628: LIST
16629: LIST
16630: LIST
16631: PUSH
16632: EMPTY
16633: LIST
16634: LIST
16635: LIST
16636: LIST
16637: PUSH
16638: EMPTY
16639: LIST
16640: LIST
16641: LIST
16642: LIST
16643: ST_TO_ADDR
// computer_level_features_2 = RandomizeEvenDistribution ( info_list ) ;
16644: LD_ADDR_EXP 99
16648: PUSH
16649: LD_VAR 0 6
16653: PPUSH
16654: CALL 17397 0 1
16658: ST_TO_ADDR
// base_time_features_2 = RoundDouble ( [ 65 65$0 , 50 50$0 , 40 40$0 ] [ difficulty ] / computer_level_features_2 ) ;
16659: LD_ADDR_EXP 101
16663: PUSH
16664: LD_INT 136500
16666: PUSH
16667: LD_INT 105000
16669: PUSH
16670: LD_INT 84000
16672: PUSH
16673: EMPTY
16674: LIST
16675: LIST
16676: LIST
16677: PUSH
16678: LD_OWVAR 67
16682: ARRAY
16683: PUSH
16684: LD_EXP 99
16688: DIVREAL
16689: PPUSH
16690: CALL 22634 0 1
16694: ST_TO_ADDR
// temp_list_2 = [ ] ;
16695: LD_ADDR_VAR 0 7
16699: PUSH
16700: EMPTY
16701: ST_TO_ADDR
// i = 1 ;
16702: LD_ADDR_VAR 0 3
16706: PUSH
16707: LD_INT 1
16709: ST_TO_ADDR
// while i <= ai_buildings_locations [ 1 ] do
16710: LD_VAR 0 3
16714: PUSH
16715: LD_EXP 47
16719: PUSH
16720: LD_INT 1
16722: ARRAY
16723: LESSEQUAL
16724: IFFALSE 16904
// begin if ai_buildings_locations [ 1 ] [ i ] [ 4 ] = b_barracks then
16726: LD_EXP 47
16730: PUSH
16731: LD_INT 1
16733: ARRAY
16734: PUSH
16735: LD_VAR 0 3
16739: ARRAY
16740: PUSH
16741: LD_INT 4
16743: ARRAY
16744: PUSH
16745: LD_INT 5
16747: EQUAL
16748: IFFALSE 16888
// begin temp_list_2 = ai_buildings_locations [ 1 ] [ i ] ;
16750: LD_ADDR_VAR 0 7
16754: PUSH
16755: LD_EXP 47
16759: PUSH
16760: LD_INT 1
16762: ARRAY
16763: PUSH
16764: LD_VAR 0 3
16768: ARRAY
16769: ST_TO_ADDR
// p = HexInfo ( ai_buildings_locations [ 1 ] [ i ] [ 1 ] , ai_buildings_locations [ 1 ] [ i ] [ 2 ] ) ;
16770: LD_ADDR_VAR 0 5
16774: PUSH
16775: LD_EXP 47
16779: PUSH
16780: LD_INT 1
16782: ARRAY
16783: PUSH
16784: LD_VAR 0 3
16788: ARRAY
16789: PUSH
16790: LD_INT 1
16792: ARRAY
16793: PPUSH
16794: LD_EXP 47
16798: PUSH
16799: LD_INT 1
16801: ARRAY
16802: PUSH
16803: LD_VAR 0 3
16807: ARRAY
16808: PUSH
16809: LD_INT 2
16811: ARRAY
16812: PPUSH
16813: CALL_OW 428
16817: ST_TO_ADDR
// RemoveBuildingFromVariables ( 1 , p ) ;
16818: LD_INT 1
16820: PPUSH
16821: LD_VAR 0 5
16825: PPUSH
16826: CALL 24761 0 2
// DestroyUnit ( p ) ;
16830: LD_VAR 0 5
16834: PPUSH
16835: CALL_OW 65
// temp_list = Delete ( ai_buildings_locations [ 1 ] , i ) ;
16839: LD_ADDR_VAR 0 4
16843: PUSH
16844: LD_EXP 47
16848: PUSH
16849: LD_INT 1
16851: ARRAY
16852: PPUSH
16853: LD_VAR 0 3
16857: PPUSH
16858: CALL_OW 3
16862: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , 1 , temp_list ) ;
16863: LD_ADDR_EXP 47
16867: PUSH
16868: LD_EXP 47
16872: PPUSH
16873: LD_INT 1
16875: PPUSH
16876: LD_VAR 0 4
16880: PPUSH
16881: CALL_OW 1
16885: ST_TO_ADDR
// break ;
16886: GO 16904
// end ; i = i + 1 ;
16888: LD_ADDR_VAR 0 3
16892: PUSH
16893: LD_VAR 0 3
16897: PUSH
16898: LD_INT 1
16900: PLUS
16901: ST_TO_ADDR
// end ;
16902: GO 16710
// i = RoundDouble ( computer_level_features_1 / 5 ) ;
16904: LD_ADDR_VAR 0 3
16908: PUSH
16909: LD_EXP 92
16913: PUSH
16914: LD_INT 5
16916: DIVREAL
16917: PPUSH
16918: CALL 22634 0 1
16922: ST_TO_ADDR
// computer_level_features_1 = Insert ( computer_level_features_1 , i * 4 , [ cl_building , temp_list_2 ] ) ;
16923: LD_ADDR_EXP 92
16927: PUSH
16928: LD_EXP 92
16932: PPUSH
16933: LD_VAR 0 3
16937: PUSH
16938: LD_INT 4
16940: MUL
16941: PPUSH
16942: LD_EXP 103
16946: PUSH
16947: LD_VAR 0 7
16951: PUSH
16952: EMPTY
16953: LIST
16954: LIST
16955: PPUSH
16956: CALL_OW 2
16960: ST_TO_ADDR
// computer_level_features_1 = Insert ( computer_level_features_1 , i * 3 , [ cl_building , Replace ( temp_list_2 , 4 , b_armoury ) ] ) ;
16961: LD_ADDR_EXP 92
16965: PUSH
16966: LD_EXP 92
16970: PPUSH
16971: LD_VAR 0 3
16975: PUSH
16976: LD_INT 3
16978: MUL
16979: PPUSH
16980: LD_EXP 103
16984: PUSH
16985: LD_VAR 0 7
16989: PPUSH
16990: LD_INT 4
16992: PPUSH
16993: LD_INT 4
16995: PPUSH
16996: CALL_OW 1
17000: PUSH
17001: EMPTY
17002: LIST
17003: LIST
17004: PPUSH
17005: CALL_OW 2
17009: ST_TO_ADDR
// computer_level_features_2 = Insert ( computer_level_features_2 , 1 , [ cl_attack_time , [ 5 5$0 , 4 4$30 , 4 4$0 ] [ difficulty ] ] ) ;
17010: LD_ADDR_EXP 99
17014: PUSH
17015: LD_EXP 99
17019: PPUSH
17020: LD_INT 1
17022: PPUSH
17023: LD_EXP 109
17027: PUSH
17028: LD_INT 10500
17030: PUSH
17031: LD_INT 9450
17033: PUSH
17034: LD_INT 8400
17036: PUSH
17037: EMPTY
17038: LIST
17039: LIST
17040: LIST
17041: PUSH
17042: LD_OWVAR 67
17046: ARRAY
17047: PUSH
17048: EMPTY
17049: LIST
17050: LIST
17051: PPUSH
17052: CALL_OW 2
17056: ST_TO_ADDR
// i = RoundDouble ( computer_level_features_2 / 3 ) ;
17057: LD_ADDR_VAR 0 3
17061: PUSH
17062: LD_EXP 99
17066: PUSH
17067: LD_INT 3
17069: DIVREAL
17070: PPUSH
17071: CALL 22634 0 1
17075: ST_TO_ADDR
// computer_level_features_2 = Insert ( computer_level_features_2 , i * 2 , [ cl_attack_time , [ 4 4$0 , 3 3$30 , 3 3$0 ] [ difficulty ] ] ) ;
17076: LD_ADDR_EXP 99
17080: PUSH
17081: LD_EXP 99
17085: PPUSH
17086: LD_VAR 0 3
17090: PUSH
17091: LD_INT 2
17093: MUL
17094: PPUSH
17095: LD_EXP 109
17099: PUSH
17100: LD_INT 8400
17102: PUSH
17103: LD_INT 7350
17105: PUSH
17106: LD_INT 6300
17108: PUSH
17109: EMPTY
17110: LIST
17111: LIST
17112: LIST
17113: PUSH
17114: LD_OWVAR 67
17118: ARRAY
17119: PUSH
17120: EMPTY
17121: LIST
17122: LIST
17123: PPUSH
17124: CALL_OW 2
17128: ST_TO_ADDR
// computer_level_features_2 = Insert ( computer_level_features_2 , i , [ cl_attack_time , [ 4 4$30 , 4 4$0 , 3 3$30 ] [ difficulty ] ] ) ;
17129: LD_ADDR_EXP 99
17133: PUSH
17134: LD_EXP 99
17138: PPUSH
17139: LD_VAR 0 3
17143: PPUSH
17144: LD_EXP 109
17148: PUSH
17149: LD_INT 9450
17151: PUSH
17152: LD_INT 8400
17154: PUSH
17155: LD_INT 7350
17157: PUSH
17158: EMPTY
17159: LIST
17160: LIST
17161: LIST
17162: PUSH
17163: LD_OWVAR 67
17167: ARRAY
17168: PUSH
17169: EMPTY
17170: LIST
17171: LIST
17172: PPUSH
17173: CALL_OW 2
17177: ST_TO_ADDR
// if difficulty > 1 then
17178: LD_OWVAR 67
17182: PUSH
17183: LD_INT 1
17185: GREATER
17186: IFFALSE 17287
// begin for i = ai_max_num_vehicles_defend [ 3 ] + 1 to 6 do
17188: LD_ADDR_VAR 0 3
17192: PUSH
17193: DOUBLE
17194: LD_EXP 93
17198: PUSH
17199: LD_INT 3
17201: ARRAY
17202: PUSH
17203: LD_INT 1
17205: PLUS
17206: DEC
17207: ST_TO_ADDR
17208: LD_INT 6
17210: PUSH
17211: FOR_TO
17212: IFFALSE 17259
// begin computer_level_features_2 = computer_level_features_2 ^ [ [ cl_ar_veh_defend , i ] , [ cl_ar_veh_attack , i ] ] ;
17214: LD_ADDR_EXP 99
17218: PUSH
17219: LD_EXP 99
17223: PUSH
17224: LD_EXP 110
17228: PUSH
17229: LD_VAR 0 3
17233: PUSH
17234: EMPTY
17235: LIST
17236: LIST
17237: PUSH
17238: LD_EXP 108
17242: PUSH
17243: LD_VAR 0 3
17247: PUSH
17248: EMPTY
17249: LIST
17250: LIST
17251: PUSH
17252: EMPTY
17253: LIST
17254: LIST
17255: ADD
17256: ST_TO_ADDR
// end ;
17257: GO 17211
17259: POP
17260: POP
// computer_level_features_2 = computer_level_features_2 ^ [ [ cl_attack_time , 0 0$0 ] ] ;
17261: LD_ADDR_EXP 99
17265: PUSH
17266: LD_EXP 99
17270: PUSH
17271: LD_EXP 109
17275: PUSH
17276: LD_INT 0
17278: PUSH
17279: EMPTY
17280: LIST
17281: LIST
17282: PUSH
17283: EMPTY
17284: LIST
17285: ADD
17286: ST_TO_ADDR
// end ; ComputerLvlUp ( 2 ) ;
17287: LD_INT 2
17289: PPUSH
17290: CALL 22961 0 1
// case time_determined_situation of 1 :
17294: LD_EXP 134
17298: PUSH
17299: LD_INT 1
17301: DOUBLE
17302: EQUAL
17303: IFTRUE 17307
17305: GO 17318
17307: POP
// time_that_has_passed = 0 0$0 ; 2 :
17308: LD_ADDR_EXP 138
17312: PUSH
17313: LD_INT 0
17315: ST_TO_ADDR
17316: GO 17357
17318: LD_INT 2
17320: DOUBLE
17321: EQUAL
17322: IFTRUE 17326
17324: GO 17337
17326: POP
// time_that_has_passed = 2 2$30 ; 3 :
17327: LD_ADDR_EXP 138
17331: PUSH
17332: LD_INT 5250
17334: ST_TO_ADDR
17335: GO 17357
17337: LD_INT 3
17339: DOUBLE
17340: EQUAL
17341: IFTRUE 17345
17343: GO 17356
17345: POP
// time_that_has_passed = 5 5$0 ; end ;
17346: LD_ADDR_EXP 138
17350: PUSH
17351: LD_INT 10500
17353: ST_TO_ADDR
17354: GO 17357
17356: POP
// for i in ai_bases do
17357: LD_ADDR_VAR 0 3
17361: PUSH
17362: LD_EXP 25
17366: PUSH
17367: FOR_IN
17368: IFFALSE 17390
// begin ResetVehicleAttackDelay ( i ) ;
17370: LD_VAR 0 3
17374: PPUSH
17375: CALL 24014 0 1
// ResetHumanAttackDelay ( i ) ;
17379: LD_VAR 0 3
17383: PPUSH
17384: CALL 24061 0 1
// end ;
17388: GO 17367
17390: POP
17391: POP
// end ;
17392: LD_VAR 0 1
17396: RET
// function RandomizeEvenDistribution ( info_list ) ; var p , computer_level_features , scatter , start , index , high , low , orig_index , k , i , temp_list , temp_list_2 , space ; begin
17397: LD_INT 0
17399: PPUSH
17400: PPUSH
17401: PPUSH
17402: PPUSH
17403: PPUSH
17404: PPUSH
17405: PPUSH
17406: PPUSH
17407: PPUSH
17408: PPUSH
17409: PPUSH
17410: PPUSH
17411: PPUSH
17412: PPUSH
// computer_level_features = [ ] ;
17413: LD_ADDR_VAR 0 4
17417: PUSH
17418: EMPTY
17419: ST_TO_ADDR
// p = 0 ;
17420: LD_ADDR_VAR 0 3
17424: PUSH
17425: LD_INT 0
17427: ST_TO_ADDR
// for i in info_list do
17428: LD_ADDR_VAR 0 12
17432: PUSH
17433: LD_VAR 0 1
17437: PUSH
17438: FOR_IN
17439: IFFALSE 17463
// p = p + i [ 4 ] ;
17441: LD_ADDR_VAR 0 3
17445: PUSH
17446: LD_VAR 0 3
17450: PUSH
17451: LD_VAR 0 12
17455: PUSH
17456: LD_INT 4
17458: ARRAY
17459: PLUS
17460: ST_TO_ADDR
17461: GO 17438
17463: POP
17464: POP
// for i = 1 to p do
17465: LD_ADDR_VAR 0 12
17469: PUSH
17470: DOUBLE
17471: LD_INT 1
17473: DEC
17474: ST_TO_ADDR
17475: LD_VAR 0 3
17479: PUSH
17480: FOR_TO
17481: IFFALSE 17499
// computer_level_features = computer_level_features ^ 0 ;
17483: LD_ADDR_VAR 0 4
17487: PUSH
17488: LD_VAR 0 4
17492: PUSH
17493: LD_INT 0
17495: ADD
17496: ST_TO_ADDR
17497: GO 17480
17499: POP
17500: POP
// scatter = RoundDouble ( computer_level_features * 0.06 ) ;
17501: LD_ADDR_VAR 0 5
17505: PUSH
17506: LD_VAR 0 4
17510: PUSH
17511: LD_REAL  6.00000000000000E-0002
17514: MUL
17515: PPUSH
17516: CALL 22634 0 1
17520: ST_TO_ADDR
// for p in info_list do
17521: LD_ADDR_VAR 0 3
17525: PUSH
17526: LD_VAR 0 1
17530: PUSH
17531: FOR_IN
17532: IFFALSE 18067
// begin if p [ 4 ] > 1 then
17534: LD_VAR 0 3
17538: PUSH
17539: LD_INT 4
17541: ARRAY
17542: PUSH
17543: LD_INT 1
17545: GREATER
17546: IFFALSE 17594
// space = ( computer_level_features * ( p [ 3 ] - p [ 2 ] ) ) / ( p [ 4 ] - 1 ) else
17548: LD_ADDR_VAR 0 15
17552: PUSH
17553: LD_VAR 0 4
17557: PUSH
17558: LD_VAR 0 3
17562: PUSH
17563: LD_INT 3
17565: ARRAY
17566: PUSH
17567: LD_VAR 0 3
17571: PUSH
17572: LD_INT 2
17574: ARRAY
17575: MINUS
17576: MUL
17577: PUSH
17578: LD_VAR 0 3
17582: PUSH
17583: LD_INT 4
17585: ARRAY
17586: PUSH
17587: LD_INT 1
17589: MINUS
17590: DIVREAL
17591: ST_TO_ADDR
17592: GO 17603
// space = - 1 ;
17594: LD_ADDR_VAR 0 15
17598: PUSH
17599: LD_INT 1
17601: NEG
17602: ST_TO_ADDR
// start = RoundDouble ( computer_level_features * p [ 2 ] ) ;
17603: LD_ADDR_VAR 0 6
17607: PUSH
17608: LD_VAR 0 4
17612: PUSH
17613: LD_VAR 0 3
17617: PUSH
17618: LD_INT 2
17620: ARRAY
17621: MUL
17622: PPUSH
17623: CALL 22634 0 1
17627: ST_TO_ADDR
// if start = 0 then
17628: LD_VAR 0 6
17632: PUSH
17633: LD_INT 0
17635: EQUAL
17636: IFFALSE 17646
// start = 1 ;
17638: LD_ADDR_VAR 0 6
17642: PUSH
17643: LD_INT 1
17645: ST_TO_ADDR
// index = start ;
17646: LD_ADDR_VAR 0 7
17650: PUSH
17651: LD_VAR 0 6
17655: ST_TO_ADDR
// for i = 1 to p [ 4 ] do
17656: LD_ADDR_VAR 0 12
17660: PUSH
17661: DOUBLE
17662: LD_INT 1
17664: DEC
17665: ST_TO_ADDR
17666: LD_VAR 0 3
17670: PUSH
17671: LD_INT 4
17673: ARRAY
17674: PUSH
17675: FOR_TO
17676: IFFALSE 18063
// begin k = index - scatter ;
17678: LD_ADDR_VAR 0 11
17682: PUSH
17683: LD_VAR 0 7
17687: PUSH
17688: LD_VAR 0 5
17692: MINUS
17693: ST_TO_ADDR
// if k < 1 then
17694: LD_VAR 0 11
17698: PUSH
17699: LD_INT 1
17701: LESS
17702: IFFALSE 17712
// k = 1 ;
17704: LD_ADDR_VAR 0 11
17708: PUSH
17709: LD_INT 1
17711: ST_TO_ADDR
// index = Rand ( k , index + scatter ) ;
17712: LD_ADDR_VAR 0 7
17716: PUSH
17717: LD_VAR 0 11
17721: PPUSH
17722: LD_VAR 0 7
17726: PUSH
17727: LD_VAR 0 5
17731: PLUS
17732: PPUSH
17733: CALL_OW 12
17737: ST_TO_ADDR
// if index > computer_level_features then
17738: LD_VAR 0 7
17742: PUSH
17743: LD_VAR 0 4
17747: GREATER
17748: IFFALSE 17764
// index = computer_level_features + 0 ;
17750: LD_ADDR_VAR 0 7
17754: PUSH
17755: LD_VAR 0 4
17759: PUSH
17760: LD_INT 0
17762: PLUS
17763: ST_TO_ADDR
// low = index ;
17764: LD_ADDR_VAR 0 9
17768: PUSH
17769: LD_VAR 0 7
17773: ST_TO_ADDR
// high = index ;
17774: LD_ADDR_VAR 0 8
17778: PUSH
17779: LD_VAR 0 7
17783: ST_TO_ADDR
// orig_index = index ;
17784: LD_ADDR_VAR 0 10
17788: PUSH
17789: LD_VAR 0 7
17793: ST_TO_ADDR
// repeat if computer_level_features [ index ] = 0 then
17794: LD_VAR 0 4
17798: PUSH
17799: LD_VAR 0 7
17803: ARRAY
17804: PUSH
17805: LD_INT 0
17807: EQUAL
17808: IFFALSE 17860
// begin computer_level_features = Replace ( computer_level_features , index , [ p [ 1 ] , p [ 4 ] [ i ] ] ) ;
17810: LD_ADDR_VAR 0 4
17814: PUSH
17815: LD_VAR 0 4
17819: PPUSH
17820: LD_VAR 0 7
17824: PPUSH
17825: LD_VAR 0 3
17829: PUSH
17830: LD_INT 1
17832: ARRAY
17833: PUSH
17834: LD_VAR 0 3
17838: PUSH
17839: LD_INT 4
17841: ARRAY
17842: PUSH
17843: LD_VAR 0 12
17847: ARRAY
17848: PUSH
17849: EMPTY
17850: LIST
17851: LIST
17852: PPUSH
17853: CALL_OW 1
17857: ST_TO_ADDR
// break ;
17858: GO 18034
// end ; if low = 0 and high = computer_level_features + 0 then
17860: LD_VAR 0 9
17864: PUSH
17865: LD_INT 0
17867: EQUAL
17868: PUSH
17869: LD_VAR 0 8
17873: PUSH
17874: LD_VAR 0 4
17878: PUSH
17879: LD_INT 0
17881: PLUS
17882: EQUAL
17883: AND
17884: IFFALSE 17890
// begin break ;
17886: GO 18034
// end else
17888: GO 18030
// if low > 1 and ( high = computer_level_features + 0 or orig_index - low < high - orig_index or ( orig_index - low = high - orig_index and Rand ( 1 , 2 ) = 1 ) ) then
17890: LD_VAR 0 9
17894: PUSH
17895: LD_INT 1
17897: GREATER
17898: PUSH
17899: LD_VAR 0 8
17903: PUSH
17904: LD_VAR 0 4
17908: PUSH
17909: LD_INT 0
17911: PLUS
17912: EQUAL
17913: PUSH
17914: LD_VAR 0 10
17918: PUSH
17919: LD_VAR 0 9
17923: MINUS
17924: PUSH
17925: LD_VAR 0 8
17929: PUSH
17930: LD_VAR 0 10
17934: MINUS
17935: LESS
17936: OR
17937: PUSH
17938: LD_VAR 0 10
17942: PUSH
17943: LD_VAR 0 9
17947: MINUS
17948: PUSH
17949: LD_VAR 0 8
17953: PUSH
17954: LD_VAR 0 10
17958: MINUS
17959: EQUAL
17960: PUSH
17961: LD_INT 1
17963: PPUSH
17964: LD_INT 2
17966: PPUSH
17967: CALL_OW 12
17971: PUSH
17972: LD_INT 1
17974: EQUAL
17975: AND
17976: OR
17977: AND
17978: IFFALSE 18006
// begin low = low - 1 ;
17980: LD_ADDR_VAR 0 9
17984: PUSH
17985: LD_VAR 0 9
17989: PUSH
17990: LD_INT 1
17992: MINUS
17993: ST_TO_ADDR
// index = low ;
17994: LD_ADDR_VAR 0 7
17998: PUSH
17999: LD_VAR 0 9
18003: ST_TO_ADDR
// end else
18004: GO 18030
// begin high = high + 1 ;
18006: LD_ADDR_VAR 0 8
18010: PUSH
18011: LD_VAR 0 8
18015: PUSH
18016: LD_INT 1
18018: PLUS
18019: ST_TO_ADDR
// index = high ;
18020: LD_ADDR_VAR 0 7
18024: PUSH
18025: LD_VAR 0 8
18029: ST_TO_ADDR
// end ; until false ;
18030: LD_INT 0
18032: IFFALSE 17794
// index = start + RoundDouble ( space * i ) ;
18034: LD_ADDR_VAR 0 7
18038: PUSH
18039: LD_VAR 0 6
18043: PUSH
18044: LD_VAR 0 15
18048: PUSH
18049: LD_VAR 0 12
18053: MUL
18054: PPUSH
18055: CALL 22634 0 1
18059: PLUS
18060: ST_TO_ADDR
// end ;
18061: GO 17675
18063: POP
18064: POP
// end ;
18065: GO 17531
18067: POP
18068: POP
// for p in [ cl_rus_veh_defend , cl_ar_veh_attack , cl_rus_veh_defend , cl_rus_veh_attack , cl_rus_taufield_veh , cl_ar_implosion_veh ] do
18069: LD_ADDR_VAR 0 3
18073: PUSH
18074: LD_EXP 104
18078: PUSH
18079: LD_EXP 108
18083: PUSH
18084: LD_EXP 104
18088: PUSH
18089: LD_EXP 105
18093: PUSH
18094: LD_EXP 106
18098: PUSH
18099: LD_EXP 107
18103: PUSH
18104: EMPTY
18105: LIST
18106: LIST
18107: LIST
18108: LIST
18109: LIST
18110: LIST
18111: PUSH
18112: FOR_IN
18113: IFFALSE 18323
// begin temp_list = [ ] ;
18115: LD_ADDR_VAR 0 13
18119: PUSH
18120: EMPTY
18121: ST_TO_ADDR
// for i in computer_level_features do
18122: LD_ADDR_VAR 0 12
18126: PUSH
18127: LD_VAR 0 4
18131: PUSH
18132: FOR_IN
18133: IFFALSE 18173
// if i [ 1 ] = p then
18135: LD_VAR 0 12
18139: PUSH
18140: LD_INT 1
18142: ARRAY
18143: PUSH
18144: LD_VAR 0 3
18148: EQUAL
18149: IFFALSE 18171
// temp_list = temp_list ^ i [ 2 ] ;
18151: LD_ADDR_VAR 0 13
18155: PUSH
18156: LD_VAR 0 13
18160: PUSH
18161: LD_VAR 0 12
18165: PUSH
18166: LD_INT 2
18168: ARRAY
18169: ADD
18170: ST_TO_ADDR
18171: GO 18132
18173: POP
18174: POP
// temp_list = SortListByListAsc ( temp_list , temp_list ) ;
18175: LD_ADDR_VAR 0 13
18179: PUSH
18180: LD_VAR 0 13
18184: PPUSH
18185: LD_VAR 0 13
18189: PPUSH
18190: CALL_OW 76
18194: ST_TO_ADDR
// k = 1 ;
18195: LD_ADDR_VAR 0 11
18199: PUSH
18200: LD_INT 1
18202: ST_TO_ADDR
// for i = 1 to computer_level_features do
18203: LD_ADDR_VAR 0 12
18207: PUSH
18208: DOUBLE
18209: LD_INT 1
18211: DEC
18212: ST_TO_ADDR
18213: LD_VAR 0 4
18217: PUSH
18218: FOR_TO
18219: IFFALSE 18319
// begin if computer_level_features [ i ] [ 1 ] = p then
18221: LD_VAR 0 4
18225: PUSH
18226: LD_VAR 0 12
18230: ARRAY
18231: PUSH
18232: LD_INT 1
18234: ARRAY
18235: PUSH
18236: LD_VAR 0 3
18240: EQUAL
18241: IFFALSE 18317
// begin temp_list_2 = Replace ( computer_level_features [ i ] , 2 , temp_list [ k ] ) ;
18243: LD_ADDR_VAR 0 14
18247: PUSH
18248: LD_VAR 0 4
18252: PUSH
18253: LD_VAR 0 12
18257: ARRAY
18258: PPUSH
18259: LD_INT 2
18261: PPUSH
18262: LD_VAR 0 13
18266: PUSH
18267: LD_VAR 0 11
18271: ARRAY
18272: PPUSH
18273: CALL_OW 1
18277: ST_TO_ADDR
// computer_level_features = Replace ( computer_level_features , i , temp_list_2 ) ;
18278: LD_ADDR_VAR 0 4
18282: PUSH
18283: LD_VAR 0 4
18287: PPUSH
18288: LD_VAR 0 12
18292: PPUSH
18293: LD_VAR 0 14
18297: PPUSH
18298: CALL_OW 1
18302: ST_TO_ADDR
// k = k + 1 ;
18303: LD_ADDR_VAR 0 11
18307: PUSH
18308: LD_VAR 0 11
18312: PUSH
18313: LD_INT 1
18315: PLUS
18316: ST_TO_ADDR
// end ; end ;
18317: GO 18218
18319: POP
18320: POP
// end ;
18321: GO 18112
18323: POP
18324: POP
// result = computer_level_features ;
18325: LD_ADDR_VAR 0 2
18329: PUSH
18330: LD_VAR 0 4
18334: ST_TO_ADDR
// end ;
18335: LD_VAR 0 2
18339: RET
// function Action ; var i ; begin
18340: LD_INT 0
18342: PPUSH
18343: PPUSH
// wait ( 2 ) ;
18344: LD_INT 2
18346: PPUSH
18347: CALL_OW 67
// CenterNowOnXY ( 137 , 117 ) ;
18351: LD_INT 137
18353: PPUSH
18354: LD_INT 117
18356: PPUSH
18357: CALL_OW 86
// wait ( 0 0$0.2 ) ;
18361: LD_INT 7
18363: PPUSH
18364: CALL_OW 67
// ChangeMissionObjectives ( M2 ) ;
18368: LD_STRING M2
18370: PPUSH
18371: CALL_OW 337
// wait ( 0 0$0.2 ) ;
18375: LD_INT 7
18377: PPUSH
18378: CALL_OW 67
// SaveForQuickRestart ;
18382: CALL_OW 22
// end ; end_of_file
18386: LD_VAR 0 1
18390: RET
// var dont_gather_crates , going_to_drop_material_units ; export function InitCrateModule ; begin
18391: LD_INT 0
18393: PPUSH
// dont_gather_crates = [ ] ;
18394: LD_ADDR_LOC 1
18398: PUSH
18399: EMPTY
18400: ST_TO_ADDR
// going_to_drop_material_units = [ ] ;
18401: LD_ADDR_LOC 2
18405: PUSH
18406: EMPTY
18407: ST_TO_ADDR
// end ;
18408: LD_VAR 0 1
18412: RET
// every 0 0$1 + 0 0$0.4 do
18413: GO 18415
18415: DISABLE
// begin repeat wait ( Rand ( 1 1$10 , 2 2$40 ) ) ;
18416: LD_INT 2450
18418: PPUSH
18419: LD_INT 5600
18421: PPUSH
18422: CALL_OW 12
18426: PPUSH
18427: CALL_OW 67
// CreateCratesAnywhere ( Rand ( 3 , 5 ) , true ) ;
18431: LD_INT 3
18433: PPUSH
18434: LD_INT 5
18436: PPUSH
18437: CALL_OW 12
18441: PPUSH
18442: LD_INT 1
18444: PPUSH
18445: CALL_OW 57
// if Rand ( 1 , 4 ) = 1 then
18449: LD_INT 1
18451: PPUSH
18452: LD_INT 4
18454: PPUSH
18455: CALL_OW 12
18459: PUSH
18460: LD_INT 1
18462: EQUAL
18463: IFFALSE 18498
// begin wait ( Rand ( 0 0$5 , 0 0$20 ) ) ;
18465: LD_INT 175
18467: PPUSH
18468: LD_INT 700
18470: PPUSH
18471: CALL_OW 12
18475: PPUSH
18476: CALL_OW 67
// CreateCratesAnywhere ( Rand ( 2 , 4 ) , true ) ;
18480: LD_INT 2
18482: PPUSH
18483: LD_INT 4
18485: PPUSH
18486: CALL_OW 12
18490: PPUSH
18491: LD_INT 1
18493: PPUSH
18494: CALL_OW 57
// end ; until false ;
18498: LD_INT 0
18500: IFFALSE 18416
// end ;
18502: END
// every 0 0$1 + 0 0$0.5 do var count , time ;
18503: GO 18505
18505: DISABLE
18506: LD_INT 0
18508: PPUSH
18509: PPUSH
// begin count = 0 ;
18510: LD_ADDR_VAR 0 1
18514: PUSH
18515: LD_INT 0
18517: ST_TO_ADDR
// repeat time = [ 0 0$55 , 1 1$5 , 1 1$10 ] [ difficulty ] + ( 0 0$50 * count / ( count + [ 15 , 13 , 12 ] [ difficulty ] ) ) ;
18518: LD_ADDR_VAR 0 2
18522: PUSH
18523: LD_INT 1925
18525: PUSH
18526: LD_INT 2275
18528: PUSH
18529: LD_INT 2450
18531: PUSH
18532: EMPTY
18533: LIST
18534: LIST
18535: LIST
18536: PUSH
18537: LD_OWVAR 67
18541: ARRAY
18542: PUSH
18543: LD_INT 1750
18545: PUSH
18546: LD_VAR 0 1
18550: MUL
18551: PUSH
18552: LD_VAR 0 1
18556: PUSH
18557: LD_INT 15
18559: PUSH
18560: LD_INT 13
18562: PUSH
18563: LD_INT 12
18565: PUSH
18566: EMPTY
18567: LIST
18568: LIST
18569: LIST
18570: PUSH
18571: LD_OWVAR 67
18575: ARRAY
18576: PLUS
18577: DIVREAL
18578: PLUS
18579: ST_TO_ADDR
// wait ( Rand ( time , time + 0 0$30 ) ) ;
18580: LD_VAR 0 2
18584: PPUSH
18585: LD_VAR 0 2
18589: PUSH
18590: LD_INT 1050
18592: PLUS
18593: PPUSH
18594: CALL_OW 12
18598: PPUSH
18599: CALL_OW 67
// CreateCratesArea ( Rand ( 3 , 5 ) , player_crate_area , true ) ;
18603: LD_INT 3
18605: PPUSH
18606: LD_INT 5
18608: PPUSH
18609: CALL_OW 12
18613: PPUSH
18614: LD_INT 3
18616: PPUSH
18617: LD_INT 1
18619: PPUSH
18620: CALL_OW 55
// count = count + 1 ;
18624: LD_ADDR_VAR 0 1
18628: PUSH
18629: LD_VAR 0 1
18633: PUSH
18634: LD_INT 1
18636: PLUS
18637: ST_TO_ADDR
// until false ;
18638: LD_INT 0
18640: IFFALSE 18518
// end ;
18642: PPOPN 2
18644: END
// export function OnCommand_CrateDropDetection ( com ) ; var b , temp_list , t ; begin
18645: LD_INT 0
18647: PPUSH
18648: PPUSH
18649: PPUSH
18650: PPUSH
// if com <> 74 then
18651: LD_VAR 0 1
18655: PUSH
18656: LD_INT 74
18658: NONEQUAL
18659: IFFALSE 18663
// exit ;
18661: GO 18835
// for b in FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_class , class_engineer ] , [ f_class , class_apeman_engineer ] , [ f_weapon , us_cargo_bay ] , [ f_weapon , ru_cargo_bay ] ] ] ) do
18663: LD_ADDR_VAR 0 3
18667: PUSH
18668: LD_INT 22
18670: PUSH
18671: LD_EXP 2
18675: PUSH
18676: EMPTY
18677: LIST
18678: LIST
18679: PUSH
18680: LD_INT 2
18682: PUSH
18683: LD_INT 25
18685: PUSH
18686: LD_INT 2
18688: PUSH
18689: EMPTY
18690: LIST
18691: LIST
18692: PUSH
18693: LD_INT 25
18695: PUSH
18696: LD_INT 16
18698: PUSH
18699: EMPTY
18700: LIST
18701: LIST
18702: PUSH
18703: LD_INT 34
18705: PUSH
18706: LD_INT 12
18708: PUSH
18709: EMPTY
18710: LIST
18711: LIST
18712: PUSH
18713: LD_INT 34
18715: PUSH
18716: LD_INT 51
18718: PUSH
18719: EMPTY
18720: LIST
18721: LIST
18722: PUSH
18723: EMPTY
18724: LIST
18725: LIST
18726: LIST
18727: LIST
18728: LIST
18729: PUSH
18730: EMPTY
18731: LIST
18732: LIST
18733: PPUSH
18734: CALL_OW 69
18738: PUSH
18739: FOR_IN
18740: IFFALSE 18833
// if IsSelected ( b ) and not b in going_to_drop_material_units then
18742: LD_VAR 0 3
18746: PPUSH
18747: CALL_OW 306
18751: PUSH
18752: LD_VAR 0 3
18756: PUSH
18757: LD_LOC 2
18761: IN
18762: NOT
18763: AND
18764: IFFALSE 18831
// if HasTask ( b ) then
18766: LD_VAR 0 3
18770: PPUSH
18771: CALL_OW 314
18775: IFFALSE 18831
// begin for t in GetTaskList ( b ) do
18777: LD_ADDR_VAR 0 5
18781: PUSH
18782: LD_VAR 0 3
18786: PPUSH
18787: CALL_OW 437
18791: PUSH
18792: FOR_IN
18793: IFFALSE 18829
// begin if t [ 1 ] = m then
18795: LD_VAR 0 5
18799: PUSH
18800: LD_INT 1
18802: ARRAY
18803: PUSH
18804: LD_STRING m
18806: EQUAL
18807: IFFALSE 18827
// begin going_to_drop_material_units = going_to_drop_material_units ^ b ;
18809: LD_ADDR_LOC 2
18813: PUSH
18814: LD_LOC 2
18818: PUSH
18819: LD_VAR 0 3
18823: ADD
18824: ST_TO_ADDR
// break ;
18825: GO 18829
// end ; end ;
18827: GO 18792
18829: POP
18830: POP
// end ;
18831: GO 18739
18833: POP
18834: POP
// end ;
18835: LD_VAR 0 2
18839: RET
// every 0 0$1 + 0 0$0.1 do var un , temp_list , t , dist , hex ;
18840: GO 18842
18842: DISABLE
18843: LD_INT 0
18845: PPUSH
18846: PPUSH
18847: PPUSH
18848: PPUSH
18849: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
18850: LD_INT 18
18852: PPUSH
18853: CALL_OW 67
// if going_to_drop_material_units = 0 then
18857: LD_LOC 2
18861: PUSH
18862: LD_INT 0
18864: EQUAL
18865: IFFALSE 18869
// continue ;
18867: GO 18850
// for un in going_to_drop_material_units do
18869: LD_ADDR_VAR 0 1
18873: PUSH
18874: LD_LOC 2
18878: PUSH
18879: FOR_IN
18880: IFFALSE 19022
// if not Carry ( un ) then
18882: LD_VAR 0 1
18886: PPUSH
18887: CALL_OW 281
18891: NOT
18892: IFFALSE 19020
// begin if GetType ( un ) = unit_human then
18894: LD_VAR 0 1
18898: PPUSH
18899: CALL_OW 247
18903: PUSH
18904: LD_INT 1
18906: EQUAL
18907: IFFALSE 18919
// dist = 2 else
18909: LD_ADDR_VAR 0 4
18913: PUSH
18914: LD_INT 2
18916: ST_TO_ADDR
18917: GO 18927
// dist = 4 ;
18919: LD_ADDR_VAR 0 4
18923: PUSH
18924: LD_INT 4
18926: ST_TO_ADDR
// for hex in GetHexesNearHex ( GetX ( un ) , GetY ( un ) , dist ) do
18927: LD_ADDR_VAR 0 5
18931: PUSH
18932: LD_VAR 0 1
18936: PPUSH
18937: CALL_OW 250
18941: PPUSH
18942: LD_VAR 0 1
18946: PPUSH
18947: CALL_OW 251
18951: PPUSH
18952: LD_VAR 0 4
18956: PPUSH
18957: CALL 21988 0 3
18961: PUSH
18962: FOR_IN
18963: IFFALSE 19018
// if GetResourceAmountXY ( hex [ 1 ] , hex [ 2 ] ) > 0 then
18965: LD_VAR 0 5
18969: PUSH
18970: LD_INT 1
18972: ARRAY
18973: PPUSH
18974: LD_VAR 0 5
18978: PUSH
18979: LD_INT 2
18981: ARRAY
18982: PPUSH
18983: CALL_OW 284
18987: PUSH
18988: LD_INT 0
18990: GREATER
18991: IFFALSE 19016
// dont_gather_crates = Insert ( dont_gather_crates , 1 , hex ) ;
18993: LD_ADDR_LOC 1
18997: PUSH
18998: LD_LOC 1
19002: PPUSH
19003: LD_INT 1
19005: PPUSH
19006: LD_VAR 0 5
19010: PPUSH
19011: CALL_OW 2
19015: ST_TO_ADDR
19016: GO 18962
19018: POP
19019: POP
// end ;
19020: GO 18879
19022: POP
19023: POP
// going_to_drop_material_units = UnitFilter ( going_to_drop_material_units , [ f_hastask ] ) ;
19024: LD_ADDR_LOC 2
19028: PUSH
19029: LD_LOC 2
19033: PPUSH
19034: LD_INT 60
19036: PUSH
19037: EMPTY
19038: LIST
19039: PPUSH
19040: CALL_OW 72
19044: ST_TO_ADDR
// temp_list = [ ] ;
19045: LD_ADDR_VAR 0 2
19049: PUSH
19050: EMPTY
19051: ST_TO_ADDR
// for un in going_to_drop_material_units do
19052: LD_ADDR_VAR 0 1
19056: PUSH
19057: LD_LOC 2
19061: PUSH
19062: FOR_IN
19063: IFFALSE 19121
// begin for t in GetTaskList ( un ) do
19065: LD_ADDR_VAR 0 3
19069: PUSH
19070: LD_VAR 0 1
19074: PPUSH
19075: CALL_OW 437
19079: PUSH
19080: FOR_IN
19081: IFFALSE 19117
// if t [ 1 ] = m then
19083: LD_VAR 0 3
19087: PUSH
19088: LD_INT 1
19090: ARRAY
19091: PUSH
19092: LD_STRING m
19094: EQUAL
19095: IFFALSE 19115
// begin temp_list = temp_list ^ un ;
19097: LD_ADDR_VAR 0 2
19101: PUSH
19102: LD_VAR 0 2
19106: PUSH
19107: LD_VAR 0 1
19111: ADD
19112: ST_TO_ADDR
// break ;
19113: GO 19117
// end ;
19115: GO 19080
19117: POP
19118: POP
// end ;
19119: GO 19062
19121: POP
19122: POP
// going_to_drop_material_units = temp_list ;
19123: LD_ADDR_LOC 2
19127: PUSH
19128: LD_VAR 0 2
19132: ST_TO_ADDR
// until false ;
19133: LD_INT 0
19135: IFFALSE 18850
// end ;
19137: PPOPN 5
19139: END
// every 0 0$1 do var i ;
19140: GO 19142
19142: DISABLE
19143: LD_INT 0
19145: PPUSH
// begin repeat wait ( 0 0$1 ) ;
19146: LD_INT 35
19148: PPUSH
19149: CALL_OW 67
// if dont_gather_crates = 0 then
19153: LD_LOC 1
19157: PUSH
19158: LD_INT 0
19160: EQUAL
19161: IFFALSE 19165
// continue ;
19163: GO 19146
// i = 1 ;
19165: LD_ADDR_VAR 0 1
19169: PUSH
19170: LD_INT 1
19172: ST_TO_ADDR
// while i <= dont_gather_crates do
19173: LD_VAR 0 1
19177: PUSH
19178: LD_LOC 1
19182: LESSEQUAL
19183: IFFALSE 19263
// begin if GetResourceAmountXY ( dont_gather_crates [ i ] [ 1 ] , dont_gather_crates [ i ] [ 2 ] ) = 0 then
19185: LD_LOC 1
19189: PUSH
19190: LD_VAR 0 1
19194: ARRAY
19195: PUSH
19196: LD_INT 1
19198: ARRAY
19199: PPUSH
19200: LD_LOC 1
19204: PUSH
19205: LD_VAR 0 1
19209: ARRAY
19210: PUSH
19211: LD_INT 2
19213: ARRAY
19214: PPUSH
19215: CALL_OW 284
19219: PUSH
19220: LD_INT 0
19222: EQUAL
19223: IFFALSE 19247
// begin dont_gather_crates = Delete ( dont_gather_crates , i ) ;
19225: LD_ADDR_LOC 1
19229: PUSH
19230: LD_LOC 1
19234: PPUSH
19235: LD_VAR 0 1
19239: PPUSH
19240: CALL_OW 3
19244: ST_TO_ADDR
// continue ;
19245: GO 19173
// end ; i = i + 1 ;
19247: LD_ADDR_VAR 0 1
19251: PUSH
19252: LD_VAR 0 1
19256: PUSH
19257: LD_INT 1
19259: PLUS
19260: ST_TO_ADDR
// end ;
19261: GO 19173
// until false ;
19263: LD_INT 0
19265: IFFALSE 19146
// end ;
19267: PPOPN 1
19269: END
// export function GetListOfCratesInArea_ForGathering ( base , area ) ; var temp_list , c ; begin
19270: LD_INT 0
19272: PPUSH
19273: PPUSH
19274: PPUSH
// temp_list = GetListOfCratesInArea ( area ) ;
19275: LD_ADDR_VAR 0 4
19279: PUSH
19280: LD_VAR 0 2
19284: PPUSH
19285: CALL_OW 435
19289: ST_TO_ADDR
// result = [ ] ;
19290: LD_ADDR_VAR 0 3
19294: PUSH
19295: EMPTY
19296: ST_TO_ADDR
// if temp_list > 0 then
19297: LD_VAR 0 4
19301: PUSH
19302: LD_INT 0
19304: GREATER
19305: IFFALSE 19501
// begin c = 1 ;
19307: LD_ADDR_VAR 0 5
19311: PUSH
19312: LD_INT 1
19314: ST_TO_ADDR
// repeat if GetResourceTypeXY ( temp_list [ c ] , temp_list [ c + 1 ] ) <> mat_artifact and ( InArea ( temp_list [ c ] , temp_list [ c + 1 ] , GetBaseArea ( base ) ) or not [ temp_list [ c ] , temp_list [ c + 1 ] ] in dont_gather_crates ) then
19315: LD_VAR 0 4
19319: PUSH
19320: LD_VAR 0 5
19324: ARRAY
19325: PPUSH
19326: LD_VAR 0 4
19330: PUSH
19331: LD_VAR 0 5
19335: PUSH
19336: LD_INT 1
19338: PLUS
19339: ARRAY
19340: PPUSH
19341: CALL_OW 283
19345: PUSH
19346: LD_INT 4
19348: NONEQUAL
19349: PUSH
19350: LD_VAR 0 4
19354: PUSH
19355: LD_VAR 0 5
19359: ARRAY
19360: PPUSH
19361: LD_VAR 0 4
19365: PUSH
19366: LD_VAR 0 5
19370: PUSH
19371: LD_INT 1
19373: PLUS
19374: ARRAY
19375: PPUSH
19376: LD_VAR 0 1
19380: PPUSH
19381: CALL 27032 0 1
19385: PPUSH
19386: CALL_OW 309
19390: PUSH
19391: LD_VAR 0 4
19395: PUSH
19396: LD_VAR 0 5
19400: ARRAY
19401: PUSH
19402: LD_VAR 0 4
19406: PUSH
19407: LD_VAR 0 5
19411: PUSH
19412: LD_INT 1
19414: PLUS
19415: ARRAY
19416: PUSH
19417: EMPTY
19418: LIST
19419: LIST
19420: PUSH
19421: LD_LOC 1
19425: IN
19426: NOT
19427: OR
19428: AND
19429: IFFALSE 19475
// result = result ^ [ [ temp_list [ c ] , temp_list [ c + 1 ] ] ] ;
19431: LD_ADDR_VAR 0 3
19435: PUSH
19436: LD_VAR 0 3
19440: PUSH
19441: LD_VAR 0 4
19445: PUSH
19446: LD_VAR 0 5
19450: ARRAY
19451: PUSH
19452: LD_VAR 0 4
19456: PUSH
19457: LD_VAR 0 5
19461: PUSH
19462: LD_INT 1
19464: PLUS
19465: ARRAY
19466: PUSH
19467: EMPTY
19468: LIST
19469: LIST
19470: PUSH
19471: EMPTY
19472: LIST
19473: ADD
19474: ST_TO_ADDR
// c = c + 2 ;
19475: LD_ADDR_VAR 0 5
19479: PUSH
19480: LD_VAR 0 5
19484: PUSH
19485: LD_INT 2
19487: PLUS
19488: ST_TO_ADDR
// until c > temp_list ;
19489: LD_VAR 0 5
19493: PUSH
19494: LD_VAR 0 4
19498: GREATER
19499: IFFALSE 19315
// end ; end ; end_of_file
19501: LD_VAR 0 3
19505: 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
19506: LD_INT 0
19508: PPUSH
19509: PPUSH
19510: PPUSH
19511: PPUSH
19512: PPUSH
19513: PPUSH
19514: PPUSH
19515: PPUSH
19516: PPUSH
19517: PPUSH
19518: PPUSH
19519: 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
19520: LD_VAR 0 1
19524: PPUSH
19525: CALL_OW 302
19529: NOT
19530: PUSH
19531: LD_VAR 0 4
19535: PUSH
19536: LD_INT 1
19538: EQUAL
19539: OR
19540: PUSH
19541: LD_VAR 0 2
19545: PPUSH
19546: LD_VAR 0 3
19550: PPUSH
19551: CALL_OW 488
19555: NOT
19556: OR
19557: PUSH
19558: LD_VAR 0 1
19562: PPUSH
19563: LD_VAR 0 2
19567: PPUSH
19568: LD_VAR 0 3
19572: PPUSH
19573: CALL_OW 297
19577: PUSH
19578: LD_VAR 0 4
19582: GREATEREQUAL
19583: OR
19584: PUSH
19585: LD_VAR 0 5
19589: PUSH
19590: LD_INT 1
19592: PUSH
19593: LD_INT 0
19595: PUSH
19596: EMPTY
19597: LIST
19598: LIST
19599: IN
19600: NOT
19601: OR
19602: IFFALSE 19606
// exit ;
19604: GO 21163
// attempts = 0 ;
19606: LD_ADDR_VAR 0 17
19610: PUSH
19611: LD_INT 0
19613: ST_TO_ADDR
// repeat list_nearest = [ ] ;
19614: LD_ADDR_VAR 0 7
19618: PUSH
19619: EMPTY
19620: ST_TO_ADDR
// list_coords = [ ] ;
19621: LD_ADDR_VAR 0 8
19625: PUSH
19626: EMPTY
19627: ST_TO_ADDR
// temp_dir = AI_GetTurnDirection ( x , y , GetX ( unit1 ) , GetY ( unit1 ) ) ;
19628: LD_ADDR_VAR 0 9
19632: PUSH
19633: LD_VAR 0 2
19637: PPUSH
19638: LD_VAR 0 3
19642: PPUSH
19643: LD_VAR 0 1
19647: PPUSH
19648: CALL_OW 250
19652: PPUSH
19653: LD_VAR 0 1
19657: PPUSH
19658: CALL_OW 251
19662: PPUSH
19663: CALL 21168 0 4
19667: ST_TO_ADDR
// if attempts = 0 then
19668: LD_VAR 0 17
19672: PUSH
19673: LD_INT 0
19675: EQUAL
19676: IFFALSE 19784
// begin dir_list = [ temp_dir , temp_dir + 1 , temp_dir - 1 ] ;
19678: LD_ADDR_VAR 0 10
19682: PUSH
19683: LD_VAR 0 9
19687: PUSH
19688: LD_VAR 0 9
19692: PUSH
19693: LD_INT 1
19695: PLUS
19696: PUSH
19697: LD_VAR 0 9
19701: PUSH
19702: LD_INT 1
19704: MINUS
19705: PUSH
19706: EMPTY
19707: LIST
19708: LIST
19709: LIST
19710: ST_TO_ADDR
// if dir_list [ 2 ] = 6 then
19711: LD_VAR 0 10
19715: PUSH
19716: LD_INT 2
19718: ARRAY
19719: PUSH
19720: LD_INT 6
19722: EQUAL
19723: IFFALSE 19746
// dir_list = Replace ( dir_list , 2 , 0 ) ;
19725: LD_ADDR_VAR 0 10
19729: PUSH
19730: LD_VAR 0 10
19734: PPUSH
19735: LD_INT 2
19737: PPUSH
19738: LD_INT 0
19740: PPUSH
19741: CALL_OW 1
19745: ST_TO_ADDR
// if dir_list [ 3 ] = - 1 then
19746: LD_VAR 0 10
19750: PUSH
19751: LD_INT 3
19753: ARRAY
19754: PUSH
19755: LD_INT 1
19757: NEG
19758: EQUAL
19759: IFFALSE 19782
// dir_list = Replace ( dir_list , 3 , 5 ) ;
19761: LD_ADDR_VAR 0 10
19765: PUSH
19766: LD_VAR 0 10
19770: PPUSH
19771: LD_INT 3
19773: PPUSH
19774: LD_INT 5
19776: PPUSH
19777: CALL_OW 1
19781: ST_TO_ADDR
// end else
19782: GO 19821
// dir_list = [ 0 , 1 , 2 , 3 , 4 , 5 ] diff temp_dir ;
19784: LD_ADDR_VAR 0 10
19788: PUSH
19789: LD_INT 0
19791: PUSH
19792: LD_INT 1
19794: PUSH
19795: LD_INT 2
19797: PUSH
19798: LD_INT 3
19800: PUSH
19801: LD_INT 4
19803: PUSH
19804: LD_INT 5
19806: PUSH
19807: EMPTY
19808: LIST
19809: LIST
19810: LIST
19811: LIST
19812: LIST
19813: LIST
19814: PUSH
19815: LD_VAR 0 9
19819: DIFF
19820: ST_TO_ADDR
// for c = 1 to ( dir_list + 0 ) do
19821: LD_ADDR_VAR 0 14
19825: PUSH
19826: DOUBLE
19827: LD_INT 1
19829: DEC
19830: ST_TO_ADDR
19831: LD_VAR 0 10
19835: PUSH
19836: LD_INT 0
19838: PLUS
19839: PUSH
19840: FOR_TO
19841: IFFALSE 20163
// case dir_list [ c ] of 0 :
19843: LD_VAR 0 10
19847: PUSH
19848: LD_VAR 0 14
19852: ARRAY
19853: PUSH
19854: LD_INT 0
19856: DOUBLE
19857: EQUAL
19858: IFTRUE 19862
19860: GO 19903
19862: POP
// list_coords = Insert ( list_coords , 1 , [ x , y - dist ] ) ; 1 :
19863: LD_ADDR_VAR 0 8
19867: PUSH
19868: LD_VAR 0 8
19872: PPUSH
19873: LD_INT 1
19875: PPUSH
19876: LD_VAR 0 2
19880: PUSH
19881: LD_VAR 0 3
19885: PUSH
19886: LD_VAR 0 4
19890: MINUS
19891: PUSH
19892: EMPTY
19893: LIST
19894: LIST
19895: PPUSH
19896: CALL_OW 2
19900: ST_TO_ADDR
19901: GO 20161
19903: LD_INT 1
19905: DOUBLE
19906: EQUAL
19907: IFTRUE 19911
19909: GO 19952
19911: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y ] ) ; 2 :
19912: LD_ADDR_VAR 0 8
19916: PUSH
19917: LD_VAR 0 8
19921: PPUSH
19922: LD_INT 1
19924: PPUSH
19925: LD_VAR 0 2
19929: PUSH
19930: LD_VAR 0 4
19934: PLUS
19935: PUSH
19936: LD_VAR 0 3
19940: PUSH
19941: EMPTY
19942: LIST
19943: LIST
19944: PPUSH
19945: CALL_OW 2
19949: ST_TO_ADDR
19950: GO 20161
19952: LD_INT 2
19954: DOUBLE
19955: EQUAL
19956: IFTRUE 19960
19958: GO 20007
19960: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + dist ] ) ; 3 :
19961: LD_ADDR_VAR 0 8
19965: PUSH
19966: LD_VAR 0 8
19970: PPUSH
19971: LD_INT 1
19973: PPUSH
19974: LD_VAR 0 2
19978: PUSH
19979: LD_VAR 0 4
19983: PLUS
19984: PUSH
19985: LD_VAR 0 3
19989: PUSH
19990: LD_VAR 0 4
19994: PLUS
19995: PUSH
19996: EMPTY
19997: LIST
19998: LIST
19999: PPUSH
20000: CALL_OW 2
20004: ST_TO_ADDR
20005: GO 20161
20007: LD_INT 3
20009: DOUBLE
20010: EQUAL
20011: IFTRUE 20015
20013: GO 20056
20015: POP
// list_coords = Insert ( list_coords , 1 , [ x , y + dist ] ) ; 4 :
20016: LD_ADDR_VAR 0 8
20020: PUSH
20021: LD_VAR 0 8
20025: PPUSH
20026: LD_INT 1
20028: PPUSH
20029: LD_VAR 0 2
20033: PUSH
20034: LD_VAR 0 3
20038: PUSH
20039: LD_VAR 0 4
20043: PLUS
20044: PUSH
20045: EMPTY
20046: LIST
20047: LIST
20048: PPUSH
20049: CALL_OW 2
20053: ST_TO_ADDR
20054: GO 20161
20056: LD_INT 4
20058: DOUBLE
20059: EQUAL
20060: IFTRUE 20064
20062: GO 20105
20064: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y ] ) ; 5 :
20065: LD_ADDR_VAR 0 8
20069: PUSH
20070: LD_VAR 0 8
20074: PPUSH
20075: LD_INT 1
20077: PPUSH
20078: LD_VAR 0 2
20082: PUSH
20083: LD_VAR 0 4
20087: MINUS
20088: PUSH
20089: LD_VAR 0 3
20093: PUSH
20094: EMPTY
20095: LIST
20096: LIST
20097: PPUSH
20098: CALL_OW 2
20102: ST_TO_ADDR
20103: GO 20161
20105: LD_INT 5
20107: DOUBLE
20108: EQUAL
20109: IFTRUE 20113
20111: GO 20160
20113: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - dist ] ) ; end ;
20114: LD_ADDR_VAR 0 8
20118: PUSH
20119: LD_VAR 0 8
20123: PPUSH
20124: LD_INT 1
20126: PPUSH
20127: LD_VAR 0 2
20131: PUSH
20132: LD_VAR 0 4
20136: MINUS
20137: PUSH
20138: LD_VAR 0 3
20142: PUSH
20143: LD_VAR 0 4
20147: MINUS
20148: PUSH
20149: EMPTY
20150: LIST
20151: LIST
20152: PPUSH
20153: CALL_OW 2
20157: ST_TO_ADDR
20158: GO 20161
20160: POP
20161: GO 19840
20163: POP
20164: POP
// if dist < 30 then
20165: LD_VAR 0 4
20169: PUSH
20170: LD_INT 30
20172: LESS
20173: IFFALSE 20185
// c = 1 else
20175: LD_ADDR_VAR 0 14
20179: PUSH
20180: LD_INT 1
20182: ST_TO_ADDR
20183: GO 20193
// c = 2 ;
20185: LD_ADDR_VAR 0 14
20189: PUSH
20190: LD_INT 2
20192: ST_TO_ADDR
// b = 1 ;
20193: LD_ADDR_VAR 0 11
20197: PUSH
20198: LD_INT 1
20200: ST_TO_ADDR
// while b <= ( dist - 1 ) do
20201: LD_VAR 0 11
20205: PUSH
20206: LD_VAR 0 4
20210: PUSH
20211: LD_INT 1
20213: MINUS
20214: LESSEQUAL
20215: IFFALSE 20643
// begin if 0 in dir_list and 1 in dir_list then
20217: LD_INT 0
20219: PUSH
20220: LD_VAR 0 10
20224: IN
20225: PUSH
20226: LD_INT 1
20228: PUSH
20229: LD_VAR 0 10
20233: IN
20234: AND
20235: IFFALSE 20287
// list_coords = Insert ( list_coords , 1 , [ x + b , y - dist + b ] ) ;
20237: LD_ADDR_VAR 0 8
20241: PUSH
20242: LD_VAR 0 8
20246: PPUSH
20247: LD_INT 1
20249: PPUSH
20250: LD_VAR 0 2
20254: PUSH
20255: LD_VAR 0 11
20259: PLUS
20260: PUSH
20261: LD_VAR 0 3
20265: PUSH
20266: LD_VAR 0 4
20270: MINUS
20271: PUSH
20272: LD_VAR 0 11
20276: PLUS
20277: PUSH
20278: EMPTY
20279: LIST
20280: LIST
20281: PPUSH
20282: CALL_OW 2
20286: ST_TO_ADDR
// if 1 in dir_list and 2 in dir_list then
20287: LD_INT 1
20289: PUSH
20290: LD_VAR 0 10
20294: IN
20295: PUSH
20296: LD_INT 2
20298: PUSH
20299: LD_VAR 0 10
20303: IN
20304: AND
20305: IFFALSE 20351
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + b ] ) ;
20307: LD_ADDR_VAR 0 8
20311: PUSH
20312: LD_VAR 0 8
20316: PPUSH
20317: LD_INT 1
20319: PPUSH
20320: LD_VAR 0 2
20324: PUSH
20325: LD_VAR 0 4
20329: PLUS
20330: PUSH
20331: LD_VAR 0 3
20335: PUSH
20336: LD_VAR 0 11
20340: PLUS
20341: PUSH
20342: EMPTY
20343: LIST
20344: LIST
20345: PPUSH
20346: CALL_OW 2
20350: ST_TO_ADDR
// if 2 in dir_list and 3 in dir_list then
20351: LD_INT 2
20353: PUSH
20354: LD_VAR 0 10
20358: IN
20359: PUSH
20360: LD_INT 3
20362: PUSH
20363: LD_VAR 0 10
20367: IN
20368: AND
20369: IFFALSE 20421
// list_coords = Insert ( list_coords , 1 , [ x + dist - b , y + dist ] ) ;
20371: LD_ADDR_VAR 0 8
20375: PUSH
20376: LD_VAR 0 8
20380: PPUSH
20381: LD_INT 1
20383: PPUSH
20384: LD_VAR 0 2
20388: PUSH
20389: LD_VAR 0 4
20393: PLUS
20394: PUSH
20395: LD_VAR 0 11
20399: MINUS
20400: PUSH
20401: LD_VAR 0 3
20405: PUSH
20406: LD_VAR 0 4
20410: PLUS
20411: PUSH
20412: EMPTY
20413: LIST
20414: LIST
20415: PPUSH
20416: CALL_OW 2
20420: ST_TO_ADDR
// if 3 in dir_list and 4 in dir_list then
20421: LD_INT 3
20423: PUSH
20424: LD_VAR 0 10
20428: IN
20429: PUSH
20430: LD_INT 4
20432: PUSH
20433: LD_VAR 0 10
20437: IN
20438: AND
20439: IFFALSE 20491
// list_coords = Insert ( list_coords , 1 , [ x - b , y + dist - b ] ) ;
20441: LD_ADDR_VAR 0 8
20445: PUSH
20446: LD_VAR 0 8
20450: PPUSH
20451: LD_INT 1
20453: PPUSH
20454: LD_VAR 0 2
20458: PUSH
20459: LD_VAR 0 11
20463: MINUS
20464: PUSH
20465: LD_VAR 0 3
20469: PUSH
20470: LD_VAR 0 4
20474: PLUS
20475: PUSH
20476: LD_VAR 0 11
20480: MINUS
20481: PUSH
20482: EMPTY
20483: LIST
20484: LIST
20485: PPUSH
20486: CALL_OW 2
20490: ST_TO_ADDR
// if 4 in dir_list and 5 in dir_list then
20491: LD_INT 4
20493: PUSH
20494: LD_VAR 0 10
20498: IN
20499: PUSH
20500: LD_INT 5
20502: PUSH
20503: LD_VAR 0 10
20507: IN
20508: AND
20509: IFFALSE 20555
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - b ] ) ;
20511: LD_ADDR_VAR 0 8
20515: PUSH
20516: LD_VAR 0 8
20520: PPUSH
20521: LD_INT 1
20523: PPUSH
20524: LD_VAR 0 2
20528: PUSH
20529: LD_VAR 0 4
20533: MINUS
20534: PUSH
20535: LD_VAR 0 3
20539: PUSH
20540: LD_VAR 0 11
20544: MINUS
20545: PUSH
20546: EMPTY
20547: LIST
20548: LIST
20549: PPUSH
20550: CALL_OW 2
20554: ST_TO_ADDR
// if 5 in dir_list and 0 in dir_list then
20555: LD_INT 5
20557: PUSH
20558: LD_VAR 0 10
20562: IN
20563: PUSH
20564: LD_INT 0
20566: PUSH
20567: LD_VAR 0 10
20571: IN
20572: AND
20573: IFFALSE 20625
// list_coords = Insert ( list_coords , 1 , [ x - dist + b , y - dist ] ) ;
20575: LD_ADDR_VAR 0 8
20579: PUSH
20580: LD_VAR 0 8
20584: PPUSH
20585: LD_INT 1
20587: PPUSH
20588: LD_VAR 0 2
20592: PUSH
20593: LD_VAR 0 4
20597: MINUS
20598: PUSH
20599: LD_VAR 0 11
20603: PLUS
20604: PUSH
20605: LD_VAR 0 3
20609: PUSH
20610: LD_VAR 0 4
20614: MINUS
20615: PUSH
20616: EMPTY
20617: LIST
20618: LIST
20619: PPUSH
20620: CALL_OW 2
20624: ST_TO_ADDR
// b = b + c end ;
20625: LD_ADDR_VAR 0 11
20629: PUSH
20630: LD_VAR 0 11
20634: PUSH
20635: LD_VAR 0 14
20639: PLUS
20640: ST_TO_ADDR
20641: GO 20201
// if list_coords = 0 then
20643: LD_VAR 0 8
20647: PUSH
20648: LD_INT 0
20650: EQUAL
20651: IFFALSE 20655
// exit ;
20653: GO 21163
// repeat min_dist = 5000 ;
20655: LD_ADDR_VAR 0 12
20659: PUSH
20660: LD_INT 5000
20662: ST_TO_ADDR
// for b in list_coords do
20663: LD_ADDR_VAR 0 11
20667: PUSH
20668: LD_VAR 0 8
20672: PUSH
20673: FOR_IN
20674: IFFALSE 20733
// begin temp_dist = GetDistUnitXY ( unit1 , b [ 1 ] , b [ 2 ] ) ;
20676: LD_ADDR_VAR 0 13
20680: PUSH
20681: LD_VAR 0 1
20685: PPUSH
20686: LD_VAR 0 11
20690: PUSH
20691: LD_INT 1
20693: ARRAY
20694: PPUSH
20695: LD_VAR 0 11
20699: PUSH
20700: LD_INT 2
20702: ARRAY
20703: PPUSH
20704: CALL_OW 297
20708: ST_TO_ADDR
// if temp_dist < min_dist then
20709: LD_VAR 0 13
20713: PUSH
20714: LD_VAR 0 12
20718: LESS
20719: IFFALSE 20731
// min_dist = temp_dist ;
20721: LD_ADDR_VAR 0 12
20725: PUSH
20726: LD_VAR 0 13
20730: ST_TO_ADDR
// end ;
20731: GO 20673
20733: POP
20734: POP
// c = 0 ;
20735: LD_ADDR_VAR 0 14
20739: PUSH
20740: LD_INT 0
20742: ST_TO_ADDR
// repeat c = c + 1 ;
20743: LD_ADDR_VAR 0 14
20747: PUSH
20748: LD_VAR 0 14
20752: PUSH
20753: LD_INT 1
20755: PLUS
20756: ST_TO_ADDR
// if GetDistUnitXY ( unit1 , list_coords [ c ] [ 1 ] , list_coords [ c ] [ 2 ] ) = min_dist then
20757: LD_VAR 0 1
20761: PPUSH
20762: LD_VAR 0 8
20766: PUSH
20767: LD_VAR 0 14
20771: ARRAY
20772: PUSH
20773: LD_INT 1
20775: ARRAY
20776: PPUSH
20777: LD_VAR 0 8
20781: PUSH
20782: LD_VAR 0 14
20786: ARRAY
20787: PUSH
20788: LD_INT 2
20790: ARRAY
20791: PPUSH
20792: CALL_OW 297
20796: PUSH
20797: LD_VAR 0 12
20801: EQUAL
20802: IFFALSE 20867
// begin list_nearest = Insert ( list_nearest , 1 , list_coords [ c ] ) ;
20804: LD_ADDR_VAR 0 7
20808: PUSH
20809: LD_VAR 0 7
20813: PPUSH
20814: LD_INT 1
20816: PPUSH
20817: LD_VAR 0 8
20821: PUSH
20822: LD_VAR 0 14
20826: ARRAY
20827: PPUSH
20828: CALL_OW 2
20832: ST_TO_ADDR
// list_coords = Delete ( list_coords , c ) ;
20833: LD_ADDR_VAR 0 8
20837: PUSH
20838: LD_VAR 0 8
20842: PPUSH
20843: LD_VAR 0 14
20847: PPUSH
20848: CALL_OW 3
20852: ST_TO_ADDR
// c = c - 1 ;
20853: LD_ADDR_VAR 0 14
20857: PUSH
20858: LD_VAR 0 14
20862: PUSH
20863: LD_INT 1
20865: MINUS
20866: ST_TO_ADDR
// end ; until c = list_coords ;
20867: LD_VAR 0 14
20871: PUSH
20872: LD_VAR 0 8
20876: EQUAL
20877: IFFALSE 20743
// c = 0 ;
20879: LD_ADDR_VAR 0 14
20883: PUSH
20884: LD_INT 0
20886: ST_TO_ADDR
// if list_nearest > 0 then
20887: LD_VAR 0 7
20891: PUSH
20892: LD_INT 0
20894: GREATER
20895: IFFALSE 21037
// begin repeat rand_num = Rand ( 1 , list_nearest ) ;
20897: LD_ADDR_VAR 0 15
20901: PUSH
20902: LD_INT 1
20904: PPUSH
20905: LD_VAR 0 7
20909: PPUSH
20910: CALL_OW 12
20914: ST_TO_ADDR
// rand_near_hex = list_nearest [ rand_num ] ;
20915: LD_ADDR_VAR 0 16
20919: PUSH
20920: LD_VAR 0 7
20924: PUSH
20925: LD_VAR 0 15
20929: ARRAY
20930: 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
20931: LD_VAR 0 16
20935: PUSH
20936: LD_INT 1
20938: ARRAY
20939: PPUSH
20940: LD_VAR 0 16
20944: PUSH
20945: LD_INT 2
20947: ARRAY
20948: PPUSH
20949: CALL_OW 488
20953: PUSH
20954: LD_INT 0
20956: GREATER
20957: PUSH
20958: LD_VAR 0 16
20962: PUSH
20963: LD_INT 1
20965: ARRAY
20966: PPUSH
20967: LD_VAR 0 16
20971: PUSH
20972: LD_INT 2
20974: ARRAY
20975: PPUSH
20976: CALL_OW 428
20980: PUSH
20981: LD_INT 0
20983: EQUAL
20984: AND
20985: IFFALSE 20997
// c = 1 else
20987: LD_ADDR_VAR 0 14
20991: PUSH
20992: LD_INT 1
20994: ST_TO_ADDR
20995: GO 21017
// list_nearest = Delete ( list_nearest , rand_num ) ;
20997: LD_ADDR_VAR 0 7
21001: PUSH
21002: LD_VAR 0 7
21006: PPUSH
21007: LD_VAR 0 15
21011: PPUSH
21012: CALL_OW 3
21016: ST_TO_ADDR
// until c = 1 or list_nearest = 0 ;
21017: LD_VAR 0 14
21021: PUSH
21022: LD_INT 1
21024: EQUAL
21025: PUSH
21026: LD_VAR 0 7
21030: PUSH
21031: LD_INT 0
21033: EQUAL
21034: OR
21035: IFFALSE 20897
// end ; until c = 1 or list_coords = 0 ;
21037: LD_VAR 0 14
21041: PUSH
21042: LD_INT 1
21044: EQUAL
21045: PUSH
21046: LD_VAR 0 8
21050: PUSH
21051: LD_INT 0
21053: EQUAL
21054: OR
21055: IFFALSE 20655
// attempts = attempts + 1 ;
21057: LD_ADDR_VAR 0 17
21061: PUSH
21062: LD_VAR 0 17
21066: PUSH
21067: LD_INT 1
21069: PLUS
21070: ST_TO_ADDR
// until c = 1 or attempts > 1 ;
21071: LD_VAR 0 14
21075: PUSH
21076: LD_INT 1
21078: EQUAL
21079: PUSH
21080: LD_VAR 0 17
21084: PUSH
21085: LD_INT 1
21087: GREATER
21088: OR
21089: IFFALSE 19614
// if c = 1 then
21091: LD_VAR 0 14
21095: PUSH
21096: LD_INT 1
21098: EQUAL
21099: IFFALSE 21163
// if add then
21101: LD_VAR 0 5
21105: IFFALSE 21136
// AddComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) else
21107: LD_VAR 0 1
21111: PPUSH
21112: LD_VAR 0 16
21116: PUSH
21117: LD_INT 1
21119: ARRAY
21120: PPUSH
21121: LD_VAR 0 16
21125: PUSH
21126: LD_INT 2
21128: ARRAY
21129: PPUSH
21130: CALL_OW 171
21134: GO 21163
// ComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) ;
21136: LD_VAR 0 1
21140: PPUSH
21141: LD_VAR 0 16
21145: PUSH
21146: LD_INT 1
21148: ARRAY
21149: PPUSH
21150: LD_VAR 0 16
21154: PUSH
21155: LD_INT 2
21157: ARRAY
21158: PPUSH
21159: CALL_OW 111
// end ;
21163: LD_VAR 0 6
21167: RET
// export function AI_GetTurnDirection ( x1 , y1 , x , y ) ; var dist_1 , dist_2 , b , temp_dist , dir ; begin
21168: LD_INT 0
21170: PPUSH
21171: PPUSH
21172: PPUSH
21173: PPUSH
21174: PPUSH
21175: PPUSH
// if not ValidHex ( x1 , y1 ) or not ValidHex ( x , y ) then
21176: LD_VAR 0 1
21180: PPUSH
21181: LD_VAR 0 2
21185: PPUSH
21186: CALL_OW 488
21190: NOT
21191: PUSH
21192: LD_VAR 0 3
21196: PPUSH
21197: LD_VAR 0 4
21201: PPUSH
21202: CALL_OW 488
21206: NOT
21207: OR
21208: IFFALSE 21221
// begin result = - 1 ;
21210: LD_ADDR_VAR 0 5
21214: PUSH
21215: LD_INT 1
21217: NEG
21218: ST_TO_ADDR
// exit ;
21219: GO 21381
// end ; dist_1 = GetDistXY ( x1 , y1 , x , y ) ;
21221: LD_ADDR_VAR 0 6
21225: PUSH
21226: LD_VAR 0 1
21230: PPUSH
21231: LD_VAR 0 2
21235: PPUSH
21236: LD_VAR 0 3
21240: PPUSH
21241: LD_VAR 0 4
21245: PPUSH
21246: CALL_OW 298
21250: ST_TO_ADDR
// dist_2 = 99999 ;
21251: LD_ADDR_VAR 0 7
21255: PUSH
21256: LD_INT 99999
21258: ST_TO_ADDR
// for b = 0 to 5 do
21259: LD_ADDR_VAR 0 8
21263: PUSH
21264: DOUBLE
21265: LD_INT 0
21267: DEC
21268: ST_TO_ADDR
21269: LD_INT 5
21271: PUSH
21272: FOR_TO
21273: IFFALSE 21369
// begin temp_dist = GetDistXY ( ShiftX ( x1 , b , dist_1 ) , ShiftY ( y1 , b , dist_1 ) , x , y ) ;
21275: LD_ADDR_VAR 0 9
21279: PUSH
21280: LD_VAR 0 1
21284: PPUSH
21285: LD_VAR 0 8
21289: PPUSH
21290: LD_VAR 0 6
21294: PPUSH
21295: CALL_OW 272
21299: PPUSH
21300: LD_VAR 0 2
21304: PPUSH
21305: LD_VAR 0 8
21309: PPUSH
21310: LD_VAR 0 6
21314: PPUSH
21315: CALL_OW 273
21319: PPUSH
21320: LD_VAR 0 3
21324: PPUSH
21325: LD_VAR 0 4
21329: PPUSH
21330: CALL_OW 298
21334: ST_TO_ADDR
// if temp_dist < dist_2 then
21335: LD_VAR 0 9
21339: PUSH
21340: LD_VAR 0 7
21344: LESS
21345: IFFALSE 21367
// begin dist_2 = temp_dist ;
21347: LD_ADDR_VAR 0 7
21351: PUSH
21352: LD_VAR 0 9
21356: ST_TO_ADDR
// dir = b ;
21357: LD_ADDR_VAR 0 10
21361: PUSH
21362: LD_VAR 0 8
21366: ST_TO_ADDR
// end ; end ;
21367: GO 21272
21369: POP
21370: POP
// result = dir ;
21371: LD_ADDR_VAR 0 5
21375: PUSH
21376: LD_VAR 0 10
21380: ST_TO_ADDR
// end ;
21381: LD_VAR 0 5
21385: RET
// export function AI_InvertDirection ( direction ) ; var dir ; begin
21386: LD_INT 0
21388: PPUSH
21389: PPUSH
// dir = direction - 3 ;
21390: LD_ADDR_VAR 0 3
21394: PUSH
21395: LD_VAR 0 1
21399: PUSH
21400: LD_INT 3
21402: MINUS
21403: ST_TO_ADDR
// if dir < 0 then
21404: LD_VAR 0 3
21408: PUSH
21409: LD_INT 0
21411: LESS
21412: IFFALSE 21428
// dir = dir + 6 ;
21414: LD_ADDR_VAR 0 3
21418: PUSH
21419: LD_VAR 0 3
21423: PUSH
21424: LD_INT 6
21426: PLUS
21427: ST_TO_ADDR
// result = dir ;
21428: LD_ADDR_VAR 0 2
21432: PUSH
21433: LD_VAR 0 3
21437: ST_TO_ADDR
// end ;
21438: LD_VAR 0 2
21442: RET
// export function BehindLine ( un , x , y , dir , dist ) ; var c ; begin
21443: LD_INT 0
21445: PPUSH
21446: PPUSH
// case dir of 0 :
21447: LD_VAR 0 4
21451: PUSH
21452: LD_INT 0
21454: DOUBLE
21455: EQUAL
21456: IFTRUE 21460
21458: GO 21555
21460: POP
// begin c = GetX ( un ) - x ;
21461: LD_ADDR_VAR 0 7
21465: PUSH
21466: LD_VAR 0 1
21470: PPUSH
21471: CALL_OW 250
21475: PUSH
21476: LD_VAR 0 2
21480: MINUS
21481: ST_TO_ADDR
// if c > 0 then
21482: LD_VAR 0 7
21486: PUSH
21487: LD_INT 0
21489: GREATER
21490: IFFALSE 21506
// c = c + 1 ;
21492: LD_ADDR_VAR 0 7
21496: PUSH
21497: LD_VAR 0 7
21501: PUSH
21502: LD_INT 1
21504: PLUS
21505: ST_TO_ADDR
// y = y + ( c div 2 ) ;
21506: LD_ADDR_VAR 0 3
21510: PUSH
21511: LD_VAR 0 3
21515: PUSH
21516: LD_VAR 0 7
21520: PUSH
21521: LD_INT 2
21523: DIV
21524: PLUS
21525: ST_TO_ADDR
// result := GetY ( un ) >= y + dist ;
21526: LD_ADDR_VAR 0 6
21530: PUSH
21531: LD_VAR 0 1
21535: PPUSH
21536: CALL_OW 251
21540: PUSH
21541: LD_VAR 0 3
21545: PUSH
21546: LD_VAR 0 5
21550: PLUS
21551: GREATEREQUAL
21552: ST_TO_ADDR
// end ; 1 :
21553: GO 21983
21555: LD_INT 1
21557: DOUBLE
21558: EQUAL
21559: IFTRUE 21563
21561: GO 21658
21563: POP
// begin c = GetY ( un ) - y ;
21564: LD_ADDR_VAR 0 7
21568: PUSH
21569: LD_VAR 0 1
21573: PPUSH
21574: CALL_OW 251
21578: PUSH
21579: LD_VAR 0 3
21583: MINUS
21584: ST_TO_ADDR
// if c < 0 then
21585: LD_VAR 0 7
21589: PUSH
21590: LD_INT 0
21592: LESS
21593: IFFALSE 21609
// c = c - 1 ;
21595: LD_ADDR_VAR 0 7
21599: PUSH
21600: LD_VAR 0 7
21604: PUSH
21605: LD_INT 1
21607: MINUS
21608: ST_TO_ADDR
// x = x + ( c div 2 ) ;
21609: LD_ADDR_VAR 0 2
21613: PUSH
21614: LD_VAR 0 2
21618: PUSH
21619: LD_VAR 0 7
21623: PUSH
21624: LD_INT 2
21626: DIV
21627: PLUS
21628: ST_TO_ADDR
// result := GetX ( un ) <= x - dist ;
21629: LD_ADDR_VAR 0 6
21633: PUSH
21634: LD_VAR 0 1
21638: PPUSH
21639: CALL_OW 250
21643: PUSH
21644: LD_VAR 0 2
21648: PUSH
21649: LD_VAR 0 5
21653: MINUS
21654: LESSEQUAL
21655: ST_TO_ADDR
// end ; 2 :
21656: GO 21983
21658: LD_INT 2
21660: DOUBLE
21661: EQUAL
21662: IFTRUE 21666
21664: GO 21717
21666: POP
// begin result := GetX ( un ) + GetY ( un ) <= x + y - 2 * dist ;
21667: LD_ADDR_VAR 0 6
21671: PUSH
21672: LD_VAR 0 1
21676: PPUSH
21677: CALL_OW 250
21681: PUSH
21682: LD_VAR 0 1
21686: PPUSH
21687: CALL_OW 251
21691: PLUS
21692: PUSH
21693: LD_VAR 0 2
21697: PUSH
21698: LD_VAR 0 3
21702: PLUS
21703: PUSH
21704: LD_INT 2
21706: PUSH
21707: LD_VAR 0 5
21711: MUL
21712: MINUS
21713: LESSEQUAL
21714: ST_TO_ADDR
// end ; 3 :
21715: GO 21983
21717: LD_INT 3
21719: DOUBLE
21720: EQUAL
21721: IFTRUE 21725
21723: GO 21820
21725: POP
// begin c = GetX ( un ) - x ;
21726: LD_ADDR_VAR 0 7
21730: PUSH
21731: LD_VAR 0 1
21735: PPUSH
21736: CALL_OW 250
21740: PUSH
21741: LD_VAR 0 2
21745: MINUS
21746: ST_TO_ADDR
// if c < 0 then
21747: LD_VAR 0 7
21751: PUSH
21752: LD_INT 0
21754: LESS
21755: IFFALSE 21771
// c = c - 1 ;
21757: LD_ADDR_VAR 0 7
21761: PUSH
21762: LD_VAR 0 7
21766: PUSH
21767: LD_INT 1
21769: MINUS
21770: ST_TO_ADDR
// y = y + ( c div 2 ) ;
21771: LD_ADDR_VAR 0 3
21775: PUSH
21776: LD_VAR 0 3
21780: PUSH
21781: LD_VAR 0 7
21785: PUSH
21786: LD_INT 2
21788: DIV
21789: PLUS
21790: ST_TO_ADDR
// result := GetY ( un ) <= y - dist ;
21791: LD_ADDR_VAR 0 6
21795: PUSH
21796: LD_VAR 0 1
21800: PPUSH
21801: CALL_OW 251
21805: PUSH
21806: LD_VAR 0 3
21810: PUSH
21811: LD_VAR 0 5
21815: MINUS
21816: LESSEQUAL
21817: ST_TO_ADDR
// end ; 4 :
21818: GO 21983
21820: LD_INT 4
21822: DOUBLE
21823: EQUAL
21824: IFTRUE 21828
21826: GO 21923
21828: POP
// begin c = GetY ( un ) - y ;
21829: LD_ADDR_VAR 0 7
21833: PUSH
21834: LD_VAR 0 1
21838: PPUSH
21839: CALL_OW 251
21843: PUSH
21844: LD_VAR 0 3
21848: MINUS
21849: ST_TO_ADDR
// if c > 0 then
21850: LD_VAR 0 7
21854: PUSH
21855: LD_INT 0
21857: GREATER
21858: IFFALSE 21874
// c = c + 1 ;
21860: LD_ADDR_VAR 0 7
21864: PUSH
21865: LD_VAR 0 7
21869: PUSH
21870: LD_INT 1
21872: PLUS
21873: ST_TO_ADDR
// x = x + ( c div 2 ) ;
21874: LD_ADDR_VAR 0 2
21878: PUSH
21879: LD_VAR 0 2
21883: PUSH
21884: LD_VAR 0 7
21888: PUSH
21889: LD_INT 2
21891: DIV
21892: PLUS
21893: ST_TO_ADDR
// result := GetX ( un ) >= x + dist ;
21894: LD_ADDR_VAR 0 6
21898: PUSH
21899: LD_VAR 0 1
21903: PPUSH
21904: CALL_OW 250
21908: PUSH
21909: LD_VAR 0 2
21913: PUSH
21914: LD_VAR 0 5
21918: PLUS
21919: GREATEREQUAL
21920: ST_TO_ADDR
// end ; 5 :
21921: GO 21983
21923: LD_INT 5
21925: DOUBLE
21926: EQUAL
21927: IFTRUE 21931
21929: GO 21982
21931: POP
// begin result := GetX ( un ) + GetY ( un ) >= x + y + 2 * dist ;
21932: LD_ADDR_VAR 0 6
21936: PUSH
21937: LD_VAR 0 1
21941: PPUSH
21942: CALL_OW 250
21946: PUSH
21947: LD_VAR 0 1
21951: PPUSH
21952: CALL_OW 251
21956: PLUS
21957: PUSH
21958: LD_VAR 0 2
21962: PUSH
21963: LD_VAR 0 3
21967: PLUS
21968: PUSH
21969: LD_INT 2
21971: PUSH
21972: LD_VAR 0 5
21976: MUL
21977: PLUS
21978: GREATEREQUAL
21979: ST_TO_ADDR
// end ; end ;
21980: GO 21983
21982: POP
// end ;
21983: LD_VAR 0 6
21987: RET
// export function GetHexesNearHex ( x , y , dist ) ; var d , list_coords , b ; begin
21988: LD_INT 0
21990: PPUSH
21991: PPUSH
21992: PPUSH
21993: PPUSH
// result = [ [ x , y ] ] ;
21994: LD_ADDR_VAR 0 4
21998: PUSH
21999: LD_VAR 0 1
22003: PUSH
22004: LD_VAR 0 2
22008: PUSH
22009: EMPTY
22010: LIST
22011: LIST
22012: PUSH
22013: EMPTY
22014: LIST
22015: ST_TO_ADDR
// for d = 1 to dist do
22016: LD_ADDR_VAR 0 5
22020: PUSH
22021: DOUBLE
22022: LD_INT 1
22024: DEC
22025: ST_TO_ADDR
22026: LD_VAR 0 3
22030: PUSH
22031: FOR_TO
22032: IFFALSE 22627
// begin list_coords = [ ] ;
22034: LD_ADDR_VAR 0 6
22038: PUSH
22039: EMPTY
22040: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x , y - d ] ) ;
22041: LD_ADDR_VAR 0 6
22045: PUSH
22046: LD_VAR 0 6
22050: PPUSH
22051: LD_INT 1
22053: PPUSH
22054: LD_VAR 0 1
22058: PUSH
22059: LD_VAR 0 2
22063: PUSH
22064: LD_VAR 0 5
22068: MINUS
22069: PUSH
22070: EMPTY
22071: LIST
22072: LIST
22073: PPUSH
22074: CALL_OW 2
22078: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d , y ] ) ;
22079: LD_ADDR_VAR 0 6
22083: PUSH
22084: LD_VAR 0 6
22088: PPUSH
22089: LD_INT 1
22091: PPUSH
22092: LD_VAR 0 1
22096: PUSH
22097: LD_VAR 0 5
22101: PLUS
22102: PUSH
22103: LD_VAR 0 2
22107: PUSH
22108: EMPTY
22109: LIST
22110: LIST
22111: PPUSH
22112: CALL_OW 2
22116: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d , y + d ] ) ;
22117: LD_ADDR_VAR 0 6
22121: PUSH
22122: LD_VAR 0 6
22126: PPUSH
22127: LD_INT 1
22129: PPUSH
22130: LD_VAR 0 1
22134: PUSH
22135: LD_VAR 0 5
22139: PLUS
22140: PUSH
22141: LD_VAR 0 2
22145: PUSH
22146: LD_VAR 0 5
22150: PLUS
22151: PUSH
22152: EMPTY
22153: LIST
22154: LIST
22155: PPUSH
22156: CALL_OW 2
22160: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x , y + d ] ) ;
22161: LD_ADDR_VAR 0 6
22165: PUSH
22166: LD_VAR 0 6
22170: PPUSH
22171: LD_INT 1
22173: PPUSH
22174: LD_VAR 0 1
22178: PUSH
22179: LD_VAR 0 2
22183: PUSH
22184: LD_VAR 0 5
22188: PLUS
22189: PUSH
22190: EMPTY
22191: LIST
22192: LIST
22193: PPUSH
22194: CALL_OW 2
22198: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d , y ] ) ;
22199: LD_ADDR_VAR 0 6
22203: PUSH
22204: LD_VAR 0 6
22208: PPUSH
22209: LD_INT 1
22211: PPUSH
22212: LD_VAR 0 1
22216: PUSH
22217: LD_VAR 0 5
22221: MINUS
22222: PUSH
22223: LD_VAR 0 2
22227: PUSH
22228: EMPTY
22229: LIST
22230: LIST
22231: PPUSH
22232: CALL_OW 2
22236: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d , y - d ] ) ;
22237: LD_ADDR_VAR 0 6
22241: PUSH
22242: LD_VAR 0 6
22246: PPUSH
22247: LD_INT 1
22249: PPUSH
22250: LD_VAR 0 1
22254: PUSH
22255: LD_VAR 0 5
22259: MINUS
22260: PUSH
22261: LD_VAR 0 2
22265: PUSH
22266: LD_VAR 0 5
22270: MINUS
22271: PUSH
22272: EMPTY
22273: LIST
22274: LIST
22275: PPUSH
22276: CALL_OW 2
22280: ST_TO_ADDR
// b = 1 ;
22281: LD_ADDR_VAR 0 7
22285: PUSH
22286: LD_INT 1
22288: ST_TO_ADDR
// while b <= ( d - 1 ) do
22289: LD_VAR 0 7
22293: PUSH
22294: LD_VAR 0 5
22298: PUSH
22299: LD_INT 1
22301: MINUS
22302: LESSEQUAL
22303: IFFALSE 22609
// begin list_coords = Insert ( list_coords , 1 , [ x + b , y - d + b ] ) ;
22305: LD_ADDR_VAR 0 6
22309: PUSH
22310: LD_VAR 0 6
22314: PPUSH
22315: LD_INT 1
22317: PPUSH
22318: LD_VAR 0 1
22322: PUSH
22323: LD_VAR 0 7
22327: PLUS
22328: PUSH
22329: LD_VAR 0 2
22333: PUSH
22334: LD_VAR 0 5
22338: MINUS
22339: PUSH
22340: LD_VAR 0 7
22344: PLUS
22345: PUSH
22346: EMPTY
22347: LIST
22348: LIST
22349: PPUSH
22350: CALL_OW 2
22354: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d , y + b ] ) ;
22355: LD_ADDR_VAR 0 6
22359: PUSH
22360: LD_VAR 0 6
22364: PPUSH
22365: LD_INT 1
22367: PPUSH
22368: LD_VAR 0 1
22372: PUSH
22373: LD_VAR 0 5
22377: PLUS
22378: PUSH
22379: LD_VAR 0 2
22383: PUSH
22384: LD_VAR 0 7
22388: PLUS
22389: PUSH
22390: EMPTY
22391: LIST
22392: LIST
22393: PPUSH
22394: CALL_OW 2
22398: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d - b , y + d ] ) ;
22399: LD_ADDR_VAR 0 6
22403: PUSH
22404: LD_VAR 0 6
22408: PPUSH
22409: LD_INT 1
22411: PPUSH
22412: LD_VAR 0 1
22416: PUSH
22417: LD_VAR 0 5
22421: PLUS
22422: PUSH
22423: LD_VAR 0 7
22427: MINUS
22428: PUSH
22429: LD_VAR 0 2
22433: PUSH
22434: LD_VAR 0 5
22438: PLUS
22439: PUSH
22440: EMPTY
22441: LIST
22442: LIST
22443: PPUSH
22444: CALL_OW 2
22448: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - b , y + d - b ] ) ;
22449: LD_ADDR_VAR 0 6
22453: PUSH
22454: LD_VAR 0 6
22458: PPUSH
22459: LD_INT 1
22461: PPUSH
22462: LD_VAR 0 1
22466: PUSH
22467: LD_VAR 0 7
22471: MINUS
22472: PUSH
22473: LD_VAR 0 2
22477: PUSH
22478: LD_VAR 0 5
22482: PLUS
22483: PUSH
22484: LD_VAR 0 7
22488: MINUS
22489: PUSH
22490: EMPTY
22491: LIST
22492: LIST
22493: PPUSH
22494: CALL_OW 2
22498: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d , y - b ] ) ;
22499: LD_ADDR_VAR 0 6
22503: PUSH
22504: LD_VAR 0 6
22508: PPUSH
22509: LD_INT 1
22511: PPUSH
22512: LD_VAR 0 1
22516: PUSH
22517: LD_VAR 0 5
22521: MINUS
22522: PUSH
22523: LD_VAR 0 2
22527: PUSH
22528: LD_VAR 0 7
22532: MINUS
22533: PUSH
22534: EMPTY
22535: LIST
22536: LIST
22537: PPUSH
22538: CALL_OW 2
22542: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d + b , y - d ] ) ;
22543: LD_ADDR_VAR 0 6
22547: PUSH
22548: LD_VAR 0 6
22552: PPUSH
22553: LD_INT 1
22555: PPUSH
22556: LD_VAR 0 1
22560: PUSH
22561: LD_VAR 0 5
22565: MINUS
22566: PUSH
22567: LD_VAR 0 7
22571: PLUS
22572: PUSH
22573: LD_VAR 0 2
22577: PUSH
22578: LD_VAR 0 5
22582: MINUS
22583: PUSH
22584: EMPTY
22585: LIST
22586: LIST
22587: PPUSH
22588: CALL_OW 2
22592: ST_TO_ADDR
// b = b + 1 ;
22593: LD_ADDR_VAR 0 7
22597: PUSH
22598: LD_VAR 0 7
22602: PUSH
22603: LD_INT 1
22605: PLUS
22606: ST_TO_ADDR
// end ;
22607: GO 22289
// result = result ^ list_coords ;
22609: LD_ADDR_VAR 0 4
22613: PUSH
22614: LD_VAR 0 4
22618: PUSH
22619: LD_VAR 0 6
22623: ADD
22624: ST_TO_ADDR
// end ;
22625: GO 22031
22627: POP
22628: POP
// end ;
22629: LD_VAR 0 4
22633: RET
// export function RoundDouble ( d ) ; begin
22634: LD_INT 0
22636: PPUSH
// result = d div 1 ;
22637: LD_ADDR_VAR 0 2
22641: PUSH
22642: LD_VAR 0 1
22646: PUSH
22647: LD_INT 1
22649: DIV
22650: ST_TO_ADDR
// if d mod 1 >= 0.5 then
22651: LD_VAR 0 1
22655: PUSH
22656: LD_INT 1
22658: MOD
22659: PUSH
22660: LD_REAL  5.00000000000000E-0001
22663: GREATEREQUAL
22664: IFFALSE 22680
// result = result + 1 ;
22666: LD_ADDR_VAR 0 2
22670: PUSH
22671: LD_VAR 0 2
22675: PUSH
22676: LD_INT 1
22678: PLUS
22679: ST_TO_ADDR
// end ;
22680: LD_VAR 0 2
22684: RET
// var computer_level_1 , computer_level_2 , veh_attack_delay_seed , hum_attack_delay_seed ; export function InitComputerLvlSystem ; var b ; begin
22685: LD_INT 0
22687: PPUSH
22688: PPUSH
// computer_level_1 = 0 ;
22689: LD_ADDR_LOC 3
22693: PUSH
22694: LD_INT 0
22696: ST_TO_ADDR
// computer_level_2 = 0 ;
22697: LD_ADDR_LOC 4
22701: PUSH
22702: LD_INT 0
22704: ST_TO_ADDR
// computer_level_features_1 = [ ] ;
22705: LD_ADDR_EXP 92
22709: PUSH
22710: EMPTY
22711: ST_TO_ADDR
// computer_level_features_2 = [ ] ;
22712: LD_ADDR_EXP 99
22716: PUSH
22717: EMPTY
22718: ST_TO_ADDR
// ai_max_num_vehicles_defend = [ 0 , 0 , 0 ] ;
22719: LD_ADDR_EXP 93
22723: PUSH
22724: LD_INT 0
22726: PUSH
22727: LD_INT 0
22729: PUSH
22730: LD_INT 0
22732: PUSH
22733: EMPTY
22734: LIST
22735: LIST
22736: LIST
22737: ST_TO_ADDR
// ai_max_num_vehicles_attack = [ 0 , 0 , 0 ] ;
22738: LD_ADDR_EXP 94
22742: PUSH
22743: LD_INT 0
22745: PUSH
22746: LD_INT 0
22748: PUSH
22749: LD_INT 0
22751: PUSH
22752: EMPTY
22753: LIST
22754: LIST
22755: LIST
22756: ST_TO_ADDR
// ai_max_num_taufield_vehicles = [ 0 , 0 , 0 ] ;
22757: LD_ADDR_EXP 95
22761: PUSH
22762: LD_INT 0
22764: PUSH
22765: LD_INT 0
22767: PUSH
22768: LD_INT 0
22770: PUSH
22771: EMPTY
22772: LIST
22773: LIST
22774: LIST
22775: ST_TO_ADDR
// ai_max_num_implosion_vehicles = [ 0 , 0 , 0 ] ;
22776: LD_ADDR_EXP 96
22780: PUSH
22781: LD_INT 0
22783: PUSH
22784: LD_INT 0
22786: PUSH
22787: LD_INT 0
22789: PUSH
22790: EMPTY
22791: LIST
22792: LIST
22793: LIST
22794: ST_TO_ADDR
// ai_vehicle_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
22795: LD_ADDR_EXP 98
22799: PUSH
22800: LD_INT 0
22802: PUSH
22803: LD_INT 0
22805: PUSH
22806: LD_INT 0
22808: PUSH
22809: EMPTY
22810: LIST
22811: LIST
22812: LIST
22813: ST_TO_ADDR
// veh_attack_delay_seed = 360 360$0 ;
22814: LD_ADDR_LOC 5
22818: PUSH
22819: LD_INT 756000
22821: ST_TO_ADDR
// ai_human_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
22822: LD_ADDR_EXP 97
22826: PUSH
22827: LD_INT 0
22829: PUSH
22830: LD_INT 0
22832: PUSH
22833: LD_INT 0
22835: PUSH
22836: EMPTY
22837: LIST
22838: LIST
22839: LIST
22840: ST_TO_ADDR
// hum_attack_delay_seed = 0 0$0 ;
22841: LD_ADDR_LOC 6
22845: PUSH
22846: LD_INT 0
22848: ST_TO_ADDR
// for b in ai_bases do
22849: LD_ADDR_VAR 0 2
22853: PUSH
22854: LD_EXP 25
22858: PUSH
22859: FOR_IN
22860: IFFALSE 22882
// begin ResetVehicleAttackDelay ( b ) ;
22862: LD_VAR 0 2
22866: PPUSH
22867: CALL 24014 0 1
// ResetHumanAttackDelay ( b ) ;
22871: LD_VAR 0 2
22875: PPUSH
22876: CALL 24061 0 1
// end ;
22880: GO 22859
22882: POP
22883: POP
// cl_building = building ;
22884: LD_ADDR_EXP 103
22888: PUSH
22889: LD_STRING building
22891: ST_TO_ADDR
// cl_rus_veh_defend = rus_veh_defend ;
22892: LD_ADDR_EXP 104
22896: PUSH
22897: LD_STRING rus_veh_defend
22899: ST_TO_ADDR
// cl_rus_veh_attack = rus_veh_attack ;
22900: LD_ADDR_EXP 105
22904: PUSH
22905: LD_STRING rus_veh_attack
22907: ST_TO_ADDR
// cl_rus_taufield_veh = rus_taufield_veh ;
22908: LD_ADDR_EXP 106
22912: PUSH
22913: LD_STRING rus_taufield_veh
22915: ST_TO_ADDR
// cl_ar_implosion_veh = ar_implosion_veh ;
22916: LD_ADDR_EXP 107
22920: PUSH
22921: LD_STRING ar_implosion_veh
22923: ST_TO_ADDR
// cl_ar_veh_defend = ar_veh_defend ;
22924: LD_ADDR_EXP 110
22928: PUSH
22929: LD_STRING ar_veh_defend
22931: ST_TO_ADDR
// cl_ar_veh_attack = ar_veh_attack ;
22932: LD_ADDR_EXP 108
22936: PUSH
22937: LD_STRING ar_veh_attack
22939: ST_TO_ADDR
// cl_attack_time = attack_time ;
22940: LD_ADDR_EXP 109
22944: PUSH
22945: LD_STRING attack_time
22947: ST_TO_ADDR
// do_upgrade_armoury = false ;
22948: LD_ADDR_EXP 102
22952: PUSH
22953: LD_INT 0
22955: ST_TO_ADDR
// end ;
22956: LD_VAR 0 1
22960: RET
// export function ComputerLvlUp ( feature_list_num ) ; var data_list , temp_list , i ; var level , features ; begin
22961: LD_INT 0
22963: PPUSH
22964: PPUSH
22965: PPUSH
22966: PPUSH
22967: PPUSH
22968: PPUSH
// case feature_list_num of 1 :
22969: LD_VAR 0 1
22973: PUSH
22974: LD_INT 1
22976: DOUBLE
22977: EQUAL
22978: IFTRUE 22982
22980: GO 23037
22982: POP
// begin if computer_level_1 + 1 > computer_level_features_1 then
22983: LD_LOC 3
22987: PUSH
22988: LD_INT 1
22990: PLUS
22991: PUSH
22992: LD_EXP 92
22996: GREATER
22997: IFFALSE 23001
// exit ;
22999: GO 24009
// computer_level_1 = computer_level_1 + 1 ;
23001: LD_ADDR_LOC 3
23005: PUSH
23006: LD_LOC 3
23010: PUSH
23011: LD_INT 1
23013: PLUS
23014: ST_TO_ADDR
// level = computer_level_1 ;
23015: LD_ADDR_VAR 0 6
23019: PUSH
23020: LD_LOC 3
23024: ST_TO_ADDR
// features = computer_level_features_1 ;
23025: LD_ADDR_VAR 0 7
23029: PUSH
23030: LD_EXP 92
23034: ST_TO_ADDR
// end ; 2 :
23035: GO 23103
23037: LD_INT 2
23039: DOUBLE
23040: EQUAL
23041: IFTRUE 23045
23043: GO 23100
23045: POP
// begin if computer_level_2 + 1 > computer_level_features_2 then
23046: LD_LOC 4
23050: PUSH
23051: LD_INT 1
23053: PLUS
23054: PUSH
23055: LD_EXP 99
23059: GREATER
23060: IFFALSE 23064
// exit ;
23062: GO 24009
// computer_level_2 = computer_level_2 + 1 ;
23064: LD_ADDR_LOC 4
23068: PUSH
23069: LD_LOC 4
23073: PUSH
23074: LD_INT 1
23076: PLUS
23077: ST_TO_ADDR
// level = computer_level_2 ;
23078: LD_ADDR_VAR 0 6
23082: PUSH
23083: LD_LOC 4
23087: ST_TO_ADDR
// features = computer_level_features_2 ;
23088: LD_ADDR_VAR 0 7
23092: PUSH
23093: LD_EXP 99
23097: ST_TO_ADDR
// end ; else
23098: GO 23103
23100: POP
// exit ; end ;
23101: GO 24009
// data_list = features [ level ] ;
23103: LD_ADDR_VAR 0 3
23107: PUSH
23108: LD_VAR 0 7
23112: PUSH
23113: LD_VAR 0 6
23117: ARRAY
23118: ST_TO_ADDR
// case data_list [ 1 ] of cl_building :
23119: LD_VAR 0 3
23123: PUSH
23124: LD_INT 1
23126: ARRAY
23127: PUSH
23128: LD_EXP 103
23132: DOUBLE
23133: EQUAL
23134: IFTRUE 23138
23136: GO 23741
23138: POP
// begin temp_list = [ data_list [ 2 ] [ 1 ] , data_list [ 2 ] [ 2 ] , data_list [ 2 ] [ 3 ] , data_list [ 2 ] [ 4 ] , data_list [ 2 ] [ 5 ] , data_list [ 2 ] [ 6 ] , data_list [ 2 ] [ 7 ] ] ;
23139: LD_ADDR_VAR 0 4
23143: PUSH
23144: LD_VAR 0 3
23148: PUSH
23149: LD_INT 2
23151: ARRAY
23152: PUSH
23153: LD_INT 1
23155: ARRAY
23156: PUSH
23157: LD_VAR 0 3
23161: PUSH
23162: LD_INT 2
23164: ARRAY
23165: PUSH
23166: LD_INT 2
23168: ARRAY
23169: PUSH
23170: LD_VAR 0 3
23174: PUSH
23175: LD_INT 2
23177: ARRAY
23178: PUSH
23179: LD_INT 3
23181: ARRAY
23182: PUSH
23183: LD_VAR 0 3
23187: PUSH
23188: LD_INT 2
23190: ARRAY
23191: PUSH
23192: LD_INT 4
23194: ARRAY
23195: PUSH
23196: LD_VAR 0 3
23200: PUSH
23201: LD_INT 2
23203: ARRAY
23204: PUSH
23205: LD_INT 5
23207: ARRAY
23208: PUSH
23209: LD_VAR 0 3
23213: PUSH
23214: LD_INT 2
23216: ARRAY
23217: PUSH
23218: LD_INT 6
23220: ARRAY
23221: PUSH
23222: LD_VAR 0 3
23226: PUSH
23227: LD_INT 2
23229: ARRAY
23230: PUSH
23231: LD_INT 7
23233: ARRAY
23234: PUSH
23235: EMPTY
23236: LIST
23237: LIST
23238: LIST
23239: LIST
23240: LIST
23241: LIST
23242: LIST
23243: ST_TO_ADDR
// for i = 1 to ai_buildings_locations [ 1 ] do
23244: LD_ADDR_VAR 0 5
23248: PUSH
23249: DOUBLE
23250: LD_INT 1
23252: DEC
23253: ST_TO_ADDR
23254: LD_EXP 47
23258: PUSH
23259: LD_INT 1
23261: ARRAY
23262: PUSH
23263: FOR_TO
23264: IFFALSE 23415
// if ai_buildings_locations [ 1 ] [ i ] [ 1 ] = temp_list [ 1 ] and ai_buildings_locations [ 1 ] [ i ] [ 2 ] = temp_list [ 2 ] then
23266: LD_EXP 47
23270: PUSH
23271: LD_INT 1
23273: ARRAY
23274: PUSH
23275: LD_VAR 0 5
23279: ARRAY
23280: PUSH
23281: LD_INT 1
23283: ARRAY
23284: PUSH
23285: LD_VAR 0 4
23289: PUSH
23290: LD_INT 1
23292: ARRAY
23293: EQUAL
23294: PUSH
23295: LD_EXP 47
23299: PUSH
23300: LD_INT 1
23302: ARRAY
23303: PUSH
23304: LD_VAR 0 5
23308: ARRAY
23309: PUSH
23310: LD_INT 2
23312: ARRAY
23313: PUSH
23314: LD_VAR 0 4
23318: PUSH
23319: LD_INT 2
23321: ARRAY
23322: EQUAL
23323: AND
23324: IFFALSE 23413
// begin temp_list = Replace ( ai_buildings_locations [ 1 ] , i , temp_list ) ;
23326: LD_ADDR_VAR 0 4
23330: PUSH
23331: LD_EXP 47
23335: PUSH
23336: LD_INT 1
23338: ARRAY
23339: PPUSH
23340: LD_VAR 0 5
23344: PPUSH
23345: LD_VAR 0 4
23349: PPUSH
23350: CALL_OW 1
23354: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , 1 , temp_list ) ;
23355: LD_ADDR_EXP 47
23359: PUSH
23360: LD_EXP 47
23364: PPUSH
23365: LD_INT 1
23367: PPUSH
23368: LD_VAR 0 4
23372: PPUSH
23373: CALL_OW 1
23377: ST_TO_ADDR
// temp_list = [ ] ;
23378: LD_ADDR_VAR 0 4
23382: PUSH
23383: EMPTY
23384: ST_TO_ADDR
// if data_list [ 2 ] [ 4 ] = b_barracks then
23385: LD_VAR 0 3
23389: PUSH
23390: LD_INT 2
23392: ARRAY
23393: PUSH
23394: LD_INT 4
23396: ARRAY
23397: PUSH
23398: LD_INT 5
23400: EQUAL
23401: IFFALSE 23411
// do_upgrade_armoury = true ;
23403: LD_ADDR_EXP 102
23407: PUSH
23408: LD_INT 1
23410: ST_TO_ADDR
// break ;
23411: GO 23415
// end ;
23413: GO 23263
23415: POP
23416: POP
// if temp_list > 0 then
23417: LD_VAR 0 4
23421: PUSH
23422: LD_INT 0
23424: GREATER
23425: IFFALSE 23739
// begin temp_list = ai_buildings_locations [ 1 ] ^ [ temp_list ] ;
23427: LD_ADDR_VAR 0 4
23431: PUSH
23432: LD_EXP 47
23436: PUSH
23437: LD_INT 1
23439: ARRAY
23440: PUSH
23441: LD_VAR 0 4
23445: PUSH
23446: EMPTY
23447: LIST
23448: ADD
23449: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , 1 , temp_list ) ;
23450: LD_ADDR_EXP 47
23454: PUSH
23455: LD_EXP 47
23459: PPUSH
23460: LD_INT 1
23462: PPUSH
23463: LD_VAR 0 4
23467: PPUSH
23468: CALL_OW 1
23472: ST_TO_ADDR
// SortBuildingLocationsListInCorrectOrder ( 1 ) ;
23473: LD_INT 1
23475: PPUSH
23476: CALL 10359 0 1
// if data_list [ 2 ] [ 4 ] in [ b_bunker , b_breastwork ] and 1 in ai_bases then
23480: LD_VAR 0 3
23484: PUSH
23485: LD_INT 2
23487: ARRAY
23488: PUSH
23489: LD_INT 4
23491: ARRAY
23492: PUSH
23493: LD_INT 32
23495: PUSH
23496: LD_INT 31
23498: PUSH
23499: EMPTY
23500: LIST
23501: LIST
23502: IN
23503: PUSH
23504: LD_INT 1
23506: PUSH
23507: LD_EXP 25
23511: IN
23512: AND
23513: IFFALSE 23739
// begin if data_list [ 2 ] [ 4 ] = b_bunker then
23515: LD_VAR 0 3
23519: PUSH
23520: LD_INT 2
23522: ARRAY
23523: PUSH
23524: LD_INT 4
23526: ARRAY
23527: PUSH
23528: LD_INT 32
23530: EQUAL
23531: IFFALSE 23560
// i = CreateUnitsWithClass ( 1 , class_soldier , russians ) [ 1 ] else
23533: LD_ADDR_VAR 0 5
23537: PUSH
23538: LD_INT 1
23540: PPUSH
23541: LD_INT 1
23543: PPUSH
23544: LD_EXP 3
23548: PPUSH
23549: CALL 13437 0 3
23553: PUSH
23554: LD_INT 1
23556: ARRAY
23557: ST_TO_ADDR
23558: GO 23585
// i = CreateUnitsWithClass ( 1 , class_bazooker , russians ) [ 1 ] ;
23560: LD_ADDR_VAR 0 5
23564: PUSH
23565: LD_INT 1
23567: PPUSH
23568: LD_INT 9
23570: PPUSH
23571: LD_EXP 3
23575: PPUSH
23576: CALL 13437 0 3
23580: PUSH
23581: LD_INT 1
23583: ARRAY
23584: ST_TO_ADDR
// if not PlaceUnitXYR ( i , 32 , 60 , 2 , false ) then
23585: LD_VAR 0 5
23589: PPUSH
23590: LD_INT 32
23592: PPUSH
23593: LD_INT 60
23595: PPUSH
23596: LD_INT 2
23598: PPUSH
23599: LD_INT 0
23601: PPUSH
23602: CALL_OW 50
23606: NOT
23607: IFFALSE 23674
// if not PlaceUnitXYR ( i , 25 , 45 , 2 , false ) then
23609: LD_VAR 0 5
23613: PPUSH
23614: LD_INT 25
23616: PPUSH
23617: LD_INT 45
23619: PPUSH
23620: LD_INT 2
23622: PPUSH
23623: LD_INT 0
23625: PPUSH
23626: CALL_OW 50
23630: NOT
23631: IFFALSE 23674
// PlaceUnitXYR ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] , 7 , false ) ;
23633: LD_VAR 0 5
23637: PPUSH
23638: LD_EXP 55
23642: PUSH
23643: LD_INT 1
23645: ARRAY
23646: PUSH
23647: LD_INT 1
23649: ARRAY
23650: PPUSH
23651: LD_EXP 55
23655: PUSH
23656: LD_INT 1
23658: ARRAY
23659: PUSH
23660: LD_INT 2
23662: ARRAY
23663: PPUSH
23664: LD_INT 7
23666: PPUSH
23667: LD_INT 0
23669: PPUSH
23670: CALL_OW 50
// if IsPlaced ( i ) then
23674: LD_VAR 0 5
23678: PPUSH
23679: CALL_OW 305
23683: IFFALSE 23730
// begin temp_list = ai_soldiers [ 1 ] ^ i ;
23685: LD_ADDR_VAR 0 4
23689: PUSH
23690: LD_EXP 26
23694: PUSH
23695: LD_INT 1
23697: ARRAY
23698: PUSH
23699: LD_VAR 0 5
23703: ADD
23704: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , 1 , temp_list ) ;
23705: LD_ADDR_EXP 26
23709: PUSH
23710: LD_EXP 26
23714: PPUSH
23715: LD_INT 1
23717: PPUSH
23718: LD_VAR 0 4
23722: PPUSH
23723: CALL_OW 1
23727: ST_TO_ADDR
// end else
23728: GO 23739
// DestroyUnit ( i ) ;
23730: LD_VAR 0 5
23734: PPUSH
23735: CALL_OW 65
// end ; end ; end ; cl_rus_veh_defend :
23739: GO 24009
23741: LD_EXP 104
23745: DOUBLE
23746: EQUAL
23747: IFTRUE 23751
23749: GO 23781
23751: POP
// begin ai_max_num_vehicles_defend = Replace ( ai_max_num_vehicles_defend , 1 , data_list [ 2 ] ) ;
23752: LD_ADDR_EXP 93
23756: PUSH
23757: LD_EXP 93
23761: PPUSH
23762: LD_INT 1
23764: PPUSH
23765: LD_VAR 0 3
23769: PUSH
23770: LD_INT 2
23772: ARRAY
23773: PPUSH
23774: CALL_OW 1
23778: ST_TO_ADDR
// end ; cl_rus_veh_attack :
23779: GO 24009
23781: LD_EXP 105
23785: DOUBLE
23786: EQUAL
23787: IFTRUE 23791
23789: GO 23821
23791: POP
// begin ai_max_num_vehicles_attack = Replace ( ai_max_num_vehicles_attack , 1 , data_list [ 2 ] ) ;
23792: LD_ADDR_EXP 94
23796: PUSH
23797: LD_EXP 94
23801: PPUSH
23802: LD_INT 1
23804: PPUSH
23805: LD_VAR 0 3
23809: PUSH
23810: LD_INT 2
23812: ARRAY
23813: PPUSH
23814: CALL_OW 1
23818: ST_TO_ADDR
// end ; cl_rus_taufield_veh :
23819: GO 24009
23821: LD_EXP 106
23825: DOUBLE
23826: EQUAL
23827: IFTRUE 23831
23829: GO 23861
23831: POP
// begin ai_max_num_taufield_vehicles = Replace ( ai_max_num_taufield_vehicles , 3 , data_list [ 2 ] ) ;
23832: LD_ADDR_EXP 95
23836: PUSH
23837: LD_EXP 95
23841: PPUSH
23842: LD_INT 3
23844: PPUSH
23845: LD_VAR 0 3
23849: PUSH
23850: LD_INT 2
23852: ARRAY
23853: PPUSH
23854: CALL_OW 1
23858: ST_TO_ADDR
// end ; cl_ar_implosion_veh :
23859: GO 24009
23861: LD_EXP 107
23865: DOUBLE
23866: EQUAL
23867: IFTRUE 23871
23869: GO 23901
23871: POP
// begin ai_max_num_implosion_vehicles = Replace ( ai_max_num_implosion_vehicles , 3 , data_list [ 2 ] ) ;
23872: LD_ADDR_EXP 96
23876: PUSH
23877: LD_EXP 96
23881: PPUSH
23882: LD_INT 3
23884: PPUSH
23885: LD_VAR 0 3
23889: PUSH
23890: LD_INT 2
23892: ARRAY
23893: PPUSH
23894: CALL_OW 1
23898: ST_TO_ADDR
// end ; cl_ar_veh_defend :
23899: GO 24009
23901: LD_EXP 110
23905: DOUBLE
23906: EQUAL
23907: IFTRUE 23911
23909: GO 23941
23911: POP
// begin ai_max_num_vehicles_defend = Replace ( ai_max_num_vehicles_defend , 3 , data_list [ 2 ] ) ;
23912: LD_ADDR_EXP 93
23916: PUSH
23917: LD_EXP 93
23921: PPUSH
23922: LD_INT 3
23924: PPUSH
23925: LD_VAR 0 3
23929: PUSH
23930: LD_INT 2
23932: ARRAY
23933: PPUSH
23934: CALL_OW 1
23938: ST_TO_ADDR
// end ; cl_ar_veh_attack :
23939: GO 24009
23941: LD_EXP 108
23945: DOUBLE
23946: EQUAL
23947: IFTRUE 23951
23949: GO 23981
23951: POP
// begin ai_max_num_vehicles_attack = Replace ( ai_max_num_vehicles_attack , 3 , data_list [ 2 ] ) ;
23952: LD_ADDR_EXP 94
23956: PUSH
23957: LD_EXP 94
23961: PPUSH
23962: LD_INT 3
23964: PPUSH
23965: LD_VAR 0 3
23969: PUSH
23970: LD_INT 2
23972: ARRAY
23973: PPUSH
23974: CALL_OW 1
23978: ST_TO_ADDR
// end ; cl_attack_time :
23979: GO 24009
23981: LD_EXP 109
23985: DOUBLE
23986: EQUAL
23987: IFTRUE 23991
23989: GO 24008
23991: POP
// begin veh_attack_delay_seed = data_list [ 2 ] ;
23992: LD_ADDR_LOC 5
23996: PUSH
23997: LD_VAR 0 3
24001: PUSH
24002: LD_INT 2
24004: ARRAY
24005: ST_TO_ADDR
// end ; end ;
24006: GO 24009
24008: POP
// end ;
24009: LD_VAR 0 2
24013: RET
// export function ResetVehicleAttackDelay ( base ) ; begin
24014: LD_INT 0
24016: PPUSH
// ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , base , Rand ( veh_attack_delay_seed , veh_attack_delay_seed + 1 1$0 ) ) ;
24017: LD_ADDR_EXP 98
24021: PUSH
24022: LD_EXP 98
24026: PPUSH
24027: LD_VAR 0 1
24031: PPUSH
24032: LD_LOC 5
24036: PPUSH
24037: LD_LOC 5
24041: PUSH
24042: LD_INT 2100
24044: PLUS
24045: PPUSH
24046: CALL_OW 12
24050: PPUSH
24051: CALL_OW 1
24055: ST_TO_ADDR
// end ;
24056: LD_VAR 0 2
24060: RET
// export function ResetHumanAttackDelay ( base ) ; begin
24061: LD_INT 0
24063: PPUSH
// ai_human_attack_delay = Replace ( ai_human_attack_delay , base , Rand ( hum_attack_delay_seed , hum_attack_delay_seed + 1 1$0 ) ) ;
24064: LD_ADDR_EXP 97
24068: PUSH
24069: LD_EXP 97
24073: PPUSH
24074: LD_VAR 0 1
24078: PPUSH
24079: LD_LOC 6
24083: PPUSH
24084: LD_LOC 6
24088: PUSH
24089: LD_INT 2100
24091: PLUS
24092: PPUSH
24093: CALL_OW 12
24097: PPUSH
24098: CALL_OW 1
24102: ST_TO_ADDR
// end ; end_of_file
24103: LD_VAR 0 2
24107: RET
// every 0 0$10 do var i , base ;
24108: GO 24110
24110: DISABLE
24111: LD_INT 0
24113: PPUSH
24114: PPUSH
// begin for i = 1 to ai_depot do
24115: LD_ADDR_VAR 0 1
24119: PUSH
24120: DOUBLE
24121: LD_INT 1
24123: DEC
24124: ST_TO_ADDR
24125: LD_EXP 35
24129: PUSH
24130: FOR_TO
24131: IFFALSE 24241
// if IsOk ( ai_depot [ i ] ) and GetSide ( ai_depot [ i ] ) <> you then
24133: LD_EXP 35
24137: PUSH
24138: LD_VAR 0 1
24142: ARRAY
24143: PPUSH
24144: CALL_OW 302
24148: PUSH
24149: LD_EXP 35
24153: PUSH
24154: LD_VAR 0 1
24158: ARRAY
24159: PPUSH
24160: CALL_OW 255
24164: PUSH
24165: LD_EXP 2
24169: NONEQUAL
24170: AND
24171: IFFALSE 24239
// begin base = GetBase ( ai_depot [ i ] ) ;
24173: LD_ADDR_VAR 0 2
24177: PUSH
24178: LD_EXP 35
24182: PUSH
24183: LD_VAR 0 1
24187: ARRAY
24188: PPUSH
24189: CALL_OW 274
24193: ST_TO_ADDR
// SetResourceType ( base , mat_cans , 300 ) ;
24194: LD_VAR 0 2
24198: PPUSH
24199: LD_INT 1
24201: PPUSH
24202: LD_INT 300
24204: PPUSH
24205: CALL_OW 277
// SetResourceType ( base , mat_oil , 300 ) ;
24209: LD_VAR 0 2
24213: PPUSH
24214: LD_INT 2
24216: PPUSH
24217: LD_INT 300
24219: PPUSH
24220: CALL_OW 277
// SetResourceType ( base , mat_siberit , 300 ) ;
24224: LD_VAR 0 2
24228: PPUSH
24229: LD_INT 3
24231: PPUSH
24232: LD_INT 300
24234: PPUSH
24235: CALL_OW 277
// end ;
24239: GO 24130
24241: POP
24242: POP
// enable ;
24243: ENABLE
// end ;
24244: PPOPN 2
24246: END
// on UnitGoesToRed ( un ) do var base ;
24247: LD_INT 0
24249: PPUSH
// begin AdjustComputerDepotResources ( un ) ;
24250: LD_VAR 0 1
24254: PPUSH
24255: CALL 45692 0 1
// if GetSide ( un ) = you then
24259: LD_VAR 0 1
24263: PPUSH
24264: CALL_OW 255
24268: PUSH
24269: LD_EXP 2
24273: EQUAL
24274: IFFALSE 24278
// exit ;
24276: GO 24346
// base = FindBase ( un ) ;
24278: LD_ADDR_VAR 0 2
24282: PUSH
24283: LD_VAR 0 1
24287: PPUSH
24288: CALL 27251 0 1
24292: ST_TO_ADDR
// if base = 0 then
24293: LD_VAR 0 2
24297: PUSH
24298: LD_INT 0
24300: EQUAL
24301: IFFALSE 24305
// exit ;
24303: GO 24346
// if un = ai_teleporter [ base ] then
24305: LD_VAR 0 1
24309: PUSH
24310: LD_EXP 46
24314: PUSH
24315: LD_VAR 0 2
24319: ARRAY
24320: EQUAL
24321: IFFALSE 24346
// ai_teleporter_exit_placed = Replace ( ai_teleporter_exit_placed , base , false ) ;
24323: LD_ADDR_EXP 76
24327: PUSH
24328: LD_EXP 76
24332: PPUSH
24333: LD_VAR 0 2
24337: PPUSH
24338: LD_INT 0
24340: PPUSH
24341: CALL_OW 1
24345: ST_TO_ADDR
// end ;
24346: PPOPN 2
24348: END
// on UnitDestroyed ( un ) do var side , temp_list , base ; var btype ;
24349: LD_INT 0
24351: PPUSH
24352: PPUSH
24353: PPUSH
24354: PPUSH
// begin if un = Heike then
24355: LD_VAR 0 1
24359: PUSH
24360: LD_EXP 9
24364: EQUAL
24365: IFFALSE 24389
// begin ExclusiveOn ;
24367: CALL_OW 4
// Wait ( 0 0$1 ) ;
24371: LD_INT 35
24373: PPUSH
24374: CALL_OW 67
// YouLost ( HeikeDead ) ;
24378: LD_STRING HeikeDead
24380: PPUSH
24381: CALL_OW 104
// ExclusiveOff ;
24385: CALL_OW 5
// end ; for base in ai_bases do
24389: LD_ADDR_VAR 0 4
24393: PUSH
24394: LD_EXP 25
24398: PUSH
24399: FOR_IN
24400: IFFALSE 24451
// begin temp_list = ai_captured_buildings [ base ] diff un ;
24402: LD_ADDR_VAR 0 3
24406: PUSH
24407: LD_EXP 48
24411: PUSH
24412: LD_VAR 0 4
24416: ARRAY
24417: PUSH
24418: LD_VAR 0 1
24422: DIFF
24423: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
24424: LD_ADDR_EXP 48
24428: PUSH
24429: LD_EXP 48
24433: PPUSH
24434: LD_VAR 0 4
24438: PPUSH
24439: LD_VAR 0 3
24443: PPUSH
24444: CALL_OW 1
24448: ST_TO_ADDR
// end ;
24449: GO 24399
24451: POP
24452: POP
// side = GetSide ( un ) ;
24453: LD_ADDR_VAR 0 2
24457: PUSH
24458: LD_VAR 0 1
24462: PPUSH
24463: CALL_OW 255
24467: ST_TO_ADDR
// if side = you then
24468: LD_VAR 0 2
24472: PUSH
24473: LD_EXP 2
24477: EQUAL
24478: IFFALSE 24482
// exit ;
24480: GO 24628
// case GetType ( un ) of unit_human :
24482: LD_VAR 0 1
24486: PPUSH
24487: CALL_OW 247
24491: PUSH
24492: LD_INT 1
24494: DOUBLE
24495: EQUAL
24496: IFTRUE 24500
24498: GO 24540
24500: POP
// for base in ai_bases do
24501: LD_ADDR_VAR 0 4
24505: PUSH
24506: LD_EXP 25
24510: PUSH
24511: FOR_IN
24512: IFFALSE 24536
// RemoveHumanFromVariables ( base , un , true , true ) ; unit_vehicle :
24514: LD_VAR 0 4
24518: PPUSH
24519: LD_VAR 0 1
24523: PPUSH
24524: LD_INT 1
24526: PPUSH
24527: LD_INT 1
24529: PPUSH
24530: CALL 25867 0 4
24534: GO 24511
24536: POP
24537: POP
24538: GO 24628
24540: LD_INT 2
24542: DOUBLE
24543: EQUAL
24544: IFTRUE 24548
24546: GO 24585
24548: POP
// for base in ai_bases do
24549: LD_ADDR_VAR 0 4
24553: PUSH
24554: LD_EXP 25
24558: PUSH
24559: FOR_IN
24560: IFFALSE 24581
// RemoveVehicleFromVariables ( base , un , true ) ; unit_building :
24562: LD_VAR 0 4
24566: PPUSH
24567: LD_VAR 0 1
24571: PPUSH
24572: LD_INT 1
24574: PPUSH
24575: CALL 24969 0 3
24579: GO 24559
24581: POP
24582: POP
24583: GO 24628
24585: LD_INT 3
24587: DOUBLE
24588: EQUAL
24589: IFTRUE 24593
24591: GO 24627
24593: POP
// for base in ai_bases do
24594: LD_ADDR_VAR 0 4
24598: PUSH
24599: LD_EXP 25
24603: PUSH
24604: FOR_IN
24605: IFFALSE 24623
// RemoveBuildingFromVariables ( base , un ) ; end ;
24607: LD_VAR 0 4
24611: PPUSH
24612: LD_VAR 0 1
24616: PPUSH
24617: CALL 24761 0 2
24621: GO 24604
24623: POP
24624: POP
24625: GO 24628
24627: POP
// end ;
24628: PPOPN 5
24630: END
// every 0 0$0.5 do var base , i ;
24631: GO 24633
24633: DISABLE
24634: LD_INT 0
24636: PPUSH
24637: PPUSH
// begin for base in ai_bases do
24638: LD_ADDR_VAR 0 1
24642: PUSH
24643: LD_EXP 25
24647: PUSH
24648: FOR_IN
24649: IFFALSE 24755
// begin for i in ai_implosion_vehicles [ base ] do
24651: LD_ADDR_VAR 0 2
24655: PUSH
24656: LD_EXP 84
24660: PUSH
24661: LD_VAR 0 1
24665: ARRAY
24666: PUSH
24667: FOR_IN
24668: IFFALSE 24700
// if IsDead ( i ) then
24670: LD_VAR 0 2
24674: PPUSH
24675: CALL_OW 301
24679: IFFALSE 24698
// RemoveVehicleFromVariables ( base , i , true ) ;
24681: LD_VAR 0 1
24685: PPUSH
24686: LD_VAR 0 2
24690: PPUSH
24691: LD_INT 1
24693: PPUSH
24694: CALL 24969 0 3
24698: GO 24667
24700: POP
24701: POP
// for i in ai_vehicles_attack [ base ] do
24702: LD_ADDR_VAR 0 2
24706: PUSH
24707: LD_EXP 50
24711: PUSH
24712: LD_VAR 0 1
24716: ARRAY
24717: PUSH
24718: FOR_IN
24719: IFFALSE 24751
// if IsDead ( i ) then
24721: LD_VAR 0 2
24725: PPUSH
24726: CALL_OW 301
24730: IFFALSE 24749
// RemoveVehicleFromVariables ( base , i , true ) ;
24732: LD_VAR 0 1
24736: PPUSH
24737: LD_VAR 0 2
24741: PPUSH
24742: LD_INT 1
24744: PPUSH
24745: CALL 24969 0 3
24749: GO 24718
24751: POP
24752: POP
// end ;
24753: GO 24648
24755: POP
24756: POP
// enable ;
24757: ENABLE
// end ;
24758: PPOPN 2
24760: END
// export function RemoveBuildingFromVariables ( base , building ) ; var temp_list ; begin
24761: LD_INT 0
24763: PPUSH
24764: PPUSH
// temp_list = ai_all_buildings [ base ] diff building ;
24765: LD_ADDR_VAR 0 4
24769: PUSH
24770: LD_EXP 58
24774: PUSH
24775: LD_VAR 0 1
24779: ARRAY
24780: PUSH
24781: LD_VAR 0 2
24785: DIFF
24786: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
24787: LD_ADDR_EXP 58
24791: PUSH
24792: LD_EXP 58
24796: PPUSH
24797: LD_VAR 0 1
24801: PPUSH
24802: LD_VAR 0 4
24806: PPUSH
24807: CALL_OW 1
24811: ST_TO_ADDR
// temp_list = ai_excepted_buildings [ base ] diff building ;
24812: LD_ADDR_VAR 0 4
24816: PUSH
24817: LD_EXP 77
24821: PUSH
24822: LD_VAR 0 1
24826: ARRAY
24827: PUSH
24828: LD_VAR 0 2
24832: DIFF
24833: ST_TO_ADDR
// ai_excepted_buildings = Replace ( ai_excepted_buildings , base , temp_list ) ;
24834: LD_ADDR_EXP 77
24838: PUSH
24839: LD_EXP 77
24843: PPUSH
24844: LD_VAR 0 1
24848: PPUSH
24849: LD_VAR 0 4
24853: PPUSH
24854: CALL_OW 1
24858: ST_TO_ADDR
// temp_list = ai_dismantle_these_buildings [ base ] diff building ;
24859: LD_ADDR_VAR 0 4
24863: PUSH
24864: LD_EXP 79
24868: PUSH
24869: LD_VAR 0 1
24873: ARRAY
24874: PUSH
24875: LD_VAR 0 2
24879: DIFF
24880: ST_TO_ADDR
// ai_dismantle_these_buildings = Replace ( ai_dismantle_these_buildings , base , temp_list ) ;
24881: LD_ADDR_EXP 79
24885: PUSH
24886: LD_EXP 79
24890: PPUSH
24891: LD_VAR 0 1
24895: PPUSH
24896: LD_VAR 0 4
24900: PPUSH
24901: CALL_OW 1
24905: ST_TO_ADDR
// if building = ai_building_under_construction [ base ] then
24906: LD_VAR 0 2
24910: PUSH
24911: LD_EXP 56
24915: PUSH
24916: LD_VAR 0 1
24920: ARRAY
24921: EQUAL
24922: IFFALSE 24947
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
24924: LD_ADDR_EXP 56
24928: PUSH
24929: LD_EXP 56
24933: PPUSH
24934: LD_VAR 0 1
24938: PPUSH
24939: LD_INT 0
24941: PPUSH
24942: CALL_OW 1
24946: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , false ) ;
24947: LD_VAR 0 1
24951: PPUSH
24952: LD_VAR 0 2
24956: PPUSH
24957: LD_INT 0
24959: PPUSH
24960: CALL 9147 0 3
// end ;
24964: LD_VAR 0 3
24968: RET
// function RemoveVehicleFromVariables ( base , vehicle , remove_from_export_import ) ; var temp_list ; begin
24969: LD_INT 0
24971: PPUSH
24972: PPUSH
// if vehicle in ai_vehicles_defend [ base ] then
24973: LD_VAR 0 2
24977: PUSH
24978: LD_EXP 49
24982: PUSH
24983: LD_VAR 0 1
24987: ARRAY
24988: IN
24989: IFFALSE 25038
// begin temp_list = ai_vehicles_defend [ base ] diff vehicle ;
24991: LD_ADDR_VAR 0 5
24995: PUSH
24996: LD_EXP 49
25000: PUSH
25001: LD_VAR 0 1
25005: ARRAY
25006: PUSH
25007: LD_VAR 0 2
25011: DIFF
25012: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
25013: LD_ADDR_EXP 49
25017: PUSH
25018: LD_EXP 49
25022: PPUSH
25023: LD_VAR 0 1
25027: PPUSH
25028: LD_VAR 0 5
25032: PPUSH
25033: CALL_OW 1
25037: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_attack [ base ] then
25038: LD_VAR 0 2
25042: PUSH
25043: LD_EXP 50
25047: PUSH
25048: LD_VAR 0 1
25052: ARRAY
25053: IN
25054: IFFALSE 25103
// begin temp_list = ai_vehicles_attack [ base ] diff vehicle ;
25056: LD_ADDR_VAR 0 5
25060: PUSH
25061: LD_EXP 50
25065: PUSH
25066: LD_VAR 0 1
25070: ARRAY
25071: PUSH
25072: LD_VAR 0 2
25076: DIFF
25077: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
25078: LD_ADDR_EXP 50
25082: PUSH
25083: LD_EXP 50
25087: PPUSH
25088: LD_VAR 0 1
25092: PPUSH
25093: LD_VAR 0 5
25097: PPUSH
25098: CALL_OW 1
25102: ST_TO_ADDR
// end ; if vehicle in ai_taufield_vehicles [ base ] then
25103: LD_VAR 0 2
25107: PUSH
25108: LD_EXP 83
25112: PUSH
25113: LD_VAR 0 1
25117: ARRAY
25118: IN
25119: IFFALSE 25168
// begin temp_list = ai_taufield_vehicles [ base ] diff vehicle ;
25121: LD_ADDR_VAR 0 5
25125: PUSH
25126: LD_EXP 83
25130: PUSH
25131: LD_VAR 0 1
25135: ARRAY
25136: PUSH
25137: LD_VAR 0 2
25141: DIFF
25142: ST_TO_ADDR
// ai_taufield_vehicles = Replace ( ai_taufield_vehicles , base , temp_list ) ;
25143: LD_ADDR_EXP 83
25147: PUSH
25148: LD_EXP 83
25152: PPUSH
25153: LD_VAR 0 1
25157: PPUSH
25158: LD_VAR 0 5
25162: PPUSH
25163: CALL_OW 1
25167: ST_TO_ADDR
// end ; if vehicle in ai_implosion_vehicles [ base ] then
25168: LD_VAR 0 2
25172: PUSH
25173: LD_EXP 84
25177: PUSH
25178: LD_VAR 0 1
25182: ARRAY
25183: IN
25184: IFFALSE 25233
// begin temp_list = ai_implosion_vehicles [ base ] diff vehicle ;
25186: LD_ADDR_VAR 0 5
25190: PUSH
25191: LD_EXP 84
25195: PUSH
25196: LD_VAR 0 1
25200: ARRAY
25201: PUSH
25202: LD_VAR 0 2
25206: DIFF
25207: ST_TO_ADDR
// ai_implosion_vehicles = Replace ( ai_implosion_vehicles , base , temp_list ) ;
25208: LD_ADDR_EXP 84
25212: PUSH
25213: LD_EXP 84
25217: PPUSH
25218: LD_VAR 0 1
25222: PPUSH
25223: LD_VAR 0 5
25227: PPUSH
25228: CALL_OW 1
25232: ST_TO_ADDR
// end ; if vehicle in ai_control_tower_vehicles [ base ] then
25233: LD_VAR 0 2
25237: PUSH
25238: LD_EXP 75
25242: PUSH
25243: LD_VAR 0 1
25247: ARRAY
25248: IN
25249: IFFALSE 25298
// begin temp_list = ai_control_tower_vehicles [ base ] diff vehicle ;
25251: LD_ADDR_VAR 0 5
25255: PUSH
25256: LD_EXP 75
25260: PUSH
25261: LD_VAR 0 1
25265: ARRAY
25266: PUSH
25267: LD_VAR 0 2
25271: DIFF
25272: ST_TO_ADDR
// ai_control_tower_vehicles = Replace ( ai_control_tower_vehicles , base , temp_list ) ;
25273: LD_ADDR_EXP 75
25277: PUSH
25278: LD_EXP 75
25282: PPUSH
25283: LD_VAR 0 1
25287: PPUSH
25288: LD_VAR 0 5
25292: PPUSH
25293: CALL_OW 1
25297: ST_TO_ADDR
// end ; if vehicle = ai_cargo_bay [ base ] then
25298: LD_VAR 0 2
25302: PUSH
25303: LD_EXP 65
25307: PUSH
25308: LD_VAR 0 1
25312: ARRAY
25313: EQUAL
25314: IFFALSE 25388
// begin ai_cargo_bay = Replace ( ai_cargo_bay , base , 0 ) ;
25316: LD_ADDR_EXP 65
25320: PUSH
25321: LD_EXP 65
25325: PPUSH
25326: LD_VAR 0 1
25330: PPUSH
25331: LD_INT 0
25333: PPUSH
25334: CALL_OW 1
25338: ST_TO_ADDR
// ai_cargo_bay_destroy_tick = Replace ( ai_cargo_bay_destroy_tick , base , tick ) ;
25339: LD_ADDR_EXP 67
25343: PUSH
25344: LD_EXP 67
25348: PPUSH
25349: LD_VAR 0 1
25353: PPUSH
25354: LD_OWVAR 1
25358: PPUSH
25359: CALL_OW 1
25363: ST_TO_ADDR
// if base = 3 then
25364: LD_VAR 0 1
25368: PUSH
25369: LD_INT 3
25371: EQUAL
25372: IFFALSE 25388
// num_farmer_cargo_bays_destroyed = num_farmer_cargo_bays_destroyed + 1 ;
25374: LD_ADDR_EXP 111
25378: PUSH
25379: LD_EXP 111
25383: PUSH
25384: LD_INT 1
25386: PLUS
25387: ST_TO_ADDR
// end ; if vehicle = ai_crane [ base ] then
25388: LD_VAR 0 2
25392: PUSH
25393: LD_EXP 68
25397: PUSH
25398: LD_VAR 0 1
25402: ARRAY
25403: EQUAL
25404: IFFALSE 25541
// begin ai_crane = Replace ( ai_crane , base , 0 ) ;
25406: LD_ADDR_EXP 68
25410: PUSH
25411: LD_EXP 68
25415: PPUSH
25416: LD_VAR 0 1
25420: PPUSH
25421: LD_INT 0
25423: PPUSH
25424: CALL_OW 1
25428: ST_TO_ADDR
// ai_crane_destroy_tick = Replace ( ai_crane_destroy_tick , base , tick ) ;
25429: LD_ADDR_EXP 70
25433: PUSH
25434: LD_EXP 70
25438: PPUSH
25439: LD_VAR 0 1
25443: PPUSH
25444: LD_OWVAR 1
25448: PPUSH
25449: CALL_OW 1
25453: ST_TO_ADDR
// ai_crane_driver = Replace ( ai_crane_driver , base , 0 ) ;
25454: LD_ADDR_EXP 72
25458: PUSH
25459: LD_EXP 72
25463: PPUSH
25464: LD_VAR 0 1
25468: PPUSH
25469: LD_INT 0
25471: PPUSH
25472: CALL_OW 1
25476: ST_TO_ADDR
// ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , false ) ;
25477: LD_ADDR_EXP 71
25481: PUSH
25482: LD_EXP 71
25486: PPUSH
25487: LD_VAR 0 1
25491: PPUSH
25492: LD_INT 0
25494: PPUSH
25495: CALL_OW 1
25499: ST_TO_ADDR
// if vehicle = ai_building_constructor [ base ] then
25500: LD_VAR 0 2
25504: PUSH
25505: LD_EXP 59
25509: PUSH
25510: LD_VAR 0 1
25514: ARRAY
25515: EQUAL
25516: IFFALSE 25541
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
25518: LD_ADDR_EXP 59
25522: PUSH
25523: LD_EXP 59
25527: PPUSH
25528: LD_VAR 0 1
25532: PPUSH
25533: LD_INT 0
25535: PPUSH
25536: CALL_OW 1
25540: ST_TO_ADDR
// end ; if vehicle in ai_retreating_vehicles_defend [ base ] then
25541: LD_VAR 0 2
25545: PUSH
25546: LD_EXP 51
25550: PUSH
25551: LD_VAR 0 1
25555: ARRAY
25556: IN
25557: IFFALSE 25606
// begin temp_list = ai_retreating_vehicles_defend [ base ] diff vehicle ;
25559: LD_ADDR_VAR 0 5
25563: PUSH
25564: LD_EXP 51
25568: PUSH
25569: LD_VAR 0 1
25573: ARRAY
25574: PUSH
25575: LD_VAR 0 2
25579: DIFF
25580: ST_TO_ADDR
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
25581: LD_ADDR_EXP 51
25585: PUSH
25586: LD_EXP 51
25590: PPUSH
25591: LD_VAR 0 1
25595: PPUSH
25596: LD_VAR 0 5
25600: PPUSH
25601: CALL_OW 1
25605: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_being_repaired [ base ] then
25606: LD_VAR 0 2
25610: PUSH
25611: LD_EXP 52
25615: PUSH
25616: LD_VAR 0 1
25620: ARRAY
25621: IN
25622: IFFALSE 25671
// begin temp_list = ai_vehicles_being_repaired [ base ] diff vehicle ;
25624: LD_ADDR_VAR 0 5
25628: PUSH
25629: LD_EXP 52
25633: PUSH
25634: LD_VAR 0 1
25638: ARRAY
25639: PUSH
25640: LD_VAR 0 2
25644: DIFF
25645: ST_TO_ADDR
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
25646: LD_ADDR_EXP 52
25650: PUSH
25651: LD_EXP 52
25655: PPUSH
25656: LD_VAR 0 1
25660: PPUSH
25661: LD_VAR 0 5
25665: PPUSH
25666: CALL_OW 1
25670: ST_TO_ADDR
// end ; if vehicle in ai_refuel_vehicles_list [ base ] then
25671: LD_VAR 0 2
25675: PUSH
25676: LD_EXP 53
25680: PUSH
25681: LD_VAR 0 1
25685: ARRAY
25686: IN
25687: IFFALSE 25736
// begin temp_list = ai_refuel_vehicles_list [ base ] diff vehicle ;
25689: LD_ADDR_VAR 0 5
25693: PUSH
25694: LD_EXP 53
25698: PUSH
25699: LD_VAR 0 1
25703: ARRAY
25704: PUSH
25705: LD_VAR 0 2
25709: DIFF
25710: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
25711: LD_ADDR_EXP 53
25715: PUSH
25716: LD_EXP 53
25720: PPUSH
25721: LD_VAR 0 1
25725: PPUSH
25726: LD_VAR 0 5
25730: PPUSH
25731: CALL_OW 1
25735: ST_TO_ADDR
// end ; if vehicle = ai_vehicle_being_moved [ base ] then
25736: LD_VAR 0 2
25740: PUSH
25741: LD_EXP 60
25745: PUSH
25746: LD_VAR 0 1
25750: ARRAY
25751: EQUAL
25752: IFFALSE 25777
// ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
25754: LD_ADDR_EXP 60
25758: PUSH
25759: LD_EXP 60
25763: PPUSH
25764: LD_VAR 0 1
25768: PPUSH
25769: LD_INT 0
25771: PPUSH
25772: CALL_OW 1
25776: ST_TO_ADDR
// if vehicle in ai_vehicles_having_been_moved [ base ] then
25777: LD_VAR 0 2
25781: PUSH
25782: LD_EXP 61
25786: PUSH
25787: LD_VAR 0 1
25791: ARRAY
25792: IN
25793: IFFALSE 25842
// begin temp_list = ai_vehicles_having_been_moved [ base ] diff vehicle ;
25795: LD_ADDR_VAR 0 5
25799: PUSH
25800: LD_EXP 61
25804: PUSH
25805: LD_VAR 0 1
25809: ARRAY
25810: PUSH
25811: LD_VAR 0 2
25815: DIFF
25816: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , temp_list ) ;
25817: LD_ADDR_EXP 61
25821: PUSH
25822: LD_EXP 61
25826: PPUSH
25827: LD_VAR 0 1
25831: PPUSH
25832: LD_VAR 0 5
25836: PPUSH
25837: CALL_OW 1
25841: ST_TO_ADDR
// end ; if remove_from_export_import then
25842: LD_VAR 0 3
25846: IFFALSE 25862
// RemoveUnitFromExportImport ( base , vehicle ) ;
25848: LD_VAR 0 1
25852: PPUSH
25853: LD_VAR 0 2
25857: PPUSH
25858: CALL 26810 0 2
// end ;
25862: LD_VAR 0 4
25866: RET
// export function RemoveHumanFromVariables ( base , human , check_if_base_is_dead , remove_from_export_import ) ; var temp_list , i ; begin
25867: LD_INT 0
25869: PPUSH
25870: PPUSH
25871: PPUSH
// if human in ai_soldiers [ base ] then
25872: LD_VAR 0 2
25876: PUSH
25877: LD_EXP 26
25881: PUSH
25882: LD_VAR 0 1
25886: ARRAY
25887: IN
25888: IFFALSE 25937
// begin temp_list = ai_soldiers [ base ] diff human ;
25890: LD_ADDR_VAR 0 6
25894: PUSH
25895: LD_EXP 26
25899: PUSH
25900: LD_VAR 0 1
25904: ARRAY
25905: PUSH
25906: LD_VAR 0 2
25910: DIFF
25911: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
25912: LD_ADDR_EXP 26
25916: PUSH
25917: LD_EXP 26
25921: PPUSH
25922: LD_VAR 0 1
25926: PPUSH
25927: LD_VAR 0 6
25931: PPUSH
25932: CALL_OW 1
25936: ST_TO_ADDR
// end ; if human in ai_attacking_soldiers [ base ] then
25937: LD_VAR 0 2
25941: PUSH
25942: LD_EXP 27
25946: PUSH
25947: LD_VAR 0 1
25951: ARRAY
25952: IN
25953: IFFALSE 26002
// begin temp_list = ai_attacking_soldiers [ base ] diff human ;
25955: LD_ADDR_VAR 0 6
25959: PUSH
25960: LD_EXP 27
25964: PUSH
25965: LD_VAR 0 1
25969: ARRAY
25970: PUSH
25971: LD_VAR 0 2
25975: DIFF
25976: ST_TO_ADDR
// ai_attacking_soldiers = Replace ( ai_attacking_soldiers , base , temp_list ) ;
25977: LD_ADDR_EXP 27
25981: PUSH
25982: LD_EXP 27
25986: PPUSH
25987: LD_VAR 0 1
25991: PPUSH
25992: LD_VAR 0 6
25996: PPUSH
25997: CALL_OW 1
26001: ST_TO_ADDR
// end ; if human in ai_engineers [ base ] then
26002: LD_VAR 0 2
26006: PUSH
26007: LD_EXP 28
26011: PUSH
26012: LD_VAR 0 1
26016: ARRAY
26017: IN
26018: IFFALSE 26067
// begin temp_list = ai_engineers [ base ] diff human ;
26020: LD_ADDR_VAR 0 6
26024: PUSH
26025: LD_EXP 28
26029: PUSH
26030: LD_VAR 0 1
26034: ARRAY
26035: PUSH
26036: LD_VAR 0 2
26040: DIFF
26041: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , base , temp_list ) ;
26042: LD_ADDR_EXP 28
26046: PUSH
26047: LD_EXP 28
26051: PPUSH
26052: LD_VAR 0 1
26056: PPUSH
26057: LD_VAR 0 6
26061: PPUSH
26062: CALL_OW 1
26066: ST_TO_ADDR
// end ; if human in ai_apemen_engineers [ base ] then
26067: LD_VAR 0 2
26071: PUSH
26072: LD_EXP 33
26076: PUSH
26077: LD_VAR 0 1
26081: ARRAY
26082: IN
26083: IFFALSE 26132
// begin temp_list = ai_apemen_engineers [ base ] diff human ;
26085: LD_ADDR_VAR 0 6
26089: PUSH
26090: LD_EXP 33
26094: PUSH
26095: LD_VAR 0 1
26099: ARRAY
26100: PUSH
26101: LD_VAR 0 2
26105: DIFF
26106: ST_TO_ADDR
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , temp_list ) ;
26107: LD_ADDR_EXP 33
26111: PUSH
26112: LD_EXP 33
26116: PPUSH
26117: LD_VAR 0 1
26121: PPUSH
26122: LD_VAR 0 6
26126: PPUSH
26127: CALL_OW 1
26131: ST_TO_ADDR
// end ; if human in ai_mechanics_defend [ base ] then
26132: LD_VAR 0 2
26136: PUSH
26137: LD_EXP 29
26141: PUSH
26142: LD_VAR 0 1
26146: ARRAY
26147: IN
26148: IFFALSE 26197
// begin temp_list = ai_mechanics_defend [ base ] diff human ;
26150: LD_ADDR_VAR 0 6
26154: PUSH
26155: LD_EXP 29
26159: PUSH
26160: LD_VAR 0 1
26164: ARRAY
26165: PUSH
26166: LD_VAR 0 2
26170: DIFF
26171: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , temp_list ) ;
26172: LD_ADDR_EXP 29
26176: PUSH
26177: LD_EXP 29
26181: PPUSH
26182: LD_VAR 0 1
26186: PPUSH
26187: LD_VAR 0 6
26191: PPUSH
26192: CALL_OW 1
26196: ST_TO_ADDR
// end ; if human in ai_mechanics_attack [ base ] then
26197: LD_VAR 0 2
26201: PUSH
26202: LD_EXP 30
26206: PUSH
26207: LD_VAR 0 1
26211: ARRAY
26212: IN
26213: IFFALSE 26262
// begin temp_list = ai_mechanics_attack [ base ] diff human ;
26215: LD_ADDR_VAR 0 6
26219: PUSH
26220: LD_EXP 30
26224: PUSH
26225: LD_VAR 0 1
26229: ARRAY
26230: PUSH
26231: LD_VAR 0 2
26235: DIFF
26236: ST_TO_ADDR
// ai_mechanics_attack = Replace ( ai_mechanics_attack , base , temp_list ) ;
26237: LD_ADDR_EXP 30
26241: PUSH
26242: LD_EXP 30
26246: PPUSH
26247: LD_VAR 0 1
26251: PPUSH
26252: LD_VAR 0 6
26256: PPUSH
26257: CALL_OW 1
26261: ST_TO_ADDR
// end ; if human in ai_scientists [ base ] then
26262: LD_VAR 0 2
26266: PUSH
26267: LD_EXP 31
26271: PUSH
26272: LD_VAR 0 1
26276: ARRAY
26277: IN
26278: IFFALSE 26327
// begin temp_list = ai_scientists [ base ] diff human ;
26280: LD_ADDR_VAR 0 6
26284: PUSH
26285: LD_EXP 31
26289: PUSH
26290: LD_VAR 0 1
26294: ARRAY
26295: PUSH
26296: LD_VAR 0 2
26300: DIFF
26301: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , temp_list ) ;
26302: LD_ADDR_EXP 31
26306: PUSH
26307: LD_EXP 31
26311: PPUSH
26312: LD_VAR 0 1
26316: PPUSH
26317: LD_VAR 0 6
26321: PPUSH
26322: CALL_OW 1
26326: ST_TO_ADDR
// end ; if human in ai_attacking_scientists [ base ] then
26327: LD_VAR 0 2
26331: PUSH
26332: LD_EXP 32
26336: PUSH
26337: LD_VAR 0 1
26341: ARRAY
26342: IN
26343: IFFALSE 26392
// begin temp_list = ai_attacking_scientists [ base ] diff human ;
26345: LD_ADDR_VAR 0 6
26349: PUSH
26350: LD_EXP 32
26354: PUSH
26355: LD_VAR 0 1
26359: ARRAY
26360: PUSH
26361: LD_VAR 0 2
26365: DIFF
26366: ST_TO_ADDR
// ai_attacking_scientists = Replace ( ai_attacking_scientists , base , temp_list ) ;
26367: LD_ADDR_EXP 32
26371: PUSH
26372: LD_EXP 32
26376: PPUSH
26377: LD_VAR 0 1
26381: PPUSH
26382: LD_VAR 0 6
26386: PPUSH
26387: CALL_OW 1
26391: ST_TO_ADDR
// end ; if human in ai_heal_these_humans [ base ] then
26392: LD_VAR 0 2
26396: PUSH
26397: LD_EXP 57
26401: PUSH
26402: LD_VAR 0 1
26406: ARRAY
26407: IN
26408: IFFALSE 26457
// begin temp_list = ai_heal_these_humans [ base ] diff human ;
26410: LD_ADDR_VAR 0 6
26414: PUSH
26415: LD_EXP 57
26419: PUSH
26420: LD_VAR 0 1
26424: ARRAY
26425: PUSH
26426: LD_VAR 0 2
26430: DIFF
26431: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
26432: LD_ADDR_EXP 57
26436: PUSH
26437: LD_EXP 57
26441: PPUSH
26442: LD_VAR 0 1
26446: PPUSH
26447: LD_VAR 0 6
26451: PPUSH
26452: CALL_OW 1
26456: ST_TO_ADDR
// end ; if human = ai_building_constructor [ base ] then
26457: LD_VAR 0 2
26461: PUSH
26462: LD_EXP 59
26466: PUSH
26467: LD_VAR 0 1
26471: ARRAY
26472: EQUAL
26473: IFFALSE 26498
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
26475: LD_ADDR_EXP 59
26479: PUSH
26480: LD_EXP 59
26484: PPUSH
26485: LD_VAR 0 1
26489: PPUSH
26490: LD_INT 0
26492: PPUSH
26493: CALL_OW 1
26497: ST_TO_ADDR
// if human in ai_retreating_attacking_humans [ base ] then
26498: LD_VAR 0 2
26502: PUSH
26503: LD_EXP 74
26507: PUSH
26508: LD_VAR 0 1
26512: ARRAY
26513: IN
26514: IFFALSE 26563
// begin temp_list = ai_retreating_attacking_humans [ base ] diff human ;
26516: LD_ADDR_VAR 0 6
26520: PUSH
26521: LD_EXP 74
26525: PUSH
26526: LD_VAR 0 1
26530: ARRAY
26531: PUSH
26532: LD_VAR 0 2
26536: DIFF
26537: ST_TO_ADDR
// ai_retreating_attacking_humans = Replace ( ai_retreating_attacking_humans , base , temp_list ) ;
26538: LD_ADDR_EXP 74
26542: PUSH
26543: LD_EXP 74
26547: PPUSH
26548: LD_VAR 0 1
26552: PPUSH
26553: LD_VAR 0 6
26557: PPUSH
26558: CALL_OW 1
26562: ST_TO_ADDR
// end ; if human = ai_crane_driver [ base ] then
26563: LD_VAR 0 2
26567: PUSH
26568: LD_EXP 72
26572: PUSH
26573: LD_VAR 0 1
26577: ARRAY
26578: EQUAL
26579: IFFALSE 26604
// ai_crane_driver = Replace ( ai_crane_driver , base , 0 ) ;
26581: LD_ADDR_EXP 72
26585: PUSH
26586: LD_EXP 72
26590: PPUSH
26591: LD_VAR 0 1
26595: PPUSH
26596: LD_INT 0
26598: PPUSH
26599: CALL_OW 1
26603: ST_TO_ADDR
// if remove_from_export_import then
26604: LD_VAR 0 4
26608: IFFALSE 26624
// RemoveUnitFromExportImport ( base , human ) ;
26610: LD_VAR 0 1
26614: PPUSH
26615: LD_VAR 0 2
26619: PPUSH
26620: CALL 26810 0 2
// if check_if_base_is_dead then
26624: LD_VAR 0 3
26628: IFFALSE 26805
// if ( ( ai_soldiers [ base ] ^ ai_attacking_soldiers [ base ] ^ ai_engineers [ base ] ^ ai_apemen_engineers [ base ] ^ ai_mechanics_defend [ base ] ^ ai_mechanics_attack [ base ] ^ ai_scientists [ base ] ^ ai_attacking_scientists [ base ] ) diff 0 ) = 0 then
26630: LD_EXP 26
26634: PUSH
26635: LD_VAR 0 1
26639: ARRAY
26640: PUSH
26641: LD_EXP 27
26645: PUSH
26646: LD_VAR 0 1
26650: ARRAY
26651: ADD
26652: PUSH
26653: LD_EXP 28
26657: PUSH
26658: LD_VAR 0 1
26662: ARRAY
26663: ADD
26664: PUSH
26665: LD_EXP 33
26669: PUSH
26670: LD_VAR 0 1
26674: ARRAY
26675: ADD
26676: PUSH
26677: LD_EXP 29
26681: PUSH
26682: LD_VAR 0 1
26686: ARRAY
26687: ADD
26688: PUSH
26689: LD_EXP 30
26693: PUSH
26694: LD_VAR 0 1
26698: ARRAY
26699: ADD
26700: PUSH
26701: LD_EXP 31
26705: PUSH
26706: LD_VAR 0 1
26710: ARRAY
26711: ADD
26712: PUSH
26713: LD_EXP 32
26717: PUSH
26718: LD_VAR 0 1
26722: ARRAY
26723: ADD
26724: PUSH
26725: LD_INT 0
26727: DIFF
26728: PUSH
26729: LD_INT 0
26731: EQUAL
26732: IFFALSE 26805
// begin for i in ai_imported_units [ base ] do
26734: LD_ADDR_VAR 0 7
26738: PUSH
26739: LD_EXP 82
26743: PUSH
26744: LD_VAR 0 1
26748: ARRAY
26749: PUSH
26750: FOR_IN
26751: IFFALSE 26769
// RemoveUnitFromExportImport ( base , i ) ;
26753: LD_VAR 0 1
26757: PPUSH
26758: LD_VAR 0 7
26762: PPUSH
26763: CALL 26810 0 2
26767: GO 26750
26769: POP
26770: POP
// if base = 3 then
26771: LD_VAR 0 1
26775: PUSH
26776: LD_INT 3
26778: EQUAL
26779: IFFALSE 26789
// farmer_attack_anyway_phase = 0 ;
26781: LD_ADDR_EXP 121
26785: PUSH
26786: LD_INT 0
26788: ST_TO_ADDR
// ai_bases = ai_bases diff base ;
26789: LD_ADDR_EXP 25
26793: PUSH
26794: LD_EXP 25
26798: PUSH
26799: LD_VAR 0 1
26803: DIFF
26804: ST_TO_ADDR
// end ; end ;
26805: LD_VAR 0 5
26809: RET
// export function RemoveUnitFromExportImport ( base , un ) ; var i , temp_list ; begin
26810: LD_INT 0
26812: PPUSH
26813: PPUSH
26814: PPUSH
// if un in ai_units_to_export [ base ] then
26815: LD_VAR 0 2
26819: PUSH
26820: LD_EXP 80
26824: PUSH
26825: LD_VAR 0 1
26829: ARRAY
26830: IN
26831: IFFALSE 26880
// begin temp_list = ai_units_to_export [ base ] diff un ;
26833: LD_ADDR_VAR 0 5
26837: PUSH
26838: LD_EXP 80
26842: PUSH
26843: LD_VAR 0 1
26847: ARRAY
26848: PUSH
26849: LD_VAR 0 2
26853: DIFF
26854: ST_TO_ADDR
// ai_units_to_export = Replace ( ai_units_to_export , base , temp_list ) ;
26855: LD_ADDR_EXP 80
26859: PUSH
26860: LD_EXP 80
26864: PPUSH
26865: LD_VAR 0 1
26869: PPUSH
26870: LD_VAR 0 5
26874: PPUSH
26875: CALL_OW 1
26879: ST_TO_ADDR
// end ; if un in ai_imported_units [ base ] then
26880: LD_VAR 0 2
26884: PUSH
26885: LD_EXP 82
26889: PUSH
26890: LD_VAR 0 1
26894: ARRAY
26895: IN
26896: IFFALSE 26945
// begin temp_list = ai_imported_units [ base ] diff un ;
26898: LD_ADDR_VAR 0 5
26902: PUSH
26903: LD_EXP 82
26907: PUSH
26908: LD_VAR 0 1
26912: ARRAY
26913: PUSH
26914: LD_VAR 0 2
26918: DIFF
26919: ST_TO_ADDR
// ai_imported_units = Replace ( ai_imported_units , base , temp_list ) ;
26920: LD_ADDR_EXP 82
26924: PUSH
26925: LD_EXP 82
26929: PPUSH
26930: LD_VAR 0 1
26934: PPUSH
26935: LD_VAR 0 5
26939: PPUSH
26940: CALL_OW 1
26944: ST_TO_ADDR
// end ; for i in ai_bases do
26945: LD_ADDR_VAR 0 4
26949: PUSH
26950: LD_EXP 25
26954: PUSH
26955: FOR_IN
26956: IFFALSE 27025
// begin if un in ai_exported_units [ i ] then
26958: LD_VAR 0 2
26962: PUSH
26963: LD_EXP 81
26967: PUSH
26968: LD_VAR 0 4
26972: ARRAY
26973: IN
26974: IFFALSE 27023
// begin temp_list = ai_exported_units [ i ] diff un ;
26976: LD_ADDR_VAR 0 5
26980: PUSH
26981: LD_EXP 81
26985: PUSH
26986: LD_VAR 0 4
26990: ARRAY
26991: PUSH
26992: LD_VAR 0 2
26996: DIFF
26997: ST_TO_ADDR
// ai_exported_units = Replace ( ai_exported_units , i , temp_list ) ;
26998: LD_ADDR_EXP 81
27002: PUSH
27003: LD_EXP 81
27007: PPUSH
27008: LD_VAR 0 4
27012: PPUSH
27013: LD_VAR 0 5
27017: PPUSH
27018: CALL_OW 1
27022: ST_TO_ADDR
// end ; end ;
27023: GO 26955
27025: POP
27026: POP
// end ;
27027: LD_VAR 0 3
27031: RET
// export function GetBaseArea ( base ) ; begin
27032: LD_INT 0
27034: PPUSH
// case base of 1 :
27035: LD_VAR 0 1
27039: PUSH
27040: LD_INT 1
27042: DOUBLE
27043: EQUAL
27044: IFTRUE 27048
27046: GO 27059
27048: POP
// result = Ru_base ; 2 :
27049: LD_ADDR_VAR 0 2
27053: PUSH
27054: LD_INT 1
27056: ST_TO_ADDR
27057: GO 27098
27059: LD_INT 2
27061: DOUBLE
27062: EQUAL
27063: IFTRUE 27067
27065: GO 27078
27067: POP
// result = Ru_small_base ; 3 :
27068: LD_ADDR_VAR 0 2
27072: PUSH
27073: LD_INT 2
27075: ST_TO_ADDR
27076: GO 27098
27078: LD_INT 3
27080: DOUBLE
27081: EQUAL
27082: IFTRUE 27086
27084: GO 27097
27086: POP
// result = Farmer_base ; end ;
27087: LD_ADDR_VAR 0 2
27091: PUSH
27092: LD_INT 9
27094: ST_TO_ADDR
27095: GO 27098
27097: POP
// end ;
27098: LD_VAR 0 2
27102: RET
// export function GetBaseSide ( base ) ; begin
27103: LD_INT 0
27105: PPUSH
// case base of 1 :
27106: LD_VAR 0 1
27110: PUSH
27111: LD_INT 1
27113: DOUBLE
27114: EQUAL
27115: IFTRUE 27119
27117: GO 27132
27119: POP
// result = russians ; 2 :
27120: LD_ADDR_VAR 0 2
27124: PUSH
27125: LD_EXP 3
27129: ST_TO_ADDR
27130: GO 27175
27132: LD_INT 2
27134: DOUBLE
27135: EQUAL
27136: IFTRUE 27140
27138: GO 27153
27140: POP
// result = russians ; 3 :
27141: LD_ADDR_VAR 0 2
27145: PUSH
27146: LD_EXP 3
27150: ST_TO_ADDR
27151: GO 27175
27153: LD_INT 3
27155: DOUBLE
27156: EQUAL
27157: IFTRUE 27161
27159: GO 27174
27161: POP
// result = farmer_side ; end ;
27162: LD_ADDR_VAR 0 2
27166: PUSH
27167: LD_EXP 6
27171: ST_TO_ADDR
27172: GO 27175
27174: POP
// end ;
27175: LD_VAR 0 2
27179: RET
// function GetBaseNation ( base ) ; begin
27180: LD_INT 0
27182: PPUSH
// case base of 1 :
27183: LD_VAR 0 1
27187: PUSH
27188: LD_INT 1
27190: DOUBLE
27191: EQUAL
27192: IFTRUE 27196
27194: GO 27207
27196: POP
// result = nation_russian ; 2 :
27197: LD_ADDR_VAR 0 2
27201: PUSH
27202: LD_INT 3
27204: ST_TO_ADDR
27205: GO 27246
27207: LD_INT 2
27209: DOUBLE
27210: EQUAL
27211: IFTRUE 27215
27213: GO 27226
27215: POP
// result = nation_russian ; 3 :
27216: LD_ADDR_VAR 0 2
27220: PUSH
27221: LD_INT 3
27223: ST_TO_ADDR
27224: GO 27246
27226: LD_INT 3
27228: DOUBLE
27229: EQUAL
27230: IFTRUE 27234
27232: GO 27245
27234: POP
// result = nation_arabian ; end ;
27235: LD_ADDR_VAR 0 2
27239: PUSH
27240: LD_INT 2
27242: ST_TO_ADDR
27243: GO 27246
27245: POP
// end ;
27246: LD_VAR 0 2
27250: RET
// function FindBase ( un ) ; var base ; begin
27251: LD_INT 0
27253: PPUSH
27254: PPUSH
// result = 0 ;
27255: LD_ADDR_VAR 0 2
27259: PUSH
27260: LD_INT 0
27262: ST_TO_ADDR
// for base in ai_bases do
27263: LD_ADDR_VAR 0 3
27267: PUSH
27268: LD_EXP 25
27272: PUSH
27273: FOR_IN
27274: IFFALSE 27313
// if IsInArea ( un , GetBaseArea ( base ) ) then
27276: LD_VAR 0 1
27280: PPUSH
27281: LD_VAR 0 3
27285: PPUSH
27286: CALL 27032 0 1
27290: PPUSH
27291: CALL_OW 308
27295: IFFALSE 27311
// begin result = base ;
27297: LD_ADDR_VAR 0 2
27301: PUSH
27302: LD_VAR 0 3
27306: ST_TO_ADDR
// exit ;
27307: POP
27308: POP
27309: GO 27315
// end ;
27311: GO 27273
27313: POP
27314: POP
// end ;
27315: LD_VAR 0 2
27319: RET
// every 0 0$1 + 0 0$0.3 do
27320: GO 27322
27322: DISABLE
// begin repeat wait ( 0 0$1 ) ;
27323: LD_INT 35
27325: PPUSH
27326: CALL_OW 67
// if ai_teleporter [ 1 ] > 0 and not ai_teleporter_exit_placed [ 1 ] then
27330: LD_EXP 46
27334: PUSH
27335: LD_INT 1
27337: ARRAY
27338: PUSH
27339: LD_INT 0
27341: GREATER
27342: PUSH
27343: LD_EXP 76
27347: PUSH
27348: LD_INT 1
27350: ARRAY
27351: NOT
27352: AND
27353: IFFALSE 27417
// if TeleportExit ( ai_teleporter [ 1 ] , ai_human_pullback_hex [ 3 ] [ 1 ] , ai_human_pullback_hex [ 3 ] [ 2 ] ) then
27355: LD_EXP 46
27359: PUSH
27360: LD_INT 1
27362: ARRAY
27363: PPUSH
27364: LD_EXP 55
27368: PUSH
27369: LD_INT 3
27371: ARRAY
27372: PUSH
27373: LD_INT 1
27375: ARRAY
27376: PPUSH
27377: LD_EXP 55
27381: PUSH
27382: LD_INT 3
27384: ARRAY
27385: PUSH
27386: LD_INT 2
27388: ARRAY
27389: PPUSH
27390: CALL_OW 243
27394: IFFALSE 27417
// ai_teleporter_exit_placed = Replace ( ai_teleporter_exit_placed , 1 , true ) ;
27396: LD_ADDR_EXP 76
27400: PUSH
27401: LD_EXP 76
27405: PPUSH
27406: LD_INT 1
27408: PPUSH
27409: LD_INT 1
27411: PPUSH
27412: CALL_OW 1
27416: ST_TO_ADDR
// if ai_teleporter [ 3 ] > 0 and not ai_teleporter_exit_placed [ 3 ] then
27417: LD_EXP 46
27421: PUSH
27422: LD_INT 3
27424: ARRAY
27425: PUSH
27426: LD_INT 0
27428: GREATER
27429: PUSH
27430: LD_EXP 76
27434: PUSH
27435: LD_INT 3
27437: ARRAY
27438: NOT
27439: AND
27440: IFFALSE 27484
// if TeleportExit ( ai_teleporter [ 3 ] , 52 , 74 ) then
27442: LD_EXP 46
27446: PUSH
27447: LD_INT 3
27449: ARRAY
27450: PPUSH
27451: LD_INT 52
27453: PPUSH
27454: LD_INT 74
27456: PPUSH
27457: CALL_OW 243
27461: IFFALSE 27484
// ai_teleporter_exit_placed = Replace ( ai_teleporter_exit_placed , 3 , true ) ;
27463: LD_ADDR_EXP 76
27467: PUSH
27468: LD_EXP 76
27472: PPUSH
27473: LD_INT 3
27475: PPUSH
27476: LD_INT 1
27478: PPUSH
27479: CALL_OW 1
27483: ST_TO_ADDR
// until false ;
27484: LD_INT 0
27486: IFFALSE 27323
// end ;
27488: END
// every 0 0$1 do var num , i , vehicles_list , temp_list , temp_list_2 ; var not_under_attack_count , rus_base , farm_base ;
27489: GO 27491
27491: DISABLE
27492: LD_INT 0
27494: PPUSH
27495: PPUSH
27496: PPUSH
27497: PPUSH
27498: PPUSH
27499: PPUSH
27500: PPUSH
27501: PPUSH
// begin rus_base = 1 ;
27502: LD_ADDR_VAR 0 7
27506: PUSH
27507: LD_INT 1
27509: ST_TO_ADDR
// farm_base = 3 ;
27510: LD_ADDR_VAR 0 8
27514: PUSH
27515: LD_INT 3
27517: ST_TO_ADDR
// not_under_attack_count = 0 ;
27518: LD_ADDR_VAR 0 6
27522: PUSH
27523: LD_INT 0
27525: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
27526: LD_INT 35
27528: PPUSH
27529: CALL_OW 67
// if not rus_base in ai_bases or not farm_base in ai_bases or ( ai_teleporter [ farm_base ] = 0 and ai_imported_units [ rus_base ] = 0 ) then
27533: LD_VAR 0 7
27537: PUSH
27538: LD_EXP 25
27542: IN
27543: NOT
27544: PUSH
27545: LD_VAR 0 8
27549: PUSH
27550: LD_EXP 25
27554: IN
27555: NOT
27556: OR
27557: PUSH
27558: LD_EXP 46
27562: PUSH
27563: LD_VAR 0 8
27567: ARRAY
27568: PUSH
27569: LD_INT 0
27571: EQUAL
27572: PUSH
27573: LD_EXP 82
27577: PUSH
27578: LD_VAR 0 7
27582: ARRAY
27583: PUSH
27584: LD_INT 0
27586: EQUAL
27587: AND
27588: OR
27589: IFFALSE 27861
// begin for i in [ rus_base , farm_base ] do
27591: LD_ADDR_VAR 0 2
27595: PUSH
27596: LD_VAR 0 7
27600: PUSH
27601: LD_VAR 0 8
27605: PUSH
27606: EMPTY
27607: LIST
27608: LIST
27609: PUSH
27610: FOR_IN
27611: IFFALSE 27857
// begin temp_list_2 = UnitFilter ( ai_exported_units [ i ] ^ ai_units_to_export [ i ] , war_vehicle_filter ) ;
27613: LD_ADDR_VAR 0 5
27617: PUSH
27618: LD_EXP 81
27622: PUSH
27623: LD_VAR 0 2
27627: ARRAY
27628: PUSH
27629: LD_EXP 80
27633: PUSH
27634: LD_VAR 0 2
27638: ARRAY
27639: ADD
27640: PPUSH
27641: LD_EXP 117
27645: PPUSH
27646: CALL_OW 72
27650: ST_TO_ADDR
// temp_list = ai_vehicles_defend [ i ] ^ temp_list_2 ;
27651: LD_ADDR_VAR 0 4
27655: PUSH
27656: LD_EXP 49
27660: PUSH
27661: LD_VAR 0 2
27665: ARRAY
27666: PUSH
27667: LD_VAR 0 5
27671: ADD
27672: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , i , temp_list ) ;
27673: LD_ADDR_EXP 49
27677: PUSH
27678: LD_EXP 49
27682: PPUSH
27683: LD_VAR 0 2
27687: PPUSH
27688: LD_VAR 0 4
27692: PPUSH
27693: CALL_OW 1
27697: ST_TO_ADDR
// temp_list = ai_exported_units [ i ] diff temp_list_2 ;
27698: LD_ADDR_VAR 0 4
27702: PUSH
27703: LD_EXP 81
27707: PUSH
27708: LD_VAR 0 2
27712: ARRAY
27713: PUSH
27714: LD_VAR 0 5
27718: DIFF
27719: ST_TO_ADDR
// ai_exported_units = Replace ( ai_exported_units , i , temp_list ) ;
27720: LD_ADDR_EXP 81
27724: PUSH
27725: LD_EXP 81
27729: PPUSH
27730: LD_VAR 0 2
27734: PPUSH
27735: LD_VAR 0 4
27739: PPUSH
27740: CALL_OW 1
27744: ST_TO_ADDR
// temp_list = ai_units_to_export [ i ] diff temp_list_2 ;
27745: LD_ADDR_VAR 0 4
27749: PUSH
27750: LD_EXP 80
27754: PUSH
27755: LD_VAR 0 2
27759: ARRAY
27760: PUSH
27761: LD_VAR 0 5
27765: DIFF
27766: ST_TO_ADDR
// ai_units_to_export = Replace ( ai_units_to_export , i , temp_list ) ;
27767: LD_ADDR_EXP 80
27771: PUSH
27772: LD_EXP 80
27776: PPUSH
27777: LD_VAR 0 2
27781: PPUSH
27782: LD_VAR 0 4
27786: PPUSH
27787: CALL_OW 1
27791: ST_TO_ADDR
// temp_list = ai_imported_units [ i ] diff UnitFilter ( ai_imported_units [ i ] , war_vehicle_filter ) ;
27792: LD_ADDR_VAR 0 4
27796: PUSH
27797: LD_EXP 82
27801: PUSH
27802: LD_VAR 0 2
27806: ARRAY
27807: PUSH
27808: LD_EXP 82
27812: PUSH
27813: LD_VAR 0 2
27817: ARRAY
27818: PPUSH
27819: LD_EXP 117
27823: PPUSH
27824: CALL_OW 72
27828: DIFF
27829: ST_TO_ADDR
// ai_imported_units = Replace ( ai_imported_units , i , temp_list ) ;
27830: LD_ADDR_EXP 82
27834: PUSH
27835: LD_EXP 82
27839: PPUSH
27840: LD_VAR 0 2
27844: PPUSH
27845: LD_VAR 0 4
27849: PPUSH
27850: CALL_OW 1
27854: ST_TO_ADDR
// end ;
27855: GO 27610
27857: POP
27858: POP
// exit ;
27859: GO 28593
// end ; for i in [ rus_base , farm_base ] do
27861: LD_ADDR_VAR 0 2
27865: PUSH
27866: LD_VAR 0 7
27870: PUSH
27871: LD_VAR 0 8
27875: PUSH
27876: EMPTY
27877: LIST
27878: LIST
27879: PUSH
27880: FOR_IN
27881: IFFALSE 28033
// begin if not IsOk ( ai_teleporter [ i ] ) then
27883: LD_EXP 46
27887: PUSH
27888: LD_VAR 0 2
27892: ARRAY
27893: PPUSH
27894: CALL_OW 302
27898: NOT
27899: IFFALSE 28031
// begin temp_list = UnitFilter ( ai_units_to_export [ i ] , war_vehicle_filter ) ;
27901: LD_ADDR_VAR 0 4
27905: PUSH
27906: LD_EXP 80
27910: PUSH
27911: LD_VAR 0 2
27915: ARRAY
27916: PPUSH
27917: LD_EXP 117
27921: PPUSH
27922: CALL_OW 72
27926: ST_TO_ADDR
// if temp_list > 0 then
27927: LD_VAR 0 4
27931: PUSH
27932: LD_INT 0
27934: GREATER
27935: IFFALSE 28031
// begin temp_list_2 = ai_vehicles_defend [ i ] ^ temp_list ;
27937: LD_ADDR_VAR 0 5
27941: PUSH
27942: LD_EXP 49
27946: PUSH
27947: LD_VAR 0 2
27951: ARRAY
27952: PUSH
27953: LD_VAR 0 4
27957: ADD
27958: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , i , temp_list_2 ) ;
27959: LD_ADDR_EXP 49
27963: PUSH
27964: LD_EXP 49
27968: PPUSH
27969: LD_VAR 0 2
27973: PPUSH
27974: LD_VAR 0 5
27978: PPUSH
27979: CALL_OW 1
27983: ST_TO_ADDR
// temp_list_2 = ai_units_to_export [ i ] diff temp_list ;
27984: LD_ADDR_VAR 0 5
27988: PUSH
27989: LD_EXP 80
27993: PUSH
27994: LD_VAR 0 2
27998: ARRAY
27999: PUSH
28000: LD_VAR 0 4
28004: DIFF
28005: ST_TO_ADDR
// ai_units_to_export = Replace ( ai_units_to_export , i , temp_list_2 ) ;
28006: LD_ADDR_EXP 80
28010: PUSH
28011: LD_EXP 80
28015: PPUSH
28016: LD_VAR 0 2
28020: PPUSH
28021: LD_VAR 0 5
28025: PPUSH
28026: CALL_OW 1
28030: ST_TO_ADDR
// end ; end ; end ;
28031: GO 27880
28033: POP
28034: POP
// if BaseUnderAttack ( rus_base , - 1 ) and farmer_attack_anyway_phase <> 2 then
28035: LD_VAR 0 7
28039: PPUSH
28040: LD_INT 1
28042: NEG
28043: PPUSH
28044: CALL 46094 0 2
28048: PUSH
28049: LD_EXP 121
28053: PUSH
28054: LD_INT 2
28056: NONEQUAL
28057: AND
28058: IFFALSE 28395
// begin not_under_attack_count = 0 ;
28060: LD_ADDR_VAR 0 6
28064: PUSH
28065: LD_INT 0
28067: ST_TO_ADDR
// if IsOk ( ai_teleporter [ farm_base ] ) then
28068: LD_EXP 46
28072: PUSH
28073: LD_VAR 0 8
28077: ARRAY
28078: PPUSH
28079: CALL_OW 302
28083: IFFALSE 28393
// begin num = [ 3 , 5 , 7 ] [ difficulty ] - ai_vehicles_defend [ rus_base ] - UnitFilter ( ai_units_to_export [ farm_base ] ^ ai_exported_units [ farm_base ] , war_vehicle_filter ) ;
28085: LD_ADDR_VAR 0 1
28089: PUSH
28090: LD_INT 3
28092: PUSH
28093: LD_INT 5
28095: PUSH
28096: LD_INT 7
28098: PUSH
28099: EMPTY
28100: LIST
28101: LIST
28102: LIST
28103: PUSH
28104: LD_OWVAR 67
28108: ARRAY
28109: PUSH
28110: LD_EXP 49
28114: PUSH
28115: LD_VAR 0 7
28119: ARRAY
28120: MINUS
28121: PUSH
28122: LD_EXP 80
28126: PUSH
28127: LD_VAR 0 8
28131: ARRAY
28132: PUSH
28133: LD_EXP 81
28137: PUSH
28138: LD_VAR 0 8
28142: ARRAY
28143: ADD
28144: PPUSH
28145: LD_EXP 117
28149: PPUSH
28150: CALL_OW 72
28154: MINUS
28155: ST_TO_ADDR
// vehicles_list = UnitFilter ( ai_vehicles_defend [ farm_base ] , [ [ f_control , control_remote ] , [ f_lives , 750 ] ] ) ;
28156: LD_ADDR_VAR 0 3
28160: PUSH
28161: LD_EXP 49
28165: PUSH
28166: LD_VAR 0 8
28170: ARRAY
28171: PPUSH
28172: LD_INT 33
28174: PUSH
28175: LD_INT 2
28177: PUSH
28178: EMPTY
28179: LIST
28180: LIST
28181: PUSH
28182: LD_INT 24
28184: PUSH
28185: LD_INT 750
28187: PUSH
28188: EMPTY
28189: LIST
28190: LIST
28191: PUSH
28192: EMPTY
28193: LIST
28194: LIST
28195: PPUSH
28196: CALL_OW 72
28200: ST_TO_ADDR
// if num > 0 and vehicles_list > 0 then
28201: LD_VAR 0 1
28205: PUSH
28206: LD_INT 0
28208: GREATER
28209: PUSH
28210: LD_VAR 0 3
28214: PUSH
28215: LD_INT 0
28217: GREATER
28218: AND
28219: IFFALSE 28393
// begin if num >= vehicles_list then
28221: LD_VAR 0 1
28225: PUSH
28226: LD_VAR 0 3
28230: GREATEREQUAL
28231: IFFALSE 28245
// temp_list = vehicles_list else
28233: LD_ADDR_VAR 0 4
28237: PUSH
28238: LD_VAR 0 3
28242: ST_TO_ADDR
28243: GO 28312
// begin temp_list = [ ] ;
28245: LD_ADDR_VAR 0 4
28249: PUSH
28250: EMPTY
28251: ST_TO_ADDR
// for i = 1 to num do
28252: LD_ADDR_VAR 0 2
28256: PUSH
28257: DOUBLE
28258: LD_INT 1
28260: DEC
28261: ST_TO_ADDR
28262: LD_VAR 0 1
28266: PUSH
28267: FOR_TO
28268: IFFALSE 28310
// begin temp_list = temp_list ^ vehicles_list [ 1 ] ;
28270: LD_ADDR_VAR 0 4
28274: PUSH
28275: LD_VAR 0 4
28279: PUSH
28280: LD_VAR 0 3
28284: PUSH
28285: LD_INT 1
28287: ARRAY
28288: ADD
28289: ST_TO_ADDR
// vehicles_list = Delete ( vehicles_list , 1 ) ;
28290: LD_ADDR_VAR 0 3
28294: PUSH
28295: LD_VAR 0 3
28299: PPUSH
28300: LD_INT 1
28302: PPUSH
28303: CALL_OW 3
28307: ST_TO_ADDR
// end ;
28308: GO 28267
28310: POP
28311: POP
// end ; for i in temp_list do
28312: LD_ADDR_VAR 0 2
28316: PUSH
28317: LD_VAR 0 4
28321: PUSH
28322: FOR_IN
28323: IFFALSE 28344
// RemoveVehicleFromVariables ( farm_base , i , true ) ;
28325: LD_VAR 0 8
28329: PPUSH
28330: LD_VAR 0 2
28334: PPUSH
28335: LD_INT 1
28337: PPUSH
28338: CALL 24969 0 3
28342: GO 28322
28344: POP
28345: POP
// temp_list_2 = ai_units_to_export [ farm_base ] ^ temp_list ;
28346: LD_ADDR_VAR 0 5
28350: PUSH
28351: LD_EXP 80
28355: PUSH
28356: LD_VAR 0 8
28360: ARRAY
28361: PUSH
28362: LD_VAR 0 4
28366: ADD
28367: ST_TO_ADDR
// ai_units_to_export = Replace ( ai_units_to_export , farm_base , temp_list_2 ) ;
28368: LD_ADDR_EXP 80
28372: PUSH
28373: LD_EXP 80
28377: PPUSH
28378: LD_VAR 0 8
28382: PPUSH
28383: LD_VAR 0 5
28387: PPUSH
28388: CALL_OW 1
28392: ST_TO_ADDR
// end ; end ; end else
28393: GO 28589
// begin if ai_imported_units [ rus_base ] > 0 then
28395: LD_EXP 82
28399: PUSH
28400: LD_VAR 0 7
28404: ARRAY
28405: PUSH
28406: LD_INT 0
28408: GREATER
28409: IFFALSE 28589
// begin if farmer_attack_anyway_phase <> 2 then
28411: LD_EXP 121
28415: PUSH
28416: LD_INT 2
28418: NONEQUAL
28419: IFFALSE 28435
// not_under_attack_count = not_under_attack_count + 1 ;
28421: LD_ADDR_VAR 0 6
28425: PUSH
28426: LD_VAR 0 6
28430: PUSH
28431: LD_INT 1
28433: PLUS
28434: ST_TO_ADDR
// if ( not_under_attack_count >= 10 or farmer_attack_anyway_phase = 2 ) and IsOk ( ai_teleporter [ rus_base ] ) then
28435: LD_VAR 0 6
28439: PUSH
28440: LD_INT 10
28442: GREATEREQUAL
28443: PUSH
28444: LD_EXP 121
28448: PUSH
28449: LD_INT 2
28451: EQUAL
28452: OR
28453: PUSH
28454: LD_EXP 46
28458: PUSH
28459: LD_VAR 0 7
28463: ARRAY
28464: PPUSH
28465: CALL_OW 302
28469: AND
28470: IFFALSE 28589
// begin temp_list_2 = UnitFilter ( ai_imported_units [ rus_base ] , war_vehicle_filter ^ [ [ f_ok ] ] ) ;
28472: LD_ADDR_VAR 0 5
28476: PUSH
28477: LD_EXP 82
28481: PUSH
28482: LD_VAR 0 7
28486: ARRAY
28487: PPUSH
28488: LD_EXP 117
28492: PUSH
28493: LD_INT 50
28495: PUSH
28496: EMPTY
28497: LIST
28498: PUSH
28499: EMPTY
28500: LIST
28501: ADD
28502: PPUSH
28503: CALL_OW 72
28507: ST_TO_ADDR
// for i in temp_list_2 do
28508: LD_ADDR_VAR 0 2
28512: PUSH
28513: LD_VAR 0 5
28517: PUSH
28518: FOR_IN
28519: IFFALSE 28540
// begin RemoveVehicleFromVariables ( rus_base , i , false ) ;
28521: LD_VAR 0 7
28525: PPUSH
28526: LD_VAR 0 2
28530: PPUSH
28531: LD_INT 0
28533: PPUSH
28534: CALL 24969 0 3
// end ;
28538: GO 28518
28540: POP
28541: POP
// temp_list = ai_units_to_export [ rus_base ] union temp_list_2 ;
28542: LD_ADDR_VAR 0 4
28546: PUSH
28547: LD_EXP 80
28551: PUSH
28552: LD_VAR 0 7
28556: ARRAY
28557: PUSH
28558: LD_VAR 0 5
28562: UNION
28563: ST_TO_ADDR
// ai_units_to_export = Replace ( ai_units_to_export , rus_base , temp_list ) ;
28564: LD_ADDR_EXP 80
28568: PUSH
28569: LD_EXP 80
28573: PPUSH
28574: LD_VAR 0 7
28578: PPUSH
28579: LD_VAR 0 4
28583: PPUSH
28584: CALL_OW 1
28588: ST_TO_ADDR
// end ; end ; end ; until false ;
28589: LD_INT 0
28591: IFFALSE 27526
// end ;
28593: PPOPN 8
28595: END
// every 0 0$1 + 0 0$0.7 do var base , i ;
28596: GO 28598
28598: DISABLE
28599: LD_INT 0
28601: PPUSH
28602: PPUSH
// begin repeat wait ( 0 0$1 ) ;
28603: LD_INT 35
28605: PPUSH
28606: CALL_OW 67
// for base in ai_bases do
28610: LD_ADDR_VAR 0 1
28614: PUSH
28615: LD_EXP 25
28619: PUSH
28620: FOR_IN
28621: IFFALSE 28713
// begin if not IsOk ( ai_teleporter [ base ] ) then
28623: LD_EXP 46
28627: PUSH
28628: LD_VAR 0 1
28632: ARRAY
28633: PPUSH
28634: CALL_OW 302
28638: NOT
28639: IFFALSE 28643
// continue ;
28641: GO 28620
// for i in ai_units_to_export [ base ] do
28643: LD_ADDR_VAR 0 2
28647: PUSH
28648: LD_EXP 80
28652: PUSH
28653: LD_VAR 0 1
28657: ARRAY
28658: PUSH
28659: FOR_IN
28660: IFFALSE 28709
// begin if i in ai_units_to_export [ base ] then
28662: LD_VAR 0 2
28666: PUSH
28667: LD_EXP 80
28671: PUSH
28672: LD_VAR 0 1
28676: ARRAY
28677: IN
28678: IFFALSE 28700
// ComEnterUnit ( i , ai_teleporter [ base ] ) ;
28680: LD_VAR 0 2
28684: PPUSH
28685: LD_EXP 46
28689: PUSH
28690: LD_VAR 0 1
28694: ARRAY
28695: PPUSH
28696: CALL_OW 120
// wait ( 20 ) ;
28700: LD_INT 20
28702: PPUSH
28703: CALL_OW 67
// end ;
28707: GO 28659
28709: POP
28710: POP
// end ;
28711: GO 28620
28713: POP
28714: POP
// until false ;
28715: LD_INT 0
28717: IFFALSE 28603
// end ;
28719: PPOPN 2
28721: END
// on UnitTeleported ( teleporter , teleported_unit ) do var from_base , to_base , temp_list ;
28722: LD_INT 0
28724: PPUSH
28725: PPUSH
28726: PPUSH
// begin if GetSide ( teleported_unit ) = you then
28727: LD_VAR 0 2
28731: PPUSH
28732: CALL_OW 255
28736: PUSH
28737: LD_EXP 2
28741: EQUAL
28742: IFFALSE 28746
// exit ;
28744: GO 29429
// if teleported_unit in [ Farmer , farmer_vehicle ] then
28746: LD_VAR 0 2
28750: PUSH
28751: LD_EXP 21
28755: PUSH
28756: LD_EXP 130
28760: PUSH
28761: EMPTY
28762: LIST
28763: LIST
28764: IN
28765: IFFALSE 28777
// begin farmer_has_teleported = true ;
28767: LD_ADDR_EXP 131
28771: PUSH
28772: LD_INT 1
28774: ST_TO_ADDR
// exit ;
28775: GO 29429
// end ; from_base = FindBase ( teleporter ) ;
28777: LD_ADDR_VAR 0 3
28781: PUSH
28782: LD_VAR 0 1
28786: PPUSH
28787: CALL 27251 0 1
28791: ST_TO_ADDR
// case from_base of 1 :
28792: LD_VAR 0 3
28796: PUSH
28797: LD_INT 1
28799: DOUBLE
28800: EQUAL
28801: IFTRUE 28805
28803: GO 29105
28805: POP
// begin to_base = 3 ;
28806: LD_ADDR_VAR 0 4
28810: PUSH
28811: LD_INT 3
28813: ST_TO_ADDR
// if teleported_unit = Kozlov then
28814: LD_VAR 0 2
28818: PUSH
28819: LD_EXP 24
28823: EQUAL
28824: IFFALSE 28923
// begin kozlov_has_teleported = true ;
28826: LD_ADDR_EXP 127
28830: PUSH
28831: LD_INT 1
28833: ST_TO_ADDR
// kozlov_trying_to_escape = false ;
28834: LD_ADDR_EXP 139
28838: PUSH
28839: LD_INT 0
28841: ST_TO_ADDR
// SetSide ( Kozlov , farmer_side ) ;
28842: LD_EXP 24
28846: PPUSH
28847: LD_EXP 6
28851: PPUSH
28852: CALL_OW 235
// RemoveHumanFromVariables ( 1 , Kozlov , true , false ) ;
28856: LD_INT 1
28858: PPUSH
28859: LD_EXP 24
28863: PPUSH
28864: LD_INT 1
28866: PPUSH
28867: LD_INT 0
28869: PPUSH
28870: CALL 25867 0 4
// temp_list = ai_scientists [ to_base ] ^ teleported_unit ;
28874: LD_ADDR_VAR 0 5
28878: PUSH
28879: LD_EXP 31
28883: PUSH
28884: LD_VAR 0 4
28888: ARRAY
28889: PUSH
28890: LD_VAR 0 2
28894: ADD
28895: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , to_base , temp_list ) ;
28896: LD_ADDR_EXP 31
28900: PUSH
28901: LD_EXP 31
28905: PPUSH
28906: LD_VAR 0 4
28910: PPUSH
28911: LD_VAR 0 5
28915: PPUSH
28916: CALL_OW 1
28920: ST_TO_ADDR
// exit ;
28921: GO 29429
// end ; case GetWeapon ( teleported_unit ) of ru_cargo_bay :
28923: LD_VAR 0 2
28927: PPUSH
28928: CALL_OW 264
28932: PUSH
28933: LD_INT 51
28935: DOUBLE
28936: EQUAL
28937: IFTRUE 28941
28939: GO 28983
28941: POP
// begin ai_cargo_bay = Replace ( ai_cargo_bay , to_base , teleported_unit ) ;
28942: LD_ADDR_EXP 65
28946: PUSH
28947: LD_EXP 65
28951: PPUSH
28952: LD_VAR 0 4
28956: PPUSH
28957: LD_VAR 0 2
28961: PPUSH
28962: CALL_OW 1
28966: ST_TO_ADDR
// SetSide ( teleported_unit , farmer_side ) ;
28967: LD_VAR 0 2
28971: PPUSH
28972: LD_EXP 6
28976: PPUSH
28977: CALL_OW 235
// end ; ru_time_lapser :
28981: GO 29103
28983: LD_INT 49
28985: DOUBLE
28986: EQUAL
28987: IFTRUE 28991
28989: GO 29055
28991: POP
// begin temp_list = ai_taufield_vehicles [ to_base ] ^ teleported_unit ;
28992: LD_ADDR_VAR 0 5
28996: PUSH
28997: LD_EXP 83
29001: PUSH
29002: LD_VAR 0 4
29006: ARRAY
29007: PUSH
29008: LD_VAR 0 2
29012: ADD
29013: ST_TO_ADDR
// ai_taufield_vehicles = Replace ( ai_taufield_vehicles , to_base , temp_list ) ;
29014: LD_ADDR_EXP 83
29018: PUSH
29019: LD_EXP 83
29023: PPUSH
29024: LD_VAR 0 4
29028: PPUSH
29029: LD_VAR 0 5
29033: PPUSH
29034: CALL_OW 1
29038: ST_TO_ADDR
// SetSide ( teleported_unit , farmer_side ) ;
29039: LD_VAR 0 2
29043: PPUSH
29044: LD_EXP 6
29048: PPUSH
29049: CALL_OW 235
// end ; else
29053: GO 29103
29055: POP
// begin temp_list = ai_vehicles_defend [ to_base ] ^ teleported_unit ;
29056: LD_ADDR_VAR 0 5
29060: PUSH
29061: LD_EXP 49
29065: PUSH
29066: LD_VAR 0 4
29070: ARRAY
29071: PUSH
29072: LD_VAR 0 2
29076: ADD
29077: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , to_base , temp_list ) ;
29078: LD_ADDR_EXP 49
29082: PUSH
29083: LD_EXP 49
29087: PPUSH
29088: LD_VAR 0 4
29092: PPUSH
29093: LD_VAR 0 5
29097: PPUSH
29098: CALL_OW 1
29102: ST_TO_ADDR
// end ; end ; end ; 3 :
29103: GO 29174
29105: LD_INT 3
29107: DOUBLE
29108: EQUAL
29109: IFTRUE 29113
29111: GO 29171
29113: POP
// begin to_base = 1 ;
29114: LD_ADDR_VAR 0 4
29118: PUSH
29119: LD_INT 1
29121: ST_TO_ADDR
// temp_list = ai_vehicles_defend [ to_base ] ^ teleported_unit ;
29122: LD_ADDR_VAR 0 5
29126: PUSH
29127: LD_EXP 49
29131: PUSH
29132: LD_VAR 0 4
29136: ARRAY
29137: PUSH
29138: LD_VAR 0 2
29142: ADD
29143: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , to_base , temp_list ) ;
29144: LD_ADDR_EXP 49
29148: PUSH
29149: LD_EXP 49
29153: PPUSH
29154: LD_VAR 0 4
29158: PPUSH
29159: LD_VAR 0 5
29163: PPUSH
29164: CALL_OW 1
29168: ST_TO_ADDR
// end ; else
29169: GO 29174
29171: POP
// exit ; end ;
29172: GO 29429
// temp_list = ai_units_to_export [ from_base ] diff teleported_unit ;
29174: LD_ADDR_VAR 0 5
29178: PUSH
29179: LD_EXP 80
29183: PUSH
29184: LD_VAR 0 3
29188: ARRAY
29189: PUSH
29190: LD_VAR 0 2
29194: DIFF
29195: ST_TO_ADDR
// ai_units_to_export = Replace ( ai_units_to_export , from_base , temp_list ) ;
29196: LD_ADDR_EXP 80
29200: PUSH
29201: LD_EXP 80
29205: PPUSH
29206: LD_VAR 0 3
29210: PPUSH
29211: LD_VAR 0 5
29215: PPUSH
29216: CALL_OW 1
29220: ST_TO_ADDR
// if teleported_unit in ai_exported_units [ to_base ] then
29221: LD_VAR 0 2
29225: PUSH
29226: LD_EXP 81
29230: PUSH
29231: LD_VAR 0 4
29235: ARRAY
29236: IN
29237: IFFALSE 29335
// begin temp_list = ai_exported_units [ to_base ] diff teleported_unit ;
29239: LD_ADDR_VAR 0 5
29243: PUSH
29244: LD_EXP 81
29248: PUSH
29249: LD_VAR 0 4
29253: ARRAY
29254: PUSH
29255: LD_VAR 0 2
29259: DIFF
29260: ST_TO_ADDR
// ai_exported_units = Replace ( ai_exported_units , to_base , temp_list ) ;
29261: LD_ADDR_EXP 81
29265: PUSH
29266: LD_EXP 81
29270: PPUSH
29271: LD_VAR 0 4
29275: PPUSH
29276: LD_VAR 0 5
29280: PPUSH
29281: CALL_OW 1
29285: ST_TO_ADDR
// temp_list = ai_imported_units [ from_base ] diff teleported_unit ;
29286: LD_ADDR_VAR 0 5
29290: PUSH
29291: LD_EXP 82
29295: PUSH
29296: LD_VAR 0 3
29300: ARRAY
29301: PUSH
29302: LD_VAR 0 2
29306: DIFF
29307: ST_TO_ADDR
// ai_imported_units = Replace ( ai_imported_units , from_base , temp_list ) ;
29308: LD_ADDR_EXP 82
29312: PUSH
29313: LD_EXP 82
29317: PPUSH
29318: LD_VAR 0 3
29322: PPUSH
29323: LD_VAR 0 5
29327: PPUSH
29328: CALL_OW 1
29332: ST_TO_ADDR
// end else
29333: GO 29429
// begin temp_list = ai_exported_units [ from_base ] ^ teleported_unit ;
29335: LD_ADDR_VAR 0 5
29339: PUSH
29340: LD_EXP 81
29344: PUSH
29345: LD_VAR 0 3
29349: ARRAY
29350: PUSH
29351: LD_VAR 0 2
29355: ADD
29356: ST_TO_ADDR
// ai_exported_units = Replace ( ai_exported_units , from_base , temp_list ) ;
29357: LD_ADDR_EXP 81
29361: PUSH
29362: LD_EXP 81
29366: PPUSH
29367: LD_VAR 0 3
29371: PPUSH
29372: LD_VAR 0 5
29376: PPUSH
29377: CALL_OW 1
29381: ST_TO_ADDR
// temp_list = ai_imported_units [ to_base ] ^ teleported_unit ;
29382: LD_ADDR_VAR 0 5
29386: PUSH
29387: LD_EXP 82
29391: PUSH
29392: LD_VAR 0 4
29396: ARRAY
29397: PUSH
29398: LD_VAR 0 2
29402: ADD
29403: ST_TO_ADDR
// ai_imported_units = Replace ( ai_imported_units , to_base , temp_list ) ;
29404: LD_ADDR_EXP 82
29408: PUSH
29409: LD_EXP 82
29413: PPUSH
29414: LD_VAR 0 4
29418: PPUSH
29419: LD_VAR 0 5
29423: PPUSH
29424: CALL_OW 1
29428: ST_TO_ADDR
// end ; end ;
29429: PPOPN 5
29431: END
// every 0 0$1 + 0 0$0.1 do var side , i , temp_list , buildings_list , soldiers_list , temp_unit , base , val , special_units , bunkers , under_attack , j ; var special_defenders , temp_list_2 ;
29432: GO 29434
29434: DISABLE
29435: LD_INT 0
29437: PPUSH
29438: PPUSH
29439: PPUSH
29440: PPUSH
29441: PPUSH
29442: PPUSH
29443: PPUSH
29444: PPUSH
29445: PPUSH
29446: PPUSH
29447: PPUSH
29448: PPUSH
29449: PPUSH
29450: PPUSH
// begin for base in ai_bases do
29451: LD_ADDR_VAR 0 7
29455: PUSH
29456: LD_EXP 25
29460: PUSH
29461: FOR_IN
29462: IFFALSE 31277
// begin side = GetBaseSide ( base ) ;
29464: LD_ADDR_VAR 0 1
29468: PUSH
29469: LD_VAR 0 7
29473: PPUSH
29474: CALL 27103 0 1
29478: ST_TO_ADDR
// soldiers_list = ai_soldiers [ base ] diff ( Farmer ^ ai_excepted_soldiers [ base ] ) ;
29479: LD_ADDR_VAR 0 5
29483: PUSH
29484: LD_EXP 26
29488: PUSH
29489: LD_VAR 0 7
29493: ARRAY
29494: PUSH
29495: LD_EXP 21
29499: PUSH
29500: LD_EXP 34
29504: PUSH
29505: LD_VAR 0 7
29509: ARRAY
29510: ADD
29511: DIFF
29512: ST_TO_ADDR
// under_attack := BaseUnderAttack ( base , - 1 ) ;
29513: LD_ADDR_VAR 0 11
29517: PUSH
29518: LD_VAR 0 7
29522: PPUSH
29523: LD_INT 1
29525: NEG
29526: PPUSH
29527: CALL 46094 0 2
29531: ST_TO_ADDR
// if base = 3 and IsLive ( Farmer ) and Farmer in ai_soldiers [ base ] and not Farmer in ai_heal_these_humans [ base ] then
29532: LD_VAR 0 7
29536: PUSH
29537: LD_INT 3
29539: EQUAL
29540: PUSH
29541: LD_EXP 21
29545: PPUSH
29546: CALL_OW 300
29550: AND
29551: PUSH
29552: LD_EXP 21
29556: PUSH
29557: LD_EXP 26
29561: PUSH
29562: LD_VAR 0 7
29566: ARRAY
29567: IN
29568: AND
29569: PUSH
29570: LD_EXP 21
29574: PUSH
29575: LD_EXP 57
29579: PUSH
29580: LD_VAR 0 7
29584: ARRAY
29585: IN
29586: NOT
29587: AND
29588: IFFALSE 29722
// begin if GetLives ( Farmer ) <= 500 then
29590: LD_EXP 21
29594: PPUSH
29595: CALL_OW 256
29599: PUSH
29600: LD_INT 500
29602: LESSEQUAL
29603: IFFALSE 29654
// begin temp_list = ai_heal_these_humans [ base ] ^ Farmer ;
29605: LD_ADDR_VAR 0 3
29609: PUSH
29610: LD_EXP 57
29614: PUSH
29615: LD_VAR 0 7
29619: ARRAY
29620: PUSH
29621: LD_EXP 21
29625: ADD
29626: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
29627: LD_ADDR_EXP 57
29631: PUSH
29632: LD_EXP 57
29636: PPUSH
29637: LD_VAR 0 7
29641: PPUSH
29642: LD_VAR 0 3
29646: PPUSH
29647: CALL_OW 1
29651: ST_TO_ADDR
// end else
29652: GO 29722
// DistributeHumansToBuildings ( base , [ Farmer ] , UnitFilter ( ai_depot [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , 0 , 6 , true , true ) ;
29654: LD_VAR 0 7
29658: PPUSH
29659: LD_EXP 21
29663: PUSH
29664: EMPTY
29665: LIST
29666: PPUSH
29667: LD_EXP 35
29671: PUSH
29672: LD_VAR 0 7
29676: ARRAY
29677: PPUSH
29678: LD_INT 50
29680: PUSH
29681: EMPTY
29682: LIST
29683: PUSH
29684: LD_INT 3
29686: PUSH
29687: LD_INT 57
29689: PUSH
29690: EMPTY
29691: LIST
29692: PUSH
29693: EMPTY
29694: LIST
29695: LIST
29696: PUSH
29697: EMPTY
29698: LIST
29699: LIST
29700: PPUSH
29701: CALL_OW 72
29705: PPUSH
29706: LD_INT 0
29708: PPUSH
29709: LD_INT 6
29711: PPUSH
29712: LD_INT 1
29714: PPUSH
29715: LD_INT 1
29717: PPUSH
29718: CALL 35428 0 7
// end ; if base in [ 1 , 3 ] and under_attack then
29722: LD_VAR 0 7
29726: PUSH
29727: LD_INT 1
29729: PUSH
29730: LD_INT 3
29732: PUSH
29733: EMPTY
29734: LIST
29735: LIST
29736: IN
29737: PUSH
29738: LD_VAR 0 11
29742: AND
29743: IFFALSE 29818
// special_defenders = UnitFilter ( soldiers_list , [ [ f_or , [ f_class , class_sniper ] , [ f_class , class_mortar ] , [ f_class , class_bazooker ] ] , [ f_not , [ f_inside ] ] ] ) else
29745: LD_ADDR_VAR 0 13
29749: PUSH
29750: LD_VAR 0 5
29754: PPUSH
29755: LD_INT 2
29757: PUSH
29758: LD_INT 25
29760: PUSH
29761: LD_INT 5
29763: PUSH
29764: EMPTY
29765: LIST
29766: LIST
29767: PUSH
29768: LD_INT 25
29770: PUSH
29771: LD_INT 8
29773: PUSH
29774: EMPTY
29775: LIST
29776: LIST
29777: PUSH
29778: LD_INT 25
29780: PUSH
29781: LD_INT 9
29783: PUSH
29784: EMPTY
29785: LIST
29786: LIST
29787: PUSH
29788: EMPTY
29789: LIST
29790: LIST
29791: LIST
29792: LIST
29793: PUSH
29794: LD_INT 3
29796: PUSH
29797: LD_INT 54
29799: PUSH
29800: EMPTY
29801: LIST
29802: PUSH
29803: EMPTY
29804: LIST
29805: LIST
29806: PUSH
29807: EMPTY
29808: LIST
29809: LIST
29810: PPUSH
29811: CALL_OW 72
29815: ST_TO_ADDR
29816: GO 29825
// special_defenders = [ ] ;
29818: LD_ADDR_VAR 0 13
29822: PUSH
29823: EMPTY
29824: ST_TO_ADDR
// if base in [ 1 , 3 ] then
29825: LD_VAR 0 7
29829: PUSH
29830: LD_INT 1
29832: PUSH
29833: LD_INT 3
29835: PUSH
29836: EMPTY
29837: LIST
29838: LIST
29839: IN
29840: IFFALSE 29971
// begin temp_list = ai_heal_these_humans [ base ] ;
29842: LD_ADDR_VAR 0 3
29846: PUSH
29847: LD_EXP 57
29851: PUSH
29852: LD_VAR 0 7
29856: ARRAY
29857: ST_TO_ADDR
// for i in soldiers_list diff ai_heal_these_humans [ base ] do
29858: LD_ADDR_VAR 0 2
29862: PUSH
29863: LD_VAR 0 5
29867: PUSH
29868: LD_EXP 57
29872: PUSH
29873: LD_VAR 0 7
29877: ARRAY
29878: DIFF
29879: PUSH
29880: FOR_IN
29881: IFFALSE 29944
// if GetLives ( i ) <= 500 or ( GetLives ( i ) < 800 and not i in special_defenders ) then
29883: LD_VAR 0 2
29887: PPUSH
29888: CALL_OW 256
29892: PUSH
29893: LD_INT 500
29895: LESSEQUAL
29896: PUSH
29897: LD_VAR 0 2
29901: PPUSH
29902: CALL_OW 256
29906: PUSH
29907: LD_INT 800
29909: LESS
29910: PUSH
29911: LD_VAR 0 2
29915: PUSH
29916: LD_VAR 0 13
29920: IN
29921: NOT
29922: AND
29923: OR
29924: IFFALSE 29942
// temp_list = temp_list ^ i ;
29926: LD_ADDR_VAR 0 3
29930: PUSH
29931: LD_VAR 0 3
29935: PUSH
29936: LD_VAR 0 2
29940: ADD
29941: ST_TO_ADDR
29942: GO 29880
29944: POP
29945: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
29946: LD_ADDR_EXP 57
29950: PUSH
29951: LD_EXP 57
29955: PPUSH
29956: LD_VAR 0 7
29960: PPUSH
29961: LD_VAR 0 3
29965: PPUSH
29966: CALL_OW 1
29970: ST_TO_ADDR
// end ; if not under_attack then
29971: LD_VAR 0 11
29975: NOT
29976: IFFALSE 30113
// begin for i in ai_heal_these_humans [ base ] do
29978: LD_ADDR_VAR 0 2
29982: PUSH
29983: LD_EXP 57
29987: PUSH
29988: LD_VAR 0 7
29992: ARRAY
29993: PUSH
29994: FOR_IN
29995: IFFALSE 30067
// if i in soldiers_list then
29997: LD_VAR 0 2
30001: PUSH
30002: LD_VAR 0 5
30006: IN
30007: IFFALSE 30065
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
30009: LD_VAR 0 2
30013: PPUSH
30014: CALL_OW 310
30018: PPUSH
30019: CALL_OW 247
30023: PUSH
30024: LD_INT 2
30026: DOUBLE
30027: EQUAL
30028: IFTRUE 30032
30030: GO 30044
30032: POP
// ComExitVehicle ( i ) ; unit_building :
30033: LD_VAR 0 2
30037: PPUSH
30038: CALL_OW 121
30042: GO 30065
30044: LD_INT 3
30046: DOUBLE
30047: EQUAL
30048: IFTRUE 30052
30050: GO 30064
30052: POP
// ComExitBuilding ( i ) ; end ;
30053: LD_VAR 0 2
30057: PPUSH
30058: CALL_OW 122
30062: GO 30065
30064: POP
30065: GO 29994
30067: POP
30068: POP
// soldiers_list = soldiers_list diff ai_heal_these_humans [ base ] ;
30069: LD_ADDR_VAR 0 5
30073: PUSH
30074: LD_VAR 0 5
30078: PUSH
30079: LD_EXP 57
30083: PUSH
30084: LD_VAR 0 7
30088: ARRAY
30089: DIFF
30090: ST_TO_ADDR
// special_defenders = special_defenders diff ai_heal_these_humans [ base ] ;
30091: LD_ADDR_VAR 0 13
30095: PUSH
30096: LD_VAR 0 13
30100: PUSH
30101: LD_EXP 57
30105: PUSH
30106: LD_VAR 0 7
30110: ARRAY
30111: DIFF
30112: ST_TO_ADDR
// end ; if soldiers_list = 0 then
30113: LD_VAR 0 5
30117: PUSH
30118: LD_INT 0
30120: EQUAL
30121: IFFALSE 30125
// continue ;
30123: GO 29461
// if special_defenders > 0 and not base = 3 then
30125: LD_VAR 0 13
30129: PUSH
30130: LD_INT 0
30132: GREATER
30133: PUSH
30134: LD_VAR 0 7
30138: PUSH
30139: LD_INT 3
30141: EQUAL
30142: NOT
30143: AND
30144: IFFALSE 30411
// begin case base of 1 :
30146: LD_VAR 0 7
30150: PUSH
30151: LD_INT 1
30153: DOUBLE
30154: EQUAL
30155: IFTRUE 30159
30157: GO 30266
30159: POP
// begin temp_list_2 = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_inarea , ru_bazooker_defend_area_south ] ] ) ;
30160: LD_ADDR_VAR 0 14
30164: PUSH
30165: LD_INT 81
30167: PUSH
30168: LD_VAR 0 1
30172: PUSH
30173: EMPTY
30174: LIST
30175: LIST
30176: PUSH
30177: LD_INT 21
30179: PUSH
30180: LD_INT 1
30182: PUSH
30183: EMPTY
30184: LIST
30185: LIST
30186: PUSH
30187: LD_INT 95
30189: PUSH
30190: LD_INT 5
30192: PUSH
30193: EMPTY
30194: LIST
30195: LIST
30196: PUSH
30197: EMPTY
30198: LIST
30199: LIST
30200: LIST
30201: PPUSH
30202: CALL_OW 69
30206: ST_TO_ADDR
// if temp_list_2 = 0 then
30207: LD_VAR 0 14
30211: PUSH
30212: LD_INT 0
30214: EQUAL
30215: IFFALSE 30264
// temp_list_2 = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_inarea , ru_bazooker_defend_area_north ] ] ) ;
30217: LD_ADDR_VAR 0 14
30221: PUSH
30222: LD_INT 81
30224: PUSH
30225: LD_VAR 0 1
30229: PUSH
30230: EMPTY
30231: LIST
30232: LIST
30233: PUSH
30234: LD_INT 21
30236: PUSH
30237: LD_INT 1
30239: PUSH
30240: EMPTY
30241: LIST
30242: LIST
30243: PUSH
30244: LD_INT 95
30246: PUSH
30247: LD_INT 4
30249: PUSH
30250: EMPTY
30251: LIST
30252: LIST
30253: PUSH
30254: EMPTY
30255: LIST
30256: LIST
30257: LIST
30258: PPUSH
30259: CALL_OW 69
30263: ST_TO_ADDR
// end ; 2 :
30264: GO 30343
30266: LD_INT 2
30268: DOUBLE
30269: EQUAL
30270: IFTRUE 30274
30272: GO 30284
30274: POP
// begin temp_list_2 = [ ] ;
30275: LD_ADDR_VAR 0 14
30279: PUSH
30280: EMPTY
30281: ST_TO_ADDR
// end ; 3 :
30282: GO 30343
30284: LD_INT 3
30286: DOUBLE
30287: EQUAL
30288: IFTRUE 30292
30290: GO 30342
30292: POP
// begin temp_list_2 = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_inarea , ar_mortar_defend_area ] ] ) ;
30293: LD_ADDR_VAR 0 14
30297: PUSH
30298: LD_INT 81
30300: PUSH
30301: LD_VAR 0 1
30305: PUSH
30306: EMPTY
30307: LIST
30308: LIST
30309: PUSH
30310: LD_INT 21
30312: PUSH
30313: LD_INT 1
30315: PUSH
30316: EMPTY
30317: LIST
30318: LIST
30319: PUSH
30320: LD_INT 95
30322: PUSH
30323: LD_INT 11
30325: PUSH
30326: EMPTY
30327: LIST
30328: LIST
30329: PUSH
30330: EMPTY
30331: LIST
30332: LIST
30333: LIST
30334: PPUSH
30335: CALL_OW 69
30339: ST_TO_ADDR
// end ; end ;
30340: GO 30343
30342: POP
// if temp_list_2 > 0 then
30343: LD_VAR 0 14
30347: PUSH
30348: LD_INT 0
30350: GREATER
30351: IFFALSE 30411
// begin soldiers_list = soldiers_list diff special_defenders ;
30353: LD_ADDR_VAR 0 5
30357: PUSH
30358: LD_VAR 0 5
30362: PUSH
30363: LD_VAR 0 13
30367: DIFF
30368: ST_TO_ADDR
// ComAgressiveMove ( GetHumansOutOfUnits ( special_defenders ) , GetX ( temp_list_2 [ 1 ] ) , GetY ( temp_list_2 [ 1 ] ) ) ;
30369: LD_VAR 0 13
30373: PPUSH
30374: CALL 45989 0 1
30378: PPUSH
30379: LD_VAR 0 14
30383: PUSH
30384: LD_INT 1
30386: ARRAY
30387: PPUSH
30388: CALL_OW 250
30392: PPUSH
30393: LD_VAR 0 14
30397: PUSH
30398: LD_INT 1
30400: ARRAY
30401: PPUSH
30402: CALL_OW 251
30406: PPUSH
30407: CALL_OW 114
// end ; end ; i = false ;
30411: LD_ADDR_VAR 0 2
30415: PUSH
30416: LD_INT 0
30418: ST_TO_ADDR
// if IsOk ( ai_depot [ base ] ) then
30419: LD_EXP 35
30423: PUSH
30424: LD_VAR 0 7
30428: ARRAY
30429: PPUSH
30430: CALL_OW 302
30434: IFFALSE 30474
// if GetEnergy ( GetBase ( ai_depot [ base ] ) ) [ 4 ] > 0 then
30436: LD_EXP 35
30440: PUSH
30441: LD_VAR 0 7
30445: ARRAY
30446: PPUSH
30447: CALL_OW 274
30451: PPUSH
30452: CALL_OW 278
30456: PUSH
30457: LD_INT 4
30459: ARRAY
30460: PUSH
30461: LD_INT 0
30463: GREATER
30464: IFFALSE 30474
// i = true ;
30466: LD_ADDR_VAR 0 2
30470: PUSH
30471: LD_INT 1
30473: ST_TO_ADDR
// if i then
30474: LD_VAR 0 2
30478: IFFALSE 30498
// bunkers = ai_bunkers [ base ] else
30480: LD_ADDR_VAR 0 10
30484: PUSH
30485: LD_EXP 39
30489: PUSH
30490: LD_VAR 0 7
30494: ARRAY
30495: ST_TO_ADDR
30496: GO 30559
// begin bunkers = [ ] ;
30498: LD_ADDR_VAR 0 10
30502: PUSH
30503: EMPTY
30504: ST_TO_ADDR
// for i in ai_bunkers [ base ] do
30505: LD_ADDR_VAR 0 2
30509: PUSH
30510: LD_EXP 39
30514: PUSH
30515: LD_VAR 0 7
30519: ARRAY
30520: PUSH
30521: FOR_IN
30522: IFFALSE 30557
// if GetBType ( i ) = b_breastwork then
30524: LD_VAR 0 2
30528: PPUSH
30529: CALL_OW 266
30533: PUSH
30534: LD_INT 31
30536: EQUAL
30537: IFFALSE 30555
// bunkers = bunkers ^ i ;
30539: LD_ADDR_VAR 0 10
30543: PUSH
30544: LD_VAR 0 10
30548: PUSH
30549: LD_VAR 0 2
30553: ADD
30554: ST_TO_ADDR
30555: GO 30521
30557: POP
30558: POP
// end ; buildings_list = [ ] ;
30559: LD_ADDR_VAR 0 4
30563: PUSH
30564: EMPTY
30565: ST_TO_ADDR
// for i in bunkers do
30566: LD_ADDR_VAR 0 2
30570: PUSH
30571: LD_VAR 0 10
30575: PUSH
30576: FOR_IN
30577: IFFALSE 30640
// begin temp_unit = UnitsInside ( i ) ;
30579: LD_ADDR_VAR 0 6
30583: PUSH
30584: LD_VAR 0 2
30588: PPUSH
30589: CALL_OW 313
30593: ST_TO_ADDR
// if temp_unit = 0 then
30594: LD_VAR 0 6
30598: PUSH
30599: LD_INT 0
30601: EQUAL
30602: IFFALSE 30622
// buildings_list = buildings_list ^ i else
30604: LD_ADDR_VAR 0 4
30608: PUSH
30609: LD_VAR 0 4
30613: PUSH
30614: LD_VAR 0 2
30618: ADD
30619: ST_TO_ADDR
30620: GO 30638
// soldiers_list = soldiers_list diff temp_unit ;
30622: LD_ADDR_VAR 0 5
30626: PUSH
30627: LD_VAR 0 5
30631: PUSH
30632: LD_VAR 0 6
30636: DIFF
30637: ST_TO_ADDR
// end ;
30638: GO 30576
30640: POP
30641: POP
// if buildings_list > 0 then
30642: LD_VAR 0 4
30646: PUSH
30647: LD_INT 0
30649: GREATER
30650: IFFALSE 31197
// begin if not under_attack then
30652: LD_VAR 0 11
30656: NOT
30657: IFFALSE 30727
// begin temp_list = [ ] ;
30659: LD_ADDR_VAR 0 3
30663: PUSH
30664: EMPTY
30665: ST_TO_ADDR
// for i in soldiers_list do
30666: LD_ADDR_VAR 0 2
30670: PUSH
30671: LD_VAR 0 5
30675: PUSH
30676: FOR_IN
30677: IFFALSE 30705
// temp_list = temp_list ^ GetSkill ( i , skill_combat ) ;
30679: LD_ADDR_VAR 0 3
30683: PUSH
30684: LD_VAR 0 3
30688: PUSH
30689: LD_VAR 0 2
30693: PPUSH
30694: LD_INT 1
30696: PPUSH
30697: CALL_OW 259
30701: ADD
30702: ST_TO_ADDR
30703: GO 30676
30705: POP
30706: POP
// soldiers_list = SortListByListDesc ( soldiers_list , temp_list ) ;
30707: LD_ADDR_VAR 0 5
30711: PUSH
30712: LD_VAR 0 5
30716: PPUSH
30717: LD_VAR 0 3
30721: PPUSH
30722: CALL_OW 77
30726: ST_TO_ADDR
// end ; special_units = UnitFilter ( soldiers_list , [ f_or , [ f_class , class_bazooker ] , [ f_class , class_sniper ] , [ f_class , class_mortar ] ] ) ;
30727: LD_ADDR_VAR 0 9
30731: PUSH
30732: LD_VAR 0 5
30736: PPUSH
30737: LD_INT 2
30739: PUSH
30740: LD_INT 25
30742: PUSH
30743: LD_INT 9
30745: PUSH
30746: EMPTY
30747: LIST
30748: LIST
30749: PUSH
30750: LD_INT 25
30752: PUSH
30753: LD_INT 5
30755: PUSH
30756: EMPTY
30757: LIST
30758: LIST
30759: PUSH
30760: LD_INT 25
30762: PUSH
30763: LD_INT 8
30765: PUSH
30766: EMPTY
30767: LIST
30768: LIST
30769: PUSH
30770: EMPTY
30771: LIST
30772: LIST
30773: LIST
30774: LIST
30775: PPUSH
30776: CALL_OW 72
30780: ST_TO_ADDR
// soldiers_list = soldiers_list diff special_units ;
30781: LD_ADDR_VAR 0 5
30785: PUSH
30786: LD_VAR 0 5
30790: PUSH
30791: LD_VAR 0 9
30795: DIFF
30796: ST_TO_ADDR
// for i = 1 to buildings_list do
30797: LD_ADDR_VAR 0 2
30801: PUSH
30802: DOUBLE
30803: LD_INT 1
30805: DEC
30806: ST_TO_ADDR
30807: LD_VAR 0 4
30811: PUSH
30812: FOR_TO
30813: IFFALSE 31193
// begin if soldiers_list = 0 then
30815: LD_VAR 0 5
30819: PUSH
30820: LD_INT 0
30822: EQUAL
30823: IFFALSE 30854
// begin if special_units = 0 then
30825: LD_VAR 0 9
30829: PUSH
30830: LD_INT 0
30832: EQUAL
30833: IFFALSE 30837
// break ;
30835: GO 31193
// soldiers_list = special_units ;
30837: LD_ADDR_VAR 0 5
30841: PUSH
30842: LD_VAR 0 9
30846: ST_TO_ADDR
// special_units = [ ] ;
30847: LD_ADDR_VAR 0 9
30851: PUSH
30852: EMPTY
30853: ST_TO_ADDR
// end ; if not under_attack then
30854: LD_VAR 0 11
30858: NOT
30859: IFFALSE 30924
// begin if GetBType ( buildings_list [ i ] ) = b_breastwork and special_units > 0 then
30861: LD_VAR 0 4
30865: PUSH
30866: LD_VAR 0 2
30870: ARRAY
30871: PPUSH
30872: CALL_OW 266
30876: PUSH
30877: LD_INT 31
30879: EQUAL
30880: PUSH
30881: LD_VAR 0 9
30885: PUSH
30886: LD_INT 0
30888: GREATER
30889: AND
30890: IFFALSE 30908
// temp_unit = special_units [ 1 ] else
30892: LD_ADDR_VAR 0 6
30896: PUSH
30897: LD_VAR 0 9
30901: PUSH
30902: LD_INT 1
30904: ARRAY
30905: ST_TO_ADDR
30906: GO 30922
// temp_unit = soldiers_list [ 1 ] ;
30908: LD_ADDR_VAR 0 6
30912: PUSH
30913: LD_VAR 0 5
30917: PUSH
30918: LD_INT 1
30920: ARRAY
30921: ST_TO_ADDR
// end else
30922: GO 31053
// begin if GetBType ( buildings_list [ i ] ) = b_breastwork and special_units > 0 then
30924: LD_VAR 0 4
30928: PUSH
30929: LD_VAR 0 2
30933: ARRAY
30934: PPUSH
30935: CALL_OW 266
30939: PUSH
30940: LD_INT 31
30942: EQUAL
30943: PUSH
30944: LD_VAR 0 9
30948: PUSH
30949: LD_INT 0
30951: GREATER
30952: AND
30953: IFFALSE 30967
// temp_list_2 = special_units else
30955: LD_ADDR_VAR 0 14
30959: PUSH
30960: LD_VAR 0 9
30964: ST_TO_ADDR
30965: GO 30977
// temp_list_2 = soldiers_list ;
30967: LD_ADDR_VAR 0 14
30971: PUSH
30972: LD_VAR 0 5
30976: ST_TO_ADDR
// temp_list = [ ] ;
30977: LD_ADDR_VAR 0 3
30981: PUSH
30982: EMPTY
30983: ST_TO_ADDR
// for j in temp_list_2 do
30984: LD_ADDR_VAR 0 12
30988: PUSH
30989: LD_VAR 0 14
30993: PUSH
30994: FOR_IN
30995: IFFALSE 31031
// temp_list = temp_list ^ GetDistUnits ( j , buildings_list [ i ] ) ;
30997: LD_ADDR_VAR 0 3
31001: PUSH
31002: LD_VAR 0 3
31006: PUSH
31007: LD_VAR 0 12
31011: PPUSH
31012: LD_VAR 0 4
31016: PUSH
31017: LD_VAR 0 2
31021: ARRAY
31022: PPUSH
31023: CALL_OW 296
31027: ADD
31028: ST_TO_ADDR
31029: GO 30994
31031: POP
31032: POP
// temp_unit = WorstFromListByList ( temp_list_2 , temp_list ) ;
31033: LD_ADDR_VAR 0 6
31037: PUSH
31038: LD_VAR 0 14
31042: PPUSH
31043: LD_VAR 0 3
31047: PPUSH
31048: CALL_OW 78
31052: ST_TO_ADDR
// end ; if IsOk ( buildings_list [ i ] ) then
31053: LD_VAR 0 4
31057: PUSH
31058: LD_VAR 0 2
31062: ARRAY
31063: PPUSH
31064: CALL_OW 302
31068: IFFALSE 31092
// ComEnterUnit ( temp_unit , buildings_list [ i ] ) else
31070: LD_VAR 0 6
31074: PPUSH
31075: LD_VAR 0 4
31079: PUSH
31080: LD_VAR 0 2
31084: ARRAY
31085: PPUSH
31086: CALL_OW 120
31090: GO 31159
// if GetDistUnits ( temp_unit , buildings_list [ i ] ) > 4 then
31092: LD_VAR 0 6
31096: PPUSH
31097: LD_VAR 0 4
31101: PUSH
31102: LD_VAR 0 2
31106: ARRAY
31107: PPUSH
31108: CALL_OW 296
31112: PUSH
31113: LD_INT 4
31115: GREATER
31116: IFFALSE 31159
// ComAgressiveMove ( temp_unit , GetX ( buildings_list [ i ] ) , GetY ( buildings_list [ i ] ) ) ;
31118: LD_VAR 0 6
31122: PPUSH
31123: LD_VAR 0 4
31127: PUSH
31128: LD_VAR 0 2
31132: ARRAY
31133: PPUSH
31134: CALL_OW 250
31138: PPUSH
31139: LD_VAR 0 4
31143: PUSH
31144: LD_VAR 0 2
31148: ARRAY
31149: PPUSH
31150: CALL_OW 251
31154: PPUSH
31155: CALL_OW 114
// soldiers_list = soldiers_list diff temp_unit ;
31159: LD_ADDR_VAR 0 5
31163: PUSH
31164: LD_VAR 0 5
31168: PUSH
31169: LD_VAR 0 6
31173: DIFF
31174: ST_TO_ADDR
// special_units = special_units diff temp_unit ;
31175: LD_ADDR_VAR 0 9
31179: PUSH
31180: LD_VAR 0 9
31184: PUSH
31185: LD_VAR 0 6
31189: DIFF
31190: ST_TO_ADDR
// end ;
31191: GO 30812
31193: POP
31194: POP
// end else
31195: GO 31204
// special_units = [ ] ;
31197: LD_ADDR_VAR 0 9
31201: PUSH
31202: EMPTY
31203: ST_TO_ADDR
// DistributeHumansToBuildings ( base , soldiers_list ^ special_units , UnitFilter ( ai_armouries [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , false , 6 , true , true ) ;
31204: LD_VAR 0 7
31208: PPUSH
31209: LD_VAR 0 5
31213: PUSH
31214: LD_VAR 0 9
31218: ADD
31219: PPUSH
31220: LD_EXP 38
31224: PUSH
31225: LD_VAR 0 7
31229: ARRAY
31230: PPUSH
31231: LD_INT 50
31233: PUSH
31234: EMPTY
31235: LIST
31236: PUSH
31237: LD_INT 3
31239: PUSH
31240: LD_INT 57
31242: PUSH
31243: EMPTY
31244: LIST
31245: PUSH
31246: EMPTY
31247: LIST
31248: LIST
31249: PUSH
31250: EMPTY
31251: LIST
31252: LIST
31253: PPUSH
31254: CALL_OW 72
31258: PPUSH
31259: LD_INT 0
31261: PPUSH
31262: LD_INT 6
31264: PPUSH
31265: LD_INT 1
31267: PPUSH
31268: LD_INT 1
31270: PPUSH
31271: CALL 35428 0 7
// end ;
31275: GO 29461
31277: POP
31278: POP
// enable ;
31279: ENABLE
// end ;
31280: PPOPN 14
31282: END
// every 0 0$1 + 0 0$0.3 do var target_hex , center_hexes , i , temp_list , k ;
31283: GO 31285
31285: DISABLE
31286: LD_INT 0
31288: PPUSH
31289: PPUSH
31290: PPUSH
31291: PPUSH
31292: PPUSH
// begin target_hex = [ ] ;
31293: LD_ADDR_VAR 0 1
31297: PUSH
31298: EMPTY
31299: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
31300: LD_INT 35
31302: PPUSH
31303: CALL_OW 67
// if IsDead ( farmer_mine_guy ) then
31307: LD_EXP 115
31311: PPUSH
31312: CALL_OW 301
31316: IFFALSE 31320
// exit ;
31318: GO 32314
// if GetLives ( farmer_mine_guy ) < 900 and farmer_mine_guy in ai_excepted_soldiers [ 3 ] and not farmer_mine_guy in ai_heal_these_humans [ 3 ] then
31320: LD_EXP 115
31324: PPUSH
31325: CALL_OW 256
31329: PUSH
31330: LD_INT 900
31332: LESS
31333: PUSH
31334: LD_EXP 115
31338: PUSH
31339: LD_EXP 34
31343: PUSH
31344: LD_INT 3
31346: ARRAY
31347: IN
31348: AND
31349: PUSH
31350: LD_EXP 115
31354: PUSH
31355: LD_EXP 57
31359: PUSH
31360: LD_INT 3
31362: ARRAY
31363: IN
31364: NOT
31365: AND
31366: IFFALSE 31411
// begin temp_list = ai_heal_these_humans [ 3 ] ^ farmer_mine_guy ;
31368: LD_ADDR_VAR 0 4
31372: PUSH
31373: LD_EXP 57
31377: PUSH
31378: LD_INT 3
31380: ARRAY
31381: PUSH
31382: LD_EXP 115
31386: ADD
31387: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , 3 , temp_list ) ;
31388: LD_ADDR_EXP 57
31392: PUSH
31393: LD_EXP 57
31397: PPUSH
31398: LD_INT 3
31400: PPUSH
31401: LD_VAR 0 4
31405: PPUSH
31406: CALL_OW 1
31410: ST_TO_ADDR
// end ; if farmer_defence_mines_hexes >= farmer_defence_num_mines or BaseUnderAttack ( 3 , - 1 ) or farmer_mine_guy in ai_heal_these_humans [ 3 ] then
31411: LD_EXP 116
31415: PUSH
31416: LD_EXP 114
31420: GREATEREQUAL
31421: PUSH
31422: LD_INT 3
31424: PPUSH
31425: LD_INT 1
31427: NEG
31428: PPUSH
31429: CALL 46094 0 2
31433: OR
31434: PUSH
31435: LD_EXP 115
31439: PUSH
31440: LD_EXP 57
31444: PUSH
31445: LD_INT 3
31447: ARRAY
31448: IN
31449: OR
31450: IFFALSE 31513
// begin if farmer_mine_guy in ai_excepted_soldiers [ 3 ] then
31452: LD_EXP 115
31456: PUSH
31457: LD_EXP 34
31461: PUSH
31462: LD_INT 3
31464: ARRAY
31465: IN
31466: IFFALSE 31511
// begin temp_list = ai_excepted_soldiers [ 3 ] diff farmer_mine_guy ;
31468: LD_ADDR_VAR 0 4
31472: PUSH
31473: LD_EXP 34
31477: PUSH
31478: LD_INT 3
31480: ARRAY
31481: PUSH
31482: LD_EXP 115
31486: DIFF
31487: ST_TO_ADDR
// ai_excepted_soldiers = Replace ( ai_excepted_soldiers , 3 , temp_list ) ;
31488: LD_ADDR_EXP 34
31492: PUSH
31493: LD_EXP 34
31497: PPUSH
31498: LD_INT 3
31500: PPUSH
31501: LD_VAR 0 4
31505: PPUSH
31506: CALL_OW 1
31510: ST_TO_ADDR
// end ; continue ;
31511: GO 31300
// end ; if target_hex = 0 then
31513: LD_VAR 0 1
31517: PUSH
31518: LD_INT 0
31520: EQUAL
31521: IFFALSE 31827
// begin center_hexes = farmer_defence_mines_centerhexes ;
31523: LD_ADDR_VAR 0 2
31527: PUSH
31528: LD_EXP 113
31532: ST_TO_ADDR
// for i in farmer_defence_mines_hexes do
31533: LD_ADDR_VAR 0 3
31537: PUSH
31538: LD_EXP 116
31542: PUSH
31543: FOR_IN
31544: IFFALSE 31653
// begin temp_list = [ ] ;
31546: LD_ADDR_VAR 0 4
31550: PUSH
31551: EMPTY
31552: ST_TO_ADDR
// for k in center_hexes do
31553: LD_ADDR_VAR 0 5
31557: PUSH
31558: LD_VAR 0 2
31562: PUSH
31563: FOR_IN
31564: IFFALSE 31620
// temp_list = temp_list ^ GetDistXY ( i [ 1 ] , i [ 2 ] , k [ 1 ] , k [ 2 ] ) ;
31566: LD_ADDR_VAR 0 4
31570: PUSH
31571: LD_VAR 0 4
31575: PUSH
31576: LD_VAR 0 3
31580: PUSH
31581: LD_INT 1
31583: ARRAY
31584: PPUSH
31585: LD_VAR 0 3
31589: PUSH
31590: LD_INT 2
31592: ARRAY
31593: PPUSH
31594: LD_VAR 0 5
31598: PUSH
31599: LD_INT 1
31601: ARRAY
31602: PPUSH
31603: LD_VAR 0 5
31607: PUSH
31608: LD_INT 2
31610: ARRAY
31611: PPUSH
31612: CALL_OW 298
31616: ADD
31617: ST_TO_ADDR
31618: GO 31563
31620: POP
31621: POP
// center_hexes = center_hexes diff [ WorstFromListByList ( center_hexes , temp_list ) ] ;
31622: LD_ADDR_VAR 0 2
31626: PUSH
31627: LD_VAR 0 2
31631: PUSH
31632: LD_VAR 0 2
31636: PPUSH
31637: LD_VAR 0 4
31641: PPUSH
31642: CALL_OW 78
31646: PUSH
31647: EMPTY
31648: LIST
31649: DIFF
31650: ST_TO_ADDR
// end ;
31651: GO 31543
31653: POP
31654: POP
// if center_hexes = 0 then
31655: LD_VAR 0 2
31659: PUSH
31660: LD_INT 0
31662: EQUAL
31663: IFFALSE 31667
// continue ;
31665: GO 31300
// k = Rand ( 1 , center_hexes ) ;
31667: LD_ADDR_VAR 0 5
31671: PUSH
31672: LD_INT 1
31674: PPUSH
31675: LD_VAR 0 2
31679: PPUSH
31680: CALL_OW 12
31684: ST_TO_ADDR
// k = center_hexes [ k ] ;
31685: LD_ADDR_VAR 0 5
31689: PUSH
31690: LD_VAR 0 2
31694: PUSH
31695: LD_VAR 0 5
31699: ARRAY
31700: ST_TO_ADDR
// temp_list = GetHexesNearHex ( k [ 1 ] , k [ 2 ] , 3 ) ;
31701: LD_ADDR_VAR 0 4
31705: PUSH
31706: LD_VAR 0 5
31710: PUSH
31711: LD_INT 1
31713: ARRAY
31714: PPUSH
31715: LD_VAR 0 5
31719: PUSH
31720: LD_INT 2
31722: ARRAY
31723: PPUSH
31724: LD_INT 3
31726: PPUSH
31727: CALL 21988 0 3
31731: ST_TO_ADDR
// repeat k = Rand ( 1 , temp_list ) ;
31732: LD_ADDR_VAR 0 5
31736: PUSH
31737: LD_INT 1
31739: PPUSH
31740: LD_VAR 0 4
31744: PPUSH
31745: CALL_OW 12
31749: ST_TO_ADDR
// if not temp_list [ k ] in farmer_defence_mines_hexes then
31750: LD_VAR 0 4
31754: PUSH
31755: LD_VAR 0 5
31759: ARRAY
31760: PUSH
31761: LD_EXP 116
31765: IN
31766: NOT
31767: IFFALSE 31771
// break ;
31769: GO 31801
// temp_list = Delete ( temp_list , k ) ;
31771: LD_ADDR_VAR 0 4
31775: PUSH
31776: LD_VAR 0 4
31780: PPUSH
31781: LD_VAR 0 5
31785: PPUSH
31786: CALL_OW 3
31790: ST_TO_ADDR
// until temp_list = 0 ;
31791: LD_VAR 0 4
31795: PUSH
31796: LD_INT 0
31798: EQUAL
31799: IFFALSE 31732
// if temp_list > 0 then
31801: LD_VAR 0 4
31805: PUSH
31806: LD_INT 0
31808: GREATER
31809: IFFALSE 31827
// target_hex = temp_list [ k ] ;
31811: LD_ADDR_VAR 0 1
31815: PUSH
31816: LD_VAR 0 4
31820: PUSH
31821: LD_VAR 0 5
31825: ARRAY
31826: ST_TO_ADDR
// end ; if target_hex = 0 then
31827: LD_VAR 0 1
31831: PUSH
31832: LD_INT 0
31834: EQUAL
31835: IFFALSE 31839
// continue ;
31837: GO 31300
// if not farmer_mine_guy in ai_excepted_soldiers [ 3 ] then
31839: LD_EXP 115
31843: PUSH
31844: LD_EXP 34
31848: PUSH
31849: LD_INT 3
31851: ARRAY
31852: IN
31853: NOT
31854: IFFALSE 31899
// begin temp_list = ai_excepted_soldiers [ 3 ] ^ farmer_mine_guy ;
31856: LD_ADDR_VAR 0 4
31860: PUSH
31861: LD_EXP 34
31865: PUSH
31866: LD_INT 3
31868: ARRAY
31869: PUSH
31870: LD_EXP 115
31874: ADD
31875: ST_TO_ADDR
// ai_excepted_soldiers = Replace ( ai_excepted_soldiers , 3 , temp_list ) ;
31876: LD_ADDR_EXP 34
31880: PUSH
31881: LD_EXP 34
31885: PPUSH
31886: LD_INT 3
31888: PPUSH
31889: LD_VAR 0 4
31893: PPUSH
31894: CALL_OW 1
31898: ST_TO_ADDR
// end ; if GetClass ( farmer_mine_guy ) <> class_soldier then
31899: LD_EXP 115
31903: PPUSH
31904: CALL_OW 257
31908: PUSH
31909: LD_INT 1
31911: NONEQUAL
31912: IFFALSE 32107
// begin case GetType ( IsInUnit ( farmer_mine_guy ) ) of unit_vehicle :
31914: LD_EXP 115
31918: PPUSH
31919: CALL_OW 310
31923: PPUSH
31924: CALL_OW 247
31928: PUSH
31929: LD_INT 2
31931: DOUBLE
31932: EQUAL
31933: IFTRUE 31937
31935: GO 31949
31937: POP
// ComExitVehicle ( farmer_mine_guy ) ; unit_building :
31938: LD_EXP 115
31942: PPUSH
31943: CALL_OW 121
31947: GO 32105
31949: LD_INT 3
31951: DOUBLE
31952: EQUAL
31953: IFTRUE 31957
31955: GO 32010
31957: POP
// begin if GetBType ( IsInUnit ( farmer_mine_guy ) ) in [ b_armoury , b_barracks ] then
31958: LD_EXP 115
31962: PPUSH
31963: CALL_OW 310
31967: PPUSH
31968: CALL_OW 266
31972: PUSH
31973: LD_INT 4
31975: PUSH
31976: LD_INT 5
31978: PUSH
31979: EMPTY
31980: LIST
31981: LIST
31982: IN
31983: IFFALSE 31999
// ComChangeProfession ( farmer_mine_guy , class_soldier ) else
31985: LD_EXP 115
31989: PPUSH
31990: LD_INT 1
31992: PPUSH
31993: CALL_OW 123
31997: GO 32008
// ComExitBuilding ( farmer_mine_guy ) ;
31999: LD_EXP 115
32003: PPUSH
32004: CALL_OW 122
// end ; else
32008: GO 32105
32010: POP
// begin k = 0 ;
32011: LD_ADDR_VAR 0 5
32015: PUSH
32016: LD_INT 0
32018: ST_TO_ADDR
// for i in ai_armouries [ 3 ] do
32019: LD_ADDR_VAR 0 3
32023: PUSH
32024: LD_EXP 38
32028: PUSH
32029: LD_INT 3
32031: ARRAY
32032: PUSH
32033: FOR_IN
32034: IFFALSE 32065
// if UnitsInside ( i ) < 6 then
32036: LD_VAR 0 3
32040: PPUSH
32041: CALL_OW 313
32045: PUSH
32046: LD_INT 6
32048: LESS
32049: IFFALSE 32063
// begin k = i ;
32051: LD_ADDR_VAR 0 5
32055: PUSH
32056: LD_VAR 0 3
32060: ST_TO_ADDR
// break ;
32061: GO 32065
// end ;
32063: GO 32033
32065: POP
32066: POP
// if k = 0 then
32067: LD_VAR 0 5
32071: PUSH
32072: LD_INT 0
32074: EQUAL
32075: IFFALSE 32091
// SetClass ( farmer_mine_guy , class_soldier ) else
32077: LD_EXP 115
32081: PPUSH
32082: LD_INT 1
32084: PPUSH
32085: CALL_OW 336
32089: GO 32105
// ComEnterUnit ( farmer_mine_guy , k ) ;
32091: LD_EXP 115
32095: PPUSH
32096: LD_VAR 0 5
32100: PPUSH
32101: CALL_OW 120
// end ; end ; end else
32105: GO 32310
// begin temp_list = MineOfUnit ( farmer_mine_guy ) ;
32107: LD_ADDR_VAR 0 4
32111: PUSH
32112: LD_EXP 115
32116: PPUSH
32117: CALL_OW 459
32121: ST_TO_ADDR
// if temp_list = 0 then
32122: LD_VAR 0 4
32126: PUSH
32127: LD_INT 0
32129: EQUAL
32130: IFFALSE 32226
// begin if GetDistUnitXY ( farmer_mine_guy , target_hex [ 1 ] , target_hex [ 2 ] ) > 1 then
32132: LD_EXP 115
32136: PPUSH
32137: LD_VAR 0 1
32141: PUSH
32142: LD_INT 1
32144: ARRAY
32145: PPUSH
32146: LD_VAR 0 1
32150: PUSH
32151: LD_INT 2
32153: ARRAY
32154: PPUSH
32155: CALL_OW 297
32159: PUSH
32160: LD_INT 1
32162: GREATER
32163: IFFALSE 32194
// ComAgressiveMove ( farmer_mine_guy , target_hex [ 1 ] , target_hex [ 2 ] ) else
32165: LD_EXP 115
32169: PPUSH
32170: LD_VAR 0 1
32174: PUSH
32175: LD_INT 1
32177: ARRAY
32178: PPUSH
32179: LD_VAR 0 1
32183: PUSH
32184: LD_INT 2
32186: ARRAY
32187: PPUSH
32188: CALL_OW 114
32192: GO 32224
// ComPlaceRemoteCharge ( farmer_mine_guy , target_hex [ 1 ] , target_hex [ 2 ] , 0 ) ;
32194: LD_EXP 115
32198: PPUSH
32199: LD_VAR 0 1
32203: PUSH
32204: LD_INT 1
32206: ARRAY
32207: PPUSH
32208: LD_VAR 0 1
32212: PUSH
32213: LD_INT 2
32215: ARRAY
32216: PPUSH
32217: LD_INT 0
32219: PPUSH
32220: CALL_OW 133
// end else
32224: GO 32310
// begin PlaceMine ( temp_list [ 1 ] , temp_list [ 2 ] , mines_side , 0 ) ;
32226: LD_VAR 0 4
32230: PUSH
32231: LD_INT 1
32233: ARRAY
32234: PPUSH
32235: LD_VAR 0 4
32239: PUSH
32240: LD_INT 2
32242: ARRAY
32243: PPUSH
32244: LD_EXP 7
32248: PPUSH
32249: LD_INT 0
32251: PPUSH
32252: CALL_OW 454
// farmer_defence_mines_hexes = farmer_defence_mines_hexes ^ [ temp_list ] ;
32256: LD_ADDR_EXP 116
32260: PUSH
32261: LD_EXP 116
32265: PUSH
32266: LD_VAR 0 4
32270: PUSH
32271: EMPTY
32272: LIST
32273: ADD
32274: ST_TO_ADDR
// all_mines_hexes = all_mines_hexes ^ [ temp_list ] ;
32275: LD_ADDR_EXP 112
32279: PUSH
32280: LD_EXP 112
32284: PUSH
32285: LD_VAR 0 4
32289: PUSH
32290: EMPTY
32291: LIST
32292: ADD
32293: ST_TO_ADDR
// RemoveMineOfUnit ( farmer_mine_guy ) ;
32294: LD_EXP 115
32298: PPUSH
32299: CALL_OW 460
// target_hex = [ ] ;
32303: LD_ADDR_VAR 0 1
32307: PUSH
32308: EMPTY
32309: ST_TO_ADDR
// end ; end ; until false ;
32310: LD_INT 0
32312: IFFALSE 31300
// end ;
32314: PPOPN 5
32316: END
// every 0 0$1 + 0 0$0.2 do var i , un ;
32317: GO 32319
32319: DISABLE
32320: LD_INT 0
32322: PPUSH
32323: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
32324: LD_INT 18
32326: PPUSH
32327: CALL_OW 67
// i = 1 ;
32331: LD_ADDR_VAR 0 1
32335: PUSH
32336: LD_INT 1
32338: ST_TO_ADDR
// while i <= all_mines_hexes do
32339: LD_VAR 0 1
32343: PUSH
32344: LD_EXP 112
32348: LESSEQUAL
32349: IFFALSE 32716
// begin un = HexInfo ( all_mines_hexes [ i ] [ 1 ] , all_mines_hexes [ i ] [ 2 ] ) ;
32351: LD_ADDR_VAR 0 2
32355: PUSH
32356: LD_EXP 112
32360: PUSH
32361: LD_VAR 0 1
32365: ARRAY
32366: PUSH
32367: LD_INT 1
32369: ARRAY
32370: PPUSH
32371: LD_EXP 112
32375: PUSH
32376: LD_VAR 0 1
32380: ARRAY
32381: PUSH
32382: LD_INT 2
32384: ARRAY
32385: PPUSH
32386: CALL_OW 428
32390: ST_TO_ADDR
// if un <= 0 then
32391: LD_VAR 0 2
32395: PUSH
32396: LD_INT 0
32398: LESSEQUAL
32399: IFFALSE 32417
// begin i = i + 1 ;
32401: LD_ADDR_VAR 0 1
32405: PUSH
32406: LD_VAR 0 1
32410: PUSH
32411: LD_INT 1
32413: PLUS
32414: ST_TO_ADDR
// continue ;
32415: GO 32339
// end ; if GetSide ( un ) = you or not all_mines_hexes [ i ] in farmer_defence_mines_hexes then
32417: LD_VAR 0 2
32421: PPUSH
32422: CALL_OW 255
32426: PUSH
32427: LD_EXP 2
32431: EQUAL
32432: PUSH
32433: LD_EXP 112
32437: PUSH
32438: LD_VAR 0 1
32442: ARRAY
32443: PUSH
32444: LD_EXP 116
32448: IN
32449: NOT
32450: OR
32451: IFFALSE 32700
// begin LaunchMineAtPos ( all_mines_hexes [ i ] [ 1 ] , all_mines_hexes [ i ] [ 2 ] , mines_side ) ;
32453: LD_EXP 112
32457: PUSH
32458: LD_VAR 0 1
32462: ARRAY
32463: PUSH
32464: LD_INT 1
32466: ARRAY
32467: PPUSH
32468: LD_EXP 112
32472: PUSH
32473: LD_VAR 0 1
32477: ARRAY
32478: PUSH
32479: LD_INT 2
32481: ARRAY
32482: PPUSH
32483: LD_EXP 7
32487: PPUSH
32488: CALL_OW 456
// if InArea ( all_mines_hexes [ i ] [ 1 ] , all_mines_hexes [ i ] [ 2 ] , mine_area_ru_north_2 ) or InArea ( all_mines_hexes [ i ] [ 1 ] , all_mines_hexes [ i ] [ 2 ] , mine_area_ru_south_2 ) then
32492: LD_EXP 112
32496: PUSH
32497: LD_VAR 0 1
32501: ARRAY
32502: PUSH
32503: LD_INT 1
32505: ARRAY
32506: PPUSH
32507: LD_EXP 112
32511: PUSH
32512: LD_VAR 0 1
32516: ARRAY
32517: PUSH
32518: LD_INT 2
32520: ARRAY
32521: PPUSH
32522: LD_INT 20
32524: PPUSH
32525: CALL_OW 309
32529: PUSH
32530: LD_EXP 112
32534: PUSH
32535: LD_VAR 0 1
32539: ARRAY
32540: PUSH
32541: LD_INT 1
32543: ARRAY
32544: PPUSH
32545: LD_EXP 112
32549: PUSH
32550: LD_VAR 0 1
32554: ARRAY
32555: PUSH
32556: LD_INT 2
32558: ARRAY
32559: PPUSH
32560: LD_INT 29
32562: PPUSH
32563: CALL_OW 309
32567: OR
32568: IFFALSE 32581
// begin KillUnit ( un ) ;
32570: LD_VAR 0 2
32574: PPUSH
32575: CALL_OW 66
// end else
32579: GO 32653
// if GetLives ( un ) > [ 0 , 150 , 300 ] [ difficulty ] then
32581: LD_VAR 0 2
32585: PPUSH
32586: CALL_OW 256
32590: PUSH
32591: LD_INT 0
32593: PUSH
32594: LD_INT 150
32596: PUSH
32597: LD_INT 300
32599: PUSH
32600: EMPTY
32601: LIST
32602: LIST
32603: LIST
32604: PUSH
32605: LD_OWVAR 67
32609: ARRAY
32610: GREATER
32611: IFFALSE 32653
// SetLives ( un , GetLives ( un ) - [ 0 , 150 , 300 ] [ difficulty ] ) ;
32613: LD_VAR 0 2
32617: PPUSH
32618: LD_VAR 0 2
32622: PPUSH
32623: CALL_OW 256
32627: PUSH
32628: LD_INT 0
32630: PUSH
32631: LD_INT 150
32633: PUSH
32634: LD_INT 300
32636: PUSH
32637: EMPTY
32638: LIST
32639: LIST
32640: LIST
32641: PUSH
32642: LD_OWVAR 67
32646: ARRAY
32647: MINUS
32648: PPUSH
32649: CALL_OW 234
// farmer_defence_mines_hexes = farmer_defence_mines_hexes diff [ all_mines_hexes [ i ] ] ;
32653: LD_ADDR_EXP 116
32657: PUSH
32658: LD_EXP 116
32662: PUSH
32663: LD_EXP 112
32667: PUSH
32668: LD_VAR 0 1
32672: ARRAY
32673: PUSH
32674: EMPTY
32675: LIST
32676: DIFF
32677: ST_TO_ADDR
// all_mines_hexes = Delete ( all_mines_hexes , i ) ;
32678: LD_ADDR_EXP 112
32682: PUSH
32683: LD_EXP 112
32687: PPUSH
32688: LD_VAR 0 1
32692: PPUSH
32693: CALL_OW 3
32697: ST_TO_ADDR
// continue ;
32698: GO 32339
// end ; i = i + 1 ;
32700: LD_ADDR_VAR 0 1
32704: PUSH
32705: LD_VAR 0 1
32709: PUSH
32710: LD_INT 1
32712: PLUS
32713: ST_TO_ADDR
// end ;
32714: GO 32339
// until false ;
32716: LD_INT 0
32718: IFFALSE 32324
// end ;
32720: PPOPN 2
32722: END
// every 0 0$1 + 0 0$0.1 do var side , base , i , temp_list , un1 , temp_list_2 , temp_value , val , lapsers ;
32723: GO 32725
32725: DISABLE
32726: LD_INT 0
32728: PPUSH
32729: PPUSH
32730: PPUSH
32731: PPUSH
32732: PPUSH
32733: PPUSH
32734: PPUSH
32735: PPUSH
32736: PPUSH
// begin repeat wait ( 0 0$1 ) ;
32737: LD_INT 35
32739: PPUSH
32740: CALL_OW 67
// for base in ai_bases do
32744: LD_ADDR_VAR 0 2
32748: PUSH
32749: LD_EXP 25
32753: PUSH
32754: FOR_IN
32755: IFFALSE 33467
// begin if base in [ 3 ] then
32757: LD_VAR 0 2
32761: PUSH
32762: LD_INT 3
32764: PUSH
32765: EMPTY
32766: LIST
32767: IN
32768: IFFALSE 32772
// continue ;
32770: GO 32754
// side = GetBaseSide ( base ) ;
32772: LD_ADDR_VAR 0 1
32776: PUSH
32777: LD_VAR 0 2
32781: PPUSH
32782: CALL 27103 0 1
32786: ST_TO_ADDR
// lapsers = [ ] ;
32787: LD_ADDR_VAR 0 9
32791: PUSH
32792: EMPTY
32793: ST_TO_ADDR
// val = false ;
32794: LD_ADDR_VAR 0 8
32798: PUSH
32799: LD_INT 0
32801: ST_TO_ADDR
// if IsOk ( ai_depot [ base ] ) then
32802: LD_EXP 35
32806: PUSH
32807: LD_VAR 0 2
32811: ARRAY
32812: PPUSH
32813: CALL_OW 302
32817: IFFALSE 32857
// if GetEnergy ( GetBase ( ai_depot [ base ] ) ) [ 4 ] > 0 then
32819: LD_EXP 35
32823: PUSH
32824: LD_VAR 0 2
32828: ARRAY
32829: PPUSH
32830: CALL_OW 274
32834: PPUSH
32835: CALL_OW 278
32839: PUSH
32840: LD_INT 4
32842: ARRAY
32843: PUSH
32844: LD_INT 0
32846: GREATER
32847: IFFALSE 32857
// val = true ;
32849: LD_ADDR_VAR 0 8
32853: PUSH
32854: LD_INT 1
32856: ST_TO_ADDR
// if val then
32857: LD_VAR 0 8
32861: IFFALSE 32970
// for i in ai_bunkers [ base ] ^ ai_turrets [ base ] do
32863: LD_ADDR_VAR 0 3
32867: PUSH
32868: LD_EXP 39
32872: PUSH
32873: LD_VAR 0 2
32877: ARRAY
32878: PUSH
32879: LD_EXP 40
32883: PUSH
32884: LD_VAR 0 2
32888: ARRAY
32889: ADD
32890: PUSH
32891: FOR_IN
32892: IFFALSE 32968
// if GetBWeapon ( i ) = ru_time_lapser and IsOk ( i ) and ( UnitsInside ( i ) > 0 or GetBType ( i ) = b_turret ) then
32894: LD_VAR 0 3
32898: PPUSH
32899: CALL_OW 269
32903: PUSH
32904: LD_INT 49
32906: EQUAL
32907: PUSH
32908: LD_VAR 0 3
32912: PPUSH
32913: CALL_OW 302
32917: AND
32918: PUSH
32919: LD_VAR 0 3
32923: PPUSH
32924: CALL_OW 313
32928: PUSH
32929: LD_INT 0
32931: GREATER
32932: PUSH
32933: LD_VAR 0 3
32937: PPUSH
32938: CALL_OW 266
32942: PUSH
32943: LD_INT 33
32945: EQUAL
32946: OR
32947: AND
32948: IFFALSE 32966
// lapsers = lapsers ^ i ;
32950: LD_ADDR_VAR 0 9
32954: PUSH
32955: LD_VAR 0 9
32959: PUSH
32960: LD_VAR 0 3
32964: ADD
32965: ST_TO_ADDR
32966: GO 32891
32968: POP
32969: POP
// for i in ai_soldiers [ base ] diff ai_heal_these_humans [ base ] do
32970: LD_ADDR_VAR 0 3
32974: PUSH
32975: LD_EXP 26
32979: PUSH
32980: LD_VAR 0 2
32984: ARRAY
32985: PUSH
32986: LD_EXP 57
32990: PUSH
32991: LD_VAR 0 2
32995: ARRAY
32996: DIFF
32997: PUSH
32998: FOR_IN
32999: IFFALSE 33463
// if GetClass ( i ) = class_bazooker then
33001: LD_VAR 0 3
33005: PPUSH
33006: CALL_OW 257
33010: PUSH
33011: LD_INT 9
33013: EQUAL
33014: IFFALSE 33461
// begin temp_list = GetTaskList ( i ) ;
33016: LD_ADDR_VAR 0 4
33020: PUSH
33021: LD_VAR 0 3
33025: PPUSH
33026: CALL_OW 437
33030: ST_TO_ADDR
// if temp_list > 0 then
33031: LD_VAR 0 4
33035: PUSH
33036: LD_INT 0
33038: GREATER
33039: IFFALSE 33079
// if temp_list [ 1 ] [ 1 ] = & or temp_list [ 1 ] [ 1 ] = % then
33041: LD_VAR 0 4
33045: PUSH
33046: LD_INT 1
33048: ARRAY
33049: PUSH
33050: LD_INT 1
33052: ARRAY
33053: PUSH
33054: LD_STRING &
33056: EQUAL
33057: PUSH
33058: LD_VAR 0 4
33062: PUSH
33063: LD_INT 1
33065: ARRAY
33066: PUSH
33067: LD_INT 1
33069: ARRAY
33070: PUSH
33071: LD_STRING %
33073: EQUAL
33074: OR
33075: IFFALSE 33079
// continue ;
33077: GO 32998
// un1 = Attacks ( i ) ;
33079: LD_ADDR_VAR 0 5
33083: PUSH
33084: LD_VAR 0 3
33088: PPUSH
33089: CALL_OW 320
33093: ST_TO_ADDR
// if un1 > 0 and DangerousUnits ( [ un1 ] ) > 0 then
33094: LD_VAR 0 5
33098: PUSH
33099: LD_INT 0
33101: GREATER
33102: PUSH
33103: LD_VAR 0 5
33107: PUSH
33108: EMPTY
33109: LIST
33110: PPUSH
33111: CALL 69894 0 1
33115: PUSH
33116: LD_INT 0
33118: GREATER
33119: AND
33120: IFFALSE 33461
// begin temp_list_2 = [ GetX ( un1 ) , GetY ( un1 ) ] ;
33122: LD_ADDR_VAR 0 6
33126: PUSH
33127: LD_VAR 0 5
33131: PPUSH
33132: CALL_OW 250
33136: PUSH
33137: LD_VAR 0 5
33141: PPUSH
33142: CALL_OW 251
33146: PUSH
33147: EMPTY
33148: LIST
33149: LIST
33150: ST_TO_ADDR
// temp_value = false ;
33151: LD_ADDR_VAR 0 7
33155: PUSH
33156: LD_INT 0
33158: ST_TO_ADDR
// for val in ai_time_shift_hexes [ base ] ^ ai_time_shift_hexes_underway [ base ] do
33159: LD_ADDR_VAR 0 8
33163: PUSH
33164: LD_EXP 87
33168: PUSH
33169: LD_VAR 0 2
33173: ARRAY
33174: PUSH
33175: LD_EXP 88
33179: PUSH
33180: LD_VAR 0 2
33184: ARRAY
33185: ADD
33186: PUSH
33187: FOR_IN
33188: IFFALSE 33260
// if GetDistXY ( temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , val [ 1 ] , val [ 2 ] ) <= ai_time_shift_data [ side ] [ 2 ] then
33190: LD_VAR 0 6
33194: PUSH
33195: LD_INT 1
33197: ARRAY
33198: PPUSH
33199: LD_VAR 0 6
33203: PUSH
33204: LD_INT 2
33206: ARRAY
33207: PPUSH
33208: LD_VAR 0 8
33212: PUSH
33213: LD_INT 1
33215: ARRAY
33216: PPUSH
33217: LD_VAR 0 8
33221: PUSH
33222: LD_INT 2
33224: ARRAY
33225: PPUSH
33226: CALL_OW 298
33230: PUSH
33231: LD_EXP 86
33235: PUSH
33236: LD_VAR 0 1
33240: ARRAY
33241: PUSH
33242: LD_INT 2
33244: ARRAY
33245: LESSEQUAL
33246: IFFALSE 33258
// begin temp_value = true ;
33248: LD_ADDR_VAR 0 7
33252: PUSH
33253: LD_INT 1
33255: ST_TO_ADDR
// break ;
33256: GO 33260
// end ;
33258: GO 33187
33260: POP
33261: POP
// if not temp_value then
33262: LD_VAR 0 7
33266: NOT
33267: IFFALSE 33344
// for val in lapsers do
33269: LD_ADDR_VAR 0 8
33273: PUSH
33274: LD_VAR 0 9
33278: PUSH
33279: FOR_IN
33280: IFFALSE 33342
// if GetDistXY ( temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , GetX ( val ) , GetY ( val ) ) <= 11 then
33282: LD_VAR 0 6
33286: PUSH
33287: LD_INT 1
33289: ARRAY
33290: PPUSH
33291: LD_VAR 0 6
33295: PUSH
33296: LD_INT 2
33298: ARRAY
33299: PPUSH
33300: LD_VAR 0 8
33304: PPUSH
33305: CALL_OW 250
33309: PPUSH
33310: LD_VAR 0 8
33314: PPUSH
33315: CALL_OW 251
33319: PPUSH
33320: CALL_OW 298
33324: PUSH
33325: LD_INT 11
33327: LESSEQUAL
33328: IFFALSE 33340
// begin temp_value = true ;
33330: LD_ADDR_VAR 0 7
33334: PUSH
33335: LD_INT 1
33337: ST_TO_ADDR
// break ;
33338: GO 33342
// end ;
33340: GO 33279
33342: POP
33343: POP
// if not temp_value then
33344: LD_VAR 0 7
33348: NOT
33349: IFFALSE 33461
// begin ComTimeShift ( i , temp_list_2 [ 1 ] , temp_list_2 [ 2 ] ) ;
33351: LD_VAR 0 3
33355: PPUSH
33356: LD_VAR 0 6
33360: PUSH
33361: LD_INT 1
33363: ARRAY
33364: PPUSH
33365: LD_VAR 0 6
33369: PUSH
33370: LD_INT 2
33372: ARRAY
33373: PPUSH
33374: CALL_OW 154
// temp_list = Insert ( ai_time_shift_hexes_underway [ base ] , 1 , [ temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , i , tick ] ) ;
33378: LD_ADDR_VAR 0 4
33382: PUSH
33383: LD_EXP 88
33387: PUSH
33388: LD_VAR 0 2
33392: ARRAY
33393: PPUSH
33394: LD_INT 1
33396: PPUSH
33397: LD_VAR 0 6
33401: PUSH
33402: LD_INT 1
33404: ARRAY
33405: PUSH
33406: LD_VAR 0 6
33410: PUSH
33411: LD_INT 2
33413: ARRAY
33414: PUSH
33415: LD_VAR 0 3
33419: PUSH
33420: LD_OWVAR 1
33424: PUSH
33425: EMPTY
33426: LIST
33427: LIST
33428: LIST
33429: LIST
33430: PPUSH
33431: CALL_OW 2
33435: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
33436: LD_ADDR_EXP 88
33440: PUSH
33441: LD_EXP 88
33445: PPUSH
33446: LD_VAR 0 2
33450: PPUSH
33451: LD_VAR 0 4
33455: PPUSH
33456: CALL_OW 1
33460: ST_TO_ADDR
// end ; end ; end ;
33461: GO 32998
33463: POP
33464: POP
// end ;
33465: GO 32754
33467: POP
33468: POP
// until false ;
33469: LD_INT 0
33471: IFFALSE 32737
// end ;
33473: PPOPN 9
33475: END
// every 0 0$1 + 0 0$0.2 do var base , i , temp_list , un1 , temp_list_2 , temp_value ; var shooting_delay ;
33476: GO 33478
33478: DISABLE
33479: LD_INT 0
33481: PPUSH
33482: PPUSH
33483: PPUSH
33484: PPUSH
33485: PPUSH
33486: PPUSH
33487: PPUSH
// begin shooting_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
33488: LD_ADDR_VAR 0 7
33492: PUSH
33493: LD_INT 0
33495: PUSH
33496: LD_INT 0
33498: PUSH
33499: LD_INT 0
33501: PUSH
33502: EMPTY
33503: LIST
33504: LIST
33505: LIST
33506: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
33507: LD_INT 35
33509: PPUSH
33510: CALL_OW 67
// for base in ai_bases do
33514: LD_ADDR_VAR 0 1
33518: PUSH
33519: LD_EXP 25
33523: PUSH
33524: FOR_IN
33525: IFFALSE 33993
// begin if base in [ 3 ] then
33527: LD_VAR 0 1
33531: PUSH
33532: LD_INT 3
33534: PUSH
33535: EMPTY
33536: LIST
33537: IN
33538: IFFALSE 33542
// continue ;
33540: GO 33524
// if shooting_delay [ base ] > 0 0$0 then
33542: LD_VAR 0 7
33546: PUSH
33547: LD_VAR 0 1
33551: ARRAY
33552: PUSH
33553: LD_INT 0
33555: GREATER
33556: IFFALSE 33595
// begin shooting_delay = Replace ( shooting_delay , base , shooting_delay [ base ] - 0 0$1 ) ;
33558: LD_ADDR_VAR 0 7
33562: PUSH
33563: LD_VAR 0 7
33567: PPUSH
33568: LD_VAR 0 1
33572: PPUSH
33573: LD_VAR 0 7
33577: PUSH
33578: LD_VAR 0 1
33582: ARRAY
33583: PUSH
33584: LD_INT 35
33586: MINUS
33587: PPUSH
33588: CALL_OW 1
33592: ST_TO_ADDR
// continue ;
33593: GO 33524
// end ; if Rand ( 1 , 15 ) > 1 then
33595: LD_INT 1
33597: PPUSH
33598: LD_INT 15
33600: PPUSH
33601: CALL_OW 12
33605: PUSH
33606: LD_INT 1
33608: GREATER
33609: IFFALSE 33613
// continue ;
33611: GO 33524
// temp_list = [ ] ;
33613: LD_ADDR_VAR 0 3
33617: PUSH
33618: EMPTY
33619: ST_TO_ADDR
// for i in ai_soldiers [ base ] diff ai_heal_these_humans [ base ] do
33620: LD_ADDR_VAR 0 2
33624: PUSH
33625: LD_EXP 26
33629: PUSH
33630: LD_VAR 0 1
33634: ARRAY
33635: PUSH
33636: LD_EXP 57
33640: PUSH
33641: LD_VAR 0 1
33645: ARRAY
33646: DIFF
33647: PUSH
33648: FOR_IN
33649: IFFALSE 33692
// if IsInUnit ( i ) in ai_armouries [ base ] then
33651: LD_VAR 0 2
33655: PPUSH
33656: CALL_OW 310
33660: PUSH
33661: LD_EXP 38
33665: PUSH
33666: LD_VAR 0 1
33670: ARRAY
33671: IN
33672: IFFALSE 33690
// temp_list = temp_list ^ i ;
33674: LD_ADDR_VAR 0 3
33678: PUSH
33679: LD_VAR 0 3
33683: PUSH
33684: LD_VAR 0 2
33688: ADD
33689: ST_TO_ADDR
33690: GO 33648
33692: POP
33693: POP
// for i in temp_list do
33694: LD_ADDR_VAR 0 2
33698: PUSH
33699: LD_VAR 0 3
33703: PUSH
33704: FOR_IN
33705: IFFALSE 33989
// if GetClass ( i ) = class_bazooker then
33707: LD_VAR 0 2
33711: PPUSH
33712: CALL_OW 257
33716: PUSH
33717: LD_INT 9
33719: EQUAL
33720: IFFALSE 33987
// begin temp_list = GetTaskList ( i ) ;
33722: LD_ADDR_VAR 0 3
33726: PUSH
33727: LD_VAR 0 2
33731: PPUSH
33732: CALL_OW 437
33736: ST_TO_ADDR
// if temp_list > 0 then
33737: LD_VAR 0 3
33741: PUSH
33742: LD_INT 0
33744: GREATER
33745: IFFALSE 33785
// if temp_list [ 1 ] [ 1 ] = & or temp_list [ 1 ] [ 1 ] = % then
33747: LD_VAR 0 3
33751: PUSH
33752: LD_INT 1
33754: ARRAY
33755: PUSH
33756: LD_INT 1
33758: ARRAY
33759: PUSH
33760: LD_STRING &
33762: EQUAL
33763: PUSH
33764: LD_VAR 0 3
33768: PUSH
33769: LD_INT 1
33771: ARRAY
33772: PUSH
33773: LD_INT 1
33775: ARRAY
33776: PUSH
33777: LD_STRING %
33779: EQUAL
33780: OR
33781: IFFALSE 33785
// continue ;
33783: GO 33704
// un1 = Attacks ( i ) ;
33785: LD_ADDR_VAR 0 4
33789: PUSH
33790: LD_VAR 0 2
33794: PPUSH
33795: CALL_OW 320
33799: ST_TO_ADDR
// if un1 > 0 and not IsInArea ( un1 , GetBaseArea ( base ) ) then
33800: LD_VAR 0 4
33804: PUSH
33805: LD_INT 0
33807: GREATER
33808: PUSH
33809: LD_VAR 0 4
33813: PPUSH
33814: LD_VAR 0 1
33818: PPUSH
33819: CALL 27032 0 1
33823: PPUSH
33824: CALL_OW 308
33828: NOT
33829: AND
33830: IFFALSE 33987
// begin temp_list_2 = [ GetX ( un1 ) , GetY ( un1 ) ] ;
33832: LD_ADDR_VAR 0 5
33836: PUSH
33837: LD_VAR 0 4
33841: PPUSH
33842: CALL_OW 250
33846: PUSH
33847: LD_VAR 0 4
33851: PPUSH
33852: CALL_OW 251
33856: PUSH
33857: EMPTY
33858: LIST
33859: LIST
33860: ST_TO_ADDR
// temp_value = AI_GetTurnDirection ( GetX ( i ) , GetY ( i ) , temp_list_2 [ 1 ] , temp_list_2 [ 2 ] ) ;
33861: LD_ADDR_VAR 0 6
33865: PUSH
33866: LD_VAR 0 2
33870: PPUSH
33871: CALL_OW 250
33875: PPUSH
33876: LD_VAR 0 2
33880: PPUSH
33881: CALL_OW 251
33885: PPUSH
33886: LD_VAR 0 5
33890: PUSH
33891: LD_INT 1
33893: ARRAY
33894: PPUSH
33895: LD_VAR 0 5
33899: PUSH
33900: LD_INT 2
33902: ARRAY
33903: PPUSH
33904: CALL 21168 0 4
33908: ST_TO_ADDR
// ComSpaceShift ( i , ShiftX ( temp_list_2 [ 1 ] , temp_value , 1 ) , ShiftY ( temp_list_2 [ 2 ] , temp_value , 1 ) ) ;
33909: LD_VAR 0 2
33913: PPUSH
33914: LD_VAR 0 5
33918: PUSH
33919: LD_INT 1
33921: ARRAY
33922: PPUSH
33923: LD_VAR 0 6
33927: PPUSH
33928: LD_INT 1
33930: PPUSH
33931: CALL_OW 272
33935: PPUSH
33936: LD_VAR 0 5
33940: PUSH
33941: LD_INT 2
33943: ARRAY
33944: PPUSH
33945: LD_VAR 0 6
33949: PPUSH
33950: LD_INT 1
33952: PPUSH
33953: CALL_OW 273
33957: PPUSH
33958: CALL_OW 153
// shooting_delay = Replace ( shooting_delay , base , 0 0$5 ) ;
33962: LD_ADDR_VAR 0 7
33966: PUSH
33967: LD_VAR 0 7
33971: PPUSH
33972: LD_VAR 0 1
33976: PPUSH
33977: LD_INT 175
33979: PPUSH
33980: CALL_OW 1
33984: ST_TO_ADDR
// break ;
33985: GO 33989
// end ; end ;
33987: GO 33704
33989: POP
33990: POP
// end ;
33991: GO 33524
33993: POP
33994: POP
// until false ;
33995: LD_INT 0
33997: IFFALSE 33507
// end ;
33999: PPOPN 7
34001: END
// every 0 0$1 do var base , side , val , temp_value , temp_list ;
34002: GO 34004
34004: DISABLE
34005: LD_INT 0
34007: PPUSH
34008: PPUSH
34009: PPUSH
34010: PPUSH
34011: PPUSH
// begin repeat wait ( 1 ) ;
34012: LD_INT 1
34014: PPUSH
34015: CALL_OW 67
// for base in ai_bases do
34019: LD_ADDR_VAR 0 1
34023: PUSH
34024: LD_EXP 25
34028: PUSH
34029: FOR_IN
34030: IFFALSE 34488
// begin if base in [ 3 ] then
34032: LD_VAR 0 1
34036: PUSH
34037: LD_INT 3
34039: PUSH
34040: EMPTY
34041: LIST
34042: IN
34043: IFFALSE 34047
// continue ;
34045: GO 34029
// side = GetBaseSide ( base ) ;
34047: LD_ADDR_VAR 0 2
34051: PUSH
34052: LD_VAR 0 1
34056: PPUSH
34057: CALL 27103 0 1
34061: ST_TO_ADDR
// val = 1 ;
34062: LD_ADDR_VAR 0 3
34066: PUSH
34067: LD_INT 1
34069: ST_TO_ADDR
// while val <= ai_time_shift_hexes_underway [ base ] do
34070: LD_VAR 0 3
34074: PUSH
34075: LD_EXP 88
34079: PUSH
34080: LD_VAR 0 1
34084: ARRAY
34085: LESSEQUAL
34086: IFFALSE 34486
// begin if tick = ai_time_shift_hexes_underway [ base ] [ val ] [ 4 ] then
34088: LD_OWVAR 1
34092: PUSH
34093: LD_EXP 88
34097: PUSH
34098: LD_VAR 0 1
34102: ARRAY
34103: PUSH
34104: LD_VAR 0 3
34108: ARRAY
34109: PUSH
34110: LD_INT 4
34112: ARRAY
34113: EQUAL
34114: IFFALSE 34132
// begin val = val + 1 ;
34116: LD_ADDR_VAR 0 3
34120: PUSH
34121: LD_VAR 0 3
34125: PUSH
34126: LD_INT 1
34128: PLUS
34129: ST_TO_ADDR
// continue ;
34130: GO 34070
// end ; temp_value = false ;
34132: LD_ADDR_VAR 0 4
34136: PUSH
34137: LD_INT 0
34139: ST_TO_ADDR
// temp_list = GetTaskList ( ai_time_shift_hexes_underway [ base ] [ val ] [ 3 ] ) ;
34140: LD_ADDR_VAR 0 5
34144: PUSH
34145: LD_EXP 88
34149: PUSH
34150: LD_VAR 0 1
34154: ARRAY
34155: PUSH
34156: LD_VAR 0 3
34160: ARRAY
34161: PUSH
34162: LD_INT 3
34164: ARRAY
34165: PPUSH
34166: CALL_OW 437
34170: ST_TO_ADDR
// if IsOk ( ai_time_shift_hexes_underway [ base ] [ val ] [ 3 ] ) then
34171: LD_EXP 88
34175: PUSH
34176: LD_VAR 0 1
34180: ARRAY
34181: PUSH
34182: LD_VAR 0 3
34186: ARRAY
34187: PUSH
34188: LD_INT 3
34190: ARRAY
34191: PPUSH
34192: CALL_OW 302
34196: IFFALSE 34247
// begin if temp_list = 0 then
34198: LD_VAR 0 5
34202: PUSH
34203: LD_INT 0
34205: EQUAL
34206: IFFALSE 34218
// temp_value = true else
34208: LD_ADDR_VAR 0 4
34212: PUSH
34213: LD_INT 1
34215: ST_TO_ADDR
34216: GO 34245
// if not temp_list [ 1 ] [ 1 ] = & then
34218: LD_VAR 0 5
34222: PUSH
34223: LD_INT 1
34225: ARRAY
34226: PUSH
34227: LD_INT 1
34229: ARRAY
34230: PUSH
34231: LD_STRING &
34233: EQUAL
34234: NOT
34235: IFFALSE 34245
// temp_value = true ;
34237: LD_ADDR_VAR 0 4
34241: PUSH
34242: LD_INT 1
34244: ST_TO_ADDR
// end else
34245: GO 34300
// begin temp_list = Delete ( ai_time_shift_hexes_underway [ base ] , val ) ;
34247: LD_ADDR_VAR 0 5
34251: PUSH
34252: LD_EXP 88
34256: PUSH
34257: LD_VAR 0 1
34261: ARRAY
34262: PPUSH
34263: LD_VAR 0 3
34267: PPUSH
34268: CALL_OW 3
34272: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
34273: LD_ADDR_EXP 88
34277: PUSH
34278: LD_EXP 88
34282: PPUSH
34283: LD_VAR 0 1
34287: PPUSH
34288: LD_VAR 0 5
34292: PPUSH
34293: CALL_OW 1
34297: ST_TO_ADDR
// continue ;
34298: GO 34070
// end ; if temp_value then
34300: LD_VAR 0 4
34304: IFFALSE 34470
// begin temp_list = Insert ( ai_time_shift_hexes [ base ] , 1 , [ ai_time_shift_hexes_underway [ base ] [ val ] [ 1 ] , ai_time_shift_hexes_underway [ base ] [ val ] [ 2 ] , ai_time_shift_data [ side ] [ 1 ] ] ) ;
34306: LD_ADDR_VAR 0 5
34310: PUSH
34311: LD_EXP 87
34315: PUSH
34316: LD_VAR 0 1
34320: ARRAY
34321: PPUSH
34322: LD_INT 1
34324: PPUSH
34325: LD_EXP 88
34329: PUSH
34330: LD_VAR 0 1
34334: ARRAY
34335: PUSH
34336: LD_VAR 0 3
34340: ARRAY
34341: PUSH
34342: LD_INT 1
34344: ARRAY
34345: PUSH
34346: LD_EXP 88
34350: PUSH
34351: LD_VAR 0 1
34355: ARRAY
34356: PUSH
34357: LD_VAR 0 3
34361: ARRAY
34362: PUSH
34363: LD_INT 2
34365: ARRAY
34366: PUSH
34367: LD_EXP 86
34371: PUSH
34372: LD_VAR 0 2
34376: ARRAY
34377: PUSH
34378: LD_INT 1
34380: ARRAY
34381: PUSH
34382: EMPTY
34383: LIST
34384: LIST
34385: LIST
34386: PPUSH
34387: CALL_OW 2
34391: ST_TO_ADDR
// ai_time_shift_hexes = Replace ( ai_time_shift_hexes , base , temp_list ) ;
34392: LD_ADDR_EXP 87
34396: PUSH
34397: LD_EXP 87
34401: PPUSH
34402: LD_VAR 0 1
34406: PPUSH
34407: LD_VAR 0 5
34411: PPUSH
34412: CALL_OW 1
34416: ST_TO_ADDR
// temp_list = Delete ( ai_time_shift_hexes_underway [ base ] , val ) ;
34417: LD_ADDR_VAR 0 5
34421: PUSH
34422: LD_EXP 88
34426: PUSH
34427: LD_VAR 0 1
34431: ARRAY
34432: PPUSH
34433: LD_VAR 0 3
34437: PPUSH
34438: CALL_OW 3
34442: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
34443: LD_ADDR_EXP 88
34447: PUSH
34448: LD_EXP 88
34452: PPUSH
34453: LD_VAR 0 1
34457: PPUSH
34458: LD_VAR 0 5
34462: PPUSH
34463: CALL_OW 1
34467: ST_TO_ADDR
// continue ;
34468: GO 34070
// end ; val = val + 1 ;
34470: LD_ADDR_VAR 0 3
34474: PUSH
34475: LD_VAR 0 3
34479: PUSH
34480: LD_INT 1
34482: PLUS
34483: ST_TO_ADDR
// end ;
34484: GO 34070
// end ;
34486: GO 34029
34488: POP
34489: POP
// until false ;
34490: LD_INT 0
34492: IFFALSE 34012
// end ;
34494: PPOPN 5
34496: END
// every 0 0$1 + 0 0$0.3 do var base , val , temp_list , time ;
34497: GO 34499
34499: DISABLE
34500: LD_INT 0
34502: PPUSH
34503: PPUSH
34504: PPUSH
34505: PPUSH
// begin repeat wait ( 0 0$1 ) ;
34506: LD_INT 35
34508: PPUSH
34509: CALL_OW 67
// for base in ai_bases do
34513: LD_ADDR_VAR 0 1
34517: PUSH
34518: LD_EXP 25
34522: PUSH
34523: FOR_IN
34524: IFFALSE 34771
// begin if base in [ 3 ] then
34526: LD_VAR 0 1
34530: PUSH
34531: LD_INT 3
34533: PUSH
34534: EMPTY
34535: LIST
34536: IN
34537: IFFALSE 34541
// continue ;
34539: GO 34523
// val = 1 ;
34541: LD_ADDR_VAR 0 2
34545: PUSH
34546: LD_INT 1
34548: ST_TO_ADDR
// while val <= ai_time_shift_hexes [ base ] do
34549: LD_VAR 0 2
34553: PUSH
34554: LD_EXP 87
34558: PUSH
34559: LD_VAR 0 1
34563: ARRAY
34564: LESSEQUAL
34565: IFFALSE 34769
// begin time = ai_time_shift_hexes [ base ] [ val ] [ 3 ] - 0 0$1 ;
34567: LD_ADDR_VAR 0 4
34571: PUSH
34572: LD_EXP 87
34576: PUSH
34577: LD_VAR 0 1
34581: ARRAY
34582: PUSH
34583: LD_VAR 0 2
34587: ARRAY
34588: PUSH
34589: LD_INT 3
34591: ARRAY
34592: PUSH
34593: LD_INT 35
34595: MINUS
34596: ST_TO_ADDR
// if time <= 0 0$0 then
34597: LD_VAR 0 4
34601: PUSH
34602: LD_INT 0
34604: LESSEQUAL
34605: IFFALSE 34662
// begin temp_list = Delete ( ai_time_shift_hexes [ base ] , val ) ;
34607: LD_ADDR_VAR 0 3
34611: PUSH
34612: LD_EXP 87
34616: PUSH
34617: LD_VAR 0 1
34621: ARRAY
34622: PPUSH
34623: LD_VAR 0 2
34627: PPUSH
34628: CALL_OW 3
34632: ST_TO_ADDR
// ai_time_shift_hexes = Replace ( ai_time_shift_hexes , base , temp_list ) ;
34633: LD_ADDR_EXP 87
34637: PUSH
34638: LD_EXP 87
34642: PPUSH
34643: LD_VAR 0 1
34647: PPUSH
34648: LD_VAR 0 3
34652: PPUSH
34653: CALL_OW 1
34657: ST_TO_ADDR
// continue ;
34658: GO 34549
// end else
34660: GO 34753
// begin temp_list = Replace ( ai_time_shift_hexes [ base ] [ val ] , 3 , time ) ;
34662: LD_ADDR_VAR 0 3
34666: PUSH
34667: LD_EXP 87
34671: PUSH
34672: LD_VAR 0 1
34676: ARRAY
34677: PUSH
34678: LD_VAR 0 2
34682: ARRAY
34683: PPUSH
34684: LD_INT 3
34686: PPUSH
34687: LD_VAR 0 4
34691: PPUSH
34692: CALL_OW 1
34696: ST_TO_ADDR
// temp_list = Replace ( ai_time_shift_hexes [ base ] , val , temp_list ) ;
34697: LD_ADDR_VAR 0 3
34701: PUSH
34702: LD_EXP 87
34706: PUSH
34707: LD_VAR 0 1
34711: ARRAY
34712: PPUSH
34713: LD_VAR 0 2
34717: PPUSH
34718: LD_VAR 0 3
34722: PPUSH
34723: CALL_OW 1
34727: ST_TO_ADDR
// ai_time_shift_hexes = Replace ( ai_time_shift_hexes , base , temp_list ) ;
34728: LD_ADDR_EXP 87
34732: PUSH
34733: LD_EXP 87
34737: PPUSH
34738: LD_VAR 0 1
34742: PPUSH
34743: LD_VAR 0 3
34747: PPUSH
34748: CALL_OW 1
34752: ST_TO_ADDR
// end ; val = val + 1 ;
34753: LD_ADDR_VAR 0 2
34757: PUSH
34758: LD_VAR 0 2
34762: PUSH
34763: LD_INT 1
34765: PLUS
34766: ST_TO_ADDR
// end ;
34767: GO 34549
// end ;
34769: GO 34523
34771: POP
34772: POP
// until false ;
34773: LD_INT 0
34775: IFFALSE 34506
// end ;
34777: PPOPN 4
34779: END
// every 0 0$1 + 0 0$0.4 do var side , base , building_attacker_cant_map , attacker_building_pairs ; var i , un_list , buildings_list , att , b ;
34780: GO 34782
34782: DISABLE
34783: LD_INT 0
34785: PPUSH
34786: PPUSH
34787: PPUSH
34788: PPUSH
34789: PPUSH
34790: PPUSH
34791: PPUSH
34792: PPUSH
34793: PPUSH
// begin base = 1 ;
34794: LD_ADDR_VAR 0 2
34798: PUSH
34799: LD_INT 1
34801: ST_TO_ADDR
// side = GetBaseSide ( base ) ;
34802: LD_ADDR_VAR 0 1
34806: PUSH
34807: LD_VAR 0 2
34811: PPUSH
34812: CALL 27103 0 1
34816: ST_TO_ADDR
// building_attacker_cant_map = [ ] ;
34817: LD_ADDR_VAR 0 3
34821: PUSH
34822: EMPTY
34823: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
34824: LD_INT 35
34826: PPUSH
34827: CALL_OW 67
// buildings_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_building ] , [ f_inarea , ru_attack_buildings_area ] ] ) ;
34831: LD_ADDR_VAR 0 7
34835: PUSH
34836: LD_INT 81
34838: PUSH
34839: LD_VAR 0 1
34843: PUSH
34844: EMPTY
34845: LIST
34846: LIST
34847: PUSH
34848: LD_INT 21
34850: PUSH
34851: LD_INT 3
34853: PUSH
34854: EMPTY
34855: LIST
34856: LIST
34857: PUSH
34858: LD_INT 95
34860: PUSH
34861: LD_INT 32
34863: PUSH
34864: EMPTY
34865: LIST
34866: LIST
34867: PUSH
34868: EMPTY
34869: LIST
34870: LIST
34871: LIST
34872: PPUSH
34873: CALL_OW 69
34877: ST_TO_ADDR
// if buildings_list = 0 then
34878: LD_VAR 0 7
34882: PUSH
34883: LD_INT 0
34885: EQUAL
34886: IFFALSE 34890
// continue ;
34888: GO 34824
// for i in buildings_list do
34890: LD_ADDR_VAR 0 5
34894: PUSH
34895: LD_VAR 0 7
34899: PUSH
34900: FOR_IN
34901: IFFALSE 34979
// if building_attacker_cant_map < i then
34903: LD_VAR 0 3
34907: PUSH
34908: LD_VAR 0 5
34912: LESS
34913: IFFALSE 34939
// building_attacker_cant_map = Replace ( building_attacker_cant_map , i , [ ] ) else
34915: LD_ADDR_VAR 0 3
34919: PUSH
34920: LD_VAR 0 3
34924: PPUSH
34925: LD_VAR 0 5
34929: PPUSH
34930: EMPTY
34931: PPUSH
34932: CALL_OW 1
34936: ST_TO_ADDR
34937: GO 34977
// if building_attacker_cant_map [ i ] = 0 then
34939: LD_VAR 0 3
34943: PUSH
34944: LD_VAR 0 5
34948: ARRAY
34949: PUSH
34950: LD_INT 0
34952: EQUAL
34953: IFFALSE 34977
// building_attacker_cant_map = Replace ( building_attacker_cant_map , i , [ ] ) ;
34955: LD_ADDR_VAR 0 3
34959: PUSH
34960: LD_VAR 0 3
34964: PPUSH
34965: LD_VAR 0 5
34969: PPUSH
34970: EMPTY
34971: PPUSH
34972: CALL_OW 1
34976: ST_TO_ADDR
34977: GO 34900
34979: POP
34980: POP
// un_list = ai_bunkers [ base ] ^ ai_turrets [ base ] ;
34981: LD_ADDR_VAR 0 6
34985: PUSH
34986: LD_EXP 39
34990: PUSH
34991: LD_VAR 0 2
34995: ARRAY
34996: PUSH
34997: LD_EXP 40
35001: PUSH
35002: LD_VAR 0 2
35006: ARRAY
35007: ADD
35008: ST_TO_ADDR
// for i in ai_armouries [ base ] do
35009: LD_ADDR_VAR 0 5
35013: PUSH
35014: LD_EXP 38
35018: PUSH
35019: LD_VAR 0 2
35023: ARRAY
35024: PUSH
35025: FOR_IN
35026: IFFALSE 35084
// un_list = un_list ^ UnitFilter ( UnitsInside ( i ) , [ f_or , [ f_class , class_bazooker ] , [ f_class , class_mortar ] ] ) ;
35028: LD_ADDR_VAR 0 6
35032: PUSH
35033: LD_VAR 0 6
35037: PUSH
35038: LD_VAR 0 5
35042: PPUSH
35043: CALL_OW 313
35047: PPUSH
35048: LD_INT 2
35050: PUSH
35051: LD_INT 25
35053: PUSH
35054: LD_INT 9
35056: PUSH
35057: EMPTY
35058: LIST
35059: LIST
35060: PUSH
35061: LD_INT 25
35063: PUSH
35064: LD_INT 8
35066: PUSH
35067: EMPTY
35068: LIST
35069: LIST
35070: PUSH
35071: EMPTY
35072: LIST
35073: LIST
35074: LIST
35075: PPUSH
35076: CALL_OW 72
35080: ADD
35081: ST_TO_ADDR
35082: GO 35025
35084: POP
35085: POP
// attacker_building_pairs = [ ] ;
35086: LD_ADDR_VAR 0 4
35090: PUSH
35091: EMPTY
35092: ST_TO_ADDR
// for i in un_list do
35093: LD_ADDR_VAR 0 5
35097: PUSH
35098: LD_VAR 0 6
35102: PUSH
35103: FOR_IN
35104: IFFALSE 35321
// begin att = Attacks ( i ) ;
35106: LD_ADDR_VAR 0 8
35110: PUSH
35111: LD_VAR 0 5
35115: PPUSH
35116: CALL_OW 320
35120: ST_TO_ADDR
// if att > 0 then
35121: LD_VAR 0 8
35125: PUSH
35126: LD_INT 0
35128: GREATER
35129: IFFALSE 35234
// begin if GetType ( att ) = unit_building and DangerousUnits ( [ att ] ) = 0 then
35131: LD_VAR 0 8
35135: PPUSH
35136: CALL_OW 247
35140: PUSH
35141: LD_INT 3
35143: EQUAL
35144: PUSH
35145: LD_VAR 0 8
35149: PUSH
35150: EMPTY
35151: LIST
35152: PPUSH
35153: CALL 69894 0 1
35157: PUSH
35158: LD_INT 0
35160: EQUAL
35161: AND
35162: IFFALSE 35232
// begin if DangerousUnits ( FilterAllUnits ( [ [ f_enemy , side ] , [ f_dist , i , GetDistUnits ( i , att ) ] ] ) ) > 0 then
35164: LD_INT 81
35166: PUSH
35167: LD_VAR 0 1
35171: PUSH
35172: EMPTY
35173: LIST
35174: LIST
35175: PUSH
35176: LD_INT 91
35178: PUSH
35179: LD_VAR 0 5
35183: PUSH
35184: LD_VAR 0 5
35188: PPUSH
35189: LD_VAR 0 8
35193: PPUSH
35194: CALL_OW 296
35198: PUSH
35199: EMPTY
35200: LIST
35201: LIST
35202: LIST
35203: PUSH
35204: EMPTY
35205: LIST
35206: LIST
35207: PPUSH
35208: CALL_OW 69
35212: PPUSH
35213: CALL 69894 0 1
35217: PUSH
35218: LD_INT 0
35220: GREATER
35221: IFFALSE 35232
// ComStop ( i ) ;
35223: LD_VAR 0 5
35227: PPUSH
35228: CALL_OW 141
// end ; end else
35232: GO 35319
// begin for b in buildings_list do
35234: LD_ADDR_VAR 0 9
35238: PUSH
35239: LD_VAR 0 7
35243: PUSH
35244: FOR_IN
35245: IFFALSE 35317
// begin if i in building_attacker_cant_map [ b ] then
35247: LD_VAR 0 5
35251: PUSH
35252: LD_VAR 0 3
35256: PUSH
35257: LD_VAR 0 9
35261: ARRAY
35262: IN
35263: IFFALSE 35267
// continue ;
35265: GO 35244
// ComAttackUnit ( i , b ) ;
35267: LD_VAR 0 5
35271: PPUSH
35272: LD_VAR 0 9
35276: PPUSH
35277: CALL_OW 115
// attacker_building_pairs = Insert ( attacker_building_pairs , 1 , [ i , b ] ) ;
35281: LD_ADDR_VAR 0 4
35285: PUSH
35286: LD_VAR 0 4
35290: PPUSH
35291: LD_INT 1
35293: PPUSH
35294: LD_VAR 0 5
35298: PUSH
35299: LD_VAR 0 9
35303: PUSH
35304: EMPTY
35305: LIST
35306: LIST
35307: PPUSH
35308: CALL_OW 2
35312: ST_TO_ADDR
// break ;
35313: GO 35317
// end ;
35315: GO 35244
35317: POP
35318: POP
// end ; end ;
35319: GO 35103
35321: POP
35322: POP
// wait ( 0 0$0.2 ) ;
35323: LD_INT 7
35325: PPUSH
35326: CALL_OW 67
// for i in attacker_building_pairs do
35330: LD_ADDR_VAR 0 5
35334: PUSH
35335: LD_VAR 0 4
35339: PUSH
35340: FOR_IN
35341: IFFALSE 35419
// begin if Attacks ( i [ 1 ] ) <> i [ 2 ] then
35343: LD_VAR 0 5
35347: PUSH
35348: LD_INT 1
35350: ARRAY
35351: PPUSH
35352: CALL_OW 320
35356: PUSH
35357: LD_VAR 0 5
35361: PUSH
35362: LD_INT 2
35364: ARRAY
35365: NONEQUAL
35366: IFFALSE 35417
// building_attacker_cant_map = Replace ( building_attacker_cant_map , i [ 2 ] , building_attacker_cant_map [ i [ 2 ] ] ^ i [ 1 ] ) ;
35368: LD_ADDR_VAR 0 3
35372: PUSH
35373: LD_VAR 0 3
35377: PPUSH
35378: LD_VAR 0 5
35382: PUSH
35383: LD_INT 2
35385: ARRAY
35386: PPUSH
35387: LD_VAR 0 3
35391: PUSH
35392: LD_VAR 0 5
35396: PUSH
35397: LD_INT 2
35399: ARRAY
35400: ARRAY
35401: PUSH
35402: LD_VAR 0 5
35406: PUSH
35407: LD_INT 1
35409: ARRAY
35410: ADD
35411: PPUSH
35412: CALL_OW 1
35416: ST_TO_ADDR
// end ;
35417: GO 35340
35419: POP
35420: POP
// until false ;
35421: LD_INT 0
35423: IFFALSE 34824
// end ;
35425: PPOPN 9
35427: END
// function DistributeHumansToBuildings ( base , human_list , building_list , change_to_this_class , building_capacity , help_building , aggressive_pullback ) ; var i , temp_list , val , temp_unit , area , special_un_count , counter , k , under_attack ; begin
35428: LD_INT 0
35430: PPUSH
35431: PPUSH
35432: PPUSH
35433: PPUSH
35434: PPUSH
35435: PPUSH
35436: PPUSH
35437: PPUSH
35438: PPUSH
35439: PPUSH
// if human_list = 0 then
35440: LD_VAR 0 2
35444: PUSH
35445: LD_INT 0
35447: EQUAL
35448: IFFALSE 35452
// exit ;
35450: GO 36846
// area = GetBaseArea ( base ) ;
35452: LD_ADDR_VAR 0 13
35456: PUSH
35457: LD_VAR 0 1
35461: PPUSH
35462: CALL 27032 0 1
35466: ST_TO_ADDR
// under_attack = BaseUnderAttack ( base , - 1 ) ;
35467: LD_ADDR_VAR 0 17
35471: PUSH
35472: LD_VAR 0 1
35476: PPUSH
35477: LD_INT 1
35479: NEG
35480: PPUSH
35481: CALL 46094 0 2
35485: ST_TO_ADDR
// if not GetClass ( human_list [ 1 ] ) in [ class_engineer , class_apeman_engineer , class_mechanic , class_scientistic ] and building_list > 0 then
35486: LD_VAR 0 2
35490: PUSH
35491: LD_INT 1
35493: ARRAY
35494: PPUSH
35495: CALL_OW 257
35499: PUSH
35500: LD_INT 2
35502: PUSH
35503: LD_INT 16
35505: PUSH
35506: LD_INT 3
35508: PUSH
35509: LD_INT 4
35511: PUSH
35512: EMPTY
35513: LIST
35514: LIST
35515: LIST
35516: LIST
35517: IN
35518: NOT
35519: PUSH
35520: LD_VAR 0 3
35524: PUSH
35525: LD_INT 0
35527: GREATER
35528: AND
35529: IFFALSE 35618
// begin val = 0 ;
35531: LD_ADDR_VAR 0 11
35535: PUSH
35536: LD_INT 0
35538: ST_TO_ADDR
// for i in human_list do
35539: LD_ADDR_VAR 0 9
35543: PUSH
35544: LD_VAR 0 2
35548: PUSH
35549: FOR_IN
35550: IFFALSE 35594
// if GetClass ( i ) in [ class_sniper , class_mortar , class_bazooker ] then
35552: LD_VAR 0 9
35556: PPUSH
35557: CALL_OW 257
35561: PUSH
35562: LD_INT 5
35564: PUSH
35565: LD_INT 8
35567: PUSH
35568: LD_INT 9
35570: PUSH
35571: EMPTY
35572: LIST
35573: LIST
35574: LIST
35575: IN
35576: IFFALSE 35592
// val = val + 1 ;
35578: LD_ADDR_VAR 0 11
35582: PUSH
35583: LD_VAR 0 11
35587: PUSH
35588: LD_INT 1
35590: PLUS
35591: ST_TO_ADDR
35592: GO 35549
35594: POP
35595: POP
// special_un_count = val div ( building_list + 0 ) ;
35596: LD_ADDR_VAR 0 14
35600: PUSH
35601: LD_VAR 0 11
35605: PUSH
35606: LD_VAR 0 3
35610: PUSH
35611: LD_INT 0
35613: PLUS
35614: DIV
35615: ST_TO_ADDR
// end else
35616: GO 35626
// special_un_count = 0 ;
35618: LD_ADDR_VAR 0 14
35622: PUSH
35623: LD_INT 0
35625: ST_TO_ADDR
// val = building_list + 0 ;
35626: LD_ADDR_VAR 0 11
35630: PUSH
35631: LD_VAR 0 3
35635: PUSH
35636: LD_INT 0
35638: PLUS
35639: ST_TO_ADDR
// while val > 0 and human_list > 0 do
35640: LD_VAR 0 11
35644: PUSH
35645: LD_INT 0
35647: GREATER
35648: PUSH
35649: LD_VAR 0 2
35653: PUSH
35654: LD_INT 0
35656: GREATER
35657: AND
35658: IFFALSE 36580
// begin temp_list = [ ] ;
35660: LD_ADDR_VAR 0 10
35664: PUSH
35665: EMPTY
35666: ST_TO_ADDR
// for i in human_list do
35667: LD_ADDR_VAR 0 9
35671: PUSH
35672: LD_VAR 0 2
35676: PUSH
35677: FOR_IN
35678: IFFALSE 35721
// if IsInUnit ( i ) = building_list [ val ] then
35680: LD_VAR 0 9
35684: PPUSH
35685: CALL_OW 310
35689: PUSH
35690: LD_VAR 0 3
35694: PUSH
35695: LD_VAR 0 11
35699: ARRAY
35700: EQUAL
35701: IFFALSE 35719
// temp_list = temp_list ^ i ;
35703: LD_ADDR_VAR 0 10
35707: PUSH
35708: LD_VAR 0 10
35712: PUSH
35713: LD_VAR 0 9
35717: ADD
35718: ST_TO_ADDR
35719: GO 35677
35721: POP
35722: POP
// human_list = temp_list ^ ( human_list diff temp_list ) ;
35723: LD_ADDR_VAR 0 2
35727: PUSH
35728: LD_VAR 0 10
35732: PUSH
35733: LD_VAR 0 2
35737: PUSH
35738: LD_VAR 0 10
35742: DIFF
35743: ADD
35744: ST_TO_ADDR
// counter = 0 ;
35745: LD_ADDR_VAR 0 15
35749: PUSH
35750: LD_INT 0
35752: ST_TO_ADDR
// temp_list = [ ] ;
35753: LD_ADDR_VAR 0 10
35757: PUSH
35758: EMPTY
35759: ST_TO_ADDR
// for i = 1 to human_list div val do
35760: LD_ADDR_VAR 0 9
35764: PUSH
35765: DOUBLE
35766: LD_INT 1
35768: DEC
35769: ST_TO_ADDR
35770: LD_VAR 0 2
35774: PUSH
35775: LD_VAR 0 11
35779: DIV
35780: PUSH
35781: FOR_TO
35782: IFFALSE 36147
// begin if i > building_capacity then
35784: LD_VAR 0 9
35788: PUSH
35789: LD_VAR 0 5
35793: GREATER
35794: IFFALSE 35798
// break ;
35796: GO 36147
// if special_un_count = 0 then
35798: LD_VAR 0 14
35802: PUSH
35803: LD_INT 0
35805: EQUAL
35806: IFFALSE 35848
// begin temp_list = temp_list ^ human_list [ 1 ] ;
35808: LD_ADDR_VAR 0 10
35812: PUSH
35813: LD_VAR 0 10
35817: PUSH
35818: LD_VAR 0 2
35822: PUSH
35823: LD_INT 1
35825: ARRAY
35826: ADD
35827: ST_TO_ADDR
// human_list = Delete ( human_list , 1 ) ;
35828: LD_ADDR_VAR 0 2
35832: PUSH
35833: LD_VAR 0 2
35837: PPUSH
35838: LD_INT 1
35840: PPUSH
35841: CALL_OW 3
35845: ST_TO_ADDR
// end else
35846: GO 36145
// if counter = special_un_count then
35848: LD_VAR 0 15
35852: PUSH
35853: LD_VAR 0 14
35857: EQUAL
35858: IFFALSE 35997
// begin temp_unit = 0 ;
35860: LD_ADDR_VAR 0 12
35864: PUSH
35865: LD_INT 0
35867: ST_TO_ADDR
// for k = 1 to human_list do
35868: LD_ADDR_VAR 0 16
35872: PUSH
35873: DOUBLE
35874: LD_INT 1
35876: DEC
35877: ST_TO_ADDR
35878: LD_VAR 0 2
35882: PUSH
35883: FOR_TO
35884: IFFALSE 35933
// if not GetClass ( human_list [ k ] ) in [ class_sniper , class_mortar , class_bazooker ] then
35886: LD_VAR 0 2
35890: PUSH
35891: LD_VAR 0 16
35895: ARRAY
35896: PPUSH
35897: CALL_OW 257
35901: PUSH
35902: LD_INT 5
35904: PUSH
35905: LD_INT 8
35907: PUSH
35908: LD_INT 9
35910: PUSH
35911: EMPTY
35912: LIST
35913: LIST
35914: LIST
35915: IN
35916: NOT
35917: IFFALSE 35931
// begin temp_unit = k ;
35919: LD_ADDR_VAR 0 12
35923: PUSH
35924: LD_VAR 0 16
35928: ST_TO_ADDR
// break ;
35929: GO 35933
// end ;
35931: GO 35883
35933: POP
35934: POP
// if temp_unit = 0 then
35935: LD_VAR 0 12
35939: PUSH
35940: LD_INT 0
35942: EQUAL
35943: IFFALSE 35953
// temp_unit = 1 ;
35945: LD_ADDR_VAR 0 12
35949: PUSH
35950: LD_INT 1
35952: ST_TO_ADDR
// temp_list = temp_list ^ human_list [ temp_unit ] ;
35953: LD_ADDR_VAR 0 10
35957: PUSH
35958: LD_VAR 0 10
35962: PUSH
35963: LD_VAR 0 2
35967: PUSH
35968: LD_VAR 0 12
35972: ARRAY
35973: ADD
35974: ST_TO_ADDR
// human_list = Delete ( human_list , temp_unit ) ;
35975: LD_ADDR_VAR 0 2
35979: PUSH
35980: LD_VAR 0 2
35984: PPUSH
35985: LD_VAR 0 12
35989: PPUSH
35990: CALL_OW 3
35994: ST_TO_ADDR
// end else
35995: GO 36145
// begin counter = counter + 1 ;
35997: LD_ADDR_VAR 0 15
36001: PUSH
36002: LD_VAR 0 15
36006: PUSH
36007: LD_INT 1
36009: PLUS
36010: ST_TO_ADDR
// temp_unit = 0 ;
36011: LD_ADDR_VAR 0 12
36015: PUSH
36016: LD_INT 0
36018: ST_TO_ADDR
// for k = 1 to human_list do
36019: LD_ADDR_VAR 0 16
36023: PUSH
36024: DOUBLE
36025: LD_INT 1
36027: DEC
36028: ST_TO_ADDR
36029: LD_VAR 0 2
36033: PUSH
36034: FOR_TO
36035: IFFALSE 36083
// if GetClass ( human_list [ k ] ) in [ class_sniper , class_mortar , class_bazooker ] then
36037: LD_VAR 0 2
36041: PUSH
36042: LD_VAR 0 16
36046: ARRAY
36047: PPUSH
36048: CALL_OW 257
36052: PUSH
36053: LD_INT 5
36055: PUSH
36056: LD_INT 8
36058: PUSH
36059: LD_INT 9
36061: PUSH
36062: EMPTY
36063: LIST
36064: LIST
36065: LIST
36066: IN
36067: IFFALSE 36081
// begin temp_unit = k ;
36069: LD_ADDR_VAR 0 12
36073: PUSH
36074: LD_VAR 0 16
36078: ST_TO_ADDR
// break ;
36079: GO 36083
// end ;
36081: GO 36034
36083: POP
36084: POP
// if temp_unit = 0 then
36085: LD_VAR 0 12
36089: PUSH
36090: LD_INT 0
36092: EQUAL
36093: IFFALSE 36103
// temp_unit = 1 ;
36095: LD_ADDR_VAR 0 12
36099: PUSH
36100: LD_INT 1
36102: ST_TO_ADDR
// temp_list = temp_list ^ human_list [ temp_unit ] ;
36103: LD_ADDR_VAR 0 10
36107: PUSH
36108: LD_VAR 0 10
36112: PUSH
36113: LD_VAR 0 2
36117: PUSH
36118: LD_VAR 0 12
36122: ARRAY
36123: ADD
36124: ST_TO_ADDR
// human_list = Delete ( human_list , temp_unit ) ;
36125: LD_ADDR_VAR 0 2
36129: PUSH
36130: LD_VAR 0 2
36134: PPUSH
36135: LD_VAR 0 12
36139: PPUSH
36140: CALL_OW 3
36144: ST_TO_ADDR
// end ; end ;
36145: GO 35781
36147: POP
36148: POP
// for i in temp_list do
36149: LD_ADDR_VAR 0 9
36153: PUSH
36154: LD_VAR 0 10
36158: PUSH
36159: FOR_IN
36160: IFFALSE 36562
// begin temp_unit = IsInUnit ( i ) ;
36162: LD_ADDR_VAR 0 12
36166: PUSH
36167: LD_VAR 0 9
36171: PPUSH
36172: CALL_OW 310
36176: ST_TO_ADDR
// if temp_unit <> building_list [ val ] then
36177: LD_VAR 0 12
36181: PUSH
36182: LD_VAR 0 3
36186: PUSH
36187: LD_VAR 0 11
36191: ARRAY
36192: NONEQUAL
36193: IFFALSE 36560
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
36195: LD_VAR 0 9
36199: PPUSH
36200: CALL_OW 310
36204: PPUSH
36205: CALL_OW 247
36209: PUSH
36210: LD_INT 2
36212: DOUBLE
36213: EQUAL
36214: IFTRUE 36218
36216: GO 36230
36218: POP
// ComExitVehicle ( i ) ; unit_building :
36219: LD_VAR 0 9
36223: PPUSH
36224: CALL_OW 121
36228: GO 36560
36230: LD_INT 3
36232: DOUBLE
36233: EQUAL
36234: IFTRUE 36238
36236: GO 36250
36238: POP
// ComExitBuilding ( i ) ; else
36239: LD_VAR 0 9
36243: PPUSH
36244: CALL_OW 122
36248: GO 36560
36250: POP
// begin if IsInArea ( i , area ) or not aggressive_pullback then
36251: LD_VAR 0 9
36255: PPUSH
36256: LD_VAR 0 13
36260: PPUSH
36261: CALL_OW 308
36265: PUSH
36266: LD_VAR 0 7
36270: NOT
36271: OR
36272: IFFALSE 36296
// ComEnterUnit ( i , building_list [ val ] ) else
36274: LD_VAR 0 9
36278: PPUSH
36279: LD_VAR 0 3
36283: PUSH
36284: LD_VAR 0 11
36288: ARRAY
36289: PPUSH
36290: CALL_OW 120
36294: GO 36337
// ComAgressiveMove ( i , GetX ( building_list [ val ] ) , GetY ( building_list [ val ] ) ) ;
36296: LD_VAR 0 9
36300: PPUSH
36301: LD_VAR 0 3
36305: PUSH
36306: LD_VAR 0 11
36310: ARRAY
36311: PPUSH
36312: CALL_OW 250
36316: PPUSH
36317: LD_VAR 0 3
36321: PUSH
36322: LD_VAR 0 11
36326: ARRAY
36327: PPUSH
36328: CALL_OW 251
36332: PPUSH
36333: CALL_OW 114
// if change_to_this_class > 0 then
36337: LD_VAR 0 4
36341: PUSH
36342: LD_INT 0
36344: GREATER
36345: IFFALSE 36446
// begin if GetClass ( i ) <> change_to_this_class and GetNation ( i ) <> nation_nature then
36347: LD_VAR 0 9
36351: PPUSH
36352: CALL_OW 257
36356: PUSH
36357: LD_VAR 0 4
36361: NONEQUAL
36362: PUSH
36363: LD_VAR 0 9
36367: PPUSH
36368: CALL_OW 248
36372: PUSH
36373: LD_INT 0
36375: NONEQUAL
36376: AND
36377: IFFALSE 36444
// if not ( change_to_this_class in [ class_sniper , class_mortar , class_bazooker ] and not GetBType ( building_list [ val ] ) in [ b_barracks , b_fort ] ) then
36379: LD_VAR 0 4
36383: PUSH
36384: LD_INT 5
36386: PUSH
36387: LD_INT 8
36389: PUSH
36390: LD_INT 9
36392: PUSH
36393: EMPTY
36394: LIST
36395: LIST
36396: LIST
36397: IN
36398: PUSH
36399: LD_VAR 0 3
36403: PUSH
36404: LD_VAR 0 11
36408: ARRAY
36409: PPUSH
36410: CALL_OW 266
36414: PUSH
36415: LD_INT 5
36417: PUSH
36418: LD_INT 35
36420: PUSH
36421: EMPTY
36422: LIST
36423: LIST
36424: IN
36425: NOT
36426: AND
36427: NOT
36428: IFFALSE 36444
// AddComChangeProfession ( i , change_to_this_class ) ;
36430: LD_VAR 0 9
36434: PPUSH
36435: LD_VAR 0 4
36439: PPUSH
36440: CALL_OW 183
// end else
36444: GO 36560
// begin if GetBType ( building_list [ val ] ) in [ b_barracks , b_fort ] then
36446: LD_VAR 0 3
36450: PUSH
36451: LD_VAR 0 11
36455: ARRAY
36456: PPUSH
36457: CALL_OW 266
36461: PUSH
36462: LD_INT 5
36464: PUSH
36465: LD_INT 35
36467: PUSH
36468: EMPTY
36469: LIST
36470: LIST
36471: IN
36472: IFFALSE 36560
// case GetNation ( building_list [ val ] ) of nation_american :
36474: LD_VAR 0 3
36478: PUSH
36479: LD_VAR 0 11
36483: ARRAY
36484: PPUSH
36485: CALL_OW 248
36489: PUSH
36490: LD_INT 1
36492: DOUBLE
36493: EQUAL
36494: IFTRUE 36498
36496: GO 36513
36498: POP
// AddComChangeProfession ( i , class_sniper ) ; nation_arabian :
36499: LD_VAR 0 9
36503: PPUSH
36504: LD_INT 5
36506: PPUSH
36507: CALL_OW 183
36511: GO 36560
36513: LD_INT 2
36515: DOUBLE
36516: EQUAL
36517: IFTRUE 36521
36519: GO 36536
36521: POP
// AddComChangeProfession ( i , class_mortar ) ; nation_russian :
36522: LD_VAR 0 9
36526: PPUSH
36527: LD_INT 8
36529: PPUSH
36530: CALL_OW 183
36534: GO 36560
36536: LD_INT 3
36538: DOUBLE
36539: EQUAL
36540: IFTRUE 36544
36542: GO 36559
36544: POP
// AddComChangeProfession ( i , class_bazooker ) ; end ;
36545: LD_VAR 0 9
36549: PPUSH
36550: LD_INT 9
36552: PPUSH
36553: CALL_OW 183
36557: GO 36560
36559: POP
// end ; end ; end ; end ;
36560: GO 36159
36562: POP
36563: POP
// val = val - 1 ;
36564: LD_ADDR_VAR 0 11
36568: PUSH
36569: LD_VAR 0 11
36573: PUSH
36574: LD_INT 1
36576: MINUS
36577: ST_TO_ADDR
// end ;
36578: GO 35640
// if human_list > 0 then
36580: LD_VAR 0 2
36584: PUSH
36585: LD_INT 0
36587: GREATER
36588: IFFALSE 36846
// if ai_building_under_construction [ base ] > 0 and help_building and not under_attack then
36590: LD_EXP 56
36594: PUSH
36595: LD_VAR 0 1
36599: ARRAY
36600: PUSH
36601: LD_INT 0
36603: GREATER
36604: PUSH
36605: LD_VAR 0 6
36609: AND
36610: PUSH
36611: LD_VAR 0 17
36615: NOT
36616: AND
36617: IFFALSE 36693
// begin for i in GetHumansOutOfUnits ( human_list ) do
36619: LD_ADDR_VAR 0 9
36623: PUSH
36624: LD_VAR 0 2
36628: PPUSH
36629: CALL 45989 0 1
36633: PUSH
36634: FOR_IN
36635: IFFALSE 36689
// SetTaskList ( i , [ [ h , 0 , 0 , ai_building_under_construction [ base ] , 0 , 0 , 0 ] ] ) ;
36637: LD_VAR 0 9
36641: PPUSH
36642: LD_STRING h
36644: PUSH
36645: LD_INT 0
36647: PUSH
36648: LD_INT 0
36650: PUSH
36651: LD_EXP 56
36655: PUSH
36656: LD_VAR 0 1
36660: ARRAY
36661: PUSH
36662: LD_INT 0
36664: PUSH
36665: LD_INT 0
36667: PUSH
36668: LD_INT 0
36670: PUSH
36671: EMPTY
36672: LIST
36673: LIST
36674: LIST
36675: LIST
36676: LIST
36677: LIST
36678: LIST
36679: PUSH
36680: EMPTY
36681: LIST
36682: PPUSH
36683: CALL_OW 446
36687: GO 36634
36689: POP
36690: POP
// end else
36691: GO 36846
// for i in GetHumansOutOfUnits ( human_list ) do
36693: LD_ADDR_VAR 0 9
36697: PUSH
36698: LD_VAR 0 2
36702: PPUSH
36703: CALL 45989 0 1
36707: PUSH
36708: FOR_IN
36709: IFFALSE 36844
// if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
36711: LD_VAR 0 9
36715: PPUSH
36716: LD_EXP 55
36720: PUSH
36721: LD_VAR 0 1
36725: ARRAY
36726: PUSH
36727: LD_INT 1
36729: ARRAY
36730: PPUSH
36731: LD_EXP 55
36735: PUSH
36736: LD_VAR 0 1
36740: ARRAY
36741: PUSH
36742: LD_INT 2
36744: ARRAY
36745: PPUSH
36746: CALL_OW 297
36750: PUSH
36751: LD_INT 4
36753: GREATER
36754: IFFALSE 36842
// if aggressive_pullback then
36756: LD_VAR 0 7
36760: IFFALSE 36803
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) else
36762: LD_VAR 0 9
36766: PPUSH
36767: LD_EXP 55
36771: PUSH
36772: LD_VAR 0 1
36776: ARRAY
36777: PUSH
36778: LD_INT 1
36780: ARRAY
36781: PPUSH
36782: LD_EXP 55
36786: PUSH
36787: LD_VAR 0 1
36791: ARRAY
36792: PUSH
36793: LD_INT 2
36795: ARRAY
36796: PPUSH
36797: CALL_OW 114
36801: GO 36842
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
36803: LD_VAR 0 9
36807: PPUSH
36808: LD_EXP 55
36812: PUSH
36813: LD_VAR 0 1
36817: ARRAY
36818: PUSH
36819: LD_INT 1
36821: ARRAY
36822: PPUSH
36823: LD_EXP 55
36827: PUSH
36828: LD_VAR 0 1
36832: ARRAY
36833: PUSH
36834: LD_INT 2
36836: ARRAY
36837: PPUSH
36838: CALL_OW 111
36842: GO 36708
36844: POP
36845: POP
// end ;
36846: LD_VAR 0 8
36850: RET
// every 0 0$1 + 0 0$0.3 do var side , i , engineers_list , temp_list , buildings_list , temp_unit , away_dist , temp_list_2 , base , apemen_engineers_list ; var humans_list , crane_usable , b_value , engineers_not_allowed_to_repair_area , crane_not_allowed_to_repair_area , workers_list ; var k , repairing_buildings , under_attack , is_dismantling ; var crane_is_refueling , try_rebuild_again_time ;
36851: GO 36853
36853: DISABLE
36854: LD_INT 0
36856: PPUSH
36857: PPUSH
36858: PPUSH
36859: PPUSH
36860: PPUSH
36861: PPUSH
36862: PPUSH
36863: PPUSH
36864: PPUSH
36865: PPUSH
36866: PPUSH
36867: PPUSH
36868: PPUSH
36869: PPUSH
36870: PPUSH
36871: PPUSH
36872: PPUSH
36873: PPUSH
36874: PPUSH
36875: PPUSH
36876: PPUSH
36877: PPUSH
// begin crane_is_refueling = [ false , false , false , false ] ;
36878: LD_ADDR_VAR 0 21
36882: PUSH
36883: LD_INT 0
36885: PUSH
36886: LD_INT 0
36888: PUSH
36889: LD_INT 0
36891: PUSH
36892: LD_INT 0
36894: PUSH
36895: EMPTY
36896: LIST
36897: LIST
36898: LIST
36899: LIST
36900: ST_TO_ADDR
// try_rebuild_again_time = [ ] ;
36901: LD_ADDR_VAR 0 22
36905: PUSH
36906: EMPTY
36907: ST_TO_ADDR
// for base in ai_bases do
36908: LD_ADDR_VAR 0 9
36912: PUSH
36913: LD_EXP 25
36917: PUSH
36918: FOR_IN
36919: IFFALSE 36946
// try_rebuild_again_time = Replace ( try_rebuild_again_time , base , 0 0$0 ) ;
36921: LD_ADDR_VAR 0 22
36925: PUSH
36926: LD_VAR 0 22
36930: PPUSH
36931: LD_VAR 0 9
36935: PPUSH
36936: LD_INT 0
36938: PPUSH
36939: CALL_OW 1
36943: ST_TO_ADDR
36944: GO 36918
36946: POP
36947: POP
// repeat wait ( 0 0$1 ) ;
36948: LD_INT 35
36950: PPUSH
36951: CALL_OW 67
// for base in ai_bases do
36955: LD_ADDR_VAR 0 9
36959: PUSH
36960: LD_EXP 25
36964: PUSH
36965: FOR_IN
36966: IFFALSE 44729
// begin side = GetBaseSide ( base ) ;
36968: LD_ADDR_VAR 0 1
36972: PUSH
36973: LD_VAR 0 9
36977: PPUSH
36978: CALL 27103 0 1
36982: ST_TO_ADDR
// under_attack := BaseUnderAttack ( base , - 1 ) ;
36983: LD_ADDR_VAR 0 19
36987: PUSH
36988: LD_VAR 0 9
36992: PPUSH
36993: LD_INT 1
36995: NEG
36996: PPUSH
36997: CALL 46094 0 2
37001: ST_TO_ADDR
// if under_attack then
37002: LD_VAR 0 19
37006: IFFALSE 37053
// begin ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
37008: LD_ADDR_EXP 60
37012: PUSH
37013: LD_EXP 60
37017: PPUSH
37018: LD_VAR 0 9
37022: PPUSH
37023: LD_INT 0
37025: PPUSH
37026: CALL_OW 1
37030: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , [ ] ) ;
37031: LD_ADDR_EXP 61
37035: PUSH
37036: LD_EXP 61
37040: PPUSH
37041: LD_VAR 0 9
37045: PPUSH
37046: EMPTY
37047: PPUSH
37048: CALL_OW 1
37052: ST_TO_ADDR
// end ; if ai_cannot_rebuild_these_buildings [ base ] > 0 and ( ai_engineers [ base ] > 0 or try_rebuild_again_time [ base ] >= 0 0$20 ) then
37053: LD_EXP 63
37057: PUSH
37058: LD_VAR 0 9
37062: ARRAY
37063: PUSH
37064: LD_INT 0
37066: GREATER
37067: PUSH
37068: LD_EXP 28
37072: PUSH
37073: LD_VAR 0 9
37077: ARRAY
37078: PUSH
37079: LD_INT 0
37081: GREATER
37082: PUSH
37083: LD_VAR 0 22
37087: PUSH
37088: LD_VAR 0 9
37092: ARRAY
37093: PUSH
37094: LD_INT 700
37096: GREATEREQUAL
37097: OR
37098: AND
37099: IFFALSE 37148
// begin ai_cannot_rebuild_these_buildings = Replace ( ai_cannot_rebuild_these_buildings , base , [ ] ) ;
37101: LD_ADDR_EXP 63
37105: PUSH
37106: LD_EXP 63
37110: PPUSH
37111: LD_VAR 0 9
37115: PPUSH
37116: EMPTY
37117: PPUSH
37118: CALL_OW 1
37122: ST_TO_ADDR
// try_rebuild_again_time = Replace ( try_rebuild_again_time , base , 0 0$0 ) ;
37123: LD_ADDR_VAR 0 22
37127: PUSH
37128: LD_VAR 0 22
37132: PPUSH
37133: LD_VAR 0 9
37137: PPUSH
37138: LD_INT 0
37140: PPUSH
37141: CALL_OW 1
37145: ST_TO_ADDR
// end else
37146: GO 37183
// try_rebuild_again_time = Replace ( try_rebuild_again_time , base , try_rebuild_again_time [ base ] + 0 0$1 ) ;
37148: LD_ADDR_VAR 0 22
37152: PUSH
37153: LD_VAR 0 22
37157: PPUSH
37158: LD_VAR 0 9
37162: PPUSH
37163: LD_VAR 0 22
37167: PUSH
37168: LD_VAR 0 9
37172: ARRAY
37173: PUSH
37174: LD_INT 35
37176: PLUS
37177: PPUSH
37178: CALL_OW 1
37182: ST_TO_ADDR
// engineers_list = ai_engineers [ base ] diff ai_heal_these_humans [ base ] ;
37183: LD_ADDR_VAR 0 3
37187: PUSH
37188: LD_EXP 28
37192: PUSH
37193: LD_VAR 0 9
37197: ARRAY
37198: PUSH
37199: LD_EXP 57
37203: PUSH
37204: LD_VAR 0 9
37208: ARRAY
37209: DIFF
37210: ST_TO_ADDR
// apemen_engineers_list = ai_apemen_engineers [ base ] diff ai_heal_these_humans [ base ] ;
37211: LD_ADDR_VAR 0 10
37215: PUSH
37216: LD_EXP 33
37220: PUSH
37221: LD_VAR 0 9
37225: ARRAY
37226: PUSH
37227: LD_EXP 57
37231: PUSH
37232: LD_VAR 0 9
37236: ARRAY
37237: DIFF
37238: ST_TO_ADDR
// if base in [ 1 , 3 ] then
37239: LD_VAR 0 9
37243: PUSH
37244: LD_INT 1
37246: PUSH
37247: LD_INT 3
37249: PUSH
37250: EMPTY
37251: LIST
37252: LIST
37253: IN
37254: IFFALSE 37458
// begin temp_list = ai_heal_these_humans [ base ] ;
37256: LD_ADDR_VAR 0 4
37260: PUSH
37261: LD_EXP 57
37265: PUSH
37266: LD_VAR 0 9
37270: ARRAY
37271: ST_TO_ADDR
// humans_list = engineers_list ^ apemen_engineers_list ;
37272: LD_ADDR_VAR 0 11
37276: PUSH
37277: LD_VAR 0 3
37281: PUSH
37282: LD_VAR 0 10
37286: ADD
37287: ST_TO_ADDR
// i = 1 ;
37288: LD_ADDR_VAR 0 2
37292: PUSH
37293: LD_INT 1
37295: ST_TO_ADDR
// while i <= humans_list do
37296: LD_VAR 0 2
37300: PUSH
37301: LD_VAR 0 11
37305: LESSEQUAL
37306: IFFALSE 37433
// begin if GetLives ( humans_list [ i ] ) <= 700 then
37308: LD_VAR 0 11
37312: PUSH
37313: LD_VAR 0 2
37317: ARRAY
37318: PPUSH
37319: CALL_OW 256
37323: PUSH
37324: LD_INT 700
37326: LESSEQUAL
37327: IFFALSE 37417
// begin temp_list = temp_list ^ humans_list [ i ] ;
37329: LD_ADDR_VAR 0 4
37333: PUSH
37334: LD_VAR 0 4
37338: PUSH
37339: LD_VAR 0 11
37343: PUSH
37344: LD_VAR 0 2
37348: ARRAY
37349: ADD
37350: ST_TO_ADDR
// engineers_list = engineers_list diff humans_list [ i ] ;
37351: LD_ADDR_VAR 0 3
37355: PUSH
37356: LD_VAR 0 3
37360: PUSH
37361: LD_VAR 0 11
37365: PUSH
37366: LD_VAR 0 2
37370: ARRAY
37371: DIFF
37372: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff humans_list [ i ] ;
37373: LD_ADDR_VAR 0 10
37377: PUSH
37378: LD_VAR 0 10
37382: PUSH
37383: LD_VAR 0 11
37387: PUSH
37388: LD_VAR 0 2
37392: ARRAY
37393: DIFF
37394: ST_TO_ADDR
// humans_list = Delete ( humans_list , i ) ;
37395: LD_ADDR_VAR 0 11
37399: PUSH
37400: LD_VAR 0 11
37404: PPUSH
37405: LD_VAR 0 2
37409: PPUSH
37410: CALL_OW 3
37414: ST_TO_ADDR
// continue ;
37415: GO 37296
// end ; i = i + 1 ;
37417: LD_ADDR_VAR 0 2
37421: PUSH
37422: LD_VAR 0 2
37426: PUSH
37427: LD_INT 1
37429: PLUS
37430: ST_TO_ADDR
// end ;
37431: GO 37296
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
37433: LD_ADDR_EXP 57
37437: PUSH
37438: LD_EXP 57
37442: PPUSH
37443: LD_VAR 0 9
37447: PPUSH
37448: LD_VAR 0 4
37452: PPUSH
37453: CALL_OW 1
37457: ST_TO_ADDR
// end ; crane_usable = false ;
37458: LD_ADDR_VAR 0 12
37462: PUSH
37463: LD_INT 0
37465: ST_TO_ADDR
// if ai_crane [ base ] > 0 then
37466: LD_EXP 68
37470: PUSH
37471: LD_VAR 0 9
37475: ARRAY
37476: PUSH
37477: LD_INT 0
37479: GREATER
37480: IFFALSE 38079
// begin if GetControl ( ai_crane [ base ] ) = control_manual and not ai_crane [ base ] = ai_vehicle_being_moved [ base ] then
37482: LD_EXP 68
37486: PUSH
37487: LD_VAR 0 9
37491: ARRAY
37492: PPUSH
37493: CALL_OW 263
37497: PUSH
37498: LD_INT 1
37500: EQUAL
37501: PUSH
37502: LD_EXP 68
37506: PUSH
37507: LD_VAR 0 9
37511: ARRAY
37512: PUSH
37513: LD_EXP 60
37517: PUSH
37518: LD_VAR 0 9
37522: ARRAY
37523: EQUAL
37524: NOT
37525: AND
37526: IFFALSE 37594
// begin temp_list = UnitsInside ( ai_crane [ base ] ) ;
37528: LD_ADDR_VAR 0 4
37532: PUSH
37533: LD_EXP 68
37537: PUSH
37538: LD_VAR 0 9
37542: ARRAY
37543: PPUSH
37544: CALL_OW 313
37548: ST_TO_ADDR
// if temp_list > 0 then
37549: LD_VAR 0 4
37553: PUSH
37554: LD_INT 0
37556: GREATER
37557: IFFALSE 37594
// if temp_list [ 1 ] <> ai_crane_driver [ base ] then
37559: LD_VAR 0 4
37563: PUSH
37564: LD_INT 1
37566: ARRAY
37567: PUSH
37568: LD_EXP 72
37572: PUSH
37573: LD_VAR 0 9
37577: ARRAY
37578: NONEQUAL
37579: IFFALSE 37594
// ComExitVehicle ( temp_list [ 1 ] ) ;
37581: LD_VAR 0 4
37585: PUSH
37586: LD_INT 1
37588: ARRAY
37589: PPUSH
37590: CALL_OW 121
// end ; if GetLives ( ai_crane [ base ] ) <= 500 or ( ai_crane_driver [ base ] > 0 and GetLives ( ai_crane_driver [ base ] ) <= 500 ) or ( ai_crane_is_being_repaired [ base ] and ( GetLives ( ai_crane [ base ] ) < 1000 or ( ai_crane_driver [ base ] > 0 and GetLives ( ai_crane_driver [ base ] ) < 1000 ) ) ) then
37594: LD_EXP 68
37598: PUSH
37599: LD_VAR 0 9
37603: ARRAY
37604: PPUSH
37605: CALL_OW 256
37609: PUSH
37610: LD_INT 500
37612: LESSEQUAL
37613: PUSH
37614: LD_EXP 72
37618: PUSH
37619: LD_VAR 0 9
37623: ARRAY
37624: PUSH
37625: LD_INT 0
37627: GREATER
37628: PUSH
37629: LD_EXP 72
37633: PUSH
37634: LD_VAR 0 9
37638: ARRAY
37639: PPUSH
37640: CALL_OW 256
37644: PUSH
37645: LD_INT 500
37647: LESSEQUAL
37648: AND
37649: OR
37650: PUSH
37651: LD_EXP 71
37655: PUSH
37656: LD_VAR 0 9
37660: ARRAY
37661: PUSH
37662: LD_EXP 68
37666: PUSH
37667: LD_VAR 0 9
37671: ARRAY
37672: PPUSH
37673: CALL_OW 256
37677: PUSH
37678: LD_INT 1000
37680: LESS
37681: PUSH
37682: LD_EXP 72
37686: PUSH
37687: LD_VAR 0 9
37691: ARRAY
37692: PUSH
37693: LD_INT 0
37695: GREATER
37696: PUSH
37697: LD_EXP 72
37701: PUSH
37702: LD_VAR 0 9
37706: ARRAY
37707: PPUSH
37708: CALL_OW 256
37712: PUSH
37713: LD_INT 1000
37715: LESS
37716: AND
37717: OR
37718: AND
37719: OR
37720: IFFALSE 37843
// begin ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , true ) ;
37722: LD_ADDR_EXP 71
37726: PUSH
37727: LD_EXP 71
37731: PPUSH
37732: LD_VAR 0 9
37736: PPUSH
37737: LD_INT 1
37739: PPUSH
37740: CALL_OW 1
37744: ST_TO_ADDR
// if GetDistUnitXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 6 then
37745: LD_EXP 68
37749: PUSH
37750: LD_VAR 0 9
37754: ARRAY
37755: PPUSH
37756: LD_EXP 55
37760: PUSH
37761: LD_VAR 0 9
37765: ARRAY
37766: PUSH
37767: LD_INT 1
37769: ARRAY
37770: PPUSH
37771: LD_EXP 55
37775: PUSH
37776: LD_VAR 0 9
37780: ARRAY
37781: PUSH
37782: LD_INT 2
37784: ARRAY
37785: PPUSH
37786: CALL_OW 297
37790: PUSH
37791: LD_INT 6
37793: GREATER
37794: IFFALSE 37841
// ComMoveXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
37796: LD_EXP 68
37800: PUSH
37801: LD_VAR 0 9
37805: ARRAY
37806: PPUSH
37807: LD_EXP 55
37811: PUSH
37812: LD_VAR 0 9
37816: ARRAY
37817: PUSH
37818: LD_INT 1
37820: ARRAY
37821: PPUSH
37822: LD_EXP 55
37826: PUSH
37827: LD_VAR 0 9
37831: ARRAY
37832: PUSH
37833: LD_INT 2
37835: ARRAY
37836: PPUSH
37837: CALL_OW 111
// end else
37841: GO 38079
// begin ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , false ) ;
37843: LD_ADDR_EXP 71
37847: PUSH
37848: LD_EXP 71
37852: PPUSH
37853: LD_VAR 0 9
37857: PPUSH
37858: LD_INT 0
37860: PPUSH
37861: CALL_OW 1
37865: ST_TO_ADDR
// if GetEngine ( ai_crane [ base ] ) = engine_combustion then
37866: LD_EXP 68
37870: PUSH
37871: LD_VAR 0 9
37875: ARRAY
37876: PPUSH
37877: CALL_OW 262
37881: PUSH
37882: LD_INT 1
37884: EQUAL
37885: IFFALSE 38058
// begin i = GetFuel ( ai_crane [ base ] ) ;
37887: LD_ADDR_VAR 0 2
37891: PUSH
37892: LD_EXP 68
37896: PUSH
37897: LD_VAR 0 9
37901: ARRAY
37902: PPUSH
37903: CALL_OW 261
37907: ST_TO_ADDR
// if i > 90 or not IsOk ( ai_depot [ base ] ) then
37908: LD_VAR 0 2
37912: PUSH
37913: LD_INT 90
37915: GREATER
37916: PUSH
37917: LD_EXP 35
37921: PUSH
37922: LD_VAR 0 9
37926: ARRAY
37927: PPUSH
37928: CALL_OW 302
37932: NOT
37933: OR
37934: IFFALSE 37961
// crane_is_refueling = Replace ( crane_is_refueling , base , false ) else
37936: LD_ADDR_VAR 0 21
37940: PUSH
37941: LD_VAR 0 21
37945: PPUSH
37946: LD_VAR 0 9
37950: PPUSH
37951: LD_INT 0
37953: PPUSH
37954: CALL_OW 1
37958: ST_TO_ADDR
37959: GO 38058
// if i < 25 or crane_is_refueling [ base ] then
37961: LD_VAR 0 2
37965: PUSH
37966: LD_INT 25
37968: LESS
37969: PUSH
37970: LD_VAR 0 21
37974: PUSH
37975: LD_VAR 0 9
37979: ARRAY
37980: OR
37981: IFFALSE 38058
// begin ComMoveUnit ( ai_crane [ base ] , ai_depot [ base ] ) ;
37983: LD_EXP 68
37987: PUSH
37988: LD_VAR 0 9
37992: ARRAY
37993: PPUSH
37994: LD_EXP 35
37998: PUSH
37999: LD_VAR 0 9
38003: ARRAY
38004: PPUSH
38005: CALL_OW 112
// AddComRefuel ( ai_crane [ base ] , ai_depot [ base ] ) ;
38009: LD_EXP 68
38013: PUSH
38014: LD_VAR 0 9
38018: ARRAY
38019: PPUSH
38020: LD_EXP 35
38024: PUSH
38025: LD_VAR 0 9
38029: ARRAY
38030: PPUSH
38031: CALL_OW 210
// crane_is_refueling = Replace ( crane_is_refueling , base , true ) ;
38035: LD_ADDR_VAR 0 21
38039: PUSH
38040: LD_VAR 0 21
38044: PPUSH
38045: LD_VAR 0 9
38049: PPUSH
38050: LD_INT 1
38052: PPUSH
38053: CALL_OW 1
38057: ST_TO_ADDR
// end ; end ; if not crane_is_refueling [ base ] then
38058: LD_VAR 0 21
38062: PUSH
38063: LD_VAR 0 9
38067: ARRAY
38068: NOT
38069: IFFALSE 38079
// crane_usable = true ;
38071: LD_ADDR_VAR 0 12
38075: PUSH
38076: LD_INT 1
38078: ST_TO_ADDR
// end ; end ; if base = 2 and ai_bunkers [ base ] = 0 and engineers_list > 0 then
38079: LD_VAR 0 9
38083: PUSH
38084: LD_INT 2
38086: EQUAL
38087: PUSH
38088: LD_EXP 39
38092: PUSH
38093: LD_VAR 0 9
38097: ARRAY
38098: PUSH
38099: LD_INT 0
38101: EQUAL
38102: AND
38103: PUSH
38104: LD_VAR 0 3
38108: PUSH
38109: LD_INT 0
38111: GREATER
38112: AND
38113: IFFALSE 38220
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , ru_small_base ] ] ) ;
38115: LD_ADDR_VAR 0 4
38119: PUSH
38120: LD_INT 22
38122: PUSH
38123: LD_EXP 2
38127: PUSH
38128: EMPTY
38129: LIST
38130: LIST
38131: PUSH
38132: LD_INT 95
38134: PUSH
38135: LD_INT 2
38137: PUSH
38138: EMPTY
38139: LIST
38140: LIST
38141: PUSH
38142: EMPTY
38143: LIST
38144: LIST
38145: PPUSH
38146: CALL_OW 69
38150: ST_TO_ADDR
// temp_list = DangerousUnits ( temp_list ) ;
38151: LD_ADDR_VAR 0 4
38155: PUSH
38156: LD_VAR 0 4
38160: PPUSH
38161: CALL 69894 0 1
38165: ST_TO_ADDR
// if temp_list > 0 then
38166: LD_VAR 0 4
38170: PUSH
38171: LD_INT 0
38173: GREATER
38174: IFFALSE 38220
// begin ComAgressiveMove ( engineers_list , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
38176: LD_VAR 0 3
38180: PPUSH
38181: LD_VAR 0 4
38185: PUSH
38186: LD_INT 1
38188: ARRAY
38189: PPUSH
38190: CALL_OW 250
38194: PPUSH
38195: LD_VAR 0 4
38199: PUSH
38200: LD_INT 1
38202: ARRAY
38203: PPUSH
38204: CALL_OW 251
38208: PPUSH
38209: CALL_OW 114
// engineers_list = [ ] ;
38213: LD_ADDR_VAR 0 3
38217: PUSH
38218: EMPTY
38219: ST_TO_ADDR
// end ; end ; if engineers_list = 0 and apemen_engineers_list = 0 and not crane_usable then
38220: LD_VAR 0 3
38224: PUSH
38225: LD_INT 0
38227: EQUAL
38228: PUSH
38229: LD_VAR 0 10
38233: PUSH
38234: LD_INT 0
38236: EQUAL
38237: AND
38238: PUSH
38239: LD_VAR 0 12
38243: NOT
38244: AND
38245: IFFALSE 38249
// continue ;
38247: GO 36965
// temp_list_2 = UnitFilter ( engineers_list , [ f_class , class_engineer ] ) ;
38249: LD_ADDR_VAR 0 8
38253: PUSH
38254: LD_VAR 0 3
38258: PPUSH
38259: LD_INT 25
38261: PUSH
38262: LD_INT 2
38264: PUSH
38265: EMPTY
38266: LIST
38267: LIST
38268: PPUSH
38269: CALL_OW 72
38273: ST_TO_ADDR
// if ai_captured_buildings [ base ] > 0 and temp_list_2 > 0 then
38274: LD_EXP 48
38278: PUSH
38279: LD_VAR 0 9
38283: ARRAY
38284: PUSH
38285: LD_INT 0
38287: GREATER
38288: PUSH
38289: LD_VAR 0 8
38293: PUSH
38294: LD_INT 0
38296: GREATER
38297: AND
38298: IFFALSE 38576
// begin temp_list = [ ] ;
38300: LD_ADDR_VAR 0 4
38304: PUSH
38305: EMPTY
38306: ST_TO_ADDR
// for i in ai_captured_buildings [ base ] do
38307: LD_ADDR_VAR 0 2
38311: PUSH
38312: LD_EXP 48
38316: PUSH
38317: LD_VAR 0 9
38321: ARRAY
38322: PUSH
38323: FOR_IN
38324: IFFALSE 38380
// if GetBType ( i ) in [ b_depot , b_warehouse ] then
38326: LD_VAR 0 2
38330: PPUSH
38331: CALL_OW 266
38335: PUSH
38336: LD_INT 0
38338: PUSH
38339: LD_INT 1
38341: PUSH
38342: EMPTY
38343: LIST
38344: LIST
38345: IN
38346: IFFALSE 38364
// temp_list = temp_list ^ 1 else
38348: LD_ADDR_VAR 0 4
38352: PUSH
38353: LD_VAR 0 4
38357: PUSH
38358: LD_INT 1
38360: ADD
38361: ST_TO_ADDR
38362: GO 38378
// temp_list = temp_list ^ 0 ;
38364: LD_ADDR_VAR 0 4
38368: PUSH
38369: LD_VAR 0 4
38373: PUSH
38374: LD_INT 0
38376: ADD
38377: ST_TO_ADDR
38378: GO 38323
38380: POP
38381: POP
// temp_list = SortListByListDesc ( ai_captured_buildings [ base ] , temp_list ) ;
38382: LD_ADDR_VAR 0 4
38386: PUSH
38387: LD_EXP 48
38391: PUSH
38392: LD_VAR 0 9
38396: ARRAY
38397: PPUSH
38398: LD_VAR 0 4
38402: PPUSH
38403: CALL_OW 77
38407: ST_TO_ADDR
// temp_list_2 = GetHumansOutOfUnits ( temp_list_2 ) ;
38408: LD_ADDR_VAR 0 8
38412: PUSH
38413: LD_VAR 0 8
38417: PPUSH
38418: CALL 45989 0 1
38422: ST_TO_ADDR
// if temp_list_2 > 0 then
38423: LD_VAR 0 8
38427: PUSH
38428: LD_INT 0
38430: GREATER
38431: IFFALSE 38547
// begin temp_list_2 = SortListByListDesc ( temp_list_2 , temp_list_2 ) ;
38433: LD_ADDR_VAR 0 8
38437: PUSH
38438: LD_VAR 0 8
38442: PPUSH
38443: LD_VAR 0 8
38447: PPUSH
38448: CALL_OW 77
38452: ST_TO_ADDR
// SetTaskList ( temp_list_2 [ 1 ] , [ [ e , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) , temp_list [ 1 ] , 0 , 0 , 0 ] ] ) ;
38453: LD_VAR 0 8
38457: PUSH
38458: LD_INT 1
38460: ARRAY
38461: PPUSH
38462: LD_STRING e
38464: PUSH
38465: LD_VAR 0 4
38469: PUSH
38470: LD_INT 1
38472: ARRAY
38473: PPUSH
38474: CALL_OW 250
38478: PUSH
38479: LD_VAR 0 4
38483: PUSH
38484: LD_INT 1
38486: ARRAY
38487: PPUSH
38488: CALL_OW 251
38492: PUSH
38493: LD_VAR 0 4
38497: PUSH
38498: LD_INT 1
38500: ARRAY
38501: PUSH
38502: LD_INT 0
38504: PUSH
38505: LD_INT 0
38507: PUSH
38508: LD_INT 0
38510: PUSH
38511: EMPTY
38512: LIST
38513: LIST
38514: LIST
38515: LIST
38516: LIST
38517: LIST
38518: LIST
38519: PUSH
38520: EMPTY
38521: LIST
38522: PPUSH
38523: CALL_OW 446
// engineers_list = engineers_list diff temp_list_2 [ 1 ] ;
38527: LD_ADDR_VAR 0 3
38531: PUSH
38532: LD_VAR 0 3
38536: PUSH
38537: LD_VAR 0 8
38541: PUSH
38542: LD_INT 1
38544: ARRAY
38545: DIFF
38546: ST_TO_ADDR
// end ; if engineers_list = 0 and apemen_engineers_list = 0 and not crane_usable then
38547: LD_VAR 0 3
38551: PUSH
38552: LD_INT 0
38554: EQUAL
38555: PUSH
38556: LD_VAR 0 10
38560: PUSH
38561: LD_INT 0
38563: EQUAL
38564: AND
38565: PUSH
38566: LD_VAR 0 12
38570: NOT
38571: AND
38572: IFFALSE 38576
// continue ;
38574: GO 36965
// end ; case base of 1 :
38576: LD_VAR 0 9
38580: PUSH
38581: LD_INT 1
38583: DOUBLE
38584: EQUAL
38585: IFTRUE 38589
38587: GO 38608
38589: POP
// begin engineers_not_allowed_to_repair_area = ru_no_engineer_repair_area ;
38590: LD_ADDR_VAR 0 14
38594: PUSH
38595: LD_INT 6
38597: ST_TO_ADDR
// crane_not_allowed_to_repair_area = ru_no_crane_repair_area ;
38598: LD_ADDR_VAR 0 15
38602: PUSH
38603: LD_INT 7
38605: ST_TO_ADDR
// end ; 2 :
38606: GO 38663
38608: LD_INT 2
38610: DOUBLE
38611: EQUAL
38612: IFTRUE 38616
38614: GO 38635
38616: POP
// begin engineers_not_allowed_to_repair_area = 0 ;
38617: LD_ADDR_VAR 0 14
38621: PUSH
38622: LD_INT 0
38624: ST_TO_ADDR
// crane_not_allowed_to_repair_area = 0 ;
38625: LD_ADDR_VAR 0 15
38629: PUSH
38630: LD_INT 0
38632: ST_TO_ADDR
// end ; 3 :
38633: GO 38663
38635: LD_INT 3
38637: DOUBLE
38638: EQUAL
38639: IFTRUE 38643
38641: GO 38662
38643: POP
// begin engineers_not_allowed_to_repair_area = ar_no_engineer_repair_area ;
38644: LD_ADDR_VAR 0 14
38648: PUSH
38649: LD_INT 12
38651: ST_TO_ADDR
// crane_not_allowed_to_repair_area = ar_no_crane_repair_area ;
38652: LD_ADDR_VAR 0 15
38656: PUSH
38657: LD_INT 13
38659: ST_TO_ADDR
// end ; end ;
38660: GO 38663
38662: POP
// repairing_buildings = false ;
38663: LD_ADDR_VAR 0 18
38667: PUSH
38668: LD_INT 0
38670: ST_TO_ADDR
// for k = 1 to 3 do
38671: LD_ADDR_VAR 0 17
38675: PUSH
38676: DOUBLE
38677: LD_INT 1
38679: DEC
38680: ST_TO_ADDR
38681: LD_INT 3
38683: PUSH
38684: FOR_TO
38685: IFFALSE 39423
// begin i = 1 ;
38687: LD_ADDR_VAR 0 2
38691: PUSH
38692: LD_INT 1
38694: ST_TO_ADDR
// buildings_list = [ ] ;
38695: LD_ADDR_VAR 0 5
38699: PUSH
38700: EMPTY
38701: ST_TO_ADDR
// repeat case i of 1 :
38702: LD_VAR 0 2
38706: PUSH
38707: LD_INT 1
38709: DOUBLE
38710: EQUAL
38711: IFTRUE 38715
38713: GO 38764
38715: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] diff ai_dismantle_these_buildings [ base ] , [ f_not , [ f_ok ] ] ) ; 2 :
38716: LD_ADDR_VAR 0 5
38720: PUSH
38721: LD_EXP 58
38725: PUSH
38726: LD_VAR 0 9
38730: ARRAY
38731: PUSH
38732: LD_EXP 79
38736: PUSH
38737: LD_VAR 0 9
38741: ARRAY
38742: DIFF
38743: PPUSH
38744: LD_INT 3
38746: PUSH
38747: LD_INT 50
38749: PUSH
38750: EMPTY
38751: LIST
38752: PUSH
38753: EMPTY
38754: LIST
38755: LIST
38756: PPUSH
38757: CALL_OW 72
38761: ST_TO_ADDR
38762: GO 38826
38764: LD_INT 2
38766: DOUBLE
38767: EQUAL
38768: IFTRUE 38772
38770: GO 38825
38772: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] diff ai_dismantle_these_buildings [ base ] , [ f_not , [ f_lives , 1000 ] ] ) ; end ;
38773: LD_ADDR_VAR 0 5
38777: PUSH
38778: LD_EXP 58
38782: PUSH
38783: LD_VAR 0 9
38787: ARRAY
38788: PUSH
38789: LD_EXP 79
38793: PUSH
38794: LD_VAR 0 9
38798: ARRAY
38799: DIFF
38800: PPUSH
38801: LD_INT 3
38803: PUSH
38804: LD_INT 24
38806: PUSH
38807: LD_INT 1000
38809: PUSH
38810: EMPTY
38811: LIST
38812: LIST
38813: PUSH
38814: EMPTY
38815: LIST
38816: LIST
38817: PPUSH
38818: CALL_OW 72
38822: ST_TO_ADDR
38823: GO 38826
38825: POP
// if base = 1 and i = 2 and ai_building_under_construction [ base ] > 0 then
38826: LD_VAR 0 9
38830: PUSH
38831: LD_INT 1
38833: EQUAL
38834: PUSH
38835: LD_VAR 0 2
38839: PUSH
38840: LD_INT 2
38842: EQUAL
38843: AND
38844: PUSH
38845: LD_EXP 56
38849: PUSH
38850: LD_VAR 0 9
38854: ARRAY
38855: PUSH
38856: LD_INT 0
38858: GREATER
38859: AND
38860: IFFALSE 38884
// buildings_list = buildings_list ^ ai_building_under_construction [ base ] ;
38862: LD_ADDR_VAR 0 5
38866: PUSH
38867: LD_VAR 0 5
38871: PUSH
38872: LD_EXP 56
38876: PUSH
38877: LD_VAR 0 9
38881: ARRAY
38882: ADD
38883: ST_TO_ADDR
// case k of 2 :
38884: LD_VAR 0 17
38888: PUSH
38889: LD_INT 2
38891: DOUBLE
38892: EQUAL
38893: IFTRUE 38897
38895: GO 38950
38897: POP
// begin if under_attack and engineers_not_allowed_to_repair_area > 0 then
38898: LD_VAR 0 19
38902: PUSH
38903: LD_VAR 0 14
38907: PUSH
38908: LD_INT 0
38910: GREATER
38911: AND
38912: IFFALSE 38948
// buildings_list = UnitFilter ( buildings_list , [ f_not , [ f_inarea , engineers_not_allowed_to_repair_area ] ] ) ;
38914: LD_ADDR_VAR 0 5
38918: PUSH
38919: LD_VAR 0 5
38923: PPUSH
38924: LD_INT 3
38926: PUSH
38927: LD_INT 95
38929: PUSH
38930: LD_VAR 0 14
38934: PUSH
38935: EMPTY
38936: LIST
38937: LIST
38938: PUSH
38939: EMPTY
38940: LIST
38941: LIST
38942: PPUSH
38943: CALL_OW 72
38947: ST_TO_ADDR
// end ; 3 :
38948: GO 39006
38950: LD_INT 3
38952: DOUBLE
38953: EQUAL
38954: IFTRUE 38958
38956: GO 39005
38958: POP
// begin if crane_not_allowed_to_repair_area > 0 then
38959: LD_VAR 0 15
38963: PUSH
38964: LD_INT 0
38966: GREATER
38967: IFFALSE 39003
// buildings_list = UnitFilter ( buildings_list , [ f_not , [ f_inarea , crane_not_allowed_to_repair_area ] ] ) ;
38969: LD_ADDR_VAR 0 5
38973: PUSH
38974: LD_VAR 0 5
38978: PPUSH
38979: LD_INT 3
38981: PUSH
38982: LD_INT 95
38984: PUSH
38985: LD_VAR 0 15
38989: PUSH
38990: EMPTY
38991: LIST
38992: LIST
38993: PUSH
38994: EMPTY
38995: LIST
38996: LIST
38997: PPUSH
38998: CALL_OW 72
39002: ST_TO_ADDR
// end ; end ;
39003: GO 39006
39005: POP
// i = i + 1 ;
39006: LD_ADDR_VAR 0 2
39010: PUSH
39011: LD_VAR 0 2
39015: PUSH
39016: LD_INT 1
39018: PLUS
39019: ST_TO_ADDR
// until buildings_list > 0 or i > 2 ;
39020: LD_VAR 0 5
39024: PUSH
39025: LD_INT 0
39027: GREATER
39028: PUSH
39029: LD_VAR 0 2
39033: PUSH
39034: LD_INT 2
39036: GREATER
39037: OR
39038: IFFALSE 38702
// if buildings_list > 0 then
39040: LD_VAR 0 5
39044: PUSH
39045: LD_INT 0
39047: GREATER
39048: IFFALSE 39421
// begin case k of 1 :
39050: LD_VAR 0 17
39054: PUSH
39055: LD_INT 1
39057: DOUBLE
39058: EQUAL
39059: IFTRUE 39063
39061: GO 39099
39063: POP
// begin if apemen_engineers_list > 0 then
39064: LD_VAR 0 10
39068: PUSH
39069: LD_INT 0
39071: GREATER
39072: IFFALSE 39082
// repairing_buildings = true ;
39074: LD_ADDR_VAR 0 18
39078: PUSH
39079: LD_INT 1
39081: ST_TO_ADDR
// workers_list = GetHumansOutOfUnits ( apemen_engineers_list ) ;
39082: LD_ADDR_VAR 0 16
39086: PUSH
39087: LD_VAR 0 10
39091: PPUSH
39092: CALL 45989 0 1
39096: ST_TO_ADDR
// end ; 2 :
39097: GO 39237
39099: LD_INT 2
39101: DOUBLE
39102: EQUAL
39103: IFTRUE 39107
39105: GO 39143
39107: POP
// begin if engineers_list > 0 then
39108: LD_VAR 0 3
39112: PUSH
39113: LD_INT 0
39115: GREATER
39116: IFFALSE 39126
// repairing_buildings = true ;
39118: LD_ADDR_VAR 0 18
39122: PUSH
39123: LD_INT 1
39125: ST_TO_ADDR
// workers_list = GetHumansOutOfUnits ( engineers_list ) ;
39126: LD_ADDR_VAR 0 16
39130: PUSH
39131: LD_VAR 0 3
39135: PPUSH
39136: CALL 45989 0 1
39140: ST_TO_ADDR
// end ; 3 :
39141: GO 39237
39143: LD_INT 3
39145: DOUBLE
39146: EQUAL
39147: IFTRUE 39151
39149: GO 39236
39151: POP
// begin if ai_crane [ base ] > 0 then
39152: LD_EXP 68
39156: PUSH
39157: LD_VAR 0 9
39161: ARRAY
39162: PUSH
39163: LD_INT 0
39165: GREATER
39166: IFFALSE 39176
// repairing_buildings = true ;
39168: LD_ADDR_VAR 0 18
39172: PUSH
39173: LD_INT 1
39175: ST_TO_ADDR
// if ai_crane [ base ] > 0 and crane_usable then
39176: LD_EXP 68
39180: PUSH
39181: LD_VAR 0 9
39185: ARRAY
39186: PUSH
39187: LD_INT 0
39189: GREATER
39190: PUSH
39191: LD_VAR 0 12
39195: AND
39196: IFFALSE 39227
// begin workers_list = [ ai_crane [ base ] ] ;
39198: LD_ADDR_VAR 0 16
39202: PUSH
39203: LD_EXP 68
39207: PUSH
39208: LD_VAR 0 9
39212: ARRAY
39213: PUSH
39214: EMPTY
39215: LIST
39216: ST_TO_ADDR
// crane_usable = false ;
39217: LD_ADDR_VAR 0 12
39221: PUSH
39222: LD_INT 0
39224: ST_TO_ADDR
// end else
39225: GO 39234
// workers_list = [ ] ;
39227: LD_ADDR_VAR 0 16
39231: PUSH
39232: EMPTY
39233: ST_TO_ADDR
// end ; end ;
39234: GO 39237
39236: POP
// if base = 1 then
39237: LD_VAR 0 9
39241: PUSH
39242: LD_INT 1
39244: EQUAL
39245: IFFALSE 39269
// workers_list = workers_list diff ai_building_constructor [ base ] ;
39247: LD_ADDR_VAR 0 16
39251: PUSH
39252: LD_VAR 0 16
39256: PUSH
39257: LD_EXP 59
39261: PUSH
39262: LD_VAR 0 9
39266: ARRAY
39267: DIFF
39268: ST_TO_ADDR
// repeat i = 1 ;
39269: LD_ADDR_VAR 0 2
39273: PUSH
39274: LD_INT 1
39276: ST_TO_ADDR
// while i <= buildings_list do
39277: LD_VAR 0 2
39281: PUSH
39282: LD_VAR 0 5
39286: LESSEQUAL
39287: IFFALSE 39411
// begin if workers_list = 0 then
39289: LD_VAR 0 16
39293: PUSH
39294: LD_INT 0
39296: EQUAL
39297: IFFALSE 39301
// break ;
39299: GO 39411
// temp_unit = NearestUnitToUnit ( workers_list , buildings_list [ i ] ) ;
39301: LD_ADDR_VAR 0 6
39305: PUSH
39306: LD_VAR 0 16
39310: PPUSH
39311: LD_VAR 0 5
39315: PUSH
39316: LD_VAR 0 2
39320: ARRAY
39321: PPUSH
39322: CALL_OW 74
39326: ST_TO_ADDR
// ComRepairBuilding ( temp_unit , buildings_list [ i ] ) ;
39327: LD_VAR 0 6
39331: PPUSH
39332: LD_VAR 0 5
39336: PUSH
39337: LD_VAR 0 2
39341: ARRAY
39342: PPUSH
39343: CALL_OW 130
// workers_list = workers_list diff temp_unit ;
39347: LD_ADDR_VAR 0 16
39351: PUSH
39352: LD_VAR 0 16
39356: PUSH
39357: LD_VAR 0 6
39361: DIFF
39362: ST_TO_ADDR
// engineers_list = engineers_list diff temp_unit ;
39363: LD_ADDR_VAR 0 3
39367: PUSH
39368: LD_VAR 0 3
39372: PUSH
39373: LD_VAR 0 6
39377: DIFF
39378: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff temp_unit ;
39379: LD_ADDR_VAR 0 10
39383: PUSH
39384: LD_VAR 0 10
39388: PUSH
39389: LD_VAR 0 6
39393: DIFF
39394: ST_TO_ADDR
// i = i + 1 ;
39395: LD_ADDR_VAR 0 2
39399: PUSH
39400: LD_VAR 0 2
39404: PUSH
39405: LD_INT 1
39407: PLUS
39408: ST_TO_ADDR
// end ;
39409: GO 39277
// until workers_list = 0 ;
39411: LD_VAR 0 16
39415: PUSH
39416: LD_INT 0
39418: EQUAL
39419: IFFALSE 39269
// end ; end ;
39421: GO 38684
39423: POP
39424: POP
// if repairing_buildings and base <> 1 then
39425: LD_VAR 0 18
39429: PUSH
39430: LD_VAR 0 9
39434: PUSH
39435: LD_INT 1
39437: NONEQUAL
39438: AND
39439: IFFALSE 39443
// continue ;
39441: GO 36965
// if not under_attack or base = 1 then
39443: LD_VAR 0 19
39447: NOT
39448: PUSH
39449: LD_VAR 0 9
39453: PUSH
39454: LD_INT 1
39456: EQUAL
39457: OR
39458: IFFALSE 44487
// begin if ai_building_under_construction [ base ] > 0 then
39460: LD_EXP 56
39464: PUSH
39465: LD_VAR 0 9
39469: ARRAY
39470: PUSH
39471: LD_INT 0
39473: GREATER
39474: IFFALSE 39648
// if BuildingStatus ( ai_building_under_construction [ base ] ) = bs_build then
39476: LD_EXP 56
39480: PUSH
39481: LD_VAR 0 9
39485: ARRAY
39486: PPUSH
39487: CALL_OW 461
39491: PUSH
39492: LD_INT 1
39494: EQUAL
39495: IFFALSE 39610
// begin temp_list_2 = GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) ;
39497: LD_ADDR_VAR 0 8
39501: PUSH
39502: LD_VAR 0 3
39506: PUSH
39507: LD_VAR 0 10
39511: ADD
39512: PPUSH
39513: CALL 45989 0 1
39517: ST_TO_ADDR
// if crane_usable and not IsInArea ( ai_building_under_construction [ base ] , crane_not_allowed_to_repair_area ) then
39518: LD_VAR 0 12
39522: PUSH
39523: LD_EXP 56
39527: PUSH
39528: LD_VAR 0 9
39532: ARRAY
39533: PPUSH
39534: LD_VAR 0 15
39538: PPUSH
39539: CALL_OW 308
39543: NOT
39544: AND
39545: IFFALSE 39569
// temp_list_2 = temp_list_2 ^ ai_crane [ base ] ;
39547: LD_ADDR_VAR 0 8
39551: PUSH
39552: LD_VAR 0 8
39556: PUSH
39557: LD_EXP 68
39561: PUSH
39562: LD_VAR 0 9
39566: ARRAY
39567: ADD
39568: ST_TO_ADDR
// for i in temp_list_2 do
39569: LD_ADDR_VAR 0 2
39573: PUSH
39574: LD_VAR 0 8
39578: PUSH
39579: FOR_IN
39580: IFFALSE 39604
// ComRepairBuilding ( i , ai_building_under_construction [ base ] ) ;
39582: LD_VAR 0 2
39586: PPUSH
39587: LD_EXP 56
39591: PUSH
39592: LD_VAR 0 9
39596: ARRAY
39597: PPUSH
39598: CALL_OW 130
39602: GO 39579
39604: POP
39605: POP
// continue ;
39606: GO 36965
// end else
39608: GO 39648
// begin ComCancel ( ai_building_under_construction [ base ] ) ;
39610: LD_EXP 56
39614: PUSH
39615: LD_VAR 0 9
39619: ARRAY
39620: PPUSH
39621: CALL_OW 127
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
39625: LD_ADDR_EXP 56
39629: PUSH
39630: LD_EXP 56
39634: PPUSH
39635: LD_VAR 0 9
39639: PPUSH
39640: LD_INT 0
39642: PPUSH
39643: CALL_OW 1
39647: ST_TO_ADDR
// end ; if ai_dismantle_these_buildings [ base ] > 0 and engineers_list > 0 then
39648: LD_EXP 79
39652: PUSH
39653: LD_VAR 0 9
39657: ARRAY
39658: PUSH
39659: LD_INT 0
39661: GREATER
39662: PUSH
39663: LD_VAR 0 3
39667: PUSH
39668: LD_INT 0
39670: GREATER
39671: AND
39672: IFFALSE 39836
// begin is_dismantling = true ;
39674: LD_ADDR_VAR 0 20
39678: PUSH
39679: LD_INT 1
39681: ST_TO_ADDR
// if ai_building_constructor [ base ] in engineers_list then
39682: LD_EXP 59
39686: PUSH
39687: LD_VAR 0 9
39691: ARRAY
39692: PUSH
39693: LD_VAR 0 3
39697: IN
39698: IFFALSE 39718
// k = ai_building_constructor [ base ] else
39700: LD_ADDR_VAR 0 17
39704: PUSH
39705: LD_EXP 59
39709: PUSH
39710: LD_VAR 0 9
39714: ARRAY
39715: ST_TO_ADDR
39716: GO 39738
// k = BestFromListByList ( engineers_list , engineers_list ) ;
39718: LD_ADDR_VAR 0 17
39722: PUSH
39723: LD_VAR 0 3
39727: PPUSH
39728: LD_VAR 0 3
39732: PPUSH
39733: CALL_OW 79
39737: ST_TO_ADDR
// engineers_list = engineers_list diff k ;
39738: LD_ADDR_VAR 0 3
39742: PUSH
39743: LD_VAR 0 3
39747: PUSH
39748: LD_VAR 0 17
39752: DIFF
39753: ST_TO_ADDR
// case GetType ( IsInUnit ( k ) ) of unit_vehicle :
39754: LD_VAR 0 17
39758: PPUSH
39759: CALL_OW 310
39763: PPUSH
39764: CALL_OW 247
39768: PUSH
39769: LD_INT 2
39771: DOUBLE
39772: EQUAL
39773: IFTRUE 39777
39775: GO 39789
39777: POP
// ComExitVehicle ( k ) ; unit_building :
39778: LD_VAR 0 17
39782: PPUSH
39783: CALL_OW 121
39787: GO 39834
39789: LD_INT 3
39791: DOUBLE
39792: EQUAL
39793: IFTRUE 39797
39795: GO 39809
39797: POP
// ComExitBuilding ( k ) ; else
39798: LD_VAR 0 17
39802: PPUSH
39803: CALL_OW 122
39807: GO 39834
39809: POP
// ComDismantle ( k , ai_dismantle_these_buildings [ base ] [ 1 ] ) ; end ;
39810: LD_VAR 0 17
39814: PPUSH
39815: LD_EXP 79
39819: PUSH
39820: LD_VAR 0 9
39824: ARRAY
39825: PUSH
39826: LD_INT 1
39828: ARRAY
39829: PPUSH
39830: CALL_OW 167
// end else
39834: GO 39844
// is_dismantling = false ;
39836: LD_ADDR_VAR 0 20
39840: PUSH
39841: LD_INT 0
39843: ST_TO_ADDR
// if ( ai_all_buildings [ base ] - ai_excepted_buildings [ base ] < ai_buildings_locations [ base ] or ai_upcoming_building_data [ base ] > 0 or do_upgrade_armoury ) and not is_dismantling then
39844: LD_EXP 58
39848: PUSH
39849: LD_VAR 0 9
39853: ARRAY
39854: PUSH
39855: LD_EXP 77
39859: PUSH
39860: LD_VAR 0 9
39864: ARRAY
39865: MINUS
39866: PUSH
39867: LD_EXP 47
39871: PUSH
39872: LD_VAR 0 9
39876: ARRAY
39877: LESS
39878: PUSH
39879: LD_EXP 62
39883: PUSH
39884: LD_VAR 0 9
39888: ARRAY
39889: PUSH
39890: LD_INT 0
39892: GREATER
39893: OR
39894: PUSH
39895: LD_EXP 102
39899: OR
39900: PUSH
39901: LD_VAR 0 20
39905: NOT
39906: AND
39907: IFFALSE 44366
// begin if ai_upcoming_building_data [ base ] = 0 then
39909: LD_EXP 62
39913: PUSH
39914: LD_VAR 0 9
39918: ARRAY
39919: PUSH
39920: LD_INT 0
39922: EQUAL
39923: IFFALSE 40443
// begin temp_list = [ ] ;
39925: LD_ADDR_VAR 0 4
39929: PUSH
39930: EMPTY
39931: ST_TO_ADDR
// if do_upgrade_armoury then
39932: LD_EXP 102
39936: IFFALSE 40014
// begin do_upgrade_armoury = false ;
39938: LD_ADDR_EXP 102
39942: PUSH
39943: LD_INT 0
39945: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
39946: LD_ADDR_VAR 0 2
39950: PUSH
39951: LD_EXP 47
39955: PUSH
39956: LD_VAR 0 9
39960: ARRAY
39961: PUSH
39962: FOR_IN
39963: IFFALSE 40012
// if GetBType ( HexInfo ( i [ 1 ] , i [ 2 ] ) ) = b_armoury then
39965: LD_VAR 0 2
39969: PUSH
39970: LD_INT 1
39972: ARRAY
39973: PPUSH
39974: LD_VAR 0 2
39978: PUSH
39979: LD_INT 2
39981: ARRAY
39982: PPUSH
39983: CALL_OW 428
39987: PPUSH
39988: CALL_OW 266
39992: PUSH
39993: LD_INT 4
39995: EQUAL
39996: IFFALSE 40010
// begin temp_list = i ;
39998: LD_ADDR_VAR 0 4
40002: PUSH
40003: LD_VAR 0 2
40007: ST_TO_ADDR
// break ;
40008: GO 40012
// end ;
40010: GO 39962
40012: POP
40013: POP
// end ; if temp_list = 0 then
40014: LD_VAR 0 4
40018: PUSH
40019: LD_INT 0
40021: EQUAL
40022: IFFALSE 40112
// for i in ai_buildings_locations [ base ] do
40024: LD_ADDR_VAR 0 2
40028: PUSH
40029: LD_EXP 47
40033: PUSH
40034: LD_VAR 0 9
40038: ARRAY
40039: PUSH
40040: FOR_IN
40041: IFFALSE 40110
// if GetBType ( HexInfo ( i [ 1 ] , i [ 2 ] ) ) = - 1 and not i in ai_cannot_rebuild_these_buildings [ base ] then
40043: LD_VAR 0 2
40047: PUSH
40048: LD_INT 1
40050: ARRAY
40051: PPUSH
40052: LD_VAR 0 2
40056: PUSH
40057: LD_INT 2
40059: ARRAY
40060: PPUSH
40061: CALL_OW 428
40065: PPUSH
40066: CALL_OW 266
40070: PUSH
40071: LD_INT 1
40073: NEG
40074: EQUAL
40075: PUSH
40076: LD_VAR 0 2
40080: PUSH
40081: LD_EXP 63
40085: PUSH
40086: LD_VAR 0 9
40090: ARRAY
40091: IN
40092: NOT
40093: AND
40094: IFFALSE 40108
// begin temp_list = i ;
40096: LD_ADDR_VAR 0 4
40100: PUSH
40101: LD_VAR 0 2
40105: ST_TO_ADDR
// break ;
40106: GO 40110
// end ;
40108: GO 40040
40110: POP
40111: POP
// if temp_list > 0 then
40112: LD_VAR 0 4
40116: PUSH
40117: LD_INT 0
40119: GREATER
40120: IFFALSE 40443
// begin if temp_list [ 4 ] = b_bunker and GetBaseNation ( base ) in [ nation_american , nation_russian ] then
40122: LD_VAR 0 4
40126: PUSH
40127: LD_INT 4
40129: ARRAY
40130: PUSH
40131: LD_INT 32
40133: EQUAL
40134: PUSH
40135: LD_VAR 0 9
40139: PPUSH
40140: CALL 27180 0 1
40144: PUSH
40145: LD_INT 1
40147: PUSH
40148: LD_INT 3
40150: PUSH
40151: EMPTY
40152: LIST
40153: LIST
40154: IN
40155: AND
40156: IFFALSE 40418
// begin k = 0 ;
40158: LD_ADDR_VAR 0 17
40162: PUSH
40163: LD_INT 0
40165: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
40166: LD_ADDR_VAR 0 2
40170: PUSH
40171: LD_EXP 47
40175: PUSH
40176: LD_VAR 0 9
40180: ARRAY
40181: PUSH
40182: FOR_IN
40183: IFFALSE 40234
// if i [ 4 ] in [ b_breastwork , b_bunker , b_armoury , b_barracks , b_fort ] then
40185: LD_VAR 0 2
40189: PUSH
40190: LD_INT 4
40192: ARRAY
40193: PUSH
40194: LD_INT 31
40196: PUSH
40197: LD_INT 32
40199: PUSH
40200: LD_INT 4
40202: PUSH
40203: LD_INT 5
40205: PUSH
40206: LD_INT 35
40208: PUSH
40209: EMPTY
40210: LIST
40211: LIST
40212: LIST
40213: LIST
40214: LIST
40215: IN
40216: IFFALSE 40232
// k = k + 1 ;
40218: LD_ADDR_VAR 0 17
40222: PUSH
40223: LD_VAR 0 17
40227: PUSH
40228: LD_INT 1
40230: PLUS
40231: ST_TO_ADDR
40232: GO 40182
40234: POP
40235: POP
// if k > ai_soldiers [ base ] then
40236: LD_VAR 0 17
40240: PUSH
40241: LD_EXP 26
40245: PUSH
40246: LD_VAR 0 9
40250: ARRAY
40251: GREATER
40252: IFFALSE 40418
// begin for i = 1 to ai_buildings_locations [ base ] do
40254: LD_ADDR_VAR 0 2
40258: PUSH
40259: DOUBLE
40260: LD_INT 1
40262: DEC
40263: ST_TO_ADDR
40264: LD_EXP 47
40268: PUSH
40269: LD_VAR 0 9
40273: ARRAY
40274: PUSH
40275: FOR_TO
40276: IFFALSE 40395
// if ai_buildings_locations [ base ] [ i ] = temp_list then
40278: LD_EXP 47
40282: PUSH
40283: LD_VAR 0 9
40287: ARRAY
40288: PUSH
40289: LD_VAR 0 2
40293: ARRAY
40294: PUSH
40295: LD_VAR 0 4
40299: EQUAL
40300: IFFALSE 40393
// begin temp_list_2 = Replace ( ai_buildings_locations [ base ] [ i ] , 4 , b_turret ) ;
40302: LD_ADDR_VAR 0 8
40306: PUSH
40307: LD_EXP 47
40311: PUSH
40312: LD_VAR 0 9
40316: ARRAY
40317: PUSH
40318: LD_VAR 0 2
40322: ARRAY
40323: PPUSH
40324: LD_INT 4
40326: PPUSH
40327: LD_INT 33
40329: PPUSH
40330: CALL_OW 1
40334: ST_TO_ADDR
// temp_list_2 = Replace ( ai_buildings_locations [ base ] , i , temp_list_2 ) ;
40335: LD_ADDR_VAR 0 8
40339: PUSH
40340: LD_EXP 47
40344: PUSH
40345: LD_VAR 0 9
40349: ARRAY
40350: PPUSH
40351: LD_VAR 0 2
40355: PPUSH
40356: LD_VAR 0 8
40360: PPUSH
40361: CALL_OW 1
40365: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list_2 ) ;
40366: LD_ADDR_EXP 47
40370: PUSH
40371: LD_EXP 47
40375: PPUSH
40376: LD_VAR 0 9
40380: PPUSH
40381: LD_VAR 0 8
40385: PPUSH
40386: CALL_OW 1
40390: ST_TO_ADDR
// break ;
40391: GO 40395
// end ;
40393: GO 40275
40395: POP
40396: POP
// temp_list = Replace ( temp_list , 4 , b_turret ) ;
40397: LD_ADDR_VAR 0 4
40401: PUSH
40402: LD_VAR 0 4
40406: PPUSH
40407: LD_INT 4
40409: PPUSH
40410: LD_INT 33
40412: PPUSH
40413: CALL_OW 1
40417: ST_TO_ADDR
// end ; end ; ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , temp_list ) ;
40418: LD_ADDR_EXP 62
40422: PUSH
40423: LD_EXP 62
40427: PPUSH
40428: LD_VAR 0 9
40432: PPUSH
40433: LD_VAR 0 4
40437: PPUSH
40438: CALL_OW 1
40442: ST_TO_ADDR
// end ; end ; if ai_upcoming_building_data [ base ] > 0 then
40443: LD_EXP 62
40447: PUSH
40448: LD_VAR 0 9
40452: ARRAY
40453: PUSH
40454: LD_INT 0
40456: GREATER
40457: IFFALSE 44366
// begin if ai_building_constructor [ base ] = 0 then
40459: LD_EXP 59
40463: PUSH
40464: LD_VAR 0 9
40468: ARRAY
40469: PUSH
40470: LD_INT 0
40472: EQUAL
40473: IFFALSE 40791
// begin temp_list_2 = UnitFilter ( ai_engineers [ base ] , [ f_class , class_engineer ] ) ;
40475: LD_ADDR_VAR 0 8
40479: PUSH
40480: LD_EXP 28
40484: PUSH
40485: LD_VAR 0 9
40489: ARRAY
40490: PPUSH
40491: LD_INT 25
40493: PUSH
40494: LD_INT 2
40496: PUSH
40497: EMPTY
40498: LIST
40499: LIST
40500: PPUSH
40501: CALL_OW 72
40505: ST_TO_ADDR
// if temp_list_2 > 0 then
40506: LD_VAR 0 8
40510: PUSH
40511: LD_INT 0
40513: GREATER
40514: IFFALSE 40601
// begin temp_list = [ ] ;
40516: LD_ADDR_VAR 0 4
40520: PUSH
40521: EMPTY
40522: ST_TO_ADDR
// for i in temp_list_2 do
40523: LD_ADDR_VAR 0 2
40527: PUSH
40528: LD_VAR 0 8
40532: PUSH
40533: FOR_IN
40534: IFFALSE 40562
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
40536: LD_ADDR_VAR 0 4
40540: PUSH
40541: LD_VAR 0 4
40545: PUSH
40546: LD_VAR 0 2
40550: PPUSH
40551: LD_INT 2
40553: PPUSH
40554: CALL_OW 259
40558: ADD
40559: ST_TO_ADDR
40560: GO 40533
40562: POP
40563: POP
// ai_building_constructor = Replace ( ai_building_constructor , base , BestFromListByList ( temp_list_2 , temp_list ) ) ;
40564: LD_ADDR_EXP 59
40568: PUSH
40569: LD_EXP 59
40573: PPUSH
40574: LD_VAR 0 9
40578: PPUSH
40579: LD_VAR 0 8
40583: PPUSH
40584: LD_VAR 0 4
40588: PPUSH
40589: CALL_OW 79
40593: PPUSH
40594: CALL_OW 1
40598: ST_TO_ADDR
// end else
40599: GO 40791
// if ai_engineers [ base ] = 0 and ai_crane [ base ] > 0 and crane_usable then
40601: LD_EXP 28
40605: PUSH
40606: LD_VAR 0 9
40610: ARRAY
40611: PUSH
40612: LD_INT 0
40614: EQUAL
40615: PUSH
40616: LD_EXP 68
40620: PUSH
40621: LD_VAR 0 9
40625: ARRAY
40626: PUSH
40627: LD_INT 0
40629: GREATER
40630: AND
40631: PUSH
40632: LD_VAR 0 12
40636: AND
40637: IFFALSE 40791
// begin if InArea ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , crane_not_allowed_to_repair_area ) then
40639: LD_EXP 62
40643: PUSH
40644: LD_VAR 0 9
40648: ARRAY
40649: PUSH
40650: LD_INT 1
40652: ARRAY
40653: PPUSH
40654: LD_EXP 62
40658: PUSH
40659: LD_VAR 0 9
40663: ARRAY
40664: PUSH
40665: LD_INT 2
40667: ARRAY
40668: PPUSH
40669: LD_VAR 0 15
40673: PPUSH
40674: CALL_OW 309
40678: IFFALSE 40760
// begin temp_list = ai_cannot_rebuild_these_buildings [ base ] ^ [ ai_upcoming_building_data [ base ] ] ;
40680: LD_ADDR_VAR 0 4
40684: PUSH
40685: LD_EXP 63
40689: PUSH
40690: LD_VAR 0 9
40694: ARRAY
40695: PUSH
40696: LD_EXP 62
40700: PUSH
40701: LD_VAR 0 9
40705: ARRAY
40706: PUSH
40707: EMPTY
40708: LIST
40709: ADD
40710: ST_TO_ADDR
// ai_cannot_rebuild_these_buildings = Replace ( ai_cannot_rebuild_these_buildings , base , temp_list ) ;
40711: LD_ADDR_EXP 63
40715: PUSH
40716: LD_EXP 63
40720: PPUSH
40721: LD_VAR 0 9
40725: PPUSH
40726: LD_VAR 0 4
40730: PPUSH
40731: CALL_OW 1
40735: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
40736: LD_ADDR_EXP 62
40740: PUSH
40741: LD_EXP 62
40745: PPUSH
40746: LD_VAR 0 9
40750: PPUSH
40751: EMPTY
40752: PPUSH
40753: CALL_OW 1
40757: ST_TO_ADDR
// end else
40758: GO 40791
// ai_building_constructor = Replace ( ai_building_constructor , base , ai_crane [ base ] ) ;
40760: LD_ADDR_EXP 59
40764: PUSH
40765: LD_EXP 59
40769: PPUSH
40770: LD_VAR 0 9
40774: PPUSH
40775: LD_EXP 68
40779: PUSH
40780: LD_VAR 0 9
40784: ARRAY
40785: PPUSH
40786: CALL_OW 1
40790: ST_TO_ADDR
// end ; end ; if ai_building_constructor [ base ] > 0 and ( ai_building_constructor [ base ] in engineers_list or ( ai_building_constructor [ base ] = ai_crane [ base ] and crane_usable ) ) then
40791: LD_EXP 59
40795: PUSH
40796: LD_VAR 0 9
40800: ARRAY
40801: PUSH
40802: LD_INT 0
40804: GREATER
40805: PUSH
40806: LD_EXP 59
40810: PUSH
40811: LD_VAR 0 9
40815: ARRAY
40816: PUSH
40817: LD_VAR 0 3
40821: IN
40822: PUSH
40823: LD_EXP 59
40827: PUSH
40828: LD_VAR 0 9
40832: ARRAY
40833: PUSH
40834: LD_EXP 68
40838: PUSH
40839: LD_VAR 0 9
40843: ARRAY
40844: EQUAL
40845: PUSH
40846: LD_VAR 0 12
40850: AND
40851: OR
40852: AND
40853: IFFALSE 44366
// begin engineers_list = engineers_list diff ai_building_constructor [ base ] ;
40855: LD_ADDR_VAR 0 3
40859: PUSH
40860: LD_VAR 0 3
40864: PUSH
40865: LD_EXP 59
40869: PUSH
40870: LD_VAR 0 9
40874: ARRAY
40875: DIFF
40876: ST_TO_ADDR
// if ai_building_constructor [ base ] = ai_crane [ base ] then
40877: LD_EXP 59
40881: PUSH
40882: LD_VAR 0 9
40886: ARRAY
40887: PUSH
40888: LD_EXP 68
40892: PUSH
40893: LD_VAR 0 9
40897: ARRAY
40898: EQUAL
40899: IFFALSE 40909
// crane_usable = false ;
40901: LD_ADDR_VAR 0 12
40905: PUSH
40906: LD_INT 0
40908: ST_TO_ADDR
// away_dist = 7 ;
40909: LD_ADDR_VAR 0 7
40913: PUSH
40914: LD_INT 7
40916: ST_TO_ADDR
// if ai_vehicle_being_moved [ base ] = 0 then
40917: LD_EXP 60
40921: PUSH
40922: LD_VAR 0 9
40926: ARRAY
40927: PUSH
40928: LD_INT 0
40930: EQUAL
40931: IFFALSE 44108
// begin temp_list = UnitFilter ( ai_vehicles_defend [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] ^ ai_control_tower_vehicles [ base ] ^ ai_crane [ base ] ^ ai_cargo_bay [ base ] , [ [ f_control , control_manual ] , [ f_empty ] , [ f_distxy , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , away_dist ] ] ) ;
40933: LD_ADDR_VAR 0 4
40937: PUSH
40938: LD_EXP 49
40942: PUSH
40943: LD_VAR 0 9
40947: ARRAY
40948: PUSH
40949: LD_EXP 83
40953: PUSH
40954: LD_VAR 0 9
40958: ARRAY
40959: ADD
40960: PUSH
40961: LD_EXP 84
40965: PUSH
40966: LD_VAR 0 9
40970: ARRAY
40971: ADD
40972: PUSH
40973: LD_EXP 75
40977: PUSH
40978: LD_VAR 0 9
40982: ARRAY
40983: ADD
40984: PUSH
40985: LD_EXP 68
40989: PUSH
40990: LD_VAR 0 9
40994: ARRAY
40995: ADD
40996: PUSH
40997: LD_EXP 65
41001: PUSH
41002: LD_VAR 0 9
41006: ARRAY
41007: ADD
41008: PPUSH
41009: LD_INT 33
41011: PUSH
41012: LD_INT 1
41014: PUSH
41015: EMPTY
41016: LIST
41017: LIST
41018: PUSH
41019: LD_INT 58
41021: PUSH
41022: EMPTY
41023: LIST
41024: PUSH
41025: LD_INT 92
41027: PUSH
41028: LD_EXP 62
41032: PUSH
41033: LD_VAR 0 9
41037: ARRAY
41038: PUSH
41039: LD_INT 1
41041: ARRAY
41042: PUSH
41043: LD_EXP 62
41047: PUSH
41048: LD_VAR 0 9
41052: ARRAY
41053: PUSH
41054: LD_INT 2
41056: ARRAY
41057: PUSH
41058: LD_VAR 0 7
41062: PUSH
41063: EMPTY
41064: LIST
41065: LIST
41066: LIST
41067: LIST
41068: PUSH
41069: EMPTY
41070: LIST
41071: LIST
41072: LIST
41073: PPUSH
41074: CALL_OW 72
41078: ST_TO_ADDR
// if temp_list > 0 then
41079: LD_VAR 0 4
41083: PUSH
41084: LD_INT 0
41086: GREATER
41087: IFFALSE 41298
// begin if ai_building_constructor [ base ] = ai_crane [ base ] then
41089: LD_EXP 59
41093: PUSH
41094: LD_VAR 0 9
41098: ARRAY
41099: PUSH
41100: LD_EXP 68
41104: PUSH
41105: LD_VAR 0 9
41109: ARRAY
41110: EQUAL
41111: IFFALSE 41216
// begin temp_list = ai_cannot_rebuild_these_buildings [ base ] ^ [ ai_upcoming_building_data [ base ] ] ;
41113: LD_ADDR_VAR 0 4
41117: PUSH
41118: LD_EXP 63
41122: PUSH
41123: LD_VAR 0 9
41127: ARRAY
41128: PUSH
41129: LD_EXP 62
41133: PUSH
41134: LD_VAR 0 9
41138: ARRAY
41139: PUSH
41140: EMPTY
41141: LIST
41142: ADD
41143: ST_TO_ADDR
// ai_cannot_rebuild_these_buildings = Replace ( ai_cannot_rebuild_these_buildings , base , temp_list ) ;
41144: LD_ADDR_EXP 63
41148: PUSH
41149: LD_EXP 63
41153: PPUSH
41154: LD_VAR 0 9
41158: PPUSH
41159: LD_VAR 0 4
41163: PPUSH
41164: CALL_OW 1
41168: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
41169: LD_ADDR_EXP 62
41173: PUSH
41174: LD_EXP 62
41178: PPUSH
41179: LD_VAR 0 9
41183: PPUSH
41184: EMPTY
41185: PPUSH
41186: CALL_OW 1
41190: ST_TO_ADDR
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
41191: LD_ADDR_EXP 59
41195: PUSH
41196: LD_EXP 59
41200: PPUSH
41201: LD_VAR 0 9
41205: PPUSH
41206: LD_INT 0
41208: PPUSH
41209: CALL_OW 1
41213: ST_TO_ADDR
// end else
41214: GO 41296
// begin ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , temp_list [ 1 ] ) ;
41216: LD_ADDR_EXP 60
41220: PUSH
41221: LD_EXP 60
41225: PPUSH
41226: LD_VAR 0 9
41230: PPUSH
41231: LD_VAR 0 4
41235: PUSH
41236: LD_INT 1
41238: ARRAY
41239: PPUSH
41240: CALL_OW 1
41244: ST_TO_ADDR
// temp_list_2 = ai_vehicles_having_been_moved [ base ] ^ temp_list [ 1 ] ;
41245: LD_ADDR_VAR 0 8
41249: PUSH
41250: LD_EXP 61
41254: PUSH
41255: LD_VAR 0 9
41259: ARRAY
41260: PUSH
41261: LD_VAR 0 4
41265: PUSH
41266: LD_INT 1
41268: ARRAY
41269: ADD
41270: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , temp_list_2 ) ;
41271: LD_ADDR_EXP 61
41275: PUSH
41276: LD_EXP 61
41280: PPUSH
41281: LD_VAR 0 9
41285: PPUSH
41286: LD_VAR 0 8
41290: PPUSH
41291: CALL_OW 1
41295: ST_TO_ADDR
// end ; end else
41296: GO 44106
// case GetType ( IsInUnit ( ai_building_constructor [ base ] ) ) of unit_building :
41298: LD_EXP 59
41302: PUSH
41303: LD_VAR 0 9
41307: ARRAY
41308: PPUSH
41309: CALL_OW 310
41313: PPUSH
41314: CALL_OW 247
41318: PUSH
41319: LD_INT 3
41321: DOUBLE
41322: EQUAL
41323: IFTRUE 41327
41325: GO 41345
41327: POP
// ComExitBuilding ( ai_building_constructor [ base ] ) ; unit_vehicle :
41328: LD_EXP 59
41332: PUSH
41333: LD_VAR 0 9
41337: ARRAY
41338: PPUSH
41339: CALL_OW 122
41343: GO 44106
41345: LD_INT 2
41347: DOUBLE
41348: EQUAL
41349: IFTRUE 41353
41351: GO 41371
41353: POP
// ComExitVehicle ( ai_building_constructor [ base ] ) ; else
41354: LD_EXP 59
41358: PUSH
41359: LD_VAR 0 9
41363: ARRAY
41364: PPUSH
41365: CALL_OW 121
41369: GO 44106
41371: POP
// case GetBType ( HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ) of - 1 :
41372: LD_EXP 62
41376: PUSH
41377: LD_VAR 0 9
41381: ARRAY
41382: PUSH
41383: LD_INT 1
41385: ARRAY
41386: PPUSH
41387: LD_EXP 62
41391: PUSH
41392: LD_VAR 0 9
41396: ARRAY
41397: PUSH
41398: LD_INT 2
41400: ARRAY
41401: PPUSH
41402: CALL_OW 428
41406: PPUSH
41407: CALL_OW 266
41411: PUSH
41412: LD_INT 1
41414: NEG
41415: DOUBLE
41416: EQUAL
41417: IFTRUE 41421
41419: GO 43611
41421: POP
// begin case ai_upcoming_building_data [ base ] [ 4 ] of b_warehouse :
41422: LD_EXP 62
41426: PUSH
41427: LD_VAR 0 9
41431: ARRAY
41432: PUSH
41433: LD_INT 4
41435: ARRAY
41436: PUSH
41437: LD_INT 1
41439: DOUBLE
41440: EQUAL
41441: IFTRUE 41445
41443: GO 41456
41445: POP
// i = b_depot ; b_factory :
41446: LD_ADDR_VAR 0 2
41450: PUSH
41451: LD_INT 0
41453: ST_TO_ADDR
41454: GO 41540
41456: LD_INT 3
41458: DOUBLE
41459: EQUAL
41460: IFTRUE 41464
41462: GO 41475
41464: POP
// i = b_workshop ; b_lab_half , b_lab_full :
41465: LD_ADDR_VAR 0 2
41469: PUSH
41470: LD_INT 2
41472: ST_TO_ADDR
41473: GO 41540
41475: LD_INT 7
41477: DOUBLE
41478: EQUAL
41479: IFTRUE 41489
41481: LD_INT 8
41483: DOUBLE
41484: EQUAL
41485: IFTRUE 41489
41487: GO 41500
41489: POP
// i = b_lab ; b_barracks :
41490: LD_ADDR_VAR 0 2
41494: PUSH
41495: LD_INT 6
41497: ST_TO_ADDR
41498: GO 41540
41500: LD_INT 5
41502: DOUBLE
41503: EQUAL
41504: IFTRUE 41508
41506: GO 41519
41508: POP
// i = b_armoury ; else
41509: LD_ADDR_VAR 0 2
41513: PUSH
41514: LD_INT 4
41516: ST_TO_ADDR
41517: GO 41540
41519: POP
// i = ai_upcoming_building_data [ base ] [ 4 ] ; end ;
41520: LD_ADDR_VAR 0 2
41524: PUSH
41525: LD_EXP 62
41529: PUSH
41530: LD_VAR 0 9
41534: ARRAY
41535: PUSH
41536: LD_INT 4
41538: ARRAY
41539: ST_TO_ADDR
// case i of b_depot :
41540: LD_VAR 0 2
41544: PUSH
41545: LD_INT 0
41547: DOUBLE
41548: EQUAL
41549: IFTRUE 41553
41551: GO 41630
41553: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41554: LD_EXP 59
41558: PUSH
41559: LD_VAR 0 9
41563: ARRAY
41564: PPUSH
41565: CALL_OW 248
41569: PUSH
41570: LD_INT 3
41572: DOUBLE
41573: EQUAL
41574: IFTRUE 41578
41576: GO 41589
41578: POP
// b_value = 64 ; nation_american :
41579: LD_ADDR_VAR 0 13
41583: PUSH
41584: LD_INT 64
41586: ST_TO_ADDR
41587: GO 41628
41589: LD_INT 1
41591: DOUBLE
41592: EQUAL
41593: IFTRUE 41597
41595: GO 41608
41597: POP
// b_value = 1 ; nation_arabian :
41598: LD_ADDR_VAR 0 13
41602: PUSH
41603: LD_INT 1
41605: ST_TO_ADDR
41606: GO 41628
41608: LD_INT 2
41610: DOUBLE
41611: EQUAL
41612: IFTRUE 41616
41614: GO 41627
41616: POP
// b_value = 34 ; end ;
41617: LD_ADDR_VAR 0 13
41621: PUSH
41622: LD_INT 34
41624: ST_TO_ADDR
41625: GO 41628
41627: POP
// end ; b_workshop :
41628: GO 43523
41630: LD_INT 2
41632: DOUBLE
41633: EQUAL
41634: IFTRUE 41638
41636: GO 41715
41638: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41639: LD_EXP 59
41643: PUSH
41644: LD_VAR 0 9
41648: ARRAY
41649: PPUSH
41650: CALL_OW 248
41654: PUSH
41655: LD_INT 3
41657: DOUBLE
41658: EQUAL
41659: IFTRUE 41663
41661: GO 41674
41663: POP
// b_value = 68 ; nation_american :
41664: LD_ADDR_VAR 0 13
41668: PUSH
41669: LD_INT 68
41671: ST_TO_ADDR
41672: GO 41713
41674: LD_INT 1
41676: DOUBLE
41677: EQUAL
41678: IFTRUE 41682
41680: GO 41693
41682: POP
// b_value = 5 ; nation_arabian :
41683: LD_ADDR_VAR 0 13
41687: PUSH
41688: LD_INT 5
41690: ST_TO_ADDR
41691: GO 41713
41693: LD_INT 2
41695: DOUBLE
41696: EQUAL
41697: IFTRUE 41701
41699: GO 41712
41701: POP
// b_value = 38 ; end ;
41702: LD_ADDR_VAR 0 13
41706: PUSH
41707: LD_INT 38
41709: ST_TO_ADDR
41710: GO 41713
41712: POP
// end ; b_armoury :
41713: GO 43523
41715: LD_INT 4
41717: DOUBLE
41718: EQUAL
41719: IFTRUE 41723
41721: GO 41800
41723: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41724: LD_EXP 59
41728: PUSH
41729: LD_VAR 0 9
41733: ARRAY
41734: PPUSH
41735: CALL_OW 248
41739: PUSH
41740: LD_INT 3
41742: DOUBLE
41743: EQUAL
41744: IFTRUE 41748
41746: GO 41759
41748: POP
// b_value = 66 ; nation_american :
41749: LD_ADDR_VAR 0 13
41753: PUSH
41754: LD_INT 66
41756: ST_TO_ADDR
41757: GO 41798
41759: LD_INT 1
41761: DOUBLE
41762: EQUAL
41763: IFTRUE 41767
41765: GO 41778
41767: POP
// b_value = 3 ; nation_arabian :
41768: LD_ADDR_VAR 0 13
41772: PUSH
41773: LD_INT 3
41775: ST_TO_ADDR
41776: GO 41798
41778: LD_INT 2
41780: DOUBLE
41781: EQUAL
41782: IFTRUE 41786
41784: GO 41797
41786: POP
// b_value = 36 ; end ;
41787: LD_ADDR_VAR 0 13
41791: PUSH
41792: LD_INT 36
41794: ST_TO_ADDR
41795: GO 41798
41797: POP
// end ; b_lab :
41798: GO 43523
41800: LD_INT 6
41802: DOUBLE
41803: EQUAL
41804: IFTRUE 41808
41806: GO 41885
41808: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41809: LD_EXP 59
41813: PUSH
41814: LD_VAR 0 9
41818: ARRAY
41819: PPUSH
41820: CALL_OW 248
41824: PUSH
41825: LD_INT 3
41827: DOUBLE
41828: EQUAL
41829: IFTRUE 41833
41831: GO 41844
41833: POP
// b_value = 77 ; nation_american :
41834: LD_ADDR_VAR 0 13
41838: PUSH
41839: LD_INT 77
41841: ST_TO_ADDR
41842: GO 41883
41844: LD_INT 1
41846: DOUBLE
41847: EQUAL
41848: IFTRUE 41852
41850: GO 41863
41852: POP
// b_value = 17 ; nation_arabian :
41853: LD_ADDR_VAR 0 13
41857: PUSH
41858: LD_INT 17
41860: ST_TO_ADDR
41861: GO 41883
41863: LD_INT 2
41865: DOUBLE
41866: EQUAL
41867: IFTRUE 41871
41869: GO 41882
41871: POP
// b_value = 48 ; end ;
41872: LD_ADDR_VAR 0 13
41876: PUSH
41877: LD_INT 48
41879: ST_TO_ADDR
41880: GO 41883
41882: POP
// end ; b_oil_power :
41883: GO 43523
41885: LD_INT 26
41887: DOUBLE
41888: EQUAL
41889: IFTRUE 41893
41891: GO 41970
41893: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41894: LD_EXP 59
41898: PUSH
41899: LD_VAR 0 9
41903: ARRAY
41904: PPUSH
41905: CALL_OW 248
41909: PUSH
41910: LD_INT 3
41912: DOUBLE
41913: EQUAL
41914: IFTRUE 41918
41916: GO 41929
41918: POP
// b_value = 85 ; nation_american :
41919: LD_ADDR_VAR 0 13
41923: PUSH
41924: LD_INT 85
41926: ST_TO_ADDR
41927: GO 41968
41929: LD_INT 1
41931: DOUBLE
41932: EQUAL
41933: IFTRUE 41937
41935: GO 41948
41937: POP
// b_value = 25 ; nation_arabian :
41938: LD_ADDR_VAR 0 13
41942: PUSH
41943: LD_INT 25
41945: ST_TO_ADDR
41946: GO 41968
41948: LD_INT 2
41950: DOUBLE
41951: EQUAL
41952: IFTRUE 41956
41954: GO 41967
41956: POP
// b_value = 56 ; end ;
41957: LD_ADDR_VAR 0 13
41961: PUSH
41962: LD_INT 56
41964: ST_TO_ADDR
41965: GO 41968
41967: POP
// end ; b_solar_power :
41968: GO 43523
41970: LD_INT 27
41972: DOUBLE
41973: EQUAL
41974: IFTRUE 41978
41976: GO 42056
41978: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41979: LD_EXP 59
41983: PUSH
41984: LD_VAR 0 9
41988: ARRAY
41989: PPUSH
41990: CALL_OW 248
41994: PUSH
41995: LD_INT 3
41997: DOUBLE
41998: EQUAL
41999: IFTRUE 42003
42001: GO 42015
42003: POP
// b_value = - 7 ; nation_american :
42004: LD_ADDR_VAR 0 13
42008: PUSH
42009: LD_INT 7
42011: NEG
42012: ST_TO_ADDR
42013: GO 42054
42015: LD_INT 1
42017: DOUBLE
42018: EQUAL
42019: IFTRUE 42023
42021: GO 42034
42023: POP
// b_value = 26 ; nation_arabian :
42024: LD_ADDR_VAR 0 13
42028: PUSH
42029: LD_INT 26
42031: ST_TO_ADDR
42032: GO 42054
42034: LD_INT 2
42036: DOUBLE
42037: EQUAL
42038: IFTRUE 42042
42040: GO 42053
42042: POP
// b_value = 57 ; end ;
42043: LD_ADDR_VAR 0 13
42047: PUSH
42048: LD_INT 57
42050: ST_TO_ADDR
42051: GO 42054
42053: POP
// end ; b_siberite_power :
42054: GO 43523
42056: LD_INT 28
42058: DOUBLE
42059: EQUAL
42060: IFTRUE 42064
42062: GO 42141
42064: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42065: LD_EXP 59
42069: PUSH
42070: LD_VAR 0 9
42074: ARRAY
42075: PPUSH
42076: CALL_OW 248
42080: PUSH
42081: LD_INT 3
42083: DOUBLE
42084: EQUAL
42085: IFTRUE 42089
42087: GO 42100
42089: POP
// b_value = 86 ; nation_american :
42090: LD_ADDR_VAR 0 13
42094: PUSH
42095: LD_INT 86
42097: ST_TO_ADDR
42098: GO 42139
42100: LD_INT 1
42102: DOUBLE
42103: EQUAL
42104: IFTRUE 42108
42106: GO 42119
42108: POP
// b_value = 27 ; nation_arabian :
42109: LD_ADDR_VAR 0 13
42113: PUSH
42114: LD_INT 27
42116: ST_TO_ADDR
42117: GO 42139
42119: LD_INT 2
42121: DOUBLE
42122: EQUAL
42123: IFTRUE 42127
42125: GO 42138
42127: POP
// b_value = 58 ; end ;
42128: LD_ADDR_VAR 0 13
42132: PUSH
42133: LD_INT 58
42135: ST_TO_ADDR
42136: GO 42139
42138: POP
// end ; b_oil_mine :
42139: GO 43523
42141: LD_INT 29
42143: DOUBLE
42144: EQUAL
42145: IFTRUE 42149
42147: GO 42226
42149: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42150: LD_EXP 59
42154: PUSH
42155: LD_VAR 0 9
42159: ARRAY
42160: PPUSH
42161: CALL_OW 248
42165: PUSH
42166: LD_INT 3
42168: DOUBLE
42169: EQUAL
42170: IFTRUE 42174
42172: GO 42185
42174: POP
// b_value = 87 ; nation_american :
42175: LD_ADDR_VAR 0 13
42179: PUSH
42180: LD_INT 87
42182: ST_TO_ADDR
42183: GO 42224
42185: LD_INT 1
42187: DOUBLE
42188: EQUAL
42189: IFTRUE 42193
42191: GO 42204
42193: POP
// b_value = 28 ; nation_arabian :
42194: LD_ADDR_VAR 0 13
42198: PUSH
42199: LD_INT 28
42201: ST_TO_ADDR
42202: GO 42224
42204: LD_INT 2
42206: DOUBLE
42207: EQUAL
42208: IFTRUE 42212
42210: GO 42223
42212: POP
// b_value = 59 ; end ;
42213: LD_ADDR_VAR 0 13
42217: PUSH
42218: LD_INT 59
42220: ST_TO_ADDR
42221: GO 42224
42223: POP
// end ; b_siberite_mine :
42224: GO 43523
42226: LD_INT 30
42228: DOUBLE
42229: EQUAL
42230: IFTRUE 42234
42232: GO 42311
42234: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42235: LD_EXP 59
42239: PUSH
42240: LD_VAR 0 9
42244: ARRAY
42245: PPUSH
42246: CALL_OW 248
42250: PUSH
42251: LD_INT 3
42253: DOUBLE
42254: EQUAL
42255: IFTRUE 42259
42257: GO 42270
42259: POP
// b_value = 88 ; nation_american :
42260: LD_ADDR_VAR 0 13
42264: PUSH
42265: LD_INT 88
42267: ST_TO_ADDR
42268: GO 42309
42270: LD_INT 1
42272: DOUBLE
42273: EQUAL
42274: IFTRUE 42278
42276: GO 42289
42278: POP
// b_value = 29 ; nation_arabian :
42279: LD_ADDR_VAR 0 13
42283: PUSH
42284: LD_INT 29
42286: ST_TO_ADDR
42287: GO 42309
42289: LD_INT 2
42291: DOUBLE
42292: EQUAL
42293: IFTRUE 42297
42295: GO 42308
42297: POP
// b_value = 60 ; end ;
42298: LD_ADDR_VAR 0 13
42302: PUSH
42303: LD_INT 60
42305: ST_TO_ADDR
42306: GO 42309
42308: POP
// end ; b_breastwork :
42309: GO 43523
42311: LD_INT 31
42313: DOUBLE
42314: EQUAL
42315: IFTRUE 42319
42317: GO 42396
42319: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42320: LD_EXP 59
42324: PUSH
42325: LD_VAR 0 9
42329: ARRAY
42330: PPUSH
42331: CALL_OW 248
42335: PUSH
42336: LD_INT 3
42338: DOUBLE
42339: EQUAL
42340: IFTRUE 42344
42342: GO 42355
42344: POP
// b_value = 89 ; nation_american :
42345: LD_ADDR_VAR 0 13
42349: PUSH
42350: LD_INT 89
42352: ST_TO_ADDR
42353: GO 42394
42355: LD_INT 1
42357: DOUBLE
42358: EQUAL
42359: IFTRUE 42363
42361: GO 42374
42363: POP
// b_value = 30 ; nation_arabian :
42364: LD_ADDR_VAR 0 13
42368: PUSH
42369: LD_INT 30
42371: ST_TO_ADDR
42372: GO 42394
42374: LD_INT 2
42376: DOUBLE
42377: EQUAL
42378: IFTRUE 42382
42380: GO 42393
42382: POP
// b_value = 61 ; end ;
42383: LD_ADDR_VAR 0 13
42387: PUSH
42388: LD_INT 61
42390: ST_TO_ADDR
42391: GO 42394
42393: POP
// end ; b_bunker :
42394: GO 43523
42396: LD_INT 32
42398: DOUBLE
42399: EQUAL
42400: IFTRUE 42404
42402: GO 42481
42404: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42405: LD_EXP 59
42409: PUSH
42410: LD_VAR 0 9
42414: ARRAY
42415: PPUSH
42416: CALL_OW 248
42420: PUSH
42421: LD_INT 3
42423: DOUBLE
42424: EQUAL
42425: IFTRUE 42429
42427: GO 42440
42429: POP
// b_value = 90 ; nation_american :
42430: LD_ADDR_VAR 0 13
42434: PUSH
42435: LD_INT 90
42437: ST_TO_ADDR
42438: GO 42479
42440: LD_INT 1
42442: DOUBLE
42443: EQUAL
42444: IFTRUE 42448
42446: GO 42459
42448: POP
// b_value = 31 ; nation_arabian :
42449: LD_ADDR_VAR 0 13
42453: PUSH
42454: LD_INT 31
42456: ST_TO_ADDR
42457: GO 42479
42459: LD_INT 2
42461: DOUBLE
42462: EQUAL
42463: IFTRUE 42467
42465: GO 42478
42467: POP
// b_value = 62 ; end ;
42468: LD_ADDR_VAR 0 13
42472: PUSH
42473: LD_INT 62
42475: ST_TO_ADDR
42476: GO 42479
42478: POP
// end ; b_turret :
42479: GO 43523
42481: LD_INT 33
42483: DOUBLE
42484: EQUAL
42485: IFTRUE 42489
42487: GO 42567
42489: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42490: LD_EXP 59
42494: PUSH
42495: LD_VAR 0 9
42499: ARRAY
42500: PPUSH
42501: CALL_OW 248
42505: PUSH
42506: LD_INT 3
42508: DOUBLE
42509: EQUAL
42510: IFTRUE 42514
42512: GO 42525
42514: POP
// b_value = 91 ; nation_american :
42515: LD_ADDR_VAR 0 13
42519: PUSH
42520: LD_INT 91
42522: ST_TO_ADDR
42523: GO 42565
42525: LD_INT 1
42527: DOUBLE
42528: EQUAL
42529: IFTRUE 42533
42531: GO 42544
42533: POP
// b_value = 32 ; nation_arabian :
42534: LD_ADDR_VAR 0 13
42538: PUSH
42539: LD_INT 32
42541: ST_TO_ADDR
42542: GO 42565
42544: LD_INT 2
42546: DOUBLE
42547: EQUAL
42548: IFTRUE 42552
42550: GO 42564
42552: POP
// b_value = - 7 ; end ;
42553: LD_ADDR_VAR 0 13
42557: PUSH
42558: LD_INT 7
42560: NEG
42561: ST_TO_ADDR
42562: GO 42565
42564: POP
// end ; b_teleport :
42565: GO 43523
42567: LD_INT 34
42569: DOUBLE
42570: EQUAL
42571: IFTRUE 42575
42573: GO 42654
42575: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42576: LD_EXP 59
42580: PUSH
42581: LD_VAR 0 9
42585: ARRAY
42586: PPUSH
42587: CALL_OW 248
42591: PUSH
42592: LD_INT 3
42594: DOUBLE
42595: EQUAL
42596: IFTRUE 42600
42598: GO 42611
42600: POP
// b_value = 92 ; nation_american :
42601: LD_ADDR_VAR 0 13
42605: PUSH
42606: LD_INT 92
42608: ST_TO_ADDR
42609: GO 42652
42611: LD_INT 1
42613: DOUBLE
42614: EQUAL
42615: IFTRUE 42619
42617: GO 42631
42619: POP
// b_value = - 7 ; nation_arabian :
42620: LD_ADDR_VAR 0 13
42624: PUSH
42625: LD_INT 7
42627: NEG
42628: ST_TO_ADDR
42629: GO 42652
42631: LD_INT 2
42633: DOUBLE
42634: EQUAL
42635: IFTRUE 42639
42637: GO 42651
42639: POP
// b_value = - 7 ; end ;
42640: LD_ADDR_VAR 0 13
42644: PUSH
42645: LD_INT 7
42647: NEG
42648: ST_TO_ADDR
42649: GO 42652
42651: POP
// end ; b_control_tower :
42652: GO 43523
42654: LD_INT 36
42656: DOUBLE
42657: EQUAL
42658: IFTRUE 42662
42660: GO 42741
42662: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42663: LD_EXP 59
42667: PUSH
42668: LD_VAR 0 9
42672: ARRAY
42673: PPUSH
42674: CALL_OW 248
42678: PUSH
42679: LD_INT 3
42681: DOUBLE
42682: EQUAL
42683: IFTRUE 42687
42685: GO 42699
42687: POP
// b_value = - 7 ; nation_american :
42688: LD_ADDR_VAR 0 13
42692: PUSH
42693: LD_INT 7
42695: NEG
42696: ST_TO_ADDR
42697: GO 42739
42699: LD_INT 1
42701: DOUBLE
42702: EQUAL
42703: IFTRUE 42707
42705: GO 42718
42707: POP
// b_value = 94 ; nation_arabian :
42708: LD_ADDR_VAR 0 13
42712: PUSH
42713: LD_INT 94
42715: ST_TO_ADDR
42716: GO 42739
42718: LD_INT 2
42720: DOUBLE
42721: EQUAL
42722: IFTRUE 42726
42724: GO 42738
42726: POP
// b_value = - 7 ; end ;
42727: LD_ADDR_VAR 0 13
42731: PUSH
42732: LD_INT 7
42734: NEG
42735: ST_TO_ADDR
42736: GO 42739
42738: POP
// end ; b_ext_track :
42739: GO 43523
42741: LD_INT 16
42743: DOUBLE
42744: EQUAL
42745: IFTRUE 42749
42747: GO 42826
42749: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42750: LD_EXP 59
42754: PUSH
42755: LD_VAR 0 9
42759: ARRAY
42760: PPUSH
42761: CALL_OW 248
42765: PUSH
42766: LD_INT 3
42768: DOUBLE
42769: EQUAL
42770: IFTRUE 42774
42772: GO 42785
42774: POP
// b_value = 70 ; nation_american :
42775: LD_ADDR_VAR 0 13
42779: PUSH
42780: LD_INT 70
42782: ST_TO_ADDR
42783: GO 42824
42785: LD_INT 1
42787: DOUBLE
42788: EQUAL
42789: IFTRUE 42793
42791: GO 42804
42793: POP
// b_value = 7 ; nation_arabian :
42794: LD_ADDR_VAR 0 13
42798: PUSH
42799: LD_INT 7
42801: ST_TO_ADDR
42802: GO 42824
42804: LD_INT 2
42806: DOUBLE
42807: EQUAL
42808: IFTRUE 42812
42810: GO 42823
42812: POP
// b_value = 40 ; end ;
42813: LD_ADDR_VAR 0 13
42817: PUSH
42818: LD_INT 40
42820: ST_TO_ADDR
42821: GO 42824
42823: POP
// end ; b_ext_gun :
42824: GO 43523
42826: LD_INT 17
42828: DOUBLE
42829: EQUAL
42830: IFTRUE 42834
42832: GO 42911
42834: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42835: LD_EXP 59
42839: PUSH
42840: LD_VAR 0 9
42844: ARRAY
42845: PPUSH
42846: CALL_OW 248
42850: PUSH
42851: LD_INT 3
42853: DOUBLE
42854: EQUAL
42855: IFTRUE 42859
42857: GO 42870
42859: POP
// b_value = 71 ; nation_american :
42860: LD_ADDR_VAR 0 13
42864: PUSH
42865: LD_INT 71
42867: ST_TO_ADDR
42868: GO 42909
42870: LD_INT 1
42872: DOUBLE
42873: EQUAL
42874: IFTRUE 42878
42876: GO 42889
42878: POP
// b_value = 8 ; nation_arabian :
42879: LD_ADDR_VAR 0 13
42883: PUSH
42884: LD_INT 8
42886: ST_TO_ADDR
42887: GO 42909
42889: LD_INT 2
42891: DOUBLE
42892: EQUAL
42893: IFTRUE 42897
42895: GO 42908
42897: POP
// b_value = 41 ; end ;
42898: LD_ADDR_VAR 0 13
42902: PUSH
42903: LD_INT 41
42905: ST_TO_ADDR
42906: GO 42909
42908: POP
// end ; b_ext_rocket :
42909: GO 43523
42911: LD_INT 18
42913: DOUBLE
42914: EQUAL
42915: IFTRUE 42919
42917: GO 42996
42919: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42920: LD_EXP 59
42924: PUSH
42925: LD_VAR 0 9
42929: ARRAY
42930: PPUSH
42931: CALL_OW 248
42935: PUSH
42936: LD_INT 3
42938: DOUBLE
42939: EQUAL
42940: IFTRUE 42944
42942: GO 42955
42944: POP
// b_value = 72 ; nation_american :
42945: LD_ADDR_VAR 0 13
42949: PUSH
42950: LD_INT 72
42952: ST_TO_ADDR
42953: GO 42994
42955: LD_INT 1
42957: DOUBLE
42958: EQUAL
42959: IFTRUE 42963
42961: GO 42974
42963: POP
// b_value = 9 ; nation_arabian :
42964: LD_ADDR_VAR 0 13
42968: PUSH
42969: LD_INT 9
42971: ST_TO_ADDR
42972: GO 42994
42974: LD_INT 2
42976: DOUBLE
42977: EQUAL
42978: IFTRUE 42982
42980: GO 42993
42982: POP
// b_value = 42 ; end ;
42983: LD_ADDR_VAR 0 13
42987: PUSH
42988: LD_INT 42
42990: ST_TO_ADDR
42991: GO 42994
42993: POP
// end ; b_ext_noncombat :
42994: GO 43523
42996: LD_INT 19
42998: DOUBLE
42999: EQUAL
43000: IFTRUE 43004
43002: GO 43082
43004: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
43005: LD_EXP 59
43009: PUSH
43010: LD_VAR 0 9
43014: ARRAY
43015: PPUSH
43016: CALL_OW 248
43020: PUSH
43021: LD_INT 3
43023: DOUBLE
43024: EQUAL
43025: IFTRUE 43029
43027: GO 43040
43029: POP
// b_value = 73 ; nation_american :
43030: LD_ADDR_VAR 0 13
43034: PUSH
43035: LD_INT 73
43037: ST_TO_ADDR
43038: GO 43080
43040: LD_INT 1
43042: DOUBLE
43043: EQUAL
43044: IFTRUE 43048
43046: GO 43059
43048: POP
// b_value = 10 ; nation_arabian :
43049: LD_ADDR_VAR 0 13
43053: PUSH
43054: LD_INT 10
43056: ST_TO_ADDR
43057: GO 43080
43059: LD_INT 2
43061: DOUBLE
43062: EQUAL
43063: IFTRUE 43067
43065: GO 43079
43067: POP
// b_value = - 7 ; end ;
43068: LD_ADDR_VAR 0 13
43072: PUSH
43073: LD_INT 7
43075: NEG
43076: ST_TO_ADDR
43077: GO 43080
43079: POP
// end ; b_ext_radar :
43080: GO 43523
43082: LD_INT 20
43084: DOUBLE
43085: EQUAL
43086: IFTRUE 43090
43088: GO 43168
43090: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
43091: LD_EXP 59
43095: PUSH
43096: LD_VAR 0 9
43100: ARRAY
43101: PPUSH
43102: CALL_OW 248
43106: PUSH
43107: LD_INT 3
43109: DOUBLE
43110: EQUAL
43111: IFTRUE 43115
43113: GO 43127
43115: POP
// b_value = - 7 ; nation_american :
43116: LD_ADDR_VAR 0 13
43120: PUSH
43121: LD_INT 7
43123: NEG
43124: ST_TO_ADDR
43125: GO 43166
43127: LD_INT 1
43129: DOUBLE
43130: EQUAL
43131: IFTRUE 43135
43133: GO 43146
43135: POP
// b_value = 11 ; nation_arabian :
43136: LD_ADDR_VAR 0 13
43140: PUSH
43141: LD_INT 11
43143: ST_TO_ADDR
43144: GO 43166
43146: LD_INT 2
43148: DOUBLE
43149: EQUAL
43150: IFTRUE 43154
43152: GO 43165
43154: POP
// b_value = 44 ; end ;
43155: LD_ADDR_VAR 0 13
43159: PUSH
43160: LD_INT 44
43162: ST_TO_ADDR
43163: GO 43166
43165: POP
// end ; b_ext_siberium :
43166: GO 43523
43168: LD_INT 21
43170: DOUBLE
43171: EQUAL
43172: IFTRUE 43176
43174: GO 43253
43176: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
43177: LD_EXP 59
43181: PUSH
43182: LD_VAR 0 9
43186: ARRAY
43187: PPUSH
43188: CALL_OW 248
43192: PUSH
43193: LD_INT 3
43195: DOUBLE
43196: EQUAL
43197: IFTRUE 43201
43199: GO 43212
43201: POP
// b_value = 75 ; nation_american :
43202: LD_ADDR_VAR 0 13
43206: PUSH
43207: LD_INT 75
43209: ST_TO_ADDR
43210: GO 43251
43212: LD_INT 1
43214: DOUBLE
43215: EQUAL
43216: IFTRUE 43220
43218: GO 43231
43220: POP
// b_value = 12 ; nation_arabian :
43221: LD_ADDR_VAR 0 13
43225: PUSH
43226: LD_INT 12
43228: ST_TO_ADDR
43229: GO 43251
43231: LD_INT 2
43233: DOUBLE
43234: EQUAL
43235: IFTRUE 43239
43237: GO 43250
43239: POP
// b_value = 45 ; end ;
43240: LD_ADDR_VAR 0 13
43244: PUSH
43245: LD_INT 45
43247: ST_TO_ADDR
43248: GO 43251
43250: POP
// end ; b_ext_stitch :
43251: GO 43523
43253: LD_INT 23
43255: DOUBLE
43256: EQUAL
43257: IFTRUE 43261
43259: GO 43340
43261: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
43262: LD_EXP 59
43266: PUSH
43267: LD_VAR 0 9
43271: ARRAY
43272: PPUSH
43273: CALL_OW 248
43277: PUSH
43278: LD_INT 3
43280: DOUBLE
43281: EQUAL
43282: IFTRUE 43286
43284: GO 43298
43286: POP
// b_value = - 7 ; nation_american :
43287: LD_ADDR_VAR 0 13
43291: PUSH
43292: LD_INT 7
43294: NEG
43295: ST_TO_ADDR
43296: GO 43338
43298: LD_INT 1
43300: DOUBLE
43301: EQUAL
43302: IFTRUE 43306
43304: GO 43318
43306: POP
// b_value = - 7 ; nation_arabian :
43307: LD_ADDR_VAR 0 13
43311: PUSH
43312: LD_INT 7
43314: NEG
43315: ST_TO_ADDR
43316: GO 43338
43318: LD_INT 2
43320: DOUBLE
43321: EQUAL
43322: IFTRUE 43326
43324: GO 43337
43326: POP
// b_value = 43 ; end ;
43327: LD_ADDR_VAR 0 13
43331: PUSH
43332: LD_INT 43
43334: ST_TO_ADDR
43335: GO 43338
43337: POP
// end ; b_ext_computer :
43338: GO 43523
43340: LD_INT 24
43342: DOUBLE
43343: EQUAL
43344: IFTRUE 43348
43346: GO 43426
43348: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
43349: LD_EXP 59
43353: PUSH
43354: LD_VAR 0 9
43358: ARRAY
43359: PPUSH
43360: CALL_OW 248
43364: PUSH
43365: LD_INT 3
43367: DOUBLE
43368: EQUAL
43369: IFTRUE 43373
43371: GO 43384
43373: POP
// b_value = 76 ; nation_american :
43374: LD_ADDR_VAR 0 13
43378: PUSH
43379: LD_INT 76
43381: ST_TO_ADDR
43382: GO 43424
43384: LD_INT 1
43386: DOUBLE
43387: EQUAL
43388: IFTRUE 43392
43390: GO 43403
43392: POP
// b_value = 15 ; nation_arabian :
43393: LD_ADDR_VAR 0 13
43397: PUSH
43398: LD_INT 15
43400: ST_TO_ADDR
43401: GO 43424
43403: LD_INT 2
43405: DOUBLE
43406: EQUAL
43407: IFTRUE 43411
43409: GO 43423
43411: POP
// b_value = - 7 ; end ;
43412: LD_ADDR_VAR 0 13
43416: PUSH
43417: LD_INT 7
43419: NEG
43420: ST_TO_ADDR
43421: GO 43424
43423: POP
// end ; b_ext_laser :
43424: GO 43523
43426: LD_INT 25
43428: DOUBLE
43429: EQUAL
43430: IFTRUE 43434
43432: GO 43513
43434: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
43435: LD_EXP 59
43439: PUSH
43440: LD_VAR 0 9
43444: ARRAY
43445: PPUSH
43446: CALL_OW 248
43450: PUSH
43451: LD_INT 3
43453: DOUBLE
43454: EQUAL
43455: IFTRUE 43459
43457: GO 43471
43459: POP
// b_value = - 7 ; nation_american :
43460: LD_ADDR_VAR 0 13
43464: PUSH
43465: LD_INT 7
43467: NEG
43468: ST_TO_ADDR
43469: GO 43511
43471: LD_INT 1
43473: DOUBLE
43474: EQUAL
43475: IFTRUE 43479
43477: GO 43490
43479: POP
// b_value = 16 ; nation_arabian :
43480: LD_ADDR_VAR 0 13
43484: PUSH
43485: LD_INT 16
43487: ST_TO_ADDR
43488: GO 43511
43490: LD_INT 2
43492: DOUBLE
43493: EQUAL
43494: IFTRUE 43498
43496: GO 43510
43498: POP
// b_value = - 7 ; end ;
43499: LD_ADDR_VAR 0 13
43503: PUSH
43504: LD_INT 7
43506: NEG
43507: ST_TO_ADDR
43508: GO 43511
43510: POP
// end ; else
43511: GO 43523
43513: POP
// b_value = - 42 ; end ;
43514: LD_ADDR_VAR 0 13
43518: PUSH
43519: LD_INT 42
43521: NEG
43522: ST_TO_ADDR
// SetTaskList ( ai_building_constructor [ base ] , [ [ B , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , 0 , b_value , ai_upcoming_building_data [ base ] [ 3 ] , 0 ] ] ) ;
43523: LD_EXP 59
43527: PUSH
43528: LD_VAR 0 9
43532: ARRAY
43533: PPUSH
43534: LD_STRING B
43536: PUSH
43537: LD_EXP 62
43541: PUSH
43542: LD_VAR 0 9
43546: ARRAY
43547: PUSH
43548: LD_INT 1
43550: ARRAY
43551: PUSH
43552: LD_EXP 62
43556: PUSH
43557: LD_VAR 0 9
43561: ARRAY
43562: PUSH
43563: LD_INT 2
43565: ARRAY
43566: PUSH
43567: LD_INT 0
43569: PUSH
43570: LD_VAR 0 13
43574: PUSH
43575: LD_EXP 62
43579: PUSH
43580: LD_VAR 0 9
43584: ARRAY
43585: PUSH
43586: LD_INT 3
43588: ARRAY
43589: PUSH
43590: LD_INT 0
43592: PUSH
43593: EMPTY
43594: LIST
43595: LIST
43596: LIST
43597: LIST
43598: LIST
43599: LIST
43600: LIST
43601: PUSH
43602: EMPTY
43603: LIST
43604: PPUSH
43605: CALL_OW 446
// end ; b_depot :
43609: GO 44106
43611: LD_INT 0
43613: DOUBLE
43614: EQUAL
43615: IFTRUE 43619
43617: GO 43668
43619: POP
// begin ComUpgrade ( ai_depot [ base ] ) ;
43620: LD_EXP 35
43624: PUSH
43625: LD_VAR 0 9
43629: ARRAY
43630: PPUSH
43631: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , ai_depot [ base ] ) ;
43635: LD_ADDR_EXP 56
43639: PUSH
43640: LD_EXP 56
43644: PPUSH
43645: LD_VAR 0 9
43649: PPUSH
43650: LD_EXP 35
43654: PUSH
43655: LD_VAR 0 9
43659: ARRAY
43660: PPUSH
43661: CALL_OW 1
43665: ST_TO_ADDR
// end ; b_workshop :
43666: GO 44106
43668: LD_INT 2
43670: DOUBLE
43671: EQUAL
43672: IFTRUE 43676
43674: GO 43753
43676: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
43677: LD_ADDR_VAR 0 6
43681: PUSH
43682: LD_EXP 62
43686: PUSH
43687: LD_VAR 0 9
43691: ARRAY
43692: PUSH
43693: LD_INT 1
43695: ARRAY
43696: PPUSH
43697: LD_EXP 62
43701: PUSH
43702: LD_VAR 0 9
43706: ARRAY
43707: PUSH
43708: LD_INT 2
43710: ARRAY
43711: PPUSH
43712: CALL_OW 428
43716: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
43717: LD_VAR 0 6
43721: PPUSH
43722: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
43726: LD_ADDR_EXP 56
43730: PUSH
43731: LD_EXP 56
43735: PPUSH
43736: LD_VAR 0 9
43740: PPUSH
43741: LD_VAR 0 6
43745: PPUSH
43746: CALL_OW 1
43750: ST_TO_ADDR
// end ; b_lab , b_lab_half :
43751: GO 44106
43753: LD_INT 6
43755: DOUBLE
43756: EQUAL
43757: IFTRUE 43767
43759: LD_INT 7
43761: DOUBLE
43762: EQUAL
43763: IFTRUE 43767
43765: GO 44020
43767: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
43768: LD_ADDR_VAR 0 6
43772: PUSH
43773: LD_EXP 62
43777: PUSH
43778: LD_VAR 0 9
43782: ARRAY
43783: PUSH
43784: LD_INT 1
43786: ARRAY
43787: PPUSH
43788: LD_EXP 62
43792: PUSH
43793: LD_VAR 0 9
43797: ARRAY
43798: PUSH
43799: LD_INT 2
43801: ARRAY
43802: PPUSH
43803: CALL_OW 428
43807: ST_TO_ADDR
// if ai_upcoming_building_data [ base ] [ 5 ] <> b_lab_basic and not ai_upcoming_building_data [ base ] [ 5 ] in [ GetLabKind ( temp_unit , 1 ) , GetLabKind ( temp_unit , 2 ) ] then
43808: LD_EXP 62
43812: PUSH
43813: LD_VAR 0 9
43817: ARRAY
43818: PUSH
43819: LD_INT 5
43821: ARRAY
43822: PUSH
43823: LD_INT 9
43825: NONEQUAL
43826: PUSH
43827: LD_EXP 62
43831: PUSH
43832: LD_VAR 0 9
43836: ARRAY
43837: PUSH
43838: LD_INT 5
43840: ARRAY
43841: PUSH
43842: LD_VAR 0 6
43846: PPUSH
43847: LD_INT 1
43849: PPUSH
43850: CALL_OW 268
43854: PUSH
43855: LD_VAR 0 6
43859: PPUSH
43860: LD_INT 2
43862: PPUSH
43863: CALL_OW 268
43867: PUSH
43868: EMPTY
43869: LIST
43870: LIST
43871: IN
43872: NOT
43873: AND
43874: IFFALSE 43902
// ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 5 ] ) else
43876: LD_VAR 0 6
43880: PPUSH
43881: LD_EXP 62
43885: PUSH
43886: LD_VAR 0 9
43890: ARRAY
43891: PUSH
43892: LD_INT 5
43894: ARRAY
43895: PPUSH
43896: CALL_OW 147
43900: GO 43993
// if ai_upcoming_building_data [ base ] [ 6 ] <> b_lab_basic then
43902: LD_EXP 62
43906: PUSH
43907: LD_VAR 0 9
43911: ARRAY
43912: PUSH
43913: LD_INT 6
43915: ARRAY
43916: PUSH
43917: LD_INT 9
43919: NONEQUAL
43920: IFFALSE 43948
// ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 6 ] ) else
43922: LD_VAR 0 6
43926: PPUSH
43927: LD_EXP 62
43931: PUSH
43932: LD_VAR 0 9
43936: ARRAY
43937: PUSH
43938: LD_INT 6
43940: ARRAY
43941: PPUSH
43942: CALL_OW 147
43946: GO 43993
// begin ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
43948: LD_ADDR_EXP 59
43952: PUSH
43953: LD_EXP 59
43957: PPUSH
43958: LD_VAR 0 9
43962: PPUSH
43963: LD_INT 0
43965: PPUSH
43966: CALL_OW 1
43970: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
43971: LD_ADDR_EXP 62
43975: PUSH
43976: LD_EXP 62
43980: PPUSH
43981: LD_VAR 0 9
43985: PPUSH
43986: EMPTY
43987: PPUSH
43988: CALL_OW 1
43992: ST_TO_ADDR
// end ; ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
43993: LD_ADDR_EXP 56
43997: PUSH
43998: LD_EXP 56
44002: PPUSH
44003: LD_VAR 0 9
44007: PPUSH
44008: LD_VAR 0 6
44012: PPUSH
44013: CALL_OW 1
44017: ST_TO_ADDR
// end ; b_armoury :
44018: GO 44106
44020: LD_INT 4
44022: DOUBLE
44023: EQUAL
44024: IFTRUE 44028
44026: GO 44105
44028: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
44029: LD_ADDR_VAR 0 6
44033: PUSH
44034: LD_EXP 62
44038: PUSH
44039: LD_VAR 0 9
44043: ARRAY
44044: PUSH
44045: LD_INT 1
44047: ARRAY
44048: PPUSH
44049: LD_EXP 62
44053: PUSH
44054: LD_VAR 0 9
44058: ARRAY
44059: PUSH
44060: LD_INT 2
44062: ARRAY
44063: PPUSH
44064: CALL_OW 428
44068: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
44069: LD_VAR 0 6
44073: PPUSH
44074: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
44078: LD_ADDR_EXP 56
44082: PUSH
44083: LD_EXP 56
44087: PPUSH
44088: LD_VAR 0 9
44092: PPUSH
44093: LD_VAR 0 6
44097: PPUSH
44098: CALL_OW 1
44102: ST_TO_ADDR
// end ; end ; end ;
44103: GO 44106
44105: POP
// end else
44106: GO 44366
// if UnitsInside ( ai_vehicle_being_moved [ base ] ) > 0 then
44108: LD_EXP 60
44112: PUSH
44113: LD_VAR 0 9
44117: ARRAY
44118: PPUSH
44119: CALL_OW 313
44123: PUSH
44124: LD_INT 0
44126: GREATER
44127: IFFALSE 44266
// begin if GetDistUnitXY ( ai_vehicle_being_moved [ base ] , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) <= away_dist then
44129: LD_EXP 60
44133: PUSH
44134: LD_VAR 0 9
44138: ARRAY
44139: PPUSH
44140: LD_EXP 62
44144: PUSH
44145: LD_VAR 0 9
44149: ARRAY
44150: PUSH
44151: LD_INT 1
44153: ARRAY
44154: PPUSH
44155: LD_EXP 62
44159: PUSH
44160: LD_VAR 0 9
44164: ARRAY
44165: PUSH
44166: LD_INT 2
44168: ARRAY
44169: PPUSH
44170: CALL_OW 297
44174: PUSH
44175: LD_VAR 0 7
44179: LESSEQUAL
44180: IFFALSE 44241
// AI_GetAwayFromXY ( ai_vehicle_being_moved [ base ] , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , away_dist + 2 , false ) else
44182: LD_EXP 60
44186: PUSH
44187: LD_VAR 0 9
44191: ARRAY
44192: PPUSH
44193: LD_EXP 62
44197: PUSH
44198: LD_VAR 0 9
44202: ARRAY
44203: PUSH
44204: LD_INT 1
44206: ARRAY
44207: PPUSH
44208: LD_EXP 62
44212: PUSH
44213: LD_VAR 0 9
44217: ARRAY
44218: PUSH
44219: LD_INT 2
44221: ARRAY
44222: PPUSH
44223: LD_VAR 0 7
44227: PUSH
44228: LD_INT 2
44230: PLUS
44231: PPUSH
44232: LD_INT 0
44234: PPUSH
44235: CALL 19506 0 5
44239: GO 44264
// ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
44241: LD_ADDR_EXP 60
44245: PUSH
44246: LD_EXP 60
44250: PPUSH
44251: LD_VAR 0 9
44255: PPUSH
44256: LD_INT 0
44258: PPUSH
44259: CALL_OW 1
44263: ST_TO_ADDR
// end else
44264: GO 44366
// case GetType ( IsInUnit ( ai_building_constructor [ base ] ) ) of unit_building :
44266: LD_EXP 59
44270: PUSH
44271: LD_VAR 0 9
44275: ARRAY
44276: PPUSH
44277: CALL_OW 310
44281: PPUSH
44282: CALL_OW 247
44286: PUSH
44287: LD_INT 3
44289: DOUBLE
44290: EQUAL
44291: IFTRUE 44295
44293: GO 44313
44295: POP
// ComExitBuilding ( ai_building_constructor [ base ] ) ; unit_vehicle :
44296: LD_EXP 59
44300: PUSH
44301: LD_VAR 0 9
44305: ARRAY
44306: PPUSH
44307: CALL_OW 122
44311: GO 44366
44313: LD_INT 2
44315: DOUBLE
44316: EQUAL
44317: IFTRUE 44321
44319: GO 44339
44321: POP
// ComExitVehicle ( ai_building_constructor [ base ] ) ; else
44322: LD_EXP 59
44326: PUSH
44327: LD_VAR 0 9
44331: ARRAY
44332: PPUSH
44333: CALL_OW 121
44337: GO 44366
44339: POP
// ComEnterUnit ( ai_building_constructor [ base ] , ai_vehicle_being_moved [ base ] ) ; end ;
44340: LD_EXP 59
44344: PUSH
44345: LD_VAR 0 9
44349: ARRAY
44350: PPUSH
44351: LD_EXP 60
44355: PUSH
44356: LD_VAR 0 9
44360: ARRAY
44361: PPUSH
44362: CALL_OW 120
// end ; end ; end ; if ( engineers_list ^ apemen_engineers_list ) > 0 and ai_depot [ base ] > 0 and not under_attack then
44366: LD_VAR 0 3
44370: PUSH
44371: LD_VAR 0 10
44375: ADD
44376: PUSH
44377: LD_INT 0
44379: GREATER
44380: PUSH
44381: LD_EXP 35
44385: PUSH
44386: LD_VAR 0 9
44390: ARRAY
44391: PUSH
44392: LD_INT 0
44394: GREATER
44395: AND
44396: PUSH
44397: LD_VAR 0 19
44401: NOT
44402: AND
44403: IFFALSE 44487
// begin temp_list = GetListOfCratesInArea ( GetBaseArea ( base ) ) ;
44405: LD_ADDR_VAR 0 4
44409: PUSH
44410: LD_VAR 0 9
44414: PPUSH
44415: CALL 27032 0 1
44419: PPUSH
44420: CALL_OW 435
44424: ST_TO_ADDR
// if temp_list > 0 then
44425: LD_VAR 0 4
44429: PUSH
44430: LD_INT 0
44432: GREATER
44433: IFFALSE 44487
// begin ComCollect ( GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) , temp_list [ 1 ] , temp_list [ 2 ] ) ;
44435: LD_VAR 0 3
44439: PUSH
44440: LD_VAR 0 10
44444: ADD
44445: PPUSH
44446: CALL 45989 0 1
44450: PPUSH
44451: LD_VAR 0 4
44455: PUSH
44456: LD_INT 1
44458: ARRAY
44459: PPUSH
44460: LD_VAR 0 4
44464: PUSH
44465: LD_INT 2
44467: ARRAY
44468: PPUSH
44469: CALL_OW 117
// engineers_list = [ ] ;
44473: LD_ADDR_VAR 0 3
44477: PUSH
44478: EMPTY
44479: ST_TO_ADDR
// apemen_engineers_list = [ ] ;
44480: LD_ADDR_VAR 0 10
44484: PUSH
44485: EMPTY
44486: ST_TO_ADDR
// end ; end ; end ; DistributeHumansToBuildings ( base , engineers_list ^ apemen_engineers_list , UnitFilter ( ai_depot [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_engineer , [ 6 , 6 , 5 ] [ base ] , false , false ) ;
44487: LD_VAR 0 9
44491: PPUSH
44492: LD_VAR 0 3
44496: PUSH
44497: LD_VAR 0 10
44501: ADD
44502: PPUSH
44503: LD_EXP 35
44507: PUSH
44508: LD_VAR 0 9
44512: ARRAY
44513: PPUSH
44514: LD_INT 50
44516: PUSH
44517: EMPTY
44518: LIST
44519: PUSH
44520: LD_INT 3
44522: PUSH
44523: LD_INT 57
44525: PUSH
44526: EMPTY
44527: LIST
44528: PUSH
44529: EMPTY
44530: LIST
44531: LIST
44532: PUSH
44533: EMPTY
44534: LIST
44535: LIST
44536: PPUSH
44537: CALL_OW 72
44541: PPUSH
44542: LD_INT 2
44544: PPUSH
44545: LD_INT 6
44547: PUSH
44548: LD_INT 6
44550: PUSH
44551: LD_INT 5
44553: PUSH
44554: EMPTY
44555: LIST
44556: LIST
44557: LIST
44558: PUSH
44559: LD_VAR 0 9
44563: ARRAY
44564: PPUSH
44565: LD_INT 0
44567: PPUSH
44568: LD_INT 0
44570: PPUSH
44571: CALL 35428 0 7
// if crane_usable then
44575: LD_VAR 0 12
44579: IFFALSE 44727
// if not IsInArea ( ai_crane [ base ] , GetBaseArea ( base ) ) or IsInArea ( ai_crane [ base ] , ru_no_engineer_repair_area ) then
44581: LD_EXP 68
44585: PUSH
44586: LD_VAR 0 9
44590: ARRAY
44591: PPUSH
44592: LD_VAR 0 9
44596: PPUSH
44597: CALL 27032 0 1
44601: PPUSH
44602: CALL_OW 308
44606: NOT
44607: PUSH
44608: LD_EXP 68
44612: PUSH
44613: LD_VAR 0 9
44617: ARRAY
44618: PPUSH
44619: LD_INT 6
44621: PPUSH
44622: CALL_OW 308
44626: OR
44627: IFFALSE 44676
// ComMoveXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) else
44629: LD_EXP 68
44633: PUSH
44634: LD_VAR 0 9
44638: ARRAY
44639: PPUSH
44640: LD_EXP 55
44644: PUSH
44645: LD_VAR 0 9
44649: ARRAY
44650: PUSH
44651: LD_INT 1
44653: ARRAY
44654: PPUSH
44655: LD_EXP 55
44659: PUSH
44660: LD_VAR 0 9
44664: ARRAY
44665: PUSH
44666: LD_INT 2
44668: ARRAY
44669: PPUSH
44670: CALL_OW 111
44674: GO 44727
// if GetLives ( ai_crane [ base ] ) < 1000 and not under_attack then
44676: LD_EXP 68
44680: PUSH
44681: LD_VAR 0 9
44685: ARRAY
44686: PPUSH
44687: CALL_OW 256
44691: PUSH
44692: LD_INT 1000
44694: LESS
44695: PUSH
44696: LD_VAR 0 19
44700: NOT
44701: AND
44702: IFFALSE 44727
// ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , true ) ;
44704: LD_ADDR_EXP 71
44708: PUSH
44709: LD_EXP 71
44713: PPUSH
44714: LD_VAR 0 9
44718: PPUSH
44719: LD_INT 1
44721: PPUSH
44722: CALL_OW 1
44726: ST_TO_ADDR
// end ;
44727: GO 36965
44729: POP
44730: POP
// until false ;
44731: LD_INT 0
44733: IFFALSE 36948
// end ;
44735: PPOPN 22
44737: END
// on BuildingStarted ( building , builder ) do var side , temp_list , base , i ;
44738: LD_INT 0
44740: PPUSH
44741: PPUSH
44742: PPUSH
44743: PPUSH
// begin side = GetSide ( building ) ;
44744: LD_ADDR_VAR 0 3
44748: PUSH
44749: LD_VAR 0 1
44753: PPUSH
44754: CALL_OW 255
44758: ST_TO_ADDR
// if side = you then
44759: LD_VAR 0 3
44763: PUSH
44764: LD_EXP 2
44768: EQUAL
44769: IFFALSE 44773
// exit ;
44771: GO 44870
// base = FindBase ( building ) ;
44773: LD_ADDR_VAR 0 5
44777: PUSH
44778: LD_VAR 0 1
44782: PPUSH
44783: CALL 27251 0 1
44787: ST_TO_ADDR
// if base = 0 then
44788: LD_VAR 0 5
44792: PUSH
44793: LD_INT 0
44795: EQUAL
44796: IFFALSE 44800
// exit ;
44798: GO 44870
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
44800: LD_ADDR_EXP 59
44804: PUSH
44805: LD_EXP 59
44809: PPUSH
44810: LD_VAR 0 5
44814: PPUSH
44815: LD_INT 0
44817: PPUSH
44818: CALL_OW 1
44822: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , [ ] ) ;
44823: LD_ADDR_EXP 61
44827: PUSH
44828: LD_EXP 61
44832: PPUSH
44833: LD_VAR 0 5
44837: PPUSH
44838: EMPTY
44839: PPUSH
44840: CALL_OW 1
44844: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , building ) ;
44845: LD_ADDR_EXP 56
44849: PUSH
44850: LD_EXP 56
44854: PPUSH
44855: LD_VAR 0 5
44859: PPUSH
44860: LD_VAR 0 1
44864: PPUSH
44865: CALL_OW 1
44869: ST_TO_ADDR
// end ;
44870: PPOPN 6
44872: END
// on BuildingComplete ( building ) do var side , temp_list , temp_unit , base , i , hex ;
44873: LD_INT 0
44875: PPUSH
44876: PPUSH
44877: PPUSH
44878: PPUSH
44879: PPUSH
44880: PPUSH
// begin if IsInArea ( building , Farmer_base ) and GetBType ( building ) = b_depot then
44881: LD_VAR 0 1
44885: PPUSH
44886: LD_INT 9
44888: PPUSH
44889: CALL_OW 308
44893: PUSH
44894: LD_VAR 0 1
44898: PPUSH
44899: CALL_OW 266
44903: PUSH
44904: LD_INT 0
44906: EQUAL
44907: AND
44908: IFFALSE 44988
// if FilterAllUnits ( [ [ f_inarea , Farmer_base ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_not , [ f_constructed ] ] ] ) = 1 then
44910: LD_INT 95
44912: PUSH
44913: LD_INT 9
44915: PUSH
44916: EMPTY
44917: LIST
44918: LIST
44919: PUSH
44920: LD_INT 2
44922: PUSH
44923: LD_INT 30
44925: PUSH
44926: LD_INT 0
44928: PUSH
44929: EMPTY
44930: LIST
44931: LIST
44932: PUSH
44933: LD_INT 30
44935: PUSH
44936: LD_INT 1
44938: PUSH
44939: EMPTY
44940: LIST
44941: LIST
44942: PUSH
44943: EMPTY
44944: LIST
44945: LIST
44946: LIST
44947: PUSH
44948: LD_INT 3
44950: PUSH
44951: LD_INT 57
44953: PUSH
44954: EMPTY
44955: LIST
44956: PUSH
44957: EMPTY
44958: LIST
44959: LIST
44960: PUSH
44961: EMPTY
44962: LIST
44963: LIST
44964: LIST
44965: PPUSH
44966: CALL_OW 69
44970: PUSH
44971: LD_INT 1
44973: EQUAL
44974: IFFALSE 44988
// SetBName ( building , campbar ) ;
44976: LD_VAR 0 1
44980: PPUSH
44981: LD_STRING campbar
44983: PPUSH
44984: CALL_OW 500
// side = GetSide ( building ) ;
44988: LD_ADDR_VAR 0 2
44992: PUSH
44993: LD_VAR 0 1
44997: PPUSH
44998: CALL_OW 255
45002: ST_TO_ADDR
// if side = you then
45003: LD_VAR 0 2
45007: PUSH
45008: LD_EXP 2
45012: EQUAL
45013: IFFALSE 45017
// exit ;
45015: GO 45257
// base = FindBase ( building ) ;
45017: LD_ADDR_VAR 0 5
45021: PUSH
45022: LD_VAR 0 1
45026: PPUSH
45027: CALL 27251 0 1
45031: ST_TO_ADDR
// if base = 0 then
45032: LD_VAR 0 5
45036: PUSH
45037: LD_INT 0
45039: EQUAL
45040: IFFALSE 45044
// exit ;
45042: GO 45257
// hex = [ GetX ( building ) , GetY ( building ) ] ;
45044: LD_ADDR_VAR 0 7
45048: PUSH
45049: LD_VAR 0 1
45053: PPUSH
45054: CALL_OW 250
45058: PUSH
45059: LD_VAR 0 1
45063: PPUSH
45064: CALL_OW 251
45068: PUSH
45069: EMPTY
45070: LIST
45071: LIST
45072: ST_TO_ADDR
// if hex in [ ai_fact_extension_replace_location [ base ] ] then
45073: LD_VAR 0 7
45077: PUSH
45078: LD_EXP 78
45082: PUSH
45083: LD_VAR 0 5
45087: ARRAY
45088: PUSH
45089: EMPTY
45090: LIST
45091: IN
45092: IFFALSE 45179
// begin for i in ai_facts [ base ] do
45094: LD_ADDR_VAR 0 6
45098: PUSH
45099: LD_EXP 37
45103: PUSH
45104: LD_VAR 0 5
45108: ARRAY
45109: PUSH
45110: FOR_IN
45111: IFFALSE 45177
// if ai_facts_with_ext_rebuild_map >= i then
45113: LD_EXP 85
45117: PUSH
45118: LD_VAR 0 6
45122: GREATEREQUAL
45123: IFFALSE 45175
// begin temp_list = ai_facts_with_ext_rebuild_map [ i ] diff [ hex ] ;
45125: LD_ADDR_VAR 0 3
45129: PUSH
45130: LD_EXP 85
45134: PUSH
45135: LD_VAR 0 6
45139: ARRAY
45140: PUSH
45141: LD_VAR 0 7
45145: PUSH
45146: EMPTY
45147: LIST
45148: DIFF
45149: ST_TO_ADDR
// ai_facts_with_ext_rebuild_map = Replace ( ai_facts_with_ext_rebuild_map , i , temp_list ) ;
45150: LD_ADDR_EXP 85
45154: PUSH
45155: LD_EXP 85
45159: PPUSH
45160: LD_VAR 0 6
45164: PPUSH
45165: LD_VAR 0 3
45169: PPUSH
45170: CALL_OW 1
45174: ST_TO_ADDR
// end ;
45175: GO 45110
45177: POP
45178: POP
// end ; BuildUpgradeCommon ( base , building ) ;
45179: LD_VAR 0 5
45183: PPUSH
45184: LD_VAR 0 1
45188: PPUSH
45189: CALL 45338 0 2
// temp_list = ai_all_buildings [ base ] ^ building ;
45193: LD_ADDR_VAR 0 3
45197: PUSH
45198: LD_EXP 58
45202: PUSH
45203: LD_VAR 0 5
45207: ARRAY
45208: PUSH
45209: LD_VAR 0 1
45213: ADD
45214: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
45215: LD_ADDR_EXP 58
45219: PUSH
45220: LD_EXP 58
45224: PPUSH
45225: LD_VAR 0 5
45229: PPUSH
45230: LD_VAR 0 3
45234: PPUSH
45235: CALL_OW 1
45239: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , true ) ;
45240: LD_VAR 0 5
45244: PPUSH
45245: LD_VAR 0 1
45249: PPUSH
45250: LD_INT 1
45252: PPUSH
45253: CALL 9147 0 3
// end ;
45257: PPOPN 7
45259: END
// on UpgradeComplete ( building ) do var side , temp_list , base ;
45260: LD_INT 0
45262: PPUSH
45263: PPUSH
45264: PPUSH
// begin side = GetSide ( building ) ;
45265: LD_ADDR_VAR 0 2
45269: PUSH
45270: LD_VAR 0 1
45274: PPUSH
45275: CALL_OW 255
45279: ST_TO_ADDR
// if side = you then
45280: LD_VAR 0 2
45284: PUSH
45285: LD_EXP 2
45289: EQUAL
45290: IFFALSE 45294
// exit ;
45292: GO 45335
// base = FindBase ( building ) ;
45294: LD_ADDR_VAR 0 4
45298: PUSH
45299: LD_VAR 0 1
45303: PPUSH
45304: CALL 27251 0 1
45308: ST_TO_ADDR
// if base = 0 then
45309: LD_VAR 0 4
45313: PUSH
45314: LD_INT 0
45316: EQUAL
45317: IFFALSE 45321
// exit ;
45319: GO 45335
// BuildUpgradeCommon ( base , building ) ;
45321: LD_VAR 0 4
45325: PPUSH
45326: LD_VAR 0 1
45330: PPUSH
45331: CALL 45338 0 2
// end ;
45335: PPOPN 4
45337: END
// function BuildUpgradeCommon ( base , building ) ; begin
45338: LD_INT 0
45340: PPUSH
// if GetBType ( building ) = ai_upcoming_building_data [ base ] [ 4 ] then
45341: LD_VAR 0 2
45345: PPUSH
45346: CALL_OW 266
45350: PUSH
45351: LD_EXP 62
45355: PUSH
45356: LD_VAR 0 1
45360: ARRAY
45361: PUSH
45362: LD_INT 4
45364: ARRAY
45365: EQUAL
45366: IFFALSE 45390
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
45368: LD_ADDR_EXP 62
45372: PUSH
45373: LD_EXP 62
45377: PPUSH
45378: LD_VAR 0 1
45382: PPUSH
45383: EMPTY
45384: PPUSH
45385: CALL_OW 1
45389: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
45390: LD_ADDR_EXP 56
45394: PUSH
45395: LD_EXP 56
45399: PPUSH
45400: LD_VAR 0 1
45404: PPUSH
45405: LD_INT 0
45407: PPUSH
45408: CALL_OW 1
45412: ST_TO_ADDR
// end ;
45413: LD_VAR 0 3
45417: RET
// on BuildingCaptured ( captured_building , building_former_side , capturing_unit ) do var temp_list , base ;
45418: LD_INT 0
45420: PPUSH
45421: PPUSH
// begin AdjustComputerDepotResources ( captured_building ) ;
45422: LD_VAR 0 1
45426: PPUSH
45427: CALL 45692 0 1
// base = FindBase ( captured_building ) ;
45431: LD_ADDR_VAR 0 5
45435: PUSH
45436: LD_VAR 0 1
45440: PPUSH
45441: CALL 27251 0 1
45445: ST_TO_ADDR
// if base = 0 then
45446: LD_VAR 0 5
45450: PUSH
45451: LD_INT 0
45453: EQUAL
45454: IFFALSE 45458
// exit ;
45456: GO 45689
// if building_former_side = GetBaseSide ( base ) then
45458: LD_VAR 0 2
45462: PUSH
45463: LD_VAR 0 5
45467: PPUSH
45468: CALL 27103 0 1
45472: EQUAL
45473: IFFALSE 45556
// begin if captured_building in ai_all_buildings [ base ] then
45475: LD_VAR 0 1
45479: PUSH
45480: LD_EXP 58
45484: PUSH
45485: LD_VAR 0 5
45489: ARRAY
45490: IN
45491: IFFALSE 45554
// begin RemoveBuildingFromVariables ( base , captured_building ) ;
45493: LD_VAR 0 5
45497: PPUSH
45498: LD_VAR 0 1
45502: PPUSH
45503: CALL 24761 0 2
// temp_list = ai_captured_buildings [ base ] ^ captured_building ;
45507: LD_ADDR_VAR 0 4
45511: PUSH
45512: LD_EXP 48
45516: PUSH
45517: LD_VAR 0 5
45521: ARRAY
45522: PUSH
45523: LD_VAR 0 1
45527: ADD
45528: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
45529: LD_ADDR_EXP 48
45533: PUSH
45534: LD_EXP 48
45538: PPUSH
45539: LD_VAR 0 5
45543: PPUSH
45544: LD_VAR 0 4
45548: PPUSH
45549: CALL_OW 1
45553: ST_TO_ADDR
// end ; end else
45554: GO 45689
// begin if GetSide ( captured_building ) = GetBaseSide ( base ) then
45556: LD_VAR 0 1
45560: PPUSH
45561: CALL_OW 255
45565: PUSH
45566: LD_VAR 0 5
45570: PPUSH
45571: CALL 27103 0 1
45575: EQUAL
45576: IFFALSE 45689
// begin temp_list = ai_all_buildings [ base ] ^ captured_building ;
45578: LD_ADDR_VAR 0 4
45582: PUSH
45583: LD_EXP 58
45587: PUSH
45588: LD_VAR 0 5
45592: ARRAY
45593: PUSH
45594: LD_VAR 0 1
45598: ADD
45599: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
45600: LD_ADDR_EXP 58
45604: PUSH
45605: LD_EXP 58
45609: PPUSH
45610: LD_VAR 0 5
45614: PPUSH
45615: LD_VAR 0 4
45619: PPUSH
45620: CALL_OW 1
45624: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , captured_building , true ) ;
45625: LD_VAR 0 5
45629: PPUSH
45630: LD_VAR 0 1
45634: PPUSH
45635: LD_INT 1
45637: PPUSH
45638: CALL 9147 0 3
// temp_list = ai_captured_buildings [ base ] diff captured_building ;
45642: LD_ADDR_VAR 0 4
45646: PUSH
45647: LD_EXP 48
45651: PUSH
45652: LD_VAR 0 5
45656: ARRAY
45657: PUSH
45658: LD_VAR 0 1
45662: DIFF
45663: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
45664: LD_ADDR_EXP 48
45668: PUSH
45669: LD_EXP 48
45673: PPUSH
45674: LD_VAR 0 5
45678: PPUSH
45679: LD_VAR 0 4
45683: PPUSH
45684: CALL_OW 1
45688: ST_TO_ADDR
// end ; end ; end ;
45689: PPOPN 5
45691: END
// function AdjustComputerDepotResources ( building ) ; begin
45692: LD_INT 0
45694: PPUSH
// if building = ai_depot [ 2 ] then
45695: LD_VAR 0 1
45699: PUSH
45700: LD_EXP 35
45704: PUSH
45705: LD_INT 2
45707: ARRAY
45708: EQUAL
45709: IFFALSE 45804
// begin SetResourceType ( GetBase ( building ) , mat_cans , [ 90 , 60 , 30 ] [ difficulty ] + Rand ( 0 , 2 ) * 10 ) ;
45711: LD_VAR 0 1
45715: PPUSH
45716: CALL_OW 274
45720: PPUSH
45721: LD_INT 1
45723: PPUSH
45724: LD_INT 90
45726: PUSH
45727: LD_INT 60
45729: PUSH
45730: LD_INT 30
45732: PUSH
45733: EMPTY
45734: LIST
45735: LIST
45736: LIST
45737: PUSH
45738: LD_OWVAR 67
45742: ARRAY
45743: PUSH
45744: LD_INT 0
45746: PPUSH
45747: LD_INT 2
45749: PPUSH
45750: CALL_OW 12
45754: PUSH
45755: LD_INT 10
45757: MUL
45758: PLUS
45759: PPUSH
45760: CALL_OW 277
// SetResourceType ( GetBase ( building ) , mat_oil , 0 ) ;
45764: LD_VAR 0 1
45768: PPUSH
45769: CALL_OW 274
45773: PPUSH
45774: LD_INT 2
45776: PPUSH
45777: LD_INT 0
45779: PPUSH
45780: CALL_OW 277
// SetResourceType ( GetBase ( building ) , mat_siberit , 0 ) ;
45784: LD_VAR 0 1
45788: PPUSH
45789: CALL_OW 274
45793: PPUSH
45794: LD_INT 3
45796: PPUSH
45797: LD_INT 0
45799: PPUSH
45800: CALL_OW 277
// end ; if building in [ ai_depot [ 1 ] , ai_depot [ 3 ] ] then
45804: LD_VAR 0 1
45808: PUSH
45809: LD_EXP 35
45813: PUSH
45814: LD_INT 1
45816: ARRAY
45817: PUSH
45818: LD_EXP 35
45822: PUSH
45823: LD_INT 3
45825: ARRAY
45826: PUSH
45827: EMPTY
45828: LIST
45829: LIST
45830: IN
45831: IFFALSE 45984
// begin SetResourceType ( GetBase ( building ) , mat_cans , [ 200 , 150 , 100 ] [ difficulty ] + Rand ( 0 , 3 ) * 10 ) ;
45833: LD_VAR 0 1
45837: PPUSH
45838: CALL_OW 274
45842: PPUSH
45843: LD_INT 1
45845: PPUSH
45846: LD_INT 200
45848: PUSH
45849: LD_INT 150
45851: PUSH
45852: LD_INT 100
45854: PUSH
45855: EMPTY
45856: LIST
45857: LIST
45858: LIST
45859: PUSH
45860: LD_OWVAR 67
45864: ARRAY
45865: PUSH
45866: LD_INT 0
45868: PPUSH
45869: LD_INT 3
45871: PPUSH
45872: CALL_OW 12
45876: PUSH
45877: LD_INT 10
45879: MUL
45880: PLUS
45881: PPUSH
45882: CALL_OW 277
// SetResourceType ( GetBase ( building ) , mat_oil , [ 300 , 250 , 200 ] [ difficulty ] + Rand ( 0 , 100 ) ) ;
45886: LD_VAR 0 1
45890: PPUSH
45891: CALL_OW 274
45895: PPUSH
45896: LD_INT 2
45898: PPUSH
45899: LD_INT 300
45901: PUSH
45902: LD_INT 250
45904: PUSH
45905: LD_INT 200
45907: PUSH
45908: EMPTY
45909: LIST
45910: LIST
45911: LIST
45912: PUSH
45913: LD_OWVAR 67
45917: ARRAY
45918: PUSH
45919: LD_INT 0
45921: PPUSH
45922: LD_INT 100
45924: PPUSH
45925: CALL_OW 12
45929: PLUS
45930: PPUSH
45931: CALL_OW 277
// SetResourceType ( GetBase ( building ) , mat_siberit , [ 100 , 70 , 40 ] [ difficulty ] + Rand ( 0 , 30 ) ) ;
45935: LD_VAR 0 1
45939: PPUSH
45940: CALL_OW 274
45944: PPUSH
45945: LD_INT 3
45947: PPUSH
45948: LD_INT 100
45950: PUSH
45951: LD_INT 70
45953: PUSH
45954: LD_INT 40
45956: PUSH
45957: EMPTY
45958: LIST
45959: LIST
45960: LIST
45961: PUSH
45962: LD_OWVAR 67
45966: ARRAY
45967: PUSH
45968: LD_INT 0
45970: PPUSH
45971: LD_INT 30
45973: PPUSH
45974: CALL_OW 12
45978: PLUS
45979: PPUSH
45980: CALL_OW 277
// end ; end ;
45984: LD_VAR 0 2
45988: RET
// export function GetHumansOutOfUnits ( un_list ) ; var i ; begin
45989: LD_INT 0
45991: PPUSH
45992: PPUSH
// result = [ ] ;
45993: LD_ADDR_VAR 0 2
45997: PUSH
45998: EMPTY
45999: ST_TO_ADDR
// for i in un_list do
46000: LD_ADDR_VAR 0 3
46004: PUSH
46005: LD_VAR 0 1
46009: PUSH
46010: FOR_IN
46011: IFFALSE 46087
// case GetType ( IsInUnit ( i ) ) of unit_building :
46013: LD_VAR 0 3
46017: PPUSH
46018: CALL_OW 310
46022: PPUSH
46023: CALL_OW 247
46027: PUSH
46028: LD_INT 3
46030: DOUBLE
46031: EQUAL
46032: IFTRUE 46036
46034: GO 46048
46036: POP
// ComExitBuilding ( i ) ; unit_vehicle :
46037: LD_VAR 0 3
46041: PPUSH
46042: CALL_OW 122
46046: GO 46085
46048: LD_INT 2
46050: DOUBLE
46051: EQUAL
46052: IFTRUE 46056
46054: GO 46068
46056: POP
// ComExitVehicle ( i ) ; else
46057: LD_VAR 0 3
46061: PPUSH
46062: CALL_OW 121
46066: GO 46085
46068: POP
// result = result ^ i ; end ;
46069: LD_ADDR_VAR 0 2
46073: PUSH
46074: LD_VAR 0 2
46078: PUSH
46079: LD_VAR 0 3
46083: ADD
46084: ST_TO_ADDR
46085: GO 46010
46087: POP
46088: POP
// end ;
46089: LD_VAR 0 2
46093: RET
// export function BaseUnderAttack ( base , attack_side ) ; var area , i , val , def_side , temp_list ; begin
46094: LD_INT 0
46096: PPUSH
46097: PPUSH
46098: PPUSH
46099: PPUSH
46100: PPUSH
46101: PPUSH
// result = false ;
46102: LD_ADDR_VAR 0 3
46106: PUSH
46107: LD_INT 0
46109: ST_TO_ADDR
// def_side = GetBaseSide ( base ) ;
46110: LD_ADDR_VAR 0 7
46114: PUSH
46115: LD_VAR 0 1
46119: PPUSH
46120: CALL 27103 0 1
46124: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
46125: LD_ADDR_VAR 0 4
46129: PUSH
46130: LD_VAR 0 1
46134: PPUSH
46135: CALL 27032 0 1
46139: ST_TO_ADDR
// if attack_side = def_side then
46140: LD_VAR 0 2
46144: PUSH
46145: LD_VAR 0 7
46149: EQUAL
46150: IFFALSE 46154
// exit ;
46152: GO 46673
// if attack_side = - 1 then
46154: LD_VAR 0 2
46158: PUSH
46159: LD_INT 1
46161: NEG
46162: EQUAL
46163: IFFALSE 46429
// begin if FilterAllUnits ( [ [ f_enemy , def_side ] , [ f_inarea , area ] ] ) > 0 then
46165: LD_INT 81
46167: PUSH
46168: LD_VAR 0 7
46172: PUSH
46173: EMPTY
46174: LIST
46175: LIST
46176: PUSH
46177: LD_INT 95
46179: PUSH
46180: LD_VAR 0 4
46184: PUSH
46185: EMPTY
46186: LIST
46187: LIST
46188: PUSH
46189: EMPTY
46190: LIST
46191: LIST
46192: PPUSH
46193: CALL_OW 69
46197: PUSH
46198: LD_INT 0
46200: GREATER
46201: IFFALSE 46213
// begin result = true ;
46203: LD_ADDR_VAR 0 3
46207: PUSH
46208: LD_INT 1
46210: ST_TO_ADDR
// exit ;
46211: GO 46673
// end ; val = true ;
46213: LD_ADDR_VAR 0 6
46217: PUSH
46218: LD_INT 1
46220: ST_TO_ADDR
// for i in ai_contact_time [ def_side ] do
46221: LD_ADDR_VAR 0 5
46225: PUSH
46226: LD_EXP 89
46230: PUSH
46231: LD_VAR 0 7
46235: ARRAY
46236: PUSH
46237: FOR_IN
46238: IFFALSE 46262
// if i < 0 0$10 then
46240: LD_VAR 0 5
46244: PUSH
46245: LD_INT 350
46247: LESS
46248: IFFALSE 46260
// begin val = false ;
46250: LD_ADDR_VAR 0 6
46254: PUSH
46255: LD_INT 0
46257: ST_TO_ADDR
// break ;
46258: GO 46262
// end ;
46260: GO 46237
46262: POP
46263: POP
// if ContactTime ( def_side ) >= 0 0$10 and val then
46264: LD_VAR 0 7
46268: PPUSH
46269: CALL_OW 462
46273: PUSH
46274: LD_INT 350
46276: GREATEREQUAL
46277: PUSH
46278: LD_VAR 0 6
46282: AND
46283: IFFALSE 46287
// exit ;
46285: GO 46673
// temp_list = [ ] ;
46287: LD_ADDR_VAR 0 8
46291: PUSH
46292: EMPTY
46293: ST_TO_ADDR
// for i in ( ai_bases diff base ) do
46294: LD_ADDR_VAR 0 5
46298: PUSH
46299: LD_EXP 25
46303: PUSH
46304: LD_VAR 0 1
46308: DIFF
46309: PUSH
46310: FOR_IN
46311: IFFALSE 46357
// temp_list = Insert ( temp_list , 1 , [ f_not , [ f_inarea , GetBaseArea ( i ) ] ] ) ;
46313: LD_ADDR_VAR 0 8
46317: PUSH
46318: LD_VAR 0 8
46322: PPUSH
46323: LD_INT 1
46325: PPUSH
46326: LD_INT 3
46328: PUSH
46329: LD_INT 95
46331: PUSH
46332: LD_VAR 0 5
46336: PPUSH
46337: CALL 27032 0 1
46341: PUSH
46342: EMPTY
46343: LIST
46344: LIST
46345: PUSH
46346: EMPTY
46347: LIST
46348: LIST
46349: PPUSH
46350: CALL_OW 2
46354: ST_TO_ADDR
46355: GO 46310
46357: POP
46358: POP
// temp_list = FilterAllUnits ( [ [ f_enemy , def_side ] , [ f_not , [ f_type , unit_building ] ] ] ^ temp_list ) ;
46359: LD_ADDR_VAR 0 8
46363: PUSH
46364: LD_INT 81
46366: PUSH
46367: LD_VAR 0 7
46371: PUSH
46372: EMPTY
46373: LIST
46374: LIST
46375: PUSH
46376: LD_INT 3
46378: PUSH
46379: LD_INT 21
46381: PUSH
46382: LD_INT 3
46384: PUSH
46385: EMPTY
46386: LIST
46387: LIST
46388: PUSH
46389: EMPTY
46390: LIST
46391: LIST
46392: PUSH
46393: EMPTY
46394: LIST
46395: LIST
46396: PUSH
46397: LD_VAR 0 8
46401: ADD
46402: PPUSH
46403: CALL_OW 69
46407: ST_TO_ADDR
// if not AnyNearBaseArea ( temp_list , base ) then
46408: LD_VAR 0 8
46412: PPUSH
46413: LD_VAR 0 1
46417: PPUSH
46418: CALL 46749 0 2
46422: NOT
46423: IFFALSE 46427
// exit ;
46425: GO 46673
// end else
46427: GO 46665
// begin if FilterAllUnits ( [ [ f_side , attack_side ] , [ f_inarea , area ] ] ) > 0 then
46429: LD_INT 22
46431: PUSH
46432: LD_VAR 0 2
46436: PUSH
46437: EMPTY
46438: LIST
46439: LIST
46440: PUSH
46441: LD_INT 95
46443: PUSH
46444: LD_VAR 0 4
46448: PUSH
46449: EMPTY
46450: LIST
46451: LIST
46452: PUSH
46453: EMPTY
46454: LIST
46455: LIST
46456: PPUSH
46457: CALL_OW 69
46461: PUSH
46462: LD_INT 0
46464: GREATER
46465: IFFALSE 46477
// begin result = true ;
46467: LD_ADDR_VAR 0 3
46471: PUSH
46472: LD_INT 1
46474: ST_TO_ADDR
// exit ;
46475: GO 46673
// end ; if ContactTime ( [ def_side , attack_side ] ) >= 0 0$10 and ai_contact_time [ def_side ] [ attack_side ] >= 0 0$10 then
46477: LD_VAR 0 7
46481: PUSH
46482: LD_VAR 0 2
46486: PUSH
46487: EMPTY
46488: LIST
46489: LIST
46490: PPUSH
46491: CALL_OW 462
46495: PUSH
46496: LD_INT 350
46498: GREATEREQUAL
46499: PUSH
46500: LD_EXP 89
46504: PUSH
46505: LD_VAR 0 7
46509: ARRAY
46510: PUSH
46511: LD_VAR 0 2
46515: ARRAY
46516: PUSH
46517: LD_INT 350
46519: GREATEREQUAL
46520: AND
46521: IFFALSE 46525
// exit ;
46523: GO 46673
// temp_list = [ ] ;
46525: LD_ADDR_VAR 0 8
46529: PUSH
46530: EMPTY
46531: ST_TO_ADDR
// for i in ( ai_bases diff base ) do
46532: LD_ADDR_VAR 0 5
46536: PUSH
46537: LD_EXP 25
46541: PUSH
46542: LD_VAR 0 1
46546: DIFF
46547: PUSH
46548: FOR_IN
46549: IFFALSE 46595
// temp_list = Insert ( temp_list , 1 , [ f_not , [ f_inarea , GetBaseArea ( i ) ] ] ) ;
46551: LD_ADDR_VAR 0 8
46555: PUSH
46556: LD_VAR 0 8
46560: PPUSH
46561: LD_INT 1
46563: PPUSH
46564: LD_INT 3
46566: PUSH
46567: LD_INT 95
46569: PUSH
46570: LD_VAR 0 5
46574: PPUSH
46575: CALL 27032 0 1
46579: PUSH
46580: EMPTY
46581: LIST
46582: LIST
46583: PUSH
46584: EMPTY
46585: LIST
46586: LIST
46587: PPUSH
46588: CALL_OW 2
46592: ST_TO_ADDR
46593: GO 46548
46595: POP
46596: POP
// temp_list = FilterAllUnits ( [ [ f_side , attack_side ] , [ f_not , [ f_type , unit_building ] ] ] ^ temp_list ) ;
46597: LD_ADDR_VAR 0 8
46601: PUSH
46602: LD_INT 22
46604: PUSH
46605: LD_VAR 0 2
46609: PUSH
46610: EMPTY
46611: LIST
46612: LIST
46613: PUSH
46614: LD_INT 3
46616: PUSH
46617: LD_INT 21
46619: PUSH
46620: LD_INT 3
46622: PUSH
46623: EMPTY
46624: LIST
46625: LIST
46626: PUSH
46627: EMPTY
46628: LIST
46629: LIST
46630: PUSH
46631: EMPTY
46632: LIST
46633: LIST
46634: PUSH
46635: LD_VAR 0 8
46639: ADD
46640: PPUSH
46641: CALL_OW 69
46645: ST_TO_ADDR
// if not AnyNearBaseArea ( temp_list , base ) then
46646: LD_VAR 0 8
46650: PPUSH
46651: LD_VAR 0 1
46655: PPUSH
46656: CALL 46749 0 2
46660: NOT
46661: IFFALSE 46665
// exit ;
46663: GO 46673
// end ; result = true ;
46665: LD_ADDR_VAR 0 3
46669: PUSH
46670: LD_INT 1
46672: ST_TO_ADDR
// end ;
46673: LD_VAR 0 3
46677: RET
// export function ListFilterNearArea ( list , area ) ; var i ; begin
46678: LD_INT 0
46680: PPUSH
46681: PPUSH
// result = [ ] ;
46682: LD_ADDR_VAR 0 3
46686: PUSH
46687: EMPTY
46688: ST_TO_ADDR
// for i in list do
46689: LD_ADDR_VAR 0 4
46693: PUSH
46694: LD_VAR 0 1
46698: PUSH
46699: FOR_IN
46700: IFFALSE 46742
// if GetDistUnitArea ( i , area ) <= ai_near_base_dist then
46702: LD_VAR 0 4
46706: PPUSH
46707: LD_VAR 0 2
46711: PPUSH
46712: CALL_OW 299
46716: PUSH
46717: LD_EXP 64
46721: LESSEQUAL
46722: IFFALSE 46740
// result = result ^ i ;
46724: LD_ADDR_VAR 0 3
46728: PUSH
46729: LD_VAR 0 3
46733: PUSH
46734: LD_VAR 0 4
46738: ADD
46739: ST_TO_ADDR
46740: GO 46699
46742: POP
46743: POP
// end ;
46744: LD_VAR 0 3
46748: RET
// function AnyNearBaseArea ( list , base ) ; var i , area ; begin
46749: LD_INT 0
46751: PPUSH
46752: PPUSH
46753: PPUSH
// result = false ;
46754: LD_ADDR_VAR 0 3
46758: PUSH
46759: LD_INT 0
46761: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
46762: LD_ADDR_VAR 0 5
46766: PUSH
46767: LD_VAR 0 2
46771: PPUSH
46772: CALL 27032 0 1
46776: ST_TO_ADDR
// for i in list do
46777: LD_ADDR_VAR 0 4
46781: PUSH
46782: LD_VAR 0 1
46786: PUSH
46787: FOR_IN
46788: IFFALSE 46824
// if GetDistUnitArea ( i , area ) <= ai_near_base_dist then
46790: LD_VAR 0 4
46794: PPUSH
46795: LD_VAR 0 5
46799: PPUSH
46800: CALL_OW 299
46804: PUSH
46805: LD_EXP 64
46809: LESSEQUAL
46810: IFFALSE 46822
// begin result = true ;
46812: LD_ADDR_VAR 0 3
46816: PUSH
46817: LD_INT 1
46819: ST_TO_ADDR
// break ;
46820: GO 46824
// end ;
46822: GO 46787
46824: POP
46825: POP
// end ;
46826: LD_VAR 0 3
46830: RET
// on Command ( com ) do var i , temp_list , hex_list , un , k , target_hex ;
46831: LD_INT 0
46833: PPUSH
46834: PPUSH
46835: PPUSH
46836: PPUSH
46837: PPUSH
46838: PPUSH
// begin OnCommand_CrateDropDetection ( com ) ;
46839: LD_VAR 0 1
46843: PPUSH
46844: CALL 18645 0 1
// if com = 124 then
46848: LD_VAR 0 1
46852: PUSH
46853: LD_INT 124
46855: EQUAL
46856: IFFALSE 47267
// begin for i in FilterAllUnits ( [ f_side , you ] ) do
46858: LD_ADDR_VAR 0 2
46862: PUSH
46863: LD_INT 22
46865: PUSH
46866: LD_EXP 2
46870: PUSH
46871: EMPTY
46872: LIST
46873: LIST
46874: PPUSH
46875: CALL_OW 69
46879: PUSH
46880: FOR_IN
46881: IFFALSE 47265
// if IsSelected ( i ) and HasTask ( i ) then
46883: LD_VAR 0 2
46887: PPUSH
46888: CALL_OW 306
46892: PUSH
46893: LD_VAR 0 2
46897: PPUSH
46898: CALL_OW 314
46902: AND
46903: IFFALSE 47263
// begin target_hex = [ ] ;
46905: LD_ADDR_VAR 0 7
46909: PUSH
46910: EMPTY
46911: ST_TO_ADDR
// for k in GetTaskList ( i ) do
46912: LD_ADDR_VAR 0 6
46916: PUSH
46917: LD_VAR 0 2
46921: PPUSH
46922: CALL_OW 437
46926: PUSH
46927: FOR_IN
46928: IFFALSE 46975
// if k [ 1 ] = | then
46930: LD_VAR 0 6
46934: PUSH
46935: LD_INT 1
46937: ARRAY
46938: PUSH
46939: LD_STRING |
46941: EQUAL
46942: IFFALSE 46973
// begin target_hex = [ k [ 2 ] , k [ 3 ] ] ;
46944: LD_ADDR_VAR 0 7
46948: PUSH
46949: LD_VAR 0 6
46953: PUSH
46954: LD_INT 2
46956: ARRAY
46957: PUSH
46958: LD_VAR 0 6
46962: PUSH
46963: LD_INT 3
46965: ARRAY
46966: PUSH
46967: EMPTY
46968: LIST
46969: LIST
46970: ST_TO_ADDR
// break ;
46971: GO 46975
// end ;
46973: GO 46927
46975: POP
46976: POP
// if target_hex > 0 then
46977: LD_VAR 0 7
46981: PUSH
46982: LD_INT 0
46984: GREATER
46985: IFFALSE 47263
// begin hex_list = target_hex ;
46987: LD_ADDR_VAR 0 4
46991: PUSH
46992: LD_VAR 0 7
46996: ST_TO_ADDR
// temp_list = [ ] ;
46997: LD_ADDR_VAR 0 3
47001: PUSH
47002: EMPTY
47003: ST_TO_ADDR
// for k = 0 to 5 do
47004: LD_ADDR_VAR 0 6
47008: PUSH
47009: DOUBLE
47010: LD_INT 0
47012: DEC
47013: ST_TO_ADDR
47014: LD_INT 5
47016: PUSH
47017: FOR_TO
47018: IFFALSE 47088
// temp_list = Insert ( temp_list , 1 , [ ShiftX ( hex_list [ 1 ] , k , 1 ) , ShiftY ( hex_list [ 2 ] , k , 1 ) ] ) ;
47020: LD_ADDR_VAR 0 3
47024: PUSH
47025: LD_VAR 0 3
47029: PPUSH
47030: LD_INT 1
47032: PPUSH
47033: LD_VAR 0 4
47037: PUSH
47038: LD_INT 1
47040: ARRAY
47041: PPUSH
47042: LD_VAR 0 6
47046: PPUSH
47047: LD_INT 1
47049: PPUSH
47050: CALL_OW 272
47054: PUSH
47055: LD_VAR 0 4
47059: PUSH
47060: LD_INT 2
47062: ARRAY
47063: PPUSH
47064: LD_VAR 0 6
47068: PPUSH
47069: LD_INT 1
47071: PPUSH
47072: CALL_OW 273
47076: PUSH
47077: EMPTY
47078: LIST
47079: LIST
47080: PPUSH
47081: CALL_OW 2
47085: ST_TO_ADDR
47086: GO 47017
47088: POP
47089: POP
// hex_list = [ hex_list ] ^ temp_list ;
47090: LD_ADDR_VAR 0 4
47094: PUSH
47095: LD_VAR 0 4
47099: PUSH
47100: EMPTY
47101: LIST
47102: PUSH
47103: LD_VAR 0 3
47107: ADD
47108: ST_TO_ADDR
// temp_list = [ ] ;
47109: LD_ADDR_VAR 0 3
47113: PUSH
47114: EMPTY
47115: ST_TO_ADDR
// for k in hex_list do
47116: LD_ADDR_VAR 0 6
47120: PUSH
47121: LD_VAR 0 4
47125: PUSH
47126: FOR_IN
47127: IFFALSE 47261
// begin un = HexInfo ( k [ 1 ] , k [ 2 ] ) ;
47129: LD_ADDR_VAR 0 5
47133: PUSH
47134: LD_VAR 0 6
47138: PUSH
47139: LD_INT 1
47141: ARRAY
47142: PPUSH
47143: LD_VAR 0 6
47147: PUSH
47148: LD_INT 2
47150: ARRAY
47151: PPUSH
47152: CALL_OW 428
47156: ST_TO_ADDR
// if un > 0 and not un in temp_list then
47157: LD_VAR 0 5
47161: PUSH
47162: LD_INT 0
47164: GREATER
47165: PUSH
47166: LD_VAR 0 5
47170: PUSH
47171: LD_VAR 0 3
47175: IN
47176: NOT
47177: AND
47178: IFFALSE 47259
// begin ai_attack_ground_info_initial = Insert ( ai_attack_ground_info_initial , 1 , [ i , un , GetSide ( un ) , target_hex [ 1 ] , target_hex [ 2 ] ] ) ;
47180: LD_ADDR_EXP 90
47184: PUSH
47185: LD_EXP 90
47189: PPUSH
47190: LD_INT 1
47192: PPUSH
47193: LD_VAR 0 2
47197: PUSH
47198: LD_VAR 0 5
47202: PUSH
47203: LD_VAR 0 5
47207: PPUSH
47208: CALL_OW 255
47212: PUSH
47213: LD_VAR 0 7
47217: PUSH
47218: LD_INT 1
47220: ARRAY
47221: PUSH
47222: LD_VAR 0 7
47226: PUSH
47227: LD_INT 2
47229: ARRAY
47230: PUSH
47231: EMPTY
47232: LIST
47233: LIST
47234: LIST
47235: LIST
47236: LIST
47237: PPUSH
47238: CALL_OW 2
47242: ST_TO_ADDR
// temp_list = temp_list ^ un ;
47243: LD_ADDR_VAR 0 3
47247: PUSH
47248: LD_VAR 0 3
47252: PUSH
47253: LD_VAR 0 5
47257: ADD
47258: ST_TO_ADDR
// end ; end ;
47259: GO 47126
47261: POP
47262: POP
// end ; end ;
47263: GO 46880
47265: POP
47266: POP
// end ; end ;
47267: PPOPN 7
47269: END
// every 0 0$1 + 0 0$0.1 do var a , b , temp_list , temp_list_2 , yup , i , t ;
47270: GO 47272
47272: DISABLE
47273: LD_INT 0
47275: PPUSH
47276: PPUSH
47277: PPUSH
47278: PPUSH
47279: PPUSH
47280: PPUSH
47281: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
47282: LD_INT 18
47284: PPUSH
47285: CALL_OW 67
// i = 1 ;
47289: LD_ADDR_VAR 0 6
47293: PUSH
47294: LD_INT 1
47296: ST_TO_ADDR
// while i <= ai_attack_ground_info_initial do
47297: LD_VAR 0 6
47301: PUSH
47302: LD_EXP 90
47306: LESSEQUAL
47307: IFFALSE 47470
// begin yup = false ;
47309: LD_ADDR_VAR 0 5
47313: PUSH
47314: LD_INT 0
47316: ST_TO_ADDR
// for t in GetTaskList ( ai_attack_ground_info_initial [ i ] [ 1 ] ) do
47317: LD_ADDR_VAR 0 7
47321: PUSH
47322: LD_EXP 90
47326: PUSH
47327: LD_VAR 0 6
47331: ARRAY
47332: PUSH
47333: LD_INT 1
47335: ARRAY
47336: PPUSH
47337: CALL_OW 437
47341: PUSH
47342: FOR_IN
47343: IFFALSE 47423
// if t [ 1 ] = | then
47345: LD_VAR 0 7
47349: PUSH
47350: LD_INT 1
47352: ARRAY
47353: PUSH
47354: LD_STRING |
47356: EQUAL
47357: IFFALSE 47421
// if t [ 2 ] = ai_attack_ground_info_initial [ i ] [ 4 ] and t [ 3 ] = ai_attack_ground_info_initial [ i ] [ 5 ] then
47359: LD_VAR 0 7
47363: PUSH
47364: LD_INT 2
47366: ARRAY
47367: PUSH
47368: LD_EXP 90
47372: PUSH
47373: LD_VAR 0 6
47377: ARRAY
47378: PUSH
47379: LD_INT 4
47381: ARRAY
47382: EQUAL
47383: PUSH
47384: LD_VAR 0 7
47388: PUSH
47389: LD_INT 3
47391: ARRAY
47392: PUSH
47393: LD_EXP 90
47397: PUSH
47398: LD_VAR 0 6
47402: ARRAY
47403: PUSH
47404: LD_INT 5
47406: ARRAY
47407: EQUAL
47408: AND
47409: IFFALSE 47421
// begin yup = true ;
47411: LD_ADDR_VAR 0 5
47415: PUSH
47416: LD_INT 1
47418: ST_TO_ADDR
// break ;
47419: GO 47423
// end ;
47421: GO 47342
47423: POP
47424: POP
// if not yup then
47425: LD_VAR 0 5
47429: NOT
47430: IFFALSE 47454
// begin ai_attack_ground_info_initial = Delete ( ai_attack_ground_info_initial , i ) ;
47432: LD_ADDR_EXP 90
47436: PUSH
47437: LD_EXP 90
47441: PPUSH
47442: LD_VAR 0 6
47446: PPUSH
47447: CALL_OW 3
47451: ST_TO_ADDR
// continue ;
47452: GO 47297
// end ; i = i + 1 ;
47454: LD_ADDR_VAR 0 6
47458: PUSH
47459: LD_VAR 0 6
47463: PUSH
47464: LD_INT 1
47466: PLUS
47467: ST_TO_ADDR
// end ;
47468: GO 47297
// i = 1 ;
47470: LD_ADDR_VAR 0 6
47474: PUSH
47475: LD_INT 1
47477: ST_TO_ADDR
// while i <= ai_attack_ground_info_sustain do
47478: LD_VAR 0 6
47482: PUSH
47483: LD_EXP 91
47487: LESSEQUAL
47488: IFFALSE 47651
// begin yup = false ;
47490: LD_ADDR_VAR 0 5
47494: PUSH
47495: LD_INT 0
47497: ST_TO_ADDR
// for t in GetTaskList ( ai_attack_ground_info_sustain [ i ] [ 1 ] ) do
47498: LD_ADDR_VAR 0 7
47502: PUSH
47503: LD_EXP 91
47507: PUSH
47508: LD_VAR 0 6
47512: ARRAY
47513: PUSH
47514: LD_INT 1
47516: ARRAY
47517: PPUSH
47518: CALL_OW 437
47522: PUSH
47523: FOR_IN
47524: IFFALSE 47604
// if t [ 1 ] = | then
47526: LD_VAR 0 7
47530: PUSH
47531: LD_INT 1
47533: ARRAY
47534: PUSH
47535: LD_STRING |
47537: EQUAL
47538: IFFALSE 47602
// if t [ 2 ] = ai_attack_ground_info_sustain [ i ] [ 4 ] and t [ 3 ] = ai_attack_ground_info_sustain [ i ] [ 5 ] then
47540: LD_VAR 0 7
47544: PUSH
47545: LD_INT 2
47547: ARRAY
47548: PUSH
47549: LD_EXP 91
47553: PUSH
47554: LD_VAR 0 6
47558: ARRAY
47559: PUSH
47560: LD_INT 4
47562: ARRAY
47563: EQUAL
47564: PUSH
47565: LD_VAR 0 7
47569: PUSH
47570: LD_INT 3
47572: ARRAY
47573: PUSH
47574: LD_EXP 91
47578: PUSH
47579: LD_VAR 0 6
47583: ARRAY
47584: PUSH
47585: LD_INT 5
47587: ARRAY
47588: EQUAL
47589: AND
47590: IFFALSE 47602
// begin yup = true ;
47592: LD_ADDR_VAR 0 5
47596: PUSH
47597: LD_INT 1
47599: ST_TO_ADDR
// break ;
47600: GO 47604
// end ;
47602: GO 47523
47604: POP
47605: POP
// if not yup then
47606: LD_VAR 0 5
47610: NOT
47611: IFFALSE 47635
// begin ai_attack_ground_info_sustain = Delete ( ai_attack_ground_info_sustain , i ) ;
47613: LD_ADDR_EXP 91
47617: PUSH
47618: LD_EXP 91
47622: PPUSH
47623: LD_VAR 0 6
47627: PPUSH
47628: CALL_OW 3
47632: ST_TO_ADDR
// continue ;
47633: GO 47478
// end ; i = i + 1 ;
47635: LD_ADDR_VAR 0 6
47639: PUSH
47640: LD_VAR 0 6
47644: PUSH
47645: LD_INT 1
47647: PLUS
47648: ST_TO_ADDR
// end ;
47649: GO 47478
// temp_list = ai_contact_time ;
47651: LD_ADDR_VAR 0 3
47655: PUSH
47656: LD_EXP 89
47660: ST_TO_ADDR
// for a = 1 to temp_list do
47661: LD_ADDR_VAR 0 1
47665: PUSH
47666: DOUBLE
47667: LD_INT 1
47669: DEC
47670: ST_TO_ADDR
47671: LD_VAR 0 3
47675: PUSH
47676: FOR_TO
47677: IFFALSE 47803
// for b = 1 to temp_list [ a ] do
47679: LD_ADDR_VAR 0 2
47683: PUSH
47684: DOUBLE
47685: LD_INT 1
47687: DEC
47688: ST_TO_ADDR
47689: LD_VAR 0 3
47693: PUSH
47694: LD_VAR 0 1
47698: ARRAY
47699: PUSH
47700: FOR_TO
47701: IFFALSE 47799
// if temp_list [ a ] [ b ] < 100000 then
47703: LD_VAR 0 3
47707: PUSH
47708: LD_VAR 0 1
47712: ARRAY
47713: PUSH
47714: LD_VAR 0 2
47718: ARRAY
47719: PUSH
47720: LD_INT 100000
47722: LESS
47723: IFFALSE 47797
// begin temp_list_2 = Replace ( ai_contact_time [ a ] , b , temp_list [ a ] [ b ] + 0 0$0.5 ) ;
47725: LD_ADDR_VAR 0 4
47729: PUSH
47730: LD_EXP 89
47734: PUSH
47735: LD_VAR 0 1
47739: ARRAY
47740: PPUSH
47741: LD_VAR 0 2
47745: PPUSH
47746: LD_VAR 0 3
47750: PUSH
47751: LD_VAR 0 1
47755: ARRAY
47756: PUSH
47757: LD_VAR 0 2
47761: ARRAY
47762: PUSH
47763: LD_INT 18
47765: PLUS
47766: PPUSH
47767: CALL_OW 1
47771: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a , temp_list_2 ) ;
47772: LD_ADDR_EXP 89
47776: PUSH
47777: LD_EXP 89
47781: PPUSH
47782: LD_VAR 0 1
47786: PPUSH
47787: LD_VAR 0 4
47791: PPUSH
47792: CALL_OW 1
47796: ST_TO_ADDR
// end ;
47797: GO 47700
47799: POP
47800: POP
47801: GO 47676
47803: POP
47804: POP
// for a in ai_attack_ground_info_initial do
47805: LD_ADDR_VAR 0 1
47809: PUSH
47810: LD_EXP 90
47814: PUSH
47815: FOR_IN
47816: IFFALSE 48022
// begin if IsDead ( a [ 2 ] ) or UnitShoot ( a [ 2 ] ) = a [ 1 ] then
47818: LD_VAR 0 1
47822: PUSH
47823: LD_INT 2
47825: ARRAY
47826: PPUSH
47827: CALL_OW 301
47831: PUSH
47832: LD_VAR 0 1
47836: PUSH
47837: LD_INT 2
47839: ARRAY
47840: PPUSH
47841: CALL_OW 504
47845: PUSH
47846: LD_VAR 0 1
47850: PUSH
47851: LD_INT 1
47853: ARRAY
47854: EQUAL
47855: OR
47856: IFFALSE 48020
// begin temp_list = Replace ( ai_contact_time [ you ] , a [ 3 ] , 0 ) ;
47858: LD_ADDR_VAR 0 3
47862: PUSH
47863: LD_EXP 89
47867: PUSH
47868: LD_EXP 2
47872: ARRAY
47873: PPUSH
47874: LD_VAR 0 1
47878: PUSH
47879: LD_INT 3
47881: ARRAY
47882: PPUSH
47883: LD_INT 0
47885: PPUSH
47886: CALL_OW 1
47890: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , you , temp_list ) ;
47891: LD_ADDR_EXP 89
47895: PUSH
47896: LD_EXP 89
47900: PPUSH
47901: LD_EXP 2
47905: PPUSH
47906: LD_VAR 0 3
47910: PPUSH
47911: CALL_OW 1
47915: ST_TO_ADDR
// temp_list = Replace ( ai_contact_time [ a [ 3 ] ] , you , 0 ) ;
47916: LD_ADDR_VAR 0 3
47920: PUSH
47921: LD_EXP 89
47925: PUSH
47926: LD_VAR 0 1
47930: PUSH
47931: LD_INT 3
47933: ARRAY
47934: ARRAY
47935: PPUSH
47936: LD_EXP 2
47940: PPUSH
47941: LD_INT 0
47943: PPUSH
47944: CALL_OW 1
47948: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a [ 3 ] , temp_list ) ;
47949: LD_ADDR_EXP 89
47953: PUSH
47954: LD_EXP 89
47958: PPUSH
47959: LD_VAR 0 1
47963: PUSH
47964: LD_INT 3
47966: ARRAY
47967: PPUSH
47968: LD_VAR 0 3
47972: PPUSH
47973: CALL_OW 1
47977: ST_TO_ADDR
// ai_attack_ground_info_initial = ai_attack_ground_info_initial diff [ a ] ;
47978: LD_ADDR_EXP 90
47982: PUSH
47983: LD_EXP 90
47987: PUSH
47988: LD_VAR 0 1
47992: PUSH
47993: EMPTY
47994: LIST
47995: DIFF
47996: ST_TO_ADDR
// ai_attack_ground_info_sustain = Insert ( ai_attack_ground_info_sustain , 1 , a ) ;
47997: LD_ADDR_EXP 91
48001: PUSH
48002: LD_EXP 91
48006: PPUSH
48007: LD_INT 1
48009: PPUSH
48010: LD_VAR 0 1
48014: PPUSH
48015: CALL_OW 2
48019: ST_TO_ADDR
// end ; end ;
48020: GO 47815
48022: POP
48023: POP
// for a in ai_attack_ground_info_sustain do
48024: LD_ADDR_VAR 0 1
48028: PUSH
48029: LD_EXP 91
48033: PUSH
48034: FOR_IN
48035: IFFALSE 48159
// begin temp_list = Replace ( ai_contact_time [ you ] , a [ 3 ] , 0 ) ;
48037: LD_ADDR_VAR 0 3
48041: PUSH
48042: LD_EXP 89
48046: PUSH
48047: LD_EXP 2
48051: ARRAY
48052: PPUSH
48053: LD_VAR 0 1
48057: PUSH
48058: LD_INT 3
48060: ARRAY
48061: PPUSH
48062: LD_INT 0
48064: PPUSH
48065: CALL_OW 1
48069: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , you , temp_list ) ;
48070: LD_ADDR_EXP 89
48074: PUSH
48075: LD_EXP 89
48079: PPUSH
48080: LD_EXP 2
48084: PPUSH
48085: LD_VAR 0 3
48089: PPUSH
48090: CALL_OW 1
48094: ST_TO_ADDR
// temp_list = Replace ( ai_contact_time [ a [ 3 ] ] , you , 0 ) ;
48095: LD_ADDR_VAR 0 3
48099: PUSH
48100: LD_EXP 89
48104: PUSH
48105: LD_VAR 0 1
48109: PUSH
48110: LD_INT 3
48112: ARRAY
48113: ARRAY
48114: PPUSH
48115: LD_EXP 2
48119: PPUSH
48120: LD_INT 0
48122: PPUSH
48123: CALL_OW 1
48127: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a [ 3 ] , temp_list ) ;
48128: LD_ADDR_EXP 89
48132: PUSH
48133: LD_EXP 89
48137: PPUSH
48138: LD_VAR 0 1
48142: PUSH
48143: LD_INT 3
48145: ARRAY
48146: PPUSH
48147: LD_VAR 0 3
48151: PPUSH
48152: CALL_OW 1
48156: ST_TO_ADDR
// end ;
48157: GO 48034
48159: POP
48160: POP
// until false ;
48161: LD_INT 0
48163: IFFALSE 47282
// end ;
48165: PPOPN 7
48167: END
// every 0 0$1 + 0 0$0.4 do var side , i , mechanics_list , temp_list , temp_list_3 , temp_unit , vehicles_list , allowed_to_repair_vehicles ; var under_attack , free_parking_spots , k , base , area , temp_list_2 , remote_mechanics , parked_vehicles , n , a ; var temp_list_4 , temp_list_5 , num_control_stations , already_inside_mecs ; var vehicles_to_consider , vehicles_allowed_to_park , human_pullback_hex_max_dist , vehicles_to_park ; var vehicles_drivers , remote_driver_vehicles ;
48168: GO 48170
48170: DISABLE
48171: LD_INT 0
48173: PPUSH
48174: PPUSH
48175: PPUSH
48176: PPUSH
48177: PPUSH
48178: PPUSH
48179: PPUSH
48180: PPUSH
48181: PPUSH
48182: PPUSH
48183: PPUSH
48184: PPUSH
48185: PPUSH
48186: PPUSH
48187: PPUSH
48188: PPUSH
48189: PPUSH
48190: PPUSH
48191: PPUSH
48192: PPUSH
48193: PPUSH
48194: PPUSH
48195: PPUSH
48196: PPUSH
48197: PPUSH
48198: PPUSH
48199: PPUSH
48200: PPUSH
// begin vehicles_drivers = [ ] ;
48201: LD_ADDR_VAR 0 27
48205: PUSH
48206: EMPTY
48207: ST_TO_ADDR
// remote_driver_vehicles = [ [ ] , [ ] , [ ] ] ;
48208: LD_ADDR_VAR 0 28
48212: PUSH
48213: EMPTY
48214: PUSH
48215: EMPTY
48216: PUSH
48217: EMPTY
48218: PUSH
48219: EMPTY
48220: LIST
48221: LIST
48222: LIST
48223: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
48224: LD_INT 35
48226: PPUSH
48227: CALL_OW 67
// for base in ai_bases do
48231: LD_ADDR_VAR 0 12
48235: PUSH
48236: LD_EXP 25
48240: PUSH
48241: FOR_IN
48242: IFFALSE 56895
// begin side = GetBaseSide ( base ) ;
48244: LD_ADDR_VAR 0 1
48248: PUSH
48249: LD_VAR 0 12
48253: PPUSH
48254: CALL 27103 0 1
48258: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
48259: LD_ADDR_VAR 0 13
48263: PUSH
48264: LD_VAR 0 12
48268: PPUSH
48269: CALL 27032 0 1
48273: ST_TO_ADDR
// under_attack = BaseUnderAttack ( base , - 1 ) ;
48274: LD_ADDR_VAR 0 9
48278: PUSH
48279: LD_VAR 0 12
48283: PPUSH
48284: LD_INT 1
48286: NEG
48287: PPUSH
48288: CALL 46094 0 2
48292: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] do
48293: LD_ADDR_VAR 0 2
48297: PUSH
48298: LD_EXP 49
48302: PUSH
48303: LD_VAR 0 12
48307: ARRAY
48308: PUSH
48309: LD_EXP 83
48313: PUSH
48314: LD_VAR 0 12
48318: ARRAY
48319: ADD
48320: PUSH
48321: LD_EXP 84
48325: PUSH
48326: LD_VAR 0 12
48330: ARRAY
48331: ADD
48332: PUSH
48333: FOR_IN
48334: IFFALSE 48429
// if vehicles_drivers >= i then
48336: LD_VAR 0 27
48340: PUSH
48341: LD_VAR 0 2
48345: GREATEREQUAL
48346: IFFALSE 48427
// if vehicles_drivers [ i ] > 0 then
48348: LD_VAR 0 27
48352: PUSH
48353: LD_VAR 0 2
48357: ARRAY
48358: PUSH
48359: LD_INT 0
48361: GREATER
48362: IFFALSE 48427
// if IsInUnit ( vehicles_drivers [ i ] ) = i or IsDead ( vehicles_drivers [ i ] ) then
48364: LD_VAR 0 27
48368: PUSH
48369: LD_VAR 0 2
48373: ARRAY
48374: PPUSH
48375: CALL_OW 310
48379: PUSH
48380: LD_VAR 0 2
48384: EQUAL
48385: PUSH
48386: LD_VAR 0 27
48390: PUSH
48391: LD_VAR 0 2
48395: ARRAY
48396: PPUSH
48397: CALL_OW 301
48401: OR
48402: IFFALSE 48427
// vehicles_drivers = Replace ( vehicles_drivers , i , 0 ) ;
48404: LD_ADDR_VAR 0 27
48408: PUSH
48409: LD_VAR 0 27
48413: PPUSH
48414: LD_VAR 0 2
48418: PPUSH
48419: LD_INT 0
48421: PPUSH
48422: CALL_OW 1
48426: ST_TO_ADDR
48427: GO 48333
48429: POP
48430: POP
// if ai_crane [ base ] > 0 and GetControl ( ai_crane [ base ] ) = control_manual and ai_crane_driver [ base ] = 0 and ai_mechanics_defend [ base ] > 0 then
48431: LD_EXP 68
48435: PUSH
48436: LD_VAR 0 12
48440: ARRAY
48441: PUSH
48442: LD_INT 0
48444: GREATER
48445: PUSH
48446: LD_EXP 68
48450: PUSH
48451: LD_VAR 0 12
48455: ARRAY
48456: PPUSH
48457: CALL_OW 263
48461: PUSH
48462: LD_INT 1
48464: EQUAL
48465: AND
48466: PUSH
48467: LD_EXP 72
48471: PUSH
48472: LD_VAR 0 12
48476: ARRAY
48477: PUSH
48478: LD_INT 0
48480: EQUAL
48481: AND
48482: PUSH
48483: LD_EXP 29
48487: PUSH
48488: LD_VAR 0 12
48492: ARRAY
48493: PUSH
48494: LD_INT 0
48496: GREATER
48497: AND
48498: IFFALSE 48649
// begin ai_crane_driver = Replace ( ai_crane_driver , base , FindBestCraneDriver ( base ) ) ;
48500: LD_ADDR_EXP 72
48504: PUSH
48505: LD_EXP 72
48509: PPUSH
48510: LD_VAR 0 12
48514: PPUSH
48515: LD_VAR 0 12
48519: PPUSH
48520: CALL 57215 0 1
48524: PPUSH
48525: CALL_OW 1
48529: ST_TO_ADDR
// for i = 1 to remote_driver_vehicles [ base ] + 0 do
48530: LD_ADDR_VAR 0 2
48534: PUSH
48535: DOUBLE
48536: LD_INT 1
48538: DEC
48539: ST_TO_ADDR
48540: LD_VAR 0 28
48544: PUSH
48545: LD_VAR 0 12
48549: ARRAY
48550: PUSH
48551: LD_INT 0
48553: PLUS
48554: PUSH
48555: FOR_TO
48556: IFFALSE 48647
// if remote_driver_vehicles [ base ] [ i ] [ 1 ] = ai_crane_driver [ base ] then
48558: LD_VAR 0 28
48562: PUSH
48563: LD_VAR 0 12
48567: ARRAY
48568: PUSH
48569: LD_VAR 0 2
48573: ARRAY
48574: PUSH
48575: LD_INT 1
48577: ARRAY
48578: PUSH
48579: LD_EXP 72
48583: PUSH
48584: LD_VAR 0 12
48588: ARRAY
48589: EQUAL
48590: IFFALSE 48645
// begin temp_list = Delete ( remote_driver_vehicles [ base ] , i ) ;
48592: LD_ADDR_VAR 0 4
48596: PUSH
48597: LD_VAR 0 28
48601: PUSH
48602: LD_VAR 0 12
48606: ARRAY
48607: PPUSH
48608: LD_VAR 0 2
48612: PPUSH
48613: CALL_OW 3
48617: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list ) ;
48618: LD_ADDR_VAR 0 28
48622: PUSH
48623: LD_VAR 0 28
48627: PPUSH
48628: LD_VAR 0 12
48632: PPUSH
48633: LD_VAR 0 4
48637: PPUSH
48638: CALL_OW 1
48642: ST_TO_ADDR
// break ;
48643: GO 48647
// end ;
48645: GO 48555
48647: POP
48648: POP
// end ; mechanics_list = UnitFilter ( ai_mechanics_defend [ base ] diff ( ai_heal_these_humans [ base ] ^ ai_crane_driver [ base ] ) , [ f_not , [ f_driving ] ] ) ;
48649: LD_ADDR_VAR 0 3
48653: PUSH
48654: LD_EXP 29
48658: PUSH
48659: LD_VAR 0 12
48663: ARRAY
48664: PUSH
48665: LD_EXP 57
48669: PUSH
48670: LD_VAR 0 12
48674: ARRAY
48675: PUSH
48676: LD_EXP 72
48680: PUSH
48681: LD_VAR 0 12
48685: ARRAY
48686: ADD
48687: DIFF
48688: PPUSH
48689: LD_INT 3
48691: PUSH
48692: LD_INT 55
48694: PUSH
48695: EMPTY
48696: LIST
48697: PUSH
48698: EMPTY
48699: LIST
48700: LIST
48701: PPUSH
48702: CALL_OW 72
48706: ST_TO_ADDR
// if ai_crane_driver [ base ] > 0 and not IsOk ( ai_crane [ base ] ) then
48707: LD_EXP 72
48711: PUSH
48712: LD_VAR 0 12
48716: ARRAY
48717: PUSH
48718: LD_INT 0
48720: GREATER
48721: PUSH
48722: LD_EXP 68
48726: PUSH
48727: LD_VAR 0 12
48731: ARRAY
48732: PPUSH
48733: CALL_OW 302
48737: NOT
48738: AND
48739: IFFALSE 48763
// mechanics_list = mechanics_list ^ ai_crane_driver [ base ] ;
48741: LD_ADDR_VAR 0 3
48745: PUSH
48746: LD_VAR 0 3
48750: PUSH
48751: LD_EXP 72
48755: PUSH
48756: LD_VAR 0 12
48760: ARRAY
48761: ADD
48762: ST_TO_ADDR
// remote_mechanics = [ ] ;
48763: LD_ADDR_VAR 0 15
48767: PUSH
48768: EMPTY
48769: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
48770: LD_ADDR_VAR 0 4
48774: PUSH
48775: LD_EXP 57
48779: PUSH
48780: LD_VAR 0 12
48784: ARRAY
48785: ST_TO_ADDR
// i = 1 ;
48786: LD_ADDR_VAR 0 2
48790: PUSH
48791: LD_INT 1
48793: ST_TO_ADDR
// while i <= mechanics_list do
48794: LD_VAR 0 2
48798: PUSH
48799: LD_VAR 0 3
48803: LESSEQUAL
48804: IFFALSE 48887
// begin if GetLives ( mechanics_list [ i ] ) <= 900 then
48806: LD_VAR 0 3
48810: PUSH
48811: LD_VAR 0 2
48815: ARRAY
48816: PPUSH
48817: CALL_OW 256
48821: PUSH
48822: LD_INT 900
48824: LESSEQUAL
48825: IFFALSE 48871
// begin temp_list = temp_list ^ mechanics_list [ i ] ;
48827: LD_ADDR_VAR 0 4
48831: PUSH
48832: LD_VAR 0 4
48836: PUSH
48837: LD_VAR 0 3
48841: PUSH
48842: LD_VAR 0 2
48846: ARRAY
48847: ADD
48848: ST_TO_ADDR
// mechanics_list = Delete ( mechanics_list , i ) ;
48849: LD_ADDR_VAR 0 3
48853: PUSH
48854: LD_VAR 0 3
48858: PPUSH
48859: LD_VAR 0 2
48863: PPUSH
48864: CALL_OW 3
48868: ST_TO_ADDR
// continue ;
48869: GO 48794
// end ; i = i + 1 ;
48871: LD_ADDR_VAR 0 2
48875: PUSH
48876: LD_VAR 0 2
48880: PUSH
48881: LD_INT 1
48883: PLUS
48884: ST_TO_ADDR
// end ;
48885: GO 48794
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
48887: LD_ADDR_EXP 57
48891: PUSH
48892: LD_EXP 57
48896: PPUSH
48897: LD_VAR 0 12
48901: PPUSH
48902: LD_VAR 0 4
48906: PPUSH
48907: CALL_OW 1
48911: ST_TO_ADDR
// if ai_control_tower [ base ] > 0 or ai_control_tower_vehicles [ base ] > 0 then
48912: LD_EXP 45
48916: PUSH
48917: LD_VAR 0 12
48921: ARRAY
48922: PUSH
48923: LD_INT 0
48925: GREATER
48926: PUSH
48927: LD_EXP 75
48931: PUSH
48932: LD_VAR 0 12
48936: ARRAY
48937: PUSH
48938: LD_INT 0
48940: GREATER
48941: OR
48942: IFFALSE 50615
// begin temp_list = remote_driver_vehicles [ base ] ;
48944: LD_ADDR_VAR 0 4
48948: PUSH
48949: LD_VAR 0 28
48953: PUSH
48954: LD_VAR 0 12
48958: ARRAY
48959: ST_TO_ADDR
// vehicles_list = [ ] ;
48960: LD_ADDR_VAR 0 7
48964: PUSH
48965: EMPTY
48966: ST_TO_ADDR
// i = 1 ;
48967: LD_ADDR_VAR 0 2
48971: PUSH
48972: LD_INT 1
48974: ST_TO_ADDR
// while i <= temp_list do
48975: LD_VAR 0 2
48979: PUSH
48980: LD_VAR 0 4
48984: LESSEQUAL
48985: IFFALSE 49257
// begin if IsDead ( temp_list [ i ] [ 1 ] ) then
48987: LD_VAR 0 4
48991: PUSH
48992: LD_VAR 0 2
48996: ARRAY
48997: PUSH
48998: LD_INT 1
49000: ARRAY
49001: PPUSH
49002: CALL_OW 301
49006: IFFALSE 49032
// begin temp_list = Delete ( temp_list , i ) ;
49008: LD_ADDR_VAR 0 4
49012: PUSH
49013: LD_VAR 0 4
49017: PPUSH
49018: LD_VAR 0 2
49022: PPUSH
49023: CALL_OW 3
49027: ST_TO_ADDR
// continue ;
49028: GO 48975
// end else
49030: GO 49215
// begin temp_list_3 = temp_list [ i ] [ 2 ] ;
49032: LD_ADDR_VAR 0 5
49036: PUSH
49037: LD_VAR 0 4
49041: PUSH
49042: LD_VAR 0 2
49046: ARRAY
49047: PUSH
49048: LD_INT 2
49050: ARRAY
49051: ST_TO_ADDR
// k = 1 ;
49052: LD_ADDR_VAR 0 11
49056: PUSH
49057: LD_INT 1
49059: ST_TO_ADDR
// while k <= temp_list_3 do
49060: LD_VAR 0 11
49064: PUSH
49065: LD_VAR 0 5
49069: LESSEQUAL
49070: IFFALSE 49127
// begin if IsDead ( temp_list_3 [ k ] ) then
49072: LD_VAR 0 5
49076: PUSH
49077: LD_VAR 0 11
49081: ARRAY
49082: PPUSH
49083: CALL_OW 301
49087: IFFALSE 49111
// begin temp_list_3 = Delete ( temp_list_3 , k ) ;
49089: LD_ADDR_VAR 0 5
49093: PUSH
49094: LD_VAR 0 5
49098: PPUSH
49099: LD_VAR 0 11
49103: PPUSH
49104: CALL_OW 3
49108: ST_TO_ADDR
// continue ;
49109: GO 49060
// end ; k = k + 1 ;
49111: LD_ADDR_VAR 0 11
49115: PUSH
49116: LD_VAR 0 11
49120: PUSH
49121: LD_INT 1
49123: PLUS
49124: ST_TO_ADDR
// end ;
49125: GO 49060
// if temp_list_3 > 0 then
49127: LD_VAR 0 5
49131: PUSH
49132: LD_INT 0
49134: GREATER
49135: IFFALSE 49193
// begin temp_list_2 = Replace ( temp_list [ i ] , 2 , temp_list_3 ) ;
49137: LD_ADDR_VAR 0 14
49141: PUSH
49142: LD_VAR 0 4
49146: PUSH
49147: LD_VAR 0 2
49151: ARRAY
49152: PPUSH
49153: LD_INT 2
49155: PPUSH
49156: LD_VAR 0 5
49160: PPUSH
49161: CALL_OW 1
49165: ST_TO_ADDR
// temp_list = Replace ( temp_list , i , temp_list_2 ) ;
49166: LD_ADDR_VAR 0 4
49170: PUSH
49171: LD_VAR 0 4
49175: PPUSH
49176: LD_VAR 0 2
49180: PPUSH
49181: LD_VAR 0 14
49185: PPUSH
49186: CALL_OW 1
49190: ST_TO_ADDR
// end else
49191: GO 49215
// begin temp_list = Delete ( temp_list , i ) ;
49193: LD_ADDR_VAR 0 4
49197: PUSH
49198: LD_VAR 0 4
49202: PPUSH
49203: LD_VAR 0 2
49207: PPUSH
49208: CALL_OW 3
49212: ST_TO_ADDR
// continue ;
49213: GO 48975
// end ; end ; vehicles_list = vehicles_list ^ temp_list [ i ] [ 2 ] ;
49215: LD_ADDR_VAR 0 7
49219: PUSH
49220: LD_VAR 0 7
49224: PUSH
49225: LD_VAR 0 4
49229: PUSH
49230: LD_VAR 0 2
49234: ARRAY
49235: PUSH
49236: LD_INT 2
49238: ARRAY
49239: ADD
49240: ST_TO_ADDR
// i = i + 1 ;
49241: LD_ADDR_VAR 0 2
49245: PUSH
49246: LD_VAR 0 2
49250: PUSH
49251: LD_INT 1
49253: PLUS
49254: ST_TO_ADDR
// end ;
49255: GO 48975
// num_control_stations = ai_control_tower_vehicles [ base ] + ( ai_control_tower [ base ] > 0 ) * 3 ;
49257: LD_ADDR_VAR 0 21
49261: PUSH
49262: LD_EXP 75
49266: PUSH
49267: LD_VAR 0 12
49271: ARRAY
49272: PUSH
49273: LD_EXP 45
49277: PUSH
49278: LD_VAR 0 12
49282: ARRAY
49283: PUSH
49284: LD_INT 0
49286: GREATER
49287: PUSH
49288: LD_INT 3
49290: MUL
49291: PLUS
49292: ST_TO_ADDR
// while temp_list > num_control_stations do
49293: LD_VAR 0 4
49297: PUSH
49298: LD_VAR 0 21
49302: GREATER
49303: IFFALSE 49361
// begin vehicles_list = vehicles_list diff temp_list [ temp_list + 0 ] [ 2 ] ;
49305: LD_ADDR_VAR 0 7
49309: PUSH
49310: LD_VAR 0 7
49314: PUSH
49315: LD_VAR 0 4
49319: PUSH
49320: LD_VAR 0 4
49324: PUSH
49325: LD_INT 0
49327: PLUS
49328: ARRAY
49329: PUSH
49330: LD_INT 2
49332: ARRAY
49333: DIFF
49334: ST_TO_ADDR
// temp_list = Delete ( temp_list , temp_list + 0 ) ;
49335: LD_ADDR_VAR 0 4
49339: PUSH
49340: LD_VAR 0 4
49344: PPUSH
49345: LD_VAR 0 4
49349: PUSH
49350: LD_INT 0
49352: PLUS
49353: PPUSH
49354: CALL_OW 3
49358: ST_TO_ADDR
// end ;
49359: GO 49293
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list ) ;
49361: LD_ADDR_VAR 0 28
49365: PUSH
49366: LD_VAR 0 28
49370: PPUSH
49371: LD_VAR 0 12
49375: PPUSH
49376: LD_VAR 0 4
49380: PPUSH
49381: CALL_OW 1
49385: ST_TO_ADDR
// temp_list = UnitFilter ( ( ai_vehicles_defend [ base ] ^ ( ai_cargo_bay [ base ] diff 0 ) ^ ( ai_crane [ base ] diff 0 ) ^ ai_exported_units [ base ] ^ ai_units_to_export [ base ] ^ ai_vehicles_attack [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] ) diff vehicles_list , [ f_control , control_remote ] ) ;
49386: LD_ADDR_VAR 0 4
49390: PUSH
49391: LD_EXP 49
49395: PUSH
49396: LD_VAR 0 12
49400: ARRAY
49401: PUSH
49402: LD_EXP 65
49406: PUSH
49407: LD_VAR 0 12
49411: ARRAY
49412: PUSH
49413: LD_INT 0
49415: DIFF
49416: ADD
49417: PUSH
49418: LD_EXP 68
49422: PUSH
49423: LD_VAR 0 12
49427: ARRAY
49428: PUSH
49429: LD_INT 0
49431: DIFF
49432: ADD
49433: PUSH
49434: LD_EXP 81
49438: PUSH
49439: LD_VAR 0 12
49443: ARRAY
49444: ADD
49445: PUSH
49446: LD_EXP 80
49450: PUSH
49451: LD_VAR 0 12
49455: ARRAY
49456: ADD
49457: PUSH
49458: LD_EXP 50
49462: PUSH
49463: LD_VAR 0 12
49467: ARRAY
49468: ADD
49469: PUSH
49470: LD_EXP 83
49474: PUSH
49475: LD_VAR 0 12
49479: ARRAY
49480: ADD
49481: PUSH
49482: LD_EXP 84
49486: PUSH
49487: LD_VAR 0 12
49491: ARRAY
49492: ADD
49493: PUSH
49494: LD_VAR 0 7
49498: DIFF
49499: PPUSH
49500: LD_INT 33
49502: PUSH
49503: LD_INT 2
49505: PUSH
49506: EMPTY
49507: LIST
49508: LIST
49509: PPUSH
49510: CALL_OW 72
49514: ST_TO_ADDR
// if temp_list > 0 then
49515: LD_VAR 0 4
49519: PUSH
49520: LD_INT 0
49522: GREATER
49523: IFFALSE 50271
// begin temp_list_3 = mechanics_list ;
49525: LD_ADDR_VAR 0 5
49529: PUSH
49530: LD_VAR 0 3
49534: ST_TO_ADDR
// for i in remote_driver_vehicles [ base ] do
49535: LD_ADDR_VAR 0 2
49539: PUSH
49540: LD_VAR 0 28
49544: PUSH
49545: LD_VAR 0 12
49549: ARRAY
49550: PUSH
49551: FOR_IN
49552: IFFALSE 49576
// temp_list_3 = temp_list_3 diff i [ 1 ] ;
49554: LD_ADDR_VAR 0 5
49558: PUSH
49559: LD_VAR 0 5
49563: PUSH
49564: LD_VAR 0 2
49568: PUSH
49569: LD_INT 1
49571: ARRAY
49572: DIFF
49573: ST_TO_ADDR
49574: GO 49551
49576: POP
49577: POP
// if temp_list_3 > 0 then
49578: LD_VAR 0 5
49582: PUSH
49583: LD_INT 0
49585: GREATER
49586: IFFALSE 49612
// temp_list_3 = temp_list_3 diff FindMinSkill ( temp_list_3 , skill_mechanical ) ;
49588: LD_ADDR_VAR 0 5
49592: PUSH
49593: LD_VAR 0 5
49597: PUSH
49598: LD_VAR 0 5
49602: PPUSH
49603: LD_INT 3
49605: PPUSH
49606: CALL_OW 443
49610: DIFF
49611: ST_TO_ADDR
// i = 1 ;
49612: LD_ADDR_VAR 0 2
49616: PUSH
49617: LD_INT 1
49619: ST_TO_ADDR
// while i <= temp_list do
49620: LD_VAR 0 2
49624: PUSH
49625: LD_VAR 0 4
49629: LESSEQUAL
49630: IFFALSE 50271
// begin a = 1 ;
49632: LD_ADDR_VAR 0 18
49636: PUSH
49637: LD_INT 1
49639: ST_TO_ADDR
// while a <= remote_driver_vehicles [ base ] do
49640: LD_VAR 0 18
49644: PUSH
49645: LD_VAR 0 28
49649: PUSH
49650: LD_VAR 0 12
49654: ARRAY
49655: LESSEQUAL
49656: IFFALSE 49736
// begin if remote_driver_vehicles [ base ] [ a ] [ 2 ] < 2 and GetSkill ( remote_driver_vehicles [ base ] [ a ] [ 1 ] , skill_mechanical ) >= 2 then
49658: LD_VAR 0 28
49662: PUSH
49663: LD_VAR 0 12
49667: ARRAY
49668: PUSH
49669: LD_VAR 0 18
49673: ARRAY
49674: PUSH
49675: LD_INT 2
49677: ARRAY
49678: PUSH
49679: LD_INT 2
49681: LESS
49682: PUSH
49683: LD_VAR 0 28
49687: PUSH
49688: LD_VAR 0 12
49692: ARRAY
49693: PUSH
49694: LD_VAR 0 18
49698: ARRAY
49699: PUSH
49700: LD_INT 1
49702: ARRAY
49703: PPUSH
49704: LD_INT 3
49706: PPUSH
49707: CALL_OW 259
49711: PUSH
49712: LD_INT 2
49714: GREATEREQUAL
49715: AND
49716: IFFALSE 49720
// break ;
49718: GO 49736
// a = a + 1 ;
49720: LD_ADDR_VAR 0 18
49724: PUSH
49725: LD_VAR 0 18
49729: PUSH
49730: LD_INT 1
49732: PLUS
49733: ST_TO_ADDR
// end ;
49734: GO 49640
// if a > remote_driver_vehicles [ base ] then
49736: LD_VAR 0 18
49740: PUSH
49741: LD_VAR 0 28
49745: PUSH
49746: LD_VAR 0 12
49750: ARRAY
49751: GREATER
49752: IFFALSE 50126
// begin if remote_driver_vehicles [ base ] >= num_control_stations then
49754: LD_VAR 0 28
49758: PUSH
49759: LD_VAR 0 12
49763: ARRAY
49764: PUSH
49765: LD_VAR 0 21
49769: GREATEREQUAL
49770: IFFALSE 49779
// begin temp_list_3 = [ ] ;
49772: LD_ADDR_VAR 0 5
49776: PUSH
49777: EMPTY
49778: ST_TO_ADDR
// end ; if temp_list_3 > 0 then
49779: LD_VAR 0 5
49783: PUSH
49784: LD_INT 0
49786: GREATER
49787: IFFALSE 49907
// begin temp_unit = FindMaxSkill ( temp_list_3 , skill_mechanical ) ;
49789: LD_ADDR_VAR 0 6
49793: PUSH
49794: LD_VAR 0 5
49798: PPUSH
49799: LD_INT 3
49801: PPUSH
49802: CALL_OW 433
49806: ST_TO_ADDR
// temp_list_3 = temp_list_3 diff temp_unit ;
49807: LD_ADDR_VAR 0 5
49811: PUSH
49812: LD_VAR 0 5
49816: PUSH
49817: LD_VAR 0 6
49821: DIFF
49822: ST_TO_ADDR
// temp_list_2 = remote_driver_vehicles [ base ] ^ [ [ temp_unit , [ temp_list [ i ] ] ] ] ;
49823: LD_ADDR_VAR 0 14
49827: PUSH
49828: LD_VAR 0 28
49832: PUSH
49833: LD_VAR 0 12
49837: ARRAY
49838: PUSH
49839: LD_VAR 0 6
49843: PUSH
49844: LD_VAR 0 4
49848: PUSH
49849: LD_VAR 0 2
49853: ARRAY
49854: PUSH
49855: EMPTY
49856: LIST
49857: PUSH
49858: EMPTY
49859: LIST
49860: LIST
49861: PUSH
49862: EMPTY
49863: LIST
49864: ADD
49865: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list_2 ) ;
49866: LD_ADDR_VAR 0 28
49870: PUSH
49871: LD_VAR 0 28
49875: PPUSH
49876: LD_VAR 0 12
49880: PPUSH
49881: LD_VAR 0 14
49885: PPUSH
49886: CALL_OW 1
49890: ST_TO_ADDR
// i = i + 1 ;
49891: LD_ADDR_VAR 0 2
49895: PUSH
49896: LD_VAR 0 2
49900: PUSH
49901: LD_INT 1
49903: PLUS
49904: ST_TO_ADDR
// continue ;
49905: GO 49620
// end ; temp_list_4 = [ ] ;
49907: LD_ADDR_VAR 0 19
49911: PUSH
49912: EMPTY
49913: ST_TO_ADDR
// for a in remote_driver_vehicles [ base ] do
49914: LD_ADDR_VAR 0 18
49918: PUSH
49919: LD_VAR 0 28
49923: PUSH
49924: LD_VAR 0 12
49928: ARRAY
49929: PUSH
49930: FOR_IN
49931: IFFALSE 49982
// if GetSkill ( a [ 1 ] , skill_mechanical ) > a [ 2 ] then
49933: LD_VAR 0 18
49937: PUSH
49938: LD_INT 1
49940: ARRAY
49941: PPUSH
49942: LD_INT 3
49944: PPUSH
49945: CALL_OW 259
49949: PUSH
49950: LD_VAR 0 18
49954: PUSH
49955: LD_INT 2
49957: ARRAY
49958: GREATER
49959: IFFALSE 49980
// temp_list_4 = temp_list_4 ^ [ a ] ;
49961: LD_ADDR_VAR 0 19
49965: PUSH
49966: LD_VAR 0 19
49970: PUSH
49971: LD_VAR 0 18
49975: PUSH
49976: EMPTY
49977: LIST
49978: ADD
49979: ST_TO_ADDR
49980: GO 49930
49982: POP
49983: POP
// if temp_list_4 = 0 then
49984: LD_VAR 0 19
49988: PUSH
49989: LD_INT 0
49991: EQUAL
49992: IFFALSE 49996
// break ;
49994: GO 50271
// temp_list_2 = [ ] ;
49996: LD_ADDR_VAR 0 14
50000: PUSH
50001: EMPTY
50002: ST_TO_ADDR
// for a in temp_list_4 do
50003: LD_ADDR_VAR 0 18
50007: PUSH
50008: LD_VAR 0 19
50012: PUSH
50013: FOR_IN
50014: IFFALSE 50042
// temp_list_2 = temp_list_2 ^ ( a [ 2 ] + 0 ) ;
50016: LD_ADDR_VAR 0 14
50020: PUSH
50021: LD_VAR 0 14
50025: PUSH
50026: LD_VAR 0 18
50030: PUSH
50031: LD_INT 2
50033: ARRAY
50034: PUSH
50035: LD_INT 0
50037: PLUS
50038: ADD
50039: ST_TO_ADDR
50040: GO 50013
50042: POP
50043: POP
// temp_list_2 = WorstFromListByList ( temp_list_4 , temp_list_2 ) ;
50044: LD_ADDR_VAR 0 14
50048: PUSH
50049: LD_VAR 0 19
50053: PPUSH
50054: LD_VAR 0 14
50058: PPUSH
50059: CALL_OW 78
50063: ST_TO_ADDR
// for a = 1 to remote_driver_vehicles [ base ] do
50064: LD_ADDR_VAR 0 18
50068: PUSH
50069: DOUBLE
50070: LD_INT 1
50072: DEC
50073: ST_TO_ADDR
50074: LD_VAR 0 28
50078: PUSH
50079: LD_VAR 0 12
50083: ARRAY
50084: PUSH
50085: FOR_TO
50086: IFFALSE 50124
// if remote_driver_vehicles [ base ] [ a ] [ 1 ] = temp_list_2 [ 1 ] then
50088: LD_VAR 0 28
50092: PUSH
50093: LD_VAR 0 12
50097: ARRAY
50098: PUSH
50099: LD_VAR 0 18
50103: ARRAY
50104: PUSH
50105: LD_INT 1
50107: ARRAY
50108: PUSH
50109: LD_VAR 0 14
50113: PUSH
50114: LD_INT 1
50116: ARRAY
50117: EQUAL
50118: IFFALSE 50122
// break ;
50120: GO 50124
50122: GO 50085
50124: POP
50125: POP
// end ; temp_list_2 = remote_driver_vehicles [ base ] [ a ] [ 2 ] ^ temp_list [ i ] ;
50126: LD_ADDR_VAR 0 14
50130: PUSH
50131: LD_VAR 0 28
50135: PUSH
50136: LD_VAR 0 12
50140: ARRAY
50141: PUSH
50142: LD_VAR 0 18
50146: ARRAY
50147: PUSH
50148: LD_INT 2
50150: ARRAY
50151: PUSH
50152: LD_VAR 0 4
50156: PUSH
50157: LD_VAR 0 2
50161: ARRAY
50162: ADD
50163: ST_TO_ADDR
// temp_list_2 = Replace ( remote_driver_vehicles [ base ] [ a ] , 2 , temp_list_2 ) ;
50164: LD_ADDR_VAR 0 14
50168: PUSH
50169: LD_VAR 0 28
50173: PUSH
50174: LD_VAR 0 12
50178: ARRAY
50179: PUSH
50180: LD_VAR 0 18
50184: ARRAY
50185: PPUSH
50186: LD_INT 2
50188: PPUSH
50189: LD_VAR 0 14
50193: PPUSH
50194: CALL_OW 1
50198: ST_TO_ADDR
// temp_list_2 = Replace ( remote_driver_vehicles [ base ] , a , temp_list_2 ) ;
50199: LD_ADDR_VAR 0 14
50203: PUSH
50204: LD_VAR 0 28
50208: PUSH
50209: LD_VAR 0 12
50213: ARRAY
50214: PPUSH
50215: LD_VAR 0 18
50219: PPUSH
50220: LD_VAR 0 14
50224: PPUSH
50225: CALL_OW 1
50229: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list_2 ) ;
50230: LD_ADDR_VAR 0 28
50234: PUSH
50235: LD_VAR 0 28
50239: PPUSH
50240: LD_VAR 0 12
50244: PPUSH
50245: LD_VAR 0 14
50249: PPUSH
50250: CALL_OW 1
50254: ST_TO_ADDR
// i = i + 1 ;
50255: LD_ADDR_VAR 0 2
50259: PUSH
50260: LD_VAR 0 2
50264: PUSH
50265: LD_INT 1
50267: PLUS
50268: ST_TO_ADDR
// end ;
50269: GO 49620
// end ; for i in remote_driver_vehicles [ base ] do
50271: LD_ADDR_VAR 0 2
50275: PUSH
50276: LD_VAR 0 28
50280: PUSH
50281: LD_VAR 0 12
50285: ARRAY
50286: PUSH
50287: FOR_IN
50288: IFFALSE 50312
// remote_mechanics = remote_mechanics ^ i [ 1 ] ;
50290: LD_ADDR_VAR 0 15
50294: PUSH
50295: LD_VAR 0 15
50299: PUSH
50300: LD_VAR 0 2
50304: PUSH
50305: LD_INT 1
50307: ARRAY
50308: ADD
50309: ST_TO_ADDR
50310: GO 50287
50312: POP
50313: POP
// mechanics_list = mechanics_list diff remote_mechanics ;
50314: LD_ADDR_VAR 0 3
50318: PUSH
50319: LD_VAR 0 3
50323: PUSH
50324: LD_VAR 0 15
50328: DIFF
50329: ST_TO_ADDR
// remote_mechanics = remote_mechanics diff ai_heal_these_humans [ base ] ;
50330: LD_ADDR_VAR 0 15
50334: PUSH
50335: LD_VAR 0 15
50339: PUSH
50340: LD_EXP 57
50344: PUSH
50345: LD_VAR 0 12
50349: ARRAY
50350: DIFF
50351: ST_TO_ADDR
// if mechanics_list = 0 and remote_driver_vehicles [ base ] > 0 then
50352: LD_VAR 0 3
50356: PUSH
50357: LD_INT 0
50359: EQUAL
50360: PUSH
50361: LD_VAR 0 28
50365: PUSH
50366: LD_VAR 0 12
50370: ARRAY
50371: PUSH
50372: LD_INT 0
50374: GREATER
50375: AND
50376: IFFALSE 50613
// begin n = 0 ;
50378: LD_ADDR_VAR 0 17
50382: PUSH
50383: LD_INT 0
50385: ST_TO_ADDR
// a = 9999 ;
50386: LD_ADDR_VAR 0 18
50390: PUSH
50391: LD_INT 9999
50393: ST_TO_ADDR
// for i = 1 to ( remote_driver_vehicles [ base ] + 0 ) do
50394: LD_ADDR_VAR 0 2
50398: PUSH
50399: DOUBLE
50400: LD_INT 1
50402: DEC
50403: ST_TO_ADDR
50404: LD_VAR 0 28
50408: PUSH
50409: LD_VAR 0 12
50413: ARRAY
50414: PUSH
50415: LD_INT 0
50417: PLUS
50418: PUSH
50419: FOR_TO
50420: IFFALSE 50496
// begin if remote_driver_vehicles [ base ] [ i ] [ 2 ] + 0 < a then
50422: LD_VAR 0 28
50426: PUSH
50427: LD_VAR 0 12
50431: ARRAY
50432: PUSH
50433: LD_VAR 0 2
50437: ARRAY
50438: PUSH
50439: LD_INT 2
50441: ARRAY
50442: PUSH
50443: LD_INT 0
50445: PLUS
50446: PUSH
50447: LD_VAR 0 18
50451: LESS
50452: IFFALSE 50494
// begin a = remote_driver_vehicles [ base ] [ i ] [ 2 ] + 0 ;
50454: LD_ADDR_VAR 0 18
50458: PUSH
50459: LD_VAR 0 28
50463: PUSH
50464: LD_VAR 0 12
50468: ARRAY
50469: PUSH
50470: LD_VAR 0 2
50474: ARRAY
50475: PUSH
50476: LD_INT 2
50478: ARRAY
50479: PUSH
50480: LD_INT 0
50482: PLUS
50483: ST_TO_ADDR
// n = i ;
50484: LD_ADDR_VAR 0 17
50488: PUSH
50489: LD_VAR 0 2
50493: ST_TO_ADDR
// end ; end ;
50494: GO 50419
50496: POP
50497: POP
// mechanics_list = mechanics_list ^ remote_driver_vehicles [ base ] [ n ] [ 1 ] ;
50498: LD_ADDR_VAR 0 3
50502: PUSH
50503: LD_VAR 0 3
50507: PUSH
50508: LD_VAR 0 28
50512: PUSH
50513: LD_VAR 0 12
50517: ARRAY
50518: PUSH
50519: LD_VAR 0 17
50523: ARRAY
50524: PUSH
50525: LD_INT 1
50527: ARRAY
50528: ADD
50529: ST_TO_ADDR
// remote_mechanics = remote_mechanics diff remote_driver_vehicles [ base ] [ n ] [ 1 ] ;
50530: LD_ADDR_VAR 0 15
50534: PUSH
50535: LD_VAR 0 15
50539: PUSH
50540: LD_VAR 0 28
50544: PUSH
50545: LD_VAR 0 12
50549: ARRAY
50550: PUSH
50551: LD_VAR 0 17
50555: ARRAY
50556: PUSH
50557: LD_INT 1
50559: ARRAY
50560: DIFF
50561: ST_TO_ADDR
// temp_list_2 = Delete ( remote_driver_vehicles [ base ] , n ) ;
50562: LD_ADDR_VAR 0 14
50566: PUSH
50567: LD_VAR 0 28
50571: PUSH
50572: LD_VAR 0 12
50576: ARRAY
50577: PPUSH
50578: LD_VAR 0 17
50582: PPUSH
50583: CALL_OW 3
50587: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list_2 ) ;
50588: LD_ADDR_VAR 0 28
50592: PUSH
50593: LD_VAR 0 28
50597: PPUSH
50598: LD_VAR 0 12
50602: PPUSH
50603: LD_VAR 0 14
50607: PPUSH
50608: CALL_OW 1
50612: ST_TO_ADDR
// end ; end else
50613: GO 50637
// begin remote_driver_vehicles = Replace ( remote_driver_vehicles , base , [ ] ) ;
50615: LD_ADDR_VAR 0 28
50619: PUSH
50620: LD_VAR 0 28
50624: PPUSH
50625: LD_VAR 0 12
50629: PPUSH
50630: EMPTY
50631: PPUSH
50632: CALL_OW 1
50636: ST_TO_ADDR
// end ; temp_list = [ ] ;
50637: LD_ADDR_VAR 0 4
50641: PUSH
50642: EMPTY
50643: ST_TO_ADDR
// for i in ai_vehicles_being_repaired [ base ] do
50644: LD_ADDR_VAR 0 2
50648: PUSH
50649: LD_EXP 52
50653: PUSH
50654: LD_VAR 0 12
50658: ARRAY
50659: PUSH
50660: FOR_IN
50661: IFFALSE 50696
// if GetLives ( i ) < 1000 then
50663: LD_VAR 0 2
50667: PPUSH
50668: CALL_OW 256
50672: PUSH
50673: LD_INT 1000
50675: LESS
50676: IFFALSE 50694
// temp_list = temp_list ^ i ;
50678: LD_ADDR_VAR 0 4
50682: PUSH
50683: LD_VAR 0 4
50687: PUSH
50688: LD_VAR 0 2
50692: ADD
50693: ST_TO_ADDR
50694: GO 50660
50696: POP
50697: POP
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
50698: LD_ADDR_EXP 52
50702: PUSH
50703: LD_EXP 52
50707: PPUSH
50708: LD_VAR 0 12
50712: PPUSH
50713: LD_VAR 0 4
50717: PPUSH
50718: CALL_OW 1
50722: ST_TO_ADDR
// temp_list = [ ] ;
50723: LD_ADDR_VAR 0 4
50727: PUSH
50728: EMPTY
50729: ST_TO_ADDR
// for i in ai_retreating_vehicles_defend [ base ] do
50730: LD_ADDR_VAR 0 2
50734: PUSH
50735: LD_EXP 51
50739: PUSH
50740: LD_VAR 0 12
50744: ARRAY
50745: PUSH
50746: FOR_IN
50747: IFFALSE 50782
// if GetLives ( i ) < 1000 then
50749: LD_VAR 0 2
50753: PPUSH
50754: CALL_OW 256
50758: PUSH
50759: LD_INT 1000
50761: LESS
50762: IFFALSE 50780
// temp_list = temp_list ^ i ;
50764: LD_ADDR_VAR 0 4
50768: PUSH
50769: LD_VAR 0 4
50773: PUSH
50774: LD_VAR 0 2
50778: ADD
50779: ST_TO_ADDR
50780: GO 50746
50782: POP
50783: POP
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
50784: LD_ADDR_EXP 51
50788: PUSH
50789: LD_EXP 51
50793: PPUSH
50794: LD_VAR 0 12
50798: PPUSH
50799: LD_VAR 0 4
50803: PPUSH
50804: CALL_OW 1
50808: ST_TO_ADDR
// temp_list = ai_retreating_vehicles_defend [ base ] ;
50809: LD_ADDR_VAR 0 4
50813: PUSH
50814: LD_EXP 51
50818: PUSH
50819: LD_VAR 0 12
50823: ARRAY
50824: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] diff ai_retreating_vehicles_defend [ base ] do
50825: LD_ADDR_VAR 0 2
50829: PUSH
50830: LD_EXP 49
50834: PUSH
50835: LD_VAR 0 12
50839: ARRAY
50840: PUSH
50841: LD_EXP 51
50845: PUSH
50846: LD_VAR 0 12
50850: ARRAY
50851: DIFF
50852: PUSH
50853: FOR_IN
50854: IFFALSE 50889
// if GetLives ( i ) <= 250 then
50856: LD_VAR 0 2
50860: PPUSH
50861: CALL_OW 256
50865: PUSH
50866: LD_INT 250
50868: LESSEQUAL
50869: IFFALSE 50887
// temp_list = temp_list ^ i ;
50871: LD_ADDR_VAR 0 4
50875: PUSH
50876: LD_VAR 0 4
50880: PUSH
50881: LD_VAR 0 2
50885: ADD
50886: ST_TO_ADDR
50887: GO 50853
50889: POP
50890: POP
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
50891: LD_ADDR_EXP 51
50895: PUSH
50896: LD_EXP 51
50900: PPUSH
50901: LD_VAR 0 12
50905: PPUSH
50906: LD_VAR 0 4
50910: PPUSH
50911: CALL_OW 1
50915: ST_TO_ADDR
// if not under_attack then
50916: LD_VAR 0 9
50920: NOT
50921: IFFALSE 51059
// begin temp_list = [ ] ;
50923: LD_ADDR_VAR 0 4
50927: PUSH
50928: EMPTY
50929: ST_TO_ADDR
// for i in ai_refuel_vehicles_list [ base ] diff ( ai_retreating_vehicles_defend [ base ] ^ ai_vehicles_being_repaired [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) do
50930: LD_ADDR_VAR 0 2
50934: PUSH
50935: LD_EXP 53
50939: PUSH
50940: LD_VAR 0 12
50944: ARRAY
50945: PUSH
50946: LD_EXP 51
50950: PUSH
50951: LD_VAR 0 12
50955: ARRAY
50956: PUSH
50957: LD_EXP 52
50961: PUSH
50962: LD_VAR 0 12
50966: ARRAY
50967: ADD
50968: PUSH
50969: LD_EXP 60
50973: PUSH
50974: LD_VAR 0 12
50978: ARRAY
50979: ADD
50980: PUSH
50981: LD_EXP 61
50985: PUSH
50986: LD_VAR 0 12
50990: ARRAY
50991: ADD
50992: DIFF
50993: PUSH
50994: FOR_IN
50995: IFFALSE 51030
// if GetFuel ( i ) < 95 then
50997: LD_VAR 0 2
51001: PPUSH
51002: CALL_OW 261
51006: PUSH
51007: LD_INT 95
51009: LESS
51010: IFFALSE 51028
// temp_list = temp_list ^ i ;
51012: LD_ADDR_VAR 0 4
51016: PUSH
51017: LD_VAR 0 4
51021: PUSH
51022: LD_VAR 0 2
51026: ADD
51027: ST_TO_ADDR
51028: GO 50994
51030: POP
51031: POP
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
51032: LD_ADDR_EXP 53
51036: PUSH
51037: LD_EXP 53
51041: PPUSH
51042: LD_VAR 0 12
51046: PPUSH
51047: LD_VAR 0 4
51051: PPUSH
51052: CALL_OW 1
51056: ST_TO_ADDR
// end else
51057: GO 51081
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , [ ] ) ;
51059: LD_ADDR_EXP 53
51063: PUSH
51064: LD_EXP 53
51068: PPUSH
51069: LD_VAR 0 12
51073: PPUSH
51074: EMPTY
51075: PPUSH
51076: CALL_OW 1
51080: ST_TO_ADDR
// vehicles_to_consider = ai_vehicles_defend [ base ] ^ ai_control_tower_vehicles [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] ;
51081: LD_ADDR_VAR 0 23
51085: PUSH
51086: LD_EXP 49
51090: PUSH
51091: LD_VAR 0 12
51095: ARRAY
51096: PUSH
51097: LD_EXP 75
51101: PUSH
51102: LD_VAR 0 12
51106: ARRAY
51107: ADD
51108: PUSH
51109: LD_EXP 83
51113: PUSH
51114: LD_VAR 0 12
51118: ARRAY
51119: ADD
51120: PUSH
51121: LD_EXP 84
51125: PUSH
51126: LD_VAR 0 12
51130: ARRAY
51131: ADD
51132: ST_TO_ADDR
// if under_attack then
51133: LD_VAR 0 9
51137: IFFALSE 51839
// begin vehicles_list = ai_vehicles_defend [ base ] diff ( ai_refuel_vehicles_list [ base ] ^ ai_retreating_vehicles_defend [ base ] ^ ai_vehicles_being_repaired [ base ] ^ ai_vehicles_having_been_moved [ base ] ^ ai_vehicle_being_moved [ base ] ) ;
51139: LD_ADDR_VAR 0 7
51143: PUSH
51144: LD_EXP 49
51148: PUSH
51149: LD_VAR 0 12
51153: ARRAY
51154: PUSH
51155: LD_EXP 53
51159: PUSH
51160: LD_VAR 0 12
51164: ARRAY
51165: PUSH
51166: LD_EXP 51
51170: PUSH
51171: LD_VAR 0 12
51175: ARRAY
51176: ADD
51177: PUSH
51178: LD_EXP 52
51182: PUSH
51183: LD_VAR 0 12
51187: ARRAY
51188: ADD
51189: PUSH
51190: LD_EXP 61
51194: PUSH
51195: LD_VAR 0 12
51199: ARRAY
51200: ADD
51201: PUSH
51202: LD_EXP 60
51206: PUSH
51207: LD_VAR 0 12
51211: ARRAY
51212: ADD
51213: DIFF
51214: ST_TO_ADDR
// temp_list = UnitFilter ( vehicles_list , [ [ f_control , control_manual ] , [ f_ok ] , [ f_empty ] , [ f_inarea , area ] ] ) ;
51215: LD_ADDR_VAR 0 4
51219: PUSH
51220: LD_VAR 0 7
51224: PPUSH
51225: LD_INT 33
51227: PUSH
51228: LD_INT 1
51230: PUSH
51231: EMPTY
51232: LIST
51233: LIST
51234: PUSH
51235: LD_INT 50
51237: PUSH
51238: EMPTY
51239: LIST
51240: PUSH
51241: LD_INT 58
51243: PUSH
51244: EMPTY
51245: LIST
51246: PUSH
51247: LD_INT 95
51249: PUSH
51250: LD_VAR 0 13
51254: PUSH
51255: EMPTY
51256: LIST
51257: LIST
51258: PUSH
51259: EMPTY
51260: LIST
51261: LIST
51262: LIST
51263: LIST
51264: PPUSH
51265: CALL_OW 72
51269: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
51270: LD_ADDR_VAR 0 4
51274: PUSH
51275: LD_VAR 0 4
51279: PPUSH
51280: LD_VAR 0 3
51284: PPUSH
51285: LD_VAR 0 27
51289: PPUSH
51290: CALL 56904 0 3
51294: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
51295: LD_ADDR_VAR 0 3
51299: PUSH
51300: LD_VAR 0 4
51304: PUSH
51305: LD_INT 1
51307: ARRAY
51308: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
51309: LD_ADDR_VAR 0 27
51313: PUSH
51314: LD_VAR 0 4
51318: PUSH
51319: LD_INT 2
51321: ARRAY
51322: ST_TO_ADDR
// temp_list = DangerousUnits ( ListFilterNearArea ( FilterAllUnits ( [ f_enemy , side ] ) , area ) ) ;
51323: LD_ADDR_VAR 0 4
51327: PUSH
51328: LD_INT 81
51330: PUSH
51331: LD_VAR 0 1
51335: PUSH
51336: EMPTY
51337: LIST
51338: LIST
51339: PPUSH
51340: CALL_OW 69
51344: PPUSH
51345: LD_VAR 0 13
51349: PPUSH
51350: CALL 46678 0 2
51354: PPUSH
51355: CALL 69894 0 1
51359: ST_TO_ADDR
// case base of 1 :
51360: LD_VAR 0 12
51364: PUSH
51365: LD_INT 1
51367: DOUBLE
51368: EQUAL
51369: IFTRUE 51373
51371: GO 51408
51373: POP
// temp_list = UnitFilter ( temp_list , [ f_not , [ f_inarea , ru_no_vehicle_defend_area ] ] ) ; 2 :
51374: LD_ADDR_VAR 0 4
51378: PUSH
51379: LD_VAR 0 4
51383: PPUSH
51384: LD_INT 3
51386: PUSH
51387: LD_INT 95
51389: PUSH
51390: LD_INT 30
51392: PUSH
51393: EMPTY
51394: LIST
51395: LIST
51396: PUSH
51397: EMPTY
51398: LIST
51399: LIST
51400: PPUSH
51401: CALL_OW 72
51405: ST_TO_ADDR
51406: GO 51463
51408: LD_INT 2
51410: DOUBLE
51411: EQUAL
51412: IFTRUE 51416
51414: GO 51419
51416: POP
// begin end ; 3 :
51417: GO 51463
51419: LD_INT 3
51421: DOUBLE
51422: EQUAL
51423: IFTRUE 51427
51425: GO 51462
51427: POP
// temp_list = UnitFilter ( temp_list , [ f_not , [ f_inarea , ar_no_vehicle_defend_area ] ] ) ; end ;
51428: LD_ADDR_VAR 0 4
51432: PUSH
51433: LD_VAR 0 4
51437: PPUSH
51438: LD_INT 3
51440: PUSH
51441: LD_INT 95
51443: PUSH
51444: LD_INT 18
51446: PUSH
51447: EMPTY
51448: LIST
51449: LIST
51450: PUSH
51451: EMPTY
51452: LIST
51453: LIST
51454: PPUSH
51455: CALL_OW 72
51459: ST_TO_ADDR
51460: GO 51463
51462: POP
// if temp_list > 0 then
51463: LD_VAR 0 4
51467: PUSH
51468: LD_INT 0
51470: GREATER
51471: IFFALSE 51694
// begin if base = 1 then
51473: LD_VAR 0 12
51477: PUSH
51478: LD_INT 1
51480: EQUAL
51481: IFFALSE 51655
// begin n = 99999 ;
51483: LD_ADDR_VAR 0 17
51487: PUSH
51488: LD_INT 99999
51490: ST_TO_ADDR
// for i in temp_list do
51491: LD_ADDR_VAR 0 2
51495: PUSH
51496: LD_VAR 0 4
51500: PUSH
51501: FOR_IN
51502: IFFALSE 51560
// begin k = GetY ( i ) ;
51504: LD_ADDR_VAR 0 11
51508: PUSH
51509: LD_VAR 0 2
51513: PPUSH
51514: CALL_OW 251
51518: ST_TO_ADDR
// if not IsInArea ( i , area ) and k < n then
51519: LD_VAR 0 2
51523: PPUSH
51524: LD_VAR 0 13
51528: PPUSH
51529: CALL_OW 308
51533: NOT
51534: PUSH
51535: LD_VAR 0 11
51539: PUSH
51540: LD_VAR 0 17
51544: LESS
51545: AND
51546: IFFALSE 51558
// begin n = k ;
51548: LD_ADDR_VAR 0 17
51552: PUSH
51553: LD_VAR 0 11
51557: ST_TO_ADDR
// end ; end ;
51558: GO 51501
51560: POP
51561: POP
// if n < 37 then
51562: LD_VAR 0 17
51566: PUSH
51567: LD_INT 37
51569: LESS
51570: IFFALSE 51589
// ComAgressiveMove ( vehicles_list , 35 , 38 ) else
51572: LD_VAR 0 7
51576: PPUSH
51577: LD_INT 35
51579: PPUSH
51580: LD_INT 38
51582: PPUSH
51583: CALL_OW 114
51587: GO 51653
// if n < 53 then
51589: LD_VAR 0 17
51593: PUSH
51594: LD_INT 53
51596: LESS
51597: IFFALSE 51616
// ComAgressiveMove ( vehicles_List , 45 , 47 ) else
51599: LD_VAR 0 7
51603: PPUSH
51604: LD_INT 45
51606: PPUSH
51607: LD_INT 47
51609: PPUSH
51610: CALL_OW 114
51614: GO 51653
// ComAgressiveMove ( vehicles_list , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
51616: LD_VAR 0 7
51620: PPUSH
51621: LD_VAR 0 4
51625: PUSH
51626: LD_INT 1
51628: ARRAY
51629: PPUSH
51630: CALL_OW 250
51634: PPUSH
51635: LD_VAR 0 4
51639: PUSH
51640: LD_INT 1
51642: ARRAY
51643: PPUSH
51644: CALL_OW 251
51648: PPUSH
51649: CALL_OW 114
// end else
51653: GO 51692
// ComAgressiveMove ( vehicles_list , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) end else
51655: LD_VAR 0 7
51659: PPUSH
51660: LD_VAR 0 4
51664: PUSH
51665: LD_INT 1
51667: ARRAY
51668: PPUSH
51669: CALL_OW 250
51673: PPUSH
51674: LD_VAR 0 4
51678: PUSH
51679: LD_INT 1
51681: ARRAY
51682: PPUSH
51683: CALL_OW 251
51687: PPUSH
51688: CALL_OW 114
51692: GO 51837
// begin temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , area ] ] ) ;
51694: LD_ADDR_VAR 0 4
51698: PUSH
51699: LD_INT 81
51701: PUSH
51702: LD_VAR 0 1
51706: PUSH
51707: EMPTY
51708: LIST
51709: LIST
51710: PUSH
51711: LD_INT 95
51713: PUSH
51714: LD_VAR 0 13
51718: PUSH
51719: EMPTY
51720: LIST
51721: LIST
51722: PUSH
51723: EMPTY
51724: LIST
51725: LIST
51726: PPUSH
51727: CALL_OW 69
51731: ST_TO_ADDR
// if base = 1 then
51732: LD_VAR 0 12
51736: PUSH
51737: LD_INT 1
51739: EQUAL
51740: IFFALSE 51784
// temp_list = temp_list ^ FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , ru_attack_buildings_area ] ] ) ;
51742: LD_ADDR_VAR 0 4
51746: PUSH
51747: LD_VAR 0 4
51751: PUSH
51752: LD_INT 81
51754: PUSH
51755: LD_VAR 0 1
51759: PUSH
51760: EMPTY
51761: LIST
51762: LIST
51763: PUSH
51764: LD_INT 95
51766: PUSH
51767: LD_INT 32
51769: PUSH
51770: EMPTY
51771: LIST
51772: LIST
51773: PUSH
51774: EMPTY
51775: LIST
51776: LIST
51777: PPUSH
51778: CALL_OW 69
51782: ADD
51783: ST_TO_ADDR
// if temp_list > 0 then
51784: LD_VAR 0 4
51788: PUSH
51789: LD_INT 0
51791: GREATER
51792: IFFALSE 51837
// begin temp_list_2 = DangerousUnits ( temp_list ) ;
51794: LD_ADDR_VAR 0 14
51798: PUSH
51799: LD_VAR 0 4
51803: PPUSH
51804: CALL 69894 0 1
51808: ST_TO_ADDR
// if temp_list_2 = 0 then
51809: LD_VAR 0 14
51813: PUSH
51814: LD_INT 0
51816: EQUAL
51817: IFFALSE 51837
// ComAttackUnit ( vehicles_list , temp_list [ 1 ] ) ;
51819: LD_VAR 0 7
51823: PPUSH
51824: LD_VAR 0 4
51828: PUSH
51829: LD_INT 1
51831: ARRAY
51832: PPUSH
51833: CALL_OW 115
// end ; end ; end else
51837: GO 52418
// begin if IsOk ( ai_depot [ base ] ) then
51839: LD_EXP 35
51843: PUSH
51844: LD_VAR 0 12
51848: ARRAY
51849: PPUSH
51850: CALL_OW 302
51854: IFFALSE 52263
// begin temp_list = ai_refuel_vehicles_list [ base ] ;
51856: LD_ADDR_VAR 0 4
51860: PUSH
51861: LD_EXP 53
51865: PUSH
51866: LD_VAR 0 12
51870: ARRAY
51871: ST_TO_ADDR
// for i in vehicles_to_consider diff ai_refuel_vehicles_list [ base ] do
51872: LD_ADDR_VAR 0 2
51876: PUSH
51877: LD_VAR 0 23
51881: PUSH
51882: LD_EXP 53
51886: PUSH
51887: LD_VAR 0 12
51891: ARRAY
51892: DIFF
51893: PUSH
51894: FOR_IN
51895: IFFALSE 51945
// if GetFuel ( i ) < 70 and GetEngine ( i ) = engine_combustion then
51897: LD_VAR 0 2
51901: PPUSH
51902: CALL_OW 261
51906: PUSH
51907: LD_INT 70
51909: LESS
51910: PUSH
51911: LD_VAR 0 2
51915: PPUSH
51916: CALL_OW 262
51920: PUSH
51921: LD_INT 1
51923: EQUAL
51924: AND
51925: IFFALSE 51943
// temp_list = temp_list ^ i ;
51927: LD_ADDR_VAR 0 4
51931: PUSH
51932: LD_VAR 0 4
51936: PUSH
51937: LD_VAR 0 2
51941: ADD
51942: ST_TO_ADDR
51943: GO 51894
51945: POP
51946: POP
// temp_list = temp_list diff ( ai_retreating_vehicles_defend [ base ] ^ ai_vehicles_being_repaired [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) ;
51947: LD_ADDR_VAR 0 4
51951: PUSH
51952: LD_VAR 0 4
51956: PUSH
51957: LD_EXP 51
51961: PUSH
51962: LD_VAR 0 12
51966: ARRAY
51967: PUSH
51968: LD_EXP 52
51972: PUSH
51973: LD_VAR 0 12
51977: ARRAY
51978: ADD
51979: PUSH
51980: LD_EXP 60
51984: PUSH
51985: LD_VAR 0 12
51989: ARRAY
51990: ADD
51991: PUSH
51992: LD_EXP 61
51996: PUSH
51997: LD_VAR 0 12
52001: ARRAY
52002: ADD
52003: DIFF
52004: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
52005: LD_ADDR_EXP 53
52009: PUSH
52010: LD_EXP 53
52014: PPUSH
52015: LD_VAR 0 12
52019: PPUSH
52020: LD_VAR 0 4
52024: PPUSH
52025: CALL_OW 1
52029: ST_TO_ADDR
// temp_list = UnitFilter ( ai_refuel_vehicles_list [ base ] , [ [ f_control , control_manual ] , [ f_empty ] , [ f_ok ] ] ) diff ai_control_tower_vehicles [ base ] ;
52030: LD_ADDR_VAR 0 4
52034: PUSH
52035: LD_EXP 53
52039: PUSH
52040: LD_VAR 0 12
52044: ARRAY
52045: PPUSH
52046: LD_INT 33
52048: PUSH
52049: LD_INT 1
52051: PUSH
52052: EMPTY
52053: LIST
52054: LIST
52055: PUSH
52056: LD_INT 58
52058: PUSH
52059: EMPTY
52060: LIST
52061: PUSH
52062: LD_INT 50
52064: PUSH
52065: EMPTY
52066: LIST
52067: PUSH
52068: EMPTY
52069: LIST
52070: LIST
52071: LIST
52072: PPUSH
52073: CALL_OW 72
52077: PUSH
52078: LD_EXP 75
52082: PUSH
52083: LD_VAR 0 12
52087: ARRAY
52088: DIFF
52089: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
52090: LD_ADDR_VAR 0 4
52094: PUSH
52095: LD_VAR 0 4
52099: PPUSH
52100: LD_VAR 0 3
52104: PPUSH
52105: LD_VAR 0 27
52109: PPUSH
52110: CALL 56904 0 3
52114: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
52115: LD_ADDR_VAR 0 3
52119: PUSH
52120: LD_VAR 0 4
52124: PUSH
52125: LD_INT 1
52127: ARRAY
52128: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
52129: LD_ADDR_VAR 0 27
52133: PUSH
52134: LD_VAR 0 4
52138: PUSH
52139: LD_INT 2
52141: ARRAY
52142: ST_TO_ADDR
// for i in ai_refuel_vehicles_list [ base ] do
52143: LD_ADDR_VAR 0 2
52147: PUSH
52148: LD_EXP 53
52152: PUSH
52153: LD_VAR 0 12
52157: ARRAY
52158: PUSH
52159: FOR_IN
52160: IFFALSE 52261
// begin if IsInArea ( i , area ) then
52162: LD_VAR 0 2
52166: PPUSH
52167: LD_VAR 0 13
52171: PPUSH
52172: CALL_OW 308
52176: IFFALSE 52220
// begin ComMoveUnit ( i , ai_depot [ base ] ) ;
52178: LD_VAR 0 2
52182: PPUSH
52183: LD_EXP 35
52187: PUSH
52188: LD_VAR 0 12
52192: ARRAY
52193: PPUSH
52194: CALL_OW 112
// AddComRefuel ( i , ai_depot [ base ] ) ;
52198: LD_VAR 0 2
52202: PPUSH
52203: LD_EXP 35
52207: PUSH
52208: LD_VAR 0 12
52212: ARRAY
52213: PPUSH
52214: CALL_OW 210
// end else
52218: GO 52259
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
52220: LD_VAR 0 2
52224: PPUSH
52225: LD_EXP 55
52229: PUSH
52230: LD_VAR 0 12
52234: ARRAY
52235: PUSH
52236: LD_INT 1
52238: ARRAY
52239: PPUSH
52240: LD_EXP 55
52244: PUSH
52245: LD_VAR 0 12
52249: ARRAY
52250: PUSH
52251: LD_INT 2
52253: ARRAY
52254: PPUSH
52255: CALL_OW 114
// end ;
52259: GO 52159
52261: POP
52262: POP
// end ; for i in UnitFilter ( vehicles_to_consider , [ f_not , [ f_control , control_manual ] ] ) diff ( ai_refuel_vehicles_list [ base ] ^ ai_retreating_vehicles_defend [ base ] ^ ai_vehicles_being_repaired [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) do
52263: LD_ADDR_VAR 0 2
52267: PUSH
52268: LD_VAR 0 23
52272: PPUSH
52273: LD_INT 3
52275: PUSH
52276: LD_INT 33
52278: PUSH
52279: LD_INT 1
52281: PUSH
52282: EMPTY
52283: LIST
52284: LIST
52285: PUSH
52286: EMPTY
52287: LIST
52288: LIST
52289: PPUSH
52290: CALL_OW 72
52294: PUSH
52295: LD_EXP 53
52299: PUSH
52300: LD_VAR 0 12
52304: ARRAY
52305: PUSH
52306: LD_EXP 51
52310: PUSH
52311: LD_VAR 0 12
52315: ARRAY
52316: ADD
52317: PUSH
52318: LD_EXP 52
52322: PUSH
52323: LD_VAR 0 12
52327: ARRAY
52328: ADD
52329: PUSH
52330: LD_EXP 60
52334: PUSH
52335: LD_VAR 0 12
52339: ARRAY
52340: ADD
52341: PUSH
52342: LD_EXP 61
52346: PUSH
52347: LD_VAR 0 12
52351: ARRAY
52352: ADD
52353: DIFF
52354: PUSH
52355: FOR_IN
52356: IFFALSE 52416
// if not IsInArea ( i , area ) then
52358: LD_VAR 0 2
52362: PPUSH
52363: LD_VAR 0 13
52367: PPUSH
52368: CALL_OW 308
52372: NOT
52373: IFFALSE 52414
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
52375: LD_VAR 0 2
52379: PPUSH
52380: LD_EXP 55
52384: PUSH
52385: LD_VAR 0 12
52389: ARRAY
52390: PUSH
52391: LD_INT 1
52393: ARRAY
52394: PPUSH
52395: LD_EXP 55
52399: PUSH
52400: LD_VAR 0 12
52404: ARRAY
52405: PUSH
52406: LD_INT 2
52408: ARRAY
52409: PPUSH
52410: CALL_OW 114
52414: GO 52355
52416: POP
52417: POP
// end ; free_parking_spots = [ ] ;
52418: LD_ADDR_VAR 0 10
52422: PUSH
52423: EMPTY
52424: ST_TO_ADDR
// parked_vehicles = [ ] ;
52425: LD_ADDR_VAR 0 16
52429: PUSH
52430: EMPTY
52431: ST_TO_ADDR
// vehicles_allowed_to_park = UnitFilter ( vehicles_to_consider , [ f_control , control_manual ] ) ;
52432: LD_ADDR_VAR 0 24
52436: PUSH
52437: LD_VAR 0 23
52441: PPUSH
52442: LD_INT 33
52444: PUSH
52445: LD_INT 1
52447: PUSH
52448: EMPTY
52449: LIST
52450: LIST
52451: PPUSH
52452: CALL_OW 72
52456: ST_TO_ADDR
// case ( vehicles_to_consider diff vehicles_allowed_to_park ) + 0 of 0 .. 1 :
52457: LD_VAR 0 23
52461: PUSH
52462: LD_VAR 0 24
52466: DIFF
52467: PUSH
52468: LD_INT 0
52470: PLUS
52471: PUSH
52472: LD_INT 0
52474: DOUBLE
52475: GREATEREQUAL
52476: IFFALSE 52484
52478: LD_INT 1
52480: DOUBLE
52481: LESSEQUAL
52482: IFTRUE 52486
52484: GO 52497
52486: POP
// human_pullback_hex_max_dist = 4 ; 2 :
52487: LD_ADDR_VAR 0 25
52491: PUSH
52492: LD_INT 4
52494: ST_TO_ADDR
52495: GO 52550
52497: LD_INT 2
52499: DOUBLE
52500: EQUAL
52501: IFTRUE 52505
52503: GO 52516
52505: POP
// human_pullback_hex_max_dist = 5 ; 3 .. 4 :
52506: LD_ADDR_VAR 0 25
52510: PUSH
52511: LD_INT 5
52513: ST_TO_ADDR
52514: GO 52550
52516: LD_INT 3
52518: DOUBLE
52519: GREATEREQUAL
52520: IFFALSE 52528
52522: LD_INT 4
52524: DOUBLE
52525: LESSEQUAL
52526: IFTRUE 52530
52528: GO 52541
52530: POP
// human_pullback_hex_max_dist = 6 ; else
52531: LD_ADDR_VAR 0 25
52535: PUSH
52536: LD_INT 6
52538: ST_TO_ADDR
52539: GO 52550
52541: POP
// human_pullback_hex_max_dist = 7 ; end ;
52542: LD_ADDR_VAR 0 25
52546: PUSH
52547: LD_INT 7
52549: ST_TO_ADDR
// for i in ai_vehicle_pullback_hexes [ base ] do
52550: LD_ADDR_VAR 0 2
52554: PUSH
52555: LD_EXP 54
52559: PUSH
52560: LD_VAR 0 12
52564: ARRAY
52565: PUSH
52566: FOR_IN
52567: IFFALSE 52753
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
52569: LD_ADDR_VAR 0 6
52573: PUSH
52574: LD_VAR 0 2
52578: PUSH
52579: LD_INT 1
52581: ARRAY
52582: PPUSH
52583: LD_VAR 0 2
52587: PUSH
52588: LD_INT 2
52590: ARRAY
52591: PPUSH
52592: CALL_OW 428
52596: ST_TO_ADDR
// if temp_unit in vehicles_allowed_to_park then
52597: LD_VAR 0 6
52601: PUSH
52602: LD_VAR 0 24
52606: IN
52607: IFFALSE 52627
// begin parked_vehicles = parked_vehicles ^ temp_unit ;
52609: LD_ADDR_VAR 0 16
52613: PUSH
52614: LD_VAR 0 16
52618: PUSH
52619: LD_VAR 0 6
52623: ADD
52624: ST_TO_ADDR
// end else
52625: GO 52751
// if temp_unit = 0 or not ( GetType ( temp_unit ) = unit_building or ( GetType ( temp_unit ) = unit_vehicle and ( ( GetControl ( temp_unit ) = control_manual and IsDrivenBy ( temp_unit ) = 0 ) or ( GetControl ( temp_unit ) = control_remote and IsControledBy ( temp_unit ) = 0 ) ) ) ) then
52627: LD_VAR 0 6
52631: PUSH
52632: LD_INT 0
52634: EQUAL
52635: PUSH
52636: LD_VAR 0 6
52640: PPUSH
52641: CALL_OW 247
52645: PUSH
52646: LD_INT 3
52648: EQUAL
52649: PUSH
52650: LD_VAR 0 6
52654: PPUSH
52655: CALL_OW 247
52659: PUSH
52660: LD_INT 2
52662: EQUAL
52663: PUSH
52664: LD_VAR 0 6
52668: PPUSH
52669: CALL_OW 263
52673: PUSH
52674: LD_INT 1
52676: EQUAL
52677: PUSH
52678: LD_VAR 0 6
52682: PPUSH
52683: CALL_OW 311
52687: PUSH
52688: LD_INT 0
52690: EQUAL
52691: AND
52692: PUSH
52693: LD_VAR 0 6
52697: PPUSH
52698: CALL_OW 263
52702: PUSH
52703: LD_INT 2
52705: EQUAL
52706: PUSH
52707: LD_VAR 0 6
52711: PPUSH
52712: CALL_OW 312
52716: PUSH
52717: LD_INT 0
52719: EQUAL
52720: AND
52721: OR
52722: AND
52723: OR
52724: NOT
52725: OR
52726: IFFALSE 52751
// free_parking_spots = Insert ( free_parking_spots , 1 , i ) ;
52728: LD_ADDR_VAR 0 10
52732: PUSH
52733: LD_VAR 0 10
52737: PPUSH
52738: LD_INT 1
52740: PPUSH
52741: LD_VAR 0 2
52745: PPUSH
52746: CALL_OW 2
52750: ST_TO_ADDR
// end ;
52751: GO 52566
52753: POP
52754: POP
// if under_attack then
52755: LD_VAR 0 9
52759: IFFALSE 53346
// begin vehicles_to_park = ( ai_vehicles_being_repaired [ base ] union ai_retreating_vehicles_defend [ base ] ) isect vehicles_allowed_to_park ;
52761: LD_ADDR_VAR 0 26
52765: PUSH
52766: LD_EXP 52
52770: PUSH
52771: LD_VAR 0 12
52775: ARRAY
52776: PUSH
52777: LD_EXP 51
52781: PUSH
52782: LD_VAR 0 12
52786: ARRAY
52787: UNION
52788: PUSH
52789: LD_VAR 0 24
52793: ISECT
52794: ST_TO_ADDR
// vehicles_to_park = UnitFilter ( vehicles_to_park diff parked_vehicles , [ f_ok ] ) ;
52795: LD_ADDR_VAR 0 26
52799: PUSH
52800: LD_VAR 0 26
52804: PUSH
52805: LD_VAR 0 16
52809: DIFF
52810: PPUSH
52811: LD_INT 50
52813: PUSH
52814: EMPTY
52815: LIST
52816: PPUSH
52817: CALL_OW 72
52821: ST_TO_ADDR
// vehicles_to_park = vehicles_to_park union UnitFilter ( ai_control_tower_vehicles [ base ] diff ( parked_vehicles ^ ai_refuel_vehicles_list [ base ] ^ ai_vehicles_having_been_moved [ base ] ^ ai_vehicle_being_moved [ base ] ) , [ f_ok ] ) ;
52822: LD_ADDR_VAR 0 26
52826: PUSH
52827: LD_VAR 0 26
52831: PUSH
52832: LD_EXP 75
52836: PUSH
52837: LD_VAR 0 12
52841: ARRAY
52842: PUSH
52843: LD_VAR 0 16
52847: PUSH
52848: LD_EXP 53
52852: PUSH
52853: LD_VAR 0 12
52857: ARRAY
52858: ADD
52859: PUSH
52860: LD_EXP 61
52864: PUSH
52865: LD_VAR 0 12
52869: ARRAY
52870: ADD
52871: PUSH
52872: LD_EXP 60
52876: PUSH
52877: LD_VAR 0 12
52881: ARRAY
52882: ADD
52883: DIFF
52884: PPUSH
52885: LD_INT 50
52887: PUSH
52888: EMPTY
52889: LIST
52890: PPUSH
52891: CALL_OW 72
52895: UNION
52896: ST_TO_ADDR
// temp_list = [ ] ;
52897: LD_ADDR_VAR 0 4
52901: PUSH
52902: EMPTY
52903: ST_TO_ADDR
// temp_list_3 = ( ai_vehicles_being_repaired [ base ] union ai_retreating_vehicles_defend [ base ] ) isect parked_vehicles ;
52904: LD_ADDR_VAR 0 5
52908: PUSH
52909: LD_EXP 52
52913: PUSH
52914: LD_VAR 0 12
52918: ARRAY
52919: PUSH
52920: LD_EXP 51
52924: PUSH
52925: LD_VAR 0 12
52929: ARRAY
52930: UNION
52931: PUSH
52932: LD_VAR 0 16
52936: ISECT
52937: ST_TO_ADDR
// temp_list_3 = UnitFilter ( temp_list_3 , [ f_ok ] ) diff ai_control_tower_vehicles [ base ] ;
52938: LD_ADDR_VAR 0 5
52942: PUSH
52943: LD_VAR 0 5
52947: PPUSH
52948: LD_INT 50
52950: PUSH
52951: EMPTY
52952: LIST
52953: PPUSH
52954: CALL_OW 72
52958: PUSH
52959: LD_EXP 75
52963: PUSH
52964: LD_VAR 0 12
52968: ARRAY
52969: DIFF
52970: ST_TO_ADDR
// for i in temp_list_3 do
52971: LD_ADDR_VAR 0 2
52975: PUSH
52976: LD_VAR 0 5
52980: PUSH
52981: FOR_IN
52982: IFFALSE 53039
// if UnitShoot ( i ) > 0 then
52984: LD_VAR 0 2
52988: PPUSH
52989: CALL_OW 504
52993: PUSH
52994: LD_INT 0
52996: GREATER
52997: IFFALSE 53037
// if GetSide ( UnitShoot ( i ) ) <> side then
52999: LD_VAR 0 2
53003: PPUSH
53004: CALL_OW 504
53008: PPUSH
53009: CALL_OW 255
53013: PUSH
53014: LD_VAR 0 1
53018: NONEQUAL
53019: IFFALSE 53037
// temp_list = temp_list ^ i ;
53021: LD_ADDR_VAR 0 4
53025: PUSH
53026: LD_VAR 0 4
53030: PUSH
53031: LD_VAR 0 2
53035: ADD
53036: ST_TO_ADDR
53037: GO 52981
53039: POP
53040: POP
// for i in ai_mechanics_defend [ base ] do
53041: LD_ADDR_VAR 0 2
53045: PUSH
53046: LD_EXP 29
53050: PUSH
53051: LD_VAR 0 12
53055: ARRAY
53056: PUSH
53057: FOR_IN
53058: IFFALSE 53136
// if UnitShoot ( i ) > 0 then
53060: LD_VAR 0 2
53064: PPUSH
53065: CALL_OW 504
53069: PUSH
53070: LD_INT 0
53072: GREATER
53073: IFFALSE 53134
// if GetSide ( UnitShoot ( i ) ) <> side then
53075: LD_VAR 0 2
53079: PPUSH
53080: CALL_OW 504
53084: PPUSH
53085: CALL_OW 255
53089: PUSH
53090: LD_VAR 0 1
53094: NONEQUAL
53095: IFFALSE 53134
// temp_list = temp_list union UnitFilter ( temp_list_3 , [ f_dist , i , 5 ] ) ;
53097: LD_ADDR_VAR 0 4
53101: PUSH
53102: LD_VAR 0 4
53106: PUSH
53107: LD_VAR 0 5
53111: PPUSH
53112: LD_INT 91
53114: PUSH
53115: LD_VAR 0 2
53119: PUSH
53120: LD_INT 5
53122: PUSH
53123: EMPTY
53124: LIST
53125: LIST
53126: LIST
53127: PPUSH
53128: CALL_OW 72
53132: UNION
53133: ST_TO_ADDR
53134: GO 53057
53136: POP
53137: POP
// for i in temp_list_3 diff temp_list do
53138: LD_ADDR_VAR 0 2
53142: PUSH
53143: LD_VAR 0 5
53147: PUSH
53148: LD_VAR 0 4
53152: DIFF
53153: PUSH
53154: FOR_IN
53155: IFFALSE 53236
// begin if not i in ( ai_refuel_vehicles_list [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) then
53157: LD_VAR 0 2
53161: PUSH
53162: LD_EXP 53
53166: PUSH
53167: LD_VAR 0 12
53171: ARRAY
53172: PUSH
53173: LD_EXP 60
53177: PUSH
53178: LD_VAR 0 12
53182: ARRAY
53183: ADD
53184: PUSH
53185: LD_EXP 61
53189: PUSH
53190: LD_VAR 0 12
53194: ARRAY
53195: ADD
53196: IN
53197: NOT
53198: IFFALSE 53234
// begin k = IsDrivenBy ( i ) ;
53200: LD_ADDR_VAR 0 11
53204: PUSH
53205: LD_VAR 0 2
53209: PPUSH
53210: CALL_OW 311
53214: ST_TO_ADDR
// if k > 0 then
53215: LD_VAR 0 11
53219: PUSH
53220: LD_INT 0
53222: GREATER
53223: IFFALSE 53234
// ComExitVehicle ( k ) ;
53225: LD_VAR 0 11
53229: PPUSH
53230: CALL_OW 121
// end ; end ;
53234: GO 53154
53236: POP
53237: POP
// temp_list = UnitFilter ( temp_list ^ vehicles_to_park , [ [ f_control , control_manual ] , [ f_empty ] ] ) diff ai_control_tower_vehicles [ base ] ;
53238: LD_ADDR_VAR 0 4
53242: PUSH
53243: LD_VAR 0 4
53247: PUSH
53248: LD_VAR 0 26
53252: ADD
53253: PPUSH
53254: LD_INT 33
53256: PUSH
53257: LD_INT 1
53259: PUSH
53260: EMPTY
53261: LIST
53262: LIST
53263: PUSH
53264: LD_INT 58
53266: PUSH
53267: EMPTY
53268: LIST
53269: PUSH
53270: EMPTY
53271: LIST
53272: LIST
53273: PPUSH
53274: CALL_OW 72
53278: PUSH
53279: LD_EXP 75
53283: PUSH
53284: LD_VAR 0 12
53288: ARRAY
53289: DIFF
53290: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
53291: LD_ADDR_VAR 0 4
53295: PUSH
53296: LD_VAR 0 4
53300: PPUSH
53301: LD_VAR 0 3
53305: PPUSH
53306: LD_VAR 0 27
53310: PPUSH
53311: CALL 56904 0 3
53315: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
53316: LD_ADDR_VAR 0 3
53320: PUSH
53321: LD_VAR 0 4
53325: PUSH
53326: LD_INT 1
53328: ARRAY
53329: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
53330: LD_ADDR_VAR 0 27
53334: PUSH
53335: LD_VAR 0 4
53339: PUSH
53340: LD_INT 2
53342: ARRAY
53343: ST_TO_ADDR
// end else
53344: GO 53634
// begin vehicles_to_park = UnitFilter ( vehicles_allowed_to_park diff ( parked_vehicles ^ ai_refuel_vehicles_list [ base ] ^ ai_vehicles_having_been_moved [ base ] ^ ai_vehicle_being_moved [ base ] ) , [ f_ok ] ) ;
53346: LD_ADDR_VAR 0 26
53350: PUSH
53351: LD_VAR 0 24
53355: PUSH
53356: LD_VAR 0 16
53360: PUSH
53361: LD_EXP 53
53365: PUSH
53366: LD_VAR 0 12
53370: ARRAY
53371: ADD
53372: PUSH
53373: LD_EXP 61
53377: PUSH
53378: LD_VAR 0 12
53382: ARRAY
53383: ADD
53384: PUSH
53385: LD_EXP 60
53389: PUSH
53390: LD_VAR 0 12
53394: ARRAY
53395: ADD
53396: DIFF
53397: PPUSH
53398: LD_INT 50
53400: PUSH
53401: EMPTY
53402: LIST
53403: PPUSH
53404: CALL_OW 72
53408: ST_TO_ADDR
// for i in parked_vehicles do
53409: LD_ADDR_VAR 0 2
53413: PUSH
53414: LD_VAR 0 16
53418: PUSH
53419: FOR_IN
53420: IFFALSE 53532
// begin if not i in ( ai_refuel_vehicles_list [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) then
53422: LD_VAR 0 2
53426: PUSH
53427: LD_EXP 53
53431: PUSH
53432: LD_VAR 0 12
53436: ARRAY
53437: PUSH
53438: LD_EXP 60
53442: PUSH
53443: LD_VAR 0 12
53447: ARRAY
53448: ADD
53449: PUSH
53450: LD_EXP 61
53454: PUSH
53455: LD_VAR 0 12
53459: ARRAY
53460: ADD
53461: IN
53462: NOT
53463: IFFALSE 53530
// begin k = IsDrivenBy ( i ) ;
53465: LD_ADDR_VAR 0 11
53469: PUSH
53470: LD_VAR 0 2
53474: PPUSH
53475: CALL_OW 311
53479: ST_TO_ADDR
// if k > 0 and not ( k in remote_mechanics and i in ai_control_tower_vehicles [ base ] ) then
53480: LD_VAR 0 11
53484: PUSH
53485: LD_INT 0
53487: GREATER
53488: PUSH
53489: LD_VAR 0 11
53493: PUSH
53494: LD_VAR 0 15
53498: IN
53499: PUSH
53500: LD_VAR 0 2
53504: PUSH
53505: LD_EXP 75
53509: PUSH
53510: LD_VAR 0 12
53514: ARRAY
53515: IN
53516: AND
53517: NOT
53518: AND
53519: IFFALSE 53530
// begin ComExitVehicle ( k ) ;
53521: LD_VAR 0 11
53525: PPUSH
53526: CALL_OW 121
// end ; end ; end ;
53530: GO 53419
53532: POP
53533: POP
// temp_list = UnitFilter ( vehicles_to_park , [ [ f_control , control_manual ] , [ f_empty ] ] ) diff ai_control_tower_vehicles [ base ] ;
53534: LD_ADDR_VAR 0 4
53538: PUSH
53539: LD_VAR 0 26
53543: PPUSH
53544: LD_INT 33
53546: PUSH
53547: LD_INT 1
53549: PUSH
53550: EMPTY
53551: LIST
53552: LIST
53553: PUSH
53554: LD_INT 58
53556: PUSH
53557: EMPTY
53558: LIST
53559: PUSH
53560: EMPTY
53561: LIST
53562: LIST
53563: PPUSH
53564: CALL_OW 72
53568: PUSH
53569: LD_EXP 75
53573: PUSH
53574: LD_VAR 0 12
53578: ARRAY
53579: DIFF
53580: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
53581: LD_ADDR_VAR 0 4
53585: PUSH
53586: LD_VAR 0 4
53590: PPUSH
53591: LD_VAR 0 3
53595: PPUSH
53596: LD_VAR 0 27
53600: PPUSH
53601: CALL 56904 0 3
53605: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
53606: LD_ADDR_VAR 0 3
53610: PUSH
53611: LD_VAR 0 4
53615: PUSH
53616: LD_INT 1
53618: ARRAY
53619: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
53620: LD_ADDR_VAR 0 27
53624: PUSH
53625: LD_VAR 0 4
53629: PUSH
53630: LD_INT 2
53632: ARRAY
53633: ST_TO_ADDR
// end ; while vehicles_to_park > 0 do
53634: LD_VAR 0 26
53638: PUSH
53639: LD_INT 0
53641: GREATER
53642: IFFALSE 53826
// begin if free_parking_spots = 0 then
53644: LD_VAR 0 10
53648: PUSH
53649: LD_INT 0
53651: EQUAL
53652: IFFALSE 53656
// break ;
53654: GO 53826
// temp_list = [ ] ;
53656: LD_ADDR_VAR 0 4
53660: PUSH
53661: EMPTY
53662: ST_TO_ADDR
// for k in free_parking_spots do
53663: LD_ADDR_VAR 0 11
53667: PUSH
53668: LD_VAR 0 10
53672: PUSH
53673: FOR_IN
53674: IFFALSE 53721
// temp_list = temp_list ^ GetDistUnitXY ( vehicles_to_park [ 1 ] , k [ 1 ] , k [ 2 ] ) ;
53676: LD_ADDR_VAR 0 4
53680: PUSH
53681: LD_VAR 0 4
53685: PUSH
53686: LD_VAR 0 26
53690: PUSH
53691: LD_INT 1
53693: ARRAY
53694: PPUSH
53695: LD_VAR 0 11
53699: PUSH
53700: LD_INT 1
53702: ARRAY
53703: PPUSH
53704: LD_VAR 0 11
53708: PUSH
53709: LD_INT 2
53711: ARRAY
53712: PPUSH
53713: CALL_OW 297
53717: ADD
53718: ST_TO_ADDR
53719: GO 53673
53721: POP
53722: POP
// temp_list = WorstFromListByList ( free_parking_spots , temp_list ) ;
53723: LD_ADDR_VAR 0 4
53727: PUSH
53728: LD_VAR 0 10
53732: PPUSH
53733: LD_VAR 0 4
53737: PPUSH
53738: CALL_OW 78
53742: ST_TO_ADDR
// ComMoveXY ( vehicles_to_park [ 1 ] , temp_list [ 1 ] , temp_list [ 2 ] ) ;
53743: LD_VAR 0 26
53747: PUSH
53748: LD_INT 1
53750: ARRAY
53751: PPUSH
53752: LD_VAR 0 4
53756: PUSH
53757: LD_INT 1
53759: ARRAY
53760: PPUSH
53761: LD_VAR 0 4
53765: PUSH
53766: LD_INT 2
53768: ARRAY
53769: PPUSH
53770: CALL_OW 111
// AddComHold ( vehicles_to_park [ 1 ] ) ;
53774: LD_VAR 0 26
53778: PUSH
53779: LD_INT 1
53781: ARRAY
53782: PPUSH
53783: CALL_OW 200
// free_parking_spots = free_parking_spots diff [ temp_list ] ;
53787: LD_ADDR_VAR 0 10
53791: PUSH
53792: LD_VAR 0 10
53796: PUSH
53797: LD_VAR 0 4
53801: PUSH
53802: EMPTY
53803: LIST
53804: DIFF
53805: ST_TO_ADDR
// vehicles_to_park = Delete ( vehicles_to_park , 1 ) ;
53806: LD_ADDR_VAR 0 26
53810: PUSH
53811: LD_VAR 0 26
53815: PPUSH
53816: LD_INT 1
53818: PPUSH
53819: CALL_OW 3
53823: ST_TO_ADDR
// end ;
53824: GO 53634
// if under_attack then
53826: LD_VAR 0 9
53830: IFFALSE 53970
// begin for i in UnitFilter ( ( ai_retreating_vehicles_defend [ base ] union ai_vehicles_being_repaired [ base ] ) diff vehicles_allowed_to_park , [ f_ok ] ) do
53832: LD_ADDR_VAR 0 2
53836: PUSH
53837: LD_EXP 51
53841: PUSH
53842: LD_VAR 0 12
53846: ARRAY
53847: PUSH
53848: LD_EXP 52
53852: PUSH
53853: LD_VAR 0 12
53857: ARRAY
53858: UNION
53859: PUSH
53860: LD_VAR 0 24
53864: DIFF
53865: PPUSH
53866: LD_INT 50
53868: PUSH
53869: EMPTY
53870: LIST
53871: PPUSH
53872: CALL_OW 72
53876: PUSH
53877: FOR_IN
53878: IFFALSE 53968
// begin if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > human_pullback_hex_max_dist then
53880: LD_VAR 0 2
53884: PPUSH
53885: LD_EXP 55
53889: PUSH
53890: LD_VAR 0 12
53894: ARRAY
53895: PUSH
53896: LD_INT 1
53898: ARRAY
53899: PPUSH
53900: LD_EXP 55
53904: PUSH
53905: LD_VAR 0 12
53909: ARRAY
53910: PUSH
53911: LD_INT 2
53913: ARRAY
53914: PPUSH
53915: CALL_OW 297
53919: PUSH
53920: LD_VAR 0 25
53924: GREATER
53925: IFFALSE 53966
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
53927: LD_VAR 0 2
53931: PPUSH
53932: LD_EXP 55
53936: PUSH
53937: LD_VAR 0 12
53941: ARRAY
53942: PUSH
53943: LD_INT 1
53945: ARRAY
53946: PPUSH
53947: LD_EXP 55
53951: PUSH
53952: LD_VAR 0 12
53956: ARRAY
53957: PUSH
53958: LD_INT 2
53960: ARRAY
53961: PPUSH
53962: CALL_OW 111
// end ;
53966: GO 53877
53968: POP
53969: POP
// end ; if under_attack then
53970: LD_VAR 0 9
53974: IFFALSE 54095
// begin allowed_to_repair_vehicles = parked_vehicles ^ UnitFilter ( vehicles_to_consider diff vehicles_allowed_to_park , [ f_distxy , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] , human_pullback_hex_max_dist ] ) ;
53976: LD_ADDR_VAR 0 8
53980: PUSH
53981: LD_VAR 0 16
53985: PUSH
53986: LD_VAR 0 23
53990: PUSH
53991: LD_VAR 0 24
53995: DIFF
53996: PPUSH
53997: LD_INT 92
53999: PUSH
54000: LD_EXP 55
54004: PUSH
54005: LD_VAR 0 12
54009: ARRAY
54010: PUSH
54011: LD_INT 1
54013: ARRAY
54014: PUSH
54015: LD_EXP 55
54019: PUSH
54020: LD_VAR 0 12
54024: ARRAY
54025: PUSH
54026: LD_INT 2
54028: ARRAY
54029: PUSH
54030: LD_VAR 0 25
54034: PUSH
54035: EMPTY
54036: LIST
54037: LIST
54038: LIST
54039: LIST
54040: PPUSH
54041: CALL_OW 72
54045: ADD
54046: ST_TO_ADDR
// allowed_to_repair_vehicles = allowed_to_repair_vehicles diff ( ai_refuel_vehicles_list [ base ] ^ ai_vehicles_having_been_moved [ base ] ^ ai_vehicle_being_moved [ base ] ) ;
54047: LD_ADDR_VAR 0 8
54051: PUSH
54052: LD_VAR 0 8
54056: PUSH
54057: LD_EXP 53
54061: PUSH
54062: LD_VAR 0 12
54066: ARRAY
54067: PUSH
54068: LD_EXP 61
54072: PUSH
54073: LD_VAR 0 12
54077: ARRAY
54078: ADD
54079: PUSH
54080: LD_EXP 60
54084: PUSH
54085: LD_VAR 0 12
54089: ARRAY
54090: ADD
54091: DIFF
54092: ST_TO_ADDR
// end else
54093: GO 54286
// begin allowed_to_repair_vehicles = vehicles_to_consider diff ( ai_refuel_vehicles_list [ base ] ^ ai_vehicles_having_been_moved [ base ] ^ ai_vehicle_being_moved [ base ] ) ;
54095: LD_ADDR_VAR 0 8
54099: PUSH
54100: LD_VAR 0 23
54104: PUSH
54105: LD_EXP 53
54109: PUSH
54110: LD_VAR 0 12
54114: ARRAY
54115: PUSH
54116: LD_EXP 61
54120: PUSH
54121: LD_VAR 0 12
54125: ARRAY
54126: ADD
54127: PUSH
54128: LD_EXP 60
54132: PUSH
54133: LD_VAR 0 12
54137: ARRAY
54138: ADD
54139: DIFF
54140: ST_TO_ADDR
// allowed_to_repair_vehicles = allowed_to_repair_vehicles ^ UnitFilter ( ai_cargo_bay [ base ] diff 0 , [ f_inarea , area ] ) ;
54141: LD_ADDR_VAR 0 8
54145: PUSH
54146: LD_VAR 0 8
54150: PUSH
54151: LD_EXP 65
54155: PUSH
54156: LD_VAR 0 12
54160: ARRAY
54161: PUSH
54162: LD_INT 0
54164: DIFF
54165: PPUSH
54166: LD_INT 95
54168: PUSH
54169: LD_VAR 0 13
54173: PUSH
54174: EMPTY
54175: LIST
54176: LIST
54177: PPUSH
54178: CALL_OW 72
54182: ADD
54183: ST_TO_ADDR
// i = 1 ;
54184: LD_ADDR_VAR 0 2
54188: PUSH
54189: LD_INT 1
54191: ST_TO_ADDR
// while i <= allowed_to_repair_vehicles do
54192: LD_VAR 0 2
54196: PUSH
54197: LD_VAR 0 8
54201: LESSEQUAL
54202: IFFALSE 54286
// begin if not IsOk ( allowed_to_repair_vehicles [ i ] ) and GetDistUnitArea ( allowed_to_repair_vehicles [ i ] , area ) > 7 then
54204: LD_VAR 0 8
54208: PUSH
54209: LD_VAR 0 2
54213: ARRAY
54214: PPUSH
54215: CALL_OW 302
54219: NOT
54220: PUSH
54221: LD_VAR 0 8
54225: PUSH
54226: LD_VAR 0 2
54230: ARRAY
54231: PPUSH
54232: LD_VAR 0 13
54236: PPUSH
54237: CALL_OW 299
54241: PUSH
54242: LD_INT 7
54244: GREATER
54245: AND
54246: IFFALSE 54270
// begin allowed_to_repair_vehicles = Delete ( allowed_to_repair_vehicles , i ) ;
54248: LD_ADDR_VAR 0 8
54252: PUSH
54253: LD_VAR 0 8
54257: PPUSH
54258: LD_VAR 0 2
54262: PPUSH
54263: CALL_OW 3
54267: ST_TO_ADDR
// continue ;
54268: GO 54192
// end ; i = i + 1 ;
54270: LD_ADDR_VAR 0 2
54274: PUSH
54275: LD_VAR 0 2
54279: PUSH
54280: LD_INT 1
54282: PLUS
54283: ST_TO_ADDR
// end ;
54284: GO 54192
// end ; allowed_to_repair_vehicles = UnitFilter ( allowed_to_repair_vehicles , [ [ f_not , [ f_lives , 1000 ] ] , [ f_or , [ f_not , [ f_ok ] ] , [ f_inarea , area ] ] ] ) ;
54286: LD_ADDR_VAR 0 8
54290: PUSH
54291: LD_VAR 0 8
54295: PPUSH
54296: LD_INT 3
54298: PUSH
54299: LD_INT 24
54301: PUSH
54302: LD_INT 1000
54304: PUSH
54305: EMPTY
54306: LIST
54307: LIST
54308: PUSH
54309: EMPTY
54310: LIST
54311: LIST
54312: PUSH
54313: LD_INT 2
54315: PUSH
54316: LD_INT 3
54318: PUSH
54319: LD_INT 50
54321: PUSH
54322: EMPTY
54323: LIST
54324: PUSH
54325: EMPTY
54326: LIST
54327: LIST
54328: PUSH
54329: LD_INT 95
54331: PUSH
54332: LD_VAR 0 13
54336: PUSH
54337: EMPTY
54338: LIST
54339: LIST
54340: PUSH
54341: EMPTY
54342: LIST
54343: LIST
54344: LIST
54345: PUSH
54346: EMPTY
54347: LIST
54348: LIST
54349: PPUSH
54350: CALL_OW 72
54354: ST_TO_ADDR
// if ai_crane [ base ] > 0 then
54355: LD_EXP 68
54359: PUSH
54360: LD_VAR 0 12
54364: ARRAY
54365: PUSH
54366: LD_INT 0
54368: GREATER
54369: IFFALSE 54960
// begin k = false ;
54371: LD_ADDR_VAR 0 11
54375: PUSH
54376: LD_INT 0
54378: ST_TO_ADDR
// if ai_crane_is_being_repaired [ base ] and ( GetDistUnitXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) <= 6 or ( IsInArea ( ai_crane [ base ] , area ) and not under_attack ) ) then
54379: LD_EXP 71
54383: PUSH
54384: LD_VAR 0 12
54388: ARRAY
54389: PUSH
54390: LD_EXP 68
54394: PUSH
54395: LD_VAR 0 12
54399: ARRAY
54400: PPUSH
54401: LD_EXP 55
54405: PUSH
54406: LD_VAR 0 12
54410: ARRAY
54411: PUSH
54412: LD_INT 1
54414: ARRAY
54415: PPUSH
54416: LD_EXP 55
54420: PUSH
54421: LD_VAR 0 12
54425: ARRAY
54426: PUSH
54427: LD_INT 2
54429: ARRAY
54430: PPUSH
54431: CALL_OW 297
54435: PUSH
54436: LD_INT 6
54438: LESSEQUAL
54439: PUSH
54440: LD_EXP 68
54444: PUSH
54445: LD_VAR 0 12
54449: ARRAY
54450: PPUSH
54451: LD_VAR 0 13
54455: PPUSH
54456: CALL_OW 308
54460: PUSH
54461: LD_VAR 0 9
54465: NOT
54466: AND
54467: OR
54468: AND
54469: IFFALSE 54740
// begin if GetLives ( ai_crane [ base ] ) < 1000 then
54471: LD_EXP 68
54475: PUSH
54476: LD_VAR 0 12
54480: ARRAY
54481: PPUSH
54482: CALL_OW 256
54486: PUSH
54487: LD_INT 1000
54489: LESS
54490: IFFALSE 54514
// allowed_to_repair_vehicles = ai_crane [ base ] ^ allowed_to_repair_vehicles ;
54492: LD_ADDR_VAR 0 8
54496: PUSH
54497: LD_EXP 68
54501: PUSH
54502: LD_VAR 0 12
54506: ARRAY
54507: PUSH
54508: LD_VAR 0 8
54512: ADD
54513: ST_TO_ADDR
// if ai_crane_driver [ base ] > 0 then
54514: LD_EXP 72
54518: PUSH
54519: LD_VAR 0 12
54523: ARRAY
54524: PUSH
54525: LD_INT 0
54527: GREATER
54528: IFFALSE 54738
// begin if GetLives ( ai_crane_driver [ base ] ) = 1000 then
54530: LD_EXP 72
54534: PUSH
54535: LD_VAR 0 12
54539: ARRAY
54540: PPUSH
54541: CALL_OW 256
54545: PUSH
54546: LD_INT 1000
54548: EQUAL
54549: IFFALSE 54575
// begin mechanics_list = mechanics_list ^ ai_crane_driver [ base ] ;
54551: LD_ADDR_VAR 0 3
54555: PUSH
54556: LD_VAR 0 3
54560: PUSH
54561: LD_EXP 72
54565: PUSH
54566: LD_VAR 0 12
54570: ARRAY
54571: ADD
54572: ST_TO_ADDR
// end else
54573: GO 54738
// begin if GetDistUnitXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) <= 6 then
54575: LD_EXP 68
54579: PUSH
54580: LD_VAR 0 12
54584: ARRAY
54585: PPUSH
54586: LD_EXP 55
54590: PUSH
54591: LD_VAR 0 12
54595: ARRAY
54596: PUSH
54597: LD_INT 1
54599: ARRAY
54600: PPUSH
54601: LD_EXP 55
54605: PUSH
54606: LD_VAR 0 12
54610: ARRAY
54611: PUSH
54612: LD_INT 2
54614: ARRAY
54615: PPUSH
54616: CALL_OW 297
54620: PUSH
54621: LD_INT 6
54623: LESSEQUAL
54624: IFFALSE 54730
// begin if GetHumansOutOfUnits ( [ ai_crane_driver [ base ] ] ) > 0 and not ai_crane_driver [ base ] in ai_heal_these_humans [ base ] then
54626: LD_EXP 72
54630: PUSH
54631: LD_VAR 0 12
54635: ARRAY
54636: PUSH
54637: EMPTY
54638: LIST
54639: PPUSH
54640: CALL 45989 0 1
54644: PUSH
54645: LD_INT 0
54647: GREATER
54648: PUSH
54649: LD_EXP 72
54653: PUSH
54654: LD_VAR 0 12
54658: ARRAY
54659: PUSH
54660: LD_EXP 57
54664: PUSH
54665: LD_VAR 0 12
54669: ARRAY
54670: IN
54671: NOT
54672: AND
54673: IFFALSE 54728
// begin temp_list = ai_heal_these_humans [ base ] ^ ai_crane_driver [ base ] ;
54675: LD_ADDR_VAR 0 4
54679: PUSH
54680: LD_EXP 57
54684: PUSH
54685: LD_VAR 0 12
54689: ARRAY
54690: PUSH
54691: LD_EXP 72
54695: PUSH
54696: LD_VAR 0 12
54700: ARRAY
54701: ADD
54702: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
54703: LD_ADDR_EXP 57
54707: PUSH
54708: LD_EXP 57
54712: PPUSH
54713: LD_VAR 0 12
54717: PPUSH
54718: LD_VAR 0 4
54722: PPUSH
54723: CALL_OW 1
54727: ST_TO_ADDR
// end ; end else
54728: GO 54738
// k = true ;
54730: LD_ADDR_VAR 0 11
54734: PUSH
54735: LD_INT 1
54737: ST_TO_ADDR
// end ; end ; end else
54738: GO 54748
// k = true ;
54740: LD_ADDR_VAR 0 11
54744: PUSH
54745: LD_INT 1
54747: ST_TO_ADDR
// if k then
54748: LD_VAR 0 11
54752: IFFALSE 54960
// begin if IsOk ( ai_crane [ base ] ) and ai_crane_driver [ base ] > 0 and not ai_crane_driver [ base ] in mechanics_list and not ai_crane_driver [ base ] in ai_heal_these_humans [ base ] then
54754: LD_EXP 68
54758: PUSH
54759: LD_VAR 0 12
54763: ARRAY
54764: PPUSH
54765: CALL_OW 302
54769: PUSH
54770: LD_EXP 72
54774: PUSH
54775: LD_VAR 0 12
54779: ARRAY
54780: PUSH
54781: LD_INT 0
54783: GREATER
54784: AND
54785: PUSH
54786: LD_EXP 72
54790: PUSH
54791: LD_VAR 0 12
54795: ARRAY
54796: PUSH
54797: LD_VAR 0 3
54801: IN
54802: NOT
54803: AND
54804: PUSH
54805: LD_EXP 72
54809: PUSH
54810: LD_VAR 0 12
54814: ARRAY
54815: PUSH
54816: LD_EXP 57
54820: PUSH
54821: LD_VAR 0 12
54825: ARRAY
54826: IN
54827: NOT
54828: AND
54829: IFFALSE 54960
// begin if IsInUnit ( ai_crane_driver [ base ] ) <> ai_crane [ base ] then
54831: LD_EXP 72
54835: PUSH
54836: LD_VAR 0 12
54840: ARRAY
54841: PPUSH
54842: CALL_OW 310
54846: PUSH
54847: LD_EXP 68
54851: PUSH
54852: LD_VAR 0 12
54856: ARRAY
54857: NONEQUAL
54858: IFFALSE 54960
// case GetType ( IsInUnit ( ai_crane_driver [ base ] ) ) of unit_building :
54860: LD_EXP 72
54864: PUSH
54865: LD_VAR 0 12
54869: ARRAY
54870: PPUSH
54871: CALL_OW 310
54875: PPUSH
54876: CALL_OW 247
54880: PUSH
54881: LD_INT 3
54883: DOUBLE
54884: EQUAL
54885: IFTRUE 54889
54887: GO 54907
54889: POP
// ComExitBuilding ( ai_crane_driver [ base ] ) ; unit_vehicle :
54890: LD_EXP 72
54894: PUSH
54895: LD_VAR 0 12
54899: ARRAY
54900: PPUSH
54901: CALL_OW 122
54905: GO 54960
54907: LD_INT 2
54909: DOUBLE
54910: EQUAL
54911: IFTRUE 54915
54913: GO 54933
54915: POP
// ComExitVehicle ( ai_crane_driver [ base ] ) ; else
54916: LD_EXP 72
54920: PUSH
54921: LD_VAR 0 12
54925: ARRAY
54926: PPUSH
54927: CALL_OW 121
54931: GO 54960
54933: POP
// ComEnterUnit ( ai_crane_driver [ base ] , ai_crane [ base ] ) ; end ;
54934: LD_EXP 72
54938: PUSH
54939: LD_VAR 0 12
54943: ARRAY
54944: PPUSH
54945: LD_EXP 68
54949: PUSH
54950: LD_VAR 0 12
54954: ARRAY
54955: PPUSH
54956: CALL_OW 120
// end ; end ; end ; if mechanics_list = 0 and remote_mechanics = 0 then
54960: LD_VAR 0 3
54964: PUSH
54965: LD_INT 0
54967: EQUAL
54968: PUSH
54969: LD_VAR 0 15
54973: PUSH
54974: LD_INT 0
54976: EQUAL
54977: AND
54978: IFFALSE 54982
// continue ;
54980: GO 48241
// allowed_to_repair_vehicles = allowed_to_repair_vehicles diff ai_vehicles_being_repaired [ base ] ;
54982: LD_ADDR_VAR 0 8
54986: PUSH
54987: LD_VAR 0 8
54991: PUSH
54992: LD_EXP 52
54996: PUSH
54997: LD_VAR 0 12
55001: ARRAY
55002: DIFF
55003: ST_TO_ADDR
// if allowed_to_repair_vehicles > 0 or ai_vehicles_being_repaired [ base ] > 0 then
55004: LD_VAR 0 8
55008: PUSH
55009: LD_INT 0
55011: GREATER
55012: PUSH
55013: LD_EXP 52
55017: PUSH
55018: LD_VAR 0 12
55022: ARRAY
55023: PUSH
55024: LD_INT 0
55026: GREATER
55027: OR
55028: IFFALSE 55530
// begin if remote_mechanics > 0 then
55030: LD_VAR 0 15
55034: PUSH
55035: LD_INT 0
55037: GREATER
55038: IFFALSE 55274
// begin if under_attack or UnitFilter ( ai_vehicles_attack [ base ] , [ [ f_control , control_remote ] , [ f_ok ] ] ) > 0 then
55040: LD_VAR 0 9
55044: PUSH
55045: LD_EXP 50
55049: PUSH
55050: LD_VAR 0 12
55054: ARRAY
55055: PPUSH
55056: LD_INT 33
55058: PUSH
55059: LD_INT 2
55061: PUSH
55062: EMPTY
55063: LIST
55064: LIST
55065: PUSH
55066: LD_INT 50
55068: PUSH
55069: EMPTY
55070: LIST
55071: PUSH
55072: EMPTY
55073: LIST
55074: LIST
55075: PPUSH
55076: CALL_OW 72
55080: PUSH
55081: LD_INT 0
55083: GREATER
55084: OR
55085: IFFALSE 55193
// begin for i in remote_driver_vehicles [ base ] do
55087: LD_ADDR_VAR 0 2
55091: PUSH
55092: LD_VAR 0 28
55096: PUSH
55097: LD_VAR 0 12
55101: ARRAY
55102: PUSH
55103: FOR_IN
55104: IFFALSE 55189
// if UnitFilter ( i [ 2 ] , [ f_ok ] ) = 0 and i [ 1 ] in remote_mechanics then
55106: LD_VAR 0 2
55110: PUSH
55111: LD_INT 2
55113: ARRAY
55114: PPUSH
55115: LD_INT 50
55117: PUSH
55118: EMPTY
55119: LIST
55120: PPUSH
55121: CALL_OW 72
55125: PUSH
55126: LD_INT 0
55128: EQUAL
55129: PUSH
55130: LD_VAR 0 2
55134: PUSH
55135: LD_INT 1
55137: ARRAY
55138: PUSH
55139: LD_VAR 0 15
55143: IN
55144: AND
55145: IFFALSE 55187
// begin mechanics_list = mechanics_list ^ i [ 1 ] ;
55147: LD_ADDR_VAR 0 3
55151: PUSH
55152: LD_VAR 0 3
55156: PUSH
55157: LD_VAR 0 2
55161: PUSH
55162: LD_INT 1
55164: ARRAY
55165: ADD
55166: ST_TO_ADDR
// remote_mechanics = remote_mechanics diff i [ 1 ] ;
55167: LD_ADDR_VAR 0 15
55171: PUSH
55172: LD_VAR 0 15
55176: PUSH
55177: LD_VAR 0 2
55181: PUSH
55182: LD_INT 1
55184: ARRAY
55185: DIFF
55186: ST_TO_ADDR
// end ;
55187: GO 55103
55189: POP
55190: POP
// end else
55191: GO 55274
// begin temp_unit = true ;
55193: LD_ADDR_VAR 0 6
55197: PUSH
55198: LD_INT 1
55200: ST_TO_ADDR
// for i in vehicles_to_consider do
55201: LD_ADDR_VAR 0 2
55205: PUSH
55206: LD_VAR 0 23
55210: PUSH
55211: FOR_IN
55212: IFFALSE 55243
// if not IsInArea ( i , area ) then
55214: LD_VAR 0 2
55218: PPUSH
55219: LD_VAR 0 13
55223: PPUSH
55224: CALL_OW 308
55228: NOT
55229: IFFALSE 55241
// begin temp_unit = false ;
55231: LD_ADDR_VAR 0 6
55235: PUSH
55236: LD_INT 0
55238: ST_TO_ADDR
// break ;
55239: GO 55243
// end ;
55241: GO 55211
55243: POP
55244: POP
// if temp_unit then
55245: LD_VAR 0 6
55249: IFFALSE 55274
// begin mechanics_list = mechanics_list ^ remote_mechanics ;
55251: LD_ADDR_VAR 0 3
55255: PUSH
55256: LD_VAR 0 3
55260: PUSH
55261: LD_VAR 0 15
55265: ADD
55266: ST_TO_ADDR
// remote_mechanics = [ ] ;
55267: LD_ADDR_VAR 0 15
55271: PUSH
55272: EMPTY
55273: ST_TO_ADDR
// end ; end ; end ; if allowed_to_repair_vehicles > 0 then
55274: LD_VAR 0 8
55278: PUSH
55279: LD_INT 0
55281: GREATER
55282: IFFALSE 55499
// begin k = false ;
55284: LD_ADDR_VAR 0 11
55288: PUSH
55289: LD_INT 0
55291: ST_TO_ADDR
// if ai_vehicles_being_repaired [ base ] = 0 then
55292: LD_EXP 52
55296: PUSH
55297: LD_VAR 0 12
55301: ARRAY
55302: PUSH
55303: LD_INT 0
55305: EQUAL
55306: IFFALSE 55318
// k = true else
55308: LD_ADDR_VAR 0 11
55312: PUSH
55313: LD_INT 1
55315: ST_TO_ADDR
55316: GO 55381
// if IsOk ( ai_vehicles_being_repaired [ base ] [ 1 ] ) then
55318: LD_EXP 52
55322: PUSH
55323: LD_VAR 0 12
55327: ARRAY
55328: PUSH
55329: LD_INT 1
55331: ARRAY
55332: PPUSH
55333: CALL_OW 302
55337: IFFALSE 55381
// begin allowed_to_repair_vehicles = UnitFilter ( allowed_to_repair_vehicles , [ f_not , [ f_ok ] ] ) ;
55339: LD_ADDR_VAR 0 8
55343: PUSH
55344: LD_VAR 0 8
55348: PPUSH
55349: LD_INT 3
55351: PUSH
55352: LD_INT 50
55354: PUSH
55355: EMPTY
55356: LIST
55357: PUSH
55358: EMPTY
55359: LIST
55360: LIST
55361: PPUSH
55362: CALL_OW 72
55366: ST_TO_ADDR
// k := allowed_to_repair_vehicles > 0 ;
55367: LD_ADDR_VAR 0 11
55371: PUSH
55372: LD_VAR 0 8
55376: PUSH
55377: LD_INT 0
55379: GREATER
55380: ST_TO_ADDR
// end ; if k then
55381: LD_VAR 0 11
55385: IFFALSE 55499
// begin temp_list = [ ] ;
55387: LD_ADDR_VAR 0 4
55391: PUSH
55392: EMPTY
55393: ST_TO_ADDR
// for i in allowed_to_repair_vehicles do
55394: LD_ADDR_VAR 0 2
55398: PUSH
55399: LD_VAR 0 8
55403: PUSH
55404: FOR_IN
55405: IFFALSE 55430
// temp_list = temp_list ^ GetLives ( i ) ;
55407: LD_ADDR_VAR 0 4
55411: PUSH
55412: LD_VAR 0 4
55416: PUSH
55417: LD_VAR 0 2
55421: PPUSH
55422: CALL_OW 256
55426: ADD
55427: ST_TO_ADDR
55428: GO 55404
55430: POP
55431: POP
// temp_unit = WorstFromListByList ( allowed_to_repair_vehicles , temp_list ) ;
55432: LD_ADDR_VAR 0 6
55436: PUSH
55437: LD_VAR 0 8
55441: PPUSH
55442: LD_VAR 0 4
55446: PPUSH
55447: CALL_OW 78
55451: ST_TO_ADDR
// temp_list = temp_unit ^ ai_vehicles_being_repaired [ base ] ;
55452: LD_ADDR_VAR 0 4
55456: PUSH
55457: LD_VAR 0 6
55461: PUSH
55462: LD_EXP 52
55466: PUSH
55467: LD_VAR 0 12
55471: ARRAY
55472: ADD
55473: ST_TO_ADDR
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
55474: LD_ADDR_EXP 52
55478: PUSH
55479: LD_EXP 52
55483: PPUSH
55484: LD_VAR 0 12
55488: PPUSH
55489: LD_VAR 0 4
55493: PPUSH
55494: CALL_OW 1
55498: ST_TO_ADDR
// end ; end ; ComRepairVehicle ( GetHumansOutOfUnits ( mechanics_list ) , ai_vehicles_being_repaired [ base ] [ 1 ] ) ;
55499: LD_VAR 0 3
55503: PPUSH
55504: CALL 45989 0 1
55508: PPUSH
55509: LD_EXP 52
55513: PUSH
55514: LD_VAR 0 12
55518: ARRAY
55519: PUSH
55520: LD_INT 1
55522: ARRAY
55523: PPUSH
55524: CALL_OW 129
// end else
55528: GO 55595
// begin DistributeHumansToBuildings ( base , mechanics_list , UnitFilter ( ai_facts [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
55530: LD_VAR 0 12
55534: PPUSH
55535: LD_VAR 0 3
55539: PPUSH
55540: LD_EXP 37
55544: PUSH
55545: LD_VAR 0 12
55549: ARRAY
55550: PPUSH
55551: LD_INT 50
55553: PUSH
55554: EMPTY
55555: LIST
55556: PUSH
55557: LD_INT 3
55559: PUSH
55560: LD_INT 57
55562: PUSH
55563: EMPTY
55564: LIST
55565: PUSH
55566: EMPTY
55567: LIST
55568: LIST
55569: PUSH
55570: EMPTY
55571: LIST
55572: LIST
55573: PPUSH
55574: CALL_OW 72
55578: PPUSH
55579: LD_INT 3
55581: PPUSH
55582: LD_INT 6
55584: PPUSH
55585: LD_INT 1
55587: PPUSH
55588: LD_INT 0
55590: PPUSH
55591: CALL 35428 0 7
// end ; if remote_driver_vehicles [ base ] > 0 then
55595: LD_VAR 0 28
55599: PUSH
55600: LD_VAR 0 12
55604: ARRAY
55605: PUSH
55606: LD_INT 0
55608: GREATER
55609: IFFALSE 56893
// begin if not IsOk ( ai_control_tower [ base ] ) and UnitFilter ( ai_control_tower_vehicles [ base ] , [ f_ok ] ) = 0 then
55611: LD_EXP 45
55615: PUSH
55616: LD_VAR 0 12
55620: ARRAY
55621: PPUSH
55622: CALL_OW 302
55626: NOT
55627: PUSH
55628: LD_EXP 75
55632: PUSH
55633: LD_VAR 0 12
55637: ARRAY
55638: PPUSH
55639: LD_INT 50
55641: PUSH
55642: EMPTY
55643: LIST
55644: PPUSH
55645: CALL_OW 72
55649: PUSH
55650: LD_INT 0
55652: EQUAL
55653: AND
55654: IFFALSE 55723
// begin DistributeHumansToBuildings ( base , remote_mechanics , UnitFilter ( ai_facts [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
55656: LD_VAR 0 12
55660: PPUSH
55661: LD_VAR 0 15
55665: PPUSH
55666: LD_EXP 37
55670: PUSH
55671: LD_VAR 0 12
55675: ARRAY
55676: PPUSH
55677: LD_INT 50
55679: PUSH
55680: EMPTY
55681: LIST
55682: PUSH
55683: LD_INT 3
55685: PUSH
55686: LD_INT 57
55688: PUSH
55689: EMPTY
55690: LIST
55691: PUSH
55692: EMPTY
55693: LIST
55694: LIST
55695: PUSH
55696: EMPTY
55697: LIST
55698: LIST
55699: PPUSH
55700: CALL_OW 72
55704: PPUSH
55705: LD_INT 3
55707: PPUSH
55708: LD_INT 6
55710: PPUSH
55711: LD_INT 1
55713: PPUSH
55714: LD_INT 0
55716: PPUSH
55717: CALL 35428 0 7
// end else
55721: GO 56893
// begin temp_list_3 = [ [ ] , 0 ] ;
55723: LD_ADDR_VAR 0 5
55727: PUSH
55728: EMPTY
55729: PUSH
55730: LD_INT 0
55732: PUSH
55733: EMPTY
55734: LIST
55735: LIST
55736: ST_TO_ADDR
// temp_list_2 = [ ] ;
55737: LD_ADDR_VAR 0 14
55741: PUSH
55742: EMPTY
55743: ST_TO_ADDR
// already_inside_mecs = [ ] ;
55744: LD_ADDR_VAR 0 22
55748: PUSH
55749: EMPTY
55750: ST_TO_ADDR
// for i in remote_driver_vehicles [ base ] do
55751: LD_ADDR_VAR 0 2
55755: PUSH
55756: LD_VAR 0 28
55760: PUSH
55761: LD_VAR 0 12
55765: ARRAY
55766: PUSH
55767: FOR_IN
55768: IFFALSE 55972
// begin if GetClass ( i [ 1 ] ) <> class_mechanic then
55770: LD_VAR 0 2
55774: PUSH
55775: LD_INT 1
55777: ARRAY
55778: PPUSH
55779: CALL_OW 257
55783: PUSH
55784: LD_INT 3
55786: NONEQUAL
55787: IFFALSE 55791
// continue ;
55789: GO 55767
// k = IsInUnit ( i [ 1 ] ) ;
55791: LD_ADDR_VAR 0 11
55795: PUSH
55796: LD_VAR 0 2
55800: PUSH
55801: LD_INT 1
55803: ARRAY
55804: PPUSH
55805: CALL_OW 310
55809: ST_TO_ADDR
// if k > 0 and ( k in ai_control_tower_vehicles [ base ] or k = ai_control_tower [ base ] ) then
55810: LD_VAR 0 11
55814: PUSH
55815: LD_INT 0
55817: GREATER
55818: PUSH
55819: LD_VAR 0 11
55823: PUSH
55824: LD_EXP 75
55828: PUSH
55829: LD_VAR 0 12
55833: ARRAY
55834: IN
55835: PUSH
55836: LD_VAR 0 11
55840: PUSH
55841: LD_EXP 45
55845: PUSH
55846: LD_VAR 0 12
55850: ARRAY
55851: EQUAL
55852: OR
55853: AND
55854: IFFALSE 55970
// begin already_inside_mecs = already_inside_mecs ^ i [ 1 ] ;
55856: LD_ADDR_VAR 0 22
55860: PUSH
55861: LD_VAR 0 22
55865: PUSH
55866: LD_VAR 0 2
55870: PUSH
55871: LD_INT 1
55873: ARRAY
55874: ADD
55875: ST_TO_ADDR
// if k in ai_control_tower_vehicles [ base ] then
55876: LD_VAR 0 11
55880: PUSH
55881: LD_EXP 75
55885: PUSH
55886: LD_VAR 0 12
55890: ARRAY
55891: IN
55892: IFFALSE 55939
// begin temp_list = temp_list_3 [ 1 ] ^ k ;
55894: LD_ADDR_VAR 0 4
55898: PUSH
55899: LD_VAR 0 5
55903: PUSH
55904: LD_INT 1
55906: ARRAY
55907: PUSH
55908: LD_VAR 0 11
55912: ADD
55913: ST_TO_ADDR
// temp_list_3 = Replace ( temp_list_3 , 1 , temp_list ) ;
55914: LD_ADDR_VAR 0 5
55918: PUSH
55919: LD_VAR 0 5
55923: PPUSH
55924: LD_INT 1
55926: PPUSH
55927: LD_VAR 0 4
55931: PPUSH
55932: CALL_OW 1
55936: ST_TO_ADDR
// end else
55937: GO 55970
// temp_list_3 = Replace ( temp_list_3 , 2 , temp_list_3 [ 2 ] + 1 ) ;
55939: LD_ADDR_VAR 0 5
55943: PUSH
55944: LD_VAR 0 5
55948: PPUSH
55949: LD_INT 2
55951: PPUSH
55952: LD_VAR 0 5
55956: PUSH
55957: LD_INT 2
55959: ARRAY
55960: PUSH
55961: LD_INT 1
55963: PLUS
55964: PPUSH
55965: CALL_OW 1
55969: ST_TO_ADDR
// end ; end ;
55970: GO 55767
55972: POP
55973: POP
// for i in remote_driver_vehicles [ base ] do
55974: LD_ADDR_VAR 0 2
55978: PUSH
55979: LD_VAR 0 28
55983: PUSH
55984: LD_VAR 0 12
55988: ARRAY
55989: PUSH
55990: FOR_IN
55991: IFFALSE 56826
// begin if not i [ 1 ] in remote_mechanics then
55993: LD_VAR 0 2
55997: PUSH
55998: LD_INT 1
56000: ARRAY
56001: PUSH
56002: LD_VAR 0 15
56006: IN
56007: NOT
56008: IFFALSE 56012
// continue ;
56010: GO 55990
// if GetClass ( i [ 1 ] ) <> class_mechanic then
56012: LD_VAR 0 2
56016: PUSH
56017: LD_INT 1
56019: ARRAY
56020: PPUSH
56021: CALL_OW 257
56025: PUSH
56026: LD_INT 3
56028: NONEQUAL
56029: IFFALSE 56237
// begin temp_unit = 0 ;
56031: LD_ADDR_VAR 0 6
56035: PUSH
56036: LD_INT 0
56038: ST_TO_ADDR
// for k in ai_facts [ base ] do
56039: LD_ADDR_VAR 0 11
56043: PUSH
56044: LD_EXP 37
56048: PUSH
56049: LD_VAR 0 12
56053: ARRAY
56054: PUSH
56055: FOR_IN
56056: IFFALSE 56098
// if IsOk ( k ) and UnitsInside ( k ) < 6 then
56058: LD_VAR 0 11
56062: PPUSH
56063: CALL_OW 302
56067: PUSH
56068: LD_VAR 0 11
56072: PPUSH
56073: CALL_OW 313
56077: PUSH
56078: LD_INT 6
56080: LESS
56081: AND
56082: IFFALSE 56096
// begin temp_unit = k ;
56084: LD_ADDR_VAR 0 6
56088: PUSH
56089: LD_VAR 0 11
56093: ST_TO_ADDR
// break ;
56094: GO 56098
// end ;
56096: GO 56055
56098: POP
56099: POP
// if temp_unit > 0 then
56100: LD_VAR 0 6
56104: PUSH
56105: LD_INT 0
56107: GREATER
56108: IFFALSE 56235
// begin if IsInUnit ( i [ 1 ] ) = temp_unit then
56110: LD_VAR 0 2
56114: PUSH
56115: LD_INT 1
56117: ARRAY
56118: PPUSH
56119: CALL_OW 310
56123: PUSH
56124: LD_VAR 0 6
56128: EQUAL
56129: IFFALSE 56149
// ComChangeProfession ( i [ 1 ] , class_mechanic ) else
56131: LD_VAR 0 2
56135: PUSH
56136: LD_INT 1
56138: ARRAY
56139: PPUSH
56140: LD_INT 3
56142: PPUSH
56143: CALL_OW 123
56147: GO 56235
// begin case GetType ( IsInUnit ( i [ 1 ] ) ) of unit_building :
56149: LD_VAR 0 2
56153: PUSH
56154: LD_INT 1
56156: ARRAY
56157: PPUSH
56158: CALL_OW 310
56162: PPUSH
56163: CALL_OW 247
56167: PUSH
56168: LD_INT 3
56170: DOUBLE
56171: EQUAL
56172: IFTRUE 56176
56174: GO 56192
56176: POP
// ComExitBuilding ( i [ 1 ] ) ; unit_vehicle :
56177: LD_VAR 0 2
56181: PUSH
56182: LD_INT 1
56184: ARRAY
56185: PPUSH
56186: CALL_OW 122
56190: GO 56235
56192: LD_INT 2
56194: DOUBLE
56195: EQUAL
56196: IFTRUE 56200
56198: GO 56216
56200: POP
// ComExitVehicle ( i [ 1 ] ) ; else
56201: LD_VAR 0 2
56205: PUSH
56206: LD_INT 1
56208: ARRAY
56209: PPUSH
56210: CALL_OW 121
56214: GO 56235
56216: POP
// ComEnterUnit ( i [ 1 ] , temp_unit ) ; end ;
56217: LD_VAR 0 2
56221: PUSH
56222: LD_INT 1
56224: ARRAY
56225: PPUSH
56226: LD_VAR 0 6
56230: PPUSH
56231: CALL_OW 120
// end ; end ; end else
56235: GO 56824
// begin temp_unit = 0 ;
56237: LD_ADDR_VAR 0 6
56241: PUSH
56242: LD_INT 0
56244: ST_TO_ADDR
// if i [ 1 ] in already_inside_mecs then
56245: LD_VAR 0 2
56249: PUSH
56250: LD_INT 1
56252: ARRAY
56253: PUSH
56254: LD_VAR 0 22
56258: IN
56259: IFFALSE 56282
// begin temp_unit = IsInUnit ( i [ 1 ] ) ;
56261: LD_ADDR_VAR 0 6
56265: PUSH
56266: LD_VAR 0 2
56270: PUSH
56271: LD_INT 1
56273: ARRAY
56274: PPUSH
56275: CALL_OW 310
56279: ST_TO_ADDR
// end else
56280: GO 56595
// begin if ( ai_control_tower_vehicles [ base ] diff temp_list_3 [ 1 ] ) > 0 then
56282: LD_EXP 75
56286: PUSH
56287: LD_VAR 0 12
56291: ARRAY
56292: PUSH
56293: LD_VAR 0 5
56297: PUSH
56298: LD_INT 1
56300: ARRAY
56301: DIFF
56302: PUSH
56303: LD_INT 0
56305: GREATER
56306: IFFALSE 56499
// begin temp_list = [ GetX ( i [ 1 ] ) , GetY ( i [ 1 ] ) ] ;
56308: LD_ADDR_VAR 0 4
56312: PUSH
56313: LD_VAR 0 2
56317: PUSH
56318: LD_INT 1
56320: ARRAY
56321: PPUSH
56322: CALL_OW 250
56326: PUSH
56327: LD_VAR 0 2
56331: PUSH
56332: LD_INT 1
56334: ARRAY
56335: PPUSH
56336: CALL_OW 251
56340: PUSH
56341: EMPTY
56342: LIST
56343: LIST
56344: ST_TO_ADDR
// temp_list_4 = [ ] ;
56345: LD_ADDR_VAR 0 19
56349: PUSH
56350: EMPTY
56351: ST_TO_ADDR
// temp_list_5 = ai_control_tower_vehicles [ base ] diff temp_list_3 [ 1 ] ;
56352: LD_ADDR_VAR 0 20
56356: PUSH
56357: LD_EXP 75
56361: PUSH
56362: LD_VAR 0 12
56366: ARRAY
56367: PUSH
56368: LD_VAR 0 5
56372: PUSH
56373: LD_INT 1
56375: ARRAY
56376: DIFF
56377: ST_TO_ADDR
// for k in temp_list_5 do
56378: LD_ADDR_VAR 0 11
56382: PUSH
56383: LD_VAR 0 20
56387: PUSH
56388: FOR_IN
56389: IFFALSE 56432
// temp_list_4 = temp_list_4 ^ GetDistUnitXY ( k , temp_list [ 1 ] , temp_list [ 2 ] ) ;
56391: LD_ADDR_VAR 0 19
56395: PUSH
56396: LD_VAR 0 19
56400: PUSH
56401: LD_VAR 0 11
56405: PPUSH
56406: LD_VAR 0 4
56410: PUSH
56411: LD_INT 1
56413: ARRAY
56414: PPUSH
56415: LD_VAR 0 4
56419: PUSH
56420: LD_INT 2
56422: ARRAY
56423: PPUSH
56424: CALL_OW 297
56428: ADD
56429: ST_TO_ADDR
56430: GO 56388
56432: POP
56433: POP
// temp_unit = WorstFromListByList ( temp_list_5 , temp_list_4 ) ;
56434: LD_ADDR_VAR 0 6
56438: PUSH
56439: LD_VAR 0 20
56443: PPUSH
56444: LD_VAR 0 19
56448: PPUSH
56449: CALL_OW 78
56453: ST_TO_ADDR
// temp_list = temp_list_3 [ 1 ] ^ temp_unit ;
56454: LD_ADDR_VAR 0 4
56458: PUSH
56459: LD_VAR 0 5
56463: PUSH
56464: LD_INT 1
56466: ARRAY
56467: PUSH
56468: LD_VAR 0 6
56472: ADD
56473: ST_TO_ADDR
// temp_list_3 = Replace ( temp_list_3 , 1 , temp_list ) ;
56474: LD_ADDR_VAR 0 5
56478: PUSH
56479: LD_VAR 0 5
56483: PPUSH
56484: LD_INT 1
56486: PPUSH
56487: LD_VAR 0 4
56491: PPUSH
56492: CALL_OW 1
56496: ST_TO_ADDR
// end else
56497: GO 56595
// if IsOk ( ai_control_tower [ base ] ) and temp_list_3 [ 2 ] < 3 then
56499: LD_EXP 45
56503: PUSH
56504: LD_VAR 0 12
56508: ARRAY
56509: PPUSH
56510: CALL_OW 302
56514: PUSH
56515: LD_VAR 0 5
56519: PUSH
56520: LD_INT 2
56522: ARRAY
56523: PUSH
56524: LD_INT 3
56526: LESS
56527: AND
56528: IFFALSE 56579
// begin temp_unit = ai_control_tower [ base ] ;
56530: LD_ADDR_VAR 0 6
56534: PUSH
56535: LD_EXP 45
56539: PUSH
56540: LD_VAR 0 12
56544: ARRAY
56545: ST_TO_ADDR
// temp_list_3 = Replace ( temp_list_3 , 2 , temp_list_3 [ 2 ] + 1 ) ;
56546: LD_ADDR_VAR 0 5
56550: PUSH
56551: LD_VAR 0 5
56555: PPUSH
56556: LD_INT 2
56558: PPUSH
56559: LD_VAR 0 5
56563: PUSH
56564: LD_INT 2
56566: ARRAY
56567: PUSH
56568: LD_INT 1
56570: PLUS
56571: PPUSH
56572: CALL_OW 1
56576: ST_TO_ADDR
// end else
56577: GO 56595
// temp_list_2 = temp_list_2 ^ i ;
56579: LD_ADDR_VAR 0 14
56583: PUSH
56584: LD_VAR 0 14
56588: PUSH
56589: LD_VAR 0 2
56593: ADD
56594: ST_TO_ADDR
// end ; if temp_unit > 0 then
56595: LD_VAR 0 6
56599: PUSH
56600: LD_INT 0
56602: GREATER
56603: IFFALSE 56824
// begin k = IsInUnit ( i [ 1 ] ) ;
56605: LD_ADDR_VAR 0 11
56609: PUSH
56610: LD_VAR 0 2
56614: PUSH
56615: LD_INT 1
56617: ARRAY
56618: PPUSH
56619: CALL_OW 310
56623: ST_TO_ADDR
// if k <> temp_unit then
56624: LD_VAR 0 11
56628: PUSH
56629: LD_VAR 0 6
56633: NONEQUAL
56634: IFFALSE 56715
// begin case GetType ( k ) of unit_building :
56636: LD_VAR 0 11
56640: PPUSH
56641: CALL_OW 247
56645: PUSH
56646: LD_INT 3
56648: DOUBLE
56649: EQUAL
56650: IFTRUE 56654
56652: GO 56670
56654: POP
// ComExitBuilding ( i [ 1 ] ) ; unit_vehicle :
56655: LD_VAR 0 2
56659: PUSH
56660: LD_INT 1
56662: ARRAY
56663: PPUSH
56664: CALL_OW 122
56668: GO 56713
56670: LD_INT 2
56672: DOUBLE
56673: EQUAL
56674: IFTRUE 56678
56676: GO 56694
56678: POP
// ComExitVehicle ( i [ 1 ] ) ; else
56679: LD_VAR 0 2
56683: PUSH
56684: LD_INT 1
56686: ARRAY
56687: PPUSH
56688: CALL_OW 121
56692: GO 56713
56694: POP
// ComEnterUnit ( i [ 1 ] , temp_unit ) ; end ;
56695: LD_VAR 0 2
56699: PUSH
56700: LD_INT 1
56702: ARRAY
56703: PPUSH
56704: LD_VAR 0 6
56708: PPUSH
56709: CALL_OW 120
// end else
56713: GO 56824
// for k in i [ 2 ] do
56715: LD_ADDR_VAR 0 11
56719: PUSH
56720: LD_VAR 0 2
56724: PUSH
56725: LD_INT 2
56727: ARRAY
56728: PUSH
56729: FOR_IN
56730: IFFALSE 56822
// if IsOk ( k ) and IsControledBy ( k ) <> i [ 1 ] then
56732: LD_VAR 0 11
56736: PPUSH
56737: CALL_OW 302
56741: PUSH
56742: LD_VAR 0 11
56746: PPUSH
56747: CALL_OW 312
56751: PUSH
56752: LD_VAR 0 2
56756: PUSH
56757: LD_INT 1
56759: ARRAY
56760: NONEQUAL
56761: AND
56762: IFFALSE 56784
// ComLinkTo ( k , i [ 1 ] ) else
56764: LD_VAR 0 11
56768: PPUSH
56769: LD_VAR 0 2
56773: PUSH
56774: LD_INT 1
56776: ARRAY
56777: PPUSH
56778: CALL_OW 135
56782: GO 56820
// if not IsOk ( k ) and IsControledBy ( k ) > 0 then
56784: LD_VAR 0 11
56788: PPUSH
56789: CALL_OW 302
56793: NOT
56794: PUSH
56795: LD_VAR 0 11
56799: PPUSH
56800: CALL_OW 312
56804: PUSH
56805: LD_INT 0
56807: GREATER
56808: AND
56809: IFFALSE 56820
// ComUnlink ( k ) ;
56811: LD_VAR 0 11
56815: PPUSH
56816: CALL_OW 136
56820: GO 56729
56822: POP
56823: POP
// end ; end ; end ;
56824: GO 55990
56826: POP
56827: POP
// DistributeHumansToBuildings ( base , temp_list_2 , UnitFilter ( ai_facts [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
56828: LD_VAR 0 12
56832: PPUSH
56833: LD_VAR 0 14
56837: PPUSH
56838: LD_EXP 37
56842: PUSH
56843: LD_VAR 0 12
56847: ARRAY
56848: PPUSH
56849: LD_INT 50
56851: PUSH
56852: EMPTY
56853: LIST
56854: PUSH
56855: LD_INT 3
56857: PUSH
56858: LD_INT 57
56860: PUSH
56861: EMPTY
56862: LIST
56863: PUSH
56864: EMPTY
56865: LIST
56866: LIST
56867: PUSH
56868: EMPTY
56869: LIST
56870: LIST
56871: PPUSH
56872: CALL_OW 72
56876: PPUSH
56877: LD_INT 3
56879: PPUSH
56880: LD_INT 6
56882: PPUSH
56883: LD_INT 1
56885: PPUSH
56886: LD_INT 0
56888: PPUSH
56889: CALL 35428 0 7
// end ; end ; end ;
56893: GO 48241
56895: POP
56896: POP
// until false ;
56897: LD_INT 0
56899: IFFALSE 48224
// end ;
56901: PPOPN 28
56903: END
// function FindDriverHelper ( vehicles_list , mechanics_list , vehicles_drivers ) ; var i , k , temp_unit ; begin
56904: LD_INT 0
56906: PPUSH
56907: PPUSH
56908: PPUSH
56909: PPUSH
// for i in vehicles_list do
56910: LD_ADDR_VAR 0 5
56914: PUSH
56915: LD_VAR 0 1
56919: PUSH
56920: FOR_IN
56921: IFFALSE 57189
// begin if mechanics_list = 0 then
56923: LD_VAR 0 2
56927: PUSH
56928: LD_INT 0
56930: EQUAL
56931: IFFALSE 56935
// break ;
56933: GO 57189
// k = false ;
56935: LD_ADDR_VAR 0 6
56939: PUSH
56940: LD_INT 0
56942: ST_TO_ADDR
// if vehicles_drivers < i then
56943: LD_VAR 0 3
56947: PUSH
56948: LD_VAR 0 5
56952: LESS
56953: IFFALSE 56965
// k = true else
56955: LD_ADDR_VAR 0 6
56959: PUSH
56960: LD_INT 1
56962: ST_TO_ADDR
56963: GO 56992
// if not vehicles_drivers [ i ] in mechanics_list then
56965: LD_VAR 0 3
56969: PUSH
56970: LD_VAR 0 5
56974: ARRAY
56975: PUSH
56976: LD_VAR 0 2
56980: IN
56981: NOT
56982: IFFALSE 56992
// k = true ;
56984: LD_ADDR_VAR 0 6
56988: PUSH
56989: LD_INT 1
56991: ST_TO_ADDR
// if k then
56992: LD_VAR 0 6
56996: IFFALSE 57033
// vehicles_drivers = Replace ( vehicles_drivers , i , AllNearestUnitToUnit ( mechanics_list , i ) ) ;
56998: LD_ADDR_VAR 0 3
57002: PUSH
57003: LD_VAR 0 3
57007: PPUSH
57008: LD_VAR 0 5
57012: PPUSH
57013: LD_VAR 0 2
57017: PPUSH
57018: LD_VAR 0 5
57022: PPUSH
57023: CALL_OW 75
57027: PPUSH
57028: CALL_OW 1
57032: ST_TO_ADDR
// if vehicles_drivers [ i ] > 0 then
57033: LD_VAR 0 3
57037: PUSH
57038: LD_VAR 0 5
57042: ARRAY
57043: PUSH
57044: LD_INT 0
57046: GREATER
57047: IFFALSE 57187
// begin temp_unit = IsInUnit ( vehicles_drivers [ i ] ) ;
57049: LD_ADDR_VAR 0 7
57053: PUSH
57054: LD_VAR 0 3
57058: PUSH
57059: LD_VAR 0 5
57063: ARRAY
57064: PPUSH
57065: CALL_OW 310
57069: ST_TO_ADDR
// if temp_unit <> i then
57070: LD_VAR 0 7
57074: PUSH
57075: LD_VAR 0 5
57079: NONEQUAL
57080: IFFALSE 57165
// case GetType ( temp_unit ) of unit_vehicle :
57082: LD_VAR 0 7
57086: PPUSH
57087: CALL_OW 247
57091: PUSH
57092: LD_INT 2
57094: DOUBLE
57095: EQUAL
57096: IFTRUE 57100
57098: GO 57118
57100: POP
// ComExitVehicle ( vehicles_drivers [ i ] ) ; unit_building :
57101: LD_VAR 0 3
57105: PUSH
57106: LD_VAR 0 5
57110: ARRAY
57111: PPUSH
57112: CALL_OW 121
57116: GO 57165
57118: LD_INT 3
57120: DOUBLE
57121: EQUAL
57122: IFTRUE 57126
57124: GO 57144
57126: POP
// ComExitBuilding ( vehicles_drivers [ i ] ) ; else
57127: LD_VAR 0 3
57131: PUSH
57132: LD_VAR 0 5
57136: ARRAY
57137: PPUSH
57138: CALL_OW 122
57142: GO 57165
57144: POP
// ComEnterUnit ( vehicles_drivers [ i ] , i ) ; end ;
57145: LD_VAR 0 3
57149: PUSH
57150: LD_VAR 0 5
57154: ARRAY
57155: PPUSH
57156: LD_VAR 0 5
57160: PPUSH
57161: CALL_OW 120
// mechanics_list = mechanics_list diff vehicles_drivers [ i ] ;
57165: LD_ADDR_VAR 0 2
57169: PUSH
57170: LD_VAR 0 2
57174: PUSH
57175: LD_VAR 0 3
57179: PUSH
57180: LD_VAR 0 5
57184: ARRAY
57185: DIFF
57186: ST_TO_ADDR
// end ; end ;
57187: GO 56920
57189: POP
57190: POP
// result = [ mechanics_list , vehicles_drivers ] ;
57191: LD_ADDR_VAR 0 4
57195: PUSH
57196: LD_VAR 0 2
57200: PUSH
57201: LD_VAR 0 3
57205: PUSH
57206: EMPTY
57207: LIST
57208: LIST
57209: ST_TO_ADDR
// end ;
57210: LD_VAR 0 4
57214: RET
// function FindBestCraneDriver ( base ) ; var i , temp_list ; begin
57215: LD_INT 0
57217: PPUSH
57218: PPUSH
57219: PPUSH
// if ai_mechanics_defend [ base ] = 0 then
57220: LD_EXP 29
57224: PUSH
57225: LD_VAR 0 1
57229: ARRAY
57230: PUSH
57231: LD_INT 0
57233: EQUAL
57234: IFFALSE 57246
// begin result = 0 ;
57236: LD_ADDR_VAR 0 2
57240: PUSH
57241: LD_INT 0
57243: ST_TO_ADDR
// exit ;
57244: GO 57340
// end ; temp_list = [ ] ;
57246: LD_ADDR_VAR 0 4
57250: PUSH
57251: EMPTY
57252: ST_TO_ADDR
// for i in ai_mechanics_defend [ base ] do
57253: LD_ADDR_VAR 0 3
57257: PUSH
57258: LD_EXP 29
57262: PUSH
57263: LD_VAR 0 1
57267: ARRAY
57268: PUSH
57269: FOR_IN
57270: IFFALSE 57312
// temp_list = temp_list ^ ( GetSkill ( i , skill_engineering ) + GetSkill ( i , skill_mechanical ) ) ;
57272: LD_ADDR_VAR 0 4
57276: PUSH
57277: LD_VAR 0 4
57281: PUSH
57282: LD_VAR 0 3
57286: PPUSH
57287: LD_INT 2
57289: PPUSH
57290: CALL_OW 259
57294: PUSH
57295: LD_VAR 0 3
57299: PPUSH
57300: LD_INT 3
57302: PPUSH
57303: CALL_OW 259
57307: PLUS
57308: ADD
57309: ST_TO_ADDR
57310: GO 57269
57312: POP
57313: POP
// result = BestFromListByList ( ai_mechanics_defend [ base ] , temp_list ) ;
57314: LD_ADDR_VAR 0 2
57318: PUSH
57319: LD_EXP 29
57323: PUSH
57324: LD_VAR 0 1
57328: ARRAY
57329: PPUSH
57330: LD_VAR 0 4
57334: PPUSH
57335: CALL_OW 79
57339: ST_TO_ADDR
// end ;
57340: LD_VAR 0 2
57344: RET
// function MaxNumWarVehicles ( base ) ; begin
57345: LD_INT 0
57347: PPUSH
// result = ai_max_num_vehicles_defend [ base ] ;
57348: LD_ADDR_VAR 0 2
57352: PUSH
57353: LD_EXP 93
57357: PUSH
57358: LD_VAR 0 1
57362: ARRAY
57363: ST_TO_ADDR
// end ;
57364: LD_VAR 0 2
57368: RET
// every 0 0$1 + 0 0$0.6 do var i , temp_value , temp_unit , temp_list , base , idle_factories , fact , b ; var vehicle_prod_delay , under_attack ;
57369: GO 57371
57371: DISABLE
57372: LD_INT 0
57374: PPUSH
57375: PPUSH
57376: PPUSH
57377: PPUSH
57378: PPUSH
57379: PPUSH
57380: PPUSH
57381: PPUSH
57382: PPUSH
57383: PPUSH
// begin vehicle_prod_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
57384: LD_ADDR_VAR 0 9
57388: PUSH
57389: LD_INT 0
57391: PUSH
57392: LD_INT 0
57394: PUSH
57395: LD_INT 0
57397: PUSH
57398: EMPTY
57399: LIST
57400: LIST
57401: LIST
57402: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
57403: LD_INT 35
57405: PPUSH
57406: CALL_OW 67
// for base in ai_bases do
57410: LD_ADDR_VAR 0 5
57414: PUSH
57415: LD_EXP 25
57419: PUSH
57420: FOR_IN
57421: IFFALSE 60187
// begin if base = 2 then
57423: LD_VAR 0 5
57427: PUSH
57428: LD_INT 2
57430: EQUAL
57431: IFFALSE 57435
// continue ;
57433: GO 57420
// under_attack = BaseUnderAttack ( base , - 1 ) ;
57435: LD_ADDR_VAR 0 10
57439: PUSH
57440: LD_VAR 0 5
57444: PPUSH
57445: LD_INT 1
57447: NEG
57448: PPUSH
57449: CALL 46094 0 2
57453: ST_TO_ADDR
// if under_attack and ai_vehicles_defend [ base ] >= [ 0 , 1 , 2 ] [ difficulty ] then
57454: LD_VAR 0 10
57458: PUSH
57459: LD_EXP 49
57463: PUSH
57464: LD_VAR 0 5
57468: ARRAY
57469: PUSH
57470: LD_INT 0
57472: PUSH
57473: LD_INT 1
57475: PUSH
57476: LD_INT 2
57478: PUSH
57479: EMPTY
57480: LIST
57481: LIST
57482: LIST
57483: PUSH
57484: LD_OWVAR 67
57488: ARRAY
57489: GREATEREQUAL
57490: AND
57491: IFFALSE 57533
// begin vehicle_prod_delay = Replace ( vehicle_prod_delay , base , [ 1 1$15 , 0 0$45 , 0 0$30 ] [ difficulty ] ) ;
57493: LD_ADDR_VAR 0 9
57497: PUSH
57498: LD_VAR 0 9
57502: PPUSH
57503: LD_VAR 0 5
57507: PPUSH
57508: LD_INT 2625
57510: PUSH
57511: LD_INT 1575
57513: PUSH
57514: LD_INT 1050
57516: PUSH
57517: EMPTY
57518: LIST
57519: LIST
57520: LIST
57521: PUSH
57522: LD_OWVAR 67
57526: ARRAY
57527: PPUSH
57528: CALL_OW 1
57532: ST_TO_ADDR
// end ; idle_factories = [ ] ;
57533: LD_ADDR_VAR 0 6
57537: PUSH
57538: EMPTY
57539: ST_TO_ADDR
// for i in ai_facts [ base ] do
57540: LD_ADDR_VAR 0 1
57544: PUSH
57545: LD_EXP 37
57549: PUSH
57550: LD_VAR 0 5
57554: ARRAY
57555: PUSH
57556: FOR_IN
57557: IFFALSE 57668
// if BuildingStatus ( i ) = bs_idle and IsOk ( i ) and GetBType ( i ) = b_factory then
57559: LD_VAR 0 1
57563: PPUSH
57564: CALL_OW 461
57568: PUSH
57569: LD_INT 2
57571: EQUAL
57572: PUSH
57573: LD_VAR 0 1
57577: PPUSH
57578: CALL_OW 302
57582: AND
57583: PUSH
57584: LD_VAR 0 1
57588: PPUSH
57589: CALL_OW 266
57593: PUSH
57594: LD_INT 3
57596: EQUAL
57597: AND
57598: IFFALSE 57666
// begin b = true ;
57600: LD_ADDR_VAR 0 8
57604: PUSH
57605: LD_INT 1
57607: ST_TO_ADDR
// if ai_facts_with_ext_rebuild_map >= i then
57608: LD_EXP 85
57612: PUSH
57613: LD_VAR 0 1
57617: GREATEREQUAL
57618: IFFALSE 57644
// if ai_facts_with_ext_rebuild_map [ i ] > 0 then
57620: LD_EXP 85
57624: PUSH
57625: LD_VAR 0 1
57629: ARRAY
57630: PUSH
57631: LD_INT 0
57633: GREATER
57634: IFFALSE 57644
// b = false ;
57636: LD_ADDR_VAR 0 8
57640: PUSH
57641: LD_INT 0
57643: ST_TO_ADDR
// if b then
57644: LD_VAR 0 8
57648: IFFALSE 57666
// idle_factories = idle_factories ^ i ;
57650: LD_ADDR_VAR 0 6
57654: PUSH
57655: LD_VAR 0 6
57659: PUSH
57660: LD_VAR 0 1
57664: ADD
57665: ST_TO_ADDR
// end ;
57666: GO 57556
57668: POP
57669: POP
// if idle_factories = 0 then
57670: LD_VAR 0 6
57674: PUSH
57675: LD_INT 0
57677: EQUAL
57678: IFFALSE 57682
// continue ;
57680: GO 57420
// temp_value = false ;
57682: LD_ADDR_VAR 0 2
57686: PUSH
57687: LD_INT 0
57689: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
57690: LD_ADDR_VAR 0 1
57694: PUSH
57695: LD_EXP 47
57699: PUSH
57700: LD_VAR 0 5
57704: ARRAY
57705: PUSH
57706: FOR_IN
57707: IFFALSE 57962
// if i [ 4 ] in [ b_bunker , b_turret ] then
57709: LD_VAR 0 1
57713: PUSH
57714: LD_INT 4
57716: ARRAY
57717: PUSH
57718: LD_INT 32
57720: PUSH
57721: LD_INT 33
57723: PUSH
57724: EMPTY
57725: LIST
57726: LIST
57727: IN
57728: IFFALSE 57960
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
57730: LD_ADDR_VAR 0 3
57734: PUSH
57735: LD_VAR 0 1
57739: PUSH
57740: LD_INT 1
57742: ARRAY
57743: PPUSH
57744: LD_VAR 0 1
57748: PUSH
57749: LD_INT 2
57751: ARRAY
57752: PPUSH
57753: CALL_OW 428
57757: ST_TO_ADDR
// if GetBType ( temp_unit ) in [ b_bunker , b_turret ] and not IsConstructed ( temp_unit ) and GetBWeapon ( temp_unit ) <> i [ 7 ] then
57758: LD_VAR 0 3
57762: PPUSH
57763: CALL_OW 266
57767: PUSH
57768: LD_INT 32
57770: PUSH
57771: LD_INT 33
57773: PUSH
57774: EMPTY
57775: LIST
57776: LIST
57777: IN
57778: PUSH
57779: LD_VAR 0 3
57783: PPUSH
57784: CALL_OW 304
57788: NOT
57789: AND
57790: PUSH
57791: LD_VAR 0 3
57795: PPUSH
57796: CALL_OW 269
57800: PUSH
57801: LD_VAR 0 1
57805: PUSH
57806: LD_INT 7
57808: ARRAY
57809: NONEQUAL
57810: AND
57811: IFFALSE 57952
// for fact in idle_factories do
57813: LD_ADDR_VAR 0 7
57817: PUSH
57818: LD_VAR 0 6
57822: PUSH
57823: FOR_IN
57824: IFFALSE 57950
// if IsWeaponFactory ( fact ) then
57826: LD_VAR 0 7
57830: PPUSH
57831: CALL 60196 0 1
57835: IFFALSE 57948
// begin if base = 1 and i [ 7 ] = ru_time_lapser then
57837: LD_VAR 0 5
57841: PUSH
57842: LD_INT 1
57844: EQUAL
57845: PUSH
57846: LD_VAR 0 1
57850: PUSH
57851: LD_INT 7
57853: ARRAY
57854: PUSH
57855: LD_INT 49
57857: EQUAL
57858: AND
57859: IFFALSE 57920
// begin b = CanRusConstructThis ( i [ 7 ] , true ) ;
57861: LD_ADDR_VAR 0 8
57865: PUSH
57866: LD_VAR 0 1
57870: PUSH
57871: LD_INT 7
57873: ARRAY
57874: PPUSH
57875: LD_INT 1
57877: PPUSH
57878: CALL 60262 0 2
57882: ST_TO_ADDR
// if b in [ 0 , 2 ] then
57883: LD_VAR 0 8
57887: PUSH
57888: LD_INT 0
57890: PUSH
57891: LD_INT 2
57893: PUSH
57894: EMPTY
57895: LIST
57896: LIST
57897: IN
57898: IFFALSE 57920
// begin if b = 0 then
57900: LD_VAR 0 8
57904: PUSH
57905: LD_INT 0
57907: EQUAL
57908: IFFALSE 57918
// temp_value = true ;
57910: LD_ADDR_VAR 0 2
57914: PUSH
57915: LD_INT 1
57917: ST_TO_ADDR
// break ;
57918: GO 57950
// end ; end ; ComPlaceWeapon ( temp_unit , i [ 7 ] ) ;
57920: LD_VAR 0 3
57924: PPUSH
57925: LD_VAR 0 1
57929: PUSH
57930: LD_INT 7
57932: ARRAY
57933: PPUSH
57934: CALL_OW 148
// temp_value = true ;
57938: LD_ADDR_VAR 0 2
57942: PUSH
57943: LD_INT 1
57945: ST_TO_ADDR
// break ;
57946: GO 57950
// end ;
57948: GO 57823
57950: POP
57951: POP
// if temp_value then
57952: LD_VAR 0 2
57956: IFFALSE 57960
// break ;
57958: GO 57962
// end ;
57960: GO 57706
57962: POP
57963: POP
// if temp_value then
57964: LD_VAR 0 2
57968: IFFALSE 57972
// continue ;
57970: GO 57420
// if not under_attack and base = 1 then
57972: LD_VAR 0 10
57976: NOT
57977: PUSH
57978: LD_VAR 0 5
57982: PUSH
57983: LD_INT 1
57985: EQUAL
57986: AND
57987: IFFALSE 58498
// begin if ( ai_cargo_bay [ 3 ] = 0 and not ai_cargo_bay_under_construction [ 3 ] and tick - ai_cargo_bay_destroy_tick [ 3 ] >= [ 6 6$0 , 4 4$30 , 3 3$0 ] [ difficulty ] and UnitFilter ( ai_units_to_export [ 1 ] , [ [ f_type , unit_vehicle ] , [ f_weapon , ru_cargo_bay ] ] ) = 0 and 3 in ai_bases ) then
57989: LD_EXP 65
57993: PUSH
57994: LD_INT 3
57996: ARRAY
57997: PUSH
57998: LD_INT 0
58000: EQUAL
58001: PUSH
58002: LD_EXP 66
58006: PUSH
58007: LD_INT 3
58009: ARRAY
58010: NOT
58011: AND
58012: PUSH
58013: LD_OWVAR 1
58017: PUSH
58018: LD_EXP 67
58022: PUSH
58023: LD_INT 3
58025: ARRAY
58026: MINUS
58027: PUSH
58028: LD_INT 12600
58030: PUSH
58031: LD_INT 9450
58033: PUSH
58034: LD_INT 6300
58036: PUSH
58037: EMPTY
58038: LIST
58039: LIST
58040: LIST
58041: PUSH
58042: LD_OWVAR 67
58046: ARRAY
58047: GREATEREQUAL
58048: AND
58049: PUSH
58050: LD_EXP 80
58054: PUSH
58055: LD_INT 1
58057: ARRAY
58058: PPUSH
58059: LD_INT 21
58061: PUSH
58062: LD_INT 2
58064: PUSH
58065: EMPTY
58066: LIST
58067: LIST
58068: PUSH
58069: LD_INT 34
58071: PUSH
58072: LD_INT 51
58074: PUSH
58075: EMPTY
58076: LIST
58077: LIST
58078: PUSH
58079: EMPTY
58080: LIST
58081: LIST
58082: PPUSH
58083: CALL_OW 72
58087: PUSH
58088: LD_INT 0
58090: EQUAL
58091: AND
58092: PUSH
58093: LD_INT 3
58095: PUSH
58096: LD_EXP 25
58100: IN
58101: AND
58102: IFFALSE 58498
// begin temp_unit = 0 ;
58104: LD_ADDR_VAR 0 3
58108: PUSH
58109: LD_INT 0
58111: ST_TO_ADDR
// temp_list = [ ] ;
58112: LD_ADDR_VAR 0 4
58116: PUSH
58117: EMPTY
58118: ST_TO_ADDR
// for fact in idle_factories do
58119: LD_ADDR_VAR 0 7
58123: PUSH
58124: LD_VAR 0 6
58128: PUSH
58129: FOR_IN
58130: IFFALSE 58374
// begin case GetBaseNation ( base ) of nation_american :
58132: LD_VAR 0 5
58136: PPUSH
58137: CALL 27180 0 1
58141: PUSH
58142: LD_INT 1
58144: DOUBLE
58145: EQUAL
58146: IFTRUE 58150
58148: GO 58218
58150: POP
// begin if us_medium_tracked in AvailableChassisList ( fact ) and us_cargo_bay in AvailableWeaponList ( fact ) then
58151: LD_INT 3
58153: PUSH
58154: LD_VAR 0 7
58158: PPUSH
58159: CALL_OW 475
58163: IN
58164: PUSH
58165: LD_INT 12
58167: PUSH
58168: LD_VAR 0 7
58172: PPUSH
58173: CALL_OW 478
58177: IN
58178: AND
58179: IFFALSE 58216
// begin temp_unit = fact ;
58181: LD_ADDR_VAR 0 3
58185: PUSH
58186: LD_VAR 0 7
58190: ST_TO_ADDR
// temp_list = [ us_medium_tracked , engine_siberite , control_computer , us_cargo_bay ] ;
58191: LD_ADDR_VAR 0 4
58195: PUSH
58196: LD_INT 3
58198: PUSH
58199: LD_INT 3
58201: PUSH
58202: LD_INT 3
58204: PUSH
58205: LD_INT 12
58207: PUSH
58208: EMPTY
58209: LIST
58210: LIST
58211: LIST
58212: LIST
58213: ST_TO_ADDR
// break ;
58214: GO 58374
// end ; end ; nation_arabian :
58216: GO 58372
58218: LD_INT 2
58220: DOUBLE
58221: EQUAL
58222: IFTRUE 58226
58224: GO 58310
58226: POP
// begin if ar_half_tracked in AvailableChassisList ( fact ) and ar_cargo_bay in AvailableWeaponList ( fact ) and ai_control_tower_vehicles [ base ] > 0 then
58227: LD_INT 14
58229: PUSH
58230: LD_VAR 0 7
58234: PPUSH
58235: CALL_OW 475
58239: IN
58240: PUSH
58241: LD_INT 32
58243: PUSH
58244: LD_VAR 0 7
58248: PPUSH
58249: CALL_OW 478
58253: IN
58254: AND
58255: PUSH
58256: LD_EXP 75
58260: PUSH
58261: LD_VAR 0 5
58265: ARRAY
58266: PUSH
58267: LD_INT 0
58269: GREATER
58270: AND
58271: IFFALSE 58308
// begin temp_unit = fact ;
58273: LD_ADDR_VAR 0 3
58277: PUSH
58278: LD_VAR 0 7
58282: ST_TO_ADDR
// temp_list = [ ar_half_tracked , engine_siberite , control_remote , ar_cargo_bay ] ;
58283: LD_ADDR_VAR 0 4
58287: PUSH
58288: LD_INT 14
58290: PUSH
58291: LD_INT 3
58293: PUSH
58294: LD_INT 2
58296: PUSH
58297: LD_INT 32
58299: PUSH
58300: EMPTY
58301: LIST
58302: LIST
58303: LIST
58304: LIST
58305: ST_TO_ADDR
// break ;
58306: GO 58374
// end ; end ; nation_russian :
58308: GO 58372
58310: LD_INT 3
58312: DOUBLE
58313: EQUAL
58314: IFTRUE 58318
58316: GO 58371
58318: POP
// begin if ru_medium_tracked in AvailableChassisList ( fact ) then
58319: LD_INT 22
58321: PUSH
58322: LD_VAR 0 7
58326: PPUSH
58327: CALL_OW 475
58331: IN
58332: IFFALSE 58369
// begin temp_unit = fact ;
58334: LD_ADDR_VAR 0 3
58338: PUSH
58339: LD_VAR 0 7
58343: ST_TO_ADDR
// temp_list = [ ru_medium_tracked , engine_combustion , control_computer , ru_cargo_bay ] ;
58344: LD_ADDR_VAR 0 4
58348: PUSH
58349: LD_INT 22
58351: PUSH
58352: LD_INT 1
58354: PUSH
58355: LD_INT 3
58357: PUSH
58358: LD_INT 51
58360: PUSH
58361: EMPTY
58362: LIST
58363: LIST
58364: LIST
58365: LIST
58366: ST_TO_ADDR
// break ;
58367: GO 58374
// end ; end ; end ;
58369: GO 58372
58371: POP
// end ;
58372: GO 58129
58374: POP
58375: POP
// if temp_unit > 0 then
58376: LD_VAR 0 3
58380: PUSH
58381: LD_INT 0
58383: GREATER
58384: IFFALSE 58498
// begin b = CanRusConstructThis ( temp_list [ 4 ] , true ) ;
58386: LD_ADDR_VAR 0 8
58390: PUSH
58391: LD_VAR 0 4
58395: PUSH
58396: LD_INT 4
58398: ARRAY
58399: PPUSH
58400: LD_INT 1
58402: PPUSH
58403: CALL 60262 0 2
58407: ST_TO_ADDR
// if b = 0 then
58408: LD_VAR 0 8
58412: PUSH
58413: LD_INT 0
58415: EQUAL
58416: IFFALSE 58420
// continue ;
58418: GO 57420
// if b = 1 then
58420: LD_VAR 0 8
58424: PUSH
58425: LD_INT 1
58427: EQUAL
58428: IFFALSE 58498
// begin ComConstruct ( fact , temp_list [ 1 ] , temp_list [ 2 ] , temp_list [ 3 ] , temp_list [ 4 ] ) ;
58430: LD_VAR 0 7
58434: PPUSH
58435: LD_VAR 0 4
58439: PUSH
58440: LD_INT 1
58442: ARRAY
58443: PPUSH
58444: LD_VAR 0 4
58448: PUSH
58449: LD_INT 2
58451: ARRAY
58452: PPUSH
58453: LD_VAR 0 4
58457: PUSH
58458: LD_INT 3
58460: ARRAY
58461: PPUSH
58462: LD_VAR 0 4
58466: PUSH
58467: LD_INT 4
58469: ARRAY
58470: PPUSH
58471: CALL_OW 125
// ai_cargo_bay_under_construction = Replace ( ai_cargo_bay_under_construction , 3 , true ) ;
58475: LD_ADDR_EXP 66
58479: PUSH
58480: LD_EXP 66
58484: PPUSH
58485: LD_INT 3
58487: PPUSH
58488: LD_INT 1
58490: PPUSH
58491: CALL_OW 1
58495: ST_TO_ADDR
// continue ;
58496: GO 57420
// end ; end ; end ; end ; if base = 1 and difficulty > 1 then
58498: LD_VAR 0 5
58502: PUSH
58503: LD_INT 1
58505: EQUAL
58506: PUSH
58507: LD_OWVAR 67
58511: PUSH
58512: LD_INT 1
58514: GREATER
58515: AND
58516: IFFALSE 58939
// begin if ai_crane [ base ] = 0 and not ai_crane_under_construction [ base ] and tick - ai_crane_destroy_tick [ base ] >= [ 8 8$0 , 6 6$0 , 4 4$0 ] [ difficulty ] then
58518: LD_EXP 68
58522: PUSH
58523: LD_VAR 0 5
58527: ARRAY
58528: PUSH
58529: LD_INT 0
58531: EQUAL
58532: PUSH
58533: LD_EXP 69
58537: PUSH
58538: LD_VAR 0 5
58542: ARRAY
58543: NOT
58544: AND
58545: PUSH
58546: LD_OWVAR 1
58550: PUSH
58551: LD_EXP 70
58555: PUSH
58556: LD_VAR 0 5
58560: ARRAY
58561: MINUS
58562: PUSH
58563: LD_INT 16800
58565: PUSH
58566: LD_INT 12600
58568: PUSH
58569: LD_INT 8400
58571: PUSH
58572: EMPTY
58573: LIST
58574: LIST
58575: LIST
58576: PUSH
58577: LD_OWVAR 67
58581: ARRAY
58582: GREATEREQUAL
58583: AND
58584: IFFALSE 58939
// begin temp_unit = 0 ;
58586: LD_ADDR_VAR 0 3
58590: PUSH
58591: LD_INT 0
58593: ST_TO_ADDR
// temp_list = [ ] ;
58594: LD_ADDR_VAR 0 4
58598: PUSH
58599: EMPTY
58600: ST_TO_ADDR
// for fact in idle_factories do
58601: LD_ADDR_VAR 0 7
58605: PUSH
58606: LD_VAR 0 6
58610: PUSH
58611: FOR_IN
58612: IFFALSE 58764
// begin case GetBaseNation ( base ) of nation_american :
58614: LD_VAR 0 5
58618: PPUSH
58619: CALL 27180 0 1
58623: PUSH
58624: LD_INT 1
58626: DOUBLE
58627: EQUAL
58628: IFTRUE 58632
58630: GO 58700
58632: POP
// begin if us_medium_tracked in AvailableChassisList ( fact ) and us_crane in AvailableWeaponList ( fact ) then
58633: LD_INT 3
58635: PUSH
58636: LD_VAR 0 7
58640: PPUSH
58641: CALL_OW 475
58645: IN
58646: PUSH
58647: LD_INT 13
58649: PUSH
58650: LD_VAR 0 7
58654: PPUSH
58655: CALL_OW 478
58659: IN
58660: AND
58661: IFFALSE 58698
// begin temp_unit = fact ;
58663: LD_ADDR_VAR 0 3
58667: PUSH
58668: LD_VAR 0 7
58672: ST_TO_ADDR
// temp_list = [ us_medium_tracked , engine_siberite , control_manual , us_crane ] ;
58673: LD_ADDR_VAR 0 4
58677: PUSH
58678: LD_INT 3
58680: PUSH
58681: LD_INT 3
58683: PUSH
58684: LD_INT 1
58686: PUSH
58687: LD_INT 13
58689: PUSH
58690: EMPTY
58691: LIST
58692: LIST
58693: LIST
58694: LIST
58695: ST_TO_ADDR
// break ;
58696: GO 58764
// end ; end ; nation_russian :
58698: GO 58762
58700: LD_INT 3
58702: DOUBLE
58703: EQUAL
58704: IFTRUE 58708
58706: GO 58761
58708: POP
// begin if ru_medium_tracked in AvailableChassisList ( fact ) then
58709: LD_INT 22
58711: PUSH
58712: LD_VAR 0 7
58716: PPUSH
58717: CALL_OW 475
58721: IN
58722: IFFALSE 58759
// begin temp_unit = fact ;
58724: LD_ADDR_VAR 0 3
58728: PUSH
58729: LD_VAR 0 7
58733: ST_TO_ADDR
// temp_list = [ ru_medium_tracked , engine_combustion , control_manual , ru_crane ] ;
58734: LD_ADDR_VAR 0 4
58738: PUSH
58739: LD_INT 22
58741: PUSH
58742: LD_INT 1
58744: PUSH
58745: LD_INT 1
58747: PUSH
58748: LD_INT 52
58750: PUSH
58751: EMPTY
58752: LIST
58753: LIST
58754: LIST
58755: LIST
58756: ST_TO_ADDR
// break ;
58757: GO 58764
// end ; end ; end ;
58759: GO 58762
58761: POP
// end ;
58762: GO 58611
58764: POP
58765: POP
// if temp_unit > 0 then
58766: LD_VAR 0 3
58770: PUSH
58771: LD_INT 0
58773: GREATER
58774: IFFALSE 58939
// begin b = CanRusConstructThis ( temp_list [ 4 ] , true ) ;
58776: LD_ADDR_VAR 0 8
58780: PUSH
58781: LD_VAR 0 4
58785: PUSH
58786: LD_INT 4
58788: ARRAY
58789: PPUSH
58790: LD_INT 1
58792: PPUSH
58793: CALL 60262 0 2
58797: ST_TO_ADDR
// if b = 0 then
58798: LD_VAR 0 8
58802: PUSH
58803: LD_INT 0
58805: EQUAL
58806: IFFALSE 58810
// continue ;
58808: GO 57420
// if b = 1 then
58810: LD_VAR 0 8
58814: PUSH
58815: LD_INT 1
58817: EQUAL
58818: IFFALSE 58939
// begin if ai_mechanics_defend [ base ] + ai_mechanics_attack [ base ] = 1 then
58820: LD_EXP 29
58824: PUSH
58825: LD_VAR 0 5
58829: ARRAY
58830: PUSH
58831: LD_EXP 30
58835: PUSH
58836: LD_VAR 0 5
58840: ARRAY
58841: PLUS
58842: PUSH
58843: LD_INT 1
58845: EQUAL
58846: IFFALSE 58869
// temp_list = Replace ( temp_list , 3 , control_computer ) ;
58848: LD_ADDR_VAR 0 4
58852: PUSH
58853: LD_VAR 0 4
58857: PPUSH
58858: LD_INT 3
58860: PPUSH
58861: LD_INT 3
58863: PPUSH
58864: CALL_OW 1
58868: ST_TO_ADDR
// ComConstruct ( fact , temp_list [ 1 ] , temp_list [ 2 ] , temp_list [ 3 ] , temp_list [ 4 ] ) ;
58869: LD_VAR 0 7
58873: PPUSH
58874: LD_VAR 0 4
58878: PUSH
58879: LD_INT 1
58881: ARRAY
58882: PPUSH
58883: LD_VAR 0 4
58887: PUSH
58888: LD_INT 2
58890: ARRAY
58891: PPUSH
58892: LD_VAR 0 4
58896: PUSH
58897: LD_INT 3
58899: ARRAY
58900: PPUSH
58901: LD_VAR 0 4
58905: PUSH
58906: LD_INT 4
58908: ARRAY
58909: PPUSH
58910: CALL_OW 125
// ai_crane_under_construction = Replace ( ai_crane_under_construction , base , true ) ;
58914: LD_ADDR_EXP 69
58918: PUSH
58919: LD_EXP 69
58923: PPUSH
58924: LD_VAR 0 5
58928: PPUSH
58929: LD_INT 1
58931: PPUSH
58932: CALL_OW 1
58936: ST_TO_ADDR
// continue ;
58937: GO 57420
// end ; end ; end ; end ; if base = 3 and ai_control_tower_vehicles [ base ] = 0 and UnitFilter ( ai_vehicles_defend [ base ] ^ ai_vehicles_attack [ base ] ^ ai_exported_units [ base ] ^ ai_units_to_export [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] , [ f_control , control_remote ] ) > 0 then
58939: LD_VAR 0 5
58943: PUSH
58944: LD_INT 3
58946: EQUAL
58947: PUSH
58948: LD_EXP 75
58952: PUSH
58953: LD_VAR 0 5
58957: ARRAY
58958: PUSH
58959: LD_INT 0
58961: EQUAL
58962: AND
58963: PUSH
58964: LD_EXP 49
58968: PUSH
58969: LD_VAR 0 5
58973: ARRAY
58974: PUSH
58975: LD_EXP 50
58979: PUSH
58980: LD_VAR 0 5
58984: ARRAY
58985: ADD
58986: PUSH
58987: LD_EXP 81
58991: PUSH
58992: LD_VAR 0 5
58996: ARRAY
58997: ADD
58998: PUSH
58999: LD_EXP 80
59003: PUSH
59004: LD_VAR 0 5
59008: ARRAY
59009: ADD
59010: PUSH
59011: LD_EXP 83
59015: PUSH
59016: LD_VAR 0 5
59020: ARRAY
59021: ADD
59022: PUSH
59023: LD_EXP 84
59027: PUSH
59028: LD_VAR 0 5
59032: ARRAY
59033: ADD
59034: PPUSH
59035: LD_INT 33
59037: PUSH
59038: LD_INT 2
59040: PUSH
59041: EMPTY
59042: LIST
59043: LIST
59044: PPUSH
59045: CALL_OW 72
59049: PUSH
59050: LD_INT 0
59052: GREATER
59053: AND
59054: IFFALSE 59083
// begin ComConstruct ( idle_factories [ 1 ] , ar_half_tracked , engine_siberite , control_manual , ar_control_tower ) ;
59056: LD_VAR 0 6
59060: PUSH
59061: LD_INT 1
59063: ARRAY
59064: PPUSH
59065: LD_INT 14
59067: PPUSH
59068: LD_INT 3
59070: PPUSH
59071: LD_INT 1
59073: PPUSH
59074: LD_INT 31
59076: PPUSH
59077: CALL_OW 125
// continue ;
59081: GO 57420
// end ; if vehicle_prod_delay [ base ] > 0 0$0 then
59083: LD_VAR 0 9
59087: PUSH
59088: LD_VAR 0 5
59092: ARRAY
59093: PUSH
59094: LD_INT 0
59096: GREATER
59097: IFFALSE 59136
// begin vehicle_prod_delay = Replace ( vehicle_prod_delay , base , vehicle_prod_delay [ base ] - 0 0$1 ) ;
59099: LD_ADDR_VAR 0 9
59103: PUSH
59104: LD_VAR 0 9
59108: PPUSH
59109: LD_VAR 0 5
59113: PPUSH
59114: LD_VAR 0 9
59118: PUSH
59119: LD_VAR 0 5
59123: ARRAY
59124: PUSH
59125: LD_INT 35
59127: MINUS
59128: PPUSH
59129: CALL_OW 1
59133: ST_TO_ADDR
// continue ;
59134: GO 57420
// end ; if ai_vehicles_defend [ base ] + UnitFilter ( ai_exported_units [ base ] ^ ai_units_to_export [ base ] ^ ai_vehicles_attack [ base ] , war_vehicle_filter ) - UnitFilter ( ai_imported_units [ base ] , war_vehicle_filter ) < MaxNumWarVehicles ( base ) then
59136: LD_EXP 49
59140: PUSH
59141: LD_VAR 0 5
59145: ARRAY
59146: PUSH
59147: LD_EXP 81
59151: PUSH
59152: LD_VAR 0 5
59156: ARRAY
59157: PUSH
59158: LD_EXP 80
59162: PUSH
59163: LD_VAR 0 5
59167: ARRAY
59168: ADD
59169: PUSH
59170: LD_EXP 50
59174: PUSH
59175: LD_VAR 0 5
59179: ARRAY
59180: ADD
59181: PPUSH
59182: LD_EXP 117
59186: PPUSH
59187: CALL_OW 72
59191: PLUS
59192: PUSH
59193: LD_EXP 82
59197: PUSH
59198: LD_VAR 0 5
59202: ARRAY
59203: PPUSH
59204: LD_EXP 117
59208: PPUSH
59209: CALL_OW 72
59213: MINUS
59214: PUSH
59215: LD_VAR 0 5
59219: PPUSH
59220: CALL 57345 0 1
59224: LESS
59225: IFFALSE 59854
// begin case base of 1 :
59227: LD_VAR 0 5
59231: PUSH
59232: LD_INT 1
59234: DOUBLE
59235: EQUAL
59236: IFTRUE 59240
59238: GO 59600
59240: POP
// begin case Rand ( 1 , 5 ) of 1 :
59241: LD_INT 1
59243: PPUSH
59244: LD_INT 5
59246: PPUSH
59247: CALL_OW 12
59251: PUSH
59252: LD_INT 1
59254: DOUBLE
59255: EQUAL
59256: IFTRUE 59260
59258: GO 59271
59260: POP
// temp_value = ru_gun ; 2 :
59261: LD_ADDR_VAR 0 2
59265: PUSH
59266: LD_INT 44
59268: ST_TO_ADDR
59269: GO 59348
59271: LD_INT 2
59273: DOUBLE
59274: EQUAL
59275: IFTRUE 59279
59277: GO 59290
59279: POP
// temp_value = ru_heavy_gun ; 3 :
59280: LD_ADDR_VAR 0 2
59284: PUSH
59285: LD_INT 46
59287: ST_TO_ADDR
59288: GO 59348
59290: LD_INT 3
59292: DOUBLE
59293: EQUAL
59294: IFTRUE 59298
59296: GO 59309
59298: POP
// temp_value = ru_rocket_launcher ; 4 :
59299: LD_ADDR_VAR 0 2
59303: PUSH
59304: LD_INT 45
59306: ST_TO_ADDR
59307: GO 59348
59309: LD_INT 4
59311: DOUBLE
59312: EQUAL
59313: IFTRUE 59317
59315: GO 59328
59317: POP
// temp_value = ru_rocket ; 5 :
59318: LD_ADDR_VAR 0 2
59322: PUSH
59323: LD_INT 47
59325: ST_TO_ADDR
59326: GO 59348
59328: LD_INT 5
59330: DOUBLE
59331: EQUAL
59332: IFTRUE 59336
59334: GO 59347
59336: POP
// temp_value = ru_gatling_gun ; end ;
59337: LD_ADDR_VAR 0 2
59341: PUSH
59342: LD_INT 43
59344: ST_TO_ADDR
59345: GO 59348
59347: POP
// if difficulty = 1 and temp_value = ru_heavy_gun then
59348: LD_OWVAR 67
59352: PUSH
59353: LD_INT 1
59355: EQUAL
59356: PUSH
59357: LD_VAR 0 2
59361: PUSH
59362: LD_INT 46
59364: EQUAL
59365: AND
59366: IFFALSE 59376
// temp_value = ru_gun ;
59368: LD_ADDR_VAR 0 2
59372: PUSH
59373: LD_INT 44
59375: ST_TO_ADDR
// if Rand ( 1 , [ 2 , 3 , 4 ] [ difficulty ] ) = 1 and not temp_value in [ ru_heavy_gun , ru_rocket ] then
59376: LD_INT 1
59378: PPUSH
59379: LD_INT 2
59381: PUSH
59382: LD_INT 3
59384: PUSH
59385: LD_INT 4
59387: PUSH
59388: EMPTY
59389: LIST
59390: LIST
59391: LIST
59392: PUSH
59393: LD_OWVAR 67
59397: ARRAY
59398: PPUSH
59399: CALL_OW 12
59403: PUSH
59404: LD_INT 1
59406: EQUAL
59407: PUSH
59408: LD_VAR 0 2
59412: PUSH
59413: LD_INT 46
59415: PUSH
59416: LD_INT 47
59418: PUSH
59419: EMPTY
59420: LIST
59421: LIST
59422: IN
59423: NOT
59424: AND
59425: IFFALSE 59437
// i = ru_medium_tracked else
59427: LD_ADDR_VAR 0 1
59431: PUSH
59432: LD_INT 22
59434: ST_TO_ADDR
59435: GO 59445
// i = ru_heavy_tracked ;
59437: LD_ADDR_VAR 0 1
59441: PUSH
59442: LD_INT 24
59444: ST_TO_ADDR
// temp_list = UnitFilter ( ai_vehicles_defend [ base ] ^ ai_vehicles_attack [ base ] , [ f_control , control_manual ] ) ;
59445: LD_ADDR_VAR 0 4
59449: PUSH
59450: LD_EXP 49
59454: PUSH
59455: LD_VAR 0 5
59459: ARRAY
59460: PUSH
59461: LD_EXP 50
59465: PUSH
59466: LD_VAR 0 5
59470: ARRAY
59471: ADD
59472: PPUSH
59473: LD_INT 33
59475: PUSH
59476: LD_INT 1
59478: PUSH
59479: EMPTY
59480: LIST
59481: LIST
59482: PPUSH
59483: CALL_OW 72
59487: ST_TO_ADDR
// if temp_list < [ 0 , 2 , 3 ] [ difficulty ] and ai_mechanics_defend [ base ] + ai_mechanics_attack [ base ] - 3 > temp_list then
59488: LD_VAR 0 4
59492: PUSH
59493: LD_INT 0
59495: PUSH
59496: LD_INT 2
59498: PUSH
59499: LD_INT 3
59501: PUSH
59502: EMPTY
59503: LIST
59504: LIST
59505: LIST
59506: PUSH
59507: LD_OWVAR 67
59511: ARRAY
59512: LESS
59513: PUSH
59514: LD_EXP 29
59518: PUSH
59519: LD_VAR 0 5
59523: ARRAY
59524: PUSH
59525: LD_EXP 30
59529: PUSH
59530: LD_VAR 0 5
59534: ARRAY
59535: PLUS
59536: PUSH
59537: LD_INT 3
59539: MINUS
59540: PUSH
59541: LD_VAR 0 4
59545: GREATER
59546: AND
59547: IFFALSE 59559
// temp_unit = control_manual else
59549: LD_ADDR_VAR 0 3
59553: PUSH
59554: LD_INT 1
59556: ST_TO_ADDR
59557: GO 59567
// temp_unit = control_computer ;
59559: LD_ADDR_VAR 0 3
59563: PUSH
59564: LD_INT 3
59566: ST_TO_ADDR
// ComConstruct ( idle_factories [ 1 ] , i , engine_combustion , temp_unit , temp_value ) ;
59567: LD_VAR 0 6
59571: PUSH
59572: LD_INT 1
59574: ARRAY
59575: PPUSH
59576: LD_VAR 0 1
59580: PPUSH
59581: LD_INT 1
59583: PPUSH
59584: LD_VAR 0 3
59588: PPUSH
59589: LD_VAR 0 2
59593: PPUSH
59594: CALL_OW 125
// end ; 2 :
59598: GO 59852
59600: LD_INT 2
59602: DOUBLE
59603: EQUAL
59604: IFTRUE 59608
59606: GO 59611
59608: POP
// begin end ; 3 :
59609: GO 59852
59611: LD_INT 3
59613: DOUBLE
59614: EQUAL
59615: IFTRUE 59619
59617: GO 59851
59619: POP
// begin if ai_vehicles_defend [ base ] + ai_exported_units [ base ] + ai_units_to_export [ base ] >= ai_control_tower_vehicles [ base ] * 2 then
59620: LD_EXP 49
59624: PUSH
59625: LD_VAR 0 5
59629: ARRAY
59630: PUSH
59631: LD_EXP 81
59635: PUSH
59636: LD_VAR 0 5
59640: ARRAY
59641: PLUS
59642: PUSH
59643: LD_EXP 80
59647: PUSH
59648: LD_VAR 0 5
59652: ARRAY
59653: PLUS
59654: PUSH
59655: LD_EXP 75
59659: PUSH
59660: LD_VAR 0 5
59664: ARRAY
59665: PUSH
59666: LD_INT 2
59668: MUL
59669: GREATEREQUAL
59670: IFFALSE 59699
// begin ComConstruct ( idle_factories [ 1 ] , ar_half_tracked , engine_siberite , control_manual , ar_control_tower ) ;
59672: LD_VAR 0 6
59676: PUSH
59677: LD_INT 1
59679: ARRAY
59680: PPUSH
59681: LD_INT 14
59683: PPUSH
59684: LD_INT 3
59686: PPUSH
59687: LD_INT 1
59689: PPUSH
59690: LD_INT 31
59692: PPUSH
59693: CALL_OW 125
// end else
59697: GO 59849
// begin case Rand ( 1 , 2 ) of 1 :
59699: LD_INT 1
59701: PPUSH
59702: LD_INT 2
59704: PPUSH
59705: CALL_OW 12
59709: PUSH
59710: LD_INT 1
59712: DOUBLE
59713: EQUAL
59714: IFTRUE 59718
59716: GO 59729
59718: POP
// temp_value = ar_gun ; 2 :
59719: LD_ADDR_VAR 0 2
59723: PUSH
59724: LD_INT 27
59726: ST_TO_ADDR
59727: GO 59749
59729: LD_INT 2
59731: DOUBLE
59732: EQUAL
59733: IFTRUE 59737
59735: GO 59748
59737: POP
// temp_value = ar_rocket_launcher ; end ;
59738: LD_ADDR_VAR 0 2
59742: PUSH
59743: LD_INT 28
59745: ST_TO_ADDR
59746: GO 59749
59748: POP
// ComConstruct ( idle_factories [ 1 ] , ar_half_tracked , engine_siberite , control_remote , temp_value ) ;
59749: LD_VAR 0 6
59753: PUSH
59754: LD_INT 1
59756: ARRAY
59757: PPUSH
59758: LD_INT 14
59760: PPUSH
59761: LD_INT 3
59763: PPUSH
59764: LD_INT 2
59766: PPUSH
59767: LD_VAR 0 2
59771: PPUSH
59772: CALL_OW 125
// if BaseUnderAttack ( 1 , - 1 ) and 1 in ai_bases and farmer_attack_anyway_phase = 0 then
59776: LD_INT 1
59778: PPUSH
59779: LD_INT 1
59781: NEG
59782: PPUSH
59783: CALL 46094 0 2
59787: PUSH
59788: LD_INT 1
59790: PUSH
59791: LD_EXP 25
59795: IN
59796: AND
59797: PUSH
59798: LD_EXP 121
59802: PUSH
59803: LD_INT 0
59805: EQUAL
59806: AND
59807: IFFALSE 59849
// vehicle_prod_delay = Replace ( vehicle_prod_delay , base , [ 1 1$0 , 0 0$30 , 0 0$15 ] [ difficulty ] ) ;
59809: LD_ADDR_VAR 0 9
59813: PUSH
59814: LD_VAR 0 9
59818: PPUSH
59819: LD_VAR 0 5
59823: PPUSH
59824: LD_INT 2100
59826: PUSH
59827: LD_INT 1050
59829: PUSH
59830: LD_INT 525
59832: PUSH
59833: EMPTY
59834: LIST
59835: LIST
59836: LIST
59837: PUSH
59838: LD_OWVAR 67
59842: ARRAY
59843: PPUSH
59844: CALL_OW 1
59848: ST_TO_ADDR
// end ; end ; end ;
59849: GO 59852
59851: POP
// continue ;
59852: GO 57420
// end ; if base = 1 and ai_taufield_vehicles [ base ] + UnitFilter ( ai_exported_units [ base ] ^ ai_units_to_export [ base ] ^ ai_vehicles_attack [ base ] , [ f_weapon , ru_time_lapser ] ) < ai_max_num_taufield_vehicles [ 3 ] then
59854: LD_VAR 0 5
59858: PUSH
59859: LD_INT 1
59861: EQUAL
59862: PUSH
59863: LD_EXP 83
59867: PUSH
59868: LD_VAR 0 5
59872: ARRAY
59873: PUSH
59874: LD_EXP 81
59878: PUSH
59879: LD_VAR 0 5
59883: ARRAY
59884: PUSH
59885: LD_EXP 80
59889: PUSH
59890: LD_VAR 0 5
59894: ARRAY
59895: ADD
59896: PUSH
59897: LD_EXP 50
59901: PUSH
59902: LD_VAR 0 5
59906: ARRAY
59907: ADD
59908: PPUSH
59909: LD_INT 34
59911: PUSH
59912: LD_INT 49
59914: PUSH
59915: EMPTY
59916: LIST
59917: LIST
59918: PPUSH
59919: CALL_OW 72
59923: PLUS
59924: PUSH
59925: LD_EXP 95
59929: PUSH
59930: LD_INT 3
59932: ARRAY
59933: LESS
59934: AND
59935: IFFALSE 60002
// begin b = CanRusConstructThis ( ru_time_lapser , true ) ;
59937: LD_ADDR_VAR 0 8
59941: PUSH
59942: LD_INT 49
59944: PPUSH
59945: LD_INT 1
59947: PPUSH
59948: CALL 60262 0 2
59952: ST_TO_ADDR
// if b = 0 then
59953: LD_VAR 0 8
59957: PUSH
59958: LD_INT 0
59960: EQUAL
59961: IFFALSE 59965
// continue ;
59963: GO 57420
// if b = 1 then
59965: LD_VAR 0 8
59969: PUSH
59970: LD_INT 1
59972: EQUAL
59973: IFFALSE 60002
// begin ComConstruct ( idle_factories [ 1 ] , ru_medium_tracked , engine_combustion , control_computer , ru_time_lapser ) ;
59975: LD_VAR 0 6
59979: PUSH
59980: LD_INT 1
59982: ARRAY
59983: PPUSH
59984: LD_INT 22
59986: PPUSH
59987: LD_INT 1
59989: PPUSH
59990: LD_INT 3
59992: PPUSH
59993: LD_INT 49
59995: PPUSH
59996: CALL_OW 125
// continue ;
60000: GO 57420
// end ; end ; if base = 3 and ai_implosion_vehicles [ base ] + UnitFilter ( ai_exported_units [ base ] ^ ai_units_to_export [ base ] ^ ai_vehicles_attack [ base ] , [ f_weapon , ar_selfpropelled_bomb ] ) < ai_max_num_implosion_vehicles [ base ] then
60002: LD_VAR 0 5
60006: PUSH
60007: LD_INT 3
60009: EQUAL
60010: PUSH
60011: LD_EXP 84
60015: PUSH
60016: LD_VAR 0 5
60020: ARRAY
60021: PUSH
60022: LD_EXP 81
60026: PUSH
60027: LD_VAR 0 5
60031: ARRAY
60032: PUSH
60033: LD_EXP 80
60037: PUSH
60038: LD_VAR 0 5
60042: ARRAY
60043: ADD
60044: PUSH
60045: LD_EXP 50
60049: PUSH
60050: LD_VAR 0 5
60054: ARRAY
60055: ADD
60056: PPUSH
60057: LD_INT 34
60059: PUSH
60060: LD_INT 29
60062: PUSH
60063: EMPTY
60064: LIST
60065: LIST
60066: PPUSH
60067: CALL_OW 72
60071: PLUS
60072: PUSH
60073: LD_EXP 96
60077: PUSH
60078: LD_VAR 0 5
60082: ARRAY
60083: LESS
60084: AND
60085: IFFALSE 60157
// begin if ai_control_tower_vehicles [ base ] = 0 then
60087: LD_EXP 75
60091: PUSH
60092: LD_VAR 0 5
60096: ARRAY
60097: PUSH
60098: LD_INT 0
60100: EQUAL
60101: IFFALSE 60130
// begin ComConstruct ( idle_factories [ 1 ] , ar_half_tracked , engine_siberite , control_manual , ar_control_tower ) ;
60103: LD_VAR 0 6
60107: PUSH
60108: LD_INT 1
60110: ARRAY
60111: PPUSH
60112: LD_INT 14
60114: PPUSH
60115: LD_INT 3
60117: PPUSH
60118: LD_INT 1
60120: PPUSH
60121: LD_INT 31
60123: PPUSH
60124: CALL_OW 125
// continue ;
60128: GO 57420
// end ; ComConstruct ( idle_factories [ 1 ] , ar_half_tracked , engine_siberite , control_remote , ar_selfpropelled_bomb ) ;
60130: LD_VAR 0 6
60134: PUSH
60135: LD_INT 1
60137: ARRAY
60138: PPUSH
60139: LD_INT 14
60141: PPUSH
60142: LD_INT 3
60144: PPUSH
60145: LD_INT 2
60147: PPUSH
60148: LD_INT 29
60150: PPUSH
60151: CALL_OW 125
// end else
60155: GO 60185
// if base = 3 and farmer_attack_anyway_phase = 1 then
60157: LD_VAR 0 5
60161: PUSH
60162: LD_INT 3
60164: EQUAL
60165: PUSH
60166: LD_EXP 121
60170: PUSH
60171: LD_INT 1
60173: EQUAL
60174: AND
60175: IFFALSE 60185
// farmer_attack_anyway_phase = 2 ;
60177: LD_ADDR_EXP 121
60181: PUSH
60182: LD_INT 2
60184: ST_TO_ADDR
// end ;
60185: GO 57420
60187: POP
60188: POP
// until false ;
60189: LD_INT 0
60191: IFFALSE 57403
// end ;
60193: PPOPN 10
60195: END
// function IsWeaponFactory ( factory ) ; begin
60196: LD_INT 0
60198: PPUSH
// if FilterAllUnits ( [ [ f_dist , factory , 4 ] , [ f_btype , b_ext_gun ] ] ) > 0 then
60199: LD_INT 91
60201: PUSH
60202: LD_VAR 0 1
60206: PUSH
60207: LD_INT 4
60209: PUSH
60210: EMPTY
60211: LIST
60212: LIST
60213: LIST
60214: PUSH
60215: LD_INT 30
60217: PUSH
60218: LD_INT 17
60220: PUSH
60221: EMPTY
60222: LIST
60223: LIST
60224: PUSH
60225: EMPTY
60226: LIST
60227: LIST
60228: PPUSH
60229: CALL_OW 69
60233: PUSH
60234: LD_INT 0
60236: GREATER
60237: IFFALSE 60249
// result = true else
60239: LD_ADDR_VAR 0 2
60243: PUSH
60244: LD_INT 1
60246: ST_TO_ADDR
60247: GO 60257
// result = false ;
60249: LD_ADDR_VAR 0 2
60253: PUSH
60254: LD_INT 0
60256: ST_TO_ADDR
// end ;
60257: LD_VAR 0 2
60261: RET
// function CanRusConstructThis ( weapon , do_something_about_it ) ; var i , temp_list , un , btype ; begin
60262: LD_INT 0
60264: PPUSH
60265: PPUSH
60266: PPUSH
60267: PPUSH
60268: PPUSH
// result = 0 ;
60269: LD_ADDR_VAR 0 3
60273: PUSH
60274: LD_INT 0
60276: ST_TO_ADDR
// i = 1 ;
60277: LD_ADDR_VAR 0 4
60281: PUSH
60282: LD_INT 1
60284: ST_TO_ADDR
// while i <= ai_buildings_locations [ 1 ] do
60285: LD_VAR 0 4
60289: PUSH
60290: LD_EXP 47
60294: PUSH
60295: LD_INT 1
60297: ARRAY
60298: LESSEQUAL
60299: IFFALSE 60968
// begin if ai_buildings_locations [ 1 ] [ i ] [ 1 ] = ai_fact_extension_replace_location [ 1 ] [ 1 ] and ai_buildings_locations [ 1 ] [ i ] [ 2 ] = ai_fact_extension_replace_location [ 1 ] [ 2 ] then
60301: LD_EXP 47
60305: PUSH
60306: LD_INT 1
60308: ARRAY
60309: PUSH
60310: LD_VAR 0 4
60314: ARRAY
60315: PUSH
60316: LD_INT 1
60318: ARRAY
60319: PUSH
60320: LD_EXP 78
60324: PUSH
60325: LD_INT 1
60327: ARRAY
60328: PUSH
60329: LD_INT 1
60331: ARRAY
60332: EQUAL
60333: PUSH
60334: LD_EXP 47
60338: PUSH
60339: LD_INT 1
60341: ARRAY
60342: PUSH
60343: LD_VAR 0 4
60347: ARRAY
60348: PUSH
60349: LD_INT 2
60351: ARRAY
60352: PUSH
60353: LD_EXP 78
60357: PUSH
60358: LD_INT 1
60360: ARRAY
60361: PUSH
60362: LD_INT 2
60364: ARRAY
60365: EQUAL
60366: AND
60367: IFFALSE 60952
// begin un = HexInfo ( ai_buildings_locations [ 1 ] [ i ] [ 1 ] , ai_buildings_locations [ 1 ] [ i ] [ 2 ] ) ;
60369: LD_ADDR_VAR 0 6
60373: PUSH
60374: LD_EXP 47
60378: PUSH
60379: LD_INT 1
60381: ARRAY
60382: PUSH
60383: LD_VAR 0 4
60387: ARRAY
60388: PUSH
60389: LD_INT 1
60391: ARRAY
60392: PPUSH
60393: LD_EXP 47
60397: PUSH
60398: LD_INT 1
60400: ARRAY
60401: PUSH
60402: LD_VAR 0 4
60406: ARRAY
60407: PUSH
60408: LD_INT 2
60410: ARRAY
60411: PPUSH
60412: CALL_OW 428
60416: ST_TO_ADDR
// if un > 0 and GetType ( un ) = unit_building and not IsConstructed ( un ) then
60417: LD_VAR 0 6
60421: PUSH
60422: LD_INT 0
60424: GREATER
60425: PUSH
60426: LD_VAR 0 6
60430: PPUSH
60431: CALL_OW 247
60435: PUSH
60436: LD_INT 3
60438: EQUAL
60439: AND
60440: PUSH
60441: LD_VAR 0 6
60445: PPUSH
60446: CALL_OW 304
60450: NOT
60451: AND
60452: IFFALSE 60950
// begin btype = - 1 ;
60454: LD_ADDR_VAR 0 7
60458: PUSH
60459: LD_INT 1
60461: NEG
60462: ST_TO_ADDR
// case weapon of ru_cargo_bay , ru_crane :
60463: LD_VAR 0 1
60467: PUSH
60468: LD_INT 51
60470: DOUBLE
60471: EQUAL
60472: IFTRUE 60482
60474: LD_INT 52
60476: DOUBLE
60477: EQUAL
60478: IFTRUE 60482
60480: GO 60542
60482: POP
// begin if GetBType ( un ) = b_ext_noncombat then
60483: LD_VAR 0 6
60487: PPUSH
60488: CALL_OW 266
60492: PUSH
60493: LD_INT 19
60495: EQUAL
60496: IFFALSE 60508
// result = 1 else
60498: LD_ADDR_VAR 0 3
60502: PUSH
60503: LD_INT 1
60505: ST_TO_ADDR
60506: GO 60540
// if ai_buildings_locations [ 1 ] [ i ] [ 4 ] <> b_ext_noncombat then
60508: LD_EXP 47
60512: PUSH
60513: LD_INT 1
60515: ARRAY
60516: PUSH
60517: LD_VAR 0 4
60521: ARRAY
60522: PUSH
60523: LD_INT 4
60525: ARRAY
60526: PUSH
60527: LD_INT 19
60529: NONEQUAL
60530: IFFALSE 60540
// btype = b_ext_noncombat ;
60532: LD_ADDR_VAR 0 7
60536: PUSH
60537: LD_INT 19
60539: ST_TO_ADDR
// end ; ru_time_lapser :
60540: GO 60611
60542: LD_INT 49
60544: DOUBLE
60545: EQUAL
60546: IFTRUE 60550
60548: GO 60610
60550: POP
// begin if GetBType ( un ) = b_ext_siberium then
60551: LD_VAR 0 6
60555: PPUSH
60556: CALL_OW 266
60560: PUSH
60561: LD_INT 21
60563: EQUAL
60564: IFFALSE 60576
// result = 1 else
60566: LD_ADDR_VAR 0 3
60570: PUSH
60571: LD_INT 1
60573: ST_TO_ADDR
60574: GO 60608
// if ai_buildings_locations [ 1 ] [ i ] [ 4 ] <> b_ext_siberium then
60576: LD_EXP 47
60580: PUSH
60581: LD_INT 1
60583: ARRAY
60584: PUSH
60585: LD_VAR 0 4
60589: ARRAY
60590: PUSH
60591: LD_INT 4
60593: ARRAY
60594: PUSH
60595: LD_INT 21
60597: NONEQUAL
60598: IFFALSE 60608
// btype = b_ext_siberium ;
60600: LD_ADDR_VAR 0 7
60604: PUSH
60605: LD_INT 21
60607: ST_TO_ADDR
// end ; end ;
60608: GO 60611
60610: POP
// if btype > - 1 then
60611: LD_VAR 0 7
60615: PUSH
60616: LD_INT 1
60618: NEG
60619: GREATER
60620: IFFALSE 60950
// begin if ai_engineers [ 1 ] = 0 then
60622: LD_EXP 28
60626: PUSH
60627: LD_INT 1
60629: ARRAY
60630: PUSH
60631: LD_INT 0
60633: EQUAL
60634: IFFALSE 60646
// begin result = 2 ;
60636: LD_ADDR_VAR 0 3
60640: PUSH
60641: LD_INT 2
60643: ST_TO_ADDR
// exit ;
60644: GO 60968
// end ; if not do_something_about_it then
60646: LD_VAR 0 2
60650: NOT
60651: IFFALSE 60655
// exit ;
60653: GO 60968
// temp_list = Replace ( ai_buildings_locations [ 1 ] [ i ] , 4 , btype ) ;
60655: LD_ADDR_VAR 0 5
60659: PUSH
60660: LD_EXP 47
60664: PUSH
60665: LD_INT 1
60667: ARRAY
60668: PUSH
60669: LD_VAR 0 4
60673: ARRAY
60674: PPUSH
60675: LD_INT 4
60677: PPUSH
60678: LD_VAR 0 7
60682: PPUSH
60683: CALL_OW 1
60687: ST_TO_ADDR
// temp_list = Replace ( ai_buildings_locations [ 1 ] , i , temp_list ) ;
60688: LD_ADDR_VAR 0 5
60692: PUSH
60693: LD_EXP 47
60697: PUSH
60698: LD_INT 1
60700: ARRAY
60701: PPUSH
60702: LD_VAR 0 4
60706: PPUSH
60707: LD_VAR 0 5
60711: PPUSH
60712: CALL_OW 1
60716: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , 1 , temp_list ) ;
60717: LD_ADDR_EXP 47
60721: PUSH
60722: LD_EXP 47
60726: PPUSH
60727: LD_INT 1
60729: PPUSH
60730: LD_VAR 0 5
60734: PPUSH
60735: CALL_OW 1
60739: ST_TO_ADDR
// temp_list = ai_dismantle_these_buildings [ 1 ] ^ un ;
60740: LD_ADDR_VAR 0 5
60744: PUSH
60745: LD_EXP 79
60749: PUSH
60750: LD_INT 1
60752: ARRAY
60753: PUSH
60754: LD_VAR 0 6
60758: ADD
60759: ST_TO_ADDR
// ai_dismantle_these_buildings = Replace ( ai_dismantle_these_buildings , 1 , temp_list ) ;
60760: LD_ADDR_EXP 79
60764: PUSH
60765: LD_EXP 79
60769: PPUSH
60770: LD_INT 1
60772: PPUSH
60773: LD_VAR 0 5
60777: PPUSH
60778: CALL_OW 1
60782: ST_TO_ADDR
// if ai_facts [ 1 ] > 0 then
60783: LD_EXP 37
60787: PUSH
60788: LD_INT 1
60790: ARRAY
60791: PUSH
60792: LD_INT 0
60794: GREATER
60795: IFFALSE 60950
// begin if ai_facts_with_ext_rebuild_map < ai_facts [ 1 ] [ 1 ] then
60797: LD_EXP 85
60801: PUSH
60802: LD_EXP 37
60806: PUSH
60807: LD_INT 1
60809: ARRAY
60810: PUSH
60811: LD_INT 1
60813: ARRAY
60814: LESS
60815: IFFALSE 60847
// ai_facts_with_ext_rebuild_map = Replace ( ai_facts_with_ext_rebuild_map , ai_facts [ 1 ] [ 1 ] , [ ] ) ;
60817: LD_ADDR_EXP 85
60821: PUSH
60822: LD_EXP 85
60826: PPUSH
60827: LD_EXP 37
60831: PUSH
60832: LD_INT 1
60834: ARRAY
60835: PUSH
60836: LD_INT 1
60838: ARRAY
60839: PPUSH
60840: EMPTY
60841: PPUSH
60842: CALL_OW 1
60846: ST_TO_ADDR
// temp_list = ai_facts_with_ext_rebuild_map [ ai_facts [ 1 ] [ 1 ] ] ^ [ [ ai_buildings_locations [ 1 ] [ i ] [ 1 ] , ai_buildings_locations [ 1 ] [ i ] [ 2 ] ] ] ;
60847: LD_ADDR_VAR 0 5
60851: PUSH
60852: LD_EXP 85
60856: PUSH
60857: LD_EXP 37
60861: PUSH
60862: LD_INT 1
60864: ARRAY
60865: PUSH
60866: LD_INT 1
60868: ARRAY
60869: ARRAY
60870: PUSH
60871: LD_EXP 47
60875: PUSH
60876: LD_INT 1
60878: ARRAY
60879: PUSH
60880: LD_VAR 0 4
60884: ARRAY
60885: PUSH
60886: LD_INT 1
60888: ARRAY
60889: PUSH
60890: LD_EXP 47
60894: PUSH
60895: LD_INT 1
60897: ARRAY
60898: PUSH
60899: LD_VAR 0 4
60903: ARRAY
60904: PUSH
60905: LD_INT 2
60907: ARRAY
60908: PUSH
60909: EMPTY
60910: LIST
60911: LIST
60912: PUSH
60913: EMPTY
60914: LIST
60915: ADD
60916: ST_TO_ADDR
// ai_facts_with_ext_rebuild_map = Replace ( ai_facts_with_ext_rebuild_map , ai_facts [ 1 ] [ 1 ] , temp_list ) ;
60917: LD_ADDR_EXP 85
60921: PUSH
60922: LD_EXP 85
60926: PPUSH
60927: LD_EXP 37
60931: PUSH
60932: LD_INT 1
60934: ARRAY
60935: PUSH
60936: LD_INT 1
60938: ARRAY
60939: PPUSH
60940: LD_VAR 0 5
60944: PPUSH
60945: CALL_OW 1
60949: ST_TO_ADDR
// end ; end ; end ; exit ;
60950: GO 60968
// end ; i = i + 1 ;
60952: LD_ADDR_VAR 0 4
60956: PUSH
60957: LD_VAR 0 4
60961: PUSH
60962: LD_INT 1
60964: PLUS
60965: ST_TO_ADDR
// end ;
60966: GO 60285
// end ;
60968: LD_VAR 0 3
60972: RET
// on VehicleCaptured ( new_identifier , old_identifier , old_side , capturing_unit ) do var temp_list , base ;
60973: LD_INT 0
60975: PPUSH
60976: PPUSH
// begin if old_side = you then
60977: LD_VAR 0 3
60981: PUSH
60982: LD_EXP 2
60986: EQUAL
60987: IFFALSE 60991
// exit ;
60989: GO 61025
// for base in ai_bases do
60991: LD_ADDR_VAR 0 6
60995: PUSH
60996: LD_EXP 25
61000: PUSH
61001: FOR_IN
61002: IFFALSE 61023
// RemoveVehicleFromVariables ( base , old_identifier , true ) ;
61004: LD_VAR 0 6
61008: PPUSH
61009: LD_VAR 0 2
61013: PPUSH
61014: LD_INT 1
61016: PPUSH
61017: CALL 24969 0 3
61021: GO 61001
61023: POP
61024: POP
// end ;
61025: PPOPN 6
61027: END
// on VehicleConstructed ( vehicle , factory ) do var side , temp_list , base , un ;
61028: LD_INT 0
61030: PPUSH
61031: PPUSH
61032: PPUSH
61033: PPUSH
// begin side = GetSide ( vehicle ) ;
61034: LD_ADDR_VAR 0 3
61038: PUSH
61039: LD_VAR 0 1
61043: PPUSH
61044: CALL_OW 255
61048: ST_TO_ADDR
// if side = you then
61049: LD_VAR 0 3
61053: PUSH
61054: LD_EXP 2
61058: EQUAL
61059: IFFALSE 61063
// exit ;
61061: GO 61478
// base = FindBase ( vehicle ) ;
61063: LD_ADDR_VAR 0 5
61067: PUSH
61068: LD_VAR 0 1
61072: PPUSH
61073: CALL 27251 0 1
61077: ST_TO_ADDR
// if base = 0 then
61078: LD_VAR 0 5
61082: PUSH
61083: LD_INT 0
61085: EQUAL
61086: IFFALSE 61090
// exit ;
61088: GO 61478
// case GetWeapon ( vehicle ) of us_cargo_bay , ar_cargo_bay , ru_cargo_bay :
61090: LD_VAR 0 1
61094: PPUSH
61095: CALL_OW 264
61099: PUSH
61100: LD_INT 12
61102: DOUBLE
61103: EQUAL
61104: IFTRUE 61120
61106: LD_INT 32
61108: DOUBLE
61109: EQUAL
61110: IFTRUE 61120
61112: LD_INT 51
61114: DOUBLE
61115: EQUAL
61116: IFTRUE 61120
61118: GO 61191
61120: POP
// begin temp_list = ai_units_to_export [ base ] ^ vehicle ;
61121: LD_ADDR_VAR 0 4
61125: PUSH
61126: LD_EXP 80
61130: PUSH
61131: LD_VAR 0 5
61135: ARRAY
61136: PUSH
61137: LD_VAR 0 1
61141: ADD
61142: ST_TO_ADDR
// ai_units_to_export = Replace ( ai_units_to_export , base , temp_list ) ;
61143: LD_ADDR_EXP 80
61147: PUSH
61148: LD_EXP 80
61152: PPUSH
61153: LD_VAR 0 5
61157: PPUSH
61158: LD_VAR 0 4
61162: PPUSH
61163: CALL_OW 1
61167: ST_TO_ADDR
// ai_cargo_bay_under_construction = Replace ( ai_cargo_bay_under_construction , 3 , false ) ;
61168: LD_ADDR_EXP 66
61172: PUSH
61173: LD_EXP 66
61177: PPUSH
61178: LD_INT 3
61180: PPUSH
61181: LD_INT 0
61183: PPUSH
61184: CALL_OW 1
61188: ST_TO_ADDR
// end ; us_crane , ru_crane :
61189: GO 61478
61191: LD_INT 13
61193: DOUBLE
61194: EQUAL
61195: IFTRUE 61205
61197: LD_INT 52
61199: DOUBLE
61200: EQUAL
61201: IFTRUE 61205
61203: GO 61256
61205: POP
// begin ai_crane = Replace ( ai_crane , base , vehicle ) ;
61206: LD_ADDR_EXP 68
61210: PUSH
61211: LD_EXP 68
61215: PPUSH
61216: LD_VAR 0 5
61220: PPUSH
61221: LD_VAR 0 1
61225: PPUSH
61226: CALL_OW 1
61230: ST_TO_ADDR
// ai_crane_under_construction = Replace ( ai_crane_under_construction , base , false ) ;
61231: LD_ADDR_EXP 69
61235: PUSH
61236: LD_EXP 69
61240: PPUSH
61241: LD_VAR 0 5
61245: PPUSH
61246: LD_INT 0
61248: PPUSH
61249: CALL_OW 1
61253: ST_TO_ADDR
// end ; ar_control_tower :
61254: GO 61478
61256: LD_INT 31
61258: DOUBLE
61259: EQUAL
61260: IFTRUE 61264
61262: GO 61314
61264: POP
// begin temp_list = ai_control_tower_vehicles [ base ] ^ vehicle ;
61265: LD_ADDR_VAR 0 4
61269: PUSH
61270: LD_EXP 75
61274: PUSH
61275: LD_VAR 0 5
61279: ARRAY
61280: PUSH
61281: LD_VAR 0 1
61285: ADD
61286: ST_TO_ADDR
// ai_control_tower_vehicles = Replace ( ai_control_tower_vehicles , base , temp_list ) ;
61287: LD_ADDR_EXP 75
61291: PUSH
61292: LD_EXP 75
61296: PPUSH
61297: LD_VAR 0 5
61301: PPUSH
61302: LD_VAR 0 4
61306: PPUSH
61307: CALL_OW 1
61311: ST_TO_ADDR
// end ; ar_selfpropelled_bomb :
61312: GO 61478
61314: LD_INT 29
61316: DOUBLE
61317: EQUAL
61318: IFTRUE 61322
61320: GO 61372
61322: POP
// begin temp_list = ai_implosion_vehicles [ base ] ^ vehicle ;
61323: LD_ADDR_VAR 0 4
61327: PUSH
61328: LD_EXP 84
61332: PUSH
61333: LD_VAR 0 5
61337: ARRAY
61338: PUSH
61339: LD_VAR 0 1
61343: ADD
61344: ST_TO_ADDR
// ai_implosion_vehicles = Replace ( ai_implosion_vehicles , base , temp_list ) ;
61345: LD_ADDR_EXP 84
61349: PUSH
61350: LD_EXP 84
61354: PPUSH
61355: LD_VAR 0 5
61359: PPUSH
61360: LD_VAR 0 4
61364: PPUSH
61365: CALL_OW 1
61369: ST_TO_ADDR
// end ; ru_time_lapser :
61370: GO 61478
61372: LD_INT 49
61374: DOUBLE
61375: EQUAL
61376: IFTRUE 61380
61378: GO 61430
61380: POP
// begin temp_list = ai_taufield_vehicles [ base ] ^ vehicle ;
61381: LD_ADDR_VAR 0 4
61385: PUSH
61386: LD_EXP 83
61390: PUSH
61391: LD_VAR 0 5
61395: ARRAY
61396: PUSH
61397: LD_VAR 0 1
61401: ADD
61402: ST_TO_ADDR
// ai_taufield_vehicles = Replace ( ai_taufield_vehicles , base , temp_list ) ;
61403: LD_ADDR_EXP 83
61407: PUSH
61408: LD_EXP 83
61412: PPUSH
61413: LD_VAR 0 5
61417: PPUSH
61418: LD_VAR 0 4
61422: PPUSH
61423: CALL_OW 1
61427: ST_TO_ADDR
// end ; else
61428: GO 61478
61430: POP
// begin temp_list = ai_vehicles_defend [ base ] ^ vehicle ;
61431: LD_ADDR_VAR 0 4
61435: PUSH
61436: LD_EXP 49
61440: PUSH
61441: LD_VAR 0 5
61445: ARRAY
61446: PUSH
61447: LD_VAR 0 1
61451: ADD
61452: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
61453: LD_ADDR_EXP 49
61457: PUSH
61458: LD_EXP 49
61462: PPUSH
61463: LD_VAR 0 5
61467: PPUSH
61468: LD_VAR 0 4
61472: PPUSH
61473: CALL_OW 1
61477: ST_TO_ADDR
// end ; end ; end ;
61478: PPOPN 6
61480: END
// every 0 0$1 + 0 0$0.3 do var val , i , b , temp_list , temp_list_2 , temp_list_3 , temp_list_4 , base_list ; var rus_base , farm_base ;
61481: GO 61483
61483: DISABLE
61484: LD_INT 0
61486: PPUSH
61487: PPUSH
61488: PPUSH
61489: PPUSH
61490: PPUSH
61491: PPUSH
61492: PPUSH
61493: PPUSH
61494: PPUSH
61495: PPUSH
// begin rus_base = 1 ;
61496: LD_ADDR_VAR 0 9
61500: PUSH
61501: LD_INT 1
61503: ST_TO_ADDR
// farm_base = 3 ;
61504: LD_ADDR_VAR 0 10
61508: PUSH
61509: LD_INT 3
61511: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
61512: LD_INT 35
61514: PPUSH
61515: CALL_OW 67
// if ai_bases = 0 then
61519: LD_EXP 25
61523: PUSH
61524: LD_INT 0
61526: EQUAL
61527: IFFALSE 61531
// exit ;
61529: GO 63199
// val = true ;
61531: LD_ADDR_VAR 0 1
61535: PUSH
61536: LD_INT 1
61538: ST_TO_ADDR
// for i in [ rus_base , farm_base ] do
61539: LD_ADDR_VAR 0 2
61543: PUSH
61544: LD_VAR 0 9
61548: PUSH
61549: LD_VAR 0 10
61553: PUSH
61554: EMPTY
61555: LIST
61556: LIST
61557: PUSH
61558: FOR_IN
61559: IFFALSE 61617
// begin if ( ai_vehicles_attack [ i ] > 0 or ai_mechanics_attack [ i ] > 0 ) and i in ai_bases then
61561: LD_EXP 50
61565: PUSH
61566: LD_VAR 0 2
61570: ARRAY
61571: PUSH
61572: LD_INT 0
61574: GREATER
61575: PUSH
61576: LD_EXP 30
61580: PUSH
61581: LD_VAR 0 2
61585: ARRAY
61586: PUSH
61587: LD_INT 0
61589: GREATER
61590: OR
61591: PUSH
61592: LD_VAR 0 2
61596: PUSH
61597: LD_EXP 25
61601: IN
61602: AND
61603: IFFALSE 61615
// begin val = false ;
61605: LD_ADDR_VAR 0 1
61609: PUSH
61610: LD_INT 0
61612: ST_TO_ADDR
// break ;
61613: GO 61617
// end ; end ;
61615: GO 61558
61617: POP
61618: POP
// if not val then
61619: LD_VAR 0 1
61623: NOT
61624: IFFALSE 61628
// continue ;
61626: GO 61512
// ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , rus_base , ai_vehicle_attack_delay [ rus_base ] - 0 0$1 ) ;
61628: LD_ADDR_EXP 98
61632: PUSH
61633: LD_EXP 98
61637: PPUSH
61638: LD_VAR 0 9
61642: PPUSH
61643: LD_EXP 98
61647: PUSH
61648: LD_VAR 0 9
61652: ARRAY
61653: PUSH
61654: LD_INT 35
61656: MINUS
61657: PPUSH
61658: CALL_OW 1
61662: ST_TO_ADDR
// if ai_vehicle_attack_delay [ rus_base ] > 0 0$0 then
61663: LD_EXP 98
61667: PUSH
61668: LD_VAR 0 9
61672: ARRAY
61673: PUSH
61674: LD_INT 0
61676: GREATER
61677: IFFALSE 61681
// continue ;
61679: GO 61512
// temp_list = [ BaseUnderAttack ( rus_base , - 1 ) , BaseUnderAttack ( farm_base , - 1 ) ] ;
61681: LD_ADDR_VAR 0 4
61685: PUSH
61686: LD_VAR 0 9
61690: PPUSH
61691: LD_INT 1
61693: NEG
61694: PPUSH
61695: CALL 46094 0 2
61699: PUSH
61700: LD_VAR 0 10
61704: PPUSH
61705: LD_INT 1
61707: NEG
61708: PPUSH
61709: CALL 46094 0 2
61713: PUSH
61714: EMPTY
61715: LIST
61716: LIST
61717: ST_TO_ADDR
// if temp_list [ 2 ] and farm_base in ai_bases then
61718: LD_VAR 0 4
61722: PUSH
61723: LD_INT 2
61725: ARRAY
61726: PUSH
61727: LD_VAR 0 10
61731: PUSH
61732: LD_EXP 25
61736: IN
61737: AND
61738: IFFALSE 61742
// continue ;
61740: GO 61512
// if temp_list [ 1 ] and rus_base in ai_bases then
61742: LD_VAR 0 4
61746: PUSH
61747: LD_INT 1
61749: ARRAY
61750: PUSH
61751: LD_VAR 0 9
61755: PUSH
61756: LD_EXP 25
61760: IN
61761: AND
61762: IFFALSE 61798
// if farm_base in ai_bases then
61764: LD_VAR 0 10
61768: PUSH
61769: LD_EXP 25
61773: IN
61774: IFFALSE 61796
// begin if farmer_attack_anyway_phase = 0 then
61776: LD_EXP 121
61780: PUSH
61781: LD_INT 0
61783: EQUAL
61784: IFFALSE 61794
// farmer_attack_anyway_phase = 1 end else
61786: LD_ADDR_EXP 121
61790: PUSH
61791: LD_INT 1
61793: ST_TO_ADDR
61794: GO 61798
// continue ;
61796: GO 61512
// temp_list = [ farm_base ] ;
61798: LD_ADDR_VAR 0 4
61802: PUSH
61803: LD_VAR 0 10
61807: PUSH
61808: EMPTY
61809: LIST
61810: ST_TO_ADDR
// if farmer_attack_anyway_phase = 0 then
61811: LD_EXP 121
61815: PUSH
61816: LD_INT 0
61818: EQUAL
61819: IFFALSE 61837
// temp_list = temp_list ^ rus_base ;
61821: LD_ADDR_VAR 0 4
61825: PUSH
61826: LD_VAR 0 4
61830: PUSH
61831: LD_VAR 0 9
61835: ADD
61836: ST_TO_ADDR
// for i in temp_list do
61837: LD_ADDR_VAR 0 2
61841: PUSH
61842: LD_VAR 0 4
61846: PUSH
61847: FOR_IN
61848: IFFALSE 61976
// begin b = WorstFromListByList ( [ ai_max_num_vehicles_defend [ i ] , ai_max_num_vehicles_attack [ i ] ] , [ ai_max_num_vehicles_defend [ i ] , ai_max_num_vehicles_attack [ i ] ] ) ;
61850: LD_ADDR_VAR 0 3
61854: PUSH
61855: LD_EXP 93
61859: PUSH
61860: LD_VAR 0 2
61864: ARRAY
61865: PUSH
61866: LD_EXP 94
61870: PUSH
61871: LD_VAR 0 2
61875: ARRAY
61876: PUSH
61877: EMPTY
61878: LIST
61879: LIST
61880: PPUSH
61881: LD_EXP 93
61885: PUSH
61886: LD_VAR 0 2
61890: ARRAY
61891: PUSH
61892: LD_EXP 94
61896: PUSH
61897: LD_VAR 0 2
61901: ARRAY
61902: PUSH
61903: EMPTY
61904: LIST
61905: LIST
61906: PPUSH
61907: CALL_OW 78
61911: ST_TO_ADDR
// if ai_vehicles_defend [ i ] - UnitFilter ( ai_imported_units [ i ] , war_vehicle_filter ) < b and i in ai_bases then
61912: LD_EXP 49
61916: PUSH
61917: LD_VAR 0 2
61921: ARRAY
61922: PUSH
61923: LD_EXP 82
61927: PUSH
61928: LD_VAR 0 2
61932: ARRAY
61933: PPUSH
61934: LD_EXP 117
61938: PPUSH
61939: CALL_OW 72
61943: MINUS
61944: PUSH
61945: LD_VAR 0 3
61949: LESS
61950: PUSH
61951: LD_VAR 0 2
61955: PUSH
61956: LD_EXP 25
61960: IN
61961: AND
61962: IFFALSE 61974
// begin val = false ;
61964: LD_ADDR_VAR 0 1
61968: PUSH
61969: LD_INT 0
61971: ST_TO_ADDR
// break ;
61972: GO 61976
// end ; end ;
61974: GO 61847
61976: POP
61977: POP
// if not val then
61978: LD_VAR 0 1
61982: NOT
61983: IFFALSE 61987
// continue ;
61985: GO 61512
// b = ai_taufield_vehicles [ rus_base ] + 0 ;
61987: LD_ADDR_VAR 0 3
61991: PUSH
61992: LD_EXP 83
61996: PUSH
61997: LD_VAR 0 9
62001: ARRAY
62002: PUSH
62003: LD_INT 0
62005: PLUS
62006: ST_TO_ADDR
// if farm_base in ai_bases then
62007: LD_VAR 0 10
62011: PUSH
62012: LD_EXP 25
62016: IN
62017: IFFALSE 62041
// b = b + ai_taufield_vehicles [ farm_base ] ;
62019: LD_ADDR_VAR 0 3
62023: PUSH
62024: LD_VAR 0 3
62028: PUSH
62029: LD_EXP 83
62033: PUSH
62034: LD_VAR 0 10
62038: ARRAY
62039: PLUS
62040: ST_TO_ADDR
// if b < ai_max_num_taufield_vehicles [ farm_base ] and rus_base in ai_bases and CanRusConstructThis ( ru_time_lapser , false ) <> 2 and farmer_attack_anyway_phase = 0 then
62041: LD_VAR 0 3
62045: PUSH
62046: LD_EXP 95
62050: PUSH
62051: LD_VAR 0 10
62055: ARRAY
62056: LESS
62057: PUSH
62058: LD_VAR 0 9
62062: PUSH
62063: LD_EXP 25
62067: IN
62068: AND
62069: PUSH
62070: LD_INT 49
62072: PPUSH
62073: LD_INT 0
62075: PPUSH
62076: CALL 60262 0 2
62080: PUSH
62081: LD_INT 2
62083: NONEQUAL
62084: AND
62085: PUSH
62086: LD_EXP 121
62090: PUSH
62091: LD_INT 0
62093: EQUAL
62094: AND
62095: IFFALSE 62099
// continue ;
62097: GO 61512
// if ai_implosion_vehicles [ farm_base ] < ai_max_num_implosion_vehicles [ farm_base ] and farm_base in ai_bases then
62099: LD_EXP 84
62103: PUSH
62104: LD_VAR 0 10
62108: ARRAY
62109: PUSH
62110: LD_EXP 96
62114: PUSH
62115: LD_VAR 0 10
62119: ARRAY
62120: LESS
62121: PUSH
62122: LD_VAR 0 10
62126: PUSH
62127: LD_EXP 25
62131: IN
62132: AND
62133: IFFALSE 62137
// continue ;
62135: GO 61512
// if farmer_attack_anyway_phase = 1 then
62137: LD_EXP 121
62141: PUSH
62142: LD_INT 1
62144: EQUAL
62145: IFFALSE 62149
// continue ;
62147: GO 61512
// if farm_base in ai_bases and rus_base in ai_bases and farmer_attack_anyway_phase = 0 then
62149: LD_VAR 0 10
62153: PUSH
62154: LD_EXP 25
62158: IN
62159: PUSH
62160: LD_VAR 0 9
62164: PUSH
62165: LD_EXP 25
62169: IN
62170: AND
62171: PUSH
62172: LD_EXP 121
62176: PUSH
62177: LD_INT 0
62179: EQUAL
62180: AND
62181: IFFALSE 62328
// begin temp_list = ai_units_to_export [ rus_base ] ^ ai_taufield_vehicles [ rus_base ] ;
62183: LD_ADDR_VAR 0 4
62187: PUSH
62188: LD_EXP 80
62192: PUSH
62193: LD_VAR 0 9
62197: ARRAY
62198: PUSH
62199: LD_EXP 83
62203: PUSH
62204: LD_VAR 0 9
62208: ARRAY
62209: ADD
62210: ST_TO_ADDR
// for i in ai_taufield_vehicles [ rus_base ] do
62211: LD_ADDR_VAR 0 2
62215: PUSH
62216: LD_EXP 83
62220: PUSH
62221: LD_VAR 0 9
62225: ARRAY
62226: PUSH
62227: FOR_IN
62228: IFFALSE 62249
// RemoveVehicleFromVariables ( rus_base , i , true ) ;
62230: LD_VAR 0 9
62234: PPUSH
62235: LD_VAR 0 2
62239: PPUSH
62240: LD_INT 1
62242: PPUSH
62243: CALL 24969 0 3
62247: GO 62227
62249: POP
62250: POP
// ai_units_to_export = Replace ( ai_units_to_export , rus_base , temp_list ) ;
62251: LD_ADDR_EXP 80
62255: PUSH
62256: LD_EXP 80
62260: PPUSH
62261: LD_VAR 0 9
62265: PPUSH
62266: LD_VAR 0 4
62270: PPUSH
62271: CALL_OW 1
62275: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
62276: LD_INT 35
62278: PPUSH
62279: CALL_OW 67
// until UnitFilter ( ai_units_to_export [ rus_base ] , [ [ f_type , unit_vehicle ] , [ f_weapon , ru_time_lapser ] ] ) = 0 ;
62283: LD_EXP 80
62287: PUSH
62288: LD_VAR 0 9
62292: ARRAY
62293: PPUSH
62294: LD_INT 21
62296: PUSH
62297: LD_INT 2
62299: PUSH
62300: EMPTY
62301: LIST
62302: LIST
62303: PUSH
62304: LD_INT 34
62306: PUSH
62307: LD_INT 49
62309: PUSH
62310: EMPTY
62311: LIST
62312: LIST
62313: PUSH
62314: EMPTY
62315: LIST
62316: LIST
62317: PPUSH
62318: CALL_OW 72
62322: PUSH
62323: LD_INT 0
62325: EQUAL
62326: IFFALSE 62276
// end ; base_list = [ ] ;
62328: LD_ADDR_VAR 0 8
62332: PUSH
62333: EMPTY
62334: ST_TO_ADDR
// if rus_base in ai_bases and farmer_attack_anyway_phase = 0 then
62335: LD_VAR 0 9
62339: PUSH
62340: LD_EXP 25
62344: IN
62345: PUSH
62346: LD_EXP 121
62350: PUSH
62351: LD_INT 0
62353: EQUAL
62354: AND
62355: IFFALSE 62373
// base_list = base_list ^ rus_base ;
62357: LD_ADDR_VAR 0 8
62361: PUSH
62362: LD_VAR 0 8
62366: PUSH
62367: LD_VAR 0 9
62371: ADD
62372: ST_TO_ADDR
// if farm_base in ai_bases then
62373: LD_VAR 0 10
62377: PUSH
62378: LD_EXP 25
62382: IN
62383: IFFALSE 62401
// base_list = base_list ^ farm_base ;
62385: LD_ADDR_VAR 0 8
62389: PUSH
62390: LD_VAR 0 8
62394: PUSH
62395: LD_VAR 0 10
62399: ADD
62400: ST_TO_ADDR
// for b in base_list do
62401: LD_ADDR_VAR 0 3
62405: PUSH
62406: LD_VAR 0 8
62410: PUSH
62411: FOR_IN
62412: IFFALSE 62738
// begin temp_list = [ ] ;
62414: LD_ADDR_VAR 0 4
62418: PUSH
62419: EMPTY
62420: ST_TO_ADDR
// temp_list_2 = ai_vehicles_defend [ b ] diff UnitFilter ( ai_imported_units [ b ] , war_vehicle_filter ) ;
62421: LD_ADDR_VAR 0 5
62425: PUSH
62426: LD_EXP 49
62430: PUSH
62431: LD_VAR 0 3
62435: ARRAY
62436: PUSH
62437: LD_EXP 82
62441: PUSH
62442: LD_VAR 0 3
62446: ARRAY
62447: PPUSH
62448: LD_EXP 117
62452: PPUSH
62453: CALL_OW 72
62457: DIFF
62458: ST_TO_ADDR
// temp_list_3 = [ ] ;
62459: LD_ADDR_VAR 0 6
62463: PUSH
62464: EMPTY
62465: ST_TO_ADDR
// temp_list_4 = ai_mechanics_defend [ b ] diff ai_crane_driver [ b ] ;
62466: LD_ADDR_VAR 0 7
62470: PUSH
62471: LD_EXP 29
62475: PUSH
62476: LD_VAR 0 3
62480: ARRAY
62481: PUSH
62482: LD_EXP 72
62486: PUSH
62487: LD_VAR 0 3
62491: ARRAY
62492: DIFF
62493: ST_TO_ADDR
// for i = 1 to ai_max_num_vehicles_attack [ b ] do
62494: LD_ADDR_VAR 0 2
62498: PUSH
62499: DOUBLE
62500: LD_INT 1
62502: DEC
62503: ST_TO_ADDR
62504: LD_EXP 94
62508: PUSH
62509: LD_VAR 0 3
62513: ARRAY
62514: PUSH
62515: FOR_TO
62516: IFFALSE 62684
// begin if temp_list_2 = 0 then
62518: LD_VAR 0 5
62522: PUSH
62523: LD_INT 0
62525: EQUAL
62526: IFFALSE 62530
// break ;
62528: GO 62684
// if GetControl ( temp_list_2 [ 1 ] ) = control_manual then
62530: LD_VAR 0 5
62534: PUSH
62535: LD_INT 1
62537: ARRAY
62538: PPUSH
62539: CALL_OW 263
62543: PUSH
62544: LD_INT 1
62546: EQUAL
62547: IFFALSE 62623
// begin if temp_list_4 = 0 then
62549: LD_VAR 0 7
62553: PUSH
62554: LD_INT 0
62556: EQUAL
62557: IFFALSE 62561
// continue ;
62559: GO 62515
// temp_list_3 = temp_list_3 ^ temp_list_4 [ 1 ] ;
62561: LD_ADDR_VAR 0 6
62565: PUSH
62566: LD_VAR 0 6
62570: PUSH
62571: LD_VAR 0 7
62575: PUSH
62576: LD_INT 1
62578: ARRAY
62579: ADD
62580: ST_TO_ADDR
// RemoveHumanFromVariables ( b , temp_list_4 [ 1 ] , false , false ) ;
62581: LD_VAR 0 3
62585: PPUSH
62586: LD_VAR 0 7
62590: PUSH
62591: LD_INT 1
62593: ARRAY
62594: PPUSH
62595: LD_INT 0
62597: PPUSH
62598: LD_INT 0
62600: PPUSH
62601: CALL 25867 0 4
// temp_list_4 = Delete ( temp_list_4 , 1 ) ;
62605: LD_ADDR_VAR 0 7
62609: PUSH
62610: LD_VAR 0 7
62614: PPUSH
62615: LD_INT 1
62617: PPUSH
62618: CALL_OW 3
62622: ST_TO_ADDR
// end ; temp_list = temp_list ^ temp_list_2 [ 1 ] ;
62623: LD_ADDR_VAR 0 4
62627: PUSH
62628: LD_VAR 0 4
62632: PUSH
62633: LD_VAR 0 5
62637: PUSH
62638: LD_INT 1
62640: ARRAY
62641: ADD
62642: ST_TO_ADDR
// RemoveVehicleFromVariables ( b , temp_list_2 [ 1 ] , false ) ;
62643: LD_VAR 0 3
62647: PPUSH
62648: LD_VAR 0 5
62652: PUSH
62653: LD_INT 1
62655: ARRAY
62656: PPUSH
62657: LD_INT 0
62659: PPUSH
62660: CALL 24969 0 3
// temp_list_2 = Delete ( temp_list_2 , 1 ) ;
62664: LD_ADDR_VAR 0 5
62668: PUSH
62669: LD_VAR 0 5
62673: PPUSH
62674: LD_INT 1
62676: PPUSH
62677: CALL_OW 3
62681: ST_TO_ADDR
// end ;
62682: GO 62515
62684: POP
62685: POP
// ai_vehicles_attack = Replace ( ai_vehicles_attack , b , temp_list ) ;
62686: LD_ADDR_EXP 50
62690: PUSH
62691: LD_EXP 50
62695: PPUSH
62696: LD_VAR 0 3
62700: PPUSH
62701: LD_VAR 0 4
62705: PPUSH
62706: CALL_OW 1
62710: ST_TO_ADDR
// ai_mechanics_attack = Replace ( ai_mechanics_attack , b , temp_list_3 ) ;
62711: LD_ADDR_EXP 30
62715: PUSH
62716: LD_EXP 30
62720: PPUSH
62721: LD_VAR 0 3
62725: PPUSH
62726: LD_VAR 0 6
62730: PPUSH
62731: CALL_OW 1
62735: ST_TO_ADDR
// end ;
62736: GO 62411
62738: POP
62739: POP
// if farm_base in ai_bases then
62740: LD_VAR 0 10
62744: PUSH
62745: LD_EXP 25
62749: IN
62750: IFFALSE 62871
// begin temp_list = ai_vehicles_attack [ farm_base ] ^ ai_taufield_vehicles [ farm_base ] ^ ai_implosion_vehicles [ farm_base ] ;
62752: LD_ADDR_VAR 0 4
62756: PUSH
62757: LD_EXP 50
62761: PUSH
62762: LD_VAR 0 10
62766: ARRAY
62767: PUSH
62768: LD_EXP 83
62772: PUSH
62773: LD_VAR 0 10
62777: ARRAY
62778: ADD
62779: PUSH
62780: LD_EXP 84
62784: PUSH
62785: LD_VAR 0 10
62789: ARRAY
62790: ADD
62791: ST_TO_ADDR
// for i in ai_taufield_vehicles [ farm_base ] ^ ai_implosion_vehicles [ farm_base ] do
62792: LD_ADDR_VAR 0 2
62796: PUSH
62797: LD_EXP 83
62801: PUSH
62802: LD_VAR 0 10
62806: ARRAY
62807: PUSH
62808: LD_EXP 84
62812: PUSH
62813: LD_VAR 0 10
62817: ARRAY
62818: ADD
62819: PUSH
62820: FOR_IN
62821: IFFALSE 62842
// RemoveVehicleFromVariables ( farm_base , i , false ) ;
62823: LD_VAR 0 10
62827: PPUSH
62828: LD_VAR 0 2
62832: PPUSH
62833: LD_INT 0
62835: PPUSH
62836: CALL 24969 0 3
62840: GO 62820
62842: POP
62843: POP
// ai_vehicles_attack = Replace ( ai_vehicles_attack , farm_base , temp_list ) ;
62844: LD_ADDR_EXP 50
62848: PUSH
62849: LD_EXP 50
62853: PPUSH
62854: LD_VAR 0 10
62858: PPUSH
62859: LD_VAR 0 4
62863: PPUSH
62864: CALL_OW 1
62868: ST_TO_ADDR
// end else
62869: GO 62976
// if rus_base in ai_bases then
62871: LD_VAR 0 9
62875: PUSH
62876: LD_EXP 25
62880: IN
62881: IFFALSE 62976
// begin temp_list = ai_vehicles_attack [ rus_base ] ^ ai_taufield_vehicles [ rus_base ] ;
62883: LD_ADDR_VAR 0 4
62887: PUSH
62888: LD_EXP 50
62892: PUSH
62893: LD_VAR 0 9
62897: ARRAY
62898: PUSH
62899: LD_EXP 83
62903: PUSH
62904: LD_VAR 0 9
62908: ARRAY
62909: ADD
62910: ST_TO_ADDR
// for i in ai_taufield_vehicles [ rus_base ] do
62911: LD_ADDR_VAR 0 2
62915: PUSH
62916: LD_EXP 83
62920: PUSH
62921: LD_VAR 0 9
62925: ARRAY
62926: PUSH
62927: FOR_IN
62928: IFFALSE 62949
// RemoveVehicleFromVariables ( rus_base , i , false ) ;
62930: LD_VAR 0 9
62934: PPUSH
62935: LD_VAR 0 2
62939: PPUSH
62940: LD_INT 0
62942: PPUSH
62943: CALL 24969 0 3
62947: GO 62927
62949: POP
62950: POP
// ai_vehicles_attack = Replace ( ai_vehicles_attack , rus_base , temp_list ) ;
62951: LD_ADDR_EXP 50
62955: PUSH
62956: LD_EXP 50
62960: PPUSH
62961: LD_VAR 0 9
62965: PPUSH
62966: LD_VAR 0 4
62970: PPUSH
62971: CALL_OW 1
62975: ST_TO_ADDR
// end ; ResetVehicleAttackDelay ( rus_base ) ;
62976: LD_VAR 0 9
62980: PPUSH
62981: CALL 24014 0 1
// farmer_attack_anyway_phase = 0 ;
62985: LD_ADDR_EXP 121
62989: PUSH
62990: LD_INT 0
62992: ST_TO_ADDR
// player_bases_areas = [ ] ;
62993: LD_ADDR_EXP 118
62997: PUSH
62998: EMPTY
62999: ST_TO_ADDR
// for i in [ Ru_small_base , player_base_2 , player_base_3 , player_base_4 , Ru_base , Farmer_base ] do
63000: LD_ADDR_VAR 0 2
63004: PUSH
63005: LD_INT 2
63007: PUSH
63008: LD_INT 23
63010: PUSH
63011: LD_INT 24
63013: PUSH
63014: LD_INT 25
63016: PUSH
63017: LD_INT 1
63019: PUSH
63020: LD_INT 9
63022: PUSH
63023: EMPTY
63024: LIST
63025: LIST
63026: LIST
63027: LIST
63028: LIST
63029: LIST
63030: PUSH
63031: FOR_IN
63032: IFFALSE 63119
// if FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , i ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) > 0 then
63034: LD_INT 22
63036: PUSH
63037: LD_EXP 2
63041: PUSH
63042: EMPTY
63043: LIST
63044: LIST
63045: PUSH
63046: LD_INT 95
63048: PUSH
63049: LD_VAR 0 2
63053: PUSH
63054: EMPTY
63055: LIST
63056: LIST
63057: PUSH
63058: LD_INT 2
63060: PUSH
63061: LD_INT 30
63063: PUSH
63064: LD_INT 0
63066: PUSH
63067: EMPTY
63068: LIST
63069: LIST
63070: PUSH
63071: LD_INT 30
63073: PUSH
63074: LD_INT 1
63076: PUSH
63077: EMPTY
63078: LIST
63079: LIST
63080: PUSH
63081: EMPTY
63082: LIST
63083: LIST
63084: LIST
63085: PUSH
63086: EMPTY
63087: LIST
63088: LIST
63089: LIST
63090: PPUSH
63091: CALL_OW 69
63095: PUSH
63096: LD_INT 0
63098: GREATER
63099: IFFALSE 63117
// player_bases_areas = player_bases_areas ^ i ;
63101: LD_ADDR_EXP 118
63105: PUSH
63106: LD_EXP 118
63110: PUSH
63111: LD_VAR 0 2
63115: ADD
63116: ST_TO_ADDR
63117: GO 63031
63119: POP
63120: POP
// farmer_attack_exit_point = Rand ( 1 , 2 ) ;
63121: LD_ADDR_EXP 119
63125: PUSH
63126: LD_INT 1
63128: PPUSH
63129: LD_INT 2
63131: PPUSH
63132: CALL_OW 12
63136: ST_TO_ADDR
// for i in ai_vehicles_attack [ rus_base ] ^ ai_vehicles_attack [ farm_base ] do
63137: LD_ADDR_VAR 0 2
63141: PUSH
63142: LD_EXP 50
63146: PUSH
63147: LD_VAR 0 9
63151: ARRAY
63152: PUSH
63153: LD_EXP 50
63157: PUSH
63158: LD_VAR 0 10
63162: ARRAY
63163: ADD
63164: PUSH
63165: FOR_IN
63166: IFFALSE 63193
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , i , 1 ) ;
63168: LD_ADDR_EXP 73
63172: PUSH
63173: LD_EXP 73
63177: PPUSH
63178: LD_VAR 0 2
63182: PPUSH
63183: LD_INT 1
63185: PPUSH
63186: CALL_OW 1
63190: ST_TO_ADDR
63191: GO 63165
63193: POP
63194: POP
// until false ;
63195: LD_INT 0
63197: IFFALSE 61512
// end ;
63199: PPOPN 10
63201: END
// every 0 0$1 do var base , init_attack_hexes , normal_attack_hexes , k , i , g , temp_list_3 ; var temp_unit , temp_list , temp_list_2 , dist , temp_value , inside_ok , attacking_vehicles ; var vehicle_dist , all_are_ready , random_rus , base_out_list , retreat_vehicles_list , retreat_mechanics_list , orig_ai_bases ;
63202: GO 63204
63204: DISABLE
63205: LD_INT 0
63207: PPUSH
63208: PPUSH
63209: PPUSH
63210: PPUSH
63211: PPUSH
63212: PPUSH
63213: PPUSH
63214: PPUSH
63215: PPUSH
63216: PPUSH
63217: PPUSH
63218: PPUSH
63219: PPUSH
63220: PPUSH
63221: PPUSH
63222: PPUSH
63223: PPUSH
63224: PPUSH
63225: PPUSH
63226: PPUSH
63227: PPUSH
// begin vehicle_dist = 6 ;
63228: LD_ADDR_VAR 0 15
63232: PUSH
63233: LD_INT 6
63235: ST_TO_ADDR
// all_are_ready = [ false , - 1 , false ] ;
63236: LD_ADDR_VAR 0 16
63240: PUSH
63241: LD_INT 0
63243: PUSH
63244: LD_INT 1
63246: NEG
63247: PUSH
63248: LD_INT 0
63250: PUSH
63251: EMPTY
63252: LIST
63253: LIST
63254: LIST
63255: ST_TO_ADDR
// random_rus = Rand ( 1 , 2 ) ;
63256: LD_ADDR_VAR 0 17
63260: PUSH
63261: LD_INT 1
63263: PPUSH
63264: LD_INT 2
63266: PPUSH
63267: CALL_OW 12
63271: ST_TO_ADDR
// base_out_list = [ ] ;
63272: LD_ADDR_VAR 0 18
63276: PUSH
63277: EMPTY
63278: ST_TO_ADDR
// retreat_vehicles_list = [ [ ] , [ ] , [ ] ] ;
63279: LD_ADDR_VAR 0 19
63283: PUSH
63284: EMPTY
63285: PUSH
63286: EMPTY
63287: PUSH
63288: EMPTY
63289: PUSH
63290: EMPTY
63291: LIST
63292: LIST
63293: LIST
63294: ST_TO_ADDR
// retreat_mechanics_list = [ [ ] , [ ] , [ ] ] ;
63295: LD_ADDR_VAR 0 20
63299: PUSH
63300: EMPTY
63301: PUSH
63302: EMPTY
63303: PUSH
63304: EMPTY
63305: PUSH
63306: EMPTY
63307: LIST
63308: LIST
63309: LIST
63310: ST_TO_ADDR
// orig_ai_bases = ai_bases ;
63311: LD_ADDR_VAR 0 21
63315: PUSH
63316: LD_EXP 25
63320: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
63321: LD_INT 35
63323: PPUSH
63324: CALL_OW 67
// for base in orig_ai_bases do
63328: LD_ADDR_VAR 0 1
63332: PUSH
63333: LD_VAR 0 21
63337: PUSH
63338: FOR_IN
63339: IFFALSE 69763
// begin if base = 2 then
63341: LD_VAR 0 1
63345: PUSH
63346: LD_INT 2
63348: EQUAL
63349: IFFALSE 63353
// continue ;
63351: GO 63338
// if ( UnitFilter ( ai_vehicles_attack [ base ] , [ [ f_not , [ f_control , control_manual ] ] , [ f_ok ] ] ) = 0 and UnitFilter ( ai_mechanics_attack [ base ] , [ f_ok ] ) = 0 ) or not base in ai_bases then
63353: LD_EXP 50
63357: PUSH
63358: LD_VAR 0 1
63362: ARRAY
63363: PPUSH
63364: LD_INT 3
63366: PUSH
63367: LD_INT 33
63369: PUSH
63370: LD_INT 1
63372: PUSH
63373: EMPTY
63374: LIST
63375: LIST
63376: PUSH
63377: EMPTY
63378: LIST
63379: LIST
63380: PUSH
63381: LD_INT 50
63383: PUSH
63384: EMPTY
63385: LIST
63386: PUSH
63387: EMPTY
63388: LIST
63389: LIST
63390: PPUSH
63391: CALL_OW 72
63395: PUSH
63396: LD_INT 0
63398: EQUAL
63399: PUSH
63400: LD_EXP 30
63404: PUSH
63405: LD_VAR 0 1
63409: ARRAY
63410: PPUSH
63411: LD_INT 50
63413: PUSH
63414: EMPTY
63415: LIST
63416: PPUSH
63417: CALL_OW 72
63421: PUSH
63422: LD_INT 0
63424: EQUAL
63425: AND
63426: PUSH
63427: LD_VAR 0 1
63431: PUSH
63432: LD_EXP 25
63436: IN
63437: NOT
63438: OR
63439: IFFALSE 63606
// begin base_out_list = base_out_list union base ;
63441: LD_ADDR_VAR 0 18
63445: PUSH
63446: LD_VAR 0 18
63450: PUSH
63451: LD_VAR 0 1
63455: UNION
63456: ST_TO_ADDR
// if ( [ 1 , 3 ] diff base_out_list ) = 0 then
63457: LD_INT 1
63459: PUSH
63460: LD_INT 3
63462: PUSH
63463: EMPTY
63464: LIST
63465: LIST
63466: PUSH
63467: LD_VAR 0 18
63471: DIFF
63472: PUSH
63473: LD_INT 0
63475: EQUAL
63476: IFFALSE 63500
// all_are_ready = [ false , - 1 , false ] else
63478: LD_ADDR_VAR 0 16
63482: PUSH
63483: LD_INT 0
63485: PUSH
63486: LD_INT 1
63488: NEG
63489: PUSH
63490: LD_INT 0
63492: PUSH
63493: EMPTY
63494: LIST
63495: LIST
63496: LIST
63497: ST_TO_ADDR
63498: GO 63523
// all_are_ready = Replace ( all_are_ready , base , true ) ;
63500: LD_ADDR_VAR 0 16
63504: PUSH
63505: LD_VAR 0 16
63509: PPUSH
63510: LD_VAR 0 1
63514: PPUSH
63515: LD_INT 1
63517: PPUSH
63518: CALL_OW 1
63522: ST_TO_ADDR
// if base = 1 then
63523: LD_VAR 0 1
63527: PUSH
63528: LD_INT 1
63530: EQUAL
63531: IFFALSE 63549
// random_rus = Rand ( 1 , 2 ) ;
63533: LD_ADDR_VAR 0 17
63537: PUSH
63538: LD_INT 1
63540: PPUSH
63541: LD_INT 2
63543: PPUSH
63544: CALL_OW 12
63548: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , UnitFilter ( ai_vehicles_attack [ base ] , [ f_not , [ f_control , control_manual ] ] ) ) ;
63549: LD_ADDR_EXP 50
63553: PUSH
63554: LD_EXP 50
63558: PPUSH
63559: LD_VAR 0 1
63563: PPUSH
63564: LD_EXP 50
63568: PUSH
63569: LD_VAR 0 1
63573: ARRAY
63574: PPUSH
63575: LD_INT 3
63577: PUSH
63578: LD_INT 33
63580: PUSH
63581: LD_INT 1
63583: PUSH
63584: EMPTY
63585: LIST
63586: LIST
63587: PUSH
63588: EMPTY
63589: LIST
63590: LIST
63591: PPUSH
63592: CALL_OW 72
63596: PPUSH
63597: CALL_OW 1
63601: ST_TO_ADDR
// continue ;
63602: GO 63338
// end else
63604: GO 63622
// base_out_list = base_out_list diff base ;
63606: LD_ADDR_VAR 0 18
63610: PUSH
63611: LD_VAR 0 18
63615: PUSH
63616: LD_VAR 0 1
63620: DIFF
63621: ST_TO_ADDR
// case base of 1 :
63622: LD_VAR 0 1
63626: PUSH
63627: LD_INT 1
63629: DOUBLE
63630: EQUAL
63631: IFTRUE 63635
63633: GO 64250
63635: POP
// begin init_attack_hexes = [ [ 65 , 72 ] , [ 82 , 84 ] ] ;
63636: LD_ADDR_VAR 0 2
63640: PUSH
63641: LD_INT 65
63643: PUSH
63644: LD_INT 72
63646: PUSH
63647: EMPTY
63648: LIST
63649: LIST
63650: PUSH
63651: LD_INT 82
63653: PUSH
63654: LD_INT 84
63656: PUSH
63657: EMPTY
63658: LIST
63659: LIST
63660: PUSH
63661: EMPTY
63662: LIST
63663: LIST
63664: ST_TO_ADDR
// normal_attack_hexes = init_attack_hexes ;
63665: LD_ADDR_VAR 0 3
63669: PUSH
63670: LD_VAR 0 2
63674: ST_TO_ADDR
// if Ru_small_base in player_bases_areas then
63675: LD_INT 2
63677: PUSH
63678: LD_EXP 118
63682: IN
63683: IFFALSE 63731
// normal_attack_hexes = normal_attack_hexes ^ [ [ 93 , 94 ] , [ 97 , 110 ] , [ 93 , 94 ] ] ;
63685: LD_ADDR_VAR 0 3
63689: PUSH
63690: LD_VAR 0 3
63694: PUSH
63695: LD_INT 93
63697: PUSH
63698: LD_INT 94
63700: PUSH
63701: EMPTY
63702: LIST
63703: LIST
63704: PUSH
63705: LD_INT 97
63707: PUSH
63708: LD_INT 110
63710: PUSH
63711: EMPTY
63712: LIST
63713: LIST
63714: PUSH
63715: LD_INT 93
63717: PUSH
63718: LD_INT 94
63720: PUSH
63721: EMPTY
63722: LIST
63723: LIST
63724: PUSH
63725: EMPTY
63726: LIST
63727: LIST
63728: LIST
63729: ADD
63730: ST_TO_ADDR
// normal_attack_hexes = normal_attack_hexes ^ [ [ 95 , 85 ] ] ;
63731: LD_ADDR_VAR 0 3
63735: PUSH
63736: LD_VAR 0 3
63740: PUSH
63741: LD_INT 95
63743: PUSH
63744: LD_INT 85
63746: PUSH
63747: EMPTY
63748: LIST
63749: LIST
63750: PUSH
63751: EMPTY
63752: LIST
63753: ADD
63754: ST_TO_ADDR
// if Farmer_base in player_bases_areas and random_rus = 1 then
63755: LD_INT 9
63757: PUSH
63758: LD_EXP 118
63762: IN
63763: PUSH
63764: LD_VAR 0 17
63768: PUSH
63769: LD_INT 1
63771: EQUAL
63772: AND
63773: IFFALSE 63887
// normal_attack_hexes = normal_attack_hexes ^ [ [ 89 , 69 ] , [ 86 , 55 ] , [ 92 , 46 ] , [ 92 , 33 ] , [ 103 , 33 ] , [ 103 , 46 ] , [ 92 , 46 ] , [ 86 , 55 ] , [ 89 , 69 ] ] ;
63775: LD_ADDR_VAR 0 3
63779: PUSH
63780: LD_VAR 0 3
63784: PUSH
63785: LD_INT 89
63787: PUSH
63788: LD_INT 69
63790: PUSH
63791: EMPTY
63792: LIST
63793: LIST
63794: PUSH
63795: LD_INT 86
63797: PUSH
63798: LD_INT 55
63800: PUSH
63801: EMPTY
63802: LIST
63803: LIST
63804: PUSH
63805: LD_INT 92
63807: PUSH
63808: LD_INT 46
63810: PUSH
63811: EMPTY
63812: LIST
63813: LIST
63814: PUSH
63815: LD_INT 92
63817: PUSH
63818: LD_INT 33
63820: PUSH
63821: EMPTY
63822: LIST
63823: LIST
63824: PUSH
63825: LD_INT 103
63827: PUSH
63828: LD_INT 33
63830: PUSH
63831: EMPTY
63832: LIST
63833: LIST
63834: PUSH
63835: LD_INT 103
63837: PUSH
63838: LD_INT 46
63840: PUSH
63841: EMPTY
63842: LIST
63843: LIST
63844: PUSH
63845: LD_INT 92
63847: PUSH
63848: LD_INT 46
63850: PUSH
63851: EMPTY
63852: LIST
63853: LIST
63854: PUSH
63855: LD_INT 86
63857: PUSH
63858: LD_INT 55
63860: PUSH
63861: EMPTY
63862: LIST
63863: LIST
63864: PUSH
63865: LD_INT 89
63867: PUSH
63868: LD_INT 69
63870: PUSH
63871: EMPTY
63872: LIST
63873: LIST
63874: PUSH
63875: EMPTY
63876: LIST
63877: LIST
63878: LIST
63879: LIST
63880: LIST
63881: LIST
63882: LIST
63883: LIST
63884: LIST
63885: ADD
63886: ST_TO_ADDR
// normal_attack_hexes = normal_attack_hexes ^ [ [ 105 , 83 ] ] ;
63887: LD_ADDR_VAR 0 3
63891: PUSH
63892: LD_VAR 0 3
63896: PUSH
63897: LD_INT 105
63899: PUSH
63900: LD_INT 83
63902: PUSH
63903: EMPTY
63904: LIST
63905: LIST
63906: PUSH
63907: EMPTY
63908: LIST
63909: ADD
63910: ST_TO_ADDR
// if player_base_3 in player_bases_areas then
63911: LD_INT 24
63913: PUSH
63914: LD_EXP 118
63918: IN
63919: IFFALSE 63967
// normal_attack_hexes = normal_attack_hexes ^ [ [ 121 , 89 ] , [ 135 , 115 ] , [ 121 , 89 ] ] ;
63921: LD_ADDR_VAR 0 3
63925: PUSH
63926: LD_VAR 0 3
63930: PUSH
63931: LD_INT 121
63933: PUSH
63934: LD_INT 89
63936: PUSH
63937: EMPTY
63938: LIST
63939: LIST
63940: PUSH
63941: LD_INT 135
63943: PUSH
63944: LD_INT 115
63946: PUSH
63947: EMPTY
63948: LIST
63949: LIST
63950: PUSH
63951: LD_INT 121
63953: PUSH
63954: LD_INT 89
63956: PUSH
63957: EMPTY
63958: LIST
63959: LIST
63960: PUSH
63961: EMPTY
63962: LIST
63963: LIST
63964: LIST
63965: ADD
63966: ST_TO_ADDR
// normal_attack_hexes = normal_attack_hexes ^ [ [ 117 , 80 ] ] ;
63967: LD_ADDR_VAR 0 3
63971: PUSH
63972: LD_VAR 0 3
63976: PUSH
63977: LD_INT 117
63979: PUSH
63980: LD_INT 80
63982: PUSH
63983: EMPTY
63984: LIST
63985: LIST
63986: PUSH
63987: EMPTY
63988: LIST
63989: ADD
63990: ST_TO_ADDR
// if Farmer_base in player_bases_areas and random_rus = 2 then
63991: LD_INT 9
63993: PUSH
63994: LD_EXP 118
63998: IN
63999: PUSH
64000: LD_VAR 0 17
64004: PUSH
64005: LD_INT 2
64007: EQUAL
64008: AND
64009: IFFALSE 64101
// normal_attack_hexes = normal_attack_hexes ^ [ [ 116 , 65 ] , [ 103 , 46 ] , [ 103 , 33 ] , [ 92 , 33 ] , [ 92 , 46 ] , [ 103 , 46 ] , [ 116 , 65 ] ] ;
64011: LD_ADDR_VAR 0 3
64015: PUSH
64016: LD_VAR 0 3
64020: PUSH
64021: LD_INT 116
64023: PUSH
64024: LD_INT 65
64026: PUSH
64027: EMPTY
64028: LIST
64029: LIST
64030: PUSH
64031: LD_INT 103
64033: PUSH
64034: LD_INT 46
64036: PUSH
64037: EMPTY
64038: LIST
64039: LIST
64040: PUSH
64041: LD_INT 103
64043: PUSH
64044: LD_INT 33
64046: PUSH
64047: EMPTY
64048: LIST
64049: LIST
64050: PUSH
64051: LD_INT 92
64053: PUSH
64054: LD_INT 33
64056: PUSH
64057: EMPTY
64058: LIST
64059: LIST
64060: PUSH
64061: LD_INT 92
64063: PUSH
64064: LD_INT 46
64066: PUSH
64067: EMPTY
64068: LIST
64069: LIST
64070: PUSH
64071: LD_INT 103
64073: PUSH
64074: LD_INT 46
64076: PUSH
64077: EMPTY
64078: LIST
64079: LIST
64080: PUSH
64081: LD_INT 116
64083: PUSH
64084: LD_INT 65
64086: PUSH
64087: EMPTY
64088: LIST
64089: LIST
64090: PUSH
64091: EMPTY
64092: LIST
64093: LIST
64094: LIST
64095: LIST
64096: LIST
64097: LIST
64098: LIST
64099: ADD
64100: ST_TO_ADDR
// normal_attack_hexes = normal_attack_hexes ^ [ [ 126 , 75 ] , [ 131 , 67 ] , [ 146 , 83 ] , [ 158 , 94 ] , [ 161 , 108 ] ] ;
64101: LD_ADDR_VAR 0 3
64105: PUSH
64106: LD_VAR 0 3
64110: PUSH
64111: LD_INT 126
64113: PUSH
64114: LD_INT 75
64116: PUSH
64117: EMPTY
64118: LIST
64119: LIST
64120: PUSH
64121: LD_INT 131
64123: PUSH
64124: LD_INT 67
64126: PUSH
64127: EMPTY
64128: LIST
64129: LIST
64130: PUSH
64131: LD_INT 146
64133: PUSH
64134: LD_INT 83
64136: PUSH
64137: EMPTY
64138: LIST
64139: LIST
64140: PUSH
64141: LD_INT 158
64143: PUSH
64144: LD_INT 94
64146: PUSH
64147: EMPTY
64148: LIST
64149: LIST
64150: PUSH
64151: LD_INT 161
64153: PUSH
64154: LD_INT 108
64156: PUSH
64157: EMPTY
64158: LIST
64159: LIST
64160: PUSH
64161: EMPTY
64162: LIST
64163: LIST
64164: LIST
64165: LIST
64166: LIST
64167: ADD
64168: ST_TO_ADDR
// normal_attack_hexes = normal_attack_hexes ^ [ [ 148 , 94 ] , [ 133 , 89 ] , [ 120 , 86 ] , [ 108 , 87 ] , [ 95 , 85 ] , [ 82 , 84 ] ] ;
64169: LD_ADDR_VAR 0 3
64173: PUSH
64174: LD_VAR 0 3
64178: PUSH
64179: LD_INT 148
64181: PUSH
64182: LD_INT 94
64184: PUSH
64185: EMPTY
64186: LIST
64187: LIST
64188: PUSH
64189: LD_INT 133
64191: PUSH
64192: LD_INT 89
64194: PUSH
64195: EMPTY
64196: LIST
64197: LIST
64198: PUSH
64199: LD_INT 120
64201: PUSH
64202: LD_INT 86
64204: PUSH
64205: EMPTY
64206: LIST
64207: LIST
64208: PUSH
64209: LD_INT 108
64211: PUSH
64212: LD_INT 87
64214: PUSH
64215: EMPTY
64216: LIST
64217: LIST
64218: PUSH
64219: LD_INT 95
64221: PUSH
64222: LD_INT 85
64224: PUSH
64225: EMPTY
64226: LIST
64227: LIST
64228: PUSH
64229: LD_INT 82
64231: PUSH
64232: LD_INT 84
64234: PUSH
64235: EMPTY
64236: LIST
64237: LIST
64238: PUSH
64239: EMPTY
64240: LIST
64241: LIST
64242: LIST
64243: LIST
64244: LIST
64245: LIST
64246: ADD
64247: ST_TO_ADDR
// end ; 3 :
64248: GO 65480
64250: LD_INT 3
64252: DOUBLE
64253: EQUAL
64254: IFTRUE 64258
64256: GO 65479
64258: POP
// begin init_attack_hexes = [ ] ;
64259: LD_ADDR_VAR 0 2
64263: PUSH
64264: EMPTY
64265: ST_TO_ADDR
// normal_attack_hexes = init_attack_hexes ;
64266: LD_ADDR_VAR 0 3
64270: PUSH
64271: LD_VAR 0 2
64275: ST_TO_ADDR
// if farmer_attack_exit_point = 1 then
64276: LD_EXP 119
64280: PUSH
64281: LD_INT 1
64283: EQUAL
64284: IFFALSE 64786
// begin normal_attack_hexes = normal_attack_hexes ^ [ [ 87 , 52 ] , [ 88 , 67 ] ] ;
64286: LD_ADDR_VAR 0 3
64290: PUSH
64291: LD_VAR 0 3
64295: PUSH
64296: LD_INT 87
64298: PUSH
64299: LD_INT 52
64301: PUSH
64302: EMPTY
64303: LIST
64304: LIST
64305: PUSH
64306: LD_INT 88
64308: PUSH
64309: LD_INT 67
64311: PUSH
64312: EMPTY
64313: LIST
64314: LIST
64315: PUSH
64316: EMPTY
64317: LIST
64318: LIST
64319: ADD
64320: ST_TO_ADDR
// if Ru_small_base in player_bases_areas then
64321: LD_INT 2
64323: PUSH
64324: LD_EXP 118
64328: IN
64329: IFFALSE 64388
// normal_attack_hexes = normal_attack_hexes ^ [ [ 93 , 82 ] , [ 93 , 94 ] , [ 97 , 110 ] , [ 93 , 94 ] ] ;
64331: LD_ADDR_VAR 0 3
64335: PUSH
64336: LD_VAR 0 3
64340: PUSH
64341: LD_INT 93
64343: PUSH
64344: LD_INT 82
64346: PUSH
64347: EMPTY
64348: LIST
64349: LIST
64350: PUSH
64351: LD_INT 93
64353: PUSH
64354: LD_INT 94
64356: PUSH
64357: EMPTY
64358: LIST
64359: LIST
64360: PUSH
64361: LD_INT 97
64363: PUSH
64364: LD_INT 110
64366: PUSH
64367: EMPTY
64368: LIST
64369: LIST
64370: PUSH
64371: LD_INT 93
64373: PUSH
64374: LD_INT 94
64376: PUSH
64377: EMPTY
64378: LIST
64379: LIST
64380: PUSH
64381: EMPTY
64382: LIST
64383: LIST
64384: LIST
64385: LIST
64386: ADD
64387: ST_TO_ADDR
// if Ru_base in player_bases_areas then
64388: LD_INT 1
64390: PUSH
64391: LD_EXP 118
64395: IN
64396: IFFALSE 64545
// normal_attack_hexes = normal_attack_hexes ^ [ [ 93 , 82 ] , [ 80 , 82 ] , [ 65 , 72 ] , [ 50 , 60 ] , [ 52 , 72 ] , [ 45 , 77 ] , [ 39 , 62 ] , [ 35 , 46 ] , [ 50 , 60 ] , [ 65 , 72 ] , [ 80 , 82 ] , [ 93 , 82 ] ] else
64398: LD_ADDR_VAR 0 3
64402: PUSH
64403: LD_VAR 0 3
64407: PUSH
64408: LD_INT 93
64410: PUSH
64411: LD_INT 82
64413: PUSH
64414: EMPTY
64415: LIST
64416: LIST
64417: PUSH
64418: LD_INT 80
64420: PUSH
64421: LD_INT 82
64423: PUSH
64424: EMPTY
64425: LIST
64426: LIST
64427: PUSH
64428: LD_INT 65
64430: PUSH
64431: LD_INT 72
64433: PUSH
64434: EMPTY
64435: LIST
64436: LIST
64437: PUSH
64438: LD_INT 50
64440: PUSH
64441: LD_INT 60
64443: PUSH
64444: EMPTY
64445: LIST
64446: LIST
64447: PUSH
64448: LD_INT 52
64450: PUSH
64451: LD_INT 72
64453: PUSH
64454: EMPTY
64455: LIST
64456: LIST
64457: PUSH
64458: LD_INT 45
64460: PUSH
64461: LD_INT 77
64463: PUSH
64464: EMPTY
64465: LIST
64466: LIST
64467: PUSH
64468: LD_INT 39
64470: PUSH
64471: LD_INT 62
64473: PUSH
64474: EMPTY
64475: LIST
64476: LIST
64477: PUSH
64478: LD_INT 35
64480: PUSH
64481: LD_INT 46
64483: PUSH
64484: EMPTY
64485: LIST
64486: LIST
64487: PUSH
64488: LD_INT 50
64490: PUSH
64491: LD_INT 60
64493: PUSH
64494: EMPTY
64495: LIST
64496: LIST
64497: PUSH
64498: LD_INT 65
64500: PUSH
64501: LD_INT 72
64503: PUSH
64504: EMPTY
64505: LIST
64506: LIST
64507: PUSH
64508: LD_INT 80
64510: PUSH
64511: LD_INT 82
64513: PUSH
64514: EMPTY
64515: LIST
64516: LIST
64517: PUSH
64518: LD_INT 93
64520: PUSH
64521: LD_INT 82
64523: PUSH
64524: EMPTY
64525: LIST
64526: LIST
64527: PUSH
64528: EMPTY
64529: LIST
64530: LIST
64531: LIST
64532: LIST
64533: LIST
64534: LIST
64535: LIST
64536: LIST
64537: LIST
64538: LIST
64539: LIST
64540: LIST
64541: ADD
64542: ST_TO_ADDR
64543: GO 64579
// if Ru_small_base in player_bases_areas then
64545: LD_INT 2
64547: PUSH
64548: LD_EXP 118
64552: IN
64553: IFFALSE 64579
// normal_attack_hexes = normal_attack_hexes ^ [ [ 93 , 82 ] ] ;
64555: LD_ADDR_VAR 0 3
64559: PUSH
64560: LD_VAR 0 3
64564: PUSH
64565: LD_INT 93
64567: PUSH
64568: LD_INT 82
64570: PUSH
64571: EMPTY
64572: LIST
64573: LIST
64574: PUSH
64575: EMPTY
64576: LIST
64577: ADD
64578: ST_TO_ADDR
// normal_attack_hexes = normal_attack_hexes ^ [ [ 104 , 80 ] ] ;
64579: LD_ADDR_VAR 0 3
64583: PUSH
64584: LD_VAR 0 3
64588: PUSH
64589: LD_INT 104
64591: PUSH
64592: LD_INT 80
64594: PUSH
64595: EMPTY
64596: LIST
64597: LIST
64598: PUSH
64599: EMPTY
64600: LIST
64601: ADD
64602: ST_TO_ADDR
// if player_base_3 in player_bases_areas then
64603: LD_INT 24
64605: PUSH
64606: LD_EXP 118
64610: IN
64611: IFFALSE 64659
// normal_attack_hexes = normal_attack_hexes ^ [ [ 121 , 89 ] , [ 135 , 115 ] , [ 121 , 89 ] ] ;
64613: LD_ADDR_VAR 0 3
64617: PUSH
64618: LD_VAR 0 3
64622: PUSH
64623: LD_INT 121
64625: PUSH
64626: LD_INT 89
64628: PUSH
64629: EMPTY
64630: LIST
64631: LIST
64632: PUSH
64633: LD_INT 135
64635: PUSH
64636: LD_INT 115
64638: PUSH
64639: EMPTY
64640: LIST
64641: LIST
64642: PUSH
64643: LD_INT 121
64645: PUSH
64646: LD_INT 89
64648: PUSH
64649: EMPTY
64650: LIST
64651: LIST
64652: PUSH
64653: EMPTY
64654: LIST
64655: LIST
64656: LIST
64657: ADD
64658: ST_TO_ADDR
// normal_attack_hexes = normal_attack_hexes ^ [ [ 117 , 80 ] , [ 126 , 75 ] , [ 142 , 82 ] , [ 158 , 94 ] , [ 161 , 108 ] ] ;
64659: LD_ADDR_VAR 0 3
64663: PUSH
64664: LD_VAR 0 3
64668: PUSH
64669: LD_INT 117
64671: PUSH
64672: LD_INT 80
64674: PUSH
64675: EMPTY
64676: LIST
64677: LIST
64678: PUSH
64679: LD_INT 126
64681: PUSH
64682: LD_INT 75
64684: PUSH
64685: EMPTY
64686: LIST
64687: LIST
64688: PUSH
64689: LD_INT 142
64691: PUSH
64692: LD_INT 82
64694: PUSH
64695: EMPTY
64696: LIST
64697: LIST
64698: PUSH
64699: LD_INT 158
64701: PUSH
64702: LD_INT 94
64704: PUSH
64705: EMPTY
64706: LIST
64707: LIST
64708: PUSH
64709: LD_INT 161
64711: PUSH
64712: LD_INT 108
64714: PUSH
64715: EMPTY
64716: LIST
64717: LIST
64718: PUSH
64719: EMPTY
64720: LIST
64721: LIST
64722: LIST
64723: LIST
64724: LIST
64725: ADD
64726: ST_TO_ADDR
// normal_attack_hexes = normal_attack_hexes ^ [ [ 151 , 91 ] , [ 140 , 75 ] , [ 125 , 65 ] , [ 105 , 47 ] ] ;
64727: LD_ADDR_VAR 0 3
64731: PUSH
64732: LD_VAR 0 3
64736: PUSH
64737: LD_INT 151
64739: PUSH
64740: LD_INT 91
64742: PUSH
64743: EMPTY
64744: LIST
64745: LIST
64746: PUSH
64747: LD_INT 140
64749: PUSH
64750: LD_INT 75
64752: PUSH
64753: EMPTY
64754: LIST
64755: LIST
64756: PUSH
64757: LD_INT 125
64759: PUSH
64760: LD_INT 65
64762: PUSH
64763: EMPTY
64764: LIST
64765: LIST
64766: PUSH
64767: LD_INT 105
64769: PUSH
64770: LD_INT 47
64772: PUSH
64773: EMPTY
64774: LIST
64775: LIST
64776: PUSH
64777: EMPTY
64778: LIST
64779: LIST
64780: LIST
64781: LIST
64782: ADD
64783: ST_TO_ADDR
// end else
64784: GO 65477
// begin normal_attack_hexes = normal_attack_hexes ^ [ [ 116 , 62 ] ] ;
64786: LD_ADDR_VAR 0 3
64790: PUSH
64791: LD_VAR 0 3
64795: PUSH
64796: LD_INT 116
64798: PUSH
64799: LD_INT 62
64801: PUSH
64802: EMPTY
64803: LIST
64804: LIST
64805: PUSH
64806: EMPTY
64807: LIST
64808: ADD
64809: ST_TO_ADDR
// if player_base_4 in player_bases_areas or player_base_3 in player_bases_areas then
64810: LD_INT 25
64812: PUSH
64813: LD_EXP 118
64817: IN
64818: PUSH
64819: LD_INT 24
64821: PUSH
64822: LD_EXP 118
64826: IN
64827: OR
64828: IFFALSE 65148
// begin if player_base_4 in player_bases_areas then
64830: LD_INT 25
64832: PUSH
64833: LD_EXP 118
64837: IN
64838: IFFALSE 65047
// begin normal_attack_hexes = normal_attack_hexes ^ [ [ 130 , 71 ] , [ 146 , 83 ] , [ 158 , 94 ] , [ 161 , 108 ] ] ;
64840: LD_ADDR_VAR 0 3
64844: PUSH
64845: LD_VAR 0 3
64849: PUSH
64850: LD_INT 130
64852: PUSH
64853: LD_INT 71
64855: PUSH
64856: EMPTY
64857: LIST
64858: LIST
64859: PUSH
64860: LD_INT 146
64862: PUSH
64863: LD_INT 83
64865: PUSH
64866: EMPTY
64867: LIST
64868: LIST
64869: PUSH
64870: LD_INT 158
64872: PUSH
64873: LD_INT 94
64875: PUSH
64876: EMPTY
64877: LIST
64878: LIST
64879: PUSH
64880: LD_INT 161
64882: PUSH
64883: LD_INT 108
64885: PUSH
64886: EMPTY
64887: LIST
64888: LIST
64889: PUSH
64890: EMPTY
64891: LIST
64892: LIST
64893: LIST
64894: LIST
64895: ADD
64896: ST_TO_ADDR
// if player_base_3 in player_bases_areas then
64897: LD_INT 24
64899: PUSH
64900: LD_EXP 118
64904: IN
64905: IFFALSE 64999
// normal_attack_hexes = normal_attack_hexes ^ [ [ 148 , 94 ] , [ 139 , 101 ] , [ 130 , 115 ] , [ 139 , 101 ] , [ 148 , 94 ] , [ 146 , 83 ] , [ 130 , 71 ] ] else
64907: LD_ADDR_VAR 0 3
64911: PUSH
64912: LD_VAR 0 3
64916: PUSH
64917: LD_INT 148
64919: PUSH
64920: LD_INT 94
64922: PUSH
64923: EMPTY
64924: LIST
64925: LIST
64926: PUSH
64927: LD_INT 139
64929: PUSH
64930: LD_INT 101
64932: PUSH
64933: EMPTY
64934: LIST
64935: LIST
64936: PUSH
64937: LD_INT 130
64939: PUSH
64940: LD_INT 115
64942: PUSH
64943: EMPTY
64944: LIST
64945: LIST
64946: PUSH
64947: LD_INT 139
64949: PUSH
64950: LD_INT 101
64952: PUSH
64953: EMPTY
64954: LIST
64955: LIST
64956: PUSH
64957: LD_INT 148
64959: PUSH
64960: LD_INT 94
64962: PUSH
64963: EMPTY
64964: LIST
64965: LIST
64966: PUSH
64967: LD_INT 146
64969: PUSH
64970: LD_INT 83
64972: PUSH
64973: EMPTY
64974: LIST
64975: LIST
64976: PUSH
64977: LD_INT 130
64979: PUSH
64980: LD_INT 71
64982: PUSH
64983: EMPTY
64984: LIST
64985: LIST
64986: PUSH
64987: EMPTY
64988: LIST
64989: LIST
64990: LIST
64991: LIST
64992: LIST
64993: LIST
64994: LIST
64995: ADD
64996: ST_TO_ADDR
64997: GO 65045
// normal_attack_hexes = normal_attack_hexes ^ [ [ 158 , 94 ] , [ 146 , 83 ] , [ 130 , 71 ] ] ;
64999: LD_ADDR_VAR 0 3
65003: PUSH
65004: LD_VAR 0 3
65008: PUSH
65009: LD_INT 158
65011: PUSH
65012: LD_INT 94
65014: PUSH
65015: EMPTY
65016: LIST
65017: LIST
65018: PUSH
65019: LD_INT 146
65021: PUSH
65022: LD_INT 83
65024: PUSH
65025: EMPTY
65026: LIST
65027: LIST
65028: PUSH
65029: LD_INT 130
65031: PUSH
65032: LD_INT 71
65034: PUSH
65035: EMPTY
65036: LIST
65037: LIST
65038: PUSH
65039: EMPTY
65040: LIST
65041: LIST
65042: LIST
65043: ADD
65044: ST_TO_ADDR
// end else
65045: GO 65148
// normal_attack_hexes = normal_attack_hexes ^ [ [ 128 , 63 ] , [ 143 , 75 ] , [ 145 , 93 ] , [ 139 , 101 ] , [ 130 , 115 ] , [ 139 , 101 ] , [ 145 , 93 ] , [ 133 , 83 ] ] end ;
65047: LD_ADDR_VAR 0 3
65051: PUSH
65052: LD_VAR 0 3
65056: PUSH
65057: LD_INT 128
65059: PUSH
65060: LD_INT 63
65062: PUSH
65063: EMPTY
65064: LIST
65065: LIST
65066: PUSH
65067: LD_INT 143
65069: PUSH
65070: LD_INT 75
65072: PUSH
65073: EMPTY
65074: LIST
65075: LIST
65076: PUSH
65077: LD_INT 145
65079: PUSH
65080: LD_INT 93
65082: PUSH
65083: EMPTY
65084: LIST
65085: LIST
65086: PUSH
65087: LD_INT 139
65089: PUSH
65090: LD_INT 101
65092: PUSH
65093: EMPTY
65094: LIST
65095: LIST
65096: PUSH
65097: LD_INT 130
65099: PUSH
65100: LD_INT 115
65102: PUSH
65103: EMPTY
65104: LIST
65105: LIST
65106: PUSH
65107: LD_INT 139
65109: PUSH
65110: LD_INT 101
65112: PUSH
65113: EMPTY
65114: LIST
65115: LIST
65116: PUSH
65117: LD_INT 145
65119: PUSH
65120: LD_INT 93
65122: PUSH
65123: EMPTY
65124: LIST
65125: LIST
65126: PUSH
65127: LD_INT 133
65129: PUSH
65130: LD_INT 83
65132: PUSH
65133: EMPTY
65134: LIST
65135: LIST
65136: PUSH
65137: EMPTY
65138: LIST
65139: LIST
65140: LIST
65141: LIST
65142: LIST
65143: LIST
65144: LIST
65145: LIST
65146: ADD
65147: ST_TO_ADDR
// normal_attack_hexes = normal_attack_hexes ^ [ [ 120 , 76 ] , [ 113 , 82 ] , [ 104 , 86 ] ] ;
65148: LD_ADDR_VAR 0 3
65152: PUSH
65153: LD_VAR 0 3
65157: PUSH
65158: LD_INT 120
65160: PUSH
65161: LD_INT 76
65163: PUSH
65164: EMPTY
65165: LIST
65166: LIST
65167: PUSH
65168: LD_INT 113
65170: PUSH
65171: LD_INT 82
65173: PUSH
65174: EMPTY
65175: LIST
65176: LIST
65177: PUSH
65178: LD_INT 104
65180: PUSH
65181: LD_INT 86
65183: PUSH
65184: EMPTY
65185: LIST
65186: LIST
65187: PUSH
65188: EMPTY
65189: LIST
65190: LIST
65191: LIST
65192: ADD
65193: ST_TO_ADDR
// if Ru_small_base in player_bases_areas then
65194: LD_INT 2
65196: PUSH
65197: LD_EXP 118
65201: IN
65202: IFFALSE 65250
// normal_attack_hexes = normal_attack_hexes ^ [ [ 93 , 94 ] , [ 97 , 110 ] , [ 93 , 94 ] ] ;
65204: LD_ADDR_VAR 0 3
65208: PUSH
65209: LD_VAR 0 3
65213: PUSH
65214: LD_INT 93
65216: PUSH
65217: LD_INT 94
65219: PUSH
65220: EMPTY
65221: LIST
65222: LIST
65223: PUSH
65224: LD_INT 97
65226: PUSH
65227: LD_INT 110
65229: PUSH
65230: EMPTY
65231: LIST
65232: LIST
65233: PUSH
65234: LD_INT 93
65236: PUSH
65237: LD_INT 94
65239: PUSH
65240: EMPTY
65241: LIST
65242: LIST
65243: PUSH
65244: EMPTY
65245: LIST
65246: LIST
65247: LIST
65248: ADD
65249: ST_TO_ADDR
// if Ru_base in player_bases_areas then
65250: LD_INT 1
65252: PUSH
65253: LD_EXP 118
65257: IN
65258: IFFALSE 65407
// normal_attack_hexes = normal_attack_hexes ^ [ [ 93 , 82 ] , [ 80 , 82 ] , [ 65 , 72 ] , [ 50 , 60 ] , [ 52 , 72 ] , [ 45 , 77 ] , [ 39 , 62 ] , [ 35 , 46 ] , [ 50 , 60 ] , [ 65 , 72 ] , [ 80 , 82 ] , [ 93 , 82 ] ] else
65260: LD_ADDR_VAR 0 3
65264: PUSH
65265: LD_VAR 0 3
65269: PUSH
65270: LD_INT 93
65272: PUSH
65273: LD_INT 82
65275: PUSH
65276: EMPTY
65277: LIST
65278: LIST
65279: PUSH
65280: LD_INT 80
65282: PUSH
65283: LD_INT 82
65285: PUSH
65286: EMPTY
65287: LIST
65288: LIST
65289: PUSH
65290: LD_INT 65
65292: PUSH
65293: LD_INT 72
65295: PUSH
65296: EMPTY
65297: LIST
65298: LIST
65299: PUSH
65300: LD_INT 50
65302: PUSH
65303: LD_INT 60
65305: PUSH
65306: EMPTY
65307: LIST
65308: LIST
65309: PUSH
65310: LD_INT 52
65312: PUSH
65313: LD_INT 72
65315: PUSH
65316: EMPTY
65317: LIST
65318: LIST
65319: PUSH
65320: LD_INT 45
65322: PUSH
65323: LD_INT 77
65325: PUSH
65326: EMPTY
65327: LIST
65328: LIST
65329: PUSH
65330: LD_INT 39
65332: PUSH
65333: LD_INT 62
65335: PUSH
65336: EMPTY
65337: LIST
65338: LIST
65339: PUSH
65340: LD_INT 35
65342: PUSH
65343: LD_INT 46
65345: PUSH
65346: EMPTY
65347: LIST
65348: LIST
65349: PUSH
65350: LD_INT 50
65352: PUSH
65353: LD_INT 60
65355: PUSH
65356: EMPTY
65357: LIST
65358: LIST
65359: PUSH
65360: LD_INT 65
65362: PUSH
65363: LD_INT 72
65365: PUSH
65366: EMPTY
65367: LIST
65368: LIST
65369: PUSH
65370: LD_INT 80
65372: PUSH
65373: LD_INT 82
65375: PUSH
65376: EMPTY
65377: LIST
65378: LIST
65379: PUSH
65380: LD_INT 93
65382: PUSH
65383: LD_INT 82
65385: PUSH
65386: EMPTY
65387: LIST
65388: LIST
65389: PUSH
65390: EMPTY
65391: LIST
65392: LIST
65393: LIST
65394: LIST
65395: LIST
65396: LIST
65397: LIST
65398: LIST
65399: LIST
65400: LIST
65401: LIST
65402: LIST
65403: ADD
65404: ST_TO_ADDR
65405: GO 65431
// normal_attack_hexes = normal_attack_hexes ^ [ [ 96 , 76 ] ] ;
65407: LD_ADDR_VAR 0 3
65411: PUSH
65412: LD_VAR 0 3
65416: PUSH
65417: LD_INT 96
65419: PUSH
65420: LD_INT 76
65422: PUSH
65423: EMPTY
65424: LIST
65425: LIST
65426: PUSH
65427: EMPTY
65428: LIST
65429: ADD
65430: ST_TO_ADDR
// normal_attack_hexes = normal_attack_hexes ^ [ [ 88 , 66 ] , [ 88 , 54 ] , [ 98 , 46 ] ] ;
65431: LD_ADDR_VAR 0 3
65435: PUSH
65436: LD_VAR 0 3
65440: PUSH
65441: LD_INT 88
65443: PUSH
65444: LD_INT 66
65446: PUSH
65447: EMPTY
65448: LIST
65449: LIST
65450: PUSH
65451: LD_INT 88
65453: PUSH
65454: LD_INT 54
65456: PUSH
65457: EMPTY
65458: LIST
65459: LIST
65460: PUSH
65461: LD_INT 98
65463: PUSH
65464: LD_INT 46
65466: PUSH
65467: EMPTY
65468: LIST
65469: LIST
65470: PUSH
65471: EMPTY
65472: LIST
65473: LIST
65474: LIST
65475: ADD
65476: ST_TO_ADDR
// end ; end ; end ;
65477: GO 65480
65479: POP
// temp_list = UnitFilter ( retreat_vehicles_list [ base ] , [ f_alive ] ) ;
65480: LD_ADDR_VAR 0 9
65484: PUSH
65485: LD_VAR 0 19
65489: PUSH
65490: LD_VAR 0 1
65494: ARRAY
65495: PPUSH
65496: LD_INT 51
65498: PUSH
65499: EMPTY
65500: LIST
65501: PPUSH
65502: CALL_OW 72
65506: ST_TO_ADDR
// for i in UnitFilter ( ai_vehicles_attack [ base ] , [ f_control , control_manual ] ) diff retreat_vehicles_list [ base ] do
65507: LD_ADDR_VAR 0 5
65511: PUSH
65512: LD_EXP 50
65516: PUSH
65517: LD_VAR 0 1
65521: ARRAY
65522: PPUSH
65523: LD_INT 33
65525: PUSH
65526: LD_INT 1
65528: PUSH
65529: EMPTY
65530: LIST
65531: LIST
65532: PPUSH
65533: CALL_OW 72
65537: PUSH
65538: LD_VAR 0 19
65542: PUSH
65543: LD_VAR 0 1
65547: ARRAY
65548: DIFF
65549: PUSH
65550: FOR_IN
65551: IFFALSE 65586
// if GetLives ( i ) <= 250 then
65553: LD_VAR 0 5
65557: PPUSH
65558: CALL_OW 256
65562: PUSH
65563: LD_INT 250
65565: LESSEQUAL
65566: IFFALSE 65584
// temp_list = temp_list ^ i ;
65568: LD_ADDR_VAR 0 9
65572: PUSH
65573: LD_VAR 0 9
65577: PUSH
65578: LD_VAR 0 5
65582: ADD
65583: ST_TO_ADDR
65584: GO 65550
65586: POP
65587: POP
// retreat_vehicles_list = Replace ( retreat_vehicles_list , base , temp_list ) ;
65588: LD_ADDR_VAR 0 19
65592: PUSH
65593: LD_VAR 0 19
65597: PPUSH
65598: LD_VAR 0 1
65602: PPUSH
65603: LD_VAR 0 9
65607: PPUSH
65608: CALL_OW 1
65612: ST_TO_ADDR
// temp_list = UnitFilter ( retreat_mechanics_list [ base ] , [ f_alive ] ) ;
65613: LD_ADDR_VAR 0 9
65617: PUSH
65618: LD_VAR 0 20
65622: PUSH
65623: LD_VAR 0 1
65627: ARRAY
65628: PPUSH
65629: LD_INT 51
65631: PUSH
65632: EMPTY
65633: LIST
65634: PPUSH
65635: CALL_OW 72
65639: ST_TO_ADDR
// temp_list_2 = ai_mechanics_attack [ base ] diff retreat_mechanics_list [ base ] ;
65640: LD_ADDR_VAR 0 10
65644: PUSH
65645: LD_EXP 30
65649: PUSH
65650: LD_VAR 0 1
65654: ARRAY
65655: PUSH
65656: LD_VAR 0 20
65660: PUSH
65661: LD_VAR 0 1
65665: ARRAY
65666: DIFF
65667: ST_TO_ADDR
// for i = 1 to temp_list_2 - UnitFilter ( ai_vehicles_attack [ base ] , [ [ f_control , control_manual ] , [ f_ok ] ] ) do
65668: LD_ADDR_VAR 0 5
65672: PUSH
65673: DOUBLE
65674: LD_INT 1
65676: DEC
65677: ST_TO_ADDR
65678: LD_VAR 0 10
65682: PUSH
65683: LD_EXP 50
65687: PUSH
65688: LD_VAR 0 1
65692: ARRAY
65693: PPUSH
65694: LD_INT 33
65696: PUSH
65697: LD_INT 1
65699: PUSH
65700: EMPTY
65701: LIST
65702: LIST
65703: PUSH
65704: LD_INT 50
65706: PUSH
65707: EMPTY
65708: LIST
65709: PUSH
65710: EMPTY
65711: LIST
65712: LIST
65713: PPUSH
65714: CALL_OW 72
65718: MINUS
65719: PUSH
65720: FOR_TO
65721: IFFALSE 65812
// begin temp_unit = 0 ;
65723: LD_ADDR_VAR 0 8
65727: PUSH
65728: LD_INT 0
65730: ST_TO_ADDR
// for k in temp_list_2 do
65731: LD_ADDR_VAR 0 4
65735: PUSH
65736: LD_VAR 0 10
65740: PUSH
65741: FOR_IN
65742: IFFALSE 65782
// if not IsInUnit ( k ) in ai_vehicles_attack [ base ] then
65744: LD_VAR 0 4
65748: PPUSH
65749: CALL_OW 310
65753: PUSH
65754: LD_EXP 50
65758: PUSH
65759: LD_VAR 0 1
65763: ARRAY
65764: IN
65765: NOT
65766: IFFALSE 65780
// begin temp_unit = k ;
65768: LD_ADDR_VAR 0 8
65772: PUSH
65773: LD_VAR 0 4
65777: ST_TO_ADDR
// break ;
65778: GO 65782
// end ;
65780: GO 65741
65782: POP
65783: POP
// if temp_unit > 0 then
65784: LD_VAR 0 8
65788: PUSH
65789: LD_INT 0
65791: GREATER
65792: IFFALSE 65810
// begin temp_list = temp_list ^ temp_unit ;
65794: LD_ADDR_VAR 0 9
65798: PUSH
65799: LD_VAR 0 9
65803: PUSH
65804: LD_VAR 0 8
65808: ADD
65809: ST_TO_ADDR
// end ; end ;
65810: GO 65720
65812: POP
65813: POP
// retreat_mechanics_list = Replace ( retreat_mechanics_list , base , temp_list ) ;
65814: LD_ADDR_VAR 0 20
65818: PUSH
65819: LD_VAR 0 20
65823: PPUSH
65824: LD_VAR 0 1
65828: PPUSH
65829: LD_VAR 0 9
65833: PPUSH
65834: CALL_OW 1
65838: ST_TO_ADDR
// for i in retreat_vehicles_list [ base ] ^ retreat_mechanics_list [ base ] do
65839: LD_ADDR_VAR 0 5
65843: PUSH
65844: LD_VAR 0 19
65848: PUSH
65849: LD_VAR 0 1
65853: ARRAY
65854: PUSH
65855: LD_VAR 0 20
65859: PUSH
65860: LD_VAR 0 1
65864: ARRAY
65865: ADD
65866: PUSH
65867: FOR_IN
65868: IFFALSE 66383
// if IsInArea ( i , GetBaseArea ( base ) ) then
65870: LD_VAR 0 5
65874: PPUSH
65875: LD_VAR 0 1
65879: PPUSH
65880: CALL 27032 0 1
65884: PPUSH
65885: CALL_OW 308
65889: IFFALSE 66342
// begin if GetType ( i ) = unit_vehicle then
65891: LD_VAR 0 5
65895: PPUSH
65896: CALL_OW 247
65900: PUSH
65901: LD_INT 2
65903: EQUAL
65904: IFFALSE 66189
// begin temp_list = ai_vehicles_attack [ base ] diff i ;
65906: LD_ADDR_VAR 0 9
65910: PUSH
65911: LD_EXP 50
65915: PUSH
65916: LD_VAR 0 1
65920: ARRAY
65921: PUSH
65922: LD_VAR 0 5
65926: DIFF
65927: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
65928: LD_ADDR_EXP 50
65932: PUSH
65933: LD_EXP 50
65937: PPUSH
65938: LD_VAR 0 1
65942: PPUSH
65943: LD_VAR 0 9
65947: PPUSH
65948: CALL_OW 1
65952: ST_TO_ADDR
// case GetWeapon ( i ) of ru_time_lapser :
65953: LD_VAR 0 5
65957: PPUSH
65958: CALL_OW 264
65962: PUSH
65963: LD_INT 49
65965: DOUBLE
65966: EQUAL
65967: IFTRUE 65971
65969: GO 66021
65971: POP
// begin temp_list = ai_taufield_vehicles [ base ] ^ i ;
65972: LD_ADDR_VAR 0 9
65976: PUSH
65977: LD_EXP 83
65981: PUSH
65982: LD_VAR 0 1
65986: ARRAY
65987: PUSH
65988: LD_VAR 0 5
65992: ADD
65993: ST_TO_ADDR
// ai_taufield_vehicles = Replace ( ai_taufield_vehicles , base , temp_list ) ;
65994: LD_ADDR_EXP 83
65998: PUSH
65999: LD_EXP 83
66003: PPUSH
66004: LD_VAR 0 1
66008: PPUSH
66009: LD_VAR 0 9
66013: PPUSH
66014: CALL_OW 1
66018: ST_TO_ADDR
// end ; ar_selfpropelled_bomb :
66019: GO 66127
66021: LD_INT 29
66023: DOUBLE
66024: EQUAL
66025: IFTRUE 66029
66027: GO 66079
66029: POP
// begin temp_list = ai_implosion_vehicles [ base ] ^ i ;
66030: LD_ADDR_VAR 0 9
66034: PUSH
66035: LD_EXP 84
66039: PUSH
66040: LD_VAR 0 1
66044: ARRAY
66045: PUSH
66046: LD_VAR 0 5
66050: ADD
66051: ST_TO_ADDR
// ai_implosion_vehicles = Replace ( ai_implosion_vehicles , base , temp_list ) ;
66052: LD_ADDR_EXP 84
66056: PUSH
66057: LD_EXP 84
66061: PPUSH
66062: LD_VAR 0 1
66066: PPUSH
66067: LD_VAR 0 9
66071: PPUSH
66072: CALL_OW 1
66076: ST_TO_ADDR
// end ; else
66077: GO 66127
66079: POP
// begin temp_list = ai_vehicles_defend [ base ] ^ i ;
66080: LD_ADDR_VAR 0 9
66084: PUSH
66085: LD_EXP 49
66089: PUSH
66090: LD_VAR 0 1
66094: ARRAY
66095: PUSH
66096: LD_VAR 0 5
66100: ADD
66101: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
66102: LD_ADDR_EXP 49
66106: PUSH
66107: LD_EXP 49
66111: PPUSH
66112: LD_VAR 0 1
66116: PPUSH
66117: LD_VAR 0 9
66121: PPUSH
66122: CALL_OW 1
66126: ST_TO_ADDR
// end ; end ; temp_list = retreat_vehicles_list [ base ] diff i ;
66127: LD_ADDR_VAR 0 9
66131: PUSH
66132: LD_VAR 0 19
66136: PUSH
66137: LD_VAR 0 1
66141: ARRAY
66142: PUSH
66143: LD_VAR 0 5
66147: DIFF
66148: ST_TO_ADDR
// retreat_vehicles_list = Replace ( retreat_vehicles_list , base , temp_list ) ;
66149: LD_ADDR_VAR 0 19
66153: PUSH
66154: LD_VAR 0 19
66158: PPUSH
66159: LD_VAR 0 1
66163: PPUSH
66164: LD_VAR 0 9
66168: PPUSH
66169: CALL_OW 1
66173: ST_TO_ADDR
// i = UnitsInside ( i ) ;
66174: LD_ADDR_VAR 0 5
66178: PUSH
66179: LD_VAR 0 5
66183: PPUSH
66184: CALL_OW 313
66188: ST_TO_ADDR
// end ; if i > 0 then
66189: LD_VAR 0 5
66193: PUSH
66194: LD_INT 0
66196: GREATER
66197: IFFALSE 66340
// begin temp_list = ai_mechanics_attack [ base ] diff i ;
66199: LD_ADDR_VAR 0 9
66203: PUSH
66204: LD_EXP 30
66208: PUSH
66209: LD_VAR 0 1
66213: ARRAY
66214: PUSH
66215: LD_VAR 0 5
66219: DIFF
66220: ST_TO_ADDR
// ai_mechanics_attack = Replace ( ai_mechanics_attack , base , temp_list ) ;
66221: LD_ADDR_EXP 30
66225: PUSH
66226: LD_EXP 30
66230: PPUSH
66231: LD_VAR 0 1
66235: PPUSH
66236: LD_VAR 0 9
66240: PPUSH
66241: CALL_OW 1
66245: ST_TO_ADDR
// temp_list = ai_mechanics_defend [ base ] ^ i ;
66246: LD_ADDR_VAR 0 9
66250: PUSH
66251: LD_EXP 29
66255: PUSH
66256: LD_VAR 0 1
66260: ARRAY
66261: PUSH
66262: LD_VAR 0 5
66266: ADD
66267: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , temp_list ) ;
66268: LD_ADDR_EXP 29
66272: PUSH
66273: LD_EXP 29
66277: PPUSH
66278: LD_VAR 0 1
66282: PPUSH
66283: LD_VAR 0 9
66287: PPUSH
66288: CALL_OW 1
66292: ST_TO_ADDR
// temp_list = retreat_mechanics_list [ base ] diff i ;
66293: LD_ADDR_VAR 0 9
66297: PUSH
66298: LD_VAR 0 20
66302: PUSH
66303: LD_VAR 0 1
66307: ARRAY
66308: PUSH
66309: LD_VAR 0 5
66313: DIFF
66314: ST_TO_ADDR
// retreat_mechanics_list = Replace ( retreat_mechanics_list , base , temp_list ) ;
66315: LD_ADDR_VAR 0 20
66319: PUSH
66320: LD_VAR 0 20
66324: PPUSH
66325: LD_VAR 0 1
66329: PPUSH
66330: LD_VAR 0 9
66334: PPUSH
66335: CALL_OW 1
66339: ST_TO_ADDR
// end ; end else
66340: GO 66381
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
66342: LD_VAR 0 5
66346: PPUSH
66347: LD_EXP 55
66351: PUSH
66352: LD_VAR 0 1
66356: ARRAY
66357: PUSH
66358: LD_INT 1
66360: ARRAY
66361: PPUSH
66362: LD_EXP 55
66366: PUSH
66367: LD_VAR 0 1
66371: ARRAY
66372: PUSH
66373: LD_INT 2
66375: ARRAY
66376: PPUSH
66377: CALL_OW 111
66381: GO 65867
66383: POP
66384: POP
// inside_ok = true ;
66385: LD_ADDR_VAR 0 13
66389: PUSH
66390: LD_INT 1
66392: ST_TO_ADDR
// for i in UnitFilter ( ai_vehicles_attack [ base ] diff retreat_vehicles_list [ base ] , [ [ f_control , control_manual ] , [ f_not , [ f_empty ] ] ] ) do
66393: LD_ADDR_VAR 0 5
66397: PUSH
66398: LD_EXP 50
66402: PUSH
66403: LD_VAR 0 1
66407: ARRAY
66408: PUSH
66409: LD_VAR 0 19
66413: PUSH
66414: LD_VAR 0 1
66418: ARRAY
66419: DIFF
66420: PPUSH
66421: LD_INT 33
66423: PUSH
66424: LD_INT 1
66426: PUSH
66427: EMPTY
66428: LIST
66429: LIST
66430: PUSH
66431: LD_INT 3
66433: PUSH
66434: LD_INT 58
66436: PUSH
66437: EMPTY
66438: LIST
66439: PUSH
66440: EMPTY
66441: LIST
66442: LIST
66443: PUSH
66444: EMPTY
66445: LIST
66446: LIST
66447: PPUSH
66448: CALL_OW 72
66452: PUSH
66453: FOR_IN
66454: IFFALSE 66513
// begin temp_unit = UnitsInside ( i ) [ 1 ] ;
66456: LD_ADDR_VAR 0 8
66460: PUSH
66461: LD_VAR 0 5
66465: PPUSH
66466: CALL_OW 313
66470: PUSH
66471: LD_INT 1
66473: ARRAY
66474: ST_TO_ADDR
// if not temp_unit in ai_mechanics_attack [ base ] then
66475: LD_VAR 0 8
66479: PUSH
66480: LD_EXP 30
66484: PUSH
66485: LD_VAR 0 1
66489: ARRAY
66490: IN
66491: NOT
66492: IFFALSE 66511
// begin ComExitVehicle ( temp_unit ) ;
66494: LD_VAR 0 8
66498: PPUSH
66499: CALL_OW 121
// inside_ok = false ;
66503: LD_ADDR_VAR 0 13
66507: PUSH
66508: LD_INT 0
66510: ST_TO_ADDR
// end ; end ;
66511: GO 66453
66513: POP
66514: POP
// temp_list = UnitFilter ( ai_vehicles_attack [ base ] , [ [ f_control , control_manual ] , [ f_ok ] , [ f_empty ] ] ) ;
66515: LD_ADDR_VAR 0 9
66519: PUSH
66520: LD_EXP 50
66524: PUSH
66525: LD_VAR 0 1
66529: ARRAY
66530: PPUSH
66531: LD_INT 33
66533: PUSH
66534: LD_INT 1
66536: PUSH
66537: EMPTY
66538: LIST
66539: LIST
66540: PUSH
66541: LD_INT 50
66543: PUSH
66544: EMPTY
66545: LIST
66546: PUSH
66547: LD_INT 58
66549: PUSH
66550: EMPTY
66551: LIST
66552: PUSH
66553: EMPTY
66554: LIST
66555: LIST
66556: LIST
66557: PPUSH
66558: CALL_OW 72
66562: ST_TO_ADDR
// if temp_list > 0 then
66563: LD_VAR 0 9
66567: PUSH
66568: LD_INT 0
66570: GREATER
66571: IFFALSE 66778
// begin temp_list_2 = UnitFilter ( ai_mechanics_attack [ base ] diff retreat_mechanics_list [ base ] , [ f_not , [ f_driving ] ] ) ;
66573: LD_ADDR_VAR 0 10
66577: PUSH
66578: LD_EXP 30
66582: PUSH
66583: LD_VAR 0 1
66587: ARRAY
66588: PUSH
66589: LD_VAR 0 20
66593: PUSH
66594: LD_VAR 0 1
66598: ARRAY
66599: DIFF
66600: PPUSH
66601: LD_INT 3
66603: PUSH
66604: LD_INT 55
66606: PUSH
66607: EMPTY
66608: LIST
66609: PUSH
66610: EMPTY
66611: LIST
66612: LIST
66613: PPUSH
66614: CALL_OW 72
66618: ST_TO_ADDR
// for i in temp_list do
66619: LD_ADDR_VAR 0 5
66623: PUSH
66624: LD_VAR 0 9
66628: PUSH
66629: FOR_IN
66630: IFFALSE 66774
// begin if temp_list_2 = 0 then
66632: LD_VAR 0 10
66636: PUSH
66637: LD_INT 0
66639: EQUAL
66640: IFFALSE 66644
// break ;
66642: GO 66774
// temp_unit = AllNearestUnitToUnit ( temp_list_2 , i ) ;
66644: LD_ADDR_VAR 0 8
66648: PUSH
66649: LD_VAR 0 10
66653: PPUSH
66654: LD_VAR 0 5
66658: PPUSH
66659: CALL_OW 75
66663: ST_TO_ADDR
// k = IsInUnit ( temp_unit ) ;
66664: LD_ADDR_VAR 0 4
66668: PUSH
66669: LD_VAR 0 8
66673: PPUSH
66674: CALL_OW 310
66678: ST_TO_ADDR
// if k <> i then
66679: LD_VAR 0 4
66683: PUSH
66684: LD_VAR 0 5
66688: NONEQUAL
66689: IFFALSE 66756
// case GetType ( k ) of unit_vehicle :
66691: LD_VAR 0 4
66695: PPUSH
66696: CALL_OW 247
66700: PUSH
66701: LD_INT 2
66703: DOUBLE
66704: EQUAL
66705: IFTRUE 66709
66707: GO 66721
66709: POP
// ComExitVehicle ( temp_unit ) ; unit_building :
66710: LD_VAR 0 8
66714: PPUSH
66715: CALL_OW 121
66719: GO 66756
66721: LD_INT 3
66723: DOUBLE
66724: EQUAL
66725: IFTRUE 66729
66727: GO 66741
66729: POP
// ComExitBuilding ( temp_unit ) ; else
66730: LD_VAR 0 8
66734: PPUSH
66735: CALL_OW 122
66739: GO 66756
66741: POP
// ComEnterUnit ( temp_unit , i ) ; end ;
66742: LD_VAR 0 8
66746: PPUSH
66747: LD_VAR 0 5
66751: PPUSH
66752: CALL_OW 120
// temp_list_2 = temp_list_2 diff temp_unit ;
66756: LD_ADDR_VAR 0 10
66760: PUSH
66761: LD_VAR 0 10
66765: PUSH
66766: LD_VAR 0 8
66770: DIFF
66771: ST_TO_ADDR
// end ;
66772: GO 66629
66774: POP
66775: POP
// end else
66776: GO 66807
// if inside_ok then
66778: LD_VAR 0 13
66782: IFFALSE 66807
// all_are_ready = Replace ( all_are_ready , base , true ) ;
66784: LD_ADDR_VAR 0 16
66788: PUSH
66789: LD_VAR 0 16
66793: PPUSH
66794: LD_VAR 0 1
66798: PPUSH
66799: LD_INT 1
66801: PPUSH
66802: CALL_OW 1
66806: ST_TO_ADDR
// if false in all_are_ready then
66807: LD_INT 0
66809: PUSH
66810: LD_VAR 0 16
66814: IN
66815: IFFALSE 66819
// continue ;
66817: GO 63338
// attacking_vehicles = ai_vehicles_attack [ base ] diff retreat_vehicles_list [ base ] ;
66819: LD_ADDR_VAR 0 14
66823: PUSH
66824: LD_EXP 50
66828: PUSH
66829: LD_VAR 0 1
66833: ARRAY
66834: PUSH
66835: LD_VAR 0 19
66839: PUSH
66840: LD_VAR 0 1
66844: ARRAY
66845: DIFF
66846: ST_TO_ADDR
// temp_list_2 = [ 9999999 , 9999999 ] ;
66847: LD_ADDR_VAR 0 10
66851: PUSH
66852: LD_INT 9999999
66854: PUSH
66855: LD_INT 9999999
66857: PUSH
66858: EMPTY
66859: LIST
66860: LIST
66861: ST_TO_ADDR
// for i in UnitFilter ( attacking_vehicles , [ [ f_not , [ f_weapon , ru_time_lapser ] ] , [ f_not , [ f_weapon , ar_selfpropelled_bomb ] , [ f_not , [ f_weapon , ru_rocket ] ] ] , [ f_ok ] ] ) do
66862: LD_ADDR_VAR 0 5
66866: PUSH
66867: LD_VAR 0 14
66871: PPUSH
66872: LD_INT 3
66874: PUSH
66875: LD_INT 34
66877: PUSH
66878: LD_INT 49
66880: PUSH
66881: EMPTY
66882: LIST
66883: LIST
66884: PUSH
66885: EMPTY
66886: LIST
66887: LIST
66888: PUSH
66889: LD_INT 3
66891: PUSH
66892: LD_INT 34
66894: PUSH
66895: LD_INT 29
66897: PUSH
66898: EMPTY
66899: LIST
66900: LIST
66901: PUSH
66902: LD_INT 3
66904: PUSH
66905: LD_INT 34
66907: PUSH
66908: LD_INT 47
66910: PUSH
66911: EMPTY
66912: LIST
66913: LIST
66914: PUSH
66915: EMPTY
66916: LIST
66917: LIST
66918: PUSH
66919: EMPTY
66920: LIST
66921: LIST
66922: LIST
66923: PUSH
66924: LD_INT 50
66926: PUSH
66927: EMPTY
66928: LIST
66929: PUSH
66930: EMPTY
66931: LIST
66932: LIST
66933: LIST
66934: PPUSH
66935: CALL_OW 72
66939: PUSH
66940: FOR_IN
66941: IFFALSE 66996
// if ai_attacking_unit_hex_index [ i ] < temp_list_2 [ 1 ] then
66943: LD_EXP 73
66947: PUSH
66948: LD_VAR 0 5
66952: ARRAY
66953: PUSH
66954: LD_VAR 0 10
66958: PUSH
66959: LD_INT 1
66961: ARRAY
66962: LESS
66963: IFFALSE 66994
// temp_list_2 = Replace ( temp_list_2 , 1 , ai_attacking_unit_hex_index [ i ] ) ;
66965: LD_ADDR_VAR 0 10
66969: PUSH
66970: LD_VAR 0 10
66974: PPUSH
66975: LD_INT 1
66977: PPUSH
66978: LD_EXP 73
66982: PUSH
66983: LD_VAR 0 5
66987: ARRAY
66988: PPUSH
66989: CALL_OW 1
66993: ST_TO_ADDR
66994: GO 66940
66996: POP
66997: POP
// for i in UnitFilter ( attacking_vehicles , [ [ f_or , [ f_weapon , ru_time_lapser ] , [ f_weapon , ar_selfpropelled_bomb ] ] , [ f_ok ] ] ) do
66998: LD_ADDR_VAR 0 5
67002: PUSH
67003: LD_VAR 0 14
67007: PPUSH
67008: LD_INT 2
67010: PUSH
67011: LD_INT 34
67013: PUSH
67014: LD_INT 49
67016: PUSH
67017: EMPTY
67018: LIST
67019: LIST
67020: PUSH
67021: LD_INT 34
67023: PUSH
67024: LD_INT 29
67026: PUSH
67027: EMPTY
67028: LIST
67029: LIST
67030: PUSH
67031: EMPTY
67032: LIST
67033: LIST
67034: LIST
67035: PUSH
67036: LD_INT 50
67038: PUSH
67039: EMPTY
67040: LIST
67041: PUSH
67042: EMPTY
67043: LIST
67044: LIST
67045: PPUSH
67046: CALL_OW 72
67050: PUSH
67051: FOR_IN
67052: IFFALSE 67107
// if ai_attacking_unit_hex_index [ i ] < temp_list_2 [ 2 ] then
67054: LD_EXP 73
67058: PUSH
67059: LD_VAR 0 5
67063: ARRAY
67064: PUSH
67065: LD_VAR 0 10
67069: PUSH
67070: LD_INT 2
67072: ARRAY
67073: LESS
67074: IFFALSE 67105
// temp_list_2 = Replace ( temp_list_2 , 2 , ai_attacking_unit_hex_index [ i ] ) ;
67076: LD_ADDR_VAR 0 10
67080: PUSH
67081: LD_VAR 0 10
67085: PPUSH
67086: LD_INT 2
67088: PPUSH
67089: LD_EXP 73
67093: PUSH
67094: LD_VAR 0 5
67098: ARRAY
67099: PPUSH
67100: CALL_OW 1
67104: ST_TO_ADDR
67105: GO 67051
67107: POP
67108: POP
// if temp_list_2 [ 2 ] <= normal_attack_hexes and temp_list_2 [ 2 ] > 1 then
67109: LD_VAR 0 10
67113: PUSH
67114: LD_INT 2
67116: ARRAY
67117: PUSH
67118: LD_VAR 0 3
67122: LESSEQUAL
67123: PUSH
67124: LD_VAR 0 10
67128: PUSH
67129: LD_INT 2
67131: ARRAY
67132: PUSH
67133: LD_INT 1
67135: GREATER
67136: AND
67137: IFFALSE 67406
// begin temp_list = [ normal_attack_hexes [ temp_list_2 [ 2 ] - 1 ] , normal_attack_hexes [ temp_list_2 [ 2 ] ] ] ;
67139: LD_ADDR_VAR 0 9
67143: PUSH
67144: LD_VAR 0 3
67148: PUSH
67149: LD_VAR 0 10
67153: PUSH
67154: LD_INT 2
67156: ARRAY
67157: PUSH
67158: LD_INT 1
67160: MINUS
67161: ARRAY
67162: PUSH
67163: LD_VAR 0 3
67167: PUSH
67168: LD_VAR 0 10
67172: PUSH
67173: LD_INT 2
67175: ARRAY
67176: ARRAY
67177: PUSH
67178: EMPTY
67179: LIST
67180: LIST
67181: ST_TO_ADDR
// k = AI_GetTurnDirection ( temp_list [ 1 ] [ 1 ] , temp_list [ 1 ] [ 2 ] , temp_list [ 2 ] [ 1 ] , temp_list [ 2 ] [ 2 ] ) ;
67182: LD_ADDR_VAR 0 4
67186: PUSH
67187: LD_VAR 0 9
67191: PUSH
67192: LD_INT 1
67194: ARRAY
67195: PUSH
67196: LD_INT 1
67198: ARRAY
67199: PPUSH
67200: LD_VAR 0 9
67204: PUSH
67205: LD_INT 1
67207: ARRAY
67208: PUSH
67209: LD_INT 2
67211: ARRAY
67212: PPUSH
67213: LD_VAR 0 9
67217: PUSH
67218: LD_INT 2
67220: ARRAY
67221: PUSH
67222: LD_INT 1
67224: ARRAY
67225: PPUSH
67226: LD_VAR 0 9
67230: PUSH
67231: LD_INT 2
67233: ARRAY
67234: PUSH
67235: LD_INT 2
67237: ARRAY
67238: PPUSH
67239: CALL 21168 0 4
67243: ST_TO_ADDR
// dist = 9999999 ;
67244: LD_ADDR_VAR 0 11
67248: PUSH
67249: LD_INT 9999999
67251: ST_TO_ADDR
// for i in UnitFilter ( attacking_vehicles , [ [ f_or , [ f_weapon , ru_time_lapser ] , [ f_weapon , ar_selfpropelled_bomb ] ] , [ f_ok ] ] ) do
67252: LD_ADDR_VAR 0 5
67256: PUSH
67257: LD_VAR 0 14
67261: PPUSH
67262: LD_INT 2
67264: PUSH
67265: LD_INT 34
67267: PUSH
67268: LD_INT 49
67270: PUSH
67271: EMPTY
67272: LIST
67273: LIST
67274: PUSH
67275: LD_INT 34
67277: PUSH
67278: LD_INT 29
67280: PUSH
67281: EMPTY
67282: LIST
67283: LIST
67284: PUSH
67285: EMPTY
67286: LIST
67287: LIST
67288: LIST
67289: PUSH
67290: LD_INT 50
67292: PUSH
67293: EMPTY
67294: LIST
67295: PUSH
67296: EMPTY
67297: LIST
67298: LIST
67299: PPUSH
67300: CALL_OW 72
67304: PUSH
67305: FOR_IN
67306: IFFALSE 67402
// begin g = GetDistUnitXY ( i , temp_list [ 1 ] [ 1 ] , temp_list [ 1 ] [ 2 ] ) ;
67308: LD_ADDR_VAR 0 6
67312: PUSH
67313: LD_VAR 0 5
67317: PPUSH
67318: LD_VAR 0 9
67322: PUSH
67323: LD_INT 1
67325: ARRAY
67326: PUSH
67327: LD_INT 1
67329: ARRAY
67330: PPUSH
67331: LD_VAR 0 9
67335: PUSH
67336: LD_INT 1
67338: ARRAY
67339: PUSH
67340: LD_INT 2
67342: ARRAY
67343: PPUSH
67344: CALL_OW 297
67348: ST_TO_ADDR
// if g < dist then
67349: LD_VAR 0 6
67353: PUSH
67354: LD_VAR 0 11
67358: LESS
67359: IFFALSE 67400
// begin dist = g ;
67361: LD_ADDR_VAR 0 11
67365: PUSH
67366: LD_VAR 0 6
67370: ST_TO_ADDR
// temp_list_3 = [ GetX ( i ) , GetY ( i ) ] ;
67371: LD_ADDR_VAR 0 7
67375: PUSH
67376: LD_VAR 0 5
67380: PPUSH
67381: CALL_OW 250
67385: PUSH
67386: LD_VAR 0 5
67390: PPUSH
67391: CALL_OW 251
67395: PUSH
67396: EMPTY
67397: LIST
67398: LIST
67399: ST_TO_ADDR
// end ; end ;
67400: GO 67305
67402: POP
67403: POP
// end else
67404: GO 67415
// k = - 1 ;
67406: LD_ADDR_VAR 0 4
67410: PUSH
67411: LD_INT 1
67413: NEG
67414: ST_TO_ADDR
// for i in attacking_vehicles do
67415: LD_ADDR_VAR 0 5
67419: PUSH
67420: LD_VAR 0 14
67424: PUSH
67425: FOR_IN
67426: IFFALSE 68248
// if ai_attacking_unit_hex_index [ i ] <= normal_attack_hexes then
67428: LD_EXP 73
67432: PUSH
67433: LD_VAR 0 5
67437: ARRAY
67438: PUSH
67439: LD_VAR 0 3
67443: LESSEQUAL
67444: IFFALSE 68246
// begin temp_value = false ;
67446: LD_ADDR_VAR 0 12
67450: PUSH
67451: LD_INT 0
67453: ST_TO_ADDR
// if ai_attacking_unit_hex_index [ i ] + 1 <= normal_attack_hexes then
67454: LD_EXP 73
67458: PUSH
67459: LD_VAR 0 5
67463: ARRAY
67464: PUSH
67465: LD_INT 1
67467: PLUS
67468: PUSH
67469: LD_VAR 0 3
67473: LESSEQUAL
67474: IFFALSE 67512
// if normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] + 1 ] in init_attack_hexes then
67476: LD_VAR 0 3
67480: PUSH
67481: LD_EXP 73
67485: PUSH
67486: LD_VAR 0 5
67490: ARRAY
67491: PUSH
67492: LD_INT 1
67494: PLUS
67495: ARRAY
67496: PUSH
67497: LD_VAR 0 2
67501: IN
67502: IFFALSE 67512
// temp_value = true ;
67504: LD_ADDR_VAR 0 12
67508: PUSH
67509: LD_INT 1
67511: ST_TO_ADDR
// if not temp_value then
67512: LD_VAR 0 12
67516: NOT
67517: IFFALSE 67757
// if not GetWeapon ( i ) in [ ru_time_lapser , ar_selfpropelled_bomb ] then
67519: LD_VAR 0 5
67523: PPUSH
67524: CALL_OW 264
67528: PUSH
67529: LD_INT 49
67531: PUSH
67532: LD_INT 29
67534: PUSH
67535: EMPTY
67536: LIST
67537: LIST
67538: IN
67539: NOT
67540: IFFALSE 67693
// begin temp_value := ai_attacking_unit_hex_index [ i ] + 1 <= temp_list_2 [ 1 ] + 1 and ai_attacking_unit_hex_index [ i ] + 1 <= temp_list_2 [ 2 ] ;
67542: LD_ADDR_VAR 0 12
67546: PUSH
67547: LD_EXP 73
67551: PUSH
67552: LD_VAR 0 5
67556: ARRAY
67557: PUSH
67558: LD_INT 1
67560: PLUS
67561: PUSH
67562: LD_VAR 0 10
67566: PUSH
67567: LD_INT 1
67569: ARRAY
67570: PUSH
67571: LD_INT 1
67573: PLUS
67574: LESSEQUAL
67575: PUSH
67576: LD_EXP 73
67580: PUSH
67581: LD_VAR 0 5
67585: ARRAY
67586: PUSH
67587: LD_INT 1
67589: PLUS
67590: PUSH
67591: LD_VAR 0 10
67595: PUSH
67596: LD_INT 2
67598: ARRAY
67599: LESSEQUAL
67600: AND
67601: ST_TO_ADDR
// if temp_value and ai_attacking_unit_hex_index [ i ] + 1 = temp_list_2 [ 2 ] and k <> - 1 then
67602: LD_VAR 0 12
67606: PUSH
67607: LD_EXP 73
67611: PUSH
67612: LD_VAR 0 5
67616: ARRAY
67617: PUSH
67618: LD_INT 1
67620: PLUS
67621: PUSH
67622: LD_VAR 0 10
67626: PUSH
67627: LD_INT 2
67629: ARRAY
67630: EQUAL
67631: AND
67632: PUSH
67633: LD_VAR 0 4
67637: PUSH
67638: LD_INT 1
67640: NEG
67641: NONEQUAL
67642: AND
67643: IFFALSE 67691
// begin if not BehindLine ( i , temp_list_3 [ 1 ] , temp_list_3 [ 2 ] , k , 4 ) then
67645: LD_VAR 0 5
67649: PPUSH
67650: LD_VAR 0 7
67654: PUSH
67655: LD_INT 1
67657: ARRAY
67658: PPUSH
67659: LD_VAR 0 7
67663: PUSH
67664: LD_INT 2
67666: ARRAY
67667: PPUSH
67668: LD_VAR 0 4
67672: PPUSH
67673: LD_INT 4
67675: PPUSH
67676: CALL 21443 0 5
67680: NOT
67681: IFFALSE 67691
// temp_value = false ;
67683: LD_ADDR_VAR 0 12
67687: PUSH
67688: LD_INT 0
67690: ST_TO_ADDR
// end ; end else
67691: GO 67757
// begin temp_value := ai_attacking_unit_hex_index [ i ] + 1 <= temp_list_2 [ 1 ] + 2 and ai_attacking_unit_hex_index [ i ] + 1 <= temp_list_2 [ 2 ] + 1 ;
67693: LD_ADDR_VAR 0 12
67697: PUSH
67698: LD_EXP 73
67702: PUSH
67703: LD_VAR 0 5
67707: ARRAY
67708: PUSH
67709: LD_INT 1
67711: PLUS
67712: PUSH
67713: LD_VAR 0 10
67717: PUSH
67718: LD_INT 1
67720: ARRAY
67721: PUSH
67722: LD_INT 2
67724: PLUS
67725: LESSEQUAL
67726: PUSH
67727: LD_EXP 73
67731: PUSH
67732: LD_VAR 0 5
67736: ARRAY
67737: PUSH
67738: LD_INT 1
67740: PLUS
67741: PUSH
67742: LD_VAR 0 10
67746: PUSH
67747: LD_INT 2
67749: ARRAY
67750: PUSH
67751: LD_INT 1
67753: PLUS
67754: LESSEQUAL
67755: AND
67756: ST_TO_ADDR
// end ; if GetDistUnitXY ( i , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) <= vehicle_dist and temp_value then
67757: LD_VAR 0 5
67761: PPUSH
67762: LD_VAR 0 3
67766: PUSH
67767: LD_EXP 73
67771: PUSH
67772: LD_VAR 0 5
67776: ARRAY
67777: ARRAY
67778: PUSH
67779: LD_INT 1
67781: ARRAY
67782: PPUSH
67783: LD_VAR 0 3
67787: PUSH
67788: LD_EXP 73
67792: PUSH
67793: LD_VAR 0 5
67797: ARRAY
67798: ARRAY
67799: PUSH
67800: LD_INT 2
67802: ARRAY
67803: PPUSH
67804: CALL_OW 297
67808: PUSH
67809: LD_VAR 0 15
67813: LESSEQUAL
67814: PUSH
67815: LD_VAR 0 12
67819: AND
67820: IFFALSE 67857
// begin ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , i , ai_attacking_unit_hex_index [ i ] + 1 ) ;
67822: LD_ADDR_EXP 73
67826: PUSH
67827: LD_EXP 73
67831: PPUSH
67832: LD_VAR 0 5
67836: PPUSH
67837: LD_EXP 73
67841: PUSH
67842: LD_VAR 0 5
67846: ARRAY
67847: PUSH
67848: LD_INT 1
67850: PLUS
67851: PPUSH
67852: CALL_OW 1
67856: ST_TO_ADDR
// end ; if ai_attacking_unit_hex_index [ i ] > normal_attack_hexes then
67857: LD_EXP 73
67861: PUSH
67862: LD_VAR 0 5
67866: ARRAY
67867: PUSH
67868: LD_VAR 0 3
67872: GREATER
67873: IFFALSE 68246
// begin if GetType ( i ) = unit_vehicle then
67875: LD_VAR 0 5
67879: PPUSH
67880: CALL_OW 247
67884: PUSH
67885: LD_INT 2
67887: EQUAL
67888: IFFALSE 68142
// begin temp_list = ai_vehicles_attack [ base ] diff i ;
67890: LD_ADDR_VAR 0 9
67894: PUSH
67895: LD_EXP 50
67899: PUSH
67900: LD_VAR 0 1
67904: ARRAY
67905: PUSH
67906: LD_VAR 0 5
67910: DIFF
67911: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
67912: LD_ADDR_EXP 50
67916: PUSH
67917: LD_EXP 50
67921: PPUSH
67922: LD_VAR 0 1
67926: PPUSH
67927: LD_VAR 0 9
67931: PPUSH
67932: CALL_OW 1
67936: ST_TO_ADDR
// attacking_vehicles = attacking_vehicles diff i ;
67937: LD_ADDR_VAR 0 14
67941: PUSH
67942: LD_VAR 0 14
67946: PUSH
67947: LD_VAR 0 5
67951: DIFF
67952: ST_TO_ADDR
// case GetWeapon ( i ) of ru_time_lapser :
67953: LD_VAR 0 5
67957: PPUSH
67958: CALL_OW 264
67962: PUSH
67963: LD_INT 49
67965: DOUBLE
67966: EQUAL
67967: IFTRUE 67971
67969: GO 68021
67971: POP
// begin temp_list = ai_taufield_vehicles [ base ] ^ i ;
67972: LD_ADDR_VAR 0 9
67976: PUSH
67977: LD_EXP 83
67981: PUSH
67982: LD_VAR 0 1
67986: ARRAY
67987: PUSH
67988: LD_VAR 0 5
67992: ADD
67993: ST_TO_ADDR
// ai_taufield_vehicles = Replace ( ai_taufield_vehicles , base , temp_list ) ;
67994: LD_ADDR_EXP 83
67998: PUSH
67999: LD_EXP 83
68003: PPUSH
68004: LD_VAR 0 1
68008: PPUSH
68009: LD_VAR 0 9
68013: PPUSH
68014: CALL_OW 1
68018: ST_TO_ADDR
// end ; ar_selfpropelled_bomb :
68019: GO 68127
68021: LD_INT 29
68023: DOUBLE
68024: EQUAL
68025: IFTRUE 68029
68027: GO 68079
68029: POP
// begin temp_list = ai_implosion_vehicles [ base ] ^ i ;
68030: LD_ADDR_VAR 0 9
68034: PUSH
68035: LD_EXP 84
68039: PUSH
68040: LD_VAR 0 1
68044: ARRAY
68045: PUSH
68046: LD_VAR 0 5
68050: ADD
68051: ST_TO_ADDR
// ai_implosion_vehicles = Replace ( ai_implosion_vehicles , base , temp_list ) ;
68052: LD_ADDR_EXP 84
68056: PUSH
68057: LD_EXP 84
68061: PPUSH
68062: LD_VAR 0 1
68066: PPUSH
68067: LD_VAR 0 9
68071: PPUSH
68072: CALL_OW 1
68076: ST_TO_ADDR
// end ; else
68077: GO 68127
68079: POP
// begin temp_list = ai_vehicles_defend [ base ] ^ i ;
68080: LD_ADDR_VAR 0 9
68084: PUSH
68085: LD_EXP 49
68089: PUSH
68090: LD_VAR 0 1
68094: ARRAY
68095: PUSH
68096: LD_VAR 0 5
68100: ADD
68101: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
68102: LD_ADDR_EXP 49
68106: PUSH
68107: LD_EXP 49
68111: PPUSH
68112: LD_VAR 0 1
68116: PPUSH
68117: LD_VAR 0 9
68121: PPUSH
68122: CALL_OW 1
68126: ST_TO_ADDR
// end ; end ; i = UnitsInside ( i ) ;
68127: LD_ADDR_VAR 0 5
68131: PUSH
68132: LD_VAR 0 5
68136: PPUSH
68137: CALL_OW 313
68141: ST_TO_ADDR
// end ; if i > 0 then
68142: LD_VAR 0 5
68146: PUSH
68147: LD_INT 0
68149: GREATER
68150: IFFALSE 68246
// begin temp_list = ai_mechanics_attack [ base ] diff i ;
68152: LD_ADDR_VAR 0 9
68156: PUSH
68157: LD_EXP 30
68161: PUSH
68162: LD_VAR 0 1
68166: ARRAY
68167: PUSH
68168: LD_VAR 0 5
68172: DIFF
68173: ST_TO_ADDR
// ai_mechanics_attack = Replace ( ai_mechanics_attack , base , temp_list ) ;
68174: LD_ADDR_EXP 30
68178: PUSH
68179: LD_EXP 30
68183: PPUSH
68184: LD_VAR 0 1
68188: PPUSH
68189: LD_VAR 0 9
68193: PPUSH
68194: CALL_OW 1
68198: ST_TO_ADDR
// temp_list = ai_mechanics_defend [ base ] ^ i ;
68199: LD_ADDR_VAR 0 9
68203: PUSH
68204: LD_EXP 29
68208: PUSH
68209: LD_VAR 0 1
68213: ARRAY
68214: PUSH
68215: LD_VAR 0 5
68219: ADD
68220: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , temp_list ) ;
68221: LD_ADDR_EXP 29
68225: PUSH
68226: LD_EXP 29
68230: PPUSH
68231: LD_VAR 0 1
68235: PPUSH
68236: LD_VAR 0 9
68240: PPUSH
68241: CALL_OW 1
68245: ST_TO_ADDR
// end ; end ; end ;
68246: GO 67425
68248: POP
68249: POP
// for i in attacking_vehicles do
68250: LD_ADDR_VAR 0 5
68254: PUSH
68255: LD_VAR 0 14
68259: PUSH
68260: FOR_IN
68261: IFFALSE 69759
// begin if GetWeapon ( i ) = ru_rocket and not normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in init_attack_hexes then
68263: LD_VAR 0 5
68267: PPUSH
68268: CALL_OW 264
68272: PUSH
68273: LD_INT 47
68275: EQUAL
68276: PUSH
68277: LD_VAR 0 3
68281: PUSH
68282: LD_EXP 73
68286: PUSH
68287: LD_VAR 0 5
68291: ARRAY
68292: ARRAY
68293: PUSH
68294: LD_VAR 0 2
68298: IN
68299: NOT
68300: AND
68301: IFFALSE 68422
// begin temp_list = FilterAllUnits ( [ [ f_enemy , GetBaseSide ( base ) ] , [ f_type , unit_building ] , [ f_dist , i , 30 ] ] ) ;
68303: LD_ADDR_VAR 0 9
68307: PUSH
68308: LD_INT 81
68310: PUSH
68311: LD_VAR 0 1
68315: PPUSH
68316: CALL 27103 0 1
68320: PUSH
68321: EMPTY
68322: LIST
68323: LIST
68324: PUSH
68325: LD_INT 21
68327: PUSH
68328: LD_INT 3
68330: PUSH
68331: EMPTY
68332: LIST
68333: LIST
68334: PUSH
68335: LD_INT 91
68337: PUSH
68338: LD_VAR 0 5
68342: PUSH
68343: LD_INT 30
68345: PUSH
68346: EMPTY
68347: LIST
68348: LIST
68349: LIST
68350: PUSH
68351: EMPTY
68352: LIST
68353: LIST
68354: LIST
68355: PPUSH
68356: CALL_OW 69
68360: ST_TO_ADDR
// if temp_list > 0 then
68361: LD_VAR 0 9
68365: PUSH
68366: LD_INT 0
68368: GREATER
68369: IFFALSE 68422
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
68371: LD_ADDR_VAR 0 8
68375: PUSH
68376: LD_VAR 0 9
68380: PPUSH
68381: LD_VAR 0 5
68385: PPUSH
68386: CALL_OW 75
68390: ST_TO_ADDR
// ComAttackPlace ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
68391: LD_VAR 0 5
68395: PPUSH
68396: LD_VAR 0 8
68400: PPUSH
68401: CALL_OW 250
68405: PPUSH
68406: LD_VAR 0 8
68410: PPUSH
68411: CALL_OW 251
68415: PPUSH
68416: CALL_OW 116
// continue ;
68420: GO 68260
// end ; end ; if GetWeapon ( i ) = ar_selfpropelled_bomb then
68422: LD_VAR 0 5
68426: PPUSH
68427: CALL_OW 264
68431: PUSH
68432: LD_INT 29
68434: EQUAL
68435: IFFALSE 68447
// k = true else
68437: LD_ADDR_VAR 0 4
68441: PUSH
68442: LD_INT 1
68444: ST_TO_ADDR
68445: GO 68455
// k = false ;
68447: LD_ADDR_VAR 0 4
68451: PUSH
68452: LD_INT 0
68454: ST_TO_ADDR
// if not k and not normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in init_attack_hexes then
68455: LD_VAR 0 4
68459: NOT
68460: PUSH
68461: LD_VAR 0 3
68465: PUSH
68466: LD_EXP 73
68470: PUSH
68471: LD_VAR 0 5
68475: ARRAY
68476: ARRAY
68477: PUSH
68478: LD_VAR 0 2
68482: IN
68483: NOT
68484: AND
68485: IFFALSE 68727
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
68487: LD_ADDR_VAR 0 9
68491: PUSH
68492: LD_INT 22
68494: PUSH
68495: LD_EXP 2
68499: PUSH
68500: EMPTY
68501: LIST
68502: LIST
68503: PUSH
68504: LD_INT 2
68506: PUSH
68507: LD_INT 30
68509: PUSH
68510: LD_INT 0
68512: PUSH
68513: EMPTY
68514: LIST
68515: LIST
68516: PUSH
68517: LD_INT 30
68519: PUSH
68520: LD_INT 1
68522: PUSH
68523: EMPTY
68524: LIST
68525: LIST
68526: PUSH
68527: EMPTY
68528: LIST
68529: LIST
68530: LIST
68531: PUSH
68532: EMPTY
68533: LIST
68534: LIST
68535: PPUSH
68536: CALL_OW 69
68540: ST_TO_ADDR
// if temp_list > 0 then
68541: LD_VAR 0 9
68545: PUSH
68546: LD_INT 0
68548: GREATER
68549: IFFALSE 68630
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
68551: LD_ADDR_VAR 0 8
68555: PUSH
68556: LD_VAR 0 9
68560: PPUSH
68561: LD_VAR 0 5
68565: PPUSH
68566: CALL_OW 75
68570: ST_TO_ADDR
// if GetBType ( temp_unit ) = b_depot then
68571: LD_VAR 0 8
68575: PPUSH
68576: CALL_OW 266
68580: PUSH
68581: LD_INT 0
68583: EQUAL
68584: IFFALSE 68596
// dist = 26 else
68586: LD_ADDR_VAR 0 11
68590: PUSH
68591: LD_INT 26
68593: ST_TO_ADDR
68594: GO 68604
// dist = 34 ;
68596: LD_ADDR_VAR 0 11
68600: PUSH
68601: LD_INT 34
68603: ST_TO_ADDR
// k = GetDistUnits ( i , temp_unit ) <= dist ;
68604: LD_ADDR_VAR 0 4
68608: PUSH
68609: LD_VAR 0 5
68613: PPUSH
68614: LD_VAR 0 8
68618: PPUSH
68619: CALL_OW 296
68623: PUSH
68624: LD_VAR 0 11
68628: LESSEQUAL
68629: ST_TO_ADDR
// end ; if not k then
68630: LD_VAR 0 4
68634: NOT
68635: IFFALSE 68727
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] ] ) ;
68637: LD_ADDR_VAR 0 9
68641: PUSH
68642: LD_INT 22
68644: PUSH
68645: LD_EXP 2
68649: PUSH
68650: EMPTY
68651: LIST
68652: LIST
68653: PUSH
68654: LD_INT 21
68656: PUSH
68657: LD_INT 3
68659: PUSH
68660: EMPTY
68661: LIST
68662: LIST
68663: PUSH
68664: EMPTY
68665: LIST
68666: LIST
68667: PPUSH
68668: CALL_OW 69
68672: ST_TO_ADDR
// if temp_list > 0 then
68673: LD_VAR 0 9
68677: PUSH
68678: LD_INT 0
68680: GREATER
68681: IFFALSE 68727
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
68683: LD_ADDR_VAR 0 8
68687: PUSH
68688: LD_VAR 0 9
68692: PPUSH
68693: LD_VAR 0 5
68697: PPUSH
68698: CALL_OW 75
68702: ST_TO_ADDR
// k = GetDistUnits ( i , temp_unit ) <= 20 ;
68703: LD_ADDR_VAR 0 4
68707: PUSH
68708: LD_VAR 0 5
68712: PPUSH
68713: LD_VAR 0 8
68717: PPUSH
68718: CALL_OW 296
68722: PUSH
68723: LD_INT 20
68725: LESSEQUAL
68726: ST_TO_ADDR
// end ; end ; end ; if k then
68727: LD_VAR 0 4
68731: IFFALSE 69569
// begin temp_list = FilterAllUnits ( [ [ f_enemy , GetBaseSide ( base ) ] , [ f_type , unit_human ] , [ f_dist , i , 20 ] , [ f_see , GetBaseSide ( base ) ] ] ) ;
68733: LD_ADDR_VAR 0 9
68737: PUSH
68738: LD_INT 81
68740: PUSH
68741: LD_VAR 0 1
68745: PPUSH
68746: CALL 27103 0 1
68750: PUSH
68751: EMPTY
68752: LIST
68753: LIST
68754: PUSH
68755: LD_INT 21
68757: PUSH
68758: LD_INT 1
68760: PUSH
68761: EMPTY
68762: LIST
68763: LIST
68764: PUSH
68765: LD_INT 91
68767: PUSH
68768: LD_VAR 0 5
68772: PUSH
68773: LD_INT 20
68775: PUSH
68776: EMPTY
68777: LIST
68778: LIST
68779: LIST
68780: PUSH
68781: LD_INT 101
68783: PUSH
68784: LD_VAR 0 1
68788: PPUSH
68789: CALL 27103 0 1
68793: PUSH
68794: EMPTY
68795: LIST
68796: LIST
68797: PUSH
68798: EMPTY
68799: LIST
68800: LIST
68801: LIST
68802: LIST
68803: PPUSH
68804: CALL_OW 69
68808: ST_TO_ADDR
// if temp_list > 0 then
68809: LD_VAR 0 9
68813: PUSH
68814: LD_INT 0
68816: GREATER
68817: IFFALSE 69107
// begin temp_list_2 = UnitFilter ( temp_list , [ f_not , [ f_lives , 250 ] ] ) ;
68819: LD_ADDR_VAR 0 10
68823: PUSH
68824: LD_VAR 0 9
68828: PPUSH
68829: LD_INT 3
68831: PUSH
68832: LD_INT 24
68834: PUSH
68835: LD_INT 250
68837: PUSH
68838: EMPTY
68839: LIST
68840: LIST
68841: PUSH
68842: EMPTY
68843: LIST
68844: LIST
68845: PPUSH
68846: CALL_OW 72
68850: ST_TO_ADDR
// if temp_list_2 > 0 then
68851: LD_VAR 0 10
68855: PUSH
68856: LD_INT 0
68858: GREATER
68859: IFFALSE 68871
// temp_list = temp_list_2 ;
68861: LD_ADDR_VAR 0 9
68865: PUSH
68866: LD_VAR 0 10
68870: ST_TO_ADDR
// temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
68871: LD_ADDR_VAR 0 8
68875: PUSH
68876: LD_VAR 0 9
68880: PPUSH
68881: LD_VAR 0 5
68885: PPUSH
68886: CALL_OW 75
68890: ST_TO_ADDR
// if GetWeapon ( i ) = ar_selfpropelled_bomb then
68891: LD_VAR 0 5
68895: PPUSH
68896: CALL_OW 264
68900: PUSH
68901: LD_INT 29
68903: EQUAL
68904: IFFALSE 68922
// ComAttackUnit ( i , temp_unit ) else
68906: LD_VAR 0 5
68910: PPUSH
68911: LD_VAR 0 8
68915: PPUSH
68916: CALL_OW 115
68920: GO 69105
// if GetWeapon ( i ) = ru_time_lapser then
68922: LD_VAR 0 5
68926: PPUSH
68927: CALL_OW 264
68931: PUSH
68932: LD_INT 49
68934: EQUAL
68935: IFFALSE 69045
// begin dist = GetDistUnits ( i , temp_unit ) ;
68937: LD_ADDR_VAR 0 11
68941: PUSH
68942: LD_VAR 0 5
68946: PPUSH
68947: LD_VAR 0 8
68951: PPUSH
68952: CALL_OW 296
68956: ST_TO_ADDR
// if dist > 8 then
68957: LD_VAR 0 11
68961: PUSH
68962: LD_INT 8
68964: GREATER
68965: IFFALSE 68998
// ComMoveXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
68967: LD_VAR 0 5
68971: PPUSH
68972: LD_VAR 0 8
68976: PPUSH
68977: CALL_OW 250
68981: PPUSH
68982: LD_VAR 0 8
68986: PPUSH
68987: CALL_OW 251
68991: PPUSH
68992: CALL_OW 111
68996: GO 69043
// if dist < 6 then
68998: LD_VAR 0 11
69002: PUSH
69003: LD_INT 6
69005: LESS
69006: IFFALSE 69043
// AI_GetAwayFromXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) , 6 , false ) ;
69008: LD_VAR 0 5
69012: PPUSH
69013: LD_VAR 0 8
69017: PPUSH
69018: CALL_OW 250
69022: PPUSH
69023: LD_VAR 0 8
69027: PPUSH
69028: CALL_OW 251
69032: PPUSH
69033: LD_INT 6
69035: PPUSH
69036: LD_INT 0
69038: PPUSH
69039: CALL 19506 0 5
// end else
69043: GO 69105
// if GetLives ( temp_unit ) > 250 then
69045: LD_VAR 0 8
69049: PPUSH
69050: CALL_OW 256
69054: PUSH
69055: LD_INT 250
69057: GREATER
69058: IFFALSE 69091
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
69060: LD_VAR 0 5
69064: PPUSH
69065: LD_VAR 0 8
69069: PPUSH
69070: CALL_OW 250
69074: PPUSH
69075: LD_VAR 0 8
69079: PPUSH
69080: CALL_OW 251
69084: PPUSH
69085: CALL_OW 114
69089: GO 69105
// ComAttackUnit ( i , temp_unit ) ;
69091: LD_VAR 0 5
69095: PPUSH
69096: LD_VAR 0 8
69100: PPUSH
69101: CALL_OW 115
// end else
69105: GO 69561
// begin temp_list = FindNonhumansNearUnit ( GetBaseSide ( base ) , i , 20 , true ) ;
69107: LD_ADDR_VAR 0 9
69111: PUSH
69112: LD_VAR 0 1
69116: PPUSH
69117: CALL 27103 0 1
69121: PPUSH
69122: LD_VAR 0 5
69126: PPUSH
69127: LD_INT 20
69129: PPUSH
69130: LD_INT 1
69132: PPUSH
69133: CALL 69772 0 4
69137: ST_TO_ADDR
// if temp_list > 0 then
69138: LD_VAR 0 9
69142: PUSH
69143: LD_INT 0
69145: GREATER
69146: IFFALSE 69353
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
69148: LD_ADDR_VAR 0 8
69152: PUSH
69153: LD_VAR 0 9
69157: PPUSH
69158: LD_VAR 0 5
69162: PPUSH
69163: CALL_OW 75
69167: ST_TO_ADDR
// if GetWeapon ( i ) = ar_selfpropelled_bomb then
69168: LD_VAR 0 5
69172: PPUSH
69173: CALL_OW 264
69177: PUSH
69178: LD_INT 29
69180: EQUAL
69181: IFFALSE 69199
// ComAttackUnit ( i , temp_unit ) else
69183: LD_VAR 0 5
69187: PPUSH
69188: LD_VAR 0 8
69192: PPUSH
69193: CALL_OW 115
69197: GO 69351
// if GetWeapon ( i ) = ru_time_lapser then
69199: LD_VAR 0 5
69203: PPUSH
69204: CALL_OW 264
69208: PUSH
69209: LD_INT 49
69211: EQUAL
69212: IFFALSE 69322
// begin dist = GetDistUnits ( i , temp_unit ) ;
69214: LD_ADDR_VAR 0 11
69218: PUSH
69219: LD_VAR 0 5
69223: PPUSH
69224: LD_VAR 0 8
69228: PPUSH
69229: CALL_OW 296
69233: ST_TO_ADDR
// if dist > 8 then
69234: LD_VAR 0 11
69238: PUSH
69239: LD_INT 8
69241: GREATER
69242: IFFALSE 69275
// ComMoveXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
69244: LD_VAR 0 5
69248: PPUSH
69249: LD_VAR 0 8
69253: PPUSH
69254: CALL_OW 250
69258: PPUSH
69259: LD_VAR 0 8
69263: PPUSH
69264: CALL_OW 251
69268: PPUSH
69269: CALL_OW 111
69273: GO 69320
// if dist < 6 then
69275: LD_VAR 0 11
69279: PUSH
69280: LD_INT 6
69282: LESS
69283: IFFALSE 69320
// AI_GetAwayFromXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) , 6 , false ) ;
69285: LD_VAR 0 5
69289: PPUSH
69290: LD_VAR 0 8
69294: PPUSH
69295: CALL_OW 250
69299: PPUSH
69300: LD_VAR 0 8
69304: PPUSH
69305: CALL_OW 251
69309: PPUSH
69310: LD_INT 6
69312: PPUSH
69313: LD_INT 0
69315: PPUSH
69316: CALL 19506 0 5
// end else
69320: GO 69351
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
69322: LD_VAR 0 5
69326: PPUSH
69327: LD_VAR 0 8
69331: PPUSH
69332: CALL_OW 250
69336: PPUSH
69337: LD_VAR 0 8
69341: PPUSH
69342: CALL_OW 251
69346: PPUSH
69347: CALL_OW 114
// end else
69351: GO 69561
// begin temp_list = FindNonhumansNearUnit ( GetBaseSide ( base ) , i , 20 , false ) ;
69353: LD_ADDR_VAR 0 9
69357: PUSH
69358: LD_VAR 0 1
69362: PPUSH
69363: CALL 27103 0 1
69367: PPUSH
69368: LD_VAR 0 5
69372: PPUSH
69373: LD_INT 20
69375: PPUSH
69376: LD_INT 0
69378: PPUSH
69379: CALL 69772 0 4
69383: ST_TO_ADDR
// if temp_list > 0 then
69384: LD_VAR 0 9
69388: PUSH
69389: LD_INT 0
69391: GREATER
69392: IFFALSE 69553
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
69394: LD_ADDR_VAR 0 8
69398: PUSH
69399: LD_VAR 0 9
69403: PPUSH
69404: LD_VAR 0 5
69408: PPUSH
69409: CALL_OW 75
69413: ST_TO_ADDR
// if GetWeapon ( i ) = ru_time_lapser then
69414: LD_VAR 0 5
69418: PPUSH
69419: CALL_OW 264
69423: PUSH
69424: LD_INT 49
69426: EQUAL
69427: IFFALSE 69537
// begin dist = GetDistUnits ( i , temp_unit ) ;
69429: LD_ADDR_VAR 0 11
69433: PUSH
69434: LD_VAR 0 5
69438: PPUSH
69439: LD_VAR 0 8
69443: PPUSH
69444: CALL_OW 296
69448: ST_TO_ADDR
// if dist > 8 then
69449: LD_VAR 0 11
69453: PUSH
69454: LD_INT 8
69456: GREATER
69457: IFFALSE 69490
// ComMoveXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
69459: LD_VAR 0 5
69463: PPUSH
69464: LD_VAR 0 8
69468: PPUSH
69469: CALL_OW 250
69473: PPUSH
69474: LD_VAR 0 8
69478: PPUSH
69479: CALL_OW 251
69483: PPUSH
69484: CALL_OW 111
69488: GO 69535
// if dist < 6 then
69490: LD_VAR 0 11
69494: PUSH
69495: LD_INT 6
69497: LESS
69498: IFFALSE 69535
// AI_GetAwayFromXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) , 6 , false ) ;
69500: LD_VAR 0 5
69504: PPUSH
69505: LD_VAR 0 8
69509: PPUSH
69510: CALL_OW 250
69514: PPUSH
69515: LD_VAR 0 8
69519: PPUSH
69520: CALL_OW 251
69524: PPUSH
69525: LD_INT 6
69527: PPUSH
69528: LD_INT 0
69530: PPUSH
69531: CALL 19506 0 5
// end else
69535: GO 69551
// begin ComAttackUnit ( i , temp_unit ) ;
69537: LD_VAR 0 5
69541: PPUSH
69542: LD_VAR 0 8
69546: PPUSH
69547: CALL_OW 115
// end ; end else
69551: GO 69561
// k = false ;
69553: LD_ADDR_VAR 0 4
69557: PUSH
69558: LD_INT 0
69560: ST_TO_ADDR
// end ; end ; if k then
69561: LD_VAR 0 4
69565: IFFALSE 69569
// continue ;
69567: GO 68260
// end ; if GetDistUnitXY ( i , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) > vehicle_dist then
69569: LD_VAR 0 5
69573: PPUSH
69574: LD_VAR 0 3
69578: PUSH
69579: LD_EXP 73
69583: PUSH
69584: LD_VAR 0 5
69588: ARRAY
69589: ARRAY
69590: PUSH
69591: LD_INT 1
69593: ARRAY
69594: PPUSH
69595: LD_VAR 0 3
69599: PUSH
69600: LD_EXP 73
69604: PUSH
69605: LD_VAR 0 5
69609: ARRAY
69610: ARRAY
69611: PUSH
69612: LD_INT 2
69614: ARRAY
69615: PPUSH
69616: CALL_OW 297
69620: PUSH
69621: LD_VAR 0 15
69625: GREATER
69626: IFFALSE 69757
// if not normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in init_attack_hexes then
69628: LD_VAR 0 3
69632: PUSH
69633: LD_EXP 73
69637: PUSH
69638: LD_VAR 0 5
69642: ARRAY
69643: ARRAY
69644: PUSH
69645: LD_VAR 0 2
69649: IN
69650: NOT
69651: IFFALSE 69706
// ComAgressiveMove ( i , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) else
69653: LD_VAR 0 5
69657: PPUSH
69658: LD_VAR 0 3
69662: PUSH
69663: LD_EXP 73
69667: PUSH
69668: LD_VAR 0 5
69672: ARRAY
69673: ARRAY
69674: PUSH
69675: LD_INT 1
69677: ARRAY
69678: PPUSH
69679: LD_VAR 0 3
69683: PUSH
69684: LD_EXP 73
69688: PUSH
69689: LD_VAR 0 5
69693: ARRAY
69694: ARRAY
69695: PUSH
69696: LD_INT 2
69698: ARRAY
69699: PPUSH
69700: CALL_OW 114
69704: GO 69757
// ComMoveXY ( i , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) ;
69706: LD_VAR 0 5
69710: PPUSH
69711: LD_VAR 0 3
69715: PUSH
69716: LD_EXP 73
69720: PUSH
69721: LD_VAR 0 5
69725: ARRAY
69726: ARRAY
69727: PUSH
69728: LD_INT 1
69730: ARRAY
69731: PPUSH
69732: LD_VAR 0 3
69736: PUSH
69737: LD_EXP 73
69741: PUSH
69742: LD_VAR 0 5
69746: ARRAY
69747: ARRAY
69748: PUSH
69749: LD_INT 2
69751: ARRAY
69752: PPUSH
69753: CALL_OW 111
// end ;
69757: GO 68260
69759: POP
69760: POP
// end ;
69761: GO 63338
69763: POP
69764: POP
// until false ;
69765: LD_INT 0
69767: IFFALSE 63321
// end ;
69769: PPOPN 21
69771: END
// export function FindNonhumansNearUnit ( side , un , dist , only_dangerous ) ; var weapon_list , temp_list , i , btype , b , val ; begin
69772: LD_INT 0
69774: PPUSH
69775: PPUSH
69776: PPUSH
69777: PPUSH
69778: PPUSH
69779: PPUSH
69780: PPUSH
// temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_not , [ f_type , unit_human ] ] , [ f_dist , un , dist ] , [ f_see , side ] ] ) ;
69781: LD_ADDR_VAR 0 7
69785: PUSH
69786: LD_INT 81
69788: PUSH
69789: LD_VAR 0 1
69793: PUSH
69794: EMPTY
69795: LIST
69796: LIST
69797: PUSH
69798: LD_INT 3
69800: PUSH
69801: LD_INT 21
69803: PUSH
69804: LD_INT 1
69806: PUSH
69807: EMPTY
69808: LIST
69809: LIST
69810: PUSH
69811: EMPTY
69812: LIST
69813: LIST
69814: PUSH
69815: LD_INT 91
69817: PUSH
69818: LD_VAR 0 2
69822: PUSH
69823: LD_VAR 0 3
69827: PUSH
69828: EMPTY
69829: LIST
69830: LIST
69831: LIST
69832: PUSH
69833: LD_INT 101
69835: PUSH
69836: LD_VAR 0 1
69840: PUSH
69841: EMPTY
69842: LIST
69843: LIST
69844: PUSH
69845: EMPTY
69846: LIST
69847: LIST
69848: LIST
69849: LIST
69850: PPUSH
69851: CALL_OW 69
69855: ST_TO_ADDR
// if only_dangerous then
69856: LD_VAR 0 4
69860: IFFALSE 69879
// begin result = DangerousUnits ( temp_list ) ;
69862: LD_ADDR_VAR 0 5
69866: PUSH
69867: LD_VAR 0 7
69871: PPUSH
69872: CALL 69894 0 1
69876: ST_TO_ADDR
// end else
69877: GO 69889
// result = temp_list end ;
69879: LD_ADDR_VAR 0 5
69883: PUSH
69884: LD_VAR 0 7
69888: ST_TO_ADDR
69889: LD_VAR 0 5
69893: RET
// function DangerousUnits ( list ) ; var weapon_list , i , btype , b , val ; begin
69894: LD_INT 0
69896: PPUSH
69897: PPUSH
69898: PPUSH
69899: PPUSH
69900: PPUSH
69901: PPUSH
// weapon_list = [ us_machine_gun , us_light_gun , us_gatling_gun , us_double_gun , us_heavy_gun , us_rocket_launcher , us_siberium_rocket , us_laser , us_double_laser , ar_multimissile_ballista , ar_light_gun , ar_double_machine_gun , ar_gatling_gun , ar_flame_thrower , ar_gun , ar_rocket_launcher , ar_selfpropelled_bomb , ru_heavy_machine_gun , ru_gatling_gun , ru_gun , ru_rocket_launcher , ru_heavy_gun , ru_rocket , ru_siberium_rocket , ru_time_lapser ] ;
69902: LD_ADDR_VAR 0 3
69906: PUSH
69907: LD_INT 2
69909: PUSH
69910: LD_INT 3
69912: PUSH
69913: LD_INT 4
69915: PUSH
69916: LD_INT 5
69918: PUSH
69919: LD_INT 6
69921: PUSH
69922: LD_INT 7
69924: PUSH
69925: LD_INT 8
69927: PUSH
69928: LD_INT 9
69930: PUSH
69931: LD_INT 10
69933: PUSH
69934: LD_INT 22
69936: PUSH
69937: LD_INT 23
69939: PUSH
69940: LD_INT 24
69942: PUSH
69943: LD_INT 25
69945: PUSH
69946: LD_INT 26
69948: PUSH
69949: LD_INT 27
69951: PUSH
69952: LD_INT 28
69954: PUSH
69955: LD_INT 29
69957: PUSH
69958: LD_INT 42
69960: PUSH
69961: LD_INT 43
69963: PUSH
69964: LD_INT 44
69966: PUSH
69967: LD_INT 45
69969: PUSH
69970: LD_INT 46
69972: PUSH
69973: LD_INT 47
69975: PUSH
69976: LD_INT 48
69978: PUSH
69979: LD_INT 49
69981: PUSH
69982: EMPTY
69983: LIST
69984: LIST
69985: LIST
69986: LIST
69987: LIST
69988: LIST
69989: LIST
69990: LIST
69991: LIST
69992: LIST
69993: LIST
69994: LIST
69995: LIST
69996: LIST
69997: LIST
69998: LIST
69999: LIST
70000: LIST
70001: LIST
70002: LIST
70003: LIST
70004: LIST
70005: LIST
70006: LIST
70007: LIST
70008: ST_TO_ADDR
// result = [ ] ;
70009: LD_ADDR_VAR 0 2
70013: PUSH
70014: EMPTY
70015: ST_TO_ADDR
// for i in list do
70016: LD_ADDR_VAR 0 4
70020: PUSH
70021: LD_VAR 0 1
70025: PUSH
70026: FOR_IN
70027: IFFALSE 70475
// case GetType ( i ) of unit_human :
70029: LD_VAR 0 4
70033: PPUSH
70034: CALL_OW 247
70038: PUSH
70039: LD_INT 1
70041: DOUBLE
70042: EQUAL
70043: IFTRUE 70047
70045: GO 70080
70047: POP
// begin if not IsOk ( i ) then
70048: LD_VAR 0 4
70052: PPUSH
70053: CALL_OW 302
70057: NOT
70058: IFFALSE 70062
// continue ;
70060: GO 70026
// result = result ^ i ;
70062: LD_ADDR_VAR 0 2
70066: PUSH
70067: LD_VAR 0 2
70071: PUSH
70072: LD_VAR 0 4
70076: ADD
70077: ST_TO_ADDR
// end ; unit_vehicle :
70078: GO 70473
70080: LD_INT 2
70082: DOUBLE
70083: EQUAL
70084: IFTRUE 70088
70086: GO 70228
70088: POP
// begin if not IsOk ( i ) then
70089: LD_VAR 0 4
70093: PPUSH
70094: CALL_OW 302
70098: NOT
70099: IFFALSE 70103
// continue ;
70101: GO 70026
// case GetControl ( i ) of control_manual , control_rider :
70103: LD_VAR 0 4
70107: PPUSH
70108: CALL_OW 263
70112: PUSH
70113: LD_INT 1
70115: DOUBLE
70116: EQUAL
70117: IFTRUE 70127
70119: LD_INT 4
70121: DOUBLE
70122: EQUAL
70123: IFTRUE 70127
70125: GO 70147
70127: POP
// begin if UnitsInside ( i ) = 0 then
70128: LD_VAR 0 4
70132: PPUSH
70133: CALL_OW 313
70137: PUSH
70138: LD_INT 0
70140: EQUAL
70141: IFFALSE 70145
// continue ;
70143: GO 70026
// end ; control_remote :
70145: GO 70193
70147: LD_INT 2
70149: DOUBLE
70150: EQUAL
70151: IFTRUE 70155
70153: GO 70175
70155: POP
// begin if IsControledBy ( i ) = 0 then
70156: LD_VAR 0 4
70160: PPUSH
70161: CALL_OW 312
70165: PUSH
70166: LD_INT 0
70168: EQUAL
70169: IFFALSE 70173
// continue ;
70171: GO 70026
// end ; control_computer , control_apeman :
70173: GO 70193
70175: LD_INT 3
70177: DOUBLE
70178: EQUAL
70179: IFTRUE 70189
70181: LD_INT 5
70183: DOUBLE
70184: EQUAL
70185: IFTRUE 70189
70187: GO 70192
70189: POP
// begin end ; end ;
70190: GO 70193
70192: POP
// if GetWeapon ( i ) in weapon_list then
70193: LD_VAR 0 4
70197: PPUSH
70198: CALL_OW 264
70202: PUSH
70203: LD_VAR 0 3
70207: IN
70208: IFFALSE 70226
// result = result ^ i ;
70210: LD_ADDR_VAR 0 2
70214: PUSH
70215: LD_VAR 0 2
70219: PUSH
70220: LD_VAR 0 4
70224: ADD
70225: ST_TO_ADDR
// end ; unit_building :
70226: GO 70473
70228: LD_INT 3
70230: DOUBLE
70231: EQUAL
70232: IFTRUE 70236
70234: GO 70472
70236: POP
// begin if not IsOk ( i ) then
70237: LD_VAR 0 4
70241: PPUSH
70242: CALL_OW 302
70246: NOT
70247: IFFALSE 70251
// continue ;
70249: GO 70026
// btype = GetBType ( i ) ;
70251: LD_ADDR_VAR 0 5
70255: PUSH
70256: LD_VAR 0 4
70260: PPUSH
70261: CALL_OW 266
70265: ST_TO_ADDR
// case btype of b_turret :
70266: LD_VAR 0 5
70270: PUSH
70271: LD_INT 33
70273: DOUBLE
70274: EQUAL
70275: IFTRUE 70279
70277: GO 70282
70279: POP
// begin end ; b_bunker , b_breastwork , b_armoury , b_barracks , b_fort :
70280: GO 70337
70282: LD_INT 32
70284: DOUBLE
70285: EQUAL
70286: IFTRUE 70314
70288: LD_INT 31
70290: DOUBLE
70291: EQUAL
70292: IFTRUE 70314
70294: LD_INT 4
70296: DOUBLE
70297: EQUAL
70298: IFTRUE 70314
70300: LD_INT 5
70302: DOUBLE
70303: EQUAL
70304: IFTRUE 70314
70306: LD_INT 35
70308: DOUBLE
70309: EQUAL
70310: IFTRUE 70314
70312: GO 70334
70314: POP
// begin if UnitsInside ( i ) = 0 then
70315: LD_VAR 0 4
70319: PPUSH
70320: CALL_OW 313
70324: PUSH
70325: LD_INT 0
70327: EQUAL
70328: IFFALSE 70332
// continue ;
70330: GO 70026
// end ; else
70332: GO 70337
70334: POP
// continue ; end ;
70335: GO 70026
// if btype in [ b_bunker , b_turret ] then
70337: LD_VAR 0 5
70341: PUSH
70342: LD_INT 32
70344: PUSH
70345: LD_INT 33
70347: PUSH
70348: EMPTY
70349: LIST
70350: LIST
70351: IN
70352: IFFALSE 70454
// if not GetBWeapon ( i ) in weapon_list then
70354: LD_VAR 0 4
70358: PPUSH
70359: CALL_OW 269
70363: PUSH
70364: LD_VAR 0 3
70368: IN
70369: NOT
70370: IFFALSE 70376
// continue else
70372: GO 70026
70374: GO 70454
// begin b = GetBase ( i ) ;
70376: LD_ADDR_VAR 0 6
70380: PUSH
70381: LD_VAR 0 4
70385: PPUSH
70386: CALL_OW 274
70390: ST_TO_ADDR
// val = false ;
70391: LD_ADDR_VAR 0 7
70395: PUSH
70396: LD_INT 0
70398: ST_TO_ADDR
// if b = 0 then
70399: LD_VAR 0 6
70403: PUSH
70404: LD_INT 0
70406: EQUAL
70407: IFFALSE 70419
// val = true else
70409: LD_ADDR_VAR 0 7
70413: PUSH
70414: LD_INT 1
70416: ST_TO_ADDR
70417: GO 70446
// if GetEnergy ( b ) [ 4 ] = 0 then
70419: LD_VAR 0 6
70423: PPUSH
70424: CALL_OW 278
70428: PUSH
70429: LD_INT 4
70431: ARRAY
70432: PUSH
70433: LD_INT 0
70435: EQUAL
70436: IFFALSE 70446
// val = true ;
70438: LD_ADDR_VAR 0 7
70442: PUSH
70443: LD_INT 1
70445: ST_TO_ADDR
// if val then
70446: LD_VAR 0 7
70450: IFFALSE 70454
// continue ;
70452: GO 70026
// end ; result = result ^ i ;
70454: LD_ADDR_VAR 0 2
70458: PUSH
70459: LD_VAR 0 2
70463: PUSH
70464: LD_VAR 0 4
70468: ADD
70469: ST_TO_ADDR
// end ; end ;
70470: GO 70473
70472: POP
70473: GO 70026
70475: POP
70476: POP
// end ;
70477: LD_VAR 0 2
70481: RET
// every 0 0$5 do var base , i ;
70482: GO 70484
70484: DISABLE
70485: LD_INT 0
70487: PPUSH
70488: PPUSH
// begin for base in ai_bases do
70489: LD_ADDR_VAR 0 1
70493: PUSH
70494: LD_EXP 25
70498: PUSH
70499: FOR_IN
70500: IFFALSE 70645
// for i in ( ai_vehicles_attack [ base ] ^ ai_vehicles_defend [ base ] ^ ai_cargo_bay [ base ] ^ ai_crane [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] ^ ai_control_tower_vehicles [ base ] ) diff 0 do
70502: LD_ADDR_VAR 0 2
70506: PUSH
70507: LD_EXP 50
70511: PUSH
70512: LD_VAR 0 1
70516: ARRAY
70517: PUSH
70518: LD_EXP 49
70522: PUSH
70523: LD_VAR 0 1
70527: ARRAY
70528: ADD
70529: PUSH
70530: LD_EXP 65
70534: PUSH
70535: LD_VAR 0 1
70539: ARRAY
70540: ADD
70541: PUSH
70542: LD_EXP 68
70546: PUSH
70547: LD_VAR 0 1
70551: ARRAY
70552: ADD
70553: PUSH
70554: LD_EXP 83
70558: PUSH
70559: LD_VAR 0 1
70563: ARRAY
70564: ADD
70565: PUSH
70566: LD_EXP 84
70570: PUSH
70571: LD_VAR 0 1
70575: ARRAY
70576: ADD
70577: PUSH
70578: LD_EXP 75
70582: PUSH
70583: LD_VAR 0 1
70587: ARRAY
70588: ADD
70589: PUSH
70590: LD_INT 0
70592: DIFF
70593: PUSH
70594: FOR_IN
70595: IFFALSE 70641
// if GetFuel ( i ) < 10 and GetEngine ( i ) = engine_combustion then
70597: LD_VAR 0 2
70601: PPUSH
70602: CALL_OW 261
70606: PUSH
70607: LD_INT 10
70609: LESS
70610: PUSH
70611: LD_VAR 0 2
70615: PPUSH
70616: CALL_OW 262
70620: PUSH
70621: LD_INT 1
70623: EQUAL
70624: AND
70625: IFFALSE 70639
// SetFuel ( i , 10 ) ;
70627: LD_VAR 0 2
70631: PPUSH
70632: LD_INT 10
70634: PPUSH
70635: CALL_OW 240
70639: GO 70594
70641: POP
70642: POP
70643: GO 70499
70645: POP
70646: POP
// enable ;
70647: ENABLE
// end ;
70648: PPOPN 2
70650: END
// every 0 0$1.4 do var base , i , val , un ; var veh_hex_map ;
70651: GO 70653
70653: DISABLE
70654: LD_INT 0
70656: PPUSH
70657: PPUSH
70658: PPUSH
70659: PPUSH
70660: PPUSH
// begin base = 1 ;
70661: LD_ADDR_VAR 0 1
70665: PUSH
70666: LD_INT 1
70668: ST_TO_ADDR
// veh_hex_map = [ ] ;
70669: LD_ADDR_VAR 0 5
70673: PUSH
70674: EMPTY
70675: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
70676: LD_INT 35
70678: PPUSH
70679: CALL_OW 67
// if not base in ai_bases then
70683: LD_VAR 0 1
70687: PUSH
70688: LD_EXP 25
70692: IN
70693: NOT
70694: IFFALSE 70698
// exit ;
70696: GO 71670
// for i in ( ai_vehicles_attack [ base ] ^ ai_vehicles_defend [ base ] ^ ai_cargo_bay [ base ] ^ ai_crane [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] ^ ai_control_tower_vehicles [ base ] ) diff 0 do
70698: LD_ADDR_VAR 0 2
70702: PUSH
70703: LD_EXP 50
70707: PUSH
70708: LD_VAR 0 1
70712: ARRAY
70713: PUSH
70714: LD_EXP 49
70718: PUSH
70719: LD_VAR 0 1
70723: ARRAY
70724: ADD
70725: PUSH
70726: LD_EXP 65
70730: PUSH
70731: LD_VAR 0 1
70735: ARRAY
70736: ADD
70737: PUSH
70738: LD_EXP 68
70742: PUSH
70743: LD_VAR 0 1
70747: ARRAY
70748: ADD
70749: PUSH
70750: LD_EXP 83
70754: PUSH
70755: LD_VAR 0 1
70759: ARRAY
70760: ADD
70761: PUSH
70762: LD_EXP 84
70766: PUSH
70767: LD_VAR 0 1
70771: ARRAY
70772: ADD
70773: PUSH
70774: LD_EXP 75
70778: PUSH
70779: LD_VAR 0 1
70783: ARRAY
70784: ADD
70785: PUSH
70786: LD_INT 0
70788: DIFF
70789: PUSH
70790: FOR_IN
70791: IFFALSE 71664
// begin val = false ;
70793: LD_ADDR_VAR 0 3
70797: PUSH
70798: LD_INT 0
70800: ST_TO_ADDR
// if veh_hex_map < i then
70801: LD_VAR 0 5
70805: PUSH
70806: LD_VAR 0 2
70810: LESS
70811: IFFALSE 70823
// val = true else
70813: LD_ADDR_VAR 0 3
70817: PUSH
70818: LD_INT 1
70820: ST_TO_ADDR
70821: GO 70847
// if veh_hex_map [ i ] = 0 then
70823: LD_VAR 0 5
70827: PUSH
70828: LD_VAR 0 2
70832: ARRAY
70833: PUSH
70834: LD_INT 0
70836: EQUAL
70837: IFFALSE 70847
// val = true ;
70839: LD_ADDR_VAR 0 3
70843: PUSH
70844: LD_INT 1
70846: ST_TO_ADDR
// if val then
70847: LD_VAR 0 3
70851: IFFALSE 70887
// veh_hex_map = Replace ( veh_hex_map , i , [ 0 , 0 , 0 0$0 ] ) ;
70853: LD_ADDR_VAR 0 5
70857: PUSH
70858: LD_VAR 0 5
70862: PPUSH
70863: LD_VAR 0 2
70867: PPUSH
70868: LD_INT 0
70870: PUSH
70871: LD_INT 0
70873: PUSH
70874: LD_INT 0
70876: PUSH
70877: EMPTY
70878: LIST
70879: LIST
70880: LIST
70881: PPUSH
70882: CALL_OW 1
70886: ST_TO_ADDR
// if IsInArea ( i , rus_veh_stuck_area ) then
70887: LD_VAR 0 2
70891: PPUSH
70892: LD_INT 33
70894: PPUSH
70895: CALL_OW 308
70899: IFFALSE 71628
// begin if veh_hex_map [ i ] [ 1 ] = 0 and veh_hex_map [ i ] [ 2 ] = 0 then
70901: LD_VAR 0 5
70905: PUSH
70906: LD_VAR 0 2
70910: ARRAY
70911: PUSH
70912: LD_INT 1
70914: ARRAY
70915: PUSH
70916: LD_INT 0
70918: EQUAL
70919: PUSH
70920: LD_VAR 0 5
70924: PUSH
70925: LD_VAR 0 2
70929: ARRAY
70930: PUSH
70931: LD_INT 2
70933: ARRAY
70934: PUSH
70935: LD_INT 0
70937: EQUAL
70938: AND
70939: IFFALSE 70991
// veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) else
70941: LD_ADDR_VAR 0 5
70945: PUSH
70946: LD_VAR 0 5
70950: PPUSH
70951: LD_VAR 0 2
70955: PPUSH
70956: LD_VAR 0 2
70960: PPUSH
70961: CALL_OW 250
70965: PUSH
70966: LD_VAR 0 2
70970: PPUSH
70971: CALL_OW 251
70975: PUSH
70976: LD_INT 0
70978: PUSH
70979: EMPTY
70980: LIST
70981: LIST
70982: LIST
70983: PPUSH
70984: CALL_OW 1
70988: ST_TO_ADDR
70989: GO 71626
// if GetDistUnitXY ( i , veh_hex_map [ i ] [ 1 ] , veh_hex_map [ i ] [ 2 ] ) > 2 then
70991: LD_VAR 0 2
70995: PPUSH
70996: LD_VAR 0 5
71000: PUSH
71001: LD_VAR 0 2
71005: ARRAY
71006: PUSH
71007: LD_INT 1
71009: ARRAY
71010: PPUSH
71011: LD_VAR 0 5
71015: PUSH
71016: LD_VAR 0 2
71020: ARRAY
71021: PUSH
71022: LD_INT 2
71024: ARRAY
71025: PPUSH
71026: CALL_OW 297
71030: PUSH
71031: LD_INT 2
71033: GREATER
71034: IFFALSE 71086
// veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) else
71036: LD_ADDR_VAR 0 5
71040: PUSH
71041: LD_VAR 0 5
71045: PPUSH
71046: LD_VAR 0 2
71050: PPUSH
71051: LD_VAR 0 2
71055: PPUSH
71056: CALL_OW 250
71060: PUSH
71061: LD_VAR 0 2
71065: PPUSH
71066: CALL_OW 251
71070: PUSH
71071: LD_INT 0
71073: PUSH
71074: EMPTY
71075: LIST
71076: LIST
71077: LIST
71078: PPUSH
71079: CALL_OW 1
71083: ST_TO_ADDR
71084: GO 71626
// begin veh_hex_map = Replace ( veh_hex_map , i , [ veh_hex_map [ i ] [ 1 ] , veh_hex_map [ i ] [ 2 ] , veh_hex_map [ i ] [ 3 ] + 0 0$1 ] ) ;
71086: LD_ADDR_VAR 0 5
71090: PUSH
71091: LD_VAR 0 5
71095: PPUSH
71096: LD_VAR 0 2
71100: PPUSH
71101: LD_VAR 0 5
71105: PUSH
71106: LD_VAR 0 2
71110: ARRAY
71111: PUSH
71112: LD_INT 1
71114: ARRAY
71115: PUSH
71116: LD_VAR 0 5
71120: PUSH
71121: LD_VAR 0 2
71125: ARRAY
71126: PUSH
71127: LD_INT 2
71129: ARRAY
71130: PUSH
71131: LD_VAR 0 5
71135: PUSH
71136: LD_VAR 0 2
71140: ARRAY
71141: PUSH
71142: LD_INT 3
71144: ARRAY
71145: PUSH
71146: LD_INT 35
71148: PLUS
71149: PUSH
71150: EMPTY
71151: LIST
71152: LIST
71153: LIST
71154: PPUSH
71155: CALL_OW 1
71159: ST_TO_ADDR
// if veh_hex_map [ i ] [ 3 ] >= 0 0$8 and not See ( you , i ) then
71160: LD_VAR 0 5
71164: PUSH
71165: LD_VAR 0 2
71169: ARRAY
71170: PUSH
71171: LD_INT 3
71173: ARRAY
71174: PUSH
71175: LD_INT 280
71177: GREATEREQUAL
71178: PUSH
71179: LD_EXP 2
71183: PPUSH
71184: LD_VAR 0 2
71188: PPUSH
71189: CALL_OW 292
71193: NOT
71194: AND
71195: IFFALSE 71626
// begin val = GetTaskList ( i ) ;
71197: LD_ADDR_VAR 0 3
71201: PUSH
71202: LD_VAR 0 2
71206: PPUSH
71207: CALL_OW 437
71211: ST_TO_ADDR
// if val = 0 then
71212: LD_VAR 0 3
71216: PUSH
71217: LD_INT 0
71219: EQUAL
71220: IFFALSE 71272
// begin veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) ;
71222: LD_ADDR_VAR 0 5
71226: PUSH
71227: LD_VAR 0 5
71231: PPUSH
71232: LD_VAR 0 2
71236: PPUSH
71237: LD_VAR 0 2
71241: PPUSH
71242: CALL_OW 250
71246: PUSH
71247: LD_VAR 0 2
71251: PPUSH
71252: CALL_OW 251
71256: PUSH
71257: LD_INT 0
71259: PUSH
71260: EMPTY
71261: LIST
71262: LIST
71263: LIST
71264: PPUSH
71265: CALL_OW 1
71269: ST_TO_ADDR
// end else
71270: GO 71626
// begin if val [ 1 ] [ 2 ] = 0 and val [ 1 ] [ 3 ] = 0 then
71272: LD_VAR 0 3
71276: PUSH
71277: LD_INT 1
71279: ARRAY
71280: PUSH
71281: LD_INT 2
71283: ARRAY
71284: PUSH
71285: LD_INT 0
71287: EQUAL
71288: PUSH
71289: LD_VAR 0 3
71293: PUSH
71294: LD_INT 1
71296: ARRAY
71297: PUSH
71298: LD_INT 3
71300: ARRAY
71301: PUSH
71302: LD_INT 0
71304: EQUAL
71305: AND
71306: IFFALSE 71358
// begin veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) ;
71308: LD_ADDR_VAR 0 5
71312: PUSH
71313: LD_VAR 0 5
71317: PPUSH
71318: LD_VAR 0 2
71322: PPUSH
71323: LD_VAR 0 2
71327: PPUSH
71328: CALL_OW 250
71332: PUSH
71333: LD_VAR 0 2
71337: PPUSH
71338: CALL_OW 251
71342: PUSH
71343: LD_INT 0
71345: PUSH
71346: EMPTY
71347: LIST
71348: LIST
71349: LIST
71350: PPUSH
71351: CALL_OW 1
71355: ST_TO_ADDR
// end else
71356: GO 71626
// if not InArea ( val [ 1 ] [ 2 ] , val [ 1 ] [ 3 ] , GetBaseArea ( base ) ) then
71358: LD_VAR 0 3
71362: PUSH
71363: LD_INT 1
71365: ARRAY
71366: PUSH
71367: LD_INT 2
71369: ARRAY
71370: PPUSH
71371: LD_VAR 0 3
71375: PUSH
71376: LD_INT 1
71378: ARRAY
71379: PUSH
71380: LD_INT 3
71382: ARRAY
71383: PPUSH
71384: LD_VAR 0 1
71388: PPUSH
71389: CALL 27032 0 1
71393: PPUSH
71394: CALL_OW 309
71398: NOT
71399: IFFALSE 71451
// begin veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) ;
71401: LD_ADDR_VAR 0 5
71405: PUSH
71406: LD_VAR 0 5
71410: PPUSH
71411: LD_VAR 0 2
71415: PPUSH
71416: LD_VAR 0 2
71420: PPUSH
71421: CALL_OW 250
71425: PUSH
71426: LD_VAR 0 2
71430: PPUSH
71431: CALL_OW 251
71435: PUSH
71436: LD_INT 0
71438: PUSH
71439: EMPTY
71440: LIST
71441: LIST
71442: LIST
71443: PPUSH
71444: CALL_OW 1
71448: ST_TO_ADDR
// end else
71449: GO 71626
// begin RemoveUnit ( i ) ;
71451: LD_VAR 0 2
71455: PPUSH
71456: CALL_OW 64
// if not PlaceUnitXYR ( i , val [ 1 ] [ 2 ] , val [ 1 ] [ 3 ] , 7 , false ) then
71460: LD_VAR 0 2
71464: PPUSH
71465: LD_VAR 0 3
71469: PUSH
71470: LD_INT 1
71472: ARRAY
71473: PUSH
71474: LD_INT 2
71476: ARRAY
71477: PPUSH
71478: LD_VAR 0 3
71482: PUSH
71483: LD_INT 1
71485: ARRAY
71486: PUSH
71487: LD_INT 3
71489: ARRAY
71490: PPUSH
71491: LD_INT 7
71493: PPUSH
71494: LD_INT 0
71496: PPUSH
71497: CALL_OW 50
71501: NOT
71502: IFFALSE 71592
// begin un = UnitsInside ( i ) ;
71504: LD_ADDR_VAR 0 4
71508: PUSH
71509: LD_VAR 0 2
71513: PPUSH
71514: CALL_OW 313
71518: ST_TO_ADDR
// if un > 0 then
71519: LD_VAR 0 4
71523: PUSH
71524: LD_INT 0
71526: GREATER
71527: IFFALSE 71566
// begin RemoveHumanFromVariables ( base , un [ 1 ] , true , true ) ;
71529: LD_VAR 0 1
71533: PPUSH
71534: LD_VAR 0 4
71538: PUSH
71539: LD_INT 1
71541: ARRAY
71542: PPUSH
71543: LD_INT 1
71545: PPUSH
71546: LD_INT 1
71548: PPUSH
71549: CALL 25867 0 4
// DestroyUnit ( un [ 1 ] ) ;
71553: LD_VAR 0 4
71557: PUSH
71558: LD_INT 1
71560: ARRAY
71561: PPUSH
71562: CALL_OW 65
// end ; RemoveVehicleFromVariables ( base , i , true ) ;
71566: LD_VAR 0 1
71570: PPUSH
71571: LD_VAR 0 2
71575: PPUSH
71576: LD_INT 1
71578: PPUSH
71579: CALL 24969 0 3
// DestroyUnit ( i ) ;
71583: LD_VAR 0 2
71587: PPUSH
71588: CALL_OW 65
// end ; veh_hex_map = Replace ( veh_hex_map , i , [ 0 , 0 , 0 0$0 ] ) ;
71592: LD_ADDR_VAR 0 5
71596: PUSH
71597: LD_VAR 0 5
71601: PPUSH
71602: LD_VAR 0 2
71606: PPUSH
71607: LD_INT 0
71609: PUSH
71610: LD_INT 0
71612: PUSH
71613: LD_INT 0
71615: PUSH
71616: EMPTY
71617: LIST
71618: LIST
71619: LIST
71620: PPUSH
71621: CALL_OW 1
71625: ST_TO_ADDR
// end ; end ; end ; end ; end else
71626: GO 71662
// begin veh_hex_map = Replace ( veh_hex_map , i , [ 0 , 0 , 0 0$0 ] ) ;
71628: LD_ADDR_VAR 0 5
71632: PUSH
71633: LD_VAR 0 5
71637: PPUSH
71638: LD_VAR 0 2
71642: PPUSH
71643: LD_INT 0
71645: PUSH
71646: LD_INT 0
71648: PUSH
71649: LD_INT 0
71651: PUSH
71652: EMPTY
71653: LIST
71654: LIST
71655: LIST
71656: PPUSH
71657: CALL_OW 1
71661: ST_TO_ADDR
// end ; end ;
71662: GO 70790
71664: POP
71665: POP
// until false ;
71666: LD_INT 0
71668: IFFALSE 70676
// end ;
71670: PPOPN 5
71672: END
// every 0 0$1 + 0 0$0.5 do var base , area_list , area , c , temp_list , crates_list , b , temp_value ; var refueling ;
71673: GO 71675
71675: DISABLE
71676: LD_INT 0
71678: PPUSH
71679: PPUSH
71680: PPUSH
71681: PPUSH
71682: PPUSH
71683: PPUSH
71684: PPUSH
71685: PPUSH
71686: PPUSH
// begin refueling = [ false , false , false ] ;
71687: LD_ADDR_VAR 0 9
71691: PUSH
71692: LD_INT 0
71694: PUSH
71695: LD_INT 0
71697: PUSH
71698: LD_INT 0
71700: PUSH
71701: EMPTY
71702: LIST
71703: LIST
71704: LIST
71705: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
71706: LD_INT 35
71708: PPUSH
71709: CALL_OW 67
// for base in ai_bases do
71713: LD_ADDR_VAR 0 1
71717: PUSH
71718: LD_EXP 25
71722: PUSH
71723: FOR_IN
71724: IFFALSE 72760
// begin if ai_cargo_bay [ base ] = 0 then
71726: LD_EXP 65
71730: PUSH
71731: LD_VAR 0 1
71735: ARRAY
71736: PUSH
71737: LD_INT 0
71739: EQUAL
71740: IFFALSE 71744
// continue ;
71742: GO 71723
// temp_value = GetLives ( ai_cargo_bay [ base ] ) ;
71744: LD_ADDR_VAR 0 8
71748: PUSH
71749: LD_EXP 65
71753: PUSH
71754: LD_VAR 0 1
71758: ARRAY
71759: PPUSH
71760: CALL_OW 256
71764: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
71765: LD_ADDR_VAR 0 3
71769: PUSH
71770: LD_VAR 0 1
71774: PPUSH
71775: CALL 27032 0 1
71779: ST_TO_ADDR
// if IsInArea ( ai_cargo_bay [ base ] , area ) then
71780: LD_EXP 65
71784: PUSH
71785: LD_VAR 0 1
71789: ARRAY
71790: PPUSH
71791: LD_VAR 0 3
71795: PPUSH
71796: CALL_OW 308
71800: IFFALSE 71816
// begin if temp_value < 1000 then
71802: LD_VAR 0 8
71806: PUSH
71807: LD_INT 1000
71809: LESS
71810: IFFALSE 71814
// continue ;
71812: GO 71723
// end else
71814: GO 71918
// if temp_value < 600 then
71816: LD_VAR 0 8
71820: PUSH
71821: LD_INT 600
71823: LESS
71824: IFFALSE 71918
// begin if IsLive ( ai_depot [ base ] ) then
71826: LD_EXP 35
71830: PUSH
71831: LD_VAR 0 1
71835: ARRAY
71836: PPUSH
71837: CALL_OW 300
71841: IFFALSE 71871
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) else
71843: LD_EXP 65
71847: PUSH
71848: LD_VAR 0 1
71852: ARRAY
71853: PPUSH
71854: LD_EXP 35
71858: PUSH
71859: LD_VAR 0 1
71863: ARRAY
71864: PPUSH
71865: CALL_OW 161
71869: GO 71916
// ComMoveXY ( ai_cargo_bay [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
71871: LD_EXP 65
71875: PUSH
71876: LD_VAR 0 1
71880: ARRAY
71881: PPUSH
71882: LD_EXP 55
71886: PUSH
71887: LD_VAR 0 1
71891: ARRAY
71892: PUSH
71893: LD_INT 1
71895: ARRAY
71896: PPUSH
71897: LD_EXP 55
71901: PUSH
71902: LD_VAR 0 1
71906: ARRAY
71907: PUSH
71908: LD_INT 2
71910: ARRAY
71911: PPUSH
71912: CALL_OW 111
// continue ;
71916: GO 71723
// end ; if GetEngine ( ai_cargo_bay [ base ] ) = engine_combustion then
71918: LD_EXP 65
71922: PUSH
71923: LD_VAR 0 1
71927: ARRAY
71928: PPUSH
71929: CALL_OW 262
71933: PUSH
71934: LD_INT 1
71936: EQUAL
71937: IFFALSE 72112
// begin c = GetFuel ( ai_cargo_bay [ base ] ) ;
71939: LD_ADDR_VAR 0 4
71943: PUSH
71944: LD_EXP 65
71948: PUSH
71949: LD_VAR 0 1
71953: ARRAY
71954: PPUSH
71955: CALL_OW 261
71959: ST_TO_ADDR
// if c > 90 or not IsOk ( ai_depot [ base ] ) then
71960: LD_VAR 0 4
71964: PUSH
71965: LD_INT 90
71967: GREATER
71968: PUSH
71969: LD_EXP 35
71973: PUSH
71974: LD_VAR 0 1
71978: ARRAY
71979: PPUSH
71980: CALL_OW 302
71984: NOT
71985: OR
71986: IFFALSE 72013
// refueling = Replace ( refueling , base , false ) else
71988: LD_ADDR_VAR 0 9
71992: PUSH
71993: LD_VAR 0 9
71997: PPUSH
71998: LD_VAR 0 1
72002: PPUSH
72003: LD_INT 0
72005: PPUSH
72006: CALL_OW 1
72010: ST_TO_ADDR
72011: GO 72112
// if c < 25 or refueling [ base ] then
72013: LD_VAR 0 4
72017: PUSH
72018: LD_INT 25
72020: LESS
72021: PUSH
72022: LD_VAR 0 9
72026: PUSH
72027: LD_VAR 0 1
72031: ARRAY
72032: OR
72033: IFFALSE 72112
// begin ComMoveUnit ( ai_cargo_bay [ base ] , ai_depot [ base ] ) ;
72035: LD_EXP 65
72039: PUSH
72040: LD_VAR 0 1
72044: ARRAY
72045: PPUSH
72046: LD_EXP 35
72050: PUSH
72051: LD_VAR 0 1
72055: ARRAY
72056: PPUSH
72057: CALL_OW 112
// AddComRefuel ( ai_cargo_bay [ base ] , ai_depot [ base ] ) ;
72061: LD_EXP 65
72065: PUSH
72066: LD_VAR 0 1
72070: ARRAY
72071: PPUSH
72072: LD_EXP 35
72076: PUSH
72077: LD_VAR 0 1
72081: ARRAY
72082: PPUSH
72083: CALL_OW 210
// refueling = Replace ( refueling , base , true ) ;
72087: LD_ADDR_VAR 0 9
72091: PUSH
72092: LD_VAR 0 9
72096: PPUSH
72097: LD_VAR 0 1
72101: PPUSH
72102: LD_INT 1
72104: PPUSH
72105: CALL_OW 1
72109: ST_TO_ADDR
// continue ;
72110: GO 71723
// end ; end ; case base of 1 :
72112: LD_VAR 0 1
72116: PUSH
72117: LD_INT 1
72119: DOUBLE
72120: EQUAL
72121: IFTRUE 72125
72123: GO 72218
72125: POP
// begin area_list = [ ru_crate_safe_area ] ;
72126: LD_ADDR_VAR 0 2
72130: PUSH
72131: LD_INT 14
72133: PUSH
72134: EMPTY
72135: LIST
72136: ST_TO_ADDR
// if FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_inarea , ru_small_base ] ] ) = 0 then
72137: LD_INT 22
72139: PUSH
72140: LD_EXP 2
72144: PUSH
72145: EMPTY
72146: LIST
72147: LIST
72148: PUSH
72149: LD_INT 2
72151: PUSH
72152: LD_INT 30
72154: PUSH
72155: LD_INT 0
72157: PUSH
72158: EMPTY
72159: LIST
72160: LIST
72161: PUSH
72162: LD_INT 30
72164: PUSH
72165: LD_INT 1
72167: PUSH
72168: EMPTY
72169: LIST
72170: LIST
72171: PUSH
72172: EMPTY
72173: LIST
72174: LIST
72175: LIST
72176: PUSH
72177: LD_INT 95
72179: PUSH
72180: LD_INT 2
72182: PUSH
72183: EMPTY
72184: LIST
72185: LIST
72186: PUSH
72187: EMPTY
72188: LIST
72189: LIST
72190: LIST
72191: PPUSH
72192: CALL_OW 69
72196: PUSH
72197: LD_INT 0
72199: EQUAL
72200: IFFALSE 72216
// area_list = area_list ^ ru_crate_relativesafe_area ;
72202: LD_ADDR_VAR 0 2
72206: PUSH
72207: LD_VAR 0 2
72211: PUSH
72212: LD_INT 15
72214: ADD
72215: ST_TO_ADDR
// end ; 2 :
72216: GO 72383
72218: LD_INT 2
72220: DOUBLE
72221: EQUAL
72222: IFTRUE 72226
72224: GO 72236
72226: POP
// area_list = [ ] ; 3 :
72227: LD_ADDR_VAR 0 2
72231: PUSH
72232: EMPTY
72233: ST_TO_ADDR
72234: GO 72383
72236: LD_INT 3
72238: DOUBLE
72239: EQUAL
72240: IFTRUE 72244
72242: GO 72382
72244: POP
// begin area_list = [ ar_crate_safe_area , ru_crate_safe_area ] ;
72245: LD_ADDR_VAR 0 2
72249: PUSH
72250: LD_INT 16
72252: PUSH
72253: LD_INT 14
72255: PUSH
72256: EMPTY
72257: LIST
72258: LIST
72259: ST_TO_ADDR
// if num_farmer_cargo_bays_destroyed <= [ 0 , 1 , 3 ] [ difficulty ] then
72260: LD_EXP 111
72264: PUSH
72265: LD_INT 0
72267: PUSH
72268: LD_INT 1
72270: PUSH
72271: LD_INT 3
72273: PUSH
72274: EMPTY
72275: LIST
72276: LIST
72277: LIST
72278: PUSH
72279: LD_OWVAR 67
72283: ARRAY
72284: LESSEQUAL
72285: IFFALSE 72301
// area_list = area_list ^ ar_crate_relativesafe_area ;
72287: LD_ADDR_VAR 0 2
72291: PUSH
72292: LD_VAR 0 2
72296: PUSH
72297: LD_INT 17
72299: ADD
72300: ST_TO_ADDR
// if FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_inarea , ru_small_base ] ] ) = 0 then
72301: LD_INT 22
72303: PUSH
72304: LD_EXP 2
72308: PUSH
72309: EMPTY
72310: LIST
72311: LIST
72312: PUSH
72313: LD_INT 2
72315: PUSH
72316: LD_INT 30
72318: PUSH
72319: LD_INT 0
72321: PUSH
72322: EMPTY
72323: LIST
72324: LIST
72325: PUSH
72326: LD_INT 30
72328: PUSH
72329: LD_INT 1
72331: PUSH
72332: EMPTY
72333: LIST
72334: LIST
72335: PUSH
72336: EMPTY
72337: LIST
72338: LIST
72339: LIST
72340: PUSH
72341: LD_INT 95
72343: PUSH
72344: LD_INT 2
72346: PUSH
72347: EMPTY
72348: LIST
72349: LIST
72350: PUSH
72351: EMPTY
72352: LIST
72353: LIST
72354: LIST
72355: PPUSH
72356: CALL_OW 69
72360: PUSH
72361: LD_INT 0
72363: EQUAL
72364: IFFALSE 72380
// area_list = area_list ^ ru_crate_relativesafe_area ;
72366: LD_ADDR_VAR 0 2
72370: PUSH
72371: LD_VAR 0 2
72375: PUSH
72376: LD_INT 15
72378: ADD
72379: ST_TO_ADDR
// end ; end ;
72380: GO 72383
72382: POP
// crates_list = [ ] ;
72383: LD_ADDR_VAR 0 6
72387: PUSH
72388: EMPTY
72389: ST_TO_ADDR
// for b in area_list do
72390: LD_ADDR_VAR 0 7
72394: PUSH
72395: LD_VAR 0 2
72399: PUSH
72400: FOR_IN
72401: IFFALSE 72431
// begin crates_list = crates_list ^ GetListOfCratesInArea_ForGathering ( base , b ) ;
72403: LD_ADDR_VAR 0 6
72407: PUSH
72408: LD_VAR 0 6
72412: PUSH
72413: LD_VAR 0 1
72417: PPUSH
72418: LD_VAR 0 7
72422: PPUSH
72423: CALL 19270 0 2
72427: ADD
72428: ST_TO_ADDR
// end ;
72429: GO 72400
72431: POP
72432: POP
// if crates_list > 0 and ai_depot [ base ] > 0 then
72433: LD_VAR 0 6
72437: PUSH
72438: LD_INT 0
72440: GREATER
72441: PUSH
72442: LD_EXP 35
72446: PUSH
72447: LD_VAR 0 1
72451: ARRAY
72452: PUSH
72453: LD_INT 0
72455: GREATER
72456: AND
72457: IFFALSE 72583
// begin temp_list = [ ] ;
72459: LD_ADDR_VAR 0 5
72463: PUSH
72464: EMPTY
72465: ST_TO_ADDR
// for c in crates_list do
72466: LD_ADDR_VAR 0 4
72470: PUSH
72471: LD_VAR 0 6
72475: PUSH
72476: FOR_IN
72477: IFFALSE 72526
// temp_list = temp_list ^ GetDistUnitXY ( ai_cargo_bay [ base ] , c [ 1 ] , c [ 2 ] ) ;
72479: LD_ADDR_VAR 0 5
72483: PUSH
72484: LD_VAR 0 5
72488: PUSH
72489: LD_EXP 65
72493: PUSH
72494: LD_VAR 0 1
72498: ARRAY
72499: PPUSH
72500: LD_VAR 0 4
72504: PUSH
72505: LD_INT 1
72507: ARRAY
72508: PPUSH
72509: LD_VAR 0 4
72513: PUSH
72514: LD_INT 2
72516: ARRAY
72517: PPUSH
72518: CALL_OW 297
72522: ADD
72523: ST_TO_ADDR
72524: GO 72476
72526: POP
72527: POP
// temp_list = WorstFromListByList ( crates_list , temp_list ) ;
72528: LD_ADDR_VAR 0 5
72532: PUSH
72533: LD_VAR 0 6
72537: PPUSH
72538: LD_VAR 0 5
72542: PPUSH
72543: CALL_OW 78
72547: ST_TO_ADDR
// ComCollect ( ai_cargo_bay [ base ] , temp_list [ 1 ] , temp_list [ 2 ] ) ;
72548: LD_EXP 65
72552: PUSH
72553: LD_VAR 0 1
72557: ARRAY
72558: PPUSH
72559: LD_VAR 0 5
72563: PUSH
72564: LD_INT 1
72566: ARRAY
72567: PPUSH
72568: LD_VAR 0 5
72572: PUSH
72573: LD_INT 2
72575: ARRAY
72576: PPUSH
72577: CALL_OW 117
// end else
72581: GO 72758
// if IsOk ( ai_depot [ base ] ) and Carry ( ai_cargo_bay [ base ] ) then
72583: LD_EXP 35
72587: PUSH
72588: LD_VAR 0 1
72592: ARRAY
72593: PPUSH
72594: CALL_OW 302
72598: PUSH
72599: LD_EXP 65
72603: PUSH
72604: LD_VAR 0 1
72608: ARRAY
72609: PPUSH
72610: CALL_OW 281
72614: AND
72615: IFFALSE 72645
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) else
72617: LD_EXP 65
72621: PUSH
72622: LD_VAR 0 1
72626: ARRAY
72627: PPUSH
72628: LD_EXP 35
72632: PUSH
72633: LD_VAR 0 1
72637: ARRAY
72638: PPUSH
72639: CALL_OW 161
72643: GO 72758
// if not IsInArea ( ai_cargo_bay [ base ] , area ) then
72645: LD_EXP 65
72649: PUSH
72650: LD_VAR 0 1
72654: ARRAY
72655: PPUSH
72656: LD_VAR 0 3
72660: PPUSH
72661: CALL_OW 308
72665: NOT
72666: IFFALSE 72758
// if IsOk ( ai_depot [ base ] ) then
72668: LD_EXP 35
72672: PUSH
72673: LD_VAR 0 1
72677: ARRAY
72678: PPUSH
72679: CALL_OW 302
72683: IFFALSE 72713
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) else
72685: LD_EXP 65
72689: PUSH
72690: LD_VAR 0 1
72694: ARRAY
72695: PPUSH
72696: LD_EXP 35
72700: PUSH
72701: LD_VAR 0 1
72705: ARRAY
72706: PPUSH
72707: CALL_OW 161
72711: GO 72758
// ComMoveXY ( ai_cargo_bay [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
72713: LD_EXP 65
72717: PUSH
72718: LD_VAR 0 1
72722: ARRAY
72723: PPUSH
72724: LD_EXP 55
72728: PUSH
72729: LD_VAR 0 1
72733: ARRAY
72734: PUSH
72735: LD_INT 1
72737: ARRAY
72738: PPUSH
72739: LD_EXP 55
72743: PUSH
72744: LD_VAR 0 1
72748: ARRAY
72749: PUSH
72750: LD_INT 2
72752: ARRAY
72753: PPUSH
72754: CALL_OW 111
// end ;
72758: GO 71723
72760: POP
72761: POP
// until false ;
72762: LD_INT 0
72764: IFFALSE 71706
// end ;
72766: PPOPN 9
72768: END
// every 0 0$1 + 0 0$0.7 do var side , i , scientists_list , temp_list , temp_unit , base , k , temp_list_3 , area ;
72769: GO 72771
72771: DISABLE
72772: LD_INT 0
72774: PPUSH
72775: PPUSH
72776: PPUSH
72777: PPUSH
72778: PPUSH
72779: PPUSH
72780: PPUSH
72781: PPUSH
72782: PPUSH
// begin for base in ai_bases do
72783: LD_ADDR_VAR 0 6
72787: PUSH
72788: LD_EXP 25
72792: PUSH
72793: FOR_IN
72794: IFFALSE 73751
// begin side = GetBaseSide ( base ) ;
72796: LD_ADDR_VAR 0 1
72800: PUSH
72801: LD_VAR 0 6
72805: PPUSH
72806: CALL 27103 0 1
72810: ST_TO_ADDR
// scientists_list = ai_scientists [ base ] diff ai_heal_these_humans [ base ] ;
72811: LD_ADDR_VAR 0 3
72815: PUSH
72816: LD_EXP 31
72820: PUSH
72821: LD_VAR 0 6
72825: ARRAY
72826: PUSH
72827: LD_EXP 57
72831: PUSH
72832: LD_VAR 0 6
72836: ARRAY
72837: DIFF
72838: ST_TO_ADDR
// if base in [ 1 , 3 ] then
72839: LD_VAR 0 6
72843: PUSH
72844: LD_INT 1
72846: PUSH
72847: LD_INT 3
72849: PUSH
72850: EMPTY
72851: LIST
72852: LIST
72853: IN
72854: IFFALSE 72872
// scientists_list = scientists_list diff Kozlov ;
72856: LD_ADDR_VAR 0 3
72860: PUSH
72861: LD_VAR 0 3
72865: PUSH
72866: LD_EXP 24
72870: DIFF
72871: ST_TO_ADDR
// if base in [ 1 , 3 ] and IsLive ( Kozlov ) and Kozlov in ai_scientists [ base ] and not Kozlov in ai_heal_these_humans [ base ] and not kozlov_trying_to_escape then
72872: LD_VAR 0 6
72876: PUSH
72877: LD_INT 1
72879: PUSH
72880: LD_INT 3
72882: PUSH
72883: EMPTY
72884: LIST
72885: LIST
72886: IN
72887: PUSH
72888: LD_EXP 24
72892: PPUSH
72893: CALL_OW 300
72897: AND
72898: PUSH
72899: LD_EXP 24
72903: PUSH
72904: LD_EXP 31
72908: PUSH
72909: LD_VAR 0 6
72913: ARRAY
72914: IN
72915: AND
72916: PUSH
72917: LD_EXP 24
72921: PUSH
72922: LD_EXP 57
72926: PUSH
72927: LD_VAR 0 6
72931: ARRAY
72932: IN
72933: NOT
72934: AND
72935: PUSH
72936: LD_EXP 139
72940: NOT
72941: AND
72942: IFFALSE 73076
// begin if GetLives ( Kozlov ) <= 500 then
72944: LD_EXP 24
72948: PPUSH
72949: CALL_OW 256
72953: PUSH
72954: LD_INT 500
72956: LESSEQUAL
72957: IFFALSE 73008
// begin temp_list = ai_heal_these_humans [ base ] ^ Kozlov ;
72959: LD_ADDR_VAR 0 4
72963: PUSH
72964: LD_EXP 57
72968: PUSH
72969: LD_VAR 0 6
72973: ARRAY
72974: PUSH
72975: LD_EXP 24
72979: ADD
72980: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
72981: LD_ADDR_EXP 57
72985: PUSH
72986: LD_EXP 57
72990: PPUSH
72991: LD_VAR 0 6
72995: PPUSH
72996: LD_VAR 0 4
73000: PPUSH
73001: CALL_OW 1
73005: ST_TO_ADDR
// end else
73006: GO 73076
// DistributeHumansToBuildings ( base , [ Kozlov ] , UnitFilter ( ai_labs [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , 0 , 6 , true , true ) ;
73008: LD_VAR 0 6
73012: PPUSH
73013: LD_EXP 24
73017: PUSH
73018: EMPTY
73019: LIST
73020: PPUSH
73021: LD_EXP 36
73025: PUSH
73026: LD_VAR 0 6
73030: ARRAY
73031: PPUSH
73032: LD_INT 50
73034: PUSH
73035: EMPTY
73036: LIST
73037: PUSH
73038: LD_INT 3
73040: PUSH
73041: LD_INT 57
73043: PUSH
73044: EMPTY
73045: LIST
73046: PUSH
73047: EMPTY
73048: LIST
73049: LIST
73050: PUSH
73051: EMPTY
73052: LIST
73053: LIST
73054: PPUSH
73055: CALL_OW 72
73059: PPUSH
73060: LD_INT 0
73062: PPUSH
73063: LD_INT 6
73065: PPUSH
73066: LD_INT 1
73068: PPUSH
73069: LD_INT 1
73071: PPUSH
73072: CALL 35428 0 7
// end ; temp_list = ai_heal_these_humans [ base ] ;
73076: LD_ADDR_VAR 0 4
73080: PUSH
73081: LD_EXP 57
73085: PUSH
73086: LD_VAR 0 6
73090: ARRAY
73091: ST_TO_ADDR
// i = 1 ;
73092: LD_ADDR_VAR 0 2
73096: PUSH
73097: LD_INT 1
73099: ST_TO_ADDR
// while i <= scientists_list do
73100: LD_VAR 0 2
73104: PUSH
73105: LD_VAR 0 3
73109: LESSEQUAL
73110: IFFALSE 73193
// begin if GetLives ( scientists_list [ i ] ) <= 700 then
73112: LD_VAR 0 3
73116: PUSH
73117: LD_VAR 0 2
73121: ARRAY
73122: PPUSH
73123: CALL_OW 256
73127: PUSH
73128: LD_INT 700
73130: LESSEQUAL
73131: IFFALSE 73177
// begin temp_list = temp_list ^ scientists_list [ i ] ;
73133: LD_ADDR_VAR 0 4
73137: PUSH
73138: LD_VAR 0 4
73142: PUSH
73143: LD_VAR 0 3
73147: PUSH
73148: LD_VAR 0 2
73152: ARRAY
73153: ADD
73154: ST_TO_ADDR
// scientists_list = Delete ( scientists_list , i ) ;
73155: LD_ADDR_VAR 0 3
73159: PUSH
73160: LD_VAR 0 3
73164: PPUSH
73165: LD_VAR 0 2
73169: PPUSH
73170: CALL_OW 3
73174: ST_TO_ADDR
// continue ;
73175: GO 73100
// end ; i = i + 1 ;
73177: LD_ADDR_VAR 0 2
73181: PUSH
73182: LD_VAR 0 2
73186: PUSH
73187: LD_INT 1
73189: PLUS
73190: ST_TO_ADDR
// end ;
73191: GO 73100
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
73193: LD_ADDR_EXP 57
73197: PUSH
73198: LD_EXP 57
73202: PPUSH
73203: LD_VAR 0 6
73207: PPUSH
73208: LD_VAR 0 4
73212: PPUSH
73213: CALL_OW 1
73217: ST_TO_ADDR
// temp_list = [ ] ;
73218: LD_ADDR_VAR 0 4
73222: PUSH
73223: EMPTY
73224: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
73225: LD_ADDR_VAR 0 2
73229: PUSH
73230: LD_EXP 57
73234: PUSH
73235: LD_VAR 0 6
73239: ARRAY
73240: PUSH
73241: FOR_IN
73242: IFFALSE 73292
// if GetLives ( i ) < 1000 and IsInUnit ( i ) = 0 then
73244: LD_VAR 0 2
73248: PPUSH
73249: CALL_OW 256
73253: PUSH
73254: LD_INT 1000
73256: LESS
73257: PUSH
73258: LD_VAR 0 2
73262: PPUSH
73263: CALL_OW 310
73267: PUSH
73268: LD_INT 0
73270: EQUAL
73271: AND
73272: IFFALSE 73290
// temp_list = temp_list ^ i ;
73274: LD_ADDR_VAR 0 4
73278: PUSH
73279: LD_VAR 0 4
73283: PUSH
73284: LD_VAR 0 2
73288: ADD
73289: ST_TO_ADDR
73290: GO 73241
73292: POP
73293: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
73294: LD_ADDR_EXP 57
73298: PUSH
73299: LD_EXP 57
73303: PPUSH
73304: LD_VAR 0 6
73308: PPUSH
73309: LD_VAR 0 4
73313: PPUSH
73314: CALL_OW 1
73318: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
73319: LD_ADDR_VAR 0 2
73323: PUSH
73324: LD_EXP 57
73328: PUSH
73329: LD_VAR 0 6
73333: ARRAY
73334: PUSH
73335: FOR_IN
73336: IFFALSE 73444
// begin if i = Kozlov and kozlov_trying_to_escape then
73338: LD_VAR 0 2
73342: PUSH
73343: LD_EXP 24
73347: EQUAL
73348: PUSH
73349: LD_EXP 139
73353: AND
73354: IFFALSE 73358
// continue ;
73356: GO 73335
// if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
73358: LD_VAR 0 2
73362: PPUSH
73363: LD_EXP 55
73367: PUSH
73368: LD_VAR 0 6
73372: ARRAY
73373: PUSH
73374: LD_INT 1
73376: ARRAY
73377: PPUSH
73378: LD_EXP 55
73382: PUSH
73383: LD_VAR 0 6
73387: ARRAY
73388: PUSH
73389: LD_INT 2
73391: ARRAY
73392: PPUSH
73393: CALL_OW 297
73397: PUSH
73398: LD_INT 4
73400: GREATER
73401: IFFALSE 73442
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
73403: LD_VAR 0 2
73407: PPUSH
73408: LD_EXP 55
73412: PUSH
73413: LD_VAR 0 6
73417: ARRAY
73418: PUSH
73419: LD_INT 1
73421: ARRAY
73422: PPUSH
73423: LD_EXP 55
73427: PUSH
73428: LD_VAR 0 6
73432: ARRAY
73433: PUSH
73434: LD_INT 2
73436: ARRAY
73437: PPUSH
73438: CALL_OW 111
// end ;
73442: GO 73335
73444: POP
73445: POP
// if scientists_list = 0 then
73446: LD_VAR 0 3
73450: PUSH
73451: LD_INT 0
73453: EQUAL
73454: IFFALSE 73458
// continue ;
73456: GO 72793
// if ai_heal_these_humans [ base ] > 0 then
73458: LD_EXP 57
73462: PUSH
73463: LD_VAR 0 6
73467: ARRAY
73468: PUSH
73469: LD_INT 0
73471: GREATER
73472: IFFALSE 73667
// begin area = GetBaseArea ( base ) ;
73474: LD_ADDR_VAR 0 9
73478: PUSH
73479: LD_VAR 0 6
73483: PPUSH
73484: CALL 27032 0 1
73488: ST_TO_ADDR
// temp_list = UnitFilter ( ai_heal_these_humans [ base ] , [ f_inarea , area ] ) ;
73489: LD_ADDR_VAR 0 4
73493: PUSH
73494: LD_EXP 57
73498: PUSH
73499: LD_VAR 0 6
73503: ARRAY
73504: PPUSH
73505: LD_INT 95
73507: PUSH
73508: LD_VAR 0 9
73512: PUSH
73513: EMPTY
73514: LIST
73515: LIST
73516: PPUSH
73517: CALL_OW 72
73521: ST_TO_ADDR
// if temp_list > 0 then
73522: LD_VAR 0 4
73526: PUSH
73527: LD_INT 0
73529: GREATER
73530: IFFALSE 73667
// begin scientists_list = GetHumansOutOfUnits ( scientists_list ) ;
73532: LD_ADDR_VAR 0 3
73536: PUSH
73537: LD_VAR 0 3
73541: PPUSH
73542: CALL 45989 0 1
73546: ST_TO_ADDR
// repeat i = 1 ;
73547: LD_ADDR_VAR 0 2
73551: PUSH
73552: LD_INT 1
73554: ST_TO_ADDR
// while i <= temp_list do
73555: LD_VAR 0 2
73559: PUSH
73560: LD_VAR 0 4
73564: LESSEQUAL
73565: IFFALSE 73657
// begin if scientists_list = 0 then
73567: LD_VAR 0 3
73571: PUSH
73572: LD_INT 0
73574: EQUAL
73575: IFFALSE 73579
// break ;
73577: GO 73657
// temp_unit = NearestUnitToUnit ( scientists_list , temp_list [ i ] ) ;
73579: LD_ADDR_VAR 0 5
73583: PUSH
73584: LD_VAR 0 3
73588: PPUSH
73589: LD_VAR 0 4
73593: PUSH
73594: LD_VAR 0 2
73598: ARRAY
73599: PPUSH
73600: CALL_OW 74
73604: ST_TO_ADDR
// ComHeal ( temp_unit , temp_list [ i ] ) ;
73605: LD_VAR 0 5
73609: PPUSH
73610: LD_VAR 0 4
73614: PUSH
73615: LD_VAR 0 2
73619: ARRAY
73620: PPUSH
73621: CALL_OW 128
// scientists_list = scientists_list diff temp_unit ;
73625: LD_ADDR_VAR 0 3
73629: PUSH
73630: LD_VAR 0 3
73634: PUSH
73635: LD_VAR 0 5
73639: DIFF
73640: ST_TO_ADDR
// i = i + 1 ;
73641: LD_ADDR_VAR 0 2
73645: PUSH
73646: LD_VAR 0 2
73650: PUSH
73651: LD_INT 1
73653: PLUS
73654: ST_TO_ADDR
// end ;
73655: GO 73555
// until scientists_list = 0 ;
73657: LD_VAR 0 3
73661: PUSH
73662: LD_INT 0
73664: EQUAL
73665: IFFALSE 73547
// end ; end ; DistributeHumansToBuildings ( base , scientists_list , UnitFilter ( ai_labs [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_scientistic , [ 5 , 6 , 5 ] [ base ] , true , false ) ;
73667: LD_VAR 0 6
73671: PPUSH
73672: LD_VAR 0 3
73676: PPUSH
73677: LD_EXP 36
73681: PUSH
73682: LD_VAR 0 6
73686: ARRAY
73687: PPUSH
73688: LD_INT 50
73690: PUSH
73691: EMPTY
73692: LIST
73693: PUSH
73694: LD_INT 3
73696: PUSH
73697: LD_INT 57
73699: PUSH
73700: EMPTY
73701: LIST
73702: PUSH
73703: EMPTY
73704: LIST
73705: LIST
73706: PUSH
73707: EMPTY
73708: LIST
73709: LIST
73710: PPUSH
73711: CALL_OW 72
73715: PPUSH
73716: LD_INT 4
73718: PPUSH
73719: LD_INT 5
73721: PUSH
73722: LD_INT 6
73724: PUSH
73725: LD_INT 5
73727: PUSH
73728: EMPTY
73729: LIST
73730: LIST
73731: LIST
73732: PUSH
73733: LD_VAR 0 6
73737: ARRAY
73738: PPUSH
73739: LD_INT 1
73741: PPUSH
73742: LD_INT 0
73744: PPUSH
73745: CALL 35428 0 7
// end ;
73749: GO 72793
73751: POP
73752: POP
// enable ;
73753: ENABLE
// end ; end_of_file
73754: PPOPN 9
73756: END
// export function GetApes ( side ) ; begin
73757: LD_INT 0
73759: PPUSH
// result = FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_class , class_apeman ] , [ f_class , class_apeman_soldier ] , [ f_class , class_apeman_engineer ] , [ f_class , class_apeman_kamikaze ] ] ] ) ;
73760: LD_ADDR_VAR 0 2
73764: PUSH
73765: LD_INT 22
73767: PUSH
73768: LD_VAR 0 1
73772: PUSH
73773: EMPTY
73774: LIST
73775: LIST
73776: PUSH
73777: LD_INT 2
73779: PUSH
73780: LD_INT 25
73782: PUSH
73783: LD_INT 12
73785: PUSH
73786: EMPTY
73787: LIST
73788: LIST
73789: PUSH
73790: LD_INT 25
73792: PUSH
73793: LD_INT 15
73795: PUSH
73796: EMPTY
73797: LIST
73798: LIST
73799: PUSH
73800: LD_INT 25
73802: PUSH
73803: LD_INT 16
73805: PUSH
73806: EMPTY
73807: LIST
73808: LIST
73809: PUSH
73810: LD_INT 25
73812: PUSH
73813: LD_INT 17
73815: PUSH
73816: EMPTY
73817: LIST
73818: LIST
73819: PUSH
73820: EMPTY
73821: LIST
73822: LIST
73823: LIST
73824: LIST
73825: LIST
73826: PUSH
73827: EMPTY
73828: LIST
73829: LIST
73830: PPUSH
73831: CALL_OW 69
73835: ST_TO_ADDR
// end ;
73836: LD_VAR 0 2
73840: RET
// export function GetMainPlayerCharacters ; begin
73841: LD_INT 0
73843: PPUSH
// result = UnitFilter ( [ Heike , Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis , Khattam ] , [ f_side , you ] ) ;
73844: LD_ADDR_VAR 0 1
73848: PUSH
73849: LD_EXP 9
73853: PUSH
73854: LD_EXP 10
73858: PUSH
73859: LD_EXP 11
73863: PUSH
73864: LD_EXP 12
73868: PUSH
73869: LD_EXP 13
73873: PUSH
73874: LD_EXP 14
73878: PUSH
73879: LD_EXP 15
73883: PUSH
73884: LD_EXP 16
73888: PUSH
73889: LD_EXP 17
73893: PUSH
73894: LD_EXP 18
73898: PUSH
73899: LD_EXP 19
73903: PUSH
73904: LD_EXP 20
73908: PUSH
73909: EMPTY
73910: LIST
73911: LIST
73912: LIST
73913: LIST
73914: LIST
73915: LIST
73916: LIST
73917: LIST
73918: LIST
73919: LIST
73920: LIST
73921: LIST
73922: PPUSH
73923: LD_INT 22
73925: PUSH
73926: LD_EXP 2
73930: PUSH
73931: EMPTY
73932: LIST
73933: LIST
73934: PPUSH
73935: CALL_OW 72
73939: ST_TO_ADDR
// end ;
73940: LD_VAR 0 1
73944: RET
// export function GetNonmainPlayerCharacters ; begin
73945: LD_INT 0
73947: PPUSH
// result = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) diff ( GetApes ( you ) ^ GetMainPlayerCharacters ) ;
73948: LD_ADDR_VAR 0 1
73952: PUSH
73953: LD_INT 22
73955: PUSH
73956: LD_EXP 2
73960: PUSH
73961: EMPTY
73962: LIST
73963: LIST
73964: PUSH
73965: LD_INT 21
73967: PUSH
73968: LD_INT 1
73970: PUSH
73971: EMPTY
73972: LIST
73973: LIST
73974: PUSH
73975: EMPTY
73976: LIST
73977: LIST
73978: PPUSH
73979: CALL_OW 69
73983: PUSH
73984: LD_EXP 2
73988: PPUSH
73989: CALL 73757 0 1
73993: PUSH
73994: CALL 73841 0 0
73998: ADD
73999: DIFF
74000: ST_TO_ADDR
// end ;
74001: LD_VAR 0 1
74005: RET
// every 0 0$1 do var time , surplus , has_boosted ;
74006: GO 74008
74008: DISABLE
74009: LD_INT 0
74011: PPUSH
74012: PPUSH
74013: PPUSH
// begin has_boosted = false ;
74014: LD_ADDR_VAR 0 3
74018: PUSH
74019: LD_INT 0
74021: ST_TO_ADDR
// time = [ 20 20$0 , 14 14$0 , 11 11$0 ] [ difficulty ] ;
74022: LD_ADDR_VAR 0 1
74026: PUSH
74027: LD_INT 42000
74029: PUSH
74030: LD_INT 29400
74032: PUSH
74033: LD_INT 23100
74035: PUSH
74036: EMPTY
74037: LIST
74038: LIST
74039: LIST
74040: PUSH
74041: LD_OWVAR 67
74045: ARRAY
74046: ST_TO_ADDR
// time = time - time_that_has_passed ;
74047: LD_ADDR_VAR 0 1
74051: PUSH
74052: LD_VAR 0 1
74056: PUSH
74057: LD_EXP 138
74061: MINUS
74062: ST_TO_ADDR
// if time > 0 0$0 then
74063: LD_VAR 0 1
74067: PUSH
74068: LD_INT 0
74070: GREATER
74071: IFFALSE 74083
// begin surplus = 0 0$0 ;
74073: LD_ADDR_VAR 0 2
74077: PUSH
74078: LD_INT 0
74080: ST_TO_ADDR
// end else
74081: GO 74106
// begin surplus = - 1 * time ;
74083: LD_ADDR_VAR 0 2
74087: PUSH
74088: LD_INT 1
74090: NEG
74091: PUSH
74092: LD_VAR 0 1
74096: MUL
74097: ST_TO_ADDR
// time = 0 0$0 ;
74098: LD_ADDR_VAR 0 1
74102: PUSH
74103: LD_INT 0
74105: ST_TO_ADDR
// end ; repeat wait ( 0 0$1 ) ;
74106: LD_INT 35
74108: PPUSH
74109: CALL_OW 67
// if not has_boosted and farmer_defeated then
74113: LD_VAR 0 3
74117: NOT
74118: PUSH
74119: LD_EXP 136
74123: AND
74124: IFFALSE 74148
// begin has_boosted = true ;
74126: LD_ADDR_VAR 0 3
74130: PUSH
74131: LD_INT 1
74133: ST_TO_ADDR
// surplus = surplus + 8 8$0 ;
74134: LD_ADDR_VAR 0 2
74138: PUSH
74139: LD_VAR 0 2
74143: PUSH
74144: LD_INT 16800
74146: PLUS
74147: ST_TO_ADDR
// end ; if surplus > 0 0$0 then
74148: LD_VAR 0 2
74152: PUSH
74153: LD_INT 0
74155: GREATER
74156: IFFALSE 74217
// begin time = time - surplus ;
74158: LD_ADDR_VAR 0 1
74162: PUSH
74163: LD_VAR 0 1
74167: PUSH
74168: LD_VAR 0 2
74172: MINUS
74173: ST_TO_ADDR
// if time > 0 0$0 then
74174: LD_VAR 0 1
74178: PUSH
74179: LD_INT 0
74181: GREATER
74182: IFFALSE 74194
// begin surplus = 0 0$0 ;
74184: LD_ADDR_VAR 0 2
74188: PUSH
74189: LD_INT 0
74191: ST_TO_ADDR
// end else
74192: GO 74217
// begin surplus = - 1 * time ;
74194: LD_ADDR_VAR 0 2
74198: PUSH
74199: LD_INT 1
74201: NEG
74202: PUSH
74203: LD_VAR 0 1
74207: MUL
74208: ST_TO_ADDR
// time = 0 0$0 ;
74209: LD_ADDR_VAR 0 1
74213: PUSH
74214: LD_INT 0
74216: ST_TO_ADDR
// end ; end ; time = time - 0 0$1 ;
74217: LD_ADDR_VAR 0 1
74221: PUSH
74222: LD_VAR 0 1
74226: PUSH
74227: LD_INT 35
74229: MINUS
74230: ST_TO_ADDR
// until time <= 0 0$0 ;
74231: LD_VAR 0 1
74235: PUSH
74236: LD_INT 0
74238: LESSEQUAL
74239: IFFALSE 74106
// repeat time = base_time_features_1 ;
74241: LD_ADDR_VAR 0 1
74245: PUSH
74246: LD_EXP 100
74250: ST_TO_ADDR
// if not has_boosted and farmer_defeated then
74251: LD_VAR 0 3
74255: NOT
74256: PUSH
74257: LD_EXP 136
74261: AND
74262: IFFALSE 74286
// begin has_boosted = true ;
74264: LD_ADDR_VAR 0 3
74268: PUSH
74269: LD_INT 1
74271: ST_TO_ADDR
// surplus = surplus + 8 8$0 ;
74272: LD_ADDR_VAR 0 2
74276: PUSH
74277: LD_VAR 0 2
74281: PUSH
74282: LD_INT 16800
74284: PLUS
74285: ST_TO_ADDR
// end ; if surplus > 0 0$0 then
74286: LD_VAR 0 2
74290: PUSH
74291: LD_INT 0
74293: GREATER
74294: IFFALSE 74355
// begin time = time - surplus ;
74296: LD_ADDR_VAR 0 1
74300: PUSH
74301: LD_VAR 0 1
74305: PUSH
74306: LD_VAR 0 2
74310: MINUS
74311: ST_TO_ADDR
// if time > 0 0$0 then
74312: LD_VAR 0 1
74316: PUSH
74317: LD_INT 0
74319: GREATER
74320: IFFALSE 74332
// begin surplus = 0 0$0 ;
74322: LD_ADDR_VAR 0 2
74326: PUSH
74327: LD_INT 0
74329: ST_TO_ADDR
// end else
74330: GO 74355
// begin surplus = - 1 * time ;
74332: LD_ADDR_VAR 0 2
74336: PUSH
74337: LD_INT 1
74339: NEG
74340: PUSH
74341: LD_VAR 0 1
74345: MUL
74346: ST_TO_ADDR
// time = 0 0$0 ;
74347: LD_ADDR_VAR 0 1
74351: PUSH
74352: LD_INT 0
74354: ST_TO_ADDR
// end ; end ; repeat wait ( 0 0$1 ) ;
74355: LD_INT 35
74357: PPUSH
74358: CALL_OW 67
// time = time - 0 0$1 ;
74362: LD_ADDR_VAR 0 1
74366: PUSH
74367: LD_VAR 0 1
74371: PUSH
74372: LD_INT 35
74374: MINUS
74375: ST_TO_ADDR
// until time <= 0 0$0 or ( not has_boosted and farmer_defeated ) ;
74376: LD_VAR 0 1
74380: PUSH
74381: LD_INT 0
74383: LESSEQUAL
74384: PUSH
74385: LD_VAR 0 3
74389: NOT
74390: PUSH
74391: LD_EXP 136
74395: AND
74396: OR
74397: IFFALSE 74355
// if time <= 0 0$0 then
74399: LD_VAR 0 1
74403: PUSH
74404: LD_INT 0
74406: LESSEQUAL
74407: IFFALSE 74418
// ComputerLvlUp ( 1 ) else
74409: LD_INT 1
74411: PPUSH
74412: CALL 22961 0 1
74416: GO 74440
// surplus = surplus + ( base_time_features_1 - time ) ;
74418: LD_ADDR_VAR 0 2
74422: PUSH
74423: LD_VAR 0 2
74427: PUSH
74428: LD_EXP 100
74432: PUSH
74433: LD_VAR 0 1
74437: MINUS
74438: PLUS
74439: ST_TO_ADDR
// until false ;
74440: LD_INT 0
74442: IFFALSE 74241
// end ;
74444: PPOPN 3
74446: END
// every 0 0$1 do var time , surplus , has_boosted ;
74447: GO 74449
74449: DISABLE
74450: LD_INT 0
74452: PPUSH
74453: PPUSH
74454: PPUSH
// begin has_boosted = false ;
74455: LD_ADDR_VAR 0 3
74459: PUSH
74460: LD_INT 0
74462: ST_TO_ADDR
// surplus = time_that_has_passed ;
74463: LD_ADDR_VAR 0 2
74467: PUSH
74468: LD_EXP 138
74472: ST_TO_ADDR
// repeat time = base_time_features_2 ;
74473: LD_ADDR_VAR 0 1
74477: PUSH
74478: LD_EXP 101
74482: ST_TO_ADDR
// if not has_boosted and farmer_defeated then
74483: LD_VAR 0 3
74487: NOT
74488: PUSH
74489: LD_EXP 136
74493: AND
74494: IFFALSE 74518
// begin has_boosted = true ;
74496: LD_ADDR_VAR 0 3
74500: PUSH
74501: LD_INT 1
74503: ST_TO_ADDR
// surplus = surplus + 8 8$0 ;
74504: LD_ADDR_VAR 0 2
74508: PUSH
74509: LD_VAR 0 2
74513: PUSH
74514: LD_INT 16800
74516: PLUS
74517: ST_TO_ADDR
// end ; if surplus > 0 0$0 then
74518: LD_VAR 0 2
74522: PUSH
74523: LD_INT 0
74525: GREATER
74526: IFFALSE 74587
// begin time = time - surplus ;
74528: LD_ADDR_VAR 0 1
74532: PUSH
74533: LD_VAR 0 1
74537: PUSH
74538: LD_VAR 0 2
74542: MINUS
74543: ST_TO_ADDR
// if time > 0 0$0 then
74544: LD_VAR 0 1
74548: PUSH
74549: LD_INT 0
74551: GREATER
74552: IFFALSE 74564
// begin surplus = 0 0$0 ;
74554: LD_ADDR_VAR 0 2
74558: PUSH
74559: LD_INT 0
74561: ST_TO_ADDR
// end else
74562: GO 74587
// begin surplus = - 1 * time ;
74564: LD_ADDR_VAR 0 2
74568: PUSH
74569: LD_INT 1
74571: NEG
74572: PUSH
74573: LD_VAR 0 1
74577: MUL
74578: ST_TO_ADDR
// time = 0 0$0 ;
74579: LD_ADDR_VAR 0 1
74583: PUSH
74584: LD_INT 0
74586: ST_TO_ADDR
// end ; end ; repeat wait ( 0 0$1 ) ;
74587: LD_INT 35
74589: PPUSH
74590: CALL_OW 67
// time = time - 0 0$1 ;
74594: LD_ADDR_VAR 0 1
74598: PUSH
74599: LD_VAR 0 1
74603: PUSH
74604: LD_INT 35
74606: MINUS
74607: ST_TO_ADDR
// until time <= 0 0$0 or ( not has_boosted and farmer_defeated ) ;
74608: LD_VAR 0 1
74612: PUSH
74613: LD_INT 0
74615: LESSEQUAL
74616: PUSH
74617: LD_VAR 0 3
74621: NOT
74622: PUSH
74623: LD_EXP 136
74627: AND
74628: OR
74629: IFFALSE 74587
// if time <= 0 0$0 then
74631: LD_VAR 0 1
74635: PUSH
74636: LD_INT 0
74638: LESSEQUAL
74639: IFFALSE 74650
// ComputerLvlUp ( 2 ) else
74641: LD_INT 2
74643: PPUSH
74644: CALL 22961 0 1
74648: GO 74672
// surplus = surplus + ( base_time_features_2 - time ) ;
74650: LD_ADDR_VAR 0 2
74654: PUSH
74655: LD_VAR 0 2
74659: PUSH
74660: LD_EXP 101
74664: PUSH
74665: LD_VAR 0 1
74669: MINUS
74670: PLUS
74671: ST_TO_ADDR
// until false ;
74672: LD_INT 0
74674: IFFALSE 74473
// end ;
74676: PPOPN 3
74678: END
// every 0 0$1 + 0 0$0.1 do var start_time ;
74679: GO 74681
74681: DISABLE
74682: LD_INT 0
74684: PPUSH
// begin start_time = tick ;
74685: LD_ADDR_VAR 0 1
74689: PUSH
74690: LD_OWVAR 1
74694: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
74695: LD_INT 18
74697: PPUSH
74698: CALL_OW 67
// if heike_farmer_dialogue_started then
74702: LD_EXP 137
74706: IFFALSE 74710
// exit ;
74708: GO 74780
// until ContactTime ( [ you , farmer_side ] ) < 0 0$1 or tick - start_time >= 0 0$45 ;
74710: LD_EXP 2
74714: PUSH
74715: LD_EXP 6
74719: PUSH
74720: EMPTY
74721: LIST
74722: LIST
74723: PPUSH
74724: CALL_OW 462
74728: PUSH
74729: LD_INT 35
74731: LESS
74732: PUSH
74733: LD_OWVAR 1
74737: PUSH
74738: LD_VAR 0 1
74742: MINUS
74743: PUSH
74744: LD_INT 1575
74746: GREATEREQUAL
74747: OR
74748: IFFALSE 74695
// HeikeFarmerDialogue ( ContactTime ( [ you , farmer_side ] ) < 0 0$1 , false ) ;
74750: LD_EXP 2
74754: PUSH
74755: LD_EXP 6
74759: PUSH
74760: EMPTY
74761: LIST
74762: LIST
74763: PPUSH
74764: CALL_OW 462
74768: PUSH
74769: LD_INT 35
74771: LESS
74772: PPUSH
74773: LD_INT 0
74775: PPUSH
74776: CALL 74783 0 2
// end ;
74780: PPOPN 1
74782: END
// function HeikeFarmerDialogue ( was_seen , give_destroy_russians_objective ) ; var un , i , temp_list ; begin
74783: LD_INT 0
74785: PPUSH
74786: PPUSH
74787: PPUSH
74788: PPUSH
// heike_farmer_dialogue_started = true ;
74789: LD_ADDR_EXP 137
74793: PUSH
74794: LD_INT 1
74796: ST_TO_ADDR
// DialogueOn ;
74797: CALL_OW 6
// if was_seen then
74801: LD_VAR 0 1
74805: IFFALSE 74938
// begin un = 0 ;
74807: LD_ADDR_VAR 0 4
74811: PUSH
74812: LD_INT 0
74814: ST_TO_ADDR
// for i in FilterAllUnits ( [ f_side , farmer_side ] ) do
74815: LD_ADDR_VAR 0 5
74819: PUSH
74820: LD_INT 22
74822: PUSH
74823: LD_EXP 6
74827: PUSH
74828: EMPTY
74829: LIST
74830: LIST
74831: PPUSH
74832: CALL_OW 69
74836: PUSH
74837: FOR_IN
74838: IFFALSE 74869
// if Attacks ( i ) > 0 then
74840: LD_VAR 0 5
74844: PPUSH
74845: CALL_OW 320
74849: PUSH
74850: LD_INT 0
74852: GREATER
74853: IFFALSE 74867
// begin un = i ;
74855: LD_ADDR_VAR 0 4
74859: PUSH
74860: LD_VAR 0 5
74864: ST_TO_ADDR
// break ;
74865: GO 74869
// end ;
74867: GO 74837
74869: POP
74870: POP
// if un > 0 then
74871: LD_VAR 0 4
74875: PUSH
74876: LD_INT 0
74878: GREATER
74879: IFFALSE 74936
// if GetType ( un ) = unit_human and IsInUnit ( un ) > 0 then
74881: LD_VAR 0 4
74885: PPUSH
74886: CALL_OW 247
74890: PUSH
74891: LD_INT 1
74893: EQUAL
74894: PUSH
74895: LD_VAR 0 4
74899: PPUSH
74900: CALL_OW 310
74904: PUSH
74905: LD_INT 0
74907: GREATER
74908: AND
74909: IFFALSE 74927
// CenterOnUnits ( IsInUnit ( un ) ) else
74911: LD_VAR 0 4
74915: PPUSH
74916: CALL_OW 310
74920: PPUSH
74921: CALL_OW 85
74925: GO 74936
// CenterOnUnits ( un ) ;
74927: LD_VAR 0 4
74931: PPUSH
74932: CALL_OW 85
// end else
74936: GO 74950
// begin SayRadio ( Farmer , D5-Fa-1a ) ;
74938: LD_EXP 21
74942: PPUSH
74943: LD_STRING D5-Fa-1a
74945: PPUSH
74946: CALL_OW 94
// end ; SayRadio ( Farmer , D5-Fa-2 ) ;
74950: LD_EXP 21
74954: PPUSH
74955: LD_STRING D5-Fa-2
74957: PPUSH
74958: CALL_OW 94
// Say ( Heike , D5-H-1 ) ;
74962: LD_EXP 9
74966: PPUSH
74967: LD_STRING D5-H-1
74969: PPUSH
74970: CALL_OW 88
// SayRadio ( Farmer , D5-Fa-3 ) ;
74974: LD_EXP 21
74978: PPUSH
74979: LD_STRING D5-Fa-3
74981: PPUSH
74982: CALL_OW 94
// Say ( Heike , D5-H-2 ) ;
74986: LD_EXP 9
74990: PPUSH
74991: LD_STRING D5-H-2
74993: PPUSH
74994: CALL_OW 88
// SayRadio ( Farmer , D5-Fa-4 ) ;
74998: LD_EXP 21
75002: PPUSH
75003: LD_STRING D5-Fa-4
75005: PPUSH
75006: CALL_OW 94
// DialogueOff ;
75010: CALL_OW 7
// repeat wait ( 0 0$1 ) ;
75014: LD_INT 35
75016: PPUSH
75017: CALL_OW 67
// until ContactTime ( you ) >= 0 0$6 ;
75021: LD_EXP 2
75025: PPUSH
75026: CALL_OW 462
75030: PUSH
75031: LD_INT 210
75033: GREATEREQUAL
75034: IFFALSE 75014
// heike_farmer_dialogue_done = true ;
75036: LD_ADDR_EXP 125
75040: PUSH
75041: LD_INT 1
75043: ST_TO_ADDR
// if not hiding_player_units_found then
75044: LD_EXP 123
75048: NOT
75049: IFFALSE 75065
// HeikeFarmerDialogueEvaluation ( was_seen , give_destroy_russians_objective ) ;
75051: LD_VAR 0 1
75055: PPUSH
75056: LD_VAR 0 2
75060: PPUSH
75061: CALL 75070 0 2
// end ;
75065: LD_VAR 0 3
75069: RET
// function HeikeFarmerDialogueEvaluation ( was_seen , give_destroy_russians_objective ) ; var un , i , temp_list ; begin
75070: LD_INT 0
75072: PPUSH
75073: PPUSH
75074: PPUSH
75075: PPUSH
// temp_list = UnitFilter ( ( GetMainPlayerCharacters ^ GetNonmainPlayerCharacters ) diff Heike , [ f_ok ] ) ;
75076: LD_ADDR_VAR 0 6
75080: PUSH
75081: CALL 73841 0 0
75085: PUSH
75086: CALL 73945 0 0
75090: ADD
75091: PUSH
75092: LD_EXP 9
75096: DIFF
75097: PPUSH
75098: LD_INT 50
75100: PUSH
75101: EMPTY
75102: LIST
75103: PPUSH
75104: CALL_OW 72
75108: ST_TO_ADDR
// if temp_list > 0 then
75109: LD_VAR 0 6
75113: PUSH
75114: LD_INT 0
75116: GREATER
75117: IFFALSE 75843
// begin DialogueOn ;
75119: CALL_OW 6
// un = temp_list [ Rand ( 1 , temp_list ) ] ;
75123: LD_ADDR_VAR 0 4
75127: PUSH
75128: LD_VAR 0 6
75132: PUSH
75133: LD_INT 1
75135: PPUSH
75136: LD_VAR 0 6
75140: PPUSH
75141: CALL_OW 12
75145: ARRAY
75146: ST_TO_ADDR
// case un of Olaf :
75147: LD_VAR 0 4
75151: PUSH
75152: LD_EXP 10
75156: DOUBLE
75157: EQUAL
75158: IFTRUE 75162
75160: GO 75177
75162: POP
// Say ( un , D5-Ola-1 ) ; Sonya :
75163: LD_VAR 0 4
75167: PPUSH
75168: LD_STRING D5-Ola-1
75170: PPUSH
75171: CALL_OW 88
75175: GO 75469
75177: LD_EXP 11
75181: DOUBLE
75182: EQUAL
75183: IFTRUE 75187
75185: GO 75202
75187: POP
// Say ( un , D5-So-1 ) ; Oswald :
75188: LD_VAR 0 4
75192: PPUSH
75193: LD_STRING D5-So-1
75195: PPUSH
75196: CALL_OW 88
75200: GO 75469
75202: LD_EXP 12
75206: DOUBLE
75207: EQUAL
75208: IFTRUE 75212
75210: GO 75227
75212: POP
// Say ( un , D5-Os-1 ) ; Ralph :
75213: LD_VAR 0 4
75217: PPUSH
75218: LD_STRING D5-Os-1
75220: PPUSH
75221: CALL_OW 88
75225: GO 75469
75227: LD_EXP 13
75231: DOUBLE
75232: EQUAL
75233: IFTRUE 75237
75235: GO 75252
75237: POP
// Say ( un , D5-Ra-1 ) ; Kowalski :
75238: LD_VAR 0 4
75242: PPUSH
75243: LD_STRING D5-Ra-1
75245: PPUSH
75246: CALL_OW 88
75250: GO 75469
75252: LD_EXP 14
75256: DOUBLE
75257: EQUAL
75258: IFTRUE 75262
75260: GO 75277
75262: POP
// Say ( un , D5-Ko-1 ) ; Suze :
75263: LD_VAR 0 4
75267: PPUSH
75268: LD_STRING D5-Ko-1
75270: PPUSH
75271: CALL_OW 88
75275: GO 75469
75277: LD_EXP 15
75281: DOUBLE
75282: EQUAL
75283: IFTRUE 75287
75285: GO 75302
75287: POP
// Say ( un , D5-Su-1 ) ; MarkB :
75288: LD_VAR 0 4
75292: PPUSH
75293: LD_STRING D5-Su-1
75295: PPUSH
75296: CALL_OW 88
75300: GO 75469
75302: LD_EXP 16
75306: DOUBLE
75307: EQUAL
75308: IFTRUE 75312
75310: GO 75327
75312: POP
// Say ( un , D5-Mark-1 ) ; Kurt :
75313: LD_VAR 0 4
75317: PPUSH
75318: LD_STRING D5-Mark-1
75320: PPUSH
75321: CALL_OW 88
75325: GO 75469
75327: LD_EXP 17
75331: DOUBLE
75332: EQUAL
75333: IFTRUE 75337
75335: GO 75352
75337: POP
// Say ( un , D5-Ku-1 ) ; Martin :
75338: LD_VAR 0 4
75342: PPUSH
75343: LD_STRING D5-Ku-1
75345: PPUSH
75346: CALL_OW 88
75350: GO 75469
75352: LD_EXP 18
75356: DOUBLE
75357: EQUAL
75358: IFTRUE 75362
75360: GO 75377
75362: POP
// Say ( un , D5-Mart-1 ) ; Louis :
75363: LD_VAR 0 4
75367: PPUSH
75368: LD_STRING D5-Mart-1
75370: PPUSH
75371: CALL_OW 88
75375: GO 75469
75377: LD_EXP 19
75381: DOUBLE
75382: EQUAL
75383: IFTRUE 75387
75385: GO 75402
75387: POP
// Say ( un , D5-Lo-1 ) ; Khattam :
75388: LD_VAR 0 4
75392: PPUSH
75393: LD_STRING D5-Lo-1
75395: PPUSH
75396: CALL_OW 88
75400: GO 75469
75402: LD_EXP 20
75406: DOUBLE
75407: EQUAL
75408: IFTRUE 75412
75410: GO 75427
75412: POP
// Say ( un , D5-Kh-1 ) ; else
75413: LD_VAR 0 4
75417: PPUSH
75418: LD_STRING D5-Kh-1
75420: PPUSH
75421: CALL_OW 88
75425: GO 75469
75427: POP
// if GetSex ( un ) = sex_male then
75428: LD_VAR 0 4
75432: PPUSH
75433: CALL_OW 258
75437: PUSH
75438: LD_INT 1
75440: EQUAL
75441: IFFALSE 75457
// Say ( un , D5-SomeM-1 ) else
75443: LD_VAR 0 4
75447: PPUSH
75448: LD_STRING D5-SomeM-1
75450: PPUSH
75451: CALL_OW 88
75455: GO 75469
// Say ( un , D5-SomeF-1 ) ; end ;
75457: LD_VAR 0 4
75461: PPUSH
75462: LD_STRING D5-SomeF-1
75464: PPUSH
75465: CALL_OW 88
// Say ( Heike , D5-H-3 ) ;
75469: LD_EXP 9
75473: PPUSH
75474: LD_STRING D5-H-3
75476: PPUSH
75477: CALL_OW 88
// un = temp_list [ Rand ( 1 , temp_list ) ] ;
75481: LD_ADDR_VAR 0 4
75485: PUSH
75486: LD_VAR 0 6
75490: PUSH
75491: LD_INT 1
75493: PPUSH
75494: LD_VAR 0 6
75498: PPUSH
75499: CALL_OW 12
75503: ARRAY
75504: ST_TO_ADDR
// case un of Olaf :
75505: LD_VAR 0 4
75509: PUSH
75510: LD_EXP 10
75514: DOUBLE
75515: EQUAL
75516: IFTRUE 75520
75518: GO 75535
75520: POP
// Say ( un , D5-Ola-2 ) ; Sonya :
75521: LD_VAR 0 4
75525: PPUSH
75526: LD_STRING D5-Ola-2
75528: PPUSH
75529: CALL_OW 88
75533: GO 75827
75535: LD_EXP 11
75539: DOUBLE
75540: EQUAL
75541: IFTRUE 75545
75543: GO 75560
75545: POP
// Say ( un , D5-So-2 ) ; Oswald :
75546: LD_VAR 0 4
75550: PPUSH
75551: LD_STRING D5-So-2
75553: PPUSH
75554: CALL_OW 88
75558: GO 75827
75560: LD_EXP 12
75564: DOUBLE
75565: EQUAL
75566: IFTRUE 75570
75568: GO 75585
75570: POP
// Say ( un , D5-Os-2 ) ; Ralph :
75571: LD_VAR 0 4
75575: PPUSH
75576: LD_STRING D5-Os-2
75578: PPUSH
75579: CALL_OW 88
75583: GO 75827
75585: LD_EXP 13
75589: DOUBLE
75590: EQUAL
75591: IFTRUE 75595
75593: GO 75610
75595: POP
// Say ( un , D5-Ra-2 ) ; Kowalski :
75596: LD_VAR 0 4
75600: PPUSH
75601: LD_STRING D5-Ra-2
75603: PPUSH
75604: CALL_OW 88
75608: GO 75827
75610: LD_EXP 14
75614: DOUBLE
75615: EQUAL
75616: IFTRUE 75620
75618: GO 75635
75620: POP
// Say ( un , D5-Ko-2 ) ; Suze :
75621: LD_VAR 0 4
75625: PPUSH
75626: LD_STRING D5-Ko-2
75628: PPUSH
75629: CALL_OW 88
75633: GO 75827
75635: LD_EXP 15
75639: DOUBLE
75640: EQUAL
75641: IFTRUE 75645
75643: GO 75660
75645: POP
// Say ( un , D5-Su-2 ) ; MarkB :
75646: LD_VAR 0 4
75650: PPUSH
75651: LD_STRING D5-Su-2
75653: PPUSH
75654: CALL_OW 88
75658: GO 75827
75660: LD_EXP 16
75664: DOUBLE
75665: EQUAL
75666: IFTRUE 75670
75668: GO 75685
75670: POP
// Say ( un , D5-Mark-2 ) ; Kurt :
75671: LD_VAR 0 4
75675: PPUSH
75676: LD_STRING D5-Mark-2
75678: PPUSH
75679: CALL_OW 88
75683: GO 75827
75685: LD_EXP 17
75689: DOUBLE
75690: EQUAL
75691: IFTRUE 75695
75693: GO 75710
75695: POP
// Say ( un , D5-Ku-2 ) ; Martin :
75696: LD_VAR 0 4
75700: PPUSH
75701: LD_STRING D5-Ku-2
75703: PPUSH
75704: CALL_OW 88
75708: GO 75827
75710: LD_EXP 18
75714: DOUBLE
75715: EQUAL
75716: IFTRUE 75720
75718: GO 75735
75720: POP
// Say ( un , D5-Mart-2 ) ; Louis :
75721: LD_VAR 0 4
75725: PPUSH
75726: LD_STRING D5-Mart-2
75728: PPUSH
75729: CALL_OW 88
75733: GO 75827
75735: LD_EXP 19
75739: DOUBLE
75740: EQUAL
75741: IFTRUE 75745
75743: GO 75760
75745: POP
// Say ( un , D5-Lo-2 ) ; Khattam :
75746: LD_VAR 0 4
75750: PPUSH
75751: LD_STRING D5-Lo-2
75753: PPUSH
75754: CALL_OW 88
75758: GO 75827
75760: LD_EXP 20
75764: DOUBLE
75765: EQUAL
75766: IFTRUE 75770
75768: GO 75785
75770: POP
// Say ( un , D5-Kh-2 ) ; else
75771: LD_VAR 0 4
75775: PPUSH
75776: LD_STRING D5-Kh-2
75778: PPUSH
75779: CALL_OW 88
75783: GO 75827
75785: POP
// if GetSex ( un ) = sex_male then
75786: LD_VAR 0 4
75790: PPUSH
75791: CALL_OW 258
75795: PUSH
75796: LD_INT 1
75798: EQUAL
75799: IFFALSE 75815
// Say ( un , D5-SomeM-2 ) else
75801: LD_VAR 0 4
75805: PPUSH
75806: LD_STRING D5-SomeM-2
75808: PPUSH
75809: CALL_OW 88
75813: GO 75827
// Say ( un , D5-SomeF-2 ) ; end ;
75815: LD_VAR 0 4
75819: PPUSH
75820: LD_STRING D5-SomeF-2
75822: PPUSH
75823: CALL_OW 88
// Say ( Heike , D5-H-4 ) ;
75827: LD_EXP 9
75831: PPUSH
75832: LD_STRING D5-H-4
75834: PPUSH
75835: CALL_OW 88
// DialogueOff ;
75839: CALL_OW 7
// end ; wait ( 0 0$0.2 ) ;
75843: LD_INT 7
75845: PPUSH
75846: CALL_OW 67
// if not hiding_player_units_found then
75850: LD_EXP 123
75854: NOT
75855: IFFALSE 75887
// if give_destroy_russians_objective then
75857: LD_VAR 0 2
75861: IFFALSE 75880
// begin rus_obj_given_before_survivors_found = true ;
75863: LD_ADDR_EXP 124
75867: PUSH
75868: LD_INT 1
75870: ST_TO_ADDR
// ChangeMissionObjectives ( M3AndDestroyRus ) ;
75871: LD_STRING M3AndDestroyRus
75873: PPUSH
75874: CALL_OW 337
// end else
75878: GO 75887
// ChangeMissionObjectives ( M3 ) ;
75880: LD_STRING M3
75882: PPUSH
75883: CALL_OW 337
// end ;
75887: LD_VAR 0 3
75891: RET
// every 0 0$1 + 0 0$0.3 do var ape_list , i , dialogue_played , temp_list , un , temp_list_2 , temp_unit ;
75892: GO 75894
75894: DISABLE
75895: LD_INT 0
75897: PPUSH
75898: PPUSH
75899: PPUSH
75900: PPUSH
75901: PPUSH
75902: PPUSH
75903: PPUSH
// begin repeat wait ( 0 0$1 ) ;
75904: LD_INT 35
75906: PPUSH
75907: CALL_OW 67
// until heike_farmer_dialogue_done ;
75911: LD_EXP 125
75915: IFFALSE 75904
// wait ( Rand ( 0 0$30 , 1 1$0 ) ) ;
75917: LD_INT 1050
75919: PPUSH
75920: LD_INT 2100
75922: PPUSH
75923: CALL_OW 12
75927: PPUSH
75928: CALL_OW 67
// ape_list = CreateApemenWithClass ( difficulty , class_apeman_kamikaze , farmer_side ) ;
75932: LD_ADDR_VAR 0 1
75936: PUSH
75937: LD_OWVAR 67
75941: PPUSH
75942: LD_INT 17
75944: PPUSH
75945: LD_EXP 6
75949: PPUSH
75950: CALL 13641 0 3
75954: ST_TO_ADDR
// for i in ape_list do
75955: LD_ADDR_VAR 0 2
75959: PUSH
75960: LD_VAR 0 1
75964: PUSH
75965: FOR_IN
75966: IFFALSE 76023
// begin SetAttr ( i , attr_speed , [ 10 , 11 , 12 ] [ difficulty ] ) ;
75968: LD_VAR 0 2
75972: PPUSH
75973: LD_INT 2
75975: PPUSH
75976: LD_INT 10
75978: PUSH
75979: LD_INT 11
75981: PUSH
75982: LD_INT 12
75984: PUSH
75985: EMPTY
75986: LIST
75987: LIST
75988: LIST
75989: PUSH
75990: LD_OWVAR 67
75994: ARRAY
75995: PPUSH
75996: CALL_OW 239
// PlaceUnitXYR ( i , 77 , 21 , 3 , false ) ;
76000: LD_VAR 0 2
76004: PPUSH
76005: LD_INT 77
76007: PPUSH
76008: LD_INT 21
76010: PPUSH
76011: LD_INT 3
76013: PPUSH
76014: LD_INT 0
76016: PPUSH
76017: CALL_OW 50
// end ;
76021: GO 75965
76023: POP
76024: POP
// dialogue_played = false ;
76025: LD_ADDR_VAR 0 3
76029: PUSH
76030: LD_INT 0
76032: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
76033: LD_INT 35
76035: PPUSH
76036: CALL_OW 67
// ape_list = UnitFilter ( ape_list , [ f_alive ] ) ;
76040: LD_ADDR_VAR 0 1
76044: PUSH
76045: LD_VAR 0 1
76049: PPUSH
76050: LD_INT 51
76052: PUSH
76053: EMPTY
76054: LIST
76055: PPUSH
76056: CALL_OW 72
76060: ST_TO_ADDR
// if ape_list = 0 then
76061: LD_VAR 0 1
76065: PUSH
76066: LD_INT 0
76068: EQUAL
76069: IFFALSE 76073
// exit ;
76071: GO 76860
// if not dialogue_played then
76073: LD_VAR 0 3
76077: NOT
76078: IFFALSE 76543
// begin temp_list_2 = UnitFilter ( ape_list , [ f_see , you ] ) ;
76080: LD_ADDR_VAR 0 6
76084: PUSH
76085: LD_VAR 0 1
76089: PPUSH
76090: LD_INT 101
76092: PUSH
76093: LD_EXP 2
76097: PUSH
76098: EMPTY
76099: LIST
76100: LIST
76101: PPUSH
76102: CALL_OW 72
76106: ST_TO_ADDR
// if temp_list_2 > 0 then
76107: LD_VAR 0 6
76111: PUSH
76112: LD_INT 0
76114: GREATER
76115: IFFALSE 76543
// begin temp_list = UnitFilter ( ( GetMainPlayerCharacters ^ GetNonmainPlayerCharacters ) diff Heike , [ f_ok ] ) ;
76117: LD_ADDR_VAR 0 4
76121: PUSH
76122: CALL 73841 0 0
76126: PUSH
76127: CALL 73945 0 0
76131: ADD
76132: PUSH
76133: LD_EXP 9
76137: DIFF
76138: PPUSH
76139: LD_INT 50
76141: PUSH
76142: EMPTY
76143: LIST
76144: PPUSH
76145: CALL_OW 72
76149: ST_TO_ADDR
// if temp_list > 0 then
76150: LD_VAR 0 4
76154: PUSH
76155: LD_INT 0
76157: GREATER
76158: IFFALSE 76543
// begin dialogue_played = true ;
76160: LD_ADDR_VAR 0 3
76164: PUSH
76165: LD_INT 1
76167: ST_TO_ADDR
// CenterOnUnits ( temp_list_2 ) ;
76168: LD_VAR 0 6
76172: PPUSH
76173: CALL_OW 85
// DialogueOn ;
76177: CALL_OW 6
// un = temp_list [ Rand ( 1 , temp_list ) ] ;
76181: LD_ADDR_VAR 0 5
76185: PUSH
76186: LD_VAR 0 4
76190: PUSH
76191: LD_INT 1
76193: PPUSH
76194: LD_VAR 0 4
76198: PPUSH
76199: CALL_OW 12
76203: ARRAY
76204: ST_TO_ADDR
// case un of Olaf :
76205: LD_VAR 0 5
76209: PUSH
76210: LD_EXP 10
76214: DOUBLE
76215: EQUAL
76216: IFTRUE 76220
76218: GO 76235
76220: POP
// Say ( un , D8-Ola-1 ) ; Sonya :
76221: LD_VAR 0 5
76225: PPUSH
76226: LD_STRING D8-Ola-1
76228: PPUSH
76229: CALL_OW 88
76233: GO 76527
76235: LD_EXP 11
76239: DOUBLE
76240: EQUAL
76241: IFTRUE 76245
76243: GO 76260
76245: POP
// Say ( un , D8-So-1 ) ; Oswald :
76246: LD_VAR 0 5
76250: PPUSH
76251: LD_STRING D8-So-1
76253: PPUSH
76254: CALL_OW 88
76258: GO 76527
76260: LD_EXP 12
76264: DOUBLE
76265: EQUAL
76266: IFTRUE 76270
76268: GO 76285
76270: POP
// Say ( un , D8-Os-1 ) ; Ralph :
76271: LD_VAR 0 5
76275: PPUSH
76276: LD_STRING D8-Os-1
76278: PPUSH
76279: CALL_OW 88
76283: GO 76527
76285: LD_EXP 13
76289: DOUBLE
76290: EQUAL
76291: IFTRUE 76295
76293: GO 76310
76295: POP
// Say ( un , D8-Ra-1 ) ; Kowalski :
76296: LD_VAR 0 5
76300: PPUSH
76301: LD_STRING D8-Ra-1
76303: PPUSH
76304: CALL_OW 88
76308: GO 76527
76310: LD_EXP 14
76314: DOUBLE
76315: EQUAL
76316: IFTRUE 76320
76318: GO 76335
76320: POP
// Say ( un , D8-Ko-1 ) ; Suze :
76321: LD_VAR 0 5
76325: PPUSH
76326: LD_STRING D8-Ko-1
76328: PPUSH
76329: CALL_OW 88
76333: GO 76527
76335: LD_EXP 15
76339: DOUBLE
76340: EQUAL
76341: IFTRUE 76345
76343: GO 76360
76345: POP
// Say ( un , D8-Su-1 ) ; MarkB :
76346: LD_VAR 0 5
76350: PPUSH
76351: LD_STRING D8-Su-1
76353: PPUSH
76354: CALL_OW 88
76358: GO 76527
76360: LD_EXP 16
76364: DOUBLE
76365: EQUAL
76366: IFTRUE 76370
76368: GO 76385
76370: POP
// Say ( un , D8-Mark-1 ) ; Kurt :
76371: LD_VAR 0 5
76375: PPUSH
76376: LD_STRING D8-Mark-1
76378: PPUSH
76379: CALL_OW 88
76383: GO 76527
76385: LD_EXP 17
76389: DOUBLE
76390: EQUAL
76391: IFTRUE 76395
76393: GO 76410
76395: POP
// Say ( un , D8-Ku-1 ) ; Martin :
76396: LD_VAR 0 5
76400: PPUSH
76401: LD_STRING D8-Ku-1
76403: PPUSH
76404: CALL_OW 88
76408: GO 76527
76410: LD_EXP 18
76414: DOUBLE
76415: EQUAL
76416: IFTRUE 76420
76418: GO 76435
76420: POP
// Say ( un , D8-Mart-1 ) ; Louis :
76421: LD_VAR 0 5
76425: PPUSH
76426: LD_STRING D8-Mart-1
76428: PPUSH
76429: CALL_OW 88
76433: GO 76527
76435: LD_EXP 19
76439: DOUBLE
76440: EQUAL
76441: IFTRUE 76445
76443: GO 76460
76445: POP
// Say ( un , D8-Lo-1 ) ; Khattam :
76446: LD_VAR 0 5
76450: PPUSH
76451: LD_STRING D8-Lo-1
76453: PPUSH
76454: CALL_OW 88
76458: GO 76527
76460: LD_EXP 20
76464: DOUBLE
76465: EQUAL
76466: IFTRUE 76470
76468: GO 76485
76470: POP
// Say ( un , D8-Kh-1 ) ; else
76471: LD_VAR 0 5
76475: PPUSH
76476: LD_STRING D8-Kh-1
76478: PPUSH
76479: CALL_OW 88
76483: GO 76527
76485: POP
// if GetSex ( un ) = sex_male then
76486: LD_VAR 0 5
76490: PPUSH
76491: CALL_OW 258
76495: PUSH
76496: LD_INT 1
76498: EQUAL
76499: IFFALSE 76515
// Say ( un , D8-SomeM-1 ) else
76501: LD_VAR 0 5
76505: PPUSH
76506: LD_STRING D8-SomeM-1
76508: PPUSH
76509: CALL_OW 88
76513: GO 76527
// Say ( un , D8-SomeF-1 ) ; end ;
76515: LD_VAR 0 5
76519: PPUSH
76520: LD_STRING D8-SomeF-1
76522: PPUSH
76523: CALL_OW 88
// Say ( Heike , D8-H-1 ) ;
76527: LD_EXP 9
76531: PPUSH
76532: LD_STRING D8-H-1
76534: PPUSH
76535: CALL_OW 88
// DialogueOff ;
76539: CALL_OW 7
// end ; end ; end ; for i in ape_list do
76543: LD_ADDR_VAR 0 2
76547: PUSH
76548: LD_VAR 0 1
76552: PUSH
76553: FOR_IN
76554: IFFALSE 76854
// begin temp_list = FilterAllUnits ( [ [ f_enemy , farmer_side ] , [ f_type , unit_human ] , [ f_dist , i , 14 ] , [ f_see , farmer_side ] ] ) ;
76556: LD_ADDR_VAR 0 4
76560: PUSH
76561: LD_INT 81
76563: PUSH
76564: LD_EXP 6
76568: PUSH
76569: EMPTY
76570: LIST
76571: LIST
76572: PUSH
76573: LD_INT 21
76575: PUSH
76576: LD_INT 1
76578: PUSH
76579: EMPTY
76580: LIST
76581: LIST
76582: PUSH
76583: LD_INT 91
76585: PUSH
76586: LD_VAR 0 2
76590: PUSH
76591: LD_INT 14
76593: PUSH
76594: EMPTY
76595: LIST
76596: LIST
76597: LIST
76598: PUSH
76599: LD_INT 101
76601: PUSH
76602: LD_EXP 6
76606: PUSH
76607: EMPTY
76608: LIST
76609: LIST
76610: PUSH
76611: EMPTY
76612: LIST
76613: LIST
76614: LIST
76615: LIST
76616: PPUSH
76617: CALL_OW 69
76621: ST_TO_ADDR
// if temp_list > 0 then
76622: LD_VAR 0 4
76626: PUSH
76627: LD_INT 0
76629: GREATER
76630: IFFALSE 76668
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
76632: LD_ADDR_VAR 0 7
76636: PUSH
76637: LD_VAR 0 4
76641: PPUSH
76642: LD_VAR 0 2
76646: PPUSH
76647: CALL_OW 75
76651: ST_TO_ADDR
// ComAttackUnit ( i , temp_unit ) ;
76652: LD_VAR 0 2
76656: PPUSH
76657: LD_VAR 0 7
76661: PPUSH
76662: CALL_OW 115
// end else
76666: GO 76852
// begin temp_list = FindNonhumansNearUnit ( farmer_side , i , 20 , true ) ;
76668: LD_ADDR_VAR 0 4
76672: PUSH
76673: LD_EXP 6
76677: PPUSH
76678: LD_VAR 0 2
76682: PPUSH
76683: LD_INT 20
76685: PPUSH
76686: LD_INT 1
76688: PPUSH
76689: CALL 69772 0 4
76693: ST_TO_ADDR
// if temp_list > 0 then
76694: LD_VAR 0 4
76698: PUSH
76699: LD_INT 0
76701: GREATER
76702: IFFALSE 76740
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
76704: LD_ADDR_VAR 0 7
76708: PUSH
76709: LD_VAR 0 4
76713: PPUSH
76714: LD_VAR 0 2
76718: PPUSH
76719: CALL_OW 75
76723: ST_TO_ADDR
// ComAttackUnit ( i , temp_unit ) ;
76724: LD_VAR 0 2
76728: PPUSH
76729: LD_VAR 0 7
76733: PPUSH
76734: CALL_OW 115
// end else
76738: GO 76852
// begin temp_list = FindNonhumansNearUnit ( farmer_side , i , 20 , false ) ;
76740: LD_ADDR_VAR 0 4
76744: PUSH
76745: LD_EXP 6
76749: PPUSH
76750: LD_VAR 0 2
76754: PPUSH
76755: LD_INT 20
76757: PPUSH
76758: LD_INT 0
76760: PPUSH
76761: CALL 69772 0 4
76765: ST_TO_ADDR
// if temp_list > 0 then
76766: LD_VAR 0 4
76770: PUSH
76771: LD_INT 0
76773: GREATER
76774: IFFALSE 76812
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
76776: LD_ADDR_VAR 0 7
76780: PUSH
76781: LD_VAR 0 4
76785: PPUSH
76786: LD_VAR 0 2
76790: PPUSH
76791: CALL_OW 75
76795: ST_TO_ADDR
// ComAttackUnit ( i , temp_unit ) ;
76796: LD_VAR 0 2
76800: PPUSH
76801: LD_VAR 0 7
76805: PPUSH
76806: CALL_OW 115
// end else
76810: GO 76852
// if IsLive ( Heike ) then
76812: LD_EXP 9
76816: PPUSH
76817: CALL_OW 300
76821: IFFALSE 76852
// ComMoveXY ( i , GetX ( Heike ) , GetY ( Heike ) ) ;
76823: LD_VAR 0 2
76827: PPUSH
76828: LD_EXP 9
76832: PPUSH
76833: CALL_OW 250
76837: PPUSH
76838: LD_EXP 9
76842: PPUSH
76843: CALL_OW 251
76847: PPUSH
76848: CALL_OW 111
// end ; end ; end ;
76852: GO 76553
76854: POP
76855: POP
// until false ;
76856: LD_INT 0
76858: IFFALSE 76033
// end ;
76860: PPOPN 7
76862: END
// every 0 0$1 + 0 0$0.1 do
76863: GO 76865
76865: DISABLE
// begin repeat wait ( 0 0$0.5 ) ;
76866: LD_INT 18
76868: PPUSH
76869: CALL_OW 67
// until ContactTime ( [ you , russians ] ) < 0 0$1 ;
76873: LD_EXP 2
76877: PUSH
76878: LD_EXP 3
76882: PUSH
76883: EMPTY
76884: LIST
76885: LIST
76886: PPUSH
76887: CALL_OW 462
76891: PUSH
76892: LD_INT 35
76894: LESS
76895: IFFALSE 76866
// if IsOk ( Kozlov ) then
76897: LD_EXP 24
76901: PPUSH
76902: CALL_OW 302
76906: IFFALSE 77015
// begin DialogueOn ;
76908: CALL_OW 6
// SayRadio ( Kozlov , D6-Ko-1 ) ;
76912: LD_EXP 24
76916: PPUSH
76917: LD_STRING D6-Ko-1
76919: PPUSH
76920: CALL_OW 94
// if IsOk ( Farmer ) then
76924: LD_EXP 21
76928: PPUSH
76929: CALL_OW 302
76933: IFFALSE 76973
// begin SayRadio ( Farmer , D6-Fa-1 ) ;
76935: LD_EXP 21
76939: PPUSH
76940: LD_STRING D6-Fa-1
76942: PPUSH
76943: CALL_OW 94
// SayRadio ( Kozlov , D6-Ko-2 ) ;
76947: LD_EXP 24
76951: PPUSH
76952: LD_STRING D6-Ko-2
76954: PPUSH
76955: CALL_OW 94
// SayRadio ( Farmer , D6-Fa-2 ) ;
76959: LD_EXP 21
76963: PPUSH
76964: LD_STRING D6-Fa-2
76966: PPUSH
76967: CALL_OW 94
// end else
76971: GO 76992
// begin dwait ( 0 0$1.5 ) ;
76973: LD_INT 52
76975: PPUSH
76976: CALL_OW 68
// SayRadio ( Kozlov , D6-Ko-2b ) ;
76980: LD_EXP 24
76984: PPUSH
76985: LD_STRING D6-Ko-2b
76987: PPUSH
76988: CALL_OW 94
// end ; if not hiding_player_units_found then
76992: LD_EXP 123
76996: NOT
76997: IFFALSE 77011
// begin Say ( Heike , D6-H-1 ) ;
76999: LD_EXP 9
77003: PPUSH
77004: LD_STRING D6-H-1
77006: PPUSH
77007: CALL_OW 88
// end ; DialogueOff ;
77011: CALL_OW 7
// end ; if not heike_farmer_dialogue_started then
77015: LD_EXP 137
77019: NOT
77020: IFFALSE 77037
// HeikeFarmerDialogue ( false , not hiding_player_units_found ) else
77022: LD_INT 0
77024: PPUSH
77025: LD_EXP 123
77029: NOT
77030: PPUSH
77031: CALL 74783 0 2
77035: GO 77066
// if not hiding_player_units_found then
77037: LD_EXP 123
77041: NOT
77042: IFFALSE 77066
// begin rus_obj_given_before_survivors_found = true ;
77044: LD_ADDR_EXP 124
77048: PUSH
77049: LD_INT 1
77051: ST_TO_ADDR
// wait ( 0 0$0.2 ) ;
77052: LD_INT 7
77054: PPUSH
77055: CALL_OW 67
// ChangeMissionObjectives ( MDestroyRussians ) ;
77059: LD_STRING MDestroyRussians
77061: PPUSH
77062: CALL_OW 337
// end ; wait ( 10 10$0 ) ;
77066: LD_INT 21000
77068: PPUSH
77069: CALL_OW 67
// repeat wait ( 0 0$0.5 ) ;
77073: LD_INT 18
77075: PPUSH
77076: CALL_OW 67
// until ContactTime ( [ you , russians ] ) < 0 0$1 ;
77080: LD_EXP 2
77084: PUSH
77085: LD_EXP 3
77089: PUSH
77090: EMPTY
77091: LIST
77092: LIST
77093: PPUSH
77094: CALL_OW 462
77098: PUSH
77099: LD_INT 35
77101: LESS
77102: IFFALSE 77073
// if IsOk ( Farmer ) and IsOk ( Kozlov ) and not kozlov_captured and not kozlov_has_teleported then
77104: LD_EXP 21
77108: PPUSH
77109: CALL_OW 302
77113: PUSH
77114: LD_EXP 24
77118: PPUSH
77119: CALL_OW 302
77123: AND
77124: PUSH
77125: LD_EXP 126
77129: NOT
77130: AND
77131: PUSH
77132: LD_EXP 127
77136: NOT
77137: AND
77138: IFFALSE 77196
// begin DialogueOn ;
77140: CALL_OW 6
// SayRadio ( Kozlov , D9-Ko-1 ) ;
77144: LD_EXP 24
77148: PPUSH
77149: LD_STRING D9-Ko-1
77151: PPUSH
77152: CALL_OW 94
// SayRadio ( Farmer , D9-Fa-1 ) ;
77156: LD_EXP 21
77160: PPUSH
77161: LD_STRING D9-Fa-1
77163: PPUSH
77164: CALL_OW 94
// SayRadio ( Kozlov , D9-Ko-2 ) ;
77168: LD_EXP 24
77172: PPUSH
77173: LD_STRING D9-Ko-2
77175: PPUSH
77176: CALL_OW 94
// SayRadio ( Farmer , D9-Fa-2 ) ;
77180: LD_EXP 21
77184: PPUSH
77185: LD_STRING D9-Fa-2
77187: PPUSH
77188: CALL_OW 94
// DialogueOff ;
77192: CALL_OW 7
// end ; end ;
77196: END
// every 0 0$1 + 0 0$0.2 do var un , temp_list ;
77197: GO 77199
77199: DISABLE
77200: LD_INT 0
77202: PPUSH
77203: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
77204: LD_INT 18
77206: PPUSH
77207: CALL_OW 67
// until UnitFilter ( hiding_player_units , [ f_see , you ] ) > 0 ;
77211: LD_EXP 122
77215: PPUSH
77216: LD_INT 101
77218: PUSH
77219: LD_EXP 2
77223: PUSH
77224: EMPTY
77225: LIST
77226: LIST
77227: PPUSH
77228: CALL_OW 72
77232: PUSH
77233: LD_INT 0
77235: GREATER
77236: IFFALSE 77204
// hiding_player_units_found = true ;
77238: LD_ADDR_EXP 123
77242: PUSH
77243: LD_INT 1
77245: ST_TO_ADDR
// ChangeSideFog ( you_alt , you ) ;
77246: LD_EXP 5
77250: PPUSH
77251: LD_EXP 2
77255: PPUSH
77256: CALL_OW 343
// temp_list = hiding_player_units ;
77260: LD_ADDR_VAR 0 2
77264: PUSH
77265: LD_EXP 122
77269: ST_TO_ADDR
// CenterOnUnits ( temp_list ) ;
77270: LD_VAR 0 2
77274: PPUSH
77275: CALL_OW 85
// DialogueOn ;
77279: CALL_OW 6
// un = temp_list [ Rand ( 1 , temp_list ) ] ;
77283: LD_ADDR_VAR 0 1
77287: PUSH
77288: LD_VAR 0 2
77292: PUSH
77293: LD_INT 1
77295: PPUSH
77296: LD_VAR 0 2
77300: PPUSH
77301: CALL_OW 12
77305: ARRAY
77306: ST_TO_ADDR
// case un of Olaf :
77307: LD_VAR 0 1
77311: PUSH
77312: LD_EXP 10
77316: DOUBLE
77317: EQUAL
77318: IFTRUE 77322
77320: GO 77337
77322: POP
// Say ( un , D7-Ola-1 ) ; Sonya :
77323: LD_VAR 0 1
77327: PPUSH
77328: LD_STRING D7-Ola-1
77330: PPUSH
77331: CALL_OW 88
77335: GO 77629
77337: LD_EXP 11
77341: DOUBLE
77342: EQUAL
77343: IFTRUE 77347
77345: GO 77362
77347: POP
// Say ( un , D7-So-1 ) ; Oswald :
77348: LD_VAR 0 1
77352: PPUSH
77353: LD_STRING D7-So-1
77355: PPUSH
77356: CALL_OW 88
77360: GO 77629
77362: LD_EXP 12
77366: DOUBLE
77367: EQUAL
77368: IFTRUE 77372
77370: GO 77387
77372: POP
// Say ( un , D7-Os-1 ) ; Ralph :
77373: LD_VAR 0 1
77377: PPUSH
77378: LD_STRING D7-Os-1
77380: PPUSH
77381: CALL_OW 88
77385: GO 77629
77387: LD_EXP 13
77391: DOUBLE
77392: EQUAL
77393: IFTRUE 77397
77395: GO 77412
77397: POP
// Say ( un , D7-Ra-1 ) ; Kowalski :
77398: LD_VAR 0 1
77402: PPUSH
77403: LD_STRING D7-Ra-1
77405: PPUSH
77406: CALL_OW 88
77410: GO 77629
77412: LD_EXP 14
77416: DOUBLE
77417: EQUAL
77418: IFTRUE 77422
77420: GO 77437
77422: POP
// Say ( un , D7-Ko-1 ) ; Suze :
77423: LD_VAR 0 1
77427: PPUSH
77428: LD_STRING D7-Ko-1
77430: PPUSH
77431: CALL_OW 88
77435: GO 77629
77437: LD_EXP 15
77441: DOUBLE
77442: EQUAL
77443: IFTRUE 77447
77445: GO 77462
77447: POP
// Say ( un , D7-Su-1 ) ; MarkB :
77448: LD_VAR 0 1
77452: PPUSH
77453: LD_STRING D7-Su-1
77455: PPUSH
77456: CALL_OW 88
77460: GO 77629
77462: LD_EXP 16
77466: DOUBLE
77467: EQUAL
77468: IFTRUE 77472
77470: GO 77487
77472: POP
// Say ( un , D7-Mark-1 ) ; Kurt :
77473: LD_VAR 0 1
77477: PPUSH
77478: LD_STRING D7-Mark-1
77480: PPUSH
77481: CALL_OW 88
77485: GO 77629
77487: LD_EXP 17
77491: DOUBLE
77492: EQUAL
77493: IFTRUE 77497
77495: GO 77512
77497: POP
// Say ( un , D7-Ku-1 ) ; Martin :
77498: LD_VAR 0 1
77502: PPUSH
77503: LD_STRING D7-Ku-1
77505: PPUSH
77506: CALL_OW 88
77510: GO 77629
77512: LD_EXP 18
77516: DOUBLE
77517: EQUAL
77518: IFTRUE 77522
77520: GO 77537
77522: POP
// Say ( un , D7-Mart-1 ) ; Louis :
77523: LD_VAR 0 1
77527: PPUSH
77528: LD_STRING D7-Mart-1
77530: PPUSH
77531: CALL_OW 88
77535: GO 77629
77537: LD_EXP 19
77541: DOUBLE
77542: EQUAL
77543: IFTRUE 77547
77545: GO 77562
77547: POP
// Say ( un , D7-Lo-1 ) ; Khattam :
77548: LD_VAR 0 1
77552: PPUSH
77553: LD_STRING D7-Lo-1
77555: PPUSH
77556: CALL_OW 88
77560: GO 77629
77562: LD_EXP 20
77566: DOUBLE
77567: EQUAL
77568: IFTRUE 77572
77570: GO 77587
77572: POP
// Say ( un , D7-Kh-1 ) ; else
77573: LD_VAR 0 1
77577: PPUSH
77578: LD_STRING D7-Kh-1
77580: PPUSH
77581: CALL_OW 88
77585: GO 77629
77587: POP
// if GetSex ( un ) = sex_male then
77588: LD_VAR 0 1
77592: PPUSH
77593: CALL_OW 258
77597: PUSH
77598: LD_INT 1
77600: EQUAL
77601: IFFALSE 77617
// Say ( un , D7-SomeM-1 ) else
77603: LD_VAR 0 1
77607: PPUSH
77608: LD_STRING D7-SomeM-1
77610: PPUSH
77611: CALL_OW 88
77615: GO 77629
// Say ( un , D7-SomeF-1 ) ; end ;
77617: LD_VAR 0 1
77621: PPUSH
77622: LD_STRING D7-SomeF-1
77624: PPUSH
77625: CALL_OW 88
// Say ( Heike , D7-H-1 ) ;
77629: LD_EXP 9
77633: PPUSH
77634: LD_STRING D7-H-1
77636: PPUSH
77637: CALL_OW 88
// un = temp_list [ Rand ( 1 , temp_list ) ] ;
77641: LD_ADDR_VAR 0 1
77645: PUSH
77646: LD_VAR 0 2
77650: PUSH
77651: LD_INT 1
77653: PPUSH
77654: LD_VAR 0 2
77658: PPUSH
77659: CALL_OW 12
77663: ARRAY
77664: ST_TO_ADDR
// case un of Olaf :
77665: LD_VAR 0 1
77669: PUSH
77670: LD_EXP 10
77674: DOUBLE
77675: EQUAL
77676: IFTRUE 77680
77678: GO 77695
77680: POP
// Say ( un , D7-Ola-2 ) ; Sonya :
77681: LD_VAR 0 1
77685: PPUSH
77686: LD_STRING D7-Ola-2
77688: PPUSH
77689: CALL_OW 88
77693: GO 77987
77695: LD_EXP 11
77699: DOUBLE
77700: EQUAL
77701: IFTRUE 77705
77703: GO 77720
77705: POP
// Say ( un , D7-So-2 ) ; Oswald :
77706: LD_VAR 0 1
77710: PPUSH
77711: LD_STRING D7-So-2
77713: PPUSH
77714: CALL_OW 88
77718: GO 77987
77720: LD_EXP 12
77724: DOUBLE
77725: EQUAL
77726: IFTRUE 77730
77728: GO 77745
77730: POP
// Say ( un , D7-Os-2 ) ; Ralph :
77731: LD_VAR 0 1
77735: PPUSH
77736: LD_STRING D7-Os-2
77738: PPUSH
77739: CALL_OW 88
77743: GO 77987
77745: LD_EXP 13
77749: DOUBLE
77750: EQUAL
77751: IFTRUE 77755
77753: GO 77770
77755: POP
// Say ( un , D7-Ra-2 ) ; Kowalski :
77756: LD_VAR 0 1
77760: PPUSH
77761: LD_STRING D7-Ra-2
77763: PPUSH
77764: CALL_OW 88
77768: GO 77987
77770: LD_EXP 14
77774: DOUBLE
77775: EQUAL
77776: IFTRUE 77780
77778: GO 77795
77780: POP
// Say ( un , D7-Ko-2 ) ; Suze :
77781: LD_VAR 0 1
77785: PPUSH
77786: LD_STRING D7-Ko-2
77788: PPUSH
77789: CALL_OW 88
77793: GO 77987
77795: LD_EXP 15
77799: DOUBLE
77800: EQUAL
77801: IFTRUE 77805
77803: GO 77820
77805: POP
// Say ( un , D7-Su-2 ) ; MarkB :
77806: LD_VAR 0 1
77810: PPUSH
77811: LD_STRING D7-Su-2
77813: PPUSH
77814: CALL_OW 88
77818: GO 77987
77820: LD_EXP 16
77824: DOUBLE
77825: EQUAL
77826: IFTRUE 77830
77828: GO 77845
77830: POP
// Say ( un , D7-Mark-2 ) ; Kurt :
77831: LD_VAR 0 1
77835: PPUSH
77836: LD_STRING D7-Mark-2
77838: PPUSH
77839: CALL_OW 88
77843: GO 77987
77845: LD_EXP 17
77849: DOUBLE
77850: EQUAL
77851: IFTRUE 77855
77853: GO 77870
77855: POP
// Say ( un , D7-Ku-2 ) ; Martin :
77856: LD_VAR 0 1
77860: PPUSH
77861: LD_STRING D7-Ku-2
77863: PPUSH
77864: CALL_OW 88
77868: GO 77987
77870: LD_EXP 18
77874: DOUBLE
77875: EQUAL
77876: IFTRUE 77880
77878: GO 77895
77880: POP
// Say ( un , D7-Mart-2 ) ; Louis :
77881: LD_VAR 0 1
77885: PPUSH
77886: LD_STRING D7-Mart-2
77888: PPUSH
77889: CALL_OW 88
77893: GO 77987
77895: LD_EXP 19
77899: DOUBLE
77900: EQUAL
77901: IFTRUE 77905
77903: GO 77920
77905: POP
// Say ( un , D7-Lo-2 ) ; Khattam :
77906: LD_VAR 0 1
77910: PPUSH
77911: LD_STRING D7-Lo-2
77913: PPUSH
77914: CALL_OW 88
77918: GO 77987
77920: LD_EXP 20
77924: DOUBLE
77925: EQUAL
77926: IFTRUE 77930
77928: GO 77945
77930: POP
// Say ( un , D7-Kh-2 ) ; else
77931: LD_VAR 0 1
77935: PPUSH
77936: LD_STRING D7-Kh-2
77938: PPUSH
77939: CALL_OW 88
77943: GO 77987
77945: POP
// if GetSex ( un ) = sex_male then
77946: LD_VAR 0 1
77950: PPUSH
77951: CALL_OW 258
77955: PUSH
77956: LD_INT 1
77958: EQUAL
77959: IFFALSE 77975
// Say ( un , D7-SomeM-2 ) else
77961: LD_VAR 0 1
77965: PPUSH
77966: LD_STRING D7-SomeM-2
77968: PPUSH
77969: CALL_OW 88
77973: GO 77987
// Say ( un , D7-SomeF-2 ) ; end ;
77975: LD_VAR 0 1
77979: PPUSH
77980: LD_STRING D7-SomeF-2
77982: PPUSH
77983: CALL_OW 88
// Say ( Heike , D7-H-2 ) ;
77987: LD_EXP 9
77991: PPUSH
77992: LD_STRING D7-H-2
77994: PPUSH
77995: CALL_OW 88
// un = temp_list [ Rand ( 1 , temp_list ) ] ;
77999: LD_ADDR_VAR 0 1
78003: PUSH
78004: LD_VAR 0 2
78008: PUSH
78009: LD_INT 1
78011: PPUSH
78012: LD_VAR 0 2
78016: PPUSH
78017: CALL_OW 12
78021: ARRAY
78022: ST_TO_ADDR
// case un of Olaf :
78023: LD_VAR 0 1
78027: PUSH
78028: LD_EXP 10
78032: DOUBLE
78033: EQUAL
78034: IFTRUE 78038
78036: GO 78053
78038: POP
// Say ( un , D7-Ola-3 ) ; Sonya :
78039: LD_VAR 0 1
78043: PPUSH
78044: LD_STRING D7-Ola-3
78046: PPUSH
78047: CALL_OW 88
78051: GO 78345
78053: LD_EXP 11
78057: DOUBLE
78058: EQUAL
78059: IFTRUE 78063
78061: GO 78078
78063: POP
// Say ( un , D7-So-3 ) ; Oswald :
78064: LD_VAR 0 1
78068: PPUSH
78069: LD_STRING D7-So-3
78071: PPUSH
78072: CALL_OW 88
78076: GO 78345
78078: LD_EXP 12
78082: DOUBLE
78083: EQUAL
78084: IFTRUE 78088
78086: GO 78103
78088: POP
// Say ( un , D7-Os-3 ) ; Ralph :
78089: LD_VAR 0 1
78093: PPUSH
78094: LD_STRING D7-Os-3
78096: PPUSH
78097: CALL_OW 88
78101: GO 78345
78103: LD_EXP 13
78107: DOUBLE
78108: EQUAL
78109: IFTRUE 78113
78111: GO 78128
78113: POP
// Say ( un , D7-Ra-3 ) ; Kowalski :
78114: LD_VAR 0 1
78118: PPUSH
78119: LD_STRING D7-Ra-3
78121: PPUSH
78122: CALL_OW 88
78126: GO 78345
78128: LD_EXP 14
78132: DOUBLE
78133: EQUAL
78134: IFTRUE 78138
78136: GO 78153
78138: POP
// Say ( un , D7-Ko-3 ) ; Suze :
78139: LD_VAR 0 1
78143: PPUSH
78144: LD_STRING D7-Ko-3
78146: PPUSH
78147: CALL_OW 88
78151: GO 78345
78153: LD_EXP 15
78157: DOUBLE
78158: EQUAL
78159: IFTRUE 78163
78161: GO 78178
78163: POP
// Say ( un , D7-Su-3 ) ; MarkB :
78164: LD_VAR 0 1
78168: PPUSH
78169: LD_STRING D7-Su-3
78171: PPUSH
78172: CALL_OW 88
78176: GO 78345
78178: LD_EXP 16
78182: DOUBLE
78183: EQUAL
78184: IFTRUE 78188
78186: GO 78203
78188: POP
// Say ( un , D7-Mark-3 ) ; Kurt :
78189: LD_VAR 0 1
78193: PPUSH
78194: LD_STRING D7-Mark-3
78196: PPUSH
78197: CALL_OW 88
78201: GO 78345
78203: LD_EXP 17
78207: DOUBLE
78208: EQUAL
78209: IFTRUE 78213
78211: GO 78228
78213: POP
// Say ( un , D7-Ku-3 ) ; Martin :
78214: LD_VAR 0 1
78218: PPUSH
78219: LD_STRING D7-Ku-3
78221: PPUSH
78222: CALL_OW 88
78226: GO 78345
78228: LD_EXP 18
78232: DOUBLE
78233: EQUAL
78234: IFTRUE 78238
78236: GO 78253
78238: POP
// Say ( un , D7-Mart-3 ) ; Louis :
78239: LD_VAR 0 1
78243: PPUSH
78244: LD_STRING D7-Mart-3
78246: PPUSH
78247: CALL_OW 88
78251: GO 78345
78253: LD_EXP 19
78257: DOUBLE
78258: EQUAL
78259: IFTRUE 78263
78261: GO 78278
78263: POP
// Say ( un , D7-Lo-3 ) ; Khattam :
78264: LD_VAR 0 1
78268: PPUSH
78269: LD_STRING D7-Lo-3
78271: PPUSH
78272: CALL_OW 88
78276: GO 78345
78278: LD_EXP 20
78282: DOUBLE
78283: EQUAL
78284: IFTRUE 78288
78286: GO 78303
78288: POP
// Say ( un , D7-Kh-3 ) ; else
78289: LD_VAR 0 1
78293: PPUSH
78294: LD_STRING D7-Kh-3
78296: PPUSH
78297: CALL_OW 88
78301: GO 78345
78303: POP
// if GetSex ( un ) = sex_male then
78304: LD_VAR 0 1
78308: PPUSH
78309: CALL_OW 258
78313: PUSH
78314: LD_INT 1
78316: EQUAL
78317: IFFALSE 78333
// Say ( un , D7-SomeM-3 ) else
78319: LD_VAR 0 1
78323: PPUSH
78324: LD_STRING D7-SomeM-3
78326: PPUSH
78327: CALL_OW 88
78331: GO 78345
// Say ( un , D7-SomeF-3 ) ; end ;
78333: LD_VAR 0 1
78337: PPUSH
78338: LD_STRING D7-SomeF-3
78340: PPUSH
78341: CALL_OW 88
// Say ( Heike , D7-H-3 ) ;
78345: LD_EXP 9
78349: PPUSH
78350: LD_STRING D7-H-3
78352: PPUSH
78353: CALL_OW 88
// if Sonya in temp_list and Ralph = 0 and Ralph_alive then
78357: LD_EXP 11
78361: PUSH
78362: LD_VAR 0 2
78366: IN
78367: PUSH
78368: LD_EXP 13
78372: PUSH
78373: LD_INT 0
78375: EQUAL
78376: AND
78377: PUSH
78378: LD_EXP 141
78382: AND
78383: IFFALSE 78409
// begin Say ( Sonya , D7-So-4 ) ;
78385: LD_EXP 11
78389: PPUSH
78390: LD_STRING D7-So-4
78392: PPUSH
78393: CALL_OW 88
// Say ( Heike , D7-H-4 ) ;
78397: LD_EXP 9
78401: PPUSH
78402: LD_STRING D7-H-4
78404: PPUSH
78405: CALL_OW 88
// end ; DialogueOff ;
78409: CALL_OW 7
// SetSide ( temp_list , you ) ;
78413: LD_VAR 0 2
78417: PPUSH
78418: LD_EXP 2
78422: PPUSH
78423: CALL_OW 235
// if rus_obj_given_before_survivors_found then
78427: LD_EXP 124
78431: IFFALSE 78449
// begin wait ( 0 0$0.2 ) ;
78433: LD_INT 7
78435: PPUSH
78436: CALL_OW 67
// ChangeMissionObjectives ( MCaptureKozlov ) ;
78440: LD_STRING MCaptureKozlov
78442: PPUSH
78443: CALL_OW 337
// end else
78447: GO 78488
// if heike_farmer_dialogue_done then
78449: LD_EXP 125
78453: IFFALSE 78471
// begin wait ( 0 0$0.2 ) ;
78455: LD_INT 7
78457: PPUSH
78458: CALL_OW 67
// ChangeMissionObjectives ( M4 ) ;
78462: LD_STRING M4
78464: PPUSH
78465: CALL_OW 337
// end else
78469: GO 78488
// begin HeikeFarmerDialogueEvaluation ( false , false ) ;
78471: LD_INT 0
78473: PPUSH
78474: LD_INT 0
78476: PPUSH
78477: CALL 75070 0 2
// ChangeMissionObjectives ( MFull ) ;
78481: LD_STRING MFull
78483: PPUSH
78484: CALL_OW 337
// end ; wait ( 0 0$0.2 ) ;
78488: LD_INT 7
78490: PPUSH
78491: CALL_OW 67
// Query ( QCaptureKozlovInfo ) ;
78495: LD_STRING QCaptureKozlovInfo
78497: PPUSH
78498: CALL_OW 97
// end ;
78502: PPOPN 2
78504: END
// every 0 0$1 + 0 0$0.8 do var temp_list ;
78505: GO 78507
78507: DISABLE
78508: LD_INT 0
78510: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
78511: LD_INT 18
78513: PPUSH
78514: CALL_OW 67
// temp_list = FilterAllUnits ( [ [ f_side , farmer_side ] , [ f_nation , nation_arabian ] , [ f_inarea , Ru_base ] , [ f_see , you ] ] ) ;
78518: LD_ADDR_VAR 0 1
78522: PUSH
78523: LD_INT 22
78525: PUSH
78526: LD_EXP 6
78530: PUSH
78531: EMPTY
78532: LIST
78533: LIST
78534: PUSH
78535: LD_INT 23
78537: PUSH
78538: LD_INT 2
78540: PUSH
78541: EMPTY
78542: LIST
78543: LIST
78544: PUSH
78545: LD_INT 95
78547: PUSH
78548: LD_INT 1
78550: PUSH
78551: EMPTY
78552: LIST
78553: LIST
78554: PUSH
78555: LD_INT 101
78557: PUSH
78558: LD_EXP 2
78562: PUSH
78563: EMPTY
78564: LIST
78565: LIST
78566: PUSH
78567: EMPTY
78568: LIST
78569: LIST
78570: LIST
78571: LIST
78572: PPUSH
78573: CALL_OW 69
78577: ST_TO_ADDR
// until temp_list > 0 ;
78578: LD_VAR 0 1
78582: PUSH
78583: LD_INT 0
78585: GREATER
78586: IFFALSE 78511
// CenterOnUnits ( temp_list ) ;
78588: LD_VAR 0 1
78592: PPUSH
78593: CALL_OW 85
// DialogueOn ;
78597: CALL_OW 6
// ForceSay ( Heike , D12-H-1 ) ;
78601: LD_EXP 9
78605: PPUSH
78606: LD_STRING D12-H-1
78608: PPUSH
78609: CALL_OW 91
// DialogueOff ;
78613: CALL_OW 7
// end ;
78617: PPOPN 1
78619: END
// every 0 0$1 + 0 0$0.3 do var temp_list , cooldown ;
78620: GO 78622
78622: DISABLE
78623: LD_INT 0
78625: PPUSH
78626: PPUSH
// begin cooldown = [ - 1 , 0 0$25 , 0 0$15 ] [ difficulty ] ;
78627: LD_ADDR_VAR 0 2
78631: PUSH
78632: LD_INT 1
78634: NEG
78635: PUSH
78636: LD_INT 875
78638: PUSH
78639: LD_INT 525
78641: PUSH
78642: EMPTY
78643: LIST
78644: LIST
78645: LIST
78646: PUSH
78647: LD_OWVAR 67
78651: ARRAY
78652: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
78653: LD_INT 35
78655: PPUSH
78656: CALL_OW 67
// if difficulty = 1 then
78660: LD_OWVAR 67
78664: PUSH
78665: LD_INT 1
78667: EQUAL
78668: IFFALSE 78672
// exit ;
78670: GO 79136
// if IsDead ( Kozlov ) or kozlov_teleport_event_over or kozlov_has_teleported or IsDead ( Farmer ) then
78672: LD_EXP 24
78676: PPUSH
78677: CALL_OW 301
78681: PUSH
78682: LD_EXP 129
78686: OR
78687: PUSH
78688: LD_EXP 127
78692: OR
78693: PUSH
78694: LD_EXP 21
78698: PPUSH
78699: CALL_OW 301
78703: OR
78704: IFFALSE 78784
// begin kozlov_trying_to_escape = false ;
78706: LD_ADDR_EXP 139
78710: PUSH
78711: LD_INT 0
78713: ST_TO_ADDR
// if IsLive ( Kozlov ) and not kozlov_has_teleported and not kozlov_teleport_event_over then
78714: LD_EXP 24
78718: PPUSH
78719: CALL_OW 300
78723: PUSH
78724: LD_EXP 127
78728: NOT
78729: AND
78730: PUSH
78731: LD_EXP 129
78735: NOT
78736: AND
78737: IFFALSE 78782
// begin temp_list = ai_scientists [ 1 ] union Kozlov ;
78739: LD_ADDR_VAR 0 1
78743: PUSH
78744: LD_EXP 31
78748: PUSH
78749: LD_INT 1
78751: ARRAY
78752: PUSH
78753: LD_EXP 24
78757: UNION
78758: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , 1 , temp_list ) ;
78759: LD_ADDR_EXP 31
78763: PUSH
78764: LD_EXP 31
78768: PPUSH
78769: LD_INT 1
78771: PPUSH
78772: LD_VAR 0 1
78776: PPUSH
78777: CALL_OW 1
78781: ST_TO_ADDR
// end ; exit ;
78782: GO 79136
// end ; if not kozlov_trying_to_escape then
78784: LD_EXP 139
78788: NOT
78789: IFFALSE 78902
// if FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , kozlov_scared_area ] , [ f_ok ] , [ f_not , [ f_weapon , ar_selfpropelled_bomb ] ] , [ f_not , [ f_class , class_apeman_kamikaze ] ] ] ) >= [ - 1 , 2 , 1 ] [ difficulty ] then
78791: LD_INT 22
78793: PUSH
78794: LD_EXP 2
78798: PUSH
78799: EMPTY
78800: LIST
78801: LIST
78802: PUSH
78803: LD_INT 95
78805: PUSH
78806: LD_INT 26
78808: PUSH
78809: EMPTY
78810: LIST
78811: LIST
78812: PUSH
78813: LD_INT 50
78815: PUSH
78816: EMPTY
78817: LIST
78818: PUSH
78819: LD_INT 3
78821: PUSH
78822: LD_INT 34
78824: PUSH
78825: LD_INT 29
78827: PUSH
78828: EMPTY
78829: LIST
78830: LIST
78831: PUSH
78832: EMPTY
78833: LIST
78834: LIST
78835: PUSH
78836: LD_INT 3
78838: PUSH
78839: LD_INT 25
78841: PUSH
78842: LD_INT 17
78844: PUSH
78845: EMPTY
78846: LIST
78847: LIST
78848: PUSH
78849: EMPTY
78850: LIST
78851: LIST
78852: PUSH
78853: EMPTY
78854: LIST
78855: LIST
78856: LIST
78857: LIST
78858: LIST
78859: PPUSH
78860: CALL_OW 69
78864: PUSH
78865: LD_INT 1
78867: NEG
78868: PUSH
78869: LD_INT 2
78871: PUSH
78872: LD_INT 1
78874: PUSH
78875: EMPTY
78876: LIST
78877: LIST
78878: LIST
78879: PUSH
78880: LD_OWVAR 67
78884: ARRAY
78885: GREATEREQUAL
78886: IFFALSE 78902
// begin cooldown = cooldown - 0 0$1 ;
78888: LD_ADDR_VAR 0 2
78892: PUSH
78893: LD_VAR 0 2
78897: PUSH
78898: LD_INT 35
78900: MINUS
78901: ST_TO_ADDR
// end ; if cooldown > 0 0$0 then
78902: LD_VAR 0 2
78906: PUSH
78907: LD_INT 0
78909: GREATER
78910: IFFALSE 78914
// continue ;
78912: GO 78653
// kozlov_trying_to_escape = true ;
78914: LD_ADDR_EXP 139
78918: PUSH
78919: LD_INT 1
78921: ST_TO_ADDR
// if not IsOk ( Kozlov ) then
78922: LD_EXP 24
78926: PPUSH
78927: CALL_OW 302
78931: NOT
78932: IFFALSE 78979
// begin temp_list = ai_heal_these_humans [ 1 ] union Kozlov ;
78934: LD_ADDR_VAR 0 1
78938: PUSH
78939: LD_EXP 57
78943: PUSH
78944: LD_INT 1
78946: ARRAY
78947: PUSH
78948: LD_EXP 24
78952: UNION
78953: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , 1 , temp_list ) ;
78954: LD_ADDR_EXP 57
78958: PUSH
78959: LD_EXP 57
78963: PPUSH
78964: LD_INT 1
78966: PPUSH
78967: LD_VAR 0 1
78971: PPUSH
78972: CALL_OW 1
78976: ST_TO_ADDR
// continue ;
78977: GO 78653
// end ; if not IsOk ( ai_teleporter [ 1 ] ) then
78979: LD_EXP 46
78983: PUSH
78984: LD_INT 1
78986: ARRAY
78987: PPUSH
78988: CALL_OW 302
78992: NOT
78993: IFFALSE 79040
// begin temp_list = ai_scientists [ 1 ] union Kozlov ;
78995: LD_ADDR_VAR 0 1
78999: PUSH
79000: LD_EXP 31
79004: PUSH
79005: LD_INT 1
79007: ARRAY
79008: PUSH
79009: LD_EXP 24
79013: UNION
79014: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , 1 , temp_list ) ;
79015: LD_ADDR_EXP 31
79019: PUSH
79020: LD_EXP 31
79024: PPUSH
79025: LD_INT 1
79027: PPUSH
79028: LD_VAR 0 1
79032: PPUSH
79033: CALL_OW 1
79037: ST_TO_ADDR
// continue ;
79038: GO 78653
// end ; RemoveHumanFromVariables ( 1 , Kozlov , false , false ) ;
79040: LD_INT 1
79042: PPUSH
79043: LD_EXP 24
79047: PPUSH
79048: LD_INT 0
79050: PPUSH
79051: LD_INT 0
79053: PPUSH
79054: CALL 25867 0 4
// case GetType ( IsInUnit ( Kozlov ) ) of unit_building :
79058: LD_EXP 24
79062: PPUSH
79063: CALL_OW 310
79067: PPUSH
79068: CALL_OW 247
79072: PUSH
79073: LD_INT 3
79075: DOUBLE
79076: EQUAL
79077: IFTRUE 79081
79079: GO 79093
79081: POP
// ComExitBuilding ( Kozlov ) ; unit_vehicle :
79082: LD_EXP 24
79086: PPUSH
79087: CALL_OW 122
79091: GO 79132
79093: LD_INT 2
79095: DOUBLE
79096: EQUAL
79097: IFTRUE 79101
79099: GO 79113
79101: POP
// ComExitVehicle ( Kozlov ) ; else
79102: LD_EXP 24
79106: PPUSH
79107: CALL_OW 121
79111: GO 79132
79113: POP
// ComEnterUnit ( Kozlov , ai_teleporter [ 1 ] ) ; end ;
79114: LD_EXP 24
79118: PPUSH
79119: LD_EXP 46
79123: PUSH
79124: LD_INT 1
79126: ARRAY
79127: PPUSH
79128: CALL_OW 120
// until false ;
79132: LD_INT 0
79134: IFFALSE 78653
// end ;
79136: PPOPN 2
79138: END
// every 0 0$1 + 0 0$0.4 do var temp_list , i ; var trying_to_escape , dialogue_played ;
79139: GO 79141
79141: DISABLE
79142: LD_INT 0
79144: PPUSH
79145: PPUSH
79146: PPUSH
79147: PPUSH
// begin dialogue_played = false ;
79148: LD_ADDR_VAR 0 4
79152: PUSH
79153: LD_INT 0
79155: ST_TO_ADDR
// trying_to_escape = false ;
79156: LD_ADDR_VAR 0 3
79160: PUSH
79161: LD_INT 0
79163: ST_TO_ADDR
// repeat if kozlov_gained then
79164: LD_EXP 140
79168: IFFALSE 79172
// exit ;
79170: GO 80214
// if IsDead ( Kozlov ) then
79172: LD_EXP 24
79176: PPUSH
79177: CALL_OW 301
79181: IFFALSE 79193
// begin kozlov_captured = false ;
79183: LD_ADDR_EXP 126
79187: PUSH
79188: LD_INT 0
79190: ST_TO_ADDR
// exit ;
79191: GO 80214
// end ; if GetSide ( Kozlov ) <> russians_alt then
79193: LD_EXP 24
79197: PPUSH
79198: CALL_OW 255
79202: PUSH
79203: LD_EXP 8
79207: NONEQUAL
79208: IFFALSE 79779
// begin if not trying_to_escape then
79210: LD_VAR 0 3
79214: NOT
79215: IFFALSE 79693
// begin while GetLives ( Kozlov ) > 250 do
79217: LD_EXP 24
79221: PPUSH
79222: CALL_OW 256
79226: PUSH
79227: LD_INT 250
79229: GREATER
79230: IFFALSE 79241
// wait ( 1 ) ;
79232: LD_INT 1
79234: PPUSH
79235: CALL_OW 67
79239: GO 79217
// repeat wait ( 1 ) ;
79241: LD_INT 1
79243: PPUSH
79244: CALL_OW 67
// until GetLives ( Kozlov ) > 250 or IsDead ( Kozlov ) ;
79248: LD_EXP 24
79252: PPUSH
79253: CALL_OW 256
79257: PUSH
79258: LD_INT 250
79260: GREATER
79261: PUSH
79262: LD_EXP 24
79266: PPUSH
79267: CALL_OW 301
79271: OR
79272: IFFALSE 79241
// if IsDead ( Kozlov ) then
79274: LD_EXP 24
79278: PPUSH
79279: CALL_OW 301
79283: IFFALSE 79295
// begin kozlov_captured = false ;
79285: LD_ADDR_EXP 126
79289: PUSH
79290: LD_INT 0
79292: ST_TO_ADDR
// exit ;
79293: GO 80214
// end ; if ( FilterAllUnits ( [ [ f_not , [ f_side , you ] ] , [ f_class , class_scientistic ] , [ f_dist , Kozlov , 2 ] ] ) diff Kozlov ) > 0 then
79295: LD_INT 3
79297: PUSH
79298: LD_INT 22
79300: PUSH
79301: LD_EXP 2
79305: PUSH
79306: EMPTY
79307: LIST
79308: LIST
79309: PUSH
79310: EMPTY
79311: LIST
79312: LIST
79313: PUSH
79314: LD_INT 25
79316: PUSH
79317: LD_INT 4
79319: PUSH
79320: EMPTY
79321: LIST
79322: LIST
79323: PUSH
79324: LD_INT 91
79326: PUSH
79327: LD_EXP 24
79331: PUSH
79332: LD_INT 2
79334: PUSH
79335: EMPTY
79336: LIST
79337: LIST
79338: LIST
79339: PUSH
79340: EMPTY
79341: LIST
79342: LIST
79343: LIST
79344: PPUSH
79345: CALL_OW 69
79349: PUSH
79350: LD_EXP 24
79354: DIFF
79355: PUSH
79356: LD_INT 0
79358: GREATER
79359: IFFALSE 79363
// continue ;
79361: GO 79164
// SetSide ( Kozlov , russians_alt ) ;
79363: LD_EXP 24
79367: PPUSH
79368: LD_EXP 8
79372: PPUSH
79373: CALL_OW 235
// RemoveHumanFromVariables ( 1 , Kozlov , true , true ) ;
79377: LD_INT 1
79379: PPUSH
79380: LD_EXP 24
79384: PPUSH
79385: LD_INT 1
79387: PPUSH
79388: LD_INT 1
79390: PPUSH
79391: CALL 25867 0 4
// RemoveHumanFromVariables ( 3 , Kozlov , true , true ) ;
79395: LD_INT 3
79397: PPUSH
79398: LD_EXP 24
79402: PPUSH
79403: LD_INT 1
79405: PPUSH
79406: LD_INT 1
79408: PPUSH
79409: CALL 25867 0 4
// kozlov_captured = true ;
79413: LD_ADDR_EXP 126
79417: PUSH
79418: LD_INT 1
79420: ST_TO_ADDR
// kozlov_teleport_event_over = true ;
79421: LD_ADDR_EXP 129
79425: PUSH
79426: LD_INT 1
79428: ST_TO_ADDR
// ComStop ( Kozlov ) ;
79429: LD_EXP 24
79433: PPUSH
79434: CALL_OW 141
// if not dialogue_played then
79438: LD_VAR 0 4
79442: NOT
79443: IFFALSE 79691
// begin dialogue_played = true ;
79445: LD_ADDR_VAR 0 4
79449: PUSH
79450: LD_INT 1
79452: ST_TO_ADDR
// CenterOnUnits ( Kozlov ) ;
79453: LD_EXP 24
79457: PPUSH
79458: CALL_OW 85
// DialogueOn ;
79462: CALL_OW 6
// Say ( Kozlov , D10-Ko-1 ) ;
79466: LD_EXP 24
79470: PPUSH
79471: LD_STRING D10-Ko-1
79473: PPUSH
79474: CALL_OW 88
// Say ( Heike , D10-H-1 ) ;
79478: LD_EXP 9
79482: PPUSH
79483: LD_STRING D10-H-1
79485: PPUSH
79486: CALL_OW 88
// if IsDead ( Farmer ) then
79490: LD_EXP 21
79494: PPUSH
79495: CALL_OW 301
79499: IFFALSE 79687
// begin ForceSay ( Heike , D11-2-H-1 ) ;
79501: LD_EXP 9
79505: PPUSH
79506: LD_STRING D11-2-H-1
79508: PPUSH
79509: CALL_OW 91
// Say ( Kozlov , D11-2-Ko-1 ) ;
79513: LD_EXP 24
79517: PPUSH
79518: LD_STRING D11-2-Ko-1
79520: PPUSH
79521: CALL_OW 88
// ForceSay ( Heike , D11-2-H-2 ) ;
79525: LD_EXP 9
79529: PPUSH
79530: LD_STRING D11-2-H-2
79532: PPUSH
79533: CALL_OW 91
// Say ( Kozlov , D11-2-Ko-2 ) ;
79537: LD_EXP 24
79541: PPUSH
79542: LD_STRING D11-2-Ko-2
79544: PPUSH
79545: CALL_OW 88
// ForceSay ( Heike , D11-2-H-3 ) ;
79549: LD_EXP 9
79553: PPUSH
79554: LD_STRING D11-2-H-3
79556: PPUSH
79557: CALL_OW 91
// Say ( Kozlov , D11-2-Ko-3 ) ;
79561: LD_EXP 24
79565: PPUSH
79566: LD_STRING D11-2-Ko-3
79568: PPUSH
79569: CALL_OW 88
// ForceSay ( Heike , D11-2-H-4 ) ;
79573: LD_EXP 9
79577: PPUSH
79578: LD_STRING D11-2-H-4
79580: PPUSH
79581: CALL_OW 91
// Say ( Kozlov , D11-2-Ko-4 ) ;
79585: LD_EXP 24
79589: PPUSH
79590: LD_STRING D11-2-Ko-4
79592: PPUSH
79593: CALL_OW 88
// ForceSay ( Heike , D11-2-H-5 ) ;
79597: LD_EXP 9
79601: PPUSH
79602: LD_STRING D11-2-H-5
79604: PPUSH
79605: CALL_OW 91
// Say ( Kozlov , D11-2-Ko-5 ) ;
79609: LD_EXP 24
79613: PPUSH
79614: LD_STRING D11-2-Ko-5
79616: PPUSH
79617: CALL_OW 88
// ForceSay ( Heike , D11-2-H-6 ) ;
79621: LD_EXP 9
79625: PPUSH
79626: LD_STRING D11-2-H-6
79628: PPUSH
79629: CALL_OW 91
// dwait ( 0 0$2 ) ;
79633: LD_INT 70
79635: PPUSH
79636: CALL_OW 68
// Say ( Kozlov , D11-2-Ko-6b ) ;
79640: LD_EXP 24
79644: PPUSH
79645: LD_STRING D11-2-Ko-6b
79647: PPUSH
79648: CALL_OW 88
// dwait ( 0 0$0.2 ) ;
79652: LD_INT 7
79654: PPUSH
79655: CALL_OW 68
// kozlov_gained = true ;
79659: LD_ADDR_EXP 140
79663: PUSH
79664: LD_INT 1
79666: ST_TO_ADDR
// SetSide ( Kozlov , you ) ;
79667: LD_EXP 24
79671: PPUSH
79672: LD_EXP 2
79676: PPUSH
79677: CALL_OW 235
// DialogueOff ;
79681: CALL_OW 7
// exit ;
79685: GO 80214
// end ; DialogueOff ;
79687: CALL_OW 7
// end ; end else
79691: GO 79777
// begin repeat wait ( 0 0$0.5 ) ;
79693: LD_INT 18
79695: PPUSH
79696: CALL_OW 67
// if GetLives ( Kozlov ) <= 250 then
79700: LD_EXP 24
79704: PPUSH
79705: CALL_OW 256
79709: PUSH
79710: LD_INT 250
79712: LESSEQUAL
79713: IFFALSE 79725
// begin trying_to_escape = false ;
79715: LD_ADDR_VAR 0 3
79719: PUSH
79720: LD_INT 0
79722: ST_TO_ADDR
// break ;
79723: GO 79777
// end ; if not IsInArea ( Kozlov , kozlov_escape_area ) then
79725: LD_EXP 24
79729: PPUSH
79730: LD_INT 27
79732: PPUSH
79733: CALL_OW 308
79737: NOT
79738: IFFALSE 79754
// ComMoveToArea ( Kozlov , kozlov_escape_area ) else
79740: LD_EXP 24
79744: PPUSH
79745: LD_INT 27
79747: PPUSH
79748: CALL_OW 113
79752: GO 79773
// begin RemoveUnit ( Kozlov ) ;
79754: LD_EXP 24
79758: PPUSH
79759: CALL_OW 64
// kozlov_escaped = true ;
79763: LD_ADDR_EXP 128
79767: PUSH
79768: LD_INT 1
79770: ST_TO_ADDR
// exit ;
79771: GO 80214
// end ; until false ;
79773: LD_INT 0
79775: IFFALSE 79693
// end ; end else
79777: GO 80210
// begin repeat wait ( 0 0$1 ) ;
79779: LD_INT 35
79781: PPUSH
79782: CALL_OW 67
// if kozlov_gained then
79786: LD_EXP 140
79790: IFFALSE 79794
// exit ;
79792: GO 80214
// temp_list = [ ] ;
79794: LD_ADDR_VAR 0 1
79798: PUSH
79799: EMPTY
79800: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_dist , Kozlov , 12 ] , [ f_not , [ f_inside ] ] , [ f_not , [ f_driving ] ] ] ) do
79801: LD_ADDR_VAR 0 2
79805: PUSH
79806: LD_INT 22
79808: PUSH
79809: LD_EXP 2
79813: PUSH
79814: EMPTY
79815: LIST
79816: LIST
79817: PUSH
79818: LD_INT 91
79820: PUSH
79821: LD_EXP 24
79825: PUSH
79826: LD_INT 12
79828: PUSH
79829: EMPTY
79830: LIST
79831: LIST
79832: LIST
79833: PUSH
79834: LD_INT 3
79836: PUSH
79837: LD_INT 54
79839: PUSH
79840: EMPTY
79841: LIST
79842: PUSH
79843: EMPTY
79844: LIST
79845: LIST
79846: PUSH
79847: LD_INT 3
79849: PUSH
79850: LD_INT 55
79852: PUSH
79853: EMPTY
79854: LIST
79855: PUSH
79856: EMPTY
79857: LIST
79858: LIST
79859: PUSH
79860: EMPTY
79861: LIST
79862: LIST
79863: LIST
79864: LIST
79865: PPUSH
79866: CALL_OW 69
79870: PUSH
79871: FOR_IN
79872: IFFALSE 80093
// case GetType ( i ) of unit_human :
79874: LD_VAR 0 2
79878: PPUSH
79879: CALL_OW 247
79883: PUSH
79884: LD_INT 1
79886: DOUBLE
79887: EQUAL
79888: IFTRUE 79892
79890: GO 79940
79892: POP
// if IsOk ( i ) or GetTech ( tech_stimdrugs , you ) = state_researched then
79893: LD_VAR 0 2
79897: PPUSH
79898: CALL_OW 302
79902: PUSH
79903: LD_INT 5
79905: PPUSH
79906: LD_EXP 2
79910: PPUSH
79911: CALL_OW 321
79915: PUSH
79916: LD_INT 2
79918: EQUAL
79919: OR
79920: IFFALSE 79938
// temp_list = temp_list ^ i ; unit_vehicle :
79922: LD_ADDR_VAR 0 1
79926: PUSH
79927: LD_VAR 0 1
79931: PUSH
79932: LD_VAR 0 2
79936: ADD
79937: ST_TO_ADDR
79938: GO 80091
79940: LD_INT 2
79942: DOUBLE
79943: EQUAL
79944: IFTRUE 79948
79946: GO 80090
79948: POP
// if IsOk ( i ) then
79949: LD_VAR 0 2
79953: PPUSH
79954: CALL_OW 302
79958: IFFALSE 80088
// case GetControl ( i ) of control_manual :
79960: LD_VAR 0 2
79964: PPUSH
79965: CALL_OW 263
79969: PUSH
79970: LD_INT 1
79972: DOUBLE
79973: EQUAL
79974: IFTRUE 79978
79976: GO 80012
79978: POP
// if IsDrivenBy ( i ) > 0 then
79979: LD_VAR 0 2
79983: PPUSH
79984: CALL_OW 311
79988: PUSH
79989: LD_INT 0
79991: GREATER
79992: IFFALSE 80010
// temp_list = temp_list ^ i ; control_apeman , control_computer :
79994: LD_ADDR_VAR 0 1
79998: PUSH
79999: LD_VAR 0 1
80003: PUSH
80004: LD_VAR 0 2
80008: ADD
80009: ST_TO_ADDR
80010: GO 80088
80012: LD_INT 5
80014: DOUBLE
80015: EQUAL
80016: IFTRUE 80026
80018: LD_INT 3
80020: DOUBLE
80021: EQUAL
80022: IFTRUE 80026
80024: GO 80045
80026: POP
// temp_list = temp_list ^ i ; control_remote :
80027: LD_ADDR_VAR 0 1
80031: PUSH
80032: LD_VAR 0 1
80036: PUSH
80037: LD_VAR 0 2
80041: ADD
80042: ST_TO_ADDR
80043: GO 80088
80045: LD_INT 2
80047: DOUBLE
80048: EQUAL
80049: IFTRUE 80053
80051: GO 80087
80053: POP
// if IsControledBy ( i ) > 0 then
80054: LD_VAR 0 2
80058: PPUSH
80059: CALL_OW 312
80063: PUSH
80064: LD_INT 0
80066: GREATER
80067: IFFALSE 80085
// temp_list = temp_list ^ i ; end ; end ;
80069: LD_ADDR_VAR 0 1
80073: PUSH
80074: LD_VAR 0 1
80078: PUSH
80079: LD_VAR 0 2
80083: ADD
80084: ST_TO_ADDR
80085: GO 80088
80087: POP
80088: GO 80091
80090: POP
80091: GO 79871
80093: POP
80094: POP
// if temp_list = 0 then
80095: LD_VAR 0 1
80099: PUSH
80100: LD_INT 0
80102: EQUAL
80103: IFFALSE 80137
// begin trying_to_escape = true ;
80105: LD_ADDR_VAR 0 3
80109: PUSH
80110: LD_INT 1
80112: ST_TO_ADDR
// kozlov_captured = false ;
80113: LD_ADDR_EXP 126
80117: PUSH
80118: LD_INT 0
80120: ST_TO_ADDR
// SetSide ( Kozlov , russians ) ;
80121: LD_EXP 24
80125: PPUSH
80126: LD_EXP 3
80130: PPUSH
80131: CALL_OW 235
// break ;
80135: GO 80210
// end ; i = NearestUnitToUnit ( temp_list , Kozlov ) ;
80137: LD_ADDR_VAR 0 2
80141: PUSH
80142: LD_VAR 0 1
80146: PPUSH
80147: LD_EXP 24
80151: PPUSH
80152: CALL_OW 74
80156: ST_TO_ADDR
// if GetDistUnits ( Kozlov , i ) > 2 then
80157: LD_EXP 24
80161: PPUSH
80162: LD_VAR 0 2
80166: PPUSH
80167: CALL_OW 296
80171: PUSH
80172: LD_INT 2
80174: GREATER
80175: IFFALSE 80206
// ComMoveXY ( Kozlov , GetX ( i ) , GetY ( i ) ) ;
80177: LD_EXP 24
80181: PPUSH
80182: LD_VAR 0 2
80186: PPUSH
80187: CALL_OW 250
80191: PPUSH
80192: LD_VAR 0 2
80196: PPUSH
80197: CALL_OW 251
80201: PPUSH
80202: CALL_OW 111
// until false ;
80206: LD_INT 0
80208: IFFALSE 79779
// end ; until false ;
80210: LD_INT 0
80212: IFFALSE 79164
// end ;
80214: PPOPN 4
80216: END
// every 0 0$1 + 0 0$0.6 do
80217: GO 80219
80219: DISABLE
// begin repeat wait ( 0 0$1 ) ;
80220: LD_INT 35
80222: PPUSH
80223: CALL_OW 67
// until not 1 in ai_bases and not 2 in ai_bases ;
80227: LD_INT 1
80229: PUSH
80230: LD_EXP 25
80234: IN
80235: NOT
80236: PUSH
80237: LD_INT 2
80239: PUSH
80240: LD_EXP 25
80244: IN
80245: NOT
80246: AND
80247: IFFALSE 80220
// ChangeMissionObjectives ( MOutDestroyRus ) ;
80249: LD_STRING MOutDestroyRus
80251: PPUSH
80252: CALL_OW 337
// russians_defeated = true ;
80256: LD_ADDR_EXP 135
80260: PUSH
80261: LD_INT 1
80263: ST_TO_ADDR
// end ;
80264: END
// every 0 0$1 + 0 0$0.9 do var temp_list ;
80265: GO 80267
80267: DISABLE
80268: LD_INT 0
80270: PPUSH
// begin repeat wait ( 0 0$1 ) ;
80271: LD_INT 35
80273: PPUSH
80274: CALL_OW 67
// if kozlov_has_teleported or not 3 in ai_bases or IsDead ( Farmer ) or ai_teleporter [ 3 ] = 0 then
80278: LD_EXP 127
80282: PUSH
80283: LD_INT 3
80285: PUSH
80286: LD_EXP 25
80290: IN
80291: NOT
80292: OR
80293: PUSH
80294: LD_EXP 21
80298: PPUSH
80299: CALL_OW 301
80303: OR
80304: PUSH
80305: LD_EXP 46
80309: PUSH
80310: LD_INT 3
80312: ARRAY
80313: PUSH
80314: LD_INT 0
80316: EQUAL
80317: OR
80318: IFFALSE 80322
// exit ;
80320: GO 81234
// until not 1 in ai_bases and kozlov_captured and IsOk ( Kozlov ) ;
80322: LD_INT 1
80324: PUSH
80325: LD_EXP 25
80329: IN
80330: NOT
80331: PUSH
80332: LD_EXP 126
80336: AND
80337: PUSH
80338: LD_EXP 24
80342: PPUSH
80343: CALL_OW 302
80347: AND
80348: IFFALSE 80271
// DialogueOn ;
80350: CALL_OW 6
// ForceSay ( Heike , D11-H-1 ) ;
80354: LD_EXP 9
80358: PPUSH
80359: LD_STRING D11-H-1
80361: PPUSH
80362: CALL_OW 91
// dwait ( 0 0$0.2 ) ;
80366: LD_INT 7
80368: PPUSH
80369: CALL_OW 68
// if Query ( QLureFarmer ) = 2 then
80373: LD_STRING QLureFarmer
80375: PPUSH
80376: CALL_OW 97
80380: PUSH
80381: LD_INT 2
80383: EQUAL
80384: IFFALSE 80388
// exit ;
80386: GO 81234
// dwait ( 0 0$0.2 ) ;
80388: LD_INT 7
80390: PPUSH
80391: CALL_OW 68
// case Query ( QKozlovPersuade ) of 1 :
80395: LD_STRING QKozlovPersuade
80397: PPUSH
80398: CALL_OW 97
80402: PUSH
80403: LD_INT 1
80405: DOUBLE
80406: EQUAL
80407: IFTRUE 80411
80409: GO 80468
80411: POP
// begin ForceSay ( Heike , D11-1-H-1 ) ;
80412: LD_EXP 9
80416: PPUSH
80417: LD_STRING D11-1-H-1
80419: PPUSH
80420: CALL_OW 91
// Say ( Kozlov , D11-1-Ko-1 ) ;
80424: LD_EXP 24
80428: PPUSH
80429: LD_STRING D11-1-Ko-1
80431: PPUSH
80432: CALL_OW 88
// ForceSay ( Heike , D11-1-H-2 ) ;
80436: LD_EXP 9
80440: PPUSH
80441: LD_STRING D11-1-H-2
80443: PPUSH
80444: CALL_OW 91
// Say ( Kozlov , D11-1-Ko-2 ) ;
80448: LD_EXP 24
80452: PPUSH
80453: LD_STRING D11-1-Ko-2
80455: PPUSH
80456: CALL_OW 88
// DialogueOff ;
80460: CALL_OW 7
// exit ;
80464: GO 81234
// end ; 2 :
80466: GO 80774
80468: LD_INT 2
80470: DOUBLE
80471: EQUAL
80472: IFTRUE 80476
80474: GO 80675
80476: POP
// begin ForceSay ( Heike , D11-2-H-1 ) ;
80477: LD_EXP 9
80481: PPUSH
80482: LD_STRING D11-2-H-1
80484: PPUSH
80485: CALL_OW 91
// Say ( Kozlov , D11-2-Ko-1 ) ;
80489: LD_EXP 24
80493: PPUSH
80494: LD_STRING D11-2-Ko-1
80496: PPUSH
80497: CALL_OW 88
// ForceSay ( Heike , D11-2-H-2 ) ;
80501: LD_EXP 9
80505: PPUSH
80506: LD_STRING D11-2-H-2
80508: PPUSH
80509: CALL_OW 91
// Say ( Kozlov , D11-2-Ko-2 ) ;
80513: LD_EXP 24
80517: PPUSH
80518: LD_STRING D11-2-Ko-2
80520: PPUSH
80521: CALL_OW 88
// ForceSay ( Heike , D11-2-H-3 ) ;
80525: LD_EXP 9
80529: PPUSH
80530: LD_STRING D11-2-H-3
80532: PPUSH
80533: CALL_OW 91
// Say ( Kozlov , D11-2-Ko-3 ) ;
80537: LD_EXP 24
80541: PPUSH
80542: LD_STRING D11-2-Ko-3
80544: PPUSH
80545: CALL_OW 88
// ForceSay ( Heike , D11-2-H-4 ) ;
80549: LD_EXP 9
80553: PPUSH
80554: LD_STRING D11-2-H-4
80556: PPUSH
80557: CALL_OW 91
// Say ( Kozlov , D11-2-Ko-4 ) ;
80561: LD_EXP 24
80565: PPUSH
80566: LD_STRING D11-2-Ko-4
80568: PPUSH
80569: CALL_OW 88
// ForceSay ( Heike , D11-2-H-5 ) ;
80573: LD_EXP 9
80577: PPUSH
80578: LD_STRING D11-2-H-5
80580: PPUSH
80581: CALL_OW 91
// Say ( Kozlov , D11-2-Ko-5 ) ;
80585: LD_EXP 24
80589: PPUSH
80590: LD_STRING D11-2-Ko-5
80592: PPUSH
80593: CALL_OW 88
// ForceSay ( Heike , D11-2-H-6 ) ;
80597: LD_EXP 9
80601: PPUSH
80602: LD_STRING D11-2-H-6
80604: PPUSH
80605: CALL_OW 91
// dwait ( 0 0$2 ) ;
80609: LD_INT 70
80611: PPUSH
80612: CALL_OW 68
// Say ( Kozlov , D11-2-Ko-6a ) ;
80616: LD_EXP 24
80620: PPUSH
80621: LD_STRING D11-2-Ko-6a
80623: PPUSH
80624: CALL_OW 88
// SayRadio ( Farmer , D11-2-Fa-1 ) ;
80628: LD_EXP 21
80632: PPUSH
80633: LD_STRING D11-2-Fa-1
80635: PPUSH
80636: CALL_OW 94
// dwait ( 0 0$0.2 ) ;
80640: LD_INT 7
80642: PPUSH
80643: CALL_OW 68
// kozlov_gained = true ;
80647: LD_ADDR_EXP 140
80651: PUSH
80652: LD_INT 1
80654: ST_TO_ADDR
// SetSide ( Kozlov , you ) ;
80655: LD_EXP 24
80659: PPUSH
80660: LD_EXP 2
80664: PPUSH
80665: CALL_OW 235
// DialogueOff ;
80669: CALL_OW 7
// end ; 3 :
80673: GO 80774
80675: LD_INT 3
80677: DOUBLE
80678: EQUAL
80679: IFTRUE 80683
80681: GO 80773
80683: POP
// begin ForceSay ( Heike , D11-3-H-1 ) ;
80684: LD_EXP 9
80688: PPUSH
80689: LD_STRING D11-3-H-1
80691: PPUSH
80692: CALL_OW 91
// Say ( Kozlov , D11-3-Ko-1 ) ;
80696: LD_EXP 24
80700: PPUSH
80701: LD_STRING D11-3-Ko-1
80703: PPUSH
80704: CALL_OW 88
// ForceSay ( Heike , D11-3-H-2 ) ;
80708: LD_EXP 9
80712: PPUSH
80713: LD_STRING D11-3-H-2
80715: PPUSH
80716: CALL_OW 91
// Say ( Kozlov , D11-3-Ko-2 ) ;
80720: LD_EXP 24
80724: PPUSH
80725: LD_STRING D11-3-Ko-2
80727: PPUSH
80728: CALL_OW 88
// SayRadio ( Farmer , D11-3-Fa-1 ) ;
80732: LD_EXP 21
80736: PPUSH
80737: LD_STRING D11-3-Fa-1
80739: PPUSH
80740: CALL_OW 94
// ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , 1 , 0 0$0 ) ;
80744: LD_ADDR_EXP 98
80748: PUSH
80749: LD_EXP 98
80753: PPUSH
80754: LD_INT 1
80756: PPUSH
80757: LD_INT 0
80759: PPUSH
80760: CALL_OW 1
80764: ST_TO_ADDR
// DialogueOff ;
80765: CALL_OW 7
// exit ;
80769: GO 81234
// end ; end ;
80771: GO 80774
80773: POP
// RemoveHumanFromVariables ( 3 , Farmer , false , false ) ;
80774: LD_INT 3
80776: PPUSH
80777: LD_EXP 21
80781: PPUSH
80782: LD_INT 0
80784: PPUSH
80785: LD_INT 0
80787: PPUSH
80788: CALL 25867 0 4
// farmer_luring_used = true ;
80792: LD_ADDR_EXP 132
80796: PUSH
80797: LD_INT 1
80799: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
80800: LD_INT 35
80802: PPUSH
80803: CALL_OW 67
// if ai_teleporter [ 3 ] = 0 or IsDead ( Farmer ) then
80807: LD_EXP 46
80811: PUSH
80812: LD_INT 3
80814: ARRAY
80815: PUSH
80816: LD_INT 0
80818: EQUAL
80819: PUSH
80820: LD_EXP 21
80824: PPUSH
80825: CALL_OW 301
80829: OR
80830: IFFALSE 80834
// exit ;
80832: GO 81234
// if farmer_has_teleported then
80834: LD_EXP 131
80838: IFFALSE 80842
// break ;
80840: GO 80999
// if IsOk ( farmer_vehicle ) and GetSide ( farmer_vehicle ) = farmer_side and IsInUnit ( Farmer ) <> farmer_vehicle then
80842: LD_EXP 130
80846: PPUSH
80847: CALL_OW 302
80851: PUSH
80852: LD_EXP 130
80856: PPUSH
80857: CALL_OW 255
80861: PUSH
80862: LD_EXP 6
80866: EQUAL
80867: AND
80868: PUSH
80869: LD_EXP 21
80873: PPUSH
80874: CALL_OW 310
80878: PUSH
80879: LD_EXP 130
80883: NONEQUAL
80884: AND
80885: IFFALSE 80959
// begin case GetType ( IsInUnit ( Farmer ) ) of unit_vehicle :
80887: LD_EXP 21
80891: PPUSH
80892: CALL_OW 310
80896: PPUSH
80897: CALL_OW 247
80901: PUSH
80902: LD_INT 2
80904: DOUBLE
80905: EQUAL
80906: IFTRUE 80910
80908: GO 80922
80910: POP
// ComExitVehicle ( Farmer ) ; unit_building :
80911: LD_EXP 21
80915: PPUSH
80916: CALL_OW 121
80920: GO 80957
80922: LD_INT 3
80924: DOUBLE
80925: EQUAL
80926: IFTRUE 80930
80928: GO 80942
80930: POP
// ComExitBuilding ( Farmer ) ; else
80931: LD_EXP 21
80935: PPUSH
80936: CALL_OW 122
80940: GO 80957
80942: POP
// ComEnterUnit ( Farmer , farmer_vehicle ) ; end ;
80943: LD_EXP 21
80947: PPUSH
80948: LD_EXP 130
80952: PPUSH
80953: CALL_OW 120
// continue ;
80957: GO 80800
// end ; if not IsOk ( ai_teleporter [ 3 ] ) then
80959: LD_EXP 46
80963: PUSH
80964: LD_INT 3
80966: ARRAY
80967: PPUSH
80968: CALL_OW 302
80972: NOT
80973: IFFALSE 80977
// continue ;
80975: GO 80800
// ComEnterUnit ( Farmer , ai_teleporter [ 3 ] ) ;
80977: LD_EXP 21
80981: PPUSH
80982: LD_EXP 46
80986: PUSH
80987: LD_INT 3
80989: ARRAY
80990: PPUSH
80991: CALL_OW 120
// until false ;
80995: LD_INT 0
80997: IFFALSE 80800
// Wait ( 0 0$1.5 ) ;
80999: LD_INT 52
81001: PPUSH
81002: CALL_OW 67
// DialogueOn ;
81006: CALL_OW 6
// ForceSay ( Farmer , D11-2-Fa-2 ) ;
81010: LD_EXP 21
81014: PPUSH
81015: LD_STRING D11-2-Fa-2
81017: PPUSH
81018: CALL_OW 91
// DialogueOff ;
81022: CALL_OW 7
// repeat wait ( 0 0$1 ) ;
81026: LD_INT 35
81028: PPUSH
81029: CALL_OW 67
// if IsDead ( Farmer ) then
81033: LD_EXP 21
81037: PPUSH
81038: CALL_OW 301
81042: IFFALSE 81046
// exit ;
81044: GO 81234
// if IsOk ( ai_teleporter [ 1 ] ) then
81046: LD_EXP 46
81050: PUSH
81051: LD_INT 1
81053: ARRAY
81054: PPUSH
81055: CALL_OW 302
81059: IFFALSE 81081
// ComEnterUnit ( Farmer , ai_teleporter [ 1 ] ) else
81061: LD_EXP 21
81065: PPUSH
81066: LD_EXP 46
81070: PUSH
81071: LD_INT 1
81073: ARRAY
81074: PPUSH
81075: CALL_OW 120
81079: GO 81116
// ComMoveXY ( Farmer , ai_human_pullback_hex [ 3 ] [ 1 ] , ai_human_pullback_hex [ 3 ] [ 2 ] ) ;
81081: LD_EXP 21
81085: PPUSH
81086: LD_EXP 55
81090: PUSH
81091: LD_INT 3
81093: ARRAY
81094: PUSH
81095: LD_INT 1
81097: ARRAY
81098: PPUSH
81099: LD_EXP 55
81103: PUSH
81104: LD_INT 3
81106: ARRAY
81107: PUSH
81108: LD_INT 2
81110: ARRAY
81111: PPUSH
81112: CALL_OW 111
// until IsInArea ( Farmer , Farmer_base ) ;
81116: LD_EXP 21
81120: PPUSH
81121: LD_INT 9
81123: PPUSH
81124: CALL_OW 308
81128: IFFALSE 81026
// temp_list = ai_soldiers [ 3 ] ^ Farmer ;
81130: LD_ADDR_VAR 0 1
81134: PUSH
81135: LD_EXP 26
81139: PUSH
81140: LD_INT 3
81142: ARRAY
81143: PUSH
81144: LD_EXP 21
81148: ADD
81149: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , 3 , temp_list ) ;
81150: LD_ADDR_EXP 26
81154: PUSH
81155: LD_EXP 26
81159: PPUSH
81160: LD_INT 3
81162: PPUSH
81163: LD_VAR 0 1
81167: PPUSH
81168: CALL_OW 1
81172: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
81173: LD_INT 35
81175: PPUSH
81176: CALL_OW 67
// if IsDead ( farmer_vehicle ) then
81180: LD_EXP 130
81184: PPUSH
81185: CALL_OW 301
81189: IFFALSE 81193
// exit ;
81191: GO 81234
// until not See ( you , farmer_vehicle ) and IsDrivenBy ( farmer_vehicle ) = 0 ;
81193: LD_EXP 2
81197: PPUSH
81198: LD_EXP 130
81202: PPUSH
81203: CALL_OW 292
81207: NOT
81208: PUSH
81209: LD_EXP 130
81213: PPUSH
81214: CALL_OW 311
81218: PUSH
81219: LD_INT 0
81221: EQUAL
81222: AND
81223: IFFALSE 81173
// DestroyUnit ( farmer_vehicle ) ;
81225: LD_EXP 130
81229: PPUSH
81230: CALL_OW 65
// end ;
81234: PPOPN 1
81236: END
// every 0 0$1 + 0 0$0.8 do var temp_list , folks_list , i , k , dist , h , g ; var waypoints ;
81237: GO 81239
81239: DISABLE
81240: LD_INT 0
81242: PPUSH
81243: PPUSH
81244: PPUSH
81245: PPUSH
81246: PPUSH
81247: PPUSH
81248: PPUSH
81249: PPUSH
// begin repeat wait ( 0 0$1 ) ;
81250: LD_INT 35
81252: PPUSH
81253: CALL_OW 67
// until IsDead ( Farmer ) ;
81257: LD_EXP 21
81261: PPUSH
81262: CALL_OW 301
81266: IFFALSE 81250
// k = 0 ;
81268: LD_ADDR_VAR 0 4
81272: PUSH
81273: LD_INT 0
81275: ST_TO_ADDR
// for i in ai_buildings_locations [ 3 ] do
81276: LD_ADDR_VAR 0 3
81280: PUSH
81281: LD_EXP 47
81285: PUSH
81286: LD_INT 3
81288: ARRAY
81289: PUSH
81290: FOR_IN
81291: IFFALSE 81375
// begin g = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
81293: LD_ADDR_VAR 0 7
81297: PUSH
81298: LD_VAR 0 3
81302: PUSH
81303: LD_INT 1
81305: ARRAY
81306: PPUSH
81307: LD_VAR 0 3
81311: PUSH
81312: LD_INT 2
81314: ARRAY
81315: PPUSH
81316: CALL_OW 428
81320: ST_TO_ADDR
// if not IsOk ( g ) or GetType ( g ) <> unit_building or IsConstructed ( g ) then
81321: LD_VAR 0 7
81325: PPUSH
81326: CALL_OW 302
81330: NOT
81331: PUSH
81332: LD_VAR 0 7
81336: PPUSH
81337: CALL_OW 247
81341: PUSH
81342: LD_INT 3
81344: NONEQUAL
81345: OR
81346: PUSH
81347: LD_VAR 0 7
81351: PPUSH
81352: CALL_OW 304
81356: OR
81357: IFFALSE 81373
// k = k + 1 ;
81359: LD_ADDR_VAR 0 4
81363: PUSH
81364: LD_VAR 0 4
81368: PUSH
81369: LD_INT 1
81371: PLUS
81372: ST_TO_ADDR
// end ;
81373: GO 81290
81375: POP
81376: POP
// num_damaged_or_destroyed_buildings_farmer_base = k ;
81377: LD_ADDR_EXP 133
81381: PUSH
81382: LD_VAR 0 4
81386: ST_TO_ADDR
// wait ( 0 0$2 ) ;
81387: LD_INT 70
81389: PPUSH
81390: CALL_OW 67
// for i in ai_imported_units [ 3 ] do
81394: LD_ADDR_VAR 0 3
81398: PUSH
81399: LD_EXP 82
81403: PUSH
81404: LD_INT 3
81406: ARRAY
81407: PUSH
81408: FOR_IN
81409: IFFALSE 81425
// RemoveUnitFromExportImport ( 3 , i ) ;
81411: LD_INT 3
81413: PPUSH
81414: LD_VAR 0 3
81418: PPUSH
81419: CALL 26810 0 2
81423: GO 81408
81425: POP
81426: POP
// ai_bases = ai_bases diff 3 ;
81427: LD_ADDR_EXP 25
81431: PUSH
81432: LD_EXP 25
81436: PUSH
81437: LD_INT 3
81439: DIFF
81440: ST_TO_ADDR
// folks_list = FilterAllUnits ( [ [ f_side , farmer_side ] , [ f_type , unit_human ] ] ) ;
81441: LD_ADDR_VAR 0 2
81445: PUSH
81446: LD_INT 22
81448: PUSH
81449: LD_EXP 6
81453: PUSH
81454: EMPTY
81455: LIST
81456: LIST
81457: PUSH
81458: LD_INT 21
81460: PUSH
81461: LD_INT 1
81463: PUSH
81464: EMPTY
81465: LIST
81466: LIST
81467: PUSH
81468: EMPTY
81469: LIST
81470: LIST
81471: PPUSH
81472: CALL_OW 69
81476: ST_TO_ADDR
// temp_list = UnitFilter ( folks_list , [ f_ok ] ) diff ( GetApes ( farmer_side ) ^ Gordon ^ Willard ^ Kozlov ) ;
81477: LD_ADDR_VAR 0 1
81481: PUSH
81482: LD_VAR 0 2
81486: PPUSH
81487: LD_INT 50
81489: PUSH
81490: EMPTY
81491: LIST
81492: PPUSH
81493: CALL_OW 72
81497: PUSH
81498: LD_EXP 6
81502: PPUSH
81503: CALL 73757 0 1
81507: PUSH
81508: LD_EXP 22
81512: ADD
81513: PUSH
81514: LD_EXP 23
81518: ADD
81519: PUSH
81520: LD_EXP 24
81524: ADD
81525: DIFF
81526: ST_TO_ADDR
// if temp_list > 0 then
81527: LD_VAR 0 1
81531: PUSH
81532: LD_INT 0
81534: GREATER
81535: IFFALSE 81598
// begin DialogueOn ;
81537: CALL_OW 6
// if GetSex ( temp_list [ 1 ] ) = sex_male then
81541: LD_VAR 0 1
81545: PUSH
81546: LD_INT 1
81548: ARRAY
81549: PPUSH
81550: CALL_OW 258
81554: PUSH
81555: LD_INT 1
81557: EQUAL
81558: IFFALSE 81578
// SayRadio ( temp_list [ 1 ] , D13-SomeM-1 ) else
81560: LD_VAR 0 1
81564: PUSH
81565: LD_INT 1
81567: ARRAY
81568: PPUSH
81569: LD_STRING D13-SomeM-1
81571: PPUSH
81572: CALL_OW 94
81576: GO 81594
// SayRadio ( temp_list [ 1 ] , D13-SomeF-1 ) ;
81578: LD_VAR 0 1
81582: PUSH
81583: LD_INT 1
81585: ARRAY
81586: PPUSH
81587: LD_STRING D13-SomeF-1
81589: PPUSH
81590: CALL_OW 94
// DialogueOff ;
81594: CALL_OW 7
// end ; ChangeMissionObjectives ( MOutRecapture ) ;
81598: LD_STRING MOutRecapture
81600: PPUSH
81601: CALL_OW 337
// farmer_defeated = true ;
81605: LD_ADDR_EXP 136
81609: PUSH
81610: LD_INT 1
81612: ST_TO_ADDR
// waypoints = [ [ 101 , 42 ] , [ 90 , 33 ] , [ 78 , 23 ] , [ 67 , 14 ] , [ 58 , 6 ] ] ;
81613: LD_ADDR_VAR 0 8
81617: PUSH
81618: LD_INT 101
81620: PUSH
81621: LD_INT 42
81623: PUSH
81624: EMPTY
81625: LIST
81626: LIST
81627: PUSH
81628: LD_INT 90
81630: PUSH
81631: LD_INT 33
81633: PUSH
81634: EMPTY
81635: LIST
81636: LIST
81637: PUSH
81638: LD_INT 78
81640: PUSH
81641: LD_INT 23
81643: PUSH
81644: EMPTY
81645: LIST
81646: LIST
81647: PUSH
81648: LD_INT 67
81650: PUSH
81651: LD_INT 14
81653: PUSH
81654: EMPTY
81655: LIST
81656: LIST
81657: PUSH
81658: LD_INT 58
81660: PUSH
81661: LD_INT 6
81663: PUSH
81664: EMPTY
81665: LIST
81666: LIST
81667: PUSH
81668: EMPTY
81669: LIST
81670: LIST
81671: LIST
81672: LIST
81673: LIST
81674: ST_TO_ADDR
// repeat wait ( 0 0$0.6 ) ;
81675: LD_INT 21
81677: PPUSH
81678: CALL_OW 67
// folks_list = UnitFilter ( folks_list , [ [ f_placed ] , [ f_alive ] ] ) ;
81682: LD_ADDR_VAR 0 2
81686: PUSH
81687: LD_VAR 0 2
81691: PPUSH
81692: LD_INT 52
81694: PUSH
81695: EMPTY
81696: LIST
81697: PUSH
81698: LD_INT 51
81700: PUSH
81701: EMPTY
81702: LIST
81703: PUSH
81704: EMPTY
81705: LIST
81706: LIST
81707: PPUSH
81708: CALL_OW 72
81712: ST_TO_ADDR
// if kozlov_captured then
81713: LD_EXP 126
81717: IFFALSE 81735
// folks_list = folks_list diff Kozlov ;
81719: LD_ADDR_VAR 0 2
81723: PUSH
81724: LD_VAR 0 2
81728: PUSH
81729: LD_EXP 24
81733: DIFF
81734: ST_TO_ADDR
// if folks_list = 0 then
81735: LD_VAR 0 2
81739: PUSH
81740: LD_INT 0
81742: EQUAL
81743: IFFALSE 81747
// exit ;
81745: GO 82097
// for i in folks_list do
81747: LD_ADDR_VAR 0 3
81751: PUSH
81752: LD_VAR 0 2
81756: PUSH
81757: FOR_IN
81758: IFFALSE 82091
// begin if not IsInArea ( i , farmer_escape_area ) then
81760: LD_VAR 0 3
81764: PPUSH
81765: LD_INT 28
81767: PPUSH
81768: CALL_OW 308
81772: NOT
81773: IFFALSE 82022
// begin case GetType ( IsInUnit ( i ) ) of unit_vehicle :
81775: LD_VAR 0 3
81779: PPUSH
81780: CALL_OW 310
81784: PPUSH
81785: CALL_OW 247
81789: PUSH
81790: LD_INT 2
81792: DOUBLE
81793: EQUAL
81794: IFTRUE 81798
81796: GO 81810
81798: POP
// ComExitVehicle ( i ) ; unit_building :
81799: LD_VAR 0 3
81803: PPUSH
81804: CALL_OW 121
81808: GO 82020
81810: LD_INT 3
81812: DOUBLE
81813: EQUAL
81814: IFTRUE 81818
81816: GO 81830
81818: POP
// ComExitBuilding ( i ) ; else
81819: LD_VAR 0 3
81823: PPUSH
81824: CALL_OW 122
81828: GO 82020
81830: POP
// begin dist = 999999 ;
81831: LD_ADDR_VAR 0 5
81835: PUSH
81836: LD_INT 999999
81838: ST_TO_ADDR
// h = - 1 ;
81839: LD_ADDR_VAR 0 6
81843: PUSH
81844: LD_INT 1
81846: NEG
81847: ST_TO_ADDR
// for g = 1 to waypoints do
81848: LD_ADDR_VAR 0 7
81852: PUSH
81853: DOUBLE
81854: LD_INT 1
81856: DEC
81857: ST_TO_ADDR
81858: LD_VAR 0 8
81862: PUSH
81863: FOR_TO
81864: IFFALSE 81945
// begin k = GetDistUnitXY ( i , waypoints [ g ] [ 1 ] , waypoints [ g ] [ 2 ] ) ;
81866: LD_ADDR_VAR 0 4
81870: PUSH
81871: LD_VAR 0 3
81875: PPUSH
81876: LD_VAR 0 8
81880: PUSH
81881: LD_VAR 0 7
81885: ARRAY
81886: PUSH
81887: LD_INT 1
81889: ARRAY
81890: PPUSH
81891: LD_VAR 0 8
81895: PUSH
81896: LD_VAR 0 7
81900: ARRAY
81901: PUSH
81902: LD_INT 2
81904: ARRAY
81905: PPUSH
81906: CALL_OW 297
81910: ST_TO_ADDR
// if k < dist then
81911: LD_VAR 0 4
81915: PUSH
81916: LD_VAR 0 5
81920: LESS
81921: IFFALSE 81943
// begin dist = k ;
81923: LD_ADDR_VAR 0 5
81927: PUSH
81928: LD_VAR 0 4
81932: ST_TO_ADDR
// h = g ;
81933: LD_ADDR_VAR 0 6
81937: PUSH
81938: LD_VAR 0 7
81942: ST_TO_ADDR
// end ; end ;
81943: GO 81863
81945: POP
81946: POP
// if h = waypoints then
81947: LD_VAR 0 6
81951: PUSH
81952: LD_VAR 0 8
81956: EQUAL
81957: IFFALSE 81973
// ComMoveToArea ( i , farmer_escape_area ) else
81959: LD_VAR 0 3
81963: PPUSH
81964: LD_INT 28
81966: PPUSH
81967: CALL_OW 113
81971: GO 82020
// ComMoveXY ( i , waypoints [ h + 1 ] [ 1 ] , waypoints [ h + 1 ] [ 2 ] ) ;
81973: LD_VAR 0 3
81977: PPUSH
81978: LD_VAR 0 8
81982: PUSH
81983: LD_VAR 0 6
81987: PUSH
81988: LD_INT 1
81990: PLUS
81991: ARRAY
81992: PUSH
81993: LD_INT 1
81995: ARRAY
81996: PPUSH
81997: LD_VAR 0 8
82001: PUSH
82002: LD_VAR 0 6
82006: PUSH
82007: LD_INT 1
82009: PLUS
82010: ARRAY
82011: PUSH
82012: LD_INT 2
82014: ARRAY
82015: PPUSH
82016: CALL_OW 111
// end ; end ; end else
82020: GO 82089
// begin if i in [ Gordon , Willard , Kozlov ] then
82022: LD_VAR 0 3
82026: PUSH
82027: LD_EXP 22
82031: PUSH
82032: LD_EXP 23
82036: PUSH
82037: LD_EXP 24
82041: PUSH
82042: EMPTY
82043: LIST
82044: LIST
82045: LIST
82046: IN
82047: IFFALSE 82080
// begin RemoveUnit ( i ) ;
82049: LD_VAR 0 3
82053: PPUSH
82054: CALL_OW 64
// if i = Kozlov then
82058: LD_VAR 0 3
82062: PUSH
82063: LD_EXP 24
82067: EQUAL
82068: IFFALSE 82078
// kozlov_escaped = true ;
82070: LD_ADDR_EXP 128
82074: PUSH
82075: LD_INT 1
82077: ST_TO_ADDR
// end else
82078: GO 82089
// DestroyUnit ( i ) ;
82080: LD_VAR 0 3
82084: PPUSH
82085: CALL_OW 65
// end ; end ;
82089: GO 81757
82091: POP
82092: POP
// until false ;
82093: LD_INT 0
82095: IFFALSE 81675
// end ; end_of_file
82097: PPOPN 8
82099: END
// every 0 0$1 + 0 0$0.2 trigger russians_defeated and farmer_defeated and ( IsDead ( Kozlov ) or kozlov_captured or kozlov_escaped or kozlov_gained ) do
82100: LD_EXP 135
82104: PUSH
82105: LD_EXP 136
82109: AND
82110: PUSH
82111: LD_EXP 24
82115: PPUSH
82116: CALL_OW 301
82120: PUSH
82121: LD_EXP 126
82125: OR
82126: PUSH
82127: LD_EXP 128
82131: OR
82132: PUSH
82133: LD_EXP 140
82137: OR
82138: AND
82139: IFFALSE 82148
82141: GO 82143
82143: DISABLE
// begin EndMission ;
82144: CALL 82149 0 0
// end ;
82148: END
// function EndMission ; var val , all_list , un_list , name_list ; var i , temp_list ; begin
82149: LD_INT 0
82151: PPUSH
82152: PPUSH
82153: PPUSH
82154: PPUSH
82155: PPUSH
82156: PPUSH
82157: PPUSH
// if time_determined_situation = 1 then
82158: LD_EXP 134
82162: PUSH
82163: LD_INT 1
82165: EQUAL
82166: IFFALSE 82178
// val = 1 else
82168: LD_ADDR_VAR 0 2
82172: PUSH
82173: LD_INT 1
82175: ST_TO_ADDR
82176: GO 82187
// val = - 1 ;
82178: LD_ADDR_VAR 0 2
82182: PUSH
82183: LD_INT 1
82185: NEG
82186: ST_TO_ADDR
// AddMedal ( Breakthrough , val ) ;
82187: LD_STRING Breakthrough
82189: PPUSH
82190: LD_VAR 0 2
82194: PPUSH
82195: CALL_OW 101
// if kozlov_captured or kozlov_gained then
82199: LD_EXP 126
82203: PUSH
82204: LD_EXP 140
82208: OR
82209: IFFALSE 82221
// val = 1 else
82211: LD_ADDR_VAR 0 2
82215: PUSH
82216: LD_INT 1
82218: ST_TO_ADDR
82219: GO 82269
// if kozlov_escaped then
82221: LD_EXP 128
82225: IFFALSE 82238
// val = - 1 else
82227: LD_ADDR_VAR 0 2
82231: PUSH
82232: LD_INT 1
82234: NEG
82235: ST_TO_ADDR
82236: GO 82269
// if IsDead ( Kozlov ) then
82238: LD_EXP 24
82242: PPUSH
82243: CALL_OW 301
82247: IFFALSE 82260
// val = - 2 else
82249: LD_ADDR_VAR 0 2
82253: PUSH
82254: LD_INT 2
82256: NEG
82257: ST_TO_ADDR
82258: GO 82269
// val = - 3 ;
82260: LD_ADDR_VAR 0 2
82264: PUSH
82265: LD_INT 3
82267: NEG
82268: ST_TO_ADDR
// AddMedal ( KozlovCapture , val ) ;
82269: LD_STRING KozlovCapture
82271: PPUSH
82272: LD_VAR 0 2
82276: PPUSH
82277: CALL_OW 101
// if num_damaged_or_destroyed_buildings_farmer_base = 0 then
82281: LD_EXP 133
82285: PUSH
82286: LD_INT 0
82288: EQUAL
82289: IFFALSE 82301
// val = 1 else
82291: LD_ADDR_VAR 0 2
82295: PUSH
82296: LD_INT 1
82298: ST_TO_ADDR
82299: GO 82330
// if num_damaged_or_destroyed_buildings_farmer_base <= 5 then
82301: LD_EXP 133
82305: PUSH
82306: LD_INT 5
82308: LESSEQUAL
82309: IFFALSE 82321
// val = 2 else
82311: LD_ADDR_VAR 0 2
82315: PUSH
82316: LD_INT 2
82318: ST_TO_ADDR
82319: GO 82330
// val = - 1 ;
82321: LD_ADDR_VAR 0 2
82325: PUSH
82326: LD_INT 1
82328: NEG
82329: ST_TO_ADDR
// AddMedal ( MinimalDamage , val ) ;
82330: LD_STRING MinimalDamage
82332: PPUSH
82333: LD_VAR 0 2
82337: PPUSH
82338: CALL_OW 101
// GiveMedals ( Medals ) ;
82342: LD_STRING Medals
82344: PPUSH
82345: CALL_OW 102
// SaveVariable ( kozlov_gained , Kozlov_gained_14a_cont2 ) ;
82349: LD_EXP 140
82353: PPUSH
82354: LD_STRING Kozlov_gained_14a_cont2
82356: PPUSH
82357: CALL_OW 39
// SaveVariable ( kozlov_captured , Kozlov_captured_14a_cont2 ) ;
82361: LD_EXP 126
82365: PPUSH
82366: LD_STRING Kozlov_captured_14a_cont2
82368: PPUSH
82369: CALL_OW 39
// SaveVariable ( kozlov_escaped , Kozlov_escaped_14a_cont2 ) ;
82373: LD_EXP 128
82377: PPUSH
82378: LD_STRING Kozlov_escaped_14a_cont2
82380: PPUSH
82381: CALL_OW 39
// SaveVariable ( val > - 1 , Base_OK_14a_cont2 ) ;
82385: LD_VAR 0 2
82389: PUSH
82390: LD_INT 1
82392: NEG
82393: GREATER
82394: PPUSH
82395: LD_STRING Base_OK_14a_cont2
82397: PPUSH
82398: CALL_OW 39
// temp_list = [ ] ;
82402: LD_ADDR_VAR 0 7
82406: PUSH
82407: EMPTY
82408: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] ] ) do
82409: LD_ADDR_VAR 0 6
82413: PUSH
82414: LD_INT 22
82416: PUSH
82417: LD_EXP 2
82421: PUSH
82422: EMPTY
82423: LIST
82424: LIST
82425: PUSH
82426: LD_INT 21
82428: PUSH
82429: LD_INT 3
82431: PUSH
82432: EMPTY
82433: LIST
82434: LIST
82435: PUSH
82436: EMPTY
82437: LIST
82438: LIST
82439: PPUSH
82440: CALL_OW 69
82444: PUSH
82445: FOR_IN
82446: IFFALSE 82553
// temp_list = Insert ( temp_list , 1 , [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , GetBWeapon ( i ) ] ) ;
82448: LD_ADDR_VAR 0 7
82452: PUSH
82453: LD_VAR 0 7
82457: PPUSH
82458: LD_INT 1
82460: PPUSH
82461: LD_VAR 0 6
82465: PPUSH
82466: CALL_OW 250
82470: PUSH
82471: LD_VAR 0 6
82475: PPUSH
82476: CALL_OW 251
82480: PUSH
82481: LD_VAR 0 6
82485: PPUSH
82486: CALL_OW 254
82490: PUSH
82491: LD_VAR 0 6
82495: PPUSH
82496: CALL_OW 266
82500: PUSH
82501: LD_VAR 0 6
82505: PPUSH
82506: LD_INT 1
82508: PPUSH
82509: CALL_OW 268
82513: PUSH
82514: LD_VAR 0 6
82518: PPUSH
82519: LD_INT 2
82521: PPUSH
82522: CALL_OW 268
82526: PUSH
82527: LD_VAR 0 6
82531: PPUSH
82532: CALL_OW 269
82536: PUSH
82537: EMPTY
82538: LIST
82539: LIST
82540: LIST
82541: LIST
82542: LIST
82543: LIST
82544: LIST
82545: PPUSH
82546: CALL_OW 2
82550: ST_TO_ADDR
82551: GO 82445
82553: POP
82554: POP
// SaveVariable ( temp_list , Player_buildings_14a_cont2 ) ;
82555: LD_VAR 0 7
82559: PPUSH
82560: LD_STRING Player_buildings_14a_cont2
82562: PPUSH
82563: CALL_OW 39
// all_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_alive ] ] ) diff ( GetApes ( you ) ^ Kozlov ) ;
82567: LD_ADDR_VAR 0 3
82571: PUSH
82572: LD_INT 22
82574: PUSH
82575: LD_EXP 2
82579: PUSH
82580: EMPTY
82581: LIST
82582: LIST
82583: PUSH
82584: LD_INT 21
82586: PUSH
82587: LD_INT 1
82589: PUSH
82590: EMPTY
82591: LIST
82592: LIST
82593: PUSH
82594: LD_INT 51
82596: PUSH
82597: EMPTY
82598: LIST
82599: PUSH
82600: EMPTY
82601: LIST
82602: LIST
82603: LIST
82604: PPUSH
82605: CALL_OW 69
82609: PUSH
82610: LD_EXP 2
82614: PPUSH
82615: CALL 73757 0 1
82619: PUSH
82620: LD_EXP 24
82624: ADD
82625: DIFF
82626: ST_TO_ADDR
// RewardPeople ( all_list ) ;
82627: LD_VAR 0 3
82631: PPUSH
82632: CALL_OW 43
// all_list = all_list union UnitFilter ( hiding_player_units , [ f_alive ] ) ;
82636: LD_ADDR_VAR 0 3
82640: PUSH
82641: LD_VAR 0 3
82645: PUSH
82646: LD_EXP 122
82650: PPUSH
82651: LD_INT 51
82653: PUSH
82654: EMPTY
82655: LIST
82656: PPUSH
82657: CALL_OW 72
82661: UNION
82662: ST_TO_ADDR
// SaveCharacters ( Heike , Heike_14a_cont2 ) ;
82663: LD_EXP 9
82667: PPUSH
82668: LD_STRING Heike_14a_cont2
82670: PPUSH
82671: CALL_OW 38
// un_list = [ Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis , Khattam ] ;
82675: LD_ADDR_VAR 0 4
82679: PUSH
82680: LD_EXP 10
82684: PUSH
82685: LD_EXP 11
82689: PUSH
82690: LD_EXP 12
82694: PUSH
82695: LD_EXP 13
82699: PUSH
82700: LD_EXP 14
82704: PUSH
82705: LD_EXP 15
82709: PUSH
82710: LD_EXP 16
82714: PUSH
82715: LD_EXP 17
82719: PUSH
82720: LD_EXP 18
82724: PUSH
82725: LD_EXP 19
82729: PUSH
82730: LD_EXP 20
82734: PUSH
82735: EMPTY
82736: LIST
82737: LIST
82738: LIST
82739: LIST
82740: LIST
82741: LIST
82742: LIST
82743: LIST
82744: LIST
82745: LIST
82746: LIST
82747: ST_TO_ADDR
// name_list = [ Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis , Khattam ] ;
82748: LD_ADDR_VAR 0 5
82752: PUSH
82753: LD_STRING Olaf
82755: PUSH
82756: LD_STRING Sonya
82758: PUSH
82759: LD_STRING Oswald
82761: PUSH
82762: LD_STRING Ralph
82764: PUSH
82765: LD_STRING Kowalski
82767: PUSH
82768: LD_STRING Suze
82770: PUSH
82771: LD_STRING MarkB
82773: PUSH
82774: LD_STRING Kurt
82776: PUSH
82777: LD_STRING Martin
82779: PUSH
82780: LD_STRING Louis
82782: PUSH
82783: LD_STRING Khattam
82785: PUSH
82786: EMPTY
82787: LIST
82788: LIST
82789: LIST
82790: LIST
82791: LIST
82792: LIST
82793: LIST
82794: LIST
82795: LIST
82796: LIST
82797: LIST
82798: ST_TO_ADDR
// for val = 1 to un_list do
82799: LD_ADDR_VAR 0 2
82803: PUSH
82804: DOUBLE
82805: LD_INT 1
82807: DEC
82808: ST_TO_ADDR
82809: LD_VAR 0 4
82813: PUSH
82814: FOR_TO
82815: IFFALSE 82867
// if un_list [ val ] in all_list then
82817: LD_VAR 0 4
82821: PUSH
82822: LD_VAR 0 2
82826: ARRAY
82827: PUSH
82828: LD_VAR 0 3
82832: IN
82833: IFFALSE 82865
// SaveCharacters ( un_list [ val ] , name_list [ val ] & _14a_cont2 ) ;
82835: LD_VAR 0 4
82839: PUSH
82840: LD_VAR 0 2
82844: ARRAY
82845: PPUSH
82846: LD_VAR 0 5
82850: PUSH
82851: LD_VAR 0 2
82855: ARRAY
82856: PUSH
82857: LD_STRING _14a_cont2
82859: STR
82860: PPUSH
82861: CALL_OW 38
82865: GO 82814
82867: POP
82868: POP
// SaveCharacters ( all_list diff ( un_list ^ Heike ) , Others_14a_cont2 ) ;
82869: LD_VAR 0 3
82873: PUSH
82874: LD_VAR 0 4
82878: PUSH
82879: LD_EXP 9
82883: ADD
82884: DIFF
82885: PPUSH
82886: LD_STRING Others_14a_cont2
82888: PPUSH
82889: CALL_OW 38
// if GetLives ( Gordon ) > 0 then
82893: LD_EXP 22
82897: PPUSH
82898: CALL_OW 256
82902: PUSH
82903: LD_INT 0
82905: GREATER
82906: IFFALSE 82920
// SaveCharacters ( Gordon , Gordon_14a_cont2 ) ;
82908: LD_EXP 22
82912: PPUSH
82913: LD_STRING Gordon_14a_cont2
82915: PPUSH
82916: CALL_OW 38
// if GetLives ( Willard ) > 0 then
82920: LD_EXP 23
82924: PPUSH
82925: CALL_OW 256
82929: PUSH
82930: LD_INT 0
82932: GREATER
82933: IFFALSE 82947
// SaveCharacters ( Willard , Willard_14a_cont2 ) ;
82935: LD_EXP 23
82939: PPUSH
82940: LD_STRING Willard_14a_cont2
82942: PPUSH
82943: CALL_OW 38
// if GetLives ( Kozlov ) > 0 then
82947: LD_EXP 24
82951: PPUSH
82952: CALL_OW 256
82956: PUSH
82957: LD_INT 0
82959: GREATER
82960: IFFALSE 82974
// SaveCharacters ( Kozlov , Kozlov_14a_cont2 ) ;
82962: LD_EXP 24
82966: PPUSH
82967: LD_STRING Kozlov_14a_cont2
82969: PPUSH
82970: CALL_OW 38
// YouWin ;
82974: CALL_OW 103
// end ;
82978: LD_VAR 0 1
82982: RET
