// export testing ; export you , nature , legion , legion_alt , americans , mines_side , you_alt , you_alt_escaping ; export Heike , Sonya , Oswald , Ralph , Kowalski , Evelyn , Olaf , Dwayne , Aviradze , Swansson , Khattam , Makise , Gonzo ; export Abdul , Hugh ; export Ortlieb ; 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 , ai_sib_bomb_fact ; export ai_sib_bomb_fact_location , ai_sib_bomb_mechanics ; 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_vehicle_attack_delay , ai_human_attack_delay , 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_locations , ai_dismantle_these_buildings ; export ai_taufield_vehicles , ai_implosion_vehicles , ai_attack_strategy , ai_behemoths , ai_behemoth_parking_hexes , ai_behemoth_construction_hex ; export ai_new_attack_commencing , ai_sib_bomb_vehicles , 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 , ai_sib_bomb_used_time_matrix , ai_sib_bomb_contamination_duration ; export ai_defence_replace_mines_centerhexes , ai_defence_mines_hexes , ai_defence_max_num_replace_mines , ai_mine_guys , ai_defence_replace_mines_hexes ; export cargo_bay_destroyed_in_unsafe_area , legion_prisoners , legion_base_captured , legion_prisoners_shot_to_red , vehicle_captured_events ; export may_attack_americans , num_legion_prisoners , current_attack_num , remote_vehicles_impossible , sib_imp_veh_dismantled ; export heike_reinforcements_people , heike_reinforcements_vehicles , contaminating_scientist , contaminating_scientist_went_to_lab ; export traveling_humans , legion_main_depot_resources ; 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 ] ;
  16: LD_ADDR_EXP 26
  20: PUSH
  21: LD_INT 1
  23: PUSH
  24: LD_INT 2
  26: PUSH
  27: EMPTY
  28: LIST
  29: LIST
  30: ST_TO_ADDR
// ai_soldiers = [ [ ] , [ ] , [ ] , [ ] ] ;
  31: LD_ADDR_EXP 27
  35: PUSH
  36: EMPTY
  37: PUSH
  38: EMPTY
  39: PUSH
  40: EMPTY
  41: PUSH
  42: EMPTY
  43: PUSH
  44: EMPTY
  45: LIST
  46: LIST
  47: LIST
  48: LIST
  49: ST_TO_ADDR
// ai_attacking_soldiers = [ [ ] , [ ] , [ ] , [ ] ] ;
  50: LD_ADDR_EXP 28
  54: PUSH
  55: EMPTY
  56: PUSH
  57: EMPTY
  58: PUSH
  59: EMPTY
  60: PUSH
  61: EMPTY
  62: PUSH
  63: EMPTY
  64: LIST
  65: LIST
  66: LIST
  67: LIST
  68: ST_TO_ADDR
// ai_excepted_soldiers = [ [ ] , [ ] , [ ] , [ ] ] ;
  69: LD_ADDR_EXP 35
  73: PUSH
  74: EMPTY
  75: PUSH
  76: EMPTY
  77: PUSH
  78: EMPTY
  79: PUSH
  80: EMPTY
  81: PUSH
  82: EMPTY
  83: LIST
  84: LIST
  85: LIST
  86: LIST
  87: ST_TO_ADDR
// ai_engineers = [ [ ] , [ ] , [ ] , [ ] ] ;
  88: LD_ADDR_EXP 29
  92: PUSH
  93: EMPTY
  94: PUSH
  95: EMPTY
  96: PUSH
  97: EMPTY
  98: PUSH
  99: EMPTY
 100: PUSH
 101: EMPTY
 102: LIST
 103: LIST
 104: LIST
 105: LIST
 106: ST_TO_ADDR
// ai_mechanics_defend = [ [ ] , [ ] , [ ] , [ ] ] ;
 107: LD_ADDR_EXP 30
 111: PUSH
 112: EMPTY
 113: PUSH
 114: EMPTY
 115: PUSH
 116: EMPTY
 117: PUSH
 118: EMPTY
 119: PUSH
 120: EMPTY
 121: LIST
 122: LIST
 123: LIST
 124: LIST
 125: ST_TO_ADDR
// ai_mechanics_attack = [ [ ] , [ ] , [ ] , [ ] ] ;
 126: LD_ADDR_EXP 31
 130: PUSH
 131: EMPTY
 132: PUSH
 133: EMPTY
 134: PUSH
 135: EMPTY
 136: PUSH
 137: EMPTY
 138: PUSH
 139: EMPTY
 140: LIST
 141: LIST
 142: LIST
 143: LIST
 144: ST_TO_ADDR
// ai_scientists = [ [ ] , [ ] , [ ] , [ ] ] ;
 145: LD_ADDR_EXP 32
 149: PUSH
 150: EMPTY
 151: PUSH
 152: EMPTY
 153: PUSH
 154: EMPTY
 155: PUSH
 156: EMPTY
 157: PUSH
 158: EMPTY
 159: LIST
 160: LIST
 161: LIST
 162: LIST
 163: ST_TO_ADDR
// ai_attacking_scientists = [ [ ] , [ ] , [ ] , [ ] ] ;
 164: LD_ADDR_EXP 33
 168: PUSH
 169: EMPTY
 170: PUSH
 171: EMPTY
 172: PUSH
 173: EMPTY
 174: PUSH
 175: EMPTY
 176: PUSH
 177: EMPTY
 178: LIST
 179: LIST
 180: LIST
 181: LIST
 182: ST_TO_ADDR
// ai_apemen_engineers = [ [ ] , [ ] , [ ] , [ ] ] ;
 183: LD_ADDR_EXP 34
 187: PUSH
 188: EMPTY
 189: PUSH
 190: EMPTY
 191: PUSH
 192: EMPTY
 193: PUSH
 194: EMPTY
 195: PUSH
 196: EMPTY
 197: LIST
 198: LIST
 199: LIST
 200: LIST
 201: ST_TO_ADDR
// ai_sib_bomb_mechanics = [ [ ] , [ ] , [ ] , [ ] ] ;
 202: LD_ADDR_EXP 52
 206: PUSH
 207: EMPTY
 208: PUSH
 209: EMPTY
 210: PUSH
 211: EMPTY
 212: PUSH
 213: EMPTY
 214: PUSH
 215: EMPTY
 216: LIST
 217: LIST
 218: LIST
 219: LIST
 220: ST_TO_ADDR
// ai_depot = [ 0 , 0 , 0 , 0 ] ;
 221: LD_ADDR_EXP 36
 225: PUSH
 226: LD_INT 0
 228: PUSH
 229: LD_INT 0
 231: PUSH
 232: LD_INT 0
 234: PUSH
 235: LD_INT 0
 237: PUSH
 238: EMPTY
 239: LIST
 240: LIST
 241: LIST
 242: LIST
 243: ST_TO_ADDR
// ai_labs = [ [ ] , [ ] , [ ] , [ ] ] ;
 244: LD_ADDR_EXP 37
 248: PUSH
 249: EMPTY
 250: PUSH
 251: EMPTY
 252: PUSH
 253: EMPTY
 254: PUSH
 255: EMPTY
 256: PUSH
 257: EMPTY
 258: LIST
 259: LIST
 260: LIST
 261: LIST
 262: ST_TO_ADDR
// ai_facts = [ [ ] , [ ] , [ ] , [ ] ] ;
 263: LD_ADDR_EXP 38
 267: PUSH
 268: EMPTY
 269: PUSH
 270: EMPTY
 271: PUSH
 272: EMPTY
 273: PUSH
 274: EMPTY
 275: PUSH
 276: EMPTY
 277: LIST
 278: LIST
 279: LIST
 280: LIST
 281: ST_TO_ADDR
// ai_armouries = [ [ ] , [ ] , [ ] , [ ] ] ;
 282: LD_ADDR_EXP 39
 286: PUSH
 287: EMPTY
 288: PUSH
 289: EMPTY
 290: PUSH
 291: EMPTY
 292: PUSH
 293: EMPTY
 294: PUSH
 295: EMPTY
 296: LIST
 297: LIST
 298: LIST
 299: LIST
 300: ST_TO_ADDR
// ai_bunkers = [ [ ] , [ ] , [ ] , [ ] ] ;
 301: LD_ADDR_EXP 40
 305: PUSH
 306: EMPTY
 307: PUSH
 308: EMPTY
 309: PUSH
 310: EMPTY
 311: PUSH
 312: EMPTY
 313: PUSH
 314: EMPTY
 315: LIST
 316: LIST
 317: LIST
 318: LIST
 319: ST_TO_ADDR
// ai_turrets = [ [ ] , [ ] , [ ] , [ ] ] ;
 320: LD_ADDR_EXP 41
 324: PUSH
 325: EMPTY
 326: PUSH
 327: EMPTY
 328: PUSH
 329: EMPTY
 330: PUSH
 331: EMPTY
 332: PUSH
 333: EMPTY
 334: LIST
 335: LIST
 336: LIST
 337: LIST
 338: ST_TO_ADDR
// ai_oil_mine = [ 0 , 0 , 0 , 0 ] ;
 339: LD_ADDR_EXP 42
 343: PUSH
 344: LD_INT 0
 346: PUSH
 347: LD_INT 0
 349: PUSH
 350: LD_INT 0
 352: PUSH
 353: LD_INT 0
 355: PUSH
 356: EMPTY
 357: LIST
 358: LIST
 359: LIST
 360: LIST
 361: ST_TO_ADDR
// ai_siberite_mines = [ [ ] , [ ] , [ ] , [ ] ] ;
 362: LD_ADDR_EXP 43
 366: PUSH
 367: EMPTY
 368: PUSH
 369: EMPTY
 370: PUSH
 371: EMPTY
 372: PUSH
 373: EMPTY
 374: PUSH
 375: EMPTY
 376: LIST
 377: LIST
 378: LIST
 379: LIST
 380: ST_TO_ADDR
// ai_fact_extensions = [ [ ] , [ ] , [ ] , [ ] ] ;
 381: LD_ADDR_EXP 44
 385: PUSH
 386: EMPTY
 387: PUSH
 388: EMPTY
 389: PUSH
 390: EMPTY
 391: PUSH
 392: EMPTY
 393: PUSH
 394: EMPTY
 395: LIST
 396: LIST
 397: LIST
 398: LIST
 399: ST_TO_ADDR
// ai_power_plants = [ [ ] , [ ] , [ ] , [ ] ] ;
 400: LD_ADDR_EXP 45
 404: PUSH
 405: EMPTY
 406: PUSH
 407: EMPTY
 408: PUSH
 409: EMPTY
 410: PUSH
 411: EMPTY
 412: PUSH
 413: EMPTY
 414: LIST
 415: LIST
 416: LIST
 417: LIST
 418: ST_TO_ADDR
// ai_control_tower = [ 0 , 0 , 0 , 0 ] ;
 419: LD_ADDR_EXP 46
 423: PUSH
 424: LD_INT 0
 426: PUSH
 427: LD_INT 0
 429: PUSH
 430: LD_INT 0
 432: PUSH
 433: LD_INT 0
 435: PUSH
 436: EMPTY
 437: LIST
 438: LIST
 439: LIST
 440: LIST
 441: ST_TO_ADDR
// ai_teleporter = [ 0 , 0 , 0 , 0 ] ;
 442: LD_ADDR_EXP 47
 446: PUSH
 447: LD_INT 0
 449: PUSH
 450: LD_INT 0
 452: PUSH
 453: LD_INT 0
 455: PUSH
 456: LD_INT 0
 458: PUSH
 459: EMPTY
 460: LIST
 461: LIST
 462: LIST
 463: LIST
 464: ST_TO_ADDR
// ai_buildings_locations = [ [ ] , [ ] , [ ] , [ ] ] ;
 465: LD_ADDR_EXP 48
 469: PUSH
 470: EMPTY
 471: PUSH
 472: EMPTY
 473: PUSH
 474: EMPTY
 475: PUSH
 476: EMPTY
 477: PUSH
 478: EMPTY
 479: LIST
 480: LIST
 481: LIST
 482: LIST
 483: ST_TO_ADDR
// ai_captured_buildings = [ [ ] , [ ] , [ ] , [ ] ] ;
 484: LD_ADDR_EXP 49
 488: PUSH
 489: EMPTY
 490: PUSH
 491: EMPTY
 492: PUSH
 493: EMPTY
 494: PUSH
 495: EMPTY
 496: PUSH
 497: EMPTY
 498: LIST
 499: LIST
 500: LIST
 501: LIST
 502: ST_TO_ADDR
// ai_sib_bomb_fact = [ 0 , am_sib_fact , 0 , 0 ] ;
 503: LD_ADDR_EXP 50
 507: PUSH
 508: LD_INT 0
 510: PUSH
 511: LD_INT 165
 513: PUSH
 514: LD_INT 0
 516: PUSH
 517: LD_INT 0
 519: PUSH
 520: EMPTY
 521: LIST
 522: LIST
 523: LIST
 524: LIST
 525: ST_TO_ADDR
// ai_sib_bomb_fact_location = [ [ ] , [ GetX ( am_sib_fact ) , GetY ( am_sib_fact ) ] , [ ] , [ ] ] ;
 526: LD_ADDR_EXP 51
 530: PUSH
 531: EMPTY
 532: PUSH
 533: LD_INT 165
 535: PPUSH
 536: CALL_OW 250
 540: PUSH
 541: LD_INT 165
 543: PPUSH
 544: CALL_OW 251
 548: PUSH
 549: EMPTY
 550: LIST
 551: LIST
 552: PUSH
 553: EMPTY
 554: PUSH
 555: EMPTY
 556: PUSH
 557: EMPTY
 558: LIST
 559: LIST
 560: LIST
 561: LIST
 562: ST_TO_ADDR
// ai_vehicles_defend = [ [ ] , [ ] , [ ] , [ ] ] ;
 563: LD_ADDR_EXP 53
 567: PUSH
 568: EMPTY
 569: PUSH
 570: EMPTY
 571: PUSH
 572: EMPTY
 573: PUSH
 574: EMPTY
 575: PUSH
 576: EMPTY
 577: LIST
 578: LIST
 579: LIST
 580: LIST
 581: ST_TO_ADDR
// ai_vehicles_attack = [ [ ] , [ ] , [ ] , [ ] ] ;
 582: LD_ADDR_EXP 54
 586: PUSH
 587: EMPTY
 588: PUSH
 589: EMPTY
 590: PUSH
 591: EMPTY
 592: PUSH
 593: EMPTY
 594: PUSH
 595: EMPTY
 596: LIST
 597: LIST
 598: LIST
 599: LIST
 600: ST_TO_ADDR
// ai_retreating_vehicles_defend = [ [ ] , [ ] , [ ] , [ ] ] ;
 601: LD_ADDR_EXP 55
 605: PUSH
 606: EMPTY
 607: PUSH
 608: EMPTY
 609: PUSH
 610: EMPTY
 611: PUSH
 612: EMPTY
 613: PUSH
 614: EMPTY
 615: LIST
 616: LIST
 617: LIST
 618: LIST
 619: ST_TO_ADDR
// ai_vehicles_being_repaired = [ [ ] , [ ] , [ ] , [ ] ] ;
 620: LD_ADDR_EXP 56
 624: PUSH
 625: EMPTY
 626: PUSH
 627: EMPTY
 628: PUSH
 629: EMPTY
 630: PUSH
 631: EMPTY
 632: PUSH
 633: EMPTY
 634: LIST
 635: LIST
 636: LIST
 637: LIST
 638: ST_TO_ADDR
// ai_refuel_vehicles_list = [ [ ] , [ ] , [ ] , [ ] ] ;
 639: LD_ADDR_EXP 57
 643: PUSH
 644: EMPTY
 645: PUSH
 646: EMPTY
 647: PUSH
 648: EMPTY
 649: PUSH
 650: EMPTY
 651: PUSH
 652: EMPTY
 653: LIST
 654: LIST
 655: LIST
 656: LIST
 657: ST_TO_ADDR
// ai_vehicle_pullback_hexes = [ [ ] , [ [ 39 , 30 ] , [ 48 , 22 ] , [ 52 , 44 ] , [ 49 , 46 ] ] , [ ] , [ ] ] ;
 658: LD_ADDR_EXP 58
 662: PUSH
 663: EMPTY
 664: PUSH
 665: LD_INT 39
 667: PUSH
 668: LD_INT 30
 670: PUSH
 671: EMPTY
 672: LIST
 673: LIST
 674: PUSH
 675: LD_INT 48
 677: PUSH
 678: LD_INT 22
 680: PUSH
 681: EMPTY
 682: LIST
 683: LIST
 684: PUSH
 685: LD_INT 52
 687: PUSH
 688: LD_INT 44
 690: PUSH
 691: EMPTY
 692: LIST
 693: LIST
 694: PUSH
 695: LD_INT 49
 697: PUSH
 698: LD_INT 46
 700: PUSH
 701: EMPTY
 702: LIST
 703: LIST
 704: PUSH
 705: EMPTY
 706: LIST
 707: LIST
 708: LIST
 709: LIST
 710: PUSH
 711: EMPTY
 712: PUSH
 713: EMPTY
 714: PUSH
 715: EMPTY
 716: LIST
 717: LIST
 718: LIST
 719: LIST
 720: ST_TO_ADDR
// ai_human_pullback_hex = [ [ 137 , 123 ] , [ 51 , 43 ] , [ ] , [ ] ] ;
 721: LD_ADDR_EXP 59
 725: PUSH
 726: LD_INT 137
 728: PUSH
 729: LD_INT 123
 731: PUSH
 732: EMPTY
 733: LIST
 734: LIST
 735: PUSH
 736: LD_INT 51
 738: PUSH
 739: LD_INT 43
 741: PUSH
 742: EMPTY
 743: LIST
 744: LIST
 745: PUSH
 746: EMPTY
 747: PUSH
 748: EMPTY
 749: PUSH
 750: EMPTY
 751: LIST
 752: LIST
 753: LIST
 754: LIST
 755: ST_TO_ADDR
// ai_building_under_construction = [ 0 , 0 , 0 , 0 ] ;
 756: LD_ADDR_EXP 60
 760: PUSH
 761: LD_INT 0
 763: PUSH
 764: LD_INT 0
 766: PUSH
 767: LD_INT 0
 769: PUSH
 770: LD_INT 0
 772: PUSH
 773: EMPTY
 774: LIST
 775: LIST
 776: LIST
 777: LIST
 778: ST_TO_ADDR
// ai_heal_these_humans = [ [ ] , [ ] , [ ] , [ ] ] ;
 779: LD_ADDR_EXP 61
 783: PUSH
 784: EMPTY
 785: PUSH
 786: EMPTY
 787: PUSH
 788: EMPTY
 789: PUSH
 790: EMPTY
 791: PUSH
 792: EMPTY
 793: LIST
 794: LIST
 795: LIST
 796: LIST
 797: ST_TO_ADDR
// ai_all_buildings = [ [ ] , [ ] , [ ] , [ ] ] ;
 798: LD_ADDR_EXP 62
 802: PUSH
 803: EMPTY
 804: PUSH
 805: EMPTY
 806: PUSH
 807: EMPTY
 808: PUSH
 809: EMPTY
 810: PUSH
 811: EMPTY
 812: LIST
 813: LIST
 814: LIST
 815: LIST
 816: ST_TO_ADDR
// ai_building_constructor = [ 0 , 0 , 0 , 0 ] ;
 817: LD_ADDR_EXP 63
 821: PUSH
 822: LD_INT 0
 824: PUSH
 825: LD_INT 0
 827: PUSH
 828: LD_INT 0
 830: PUSH
 831: LD_INT 0
 833: PUSH
 834: EMPTY
 835: LIST
 836: LIST
 837: LIST
 838: LIST
 839: ST_TO_ADDR
// ai_vehicle_being_moved = [ 0 , 0 , 0 , 0 ] ;
 840: LD_ADDR_EXP 64
 844: PUSH
 845: LD_INT 0
 847: PUSH
 848: LD_INT 0
 850: PUSH
 851: LD_INT 0
 853: PUSH
 854: LD_INT 0
 856: PUSH
 857: EMPTY
 858: LIST
 859: LIST
 860: LIST
 861: LIST
 862: ST_TO_ADDR
// ai_vehicles_having_been_moved = [ [ ] , [ ] , [ ] , [ ] ] ;
 863: LD_ADDR_EXP 65
 867: PUSH
 868: EMPTY
 869: PUSH
 870: EMPTY
 871: PUSH
 872: EMPTY
 873: PUSH
 874: EMPTY
 875: PUSH
 876: EMPTY
 877: LIST
 878: LIST
 879: LIST
 880: LIST
 881: ST_TO_ADDR
// ai_upcoming_building_data = [ [ ] , [ ] , [ ] , [ ] ] ;
 882: LD_ADDR_EXP 66
 886: PUSH
 887: EMPTY
 888: PUSH
 889: EMPTY
 890: PUSH
 891: EMPTY
 892: PUSH
 893: EMPTY
 894: PUSH
 895: EMPTY
 896: LIST
 897: LIST
 898: LIST
 899: LIST
 900: ST_TO_ADDR
// ai_cannot_rebuild_these_buildings = [ [ ] , [ ] , [ ] , [ ] ] ;
 901: LD_ADDR_EXP 67
 905: PUSH
 906: EMPTY
 907: PUSH
 908: EMPTY
 909: PUSH
 910: EMPTY
 911: PUSH
 912: EMPTY
 913: PUSH
 914: EMPTY
 915: LIST
 916: LIST
 917: LIST
 918: LIST
 919: ST_TO_ADDR
// ai_near_base_dist = 18 ;
 920: LD_ADDR_EXP 68
 924: PUSH
 925: LD_INT 18
 927: ST_TO_ADDR
// ai_vehicle_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 , 0 0$0 ] ;
 928: LD_ADDR_EXP 69
 932: PUSH
 933: LD_INT 0
 935: PUSH
 936: LD_INT 0
 938: PUSH
 939: LD_INT 0
 941: PUSH
 942: LD_INT 0
 944: PUSH
 945: EMPTY
 946: LIST
 947: LIST
 948: LIST
 949: LIST
 950: ST_TO_ADDR
// ai_human_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 , 0 0$0 ] ;
 951: LD_ADDR_EXP 70
 955: PUSH
 956: LD_INT 0
 958: PUSH
 959: LD_INT 0
 961: PUSH
 962: LD_INT 0
 964: PUSH
 965: LD_INT 0
 967: PUSH
 968: EMPTY
 969: LIST
 970: LIST
 971: LIST
 972: LIST
 973: ST_TO_ADDR
// ai_attack_strategy = [ 0 , 0 , 0 , 0 ] ;
 974: LD_ADDR_EXP 88
 978: PUSH
 979: LD_INT 0
 981: PUSH
 982: LD_INT 0
 984: PUSH
 985: LD_INT 0
 987: PUSH
 988: LD_INT 0
 990: PUSH
 991: EMPTY
 992: LIST
 993: LIST
 994: LIST
 995: LIST
 996: ST_TO_ADDR
// ai_cargo_bay = [ 0 , 0 , 0 , 0 ] ;
 997: LD_ADDR_EXP 71
1001: PUSH
1002: LD_INT 0
1004: PUSH
1005: LD_INT 0
1007: PUSH
1008: LD_INT 0
1010: PUSH
1011: LD_INT 0
1013: PUSH
1014: EMPTY
1015: LIST
1016: LIST
1017: LIST
1018: LIST
1019: ST_TO_ADDR
// ai_cargo_bay_under_construction = [ false , false , false , false ] ;
1020: LD_ADDR_EXP 72
1024: PUSH
1025: LD_INT 0
1027: PUSH
1028: LD_INT 0
1030: PUSH
1031: LD_INT 0
1033: PUSH
1034: LD_INT 0
1036: PUSH
1037: EMPTY
1038: LIST
1039: LIST
1040: LIST
1041: LIST
1042: ST_TO_ADDR
// ai_cargo_bay_destroy_tick = [ tick , tick , tick , tick ] ;
1043: LD_ADDR_EXP 73
1047: PUSH
1048: LD_OWVAR 1
1052: PUSH
1053: LD_OWVAR 1
1057: PUSH
1058: LD_OWVAR 1
1062: PUSH
1063: LD_OWVAR 1
1067: PUSH
1068: EMPTY
1069: LIST
1070: LIST
1071: LIST
1072: LIST
1073: ST_TO_ADDR
// ai_crane = [ 0 , 0 , 0 , 0 ] ;
1074: LD_ADDR_EXP 74
1078: PUSH
1079: LD_INT 0
1081: PUSH
1082: LD_INT 0
1084: PUSH
1085: LD_INT 0
1087: PUSH
1088: LD_INT 0
1090: PUSH
1091: EMPTY
1092: LIST
1093: LIST
1094: LIST
1095: LIST
1096: ST_TO_ADDR
// ai_crane_under_construction = [ false , false , false , false ] ;
1097: LD_ADDR_EXP 75
1101: PUSH
1102: LD_INT 0
1104: PUSH
1105: LD_INT 0
1107: PUSH
1108: LD_INT 0
1110: PUSH
1111: LD_INT 0
1113: PUSH
1114: EMPTY
1115: LIST
1116: LIST
1117: LIST
1118: LIST
1119: ST_TO_ADDR
// ai_crane_destroy_tick = [ tick , tick , tick , tick ] ;
1120: LD_ADDR_EXP 76
1124: PUSH
1125: LD_OWVAR 1
1129: PUSH
1130: LD_OWVAR 1
1134: PUSH
1135: LD_OWVAR 1
1139: PUSH
1140: LD_OWVAR 1
1144: PUSH
1145: EMPTY
1146: LIST
1147: LIST
1148: LIST
1149: LIST
1150: ST_TO_ADDR
// ai_crane_is_being_repaired = [ false , false , false , false ] ;
1151: LD_ADDR_EXP 77
1155: PUSH
1156: LD_INT 0
1158: PUSH
1159: LD_INT 0
1161: PUSH
1162: LD_INT 0
1164: PUSH
1165: LD_INT 0
1167: PUSH
1168: EMPTY
1169: LIST
1170: LIST
1171: LIST
1172: LIST
1173: ST_TO_ADDR
// ai_crane_driver = [ 0 , 0 , 0 , 0 ] ;
1174: LD_ADDR_EXP 78
1178: PUSH
1179: LD_INT 0
1181: PUSH
1182: LD_INT 0
1184: PUSH
1185: LD_INT 0
1187: PUSH
1188: LD_INT 0
1190: PUSH
1191: EMPTY
1192: LIST
1193: LIST
1194: LIST
1195: LIST
1196: ST_TO_ADDR
// ai_attacking_unit_hex_index = [ ] ;
1197: LD_ADDR_EXP 79
1201: PUSH
1202: EMPTY
1203: ST_TO_ADDR
// ai_retreating_attacking_humans = [ [ ] , [ ] , [ ] , [ ] ] ;
1204: LD_ADDR_EXP 80
1208: PUSH
1209: EMPTY
1210: PUSH
1211: EMPTY
1212: PUSH
1213: EMPTY
1214: PUSH
1215: EMPTY
1216: PUSH
1217: EMPTY
1218: LIST
1219: LIST
1220: LIST
1221: LIST
1222: ST_TO_ADDR
// ai_control_tower_vehicles = [ [ ] , [ ] , [ ] , [ ] ] ;
1223: LD_ADDR_EXP 81
1227: PUSH
1228: EMPTY
1229: PUSH
1230: EMPTY
1231: PUSH
1232: EMPTY
1233: PUSH
1234: EMPTY
1235: PUSH
1236: EMPTY
1237: LIST
1238: LIST
1239: LIST
1240: LIST
1241: ST_TO_ADDR
// ai_teleporter_exit_placed = [ false , false , false , false ] ;
1242: LD_ADDR_EXP 82
1246: PUSH
1247: LD_INT 0
1249: PUSH
1250: LD_INT 0
1252: PUSH
1253: LD_INT 0
1255: PUSH
1256: LD_INT 0
1258: PUSH
1259: EMPTY
1260: LIST
1261: LIST
1262: LIST
1263: LIST
1264: ST_TO_ADDR
// ai_excepted_buildings = [ [ ] , [ ] , [ ] , [ ] ] ;
1265: LD_ADDR_EXP 83
1269: PUSH
1270: EMPTY
1271: PUSH
1272: EMPTY
1273: PUSH
1274: EMPTY
1275: PUSH
1276: EMPTY
1277: PUSH
1278: EMPTY
1279: LIST
1280: LIST
1281: LIST
1282: LIST
1283: ST_TO_ADDR
// ai_fact_extension_replace_locations = [ [ ] , [ ] , [ ] , [ ] ] ;
1284: LD_ADDR_EXP 84
1288: PUSH
1289: EMPTY
1290: PUSH
1291: EMPTY
1292: PUSH
1293: EMPTY
1294: PUSH
1295: EMPTY
1296: PUSH
1297: EMPTY
1298: LIST
1299: LIST
1300: LIST
1301: LIST
1302: ST_TO_ADDR
// ai_facts_with_ext_rebuild_map = [ ] ;
1303: LD_ADDR_EXP 94
1307: PUSH
1308: EMPTY
1309: ST_TO_ADDR
// ai_dismantle_these_buildings = [ [ ] , [ ] , [ ] , [ ] ] ;
1310: LD_ADDR_EXP 85
1314: PUSH
1315: EMPTY
1316: PUSH
1317: EMPTY
1318: PUSH
1319: EMPTY
1320: PUSH
1321: EMPTY
1322: PUSH
1323: EMPTY
1324: LIST
1325: LIST
1326: LIST
1327: LIST
1328: ST_TO_ADDR
// ai_taufield_vehicles = [ [ ] , [ ] , [ ] , [ ] ] ;
1329: LD_ADDR_EXP 86
1333: PUSH
1334: EMPTY
1335: PUSH
1336: EMPTY
1337: PUSH
1338: EMPTY
1339: PUSH
1340: EMPTY
1341: PUSH
1342: EMPTY
1343: LIST
1344: LIST
1345: LIST
1346: LIST
1347: ST_TO_ADDR
// ai_implosion_vehicles = [ [ ] , [ ] , [ ] , [ ] ] ;
1348: LD_ADDR_EXP 87
1352: PUSH
1353: EMPTY
1354: PUSH
1355: EMPTY
1356: PUSH
1357: EMPTY
1358: PUSH
1359: EMPTY
1360: PUSH
1361: EMPTY
1362: LIST
1363: LIST
1364: LIST
1365: LIST
1366: ST_TO_ADDR
// ai_sib_bomb_vehicles = [ [ ] , [ ] , [ ] , [ ] ] ;
1367: LD_ADDR_EXP 93
1371: PUSH
1372: EMPTY
1373: PUSH
1374: EMPTY
1375: PUSH
1376: EMPTY
1377: PUSH
1378: EMPTY
1379: PUSH
1380: EMPTY
1381: LIST
1382: LIST
1383: LIST
1384: LIST
1385: ST_TO_ADDR
// ai_behemoths = [ [ ] , [ ] , [ ] , [ ] ] ;
1386: LD_ADDR_EXP 89
1390: PUSH
1391: EMPTY
1392: PUSH
1393: EMPTY
1394: PUSH
1395: EMPTY
1396: PUSH
1397: EMPTY
1398: PUSH
1399: EMPTY
1400: LIST
1401: LIST
1402: LIST
1403: LIST
1404: ST_TO_ADDR
// ai_behemoth_parking_hexes = [ [ ] , [ ] , [ ] , [ ] ] ;
1405: LD_ADDR_EXP 90
1409: PUSH
1410: EMPTY
1411: PUSH
1412: EMPTY
1413: PUSH
1414: EMPTY
1415: PUSH
1416: EMPTY
1417: PUSH
1418: EMPTY
1419: LIST
1420: LIST
1421: LIST
1422: LIST
1423: ST_TO_ADDR
// ai_behemoth_construction_hex = [ [ ] , [ ] , [ ] , [ ] ] ;
1424: LD_ADDR_EXP 91
1428: PUSH
1429: EMPTY
1430: PUSH
1431: EMPTY
1432: PUSH
1433: EMPTY
1434: PUSH
1435: EMPTY
1436: PUSH
1437: EMPTY
1438: LIST
1439: LIST
1440: LIST
1441: LIST
1442: ST_TO_ADDR
// ai_new_attack_commencing = [ false , false , false , false ] ;
1443: LD_ADDR_EXP 92
1447: PUSH
1448: LD_INT 0
1450: PUSH
1451: LD_INT 0
1453: PUSH
1454: LD_INT 0
1456: PUSH
1457: LD_INT 0
1459: PUSH
1460: EMPTY
1461: LIST
1462: LIST
1463: LIST
1464: LIST
1465: ST_TO_ADDR
// ai_time_shift_data = [ [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] ] ;
1466: LD_ADDR_EXP 95
1470: PUSH
1471: EMPTY
1472: PUSH
1473: EMPTY
1474: PUSH
1475: EMPTY
1476: PUSH
1477: EMPTY
1478: PUSH
1479: EMPTY
1480: PUSH
1481: EMPTY
1482: PUSH
1483: EMPTY
1484: PUSH
1485: EMPTY
1486: PUSH
1487: EMPTY
1488: LIST
1489: LIST
1490: LIST
1491: LIST
1492: LIST
1493: LIST
1494: LIST
1495: LIST
1496: ST_TO_ADDR
// ai_time_shift_hexes = [ [ ] , [ ] , [ ] , [ ] ] ;
1497: LD_ADDR_EXP 96
1501: PUSH
1502: EMPTY
1503: PUSH
1504: EMPTY
1505: PUSH
1506: EMPTY
1507: PUSH
1508: EMPTY
1509: PUSH
1510: EMPTY
1511: LIST
1512: LIST
1513: LIST
1514: LIST
1515: ST_TO_ADDR
// ai_time_shift_hexes_underway = [ [ ] , [ ] , [ ] , [ ] ] ;
1516: LD_ADDR_EXP 97
1520: PUSH
1521: EMPTY
1522: PUSH
1523: EMPTY
1524: PUSH
1525: EMPTY
1526: PUSH
1527: EMPTY
1528: PUSH
1529: EMPTY
1530: LIST
1531: LIST
1532: LIST
1533: LIST
1534: ST_TO_ADDR
// Initiate_ai_contact_time ;
1535: CALL 1914 0 0
// ai_attack_ground_info_initial = [ ] ;
1539: LD_ADDR_EXP 99
1543: PUSH
1544: EMPTY
1545: ST_TO_ADDR
// ai_attack_ground_info_sustain = [ ] ;
1546: LD_ADDR_EXP 100
1550: PUSH
1551: EMPTY
1552: ST_TO_ADDR
// Initiate_ai_sib_bomb_used_time_matrix ;
1553: CALL 1998 0 0
// ai_sib_bomb_contamination_duration = 175 * 35 ;
1557: LD_ADDR_EXP 102
1561: PUSH
1562: LD_INT 175
1564: PUSH
1565: LD_INT 35
1567: MUL
1568: ST_TO_ADDR
// ai_defence_replace_mines_centerhexes = [ [ ] , [ ] , [ ] , [ ] ] ;
1569: LD_ADDR_EXP 103
1573: PUSH
1574: EMPTY
1575: PUSH
1576: EMPTY
1577: PUSH
1578: EMPTY
1579: PUSH
1580: EMPTY
1581: PUSH
1582: EMPTY
1583: LIST
1584: LIST
1585: LIST
1586: LIST
1587: ST_TO_ADDR
// ai_defence_max_num_replace_mines = [ - 1 , - 1 , - 1 , - 1 ] ;
1588: LD_ADDR_EXP 105
1592: PUSH
1593: LD_INT 1
1595: NEG
1596: PUSH
1597: LD_INT 1
1599: NEG
1600: PUSH
1601: LD_INT 1
1603: NEG
1604: PUSH
1605: LD_INT 1
1607: NEG
1608: PUSH
1609: EMPTY
1610: LIST
1611: LIST
1612: LIST
1613: LIST
1614: ST_TO_ADDR
// ai_mine_guys = [ [ ] , [ ] , [ ] , [ ] ] ;
1615: LD_ADDR_EXP 106
1619: PUSH
1620: EMPTY
1621: PUSH
1622: EMPTY
1623: PUSH
1624: EMPTY
1625: PUSH
1626: EMPTY
1627: PUSH
1628: EMPTY
1629: LIST
1630: LIST
1631: LIST
1632: LIST
1633: ST_TO_ADDR
// ai_defence_mines_hexes = [ [ ] , [ ] , [ ] , [ ] ] ;
1634: LD_ADDR_EXP 104
1638: PUSH
1639: EMPTY
1640: PUSH
1641: EMPTY
1642: PUSH
1643: EMPTY
1644: PUSH
1645: EMPTY
1646: PUSH
1647: EMPTY
1648: LIST
1649: LIST
1650: LIST
1651: LIST
1652: ST_TO_ADDR
// ai_defence_replace_mines_hexes = [ [ ] , [ ] , [ ] , [ ] ] ;
1653: LD_ADDR_EXP 107
1657: PUSH
1658: EMPTY
1659: PUSH
1660: EMPTY
1661: PUSH
1662: EMPTY
1663: PUSH
1664: EMPTY
1665: PUSH
1666: EMPTY
1667: LIST
1668: LIST
1669: LIST
1670: LIST
1671: ST_TO_ADDR
// InitCrateModule ;
1672: CALL 11372 0 0
// InitArtifactVariables ;
1676: CALL 68317 0 0
// InitAttackModule ;
1680: CALL 70086 0 0
// cargo_bay_destroyed_in_unsafe_area = false ;
1684: LD_ADDR_EXP 108
1688: PUSH
1689: LD_INT 0
1691: ST_TO_ADDR
// legion_prisoners = [ ] ;
1692: LD_ADDR_EXP 109
1696: PUSH
1697: EMPTY
1698: ST_TO_ADDR
// legion_base_captured = false ;
1699: LD_ADDR_EXP 110
1703: PUSH
1704: LD_INT 0
1706: ST_TO_ADDR
// legion_prisoners_shot_to_red = [ ] ;
1707: LD_ADDR_EXP 111
1711: PUSH
1712: EMPTY
1713: ST_TO_ADDR
// vehicle_captured_events = [ ] ;
1714: LD_ADDR_EXP 112
1718: PUSH
1719: EMPTY
1720: ST_TO_ADDR
// may_attack_americans = false ;
1721: LD_ADDR_EXP 113
1725: PUSH
1726: LD_INT 0
1728: ST_TO_ADDR
// num_legion_prisoners = - 1 ;
1729: LD_ADDR_EXP 114
1733: PUSH
1734: LD_INT 1
1736: NEG
1737: ST_TO_ADDR
// current_attack_num = 0 ;
1738: LD_ADDR_EXP 115
1742: PUSH
1743: LD_INT 0
1745: ST_TO_ADDR
// remote_vehicles_impossible = false ;
1746: LD_ADDR_EXP 116
1750: PUSH
1751: LD_INT 0
1753: ST_TO_ADDR
// sib_imp_veh_dismantled = false ;
1754: LD_ADDR_EXP 117
1758: PUSH
1759: LD_INT 0
1761: ST_TO_ADDR
// heike_reinforcements_people = [ ] ;
1762: LD_ADDR_EXP 118
1766: PUSH
1767: EMPTY
1768: ST_TO_ADDR
// heike_reinforcements_vehicles = [ ] ;
1769: LD_ADDR_EXP 119
1773: PUSH
1774: EMPTY
1775: ST_TO_ADDR
// contaminating_scientist = 0 ;
1776: LD_ADDR_EXP 120
1780: PUSH
1781: LD_INT 0
1783: ST_TO_ADDR
// contaminating_scientist_went_to_lab = false ;
1784: LD_ADDR_EXP 121
1788: PUSH
1789: LD_INT 0
1791: ST_TO_ADDR
// traveling_humans = [ ] ;
1792: LD_ADDR_EXP 122
1796: PUSH
1797: EMPTY
1798: ST_TO_ADDR
// legion_main_depot_resources = [ [ 45 , Rand ( 150 , 250 ) , 0 ] , [ 25 , Rand ( 150 , 250 ) , 0 ] , [ 5 , Rand ( 150 , 250 ) , 0 ] ] [ difficulty ] ;
1799: LD_ADDR_EXP 123
1803: PUSH
1804: LD_INT 45
1806: PUSH
1807: LD_INT 150
1809: PPUSH
1810: LD_INT 250
1812: PPUSH
1813: CALL_OW 12
1817: PUSH
1818: LD_INT 0
1820: PUSH
1821: EMPTY
1822: LIST
1823: LIST
1824: LIST
1825: PUSH
1826: LD_INT 25
1828: PUSH
1829: LD_INT 150
1831: PPUSH
1832: LD_INT 250
1834: PPUSH
1835: CALL_OW 12
1839: PUSH
1840: LD_INT 0
1842: PUSH
1843: EMPTY
1844: LIST
1845: LIST
1846: LIST
1847: PUSH
1848: LD_INT 5
1850: PUSH
1851: LD_INT 150
1853: PPUSH
1854: LD_INT 250
1856: PPUSH
1857: CALL_OW 12
1861: PUSH
1862: LD_INT 0
1864: PUSH
1865: EMPTY
1866: LIST
1867: LIST
1868: LIST
1869: PUSH
1870: EMPTY
1871: LIST
1872: LIST
1873: LIST
1874: PUSH
1875: LD_OWVAR 67
1879: ARRAY
1880: ST_TO_ADDR
// PrepareSides ;
1881: CALL 2284 0 0
// PrepareNature ;
1885: CALL 2656 0 0
// PreparePlayer ;
1889: CALL 3311 0 0
// ScanBuildings ;
1893: CALL 5735 0 0
// PrepareComputerSides ;
1897: CALL 8173 0 0
// PrepareMines ;
1901: CALL 10497 0 0
// InitiateTimeShiftData ;
1905: CALL 2087 0 0
// Action ;
1909: CALL 11236 0 0
// end ;
1913: END
// function Initiate_ai_contact_time ; var i ; begin
1914: LD_INT 0
1916: PPUSH
1917: PPUSH
// ai_contact_time = [ ] ;
1918: LD_ADDR_EXP 98
1922: PUSH
1923: EMPTY
1924: ST_TO_ADDR
// for i = 1 to 8 do
1925: LD_ADDR_VAR 0 2
1929: PUSH
1930: DOUBLE
1931: LD_INT 1
1933: DEC
1934: ST_TO_ADDR
1935: LD_INT 8
1937: PUSH
1938: FOR_TO
1939: IFFALSE 1991
// ai_contact_time = ai_contact_time ^ [ [ 100000 , 100000 , 100000 , 100000 , 100000 , 100000 , 100000 , 100000 ] ] ;
1941: LD_ADDR_EXP 98
1945: PUSH
1946: LD_EXP 98
1950: PUSH
1951: LD_INT 100000
1953: PUSH
1954: LD_INT 100000
1956: PUSH
1957: LD_INT 100000
1959: PUSH
1960: LD_INT 100000
1962: PUSH
1963: LD_INT 100000
1965: PUSH
1966: LD_INT 100000
1968: PUSH
1969: LD_INT 100000
1971: PUSH
1972: LD_INT 100000
1974: PUSH
1975: EMPTY
1976: LIST
1977: LIST
1978: LIST
1979: LIST
1980: LIST
1981: LIST
1982: LIST
1983: LIST
1984: PUSH
1985: EMPTY
1986: LIST
1987: ADD
1988: ST_TO_ADDR
1989: GO 1938
1991: POP
1992: POP
// end ;
1993: LD_VAR 0 1
1997: RET
// function Initiate_ai_sib_bomb_used_time_matrix ; var base ; begin
1998: LD_INT 0
2000: PPUSH
2001: PPUSH
// ai_sib_bomb_used_time_matrix = [ ] ;
2002: LD_ADDR_EXP 101
2006: PUSH
2007: EMPTY
2008: ST_TO_ADDR
// for base in ai_bases do
2009: LD_ADDR_VAR 0 2
2013: PUSH
2014: LD_EXP 26
2018: PUSH
2019: FOR_IN
2020: IFFALSE 2080
// ai_sib_bomb_used_time_matrix = ai_sib_bomb_used_time_matrix ^ [ [ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ] ] ;
2022: LD_ADDR_EXP 101
2026: PUSH
2027: LD_EXP 101
2031: PUSH
2032: LD_INT 1
2034: NEG
2035: PUSH
2036: LD_INT 1
2038: NEG
2039: PUSH
2040: LD_INT 1
2042: NEG
2043: PUSH
2044: LD_INT 1
2046: NEG
2047: PUSH
2048: LD_INT 1
2050: NEG
2051: PUSH
2052: LD_INT 1
2054: NEG
2055: PUSH
2056: LD_INT 1
2058: NEG
2059: PUSH
2060: LD_INT 1
2062: NEG
2063: PUSH
2064: EMPTY
2065: LIST
2066: LIST
2067: LIST
2068: LIST
2069: LIST
2070: LIST
2071: LIST
2072: LIST
2073: PUSH
2074: EMPTY
2075: LIST
2076: ADD
2077: ST_TO_ADDR
2078: GO 2019
2080: POP
2081: POP
// end ;
2082: LD_VAR 0 1
2086: RET
// function InitiateTimeShiftData ; var side ; begin
2087: LD_INT 0
2089: PPUSH
2090: PPUSH
// for side = 1 to 8 do
2091: LD_ADDR_VAR 0 2
2095: PUSH
2096: DOUBLE
2097: LD_INT 1
2099: DEC
2100: ST_TO_ADDR
2101: LD_INT 8
2103: PUSH
2104: FOR_TO
2105: IFFALSE 2277
// if Researched ( side , tech_st3 ) then
2107: LD_VAR 0 2
2111: PPUSH
2112: LD_INT 65
2114: PPUSH
2115: CALL_OW 325
2119: IFFALSE 2153
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 420 , 10 ] ) else
2121: LD_ADDR_EXP 95
2125: PUSH
2126: LD_EXP 95
2130: PPUSH
2131: LD_VAR 0 2
2135: PPUSH
2136: LD_INT 420
2138: PUSH
2139: LD_INT 10
2141: PUSH
2142: EMPTY
2143: LIST
2144: LIST
2145: PPUSH
2146: CALL_OW 1
2150: ST_TO_ADDR
2151: GO 2275
// if Researched ( side , tech_st2 ) then
2153: LD_VAR 0 2
2157: PPUSH
2158: LD_INT 64
2160: PPUSH
2161: CALL_OW 325
2165: IFFALSE 2199
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 420 , 10 ] ) else
2167: LD_ADDR_EXP 95
2171: PUSH
2172: LD_EXP 95
2176: PPUSH
2177: LD_VAR 0 2
2181: PPUSH
2182: LD_INT 420
2184: PUSH
2185: LD_INT 10
2187: PUSH
2188: EMPTY
2189: LIST
2190: LIST
2191: PPUSH
2192: CALL_OW 1
2196: ST_TO_ADDR
2197: GO 2275
// if Researched ( side , tech_st1 ) then
2199: LD_VAR 0 2
2203: PPUSH
2204: LD_INT 63
2206: PPUSH
2207: CALL_OW 325
2211: IFFALSE 2245
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 320 , 7 ] ) else
2213: LD_ADDR_EXP 95
2217: PUSH
2218: LD_EXP 95
2222: PPUSH
2223: LD_VAR 0 2
2227: PPUSH
2228: LD_INT 320
2230: PUSH
2231: LD_INT 7
2233: PUSH
2234: EMPTY
2235: LIST
2236: LIST
2237: PPUSH
2238: CALL_OW 1
2242: ST_TO_ADDR
2243: GO 2275
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 215 , 4 ] ) ;
2245: LD_ADDR_EXP 95
2249: PUSH
2250: LD_EXP 95
2254: PPUSH
2255: LD_VAR 0 2
2259: PPUSH
2260: LD_INT 215
2262: PUSH
2263: LD_INT 4
2265: PUSH
2266: EMPTY
2267: LIST
2268: LIST
2269: PPUSH
2270: CALL_OW 1
2274: ST_TO_ADDR
2275: GO 2104
2277: POP
2278: POP
// end ;
2279: LD_VAR 0 1
2283: RET
// function PrepareSides ; begin
2284: LD_INT 0
2286: PPUSH
// nature = 0 ;
2287: LD_ADDR_EXP 3
2291: PUSH
2292: LD_INT 0
2294: ST_TO_ADDR
// americans = 1 ;
2295: LD_ADDR_EXP 6
2299: PUSH
2300: LD_INT 1
2302: ST_TO_ADDR
// you = 2 ;
2303: LD_ADDR_EXP 2
2307: PUSH
2308: LD_INT 2
2310: ST_TO_ADDR
// legion_alt = 4 ;
2311: LD_ADDR_EXP 5
2315: PUSH
2316: LD_INT 4
2318: ST_TO_ADDR
// you_alt = 5 ;
2319: LD_ADDR_EXP 8
2323: PUSH
2324: LD_INT 5
2326: ST_TO_ADDR
// you_alt_escaping = 7 ;
2327: LD_ADDR_EXP 9
2331: PUSH
2332: LD_INT 7
2334: ST_TO_ADDR
// legion = 8 ;
2335: LD_ADDR_EXP 4
2339: PUSH
2340: LD_INT 8
2342: ST_TO_ADDR
// mines_side = 0 ;
2343: LD_ADDR_EXP 7
2347: PUSH
2348: LD_INT 0
2350: ST_TO_ADDR
// SetAttitude ( americans , you , att_enemy , true ) ;
2351: LD_EXP 6
2355: PPUSH
2356: LD_EXP 2
2360: PPUSH
2361: LD_INT 2
2363: PPUSH
2364: LD_INT 1
2366: PPUSH
2367: CALL_OW 80
// SetAttitude ( americans , legion_alt , att_friend , true ) ;
2371: LD_EXP 6
2375: PPUSH
2376: LD_EXP 5
2380: PPUSH
2381: LD_INT 1
2383: PPUSH
2384: LD_INT 1
2386: PPUSH
2387: CALL_OW 80
// SetAttitude ( americans , you_alt , att_enemy , true ) ;
2391: LD_EXP 6
2395: PPUSH
2396: LD_EXP 8
2400: PPUSH
2401: LD_INT 2
2403: PPUSH
2404: LD_INT 1
2406: PPUSH
2407: CALL_OW 80
// SetAttitude ( americans , you_alt_escaping , att_enemy , true ) ;
2411: LD_EXP 6
2415: PPUSH
2416: LD_EXP 9
2420: PPUSH
2421: LD_INT 2
2423: PPUSH
2424: LD_INT 1
2426: PPUSH
2427: CALL_OW 80
// SetAttitude ( americans , legion , att_enemy , true ) ;
2431: LD_EXP 6
2435: PPUSH
2436: LD_EXP 4
2440: PPUSH
2441: LD_INT 2
2443: PPUSH
2444: LD_INT 1
2446: PPUSH
2447: CALL_OW 80
// SetAttitude ( you , legion_alt , att_neutral , true ) ;
2451: LD_EXP 2
2455: PPUSH
2456: LD_EXP 5
2460: PPUSH
2461: LD_INT 0
2463: PPUSH
2464: LD_INT 1
2466: PPUSH
2467: CALL_OW 80
// SetAttitude ( you , you_alt , att_friend , true ) ;
2471: LD_EXP 2
2475: PPUSH
2476: LD_EXP 8
2480: PPUSH
2481: LD_INT 1
2483: PPUSH
2484: LD_INT 1
2486: PPUSH
2487: CALL_OW 80
// SetAttitude ( you , you_alt_escaping , att_neutral , true ) ;
2491: LD_EXP 2
2495: PPUSH
2496: LD_EXP 9
2500: PPUSH
2501: LD_INT 0
2503: PPUSH
2504: LD_INT 1
2506: PPUSH
2507: CALL_OW 80
// SetAttitude ( you , legion , att_enemy , true ) ;
2511: LD_EXP 2
2515: PPUSH
2516: LD_EXP 4
2520: PPUSH
2521: LD_INT 2
2523: PPUSH
2524: LD_INT 1
2526: PPUSH
2527: CALL_OW 80
// SetAttitude ( legion_alt , you_alt , att_friend , true ) ;
2531: LD_EXP 5
2535: PPUSH
2536: LD_EXP 8
2540: PPUSH
2541: LD_INT 1
2543: PPUSH
2544: LD_INT 1
2546: PPUSH
2547: CALL_OW 80
// SetAttitude ( legion_alt , you_alt_escaping , att_friend , true ) ;
2551: LD_EXP 5
2555: PPUSH
2556: LD_EXP 9
2560: PPUSH
2561: LD_INT 1
2563: PPUSH
2564: LD_INT 1
2566: PPUSH
2567: CALL_OW 80
// SetAttitude ( legion_alt , legion , att_friend , true ) ;
2571: LD_EXP 5
2575: PPUSH
2576: LD_EXP 4
2580: PPUSH
2581: LD_INT 1
2583: PPUSH
2584: LD_INT 1
2586: PPUSH
2587: CALL_OW 80
// SetAttitude ( you_alt , you_alt_escaping , att_friend , true ) ;
2591: LD_EXP 8
2595: PPUSH
2596: LD_EXP 9
2600: PPUSH
2601: LD_INT 1
2603: PPUSH
2604: LD_INT 1
2606: PPUSH
2607: CALL_OW 80
// SetAttitude ( you_alt , legion , att_friend , true ) ;
2611: LD_EXP 8
2615: PPUSH
2616: LD_EXP 4
2620: PPUSH
2621: LD_INT 1
2623: PPUSH
2624: LD_INT 1
2626: PPUSH
2627: CALL_OW 80
// SetAttitude ( you_alt_escaping , legion , att_friend , true ) ;
2631: LD_EXP 9
2635: PPUSH
2636: LD_EXP 4
2640: PPUSH
2641: LD_INT 1
2643: PPUSH
2644: LD_INT 1
2646: PPUSH
2647: CALL_OW 80
// end ;
2651: LD_VAR 0 1
2655: RET
// function PrepareNature ; var i , spots , num , agres , count ; begin
2656: LD_INT 0
2658: PPUSH
2659: PPUSH
2660: PPUSH
2661: PPUSH
2662: PPUSH
2663: PPUSH
// spots = [ [ 78 , 148 ] , [ 68 , 114 ] , [ 80 , 90 ] , [ 96 , 63 ] , [ 178 , 113 ] , [ 147 , 65 ] , [ 124 , 15 ] , [ 114 , 51 ] ] ;
2664: LD_ADDR_VAR 0 3
2668: PUSH
2669: LD_INT 78
2671: PUSH
2672: LD_INT 148
2674: PUSH
2675: EMPTY
2676: LIST
2677: LIST
2678: PUSH
2679: LD_INT 68
2681: PUSH
2682: LD_INT 114
2684: PUSH
2685: EMPTY
2686: LIST
2687: LIST
2688: PUSH
2689: LD_INT 80
2691: PUSH
2692: LD_INT 90
2694: PUSH
2695: EMPTY
2696: LIST
2697: LIST
2698: PUSH
2699: LD_INT 96
2701: PUSH
2702: LD_INT 63
2704: PUSH
2705: EMPTY
2706: LIST
2707: LIST
2708: PUSH
2709: LD_INT 178
2711: PUSH
2712: LD_INT 113
2714: PUSH
2715: EMPTY
2716: LIST
2717: LIST
2718: PUSH
2719: LD_INT 147
2721: PUSH
2722: LD_INT 65
2724: PUSH
2725: EMPTY
2726: LIST
2727: LIST
2728: PUSH
2729: LD_INT 124
2731: PUSH
2732: LD_INT 15
2734: PUSH
2735: EMPTY
2736: LIST
2737: LIST
2738: PUSH
2739: LD_INT 114
2741: PUSH
2742: LD_INT 51
2744: PUSH
2745: EMPTY
2746: LIST
2747: LIST
2748: PUSH
2749: EMPTY
2750: LIST
2751: LIST
2752: LIST
2753: LIST
2754: LIST
2755: LIST
2756: LIST
2757: LIST
2758: ST_TO_ADDR
// InitUc ;
2759: CALL_OW 18
// InitHc ;
2763: CALL_OW 19
// uc_side = nature ;
2767: LD_ADDR_OWVAR 20
2771: PUSH
2772: LD_EXP 3
2776: ST_TO_ADDR
// uc_nation = nation_nature ;
2777: LD_ADDR_OWVAR 21
2781: PUSH
2782: LD_INT 0
2784: ST_TO_ADDR
// agres = - 10 + difficulty * 20 ;
2785: LD_ADDR_VAR 0 5
2789: PUSH
2790: LD_INT 10
2792: NEG
2793: PUSH
2794: LD_OWVAR 67
2798: PUSH
2799: LD_INT 20
2801: MUL
2802: PLUS
2803: ST_TO_ADDR
// count = 3 + Rand ( 0 , 1 ) ;
2804: LD_ADDR_VAR 0 6
2808: PUSH
2809: LD_INT 3
2811: PUSH
2812: LD_INT 0
2814: PPUSH
2815: LD_INT 1
2817: PPUSH
2818: CALL_OW 12
2822: PLUS
2823: ST_TO_ADDR
// hc_class = class_apeman ;
2824: LD_ADDR_OWVAR 28
2828: PUSH
2829: LD_INT 12
2831: ST_TO_ADDR
// for i = 1 to count do
2832: LD_ADDR_VAR 0 2
2836: PUSH
2837: DOUBLE
2838: LD_INT 1
2840: DEC
2841: ST_TO_ADDR
2842: LD_VAR 0 6
2846: PUSH
2847: FOR_TO
2848: IFFALSE 3076
// begin if spots = 0 then
2850: LD_VAR 0 3
2854: PUSH
2855: LD_INT 0
2857: EQUAL
2858: IFFALSE 2864
// exit ;
2860: POP
2861: POP
2862: GO 3306
// uc_direction = Rand ( 0 , 5 ) ;
2864: LD_ADDR_OWVAR 24
2868: PUSH
2869: LD_INT 0
2871: PPUSH
2872: LD_INT 5
2874: PPUSH
2875: CALL_OW 12
2879: ST_TO_ADDR
// hc_agressivity = Rand ( - 1 * agres , agres ) ;
2880: LD_ADDR_OWVAR 35
2884: PUSH
2885: LD_INT 1
2887: NEG
2888: PUSH
2889: LD_VAR 0 5
2893: MUL
2894: PPUSH
2895: LD_VAR 0 5
2899: PPUSH
2900: CALL_OW 12
2904: ST_TO_ADDR
// hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
2905: LD_ADDR_OWVAR 29
2909: PUSH
2910: LD_INT 11
2912: PPUSH
2913: LD_INT 13
2915: PPUSH
2916: CALL_OW 12
2920: PUSH
2921: LD_INT 10
2923: PPUSH
2924: LD_INT 11
2926: PPUSH
2927: CALL_OW 12
2931: PUSH
2932: EMPTY
2933: LIST
2934: LIST
2935: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
2936: LD_ADDR_OWVAR 27
2940: PUSH
2941: LD_INT 1
2943: PPUSH
2944: LD_INT 2
2946: PPUSH
2947: CALL_OW 12
2951: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 1 ) , Rand ( 0 , 1 ) , 0 , 0 ] ;
2952: LD_ADDR_OWVAR 31
2956: PUSH
2957: LD_INT 0
2959: PPUSH
2960: LD_INT 1
2962: PPUSH
2963: CALL_OW 12
2967: PUSH
2968: LD_INT 0
2970: PPUSH
2971: LD_INT 1
2973: PPUSH
2974: CALL_OW 12
2978: PUSH
2979: LD_INT 0
2981: PUSH
2982: LD_INT 0
2984: PUSH
2985: EMPTY
2986: LIST
2987: LIST
2988: LIST
2989: LIST
2990: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
2991: LD_ADDR_VAR 0 4
2995: PUSH
2996: LD_INT 1
2998: PPUSH
2999: LD_VAR 0 3
3003: PPUSH
3004: CALL_OW 12
3008: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
3009: CALL_OW 44
3013: PPUSH
3014: LD_VAR 0 3
3018: PUSH
3019: LD_VAR 0 4
3023: ARRAY
3024: PUSH
3025: LD_INT 1
3027: ARRAY
3028: PPUSH
3029: LD_VAR 0 3
3033: PUSH
3034: LD_VAR 0 4
3038: ARRAY
3039: PUSH
3040: LD_INT 2
3042: ARRAY
3043: PPUSH
3044: LD_INT 5
3046: PPUSH
3047: LD_INT 0
3049: PPUSH
3050: CALL_OW 50
// spots = Delete ( spots , num ) ;
3054: LD_ADDR_VAR 0 3
3058: PUSH
3059: LD_VAR 0 3
3063: PPUSH
3064: LD_VAR 0 4
3068: PPUSH
3069: CALL_OW 3
3073: ST_TO_ADDR
// end ;
3074: GO 2847
3076: POP
3077: POP
// hc_class = class_baggie ;
3078: LD_ADDR_OWVAR 28
3082: PUSH
3083: LD_INT 13
3085: ST_TO_ADDR
// hc_gallery = nature_foreg ;
3086: LD_ADDR_OWVAR 33
3090: PUSH
3091: LD_STRING nature_foreg
3093: ST_TO_ADDR
// hc_face_number = 4 ;
3094: LD_ADDR_OWVAR 34
3098: PUSH
3099: LD_INT 4
3101: ST_TO_ADDR
// hc_skills = [ 0 , 0 , 0 , 0 ] ;
3102: LD_ADDR_OWVAR 31
3106: PUSH
3107: LD_INT 0
3109: PUSH
3110: LD_INT 0
3112: PUSH
3113: LD_INT 0
3115: PUSH
3116: LD_INT 0
3118: PUSH
3119: EMPTY
3120: LIST
3121: LIST
3122: LIST
3123: LIST
3124: ST_TO_ADDR
// for i = 1 to 2 do
3125: LD_ADDR_VAR 0 2
3129: PUSH
3130: DOUBLE
3131: LD_INT 1
3133: DEC
3134: ST_TO_ADDR
3135: LD_INT 2
3137: PUSH
3138: FOR_TO
3139: IFFALSE 3304
// begin if spots = 0 then
3141: LD_VAR 0 3
3145: PUSH
3146: LD_INT 0
3148: EQUAL
3149: IFFALSE 3155
// exit ;
3151: POP
3152: POP
3153: GO 3306
// uc_direction = Rand ( 0 , 5 ) ;
3155: LD_ADDR_OWVAR 24
3159: PUSH
3160: LD_INT 0
3162: PPUSH
3163: LD_INT 5
3165: PPUSH
3166: CALL_OW 12
3170: ST_TO_ADDR
// hc_agressivity = Rand ( - 30 , 0 ) ;
3171: LD_ADDR_OWVAR 35
3175: PUSH
3176: LD_INT 30
3178: NEG
3179: PPUSH
3180: LD_INT 0
3182: PPUSH
3183: CALL_OW 12
3187: ST_TO_ADDR
// hc_attr = [ Rand ( 9 , 10 ) , Rand ( 11 , 12 ) ] ;
3188: LD_ADDR_OWVAR 29
3192: PUSH
3193: LD_INT 9
3195: PPUSH
3196: LD_INT 10
3198: PPUSH
3199: CALL_OW 12
3203: PUSH
3204: LD_INT 11
3206: PPUSH
3207: LD_INT 12
3209: PPUSH
3210: CALL_OW 12
3214: PUSH
3215: EMPTY
3216: LIST
3217: LIST
3218: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
3219: LD_ADDR_VAR 0 4
3223: PUSH
3224: LD_INT 1
3226: PPUSH
3227: LD_VAR 0 3
3231: PPUSH
3232: CALL_OW 12
3236: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
3237: CALL_OW 44
3241: PPUSH
3242: LD_VAR 0 3
3246: PUSH
3247: LD_VAR 0 4
3251: ARRAY
3252: PUSH
3253: LD_INT 1
3255: ARRAY
3256: PPUSH
3257: LD_VAR 0 3
3261: PUSH
3262: LD_VAR 0 4
3266: ARRAY
3267: PUSH
3268: LD_INT 2
3270: ARRAY
3271: PPUSH
3272: LD_INT 5
3274: PPUSH
3275: LD_INT 0
3277: PPUSH
3278: CALL_OW 50
// spots = Delete ( spots , num ) ;
3282: LD_ADDR_VAR 0 3
3286: PUSH
3287: LD_VAR 0 3
3291: PPUSH
3292: LD_VAR 0 4
3296: PPUSH
3297: CALL_OW 3
3301: ST_TO_ADDR
// end ;
3302: GO 3138
3304: POP
3305: POP
// end ;
3306: LD_VAR 0 1
3310: RET
// function PreparePlayer ; var other_folks , i , player_humans , player_vehicles , un , temp_list , driver , temp_list_2 , k ; begin
3311: LD_INT 0
3313: PPUSH
3314: PPUSH
3315: PPUSH
3316: PPUSH
3317: PPUSH
3318: PPUSH
3319: PPUSH
3320: PPUSH
3321: PPUSH
3322: PPUSH
// InitHc ;
3323: CALL_OW 19
// InitUc ;
3327: CALL_OW 18
// uc_side = you ;
3331: LD_ADDR_OWVAR 20
3335: PUSH
3336: LD_EXP 2
3340: ST_TO_ADDR
// uc_nation = nation_arabian ;
3341: LD_ADDR_OWVAR 21
3345: PUSH
3346: LD_INT 2
3348: ST_TO_ADDR
// if not testing then
3349: LD_EXP 1
3353: NOT
3354: IFFALSE 3544
// begin Heike = LoadPlayerChar ( Heike ) ;
3356: LD_ADDR_EXP 10
3360: PUSH
3361: LD_STRING Heike
3363: PPUSH
3364: CALL 5683 0 1
3368: ST_TO_ADDR
// Sonya = LoadPlayerChar ( Sonya ) ;
3369: LD_ADDR_EXP 11
3373: PUSH
3374: LD_STRING Sonya
3376: PPUSH
3377: CALL 5683 0 1
3381: ST_TO_ADDR
// Oswald = LoadPlayerChar ( Oswald ) ;
3382: LD_ADDR_EXP 12
3386: PUSH
3387: LD_STRING Oswald
3389: PPUSH
3390: CALL 5683 0 1
3394: ST_TO_ADDR
// Ralph = LoadPlayerChar ( Ralph ) ;
3395: LD_ADDR_EXP 13
3399: PUSH
3400: LD_STRING Ralph
3402: PPUSH
3403: CALL 5683 0 1
3407: ST_TO_ADDR
// Kowalski = LoadPlayerChar ( Kowalski ) ;
3408: LD_ADDR_EXP 14
3412: PUSH
3413: LD_STRING Kowalski
3415: PPUSH
3416: CALL 5683 0 1
3420: ST_TO_ADDR
// Evelyn = LoadPlayerChar ( Evelyn ) ;
3421: LD_ADDR_EXP 15
3425: PUSH
3426: LD_STRING Evelyn
3428: PPUSH
3429: CALL 5683 0 1
3433: ST_TO_ADDR
// Olaf = LoadPlayerChar ( Olaf ) ;
3434: LD_ADDR_EXP 16
3438: PUSH
3439: LD_STRING Olaf
3441: PPUSH
3442: CALL 5683 0 1
3446: ST_TO_ADDR
// Dwayne = LoadPlayerChar ( Dwayne ) ;
3447: LD_ADDR_EXP 17
3451: PUSH
3452: LD_STRING Dwayne
3454: PPUSH
3455: CALL 5683 0 1
3459: ST_TO_ADDR
// Aviradze = LoadPlayerChar ( Aviradze ) ;
3460: LD_ADDR_EXP 18
3464: PUSH
3465: LD_STRING Aviradze
3467: PPUSH
3468: CALL 5683 0 1
3472: ST_TO_ADDR
// Swansson = LoadPlayerChar ( Swansson ) ;
3473: LD_ADDR_EXP 19
3477: PUSH
3478: LD_STRING Swansson
3480: PPUSH
3481: CALL 5683 0 1
3485: ST_TO_ADDR
// Khattam = LoadPlayerChar ( Khattam ) ;
3486: LD_ADDR_EXP 20
3490: PUSH
3491: LD_STRING Khattam
3493: PPUSH
3494: CALL 5683 0 1
3498: ST_TO_ADDR
// Makise = LoadPlayerChar ( Makise ) ;
3499: LD_ADDR_EXP 21
3503: PUSH
3504: LD_STRING Makise
3506: PPUSH
3507: CALL 5683 0 1
3511: ST_TO_ADDR
// Gonzo = LoadPlayerChar ( Gonzo ) ;
3512: LD_ADDR_EXP 22
3516: PUSH
3517: LD_STRING Gonzo
3519: PPUSH
3520: CALL 5683 0 1
3524: ST_TO_ADDR
// other_folks = CreateCharacterSet ( Others_12_sel ) diff 0 ;
3525: LD_ADDR_VAR 0 2
3529: PUSH
3530: LD_STRING Others_12_sel
3532: PPUSH
3533: CALL_OW 31
3537: PUSH
3538: LD_INT 0
3540: DIFF
3541: ST_TO_ADDR
// end else
3542: GO 4014
// begin InitHc ;
3544: CALL_OW 19
// PrepareSoldier ( sex_female , 8 ) ;
3548: LD_INT 2
3550: PPUSH
3551: LD_INT 8
3553: PPUSH
3554: CALL_OW 381
// hc_name = Heike ;
3558: LD_ADDR_OWVAR 26
3562: PUSH
3563: LD_STRING Heike
3565: ST_TO_ADDR
// Heike = CreateHuman ;
3566: LD_ADDR_EXP 10
3570: PUSH
3571: CALL_OW 44
3575: ST_TO_ADDR
// SetClass ( Heike , class_mortar ) ;
3576: LD_EXP 10
3580: PPUSH
3581: LD_INT 8
3583: PPUSH
3584: CALL_OW 336
// PrepareScientist ( sex_male , 8 ) ;
3588: LD_INT 1
3590: PPUSH
3591: LD_INT 8
3593: PPUSH
3594: CALL_OW 384
// hc_name = Aviradze ;
3598: LD_ADDR_OWVAR 26
3602: PUSH
3603: LD_STRING Aviradze
3605: ST_TO_ADDR
// Aviradze = CreateHuman ;
3606: LD_ADDR_EXP 18
3610: PUSH
3611: CALL_OW 44
3615: ST_TO_ADDR
// PrepareScientist ( sex_female , 8 ) ;
3616: LD_INT 2
3618: PPUSH
3619: LD_INT 8
3621: PPUSH
3622: CALL_OW 384
// hc_name = Makise ;
3626: LD_ADDR_OWVAR 26
3630: PUSH
3631: LD_STRING Makise
3633: ST_TO_ADDR
// Makise = CreateHuman ;
3634: LD_ADDR_EXP 21
3638: PUSH
3639: CALL_OW 44
3643: ST_TO_ADDR
// PrepareSoldier ( sex_male , 8 ) ;
3644: LD_INT 1
3646: PPUSH
3647: LD_INT 8
3649: PPUSH
3650: CALL_OW 381
// hc_name = Ralph ;
3654: LD_ADDR_OWVAR 26
3658: PUSH
3659: LD_STRING Ralph
3661: ST_TO_ADDR
// Ralph = CreateHuman ;
3662: LD_ADDR_EXP 13
3666: PUSH
3667: CALL_OW 44
3671: ST_TO_ADDR
// SetClass ( Ralph , class_mortar ) ;
3672: LD_EXP 13
3676: PPUSH
3677: LD_INT 8
3679: PPUSH
3680: CALL_OW 336
// PrepareSoldier ( sex_male , 8 ) ;
3684: LD_INT 1
3686: PPUSH
3687: LD_INT 8
3689: PPUSH
3690: CALL_OW 381
// hc_name = Oswald ;
3694: LD_ADDR_OWVAR 26
3698: PUSH
3699: LD_STRING Oswald
3701: ST_TO_ADDR
// Oswald = CreateHuman ;
3702: LD_ADDR_EXP 12
3706: PUSH
3707: CALL_OW 44
3711: ST_TO_ADDR
// SetClass ( Oswald , class_mortar ) ;
3712: LD_EXP 12
3716: PPUSH
3717: LD_INT 8
3719: PPUSH
3720: CALL_OW 336
// PrepareScientist ( sex_female , 8 ) ;
3724: LD_INT 2
3726: PPUSH
3727: LD_INT 8
3729: PPUSH
3730: CALL_OW 384
// hc_name = Sonya ;
3734: LD_ADDR_OWVAR 26
3738: PUSH
3739: LD_STRING Sonya
3741: ST_TO_ADDR
// Sonya = CreateHuman ;
3742: LD_ADDR_EXP 11
3746: PUSH
3747: CALL_OW 44
3751: ST_TO_ADDR
// SetClass ( Sonya , class_engineer ) ;
3752: LD_EXP 11
3756: PPUSH
3757: LD_INT 2
3759: PPUSH
3760: CALL_OW 336
// if difficulty <= 2 then
3764: LD_OWVAR 67
3768: PUSH
3769: LD_INT 2
3771: LESSEQUAL
3772: IFFALSE 3804
// begin Preparescientist ( sex_male , 8 ) ;
3774: LD_INT 1
3776: PPUSH
3777: LD_INT 8
3779: PPUSH
3780: CALL_OW 384
// hc_name = Khattam ;
3784: LD_ADDR_OWVAR 26
3788: PUSH
3789: LD_STRING Khattam
3791: ST_TO_ADDR
// Khattam = CreateHuman ;
3792: LD_ADDR_EXP 20
3796: PUSH
3797: CALL_OW 44
3801: ST_TO_ADDR
// end else
3802: GO 3812
// Khattam = 0 ;
3804: LD_ADDR_EXP 20
3808: PUSH
3809: LD_INT 0
3811: ST_TO_ADDR
// if difficulty = 1 then
3812: LD_OWVAR 67
3816: PUSH
3817: LD_INT 1
3819: EQUAL
3820: IFFALSE 3864
// begin PrepareSoldier ( sex_male , 8 ) ;
3822: LD_INT 1
3824: PPUSH
3825: LD_INT 8
3827: PPUSH
3828: CALL_OW 381
// hc_name = Kowalski ;
3832: LD_ADDR_OWVAR 26
3836: PUSH
3837: LD_STRING Kowalski
3839: ST_TO_ADDR
// Kowalski = CreateHuman ;
3840: LD_ADDR_EXP 14
3844: PUSH
3845: CALL_OW 44
3849: ST_TO_ADDR
// SetClass ( Kowalski , class_mortar ) ;
3850: LD_EXP 14
3854: PPUSH
3855: LD_INT 8
3857: PPUSH
3858: CALL_OW 336
// end else
3862: GO 3872
// Kowalski = 0 ;
3864: LD_ADDR_EXP 14
3868: PUSH
3869: LD_INT 0
3871: ST_TO_ADDR
// Evelyn = 0 ;
3872: LD_ADDR_EXP 15
3876: PUSH
3877: LD_INT 0
3879: ST_TO_ADDR
// Olaf = 0 ;
3880: LD_ADDR_EXP 16
3884: PUSH
3885: LD_INT 0
3887: ST_TO_ADDR
// Dwayne = 0 ;
3888: LD_ADDR_EXP 17
3892: PUSH
3893: LD_INT 0
3895: ST_TO_ADDR
// Swansson = 0 ;
3896: LD_ADDR_EXP 19
3900: PUSH
3901: LD_INT 0
3903: ST_TO_ADDR
// uc_nation = nation_nature ;
3904: LD_ADDR_OWVAR 21
3908: PUSH
3909: LD_INT 0
3911: ST_TO_ADDR
// hc_name = Gonzo ;
3912: LD_ADDR_OWVAR 26
3916: PUSH
3917: LD_STRING Gonzo
3919: ST_TO_ADDR
// hc_class = class_apeman_soldier ;
3920: LD_ADDR_OWVAR 28
3924: PUSH
3925: LD_INT 15
3927: ST_TO_ADDR
// hc_sex = sex_male ;
3928: LD_ADDR_OWVAR 27
3932: PUSH
3933: LD_INT 1
3935: ST_TO_ADDR
// hc_attr = [ 13 , 12 ] ;
3936: LD_ADDR_OWVAR 29
3940: PUSH
3941: LD_INT 13
3943: PUSH
3944: LD_INT 12
3946: PUSH
3947: EMPTY
3948: LIST
3949: LIST
3950: ST_TO_ADDR
// hc_basic_skills = [ 0 , 0 , 0 , 0 ] ;
3951: LD_ADDR_OWVAR 30
3955: PUSH
3956: LD_INT 0
3958: PUSH
3959: LD_INT 0
3961: PUSH
3962: LD_INT 0
3964: PUSH
3965: LD_INT 0
3967: PUSH
3968: EMPTY
3969: LIST
3970: LIST
3971: LIST
3972: LIST
3973: ST_TO_ADDR
// hc_skills = [ 2 , 0 , 0 , 0 ] ;
3974: LD_ADDR_OWVAR 31
3978: PUSH
3979: LD_INT 2
3981: PUSH
3982: LD_INT 0
3984: PUSH
3985: LD_INT 0
3987: PUSH
3988: LD_INT 0
3990: PUSH
3991: EMPTY
3992: LIST
3993: LIST
3994: LIST
3995: LIST
3996: ST_TO_ADDR
// Gonzo = CreateHuman ;
3997: LD_ADDR_EXP 22
4001: PUSH
4002: CALL_OW 44
4006: ST_TO_ADDR
// other_folks = [ ] ;
4007: LD_ADDR_VAR 0 2
4011: PUSH
4012: EMPTY
4013: ST_TO_ADDR
// end ; Abdul = NewCharacter ( Abdul ) ;
4014: LD_ADDR_EXP 23
4018: PUSH
4019: LD_STRING Abdul
4021: PPUSH
4022: CALL_OW 25
4026: ST_TO_ADDR
// player_humans = ( ( [ Heike , Sonya , Oswald , Ralph , Kowalski , Evelyn , Olaf , Dwayne , Aviradze , Swansson , Khattam , Makise , Gonzo ] ) diff 0 ) ^ other_folks ;
4027: LD_ADDR_VAR 0 4
4031: PUSH
4032: LD_EXP 10
4036: PUSH
4037: LD_EXP 11
4041: PUSH
4042: LD_EXP 12
4046: PUSH
4047: LD_EXP 13
4051: PUSH
4052: LD_EXP 14
4056: PUSH
4057: LD_EXP 15
4061: PUSH
4062: LD_EXP 16
4066: PUSH
4067: LD_EXP 17
4071: PUSH
4072: LD_EXP 18
4076: PUSH
4077: LD_EXP 19
4081: PUSH
4082: LD_EXP 20
4086: PUSH
4087: LD_EXP 21
4091: PUSH
4092: LD_EXP 22
4096: PUSH
4097: EMPTY
4098: LIST
4099: LIST
4100: LIST
4101: LIST
4102: LIST
4103: LIST
4104: LIST
4105: LIST
4106: LIST
4107: LIST
4108: LIST
4109: LIST
4110: LIST
4111: PUSH
4112: LD_INT 0
4114: DIFF
4115: PUSH
4116: LD_VAR 0 2
4120: ADD
4121: ST_TO_ADDR
// if not testing then
4122: LD_EXP 1
4126: NOT
4127: IFFALSE 4146
// temp_list = LoadVariable ( Vehicles_12_sel , [ ] ) else
4129: LD_ADDR_VAR 0 7
4133: PUSH
4134: LD_STRING Vehicles_12_sel
4136: PPUSH
4137: EMPTY
4138: PPUSH
4139: CALL_OW 30
4143: ST_TO_ADDR
4144: GO 4309
// temp_list = [ [ nation_arabian , ar_half_tracked , engine_siberite , control_manual , ar_cargo_bay , 0 , 0 , 0 , 1 ] , [ nation_arabian , ar_half_tracked , engine_siberite , control_manual , ar_cargo_bay , 80 , 0 , 20 , 0 ] , [ nation_arabian , ar_half_tracked , engine_siberite , control_manual , ar_cargo_bay , 40 , 60 , 0 , 0 ] , [ nation_arabian , ar_half_tracked , engine_siberite , control_manual , ar_gun , 0 , 0 , 0 , 0 ] ] ;
4146: LD_ADDR_VAR 0 7
4150: PUSH
4151: LD_INT 2
4153: PUSH
4154: LD_INT 14
4156: PUSH
4157: LD_INT 3
4159: PUSH
4160: LD_INT 1
4162: PUSH
4163: LD_INT 32
4165: PUSH
4166: LD_INT 0
4168: PUSH
4169: LD_INT 0
4171: PUSH
4172: LD_INT 0
4174: PUSH
4175: LD_INT 1
4177: PUSH
4178: EMPTY
4179: LIST
4180: LIST
4181: LIST
4182: LIST
4183: LIST
4184: LIST
4185: LIST
4186: LIST
4187: LIST
4188: PUSH
4189: LD_INT 2
4191: PUSH
4192: LD_INT 14
4194: PUSH
4195: LD_INT 3
4197: PUSH
4198: LD_INT 1
4200: PUSH
4201: LD_INT 32
4203: PUSH
4204: LD_INT 80
4206: PUSH
4207: LD_INT 0
4209: PUSH
4210: LD_INT 20
4212: PUSH
4213: LD_INT 0
4215: PUSH
4216: EMPTY
4217: LIST
4218: LIST
4219: LIST
4220: LIST
4221: LIST
4222: LIST
4223: LIST
4224: LIST
4225: LIST
4226: PUSH
4227: LD_INT 2
4229: PUSH
4230: LD_INT 14
4232: PUSH
4233: LD_INT 3
4235: PUSH
4236: LD_INT 1
4238: PUSH
4239: LD_INT 32
4241: PUSH
4242: LD_INT 40
4244: PUSH
4245: LD_INT 60
4247: PUSH
4248: LD_INT 0
4250: PUSH
4251: LD_INT 0
4253: PUSH
4254: EMPTY
4255: LIST
4256: LIST
4257: LIST
4258: LIST
4259: LIST
4260: LIST
4261: LIST
4262: LIST
4263: LIST
4264: PUSH
4265: LD_INT 2
4267: PUSH
4268: LD_INT 14
4270: PUSH
4271: LD_INT 3
4273: PUSH
4274: LD_INT 1
4276: PUSH
4277: LD_INT 27
4279: PUSH
4280: LD_INT 0
4282: PUSH
4283: LD_INT 0
4285: PUSH
4286: LD_INT 0
4288: PUSH
4289: LD_INT 0
4291: PUSH
4292: EMPTY
4293: LIST
4294: LIST
4295: LIST
4296: LIST
4297: LIST
4298: LIST
4299: LIST
4300: LIST
4301: LIST
4302: PUSH
4303: EMPTY
4304: LIST
4305: LIST
4306: LIST
4307: LIST
4308: ST_TO_ADDR
// player_vehicles = [ ] ;
4309: LD_ADDR_VAR 0 5
4313: PUSH
4314: EMPTY
4315: ST_TO_ADDR
// player_humans = player_humans diff Gonzo ;
4316: LD_ADDR_VAR 0 4
4320: PUSH
4321: LD_VAR 0 4
4325: PUSH
4326: LD_EXP 22
4330: DIFF
4331: ST_TO_ADDR
// for i in temp_list do
4332: LD_ADDR_VAR 0 3
4336: PUSH
4337: LD_VAR 0 7
4341: PUSH
4342: FOR_IN
4343: IFFALSE 4682
// begin uc_nation = i [ 1 ] ;
4345: LD_ADDR_OWVAR 21
4349: PUSH
4350: LD_VAR 0 3
4354: PUSH
4355: LD_INT 1
4357: ARRAY
4358: ST_TO_ADDR
// vc_chassis = i [ 2 ] ;
4359: LD_ADDR_OWVAR 37
4363: PUSH
4364: LD_VAR 0 3
4368: PUSH
4369: LD_INT 2
4371: ARRAY
4372: ST_TO_ADDR
// vc_engine = i [ 3 ] ;
4373: LD_ADDR_OWVAR 39
4377: PUSH
4378: LD_VAR 0 3
4382: PUSH
4383: LD_INT 3
4385: ARRAY
4386: ST_TO_ADDR
// vc_control = i [ 4 ] ;
4387: LD_ADDR_OWVAR 38
4391: PUSH
4392: LD_VAR 0 3
4396: PUSH
4397: LD_INT 4
4399: ARRAY
4400: ST_TO_ADDR
// vc_weapon = i [ 5 ] ;
4401: LD_ADDR_OWVAR 40
4405: PUSH
4406: LD_VAR 0 3
4410: PUSH
4411: LD_INT 5
4413: ARRAY
4414: ST_TO_ADDR
// un = CreateVehicle ;
4415: LD_ADDR_VAR 0 6
4419: PUSH
4420: CALL_OW 45
4424: ST_TO_ADDR
// if vc_weapon in [ ar_cargo_bay , us_cargo_bay , ru_cargo_bay ] then
4425: LD_OWVAR 40
4429: PUSH
4430: LD_INT 32
4432: PUSH
4433: LD_INT 12
4435: PUSH
4436: LD_INT 51
4438: PUSH
4439: EMPTY
4440: LIST
4441: LIST
4442: LIST
4443: IN
4444: IFFALSE 4536
// begin if i [ 9 ] then
4446: LD_VAR 0 3
4450: PUSH
4451: LD_INT 9
4453: ARRAY
4454: IFFALSE 4473
// SetCargo ( un , mat_artifact , 40 ) else
4456: LD_VAR 0 6
4460: PPUSH
4461: LD_INT 4
4463: PPUSH
4464: LD_INT 40
4466: PPUSH
4467: CALL_OW 290
4471: GO 4536
// begin SetCargo ( un , mat_cans , i [ 6 ] ) ;
4473: LD_VAR 0 6
4477: PPUSH
4478: LD_INT 1
4480: PPUSH
4481: LD_VAR 0 3
4485: PUSH
4486: LD_INT 6
4488: ARRAY
4489: PPUSH
4490: CALL_OW 290
// AddCargo ( un , mat_oil , i [ 7 ] ) ;
4494: LD_VAR 0 6
4498: PPUSH
4499: LD_INT 2
4501: PPUSH
4502: LD_VAR 0 3
4506: PUSH
4507: LD_INT 7
4509: ARRAY
4510: PPUSH
4511: CALL_OW 291
// AddCargo ( un , mat_siberit , i [ 8 ] ) ;
4515: LD_VAR 0 6
4519: PPUSH
4520: LD_INT 3
4522: PPUSH
4523: LD_VAR 0 3
4527: PUSH
4528: LD_INT 8
4530: ARRAY
4531: PPUSH
4532: CALL_OW 291
// end ; end ; driver = 0 ;
4536: LD_ADDR_VAR 0 8
4540: PUSH
4541: LD_INT 0
4543: ST_TO_ADDR
// if UnitFilter ( player_humans , [ f_class , class_mechanic ] ) > 0 then
4544: LD_VAR 0 4
4548: PPUSH
4549: LD_INT 25
4551: PUSH
4552: LD_INT 3
4554: PUSH
4555: EMPTY
4556: LIST
4557: LIST
4558: PPUSH
4559: CALL_OW 72
4563: PUSH
4564: LD_INT 0
4566: GREATER
4567: IFFALSE 4600
// driver = UnitFilter ( player_humans , [ f_class , class_mechanic ] ) [ 1 ] else
4569: LD_ADDR_VAR 0 8
4573: PUSH
4574: LD_VAR 0 4
4578: PPUSH
4579: LD_INT 25
4581: PUSH
4582: LD_INT 3
4584: PUSH
4585: EMPTY
4586: LIST
4587: LIST
4588: PPUSH
4589: CALL_OW 72
4593: PUSH
4594: LD_INT 1
4596: ARRAY
4597: ST_TO_ADDR
4598: GO 4624
// if player_humans > 0 then
4600: LD_VAR 0 4
4604: PUSH
4605: LD_INT 0
4607: GREATER
4608: IFFALSE 4624
// driver = player_humans [ 1 ] ;
4610: LD_ADDR_VAR 0 8
4614: PUSH
4615: LD_VAR 0 4
4619: PUSH
4620: LD_INT 1
4622: ARRAY
4623: ST_TO_ADDR
// if driver > 0 then
4624: LD_VAR 0 8
4628: PUSH
4629: LD_INT 0
4631: GREATER
4632: IFFALSE 4664
// begin PlaceHumanInUnit ( driver , un ) ;
4634: LD_VAR 0 8
4638: PPUSH
4639: LD_VAR 0 6
4643: PPUSH
4644: CALL_OW 52
// player_humans = player_humans diff driver ;
4648: LD_ADDR_VAR 0 4
4652: PUSH
4653: LD_VAR 0 4
4657: PUSH
4658: LD_VAR 0 8
4662: DIFF
4663: ST_TO_ADDR
// end ; player_vehicles = player_vehicles ^ un ;
4664: LD_ADDR_VAR 0 5
4668: PUSH
4669: LD_VAR 0 5
4673: PUSH
4674: LD_VAR 0 6
4678: ADD
4679: ST_TO_ADDR
// end ;
4680: GO 4342
4682: POP
4683: POP
// if Gonzo > 0 then
4684: LD_EXP 22
4688: PUSH
4689: LD_INT 0
4691: GREATER
4692: IFFALSE 4710
// player_humans = player_humans ^ Gonzo ;
4694: LD_ADDR_VAR 0 4
4698: PUSH
4699: LD_VAR 0 4
4703: PUSH
4704: LD_EXP 22
4708: ADD
4709: ST_TO_ADDR
// for i in player_vehicles ^ player_humans do
4710: LD_ADDR_VAR 0 3
4714: PUSH
4715: LD_VAR 0 5
4719: PUSH
4720: LD_VAR 0 4
4724: ADD
4725: PUSH
4726: FOR_IN
4727: IFFALSE 4758
// begin SetDir ( i , 4 ) ;
4729: LD_VAR 0 3
4733: PPUSH
4734: LD_INT 4
4736: PPUSH
4737: CALL_OW 233
// PlaceUnitArea ( i , player_enter_area , false ) ;
4741: LD_VAR 0 3
4745: PPUSH
4746: LD_INT 1
4748: PPUSH
4749: LD_INT 0
4751: PPUSH
4752: CALL_OW 49
// end ;
4756: GO 4726
4758: POP
4759: POP
// if Aviradze > 0 then
4760: LD_EXP 18
4764: PUSH
4765: LD_INT 0
4767: GREATER
4768: IFFALSE 4785
// SetTech ( tech_biodet , you , state_enabled ) ;
4770: LD_INT 8
4772: PPUSH
4773: LD_EXP 2
4777: PPUSH
4778: LD_INT 1
4780: PPUSH
4781: CALL_OW 322
// InitHc ;
4785: CALL_OW 19
// hc_attr = [ 11 , 10 ] ;
4789: LD_ADDR_OWVAR 29
4793: PUSH
4794: LD_INT 11
4796: PUSH
4797: LD_INT 10
4799: PUSH
4800: EMPTY
4801: LIST
4802: LIST
4803: ST_TO_ADDR
// hc_basic_skills = [ 2 , 0 , 0 , 0 ] ;
4804: LD_ADDR_OWVAR 30
4808: PUSH
4809: LD_INT 2
4811: PUSH
4812: LD_INT 0
4814: PUSH
4815: LD_INT 0
4817: PUSH
4818: LD_INT 0
4820: PUSH
4821: EMPTY
4822: LIST
4823: LIST
4824: LIST
4825: LIST
4826: ST_TO_ADDR
// hc_skills = [ 7 , 2 , 2 , 2 ] ;
4827: LD_ADDR_OWVAR 31
4831: PUSH
4832: LD_INT 7
4834: PUSH
4835: LD_INT 2
4837: PUSH
4838: LD_INT 2
4840: PUSH
4841: LD_INT 2
4843: PUSH
4844: EMPTY
4845: LIST
4846: LIST
4847: LIST
4848: LIST
4849: ST_TO_ADDR
// hc_class = class_soldier ;
4850: LD_ADDR_OWVAR 28
4854: PUSH
4855: LD_INT 1
4857: ST_TO_ADDR
// hc_sex = sex_male ;
4858: LD_ADDR_OWVAR 27
4862: PUSH
4863: LD_INT 1
4865: ST_TO_ADDR
// hc_name = Ortlieb ;
4866: LD_ADDR_OWVAR 26
4870: PUSH
4871: LD_STRING Ortlieb
4873: ST_TO_ADDR
// hc_gallery = ar_new ;
4874: LD_ADDR_OWVAR 33
4878: PUSH
4879: LD_STRING ar_new
4881: ST_TO_ADDR
// hc_face_number = 38 ;
4882: LD_ADDR_OWVAR 34
4886: PUSH
4887: LD_INT 38
4889: ST_TO_ADDR
// Ortlieb = CreateHuman ;
4890: LD_ADDR_EXP 25
4894: PUSH
4895: CALL_OW 44
4899: ST_TO_ADDR
// InitHc ;
4900: CALL_OW 19
// hc_attr = [ 10 , 12 ] ;
4904: LD_ADDR_OWVAR 29
4908: PUSH
4909: LD_INT 10
4911: PUSH
4912: LD_INT 12
4914: PUSH
4915: EMPTY
4916: LIST
4917: LIST
4918: ST_TO_ADDR
// hc_basic_skills = [ 1 , 0 , 1 , 0 ] ;
4919: LD_ADDR_OWVAR 30
4923: PUSH
4924: LD_INT 1
4926: PUSH
4927: LD_INT 0
4929: PUSH
4930: LD_INT 1
4932: PUSH
4933: LD_INT 0
4935: PUSH
4936: EMPTY
4937: LIST
4938: LIST
4939: LIST
4940: LIST
4941: ST_TO_ADDR
// hc_skills = [ 9 , 0 , 4 , 0 ] ;
4942: LD_ADDR_OWVAR 31
4946: PUSH
4947: LD_INT 9
4949: PUSH
4950: LD_INT 0
4952: PUSH
4953: LD_INT 4
4955: PUSH
4956: LD_INT 0
4958: PUSH
4959: EMPTY
4960: LIST
4961: LIST
4962: LIST
4963: LIST
4964: ST_TO_ADDR
// hc_class = class_soldier ;
4965: LD_ADDR_OWVAR 28
4969: PUSH
4970: LD_INT 1
4972: ST_TO_ADDR
// hc_sex = sex_male ;
4973: LD_ADDR_OWVAR 27
4977: PUSH
4978: LD_INT 1
4980: ST_TO_ADDR
// hc_name = Gluckman ;
4981: LD_ADDR_OWVAR 26
4985: PUSH
4986: LD_STRING Gluckman
4988: ST_TO_ADDR
// hc_gallery = ar_new ;
4989: LD_ADDR_OWVAR 33
4993: PUSH
4994: LD_STRING ar_new
4996: ST_TO_ADDR
// hc_face_number = 37 ;
4997: LD_ADDR_OWVAR 34
5001: PUSH
5002: LD_INT 37
5004: ST_TO_ADDR
// un = CreateHuman ;
5005: LD_ADDR_VAR 0 6
5009: PUSH
5010: CALL_OW 44
5014: ST_TO_ADDR
// heike_reinforcements_people = [ Ortlieb , un ] ;
5015: LD_ADDR_EXP 118
5019: PUSH
5020: LD_EXP 25
5024: PUSH
5025: LD_VAR 0 6
5029: PUSH
5030: EMPTY
5031: LIST
5032: LIST
5033: ST_TO_ADDR
// if not testing then
5034: LD_EXP 1
5038: NOT
5039: IFFALSE 5060
// temp_list = CreateCharacterSet ( Others_12_not_sel ) diff 0 else
5041: LD_ADDR_VAR 0 7
5045: PUSH
5046: LD_STRING Others_12_not_sel
5048: PPUSH
5049: CALL_OW 31
5053: PUSH
5054: LD_INT 0
5056: DIFF
5057: ST_TO_ADDR
5058: GO 5151
// begin InitHc ;
5060: CALL_OW 19
// temp_list = [ ] ;
5064: LD_ADDR_VAR 0 7
5068: PUSH
5069: EMPTY
5070: ST_TO_ADDR
// for i = 1 to 3 do
5071: LD_ADDR_VAR 0 3
5075: PUSH
5076: DOUBLE
5077: LD_INT 1
5079: DEC
5080: ST_TO_ADDR
5081: LD_INT 3
5083: PUSH
5084: FOR_TO
5085: IFFALSE 5149
// begin PrepareHuman ( false , [ class_soldier , class_soldier , class_mechanic , class_mechanic , class_scientistic ] [ Rand ( 1 , 5 ) ] , 7 ) ;
5087: LD_INT 0
5089: PPUSH
5090: LD_INT 1
5092: PUSH
5093: LD_INT 1
5095: PUSH
5096: LD_INT 3
5098: PUSH
5099: LD_INT 3
5101: PUSH
5102: LD_INT 4
5104: PUSH
5105: EMPTY
5106: LIST
5107: LIST
5108: LIST
5109: LIST
5110: LIST
5111: PUSH
5112: LD_INT 1
5114: PPUSH
5115: LD_INT 5
5117: PPUSH
5118: CALL_OW 12
5122: ARRAY
5123: PPUSH
5124: LD_INT 7
5126: PPUSH
5127: CALL_OW 380
// temp_list = temp_list ^ CreateHuman ;
5131: LD_ADDR_VAR 0 7
5135: PUSH
5136: LD_VAR 0 7
5140: PUSH
5141: CALL_OW 44
5145: ADD
5146: ST_TO_ADDR
// end ;
5147: GO 5084
5149: POP
5150: POP
// end ; temp_list_2 = [ ] ;
5151: LD_ADDR_VAR 0 9
5155: PUSH
5156: EMPTY
5157: ST_TO_ADDR
// for i in temp_list do
5158: LD_ADDR_VAR 0 3
5162: PUSH
5163: LD_VAR 0 7
5167: PUSH
5168: FOR_IN
5169: IFFALSE 5237
// temp_list_2 = temp_list_2 ^ ( GetSkill ( i , skill_combat ) * 3 + GetSkill ( i , skill_mechanical ) * 3 + GetSkill ( i , skill_scientistic ) * 2 ) ;
5171: LD_ADDR_VAR 0 9
5175: PUSH
5176: LD_VAR 0 9
5180: PUSH
5181: LD_VAR 0 3
5185: PPUSH
5186: LD_INT 1
5188: PPUSH
5189: CALL_OW 259
5193: PUSH
5194: LD_INT 3
5196: MUL
5197: PUSH
5198: LD_VAR 0 3
5202: PPUSH
5203: LD_INT 3
5205: PPUSH
5206: CALL_OW 259
5210: PUSH
5211: LD_INT 3
5213: MUL
5214: PLUS
5215: PUSH
5216: LD_VAR 0 3
5220: PPUSH
5221: LD_INT 4
5223: PPUSH
5224: CALL_OW 259
5228: PUSH
5229: LD_INT 2
5231: MUL
5232: PLUS
5233: ADD
5234: ST_TO_ADDR
5235: GO 5168
5237: POP
5238: POP
// temp_list = SortListByListDesc ( temp_list , temp_list_2 ) ;
5239: LD_ADDR_VAR 0 7
5243: PUSH
5244: LD_VAR 0 7
5248: PPUSH
5249: LD_VAR 0 9
5253: PPUSH
5254: CALL_OW 77
5258: ST_TO_ADDR
// for i = 1 to [ 6 , 5 , 4 ] [ difficulty ] do
5259: LD_ADDR_VAR 0 3
5263: PUSH
5264: DOUBLE
5265: LD_INT 1
5267: DEC
5268: ST_TO_ADDR
5269: LD_INT 6
5271: PUSH
5272: LD_INT 5
5274: PUSH
5275: LD_INT 4
5277: PUSH
5278: EMPTY
5279: LIST
5280: LIST
5281: LIST
5282: PUSH
5283: LD_OWVAR 67
5287: ARRAY
5288: PUSH
5289: FOR_TO
5290: IFFALSE 5403
// begin if temp_list = 0 then
5292: LD_VAR 0 7
5296: PUSH
5297: LD_INT 0
5299: EQUAL
5300: IFFALSE 5363
// begin InitHc ;
5302: CALL_OW 19
// PrepareHuman ( false , [ class_soldier , class_soldier , class_mechanic , class_mechanic , class_scientistic ] [ Rand ( 1 , 5 ) ] , 7 ) ;
5306: LD_INT 0
5308: PPUSH
5309: LD_INT 1
5311: PUSH
5312: LD_INT 1
5314: PUSH
5315: LD_INT 3
5317: PUSH
5318: LD_INT 3
5320: PUSH
5321: LD_INT 4
5323: PUSH
5324: EMPTY
5325: LIST
5326: LIST
5327: LIST
5328: LIST
5329: LIST
5330: PUSH
5331: LD_INT 1
5333: PPUSH
5334: LD_INT 5
5336: PPUSH
5337: CALL_OW 12
5341: ARRAY
5342: PPUSH
5343: LD_INT 7
5345: PPUSH
5346: CALL_OW 380
// temp_list = [ CreateHuman ] ;
5350: LD_ADDR_VAR 0 7
5354: PUSH
5355: CALL_OW 44
5359: PUSH
5360: EMPTY
5361: LIST
5362: ST_TO_ADDR
// end ; heike_reinforcements_people = heike_reinforcements_people ^ temp_list [ 1 ] ;
5363: LD_ADDR_EXP 118
5367: PUSH
5368: LD_EXP 118
5372: PUSH
5373: LD_VAR 0 7
5377: PUSH
5378: LD_INT 1
5380: ARRAY
5381: ADD
5382: ST_TO_ADDR
// temp_list = Delete ( temp_list , 1 ) ;
5383: LD_ADDR_VAR 0 7
5387: PUSH
5388: LD_VAR 0 7
5392: PPUSH
5393: LD_INT 1
5395: PPUSH
5396: CALL_OW 3
5400: ST_TO_ADDR
// end ;
5401: GO 5289
5403: POP
5404: POP
// for i in temp_list do
5405: LD_ADDR_VAR 0 3
5409: PUSH
5410: LD_VAR 0 7
5414: PUSH
5415: FOR_IN
5416: IFFALSE 5432
// SetLastMission ( i , 11 ) ;
5418: LD_VAR 0 3
5422: PPUSH
5423: LD_INT 11
5425: PPUSH
5426: CALL_OW 245
5430: GO 5415
5432: POP
5433: POP
// SaveCharacters ( temp_list , NewKaaba_folks_12_cont2 ) ;
5434: LD_VAR 0 7
5438: PPUSH
5439: LD_STRING NewKaaba_folks_12_cont2
5441: PPUSH
5442: CALL_OW 38
// InitVc ;
5446: CALL_OW 20
// for i = 1 to [ 2 , 1 , 0 ] [ difficulty ] do
5450: LD_ADDR_VAR 0 3
5454: PUSH
5455: DOUBLE
5456: LD_INT 1
5458: DEC
5459: ST_TO_ADDR
5460: LD_INT 2
5462: PUSH
5463: LD_INT 1
5465: PUSH
5466: LD_INT 0
5468: PUSH
5469: EMPTY
5470: LIST
5471: LIST
5472: LIST
5473: PUSH
5474: LD_OWVAR 67
5478: ARRAY
5479: PUSH
5480: FOR_TO
5481: IFFALSE 5676
// begin vc_control = control_manual ;
5483: LD_ADDR_OWVAR 38
5487: PUSH
5488: LD_INT 1
5490: ST_TO_ADDR
// vc_engine = engine_combustion ;
5491: LD_ADDR_OWVAR 39
5495: PUSH
5496: LD_INT 1
5498: ST_TO_ADDR
// vc_chassis = ar_half_tracked ;
5499: LD_ADDR_OWVAR 37
5503: PUSH
5504: LD_INT 14
5506: ST_TO_ADDR
// vc_weapon = [ ar_gatling_gun , ar_gun , ar_rocket_launcher ] [ Rand ( 1 , 3 ) ] ;
5507: LD_ADDR_OWVAR 40
5511: PUSH
5512: LD_INT 25
5514: PUSH
5515: LD_INT 27
5517: PUSH
5518: LD_INT 28
5520: PUSH
5521: EMPTY
5522: LIST
5523: LIST
5524: LIST
5525: PUSH
5526: LD_INT 1
5528: PPUSH
5529: LD_INT 3
5531: PPUSH
5532: CALL_OW 12
5536: ARRAY
5537: ST_TO_ADDR
// un = CreateVehicle ;
5538: LD_ADDR_VAR 0 6
5542: PUSH
5543: CALL_OW 45
5547: ST_TO_ADDR
// heike_reinforcements_vehicles = heike_reinforcements_vehicles ^ un ;
5548: LD_ADDR_EXP 119
5552: PUSH
5553: LD_EXP 119
5557: PUSH
5558: LD_VAR 0 6
5562: ADD
5563: ST_TO_ADDR
// temp_list = [ ] ;
5564: LD_ADDR_VAR 0 7
5568: PUSH
5569: EMPTY
5570: ST_TO_ADDR
// for k in heike_reinforcements_people do
5571: LD_ADDR_VAR 0 10
5575: PUSH
5576: LD_EXP 118
5580: PUSH
5581: FOR_IN
5582: IFFALSE 5610
// temp_list = temp_list ^ GetSkill ( k , skill_mechanical ) ;
5584: LD_ADDR_VAR 0 7
5588: PUSH
5589: LD_VAR 0 7
5593: PUSH
5594: LD_VAR 0 10
5598: PPUSH
5599: LD_INT 3
5601: PPUSH
5602: CALL_OW 259
5606: ADD
5607: ST_TO_ADDR
5608: GO 5581
5610: POP
5611: POP
// driver = BestFromListByList ( heike_reinforcements_people , temp_list ) ;
5612: LD_ADDR_VAR 0 8
5616: PUSH
5617: LD_EXP 118
5621: PPUSH
5622: LD_VAR 0 7
5626: PPUSH
5627: CALL_OW 79
5631: ST_TO_ADDR
// heike_reinforcements_people = heike_reinforcements_people diff driver ;
5632: LD_ADDR_EXP 118
5636: PUSH
5637: LD_EXP 118
5641: PUSH
5642: LD_VAR 0 8
5646: DIFF
5647: ST_TO_ADDR
// SetClass ( driver , class_mechanic ) ;
5648: LD_VAR 0 8
5652: PPUSH
5653: LD_INT 3
5655: PPUSH
5656: CALL_OW 336
// PlaceHumanInUnit ( driver , un ) ;
5660: LD_VAR 0 8
5664: PPUSH
5665: LD_VAR 0 6
5669: PPUSH
5670: CALL_OW 52
// end ;
5674: GO 5480
5676: POP
5677: POP
// end ;
5678: LD_VAR 0 1
5682: RET
// function LoadPlayerChar ( c_name ) ; begin
5683: LD_INT 0
5685: PPUSH
// if TestCharacters ( c_name & _12_sel ) then
5686: LD_VAR 0 1
5690: PUSH
5691: LD_STRING _12_sel
5693: STR
5694: PPUSH
5695: CALL_OW 28
5699: IFFALSE 5722
// result = CreateCharacter ( c_name & _12_sel ) else
5701: LD_ADDR_VAR 0 2
5705: PUSH
5706: LD_VAR 0 1
5710: PUSH
5711: LD_STRING _12_sel
5713: STR
5714: PPUSH
5715: CALL_OW 34
5719: ST_TO_ADDR
5720: GO 5730
// result = 0 ;
5722: LD_ADDR_VAR 0 2
5726: PUSH
5727: LD_INT 0
5729: ST_TO_ADDR
// end ;
5730: LD_VAR 0 2
5734: RET
// function ScanBuildings ; var side , i , temp_list , base , area , k ; begin
5735: LD_INT 0
5737: PPUSH
5738: PPUSH
5739: PPUSH
5740: PPUSH
5741: PPUSH
5742: PPUSH
5743: PPUSH
// for base in ai_bases do
5744: LD_ADDR_VAR 0 5
5748: PUSH
5749: LD_EXP 26
5753: PUSH
5754: FOR_IN
5755: IFFALSE 6452
// begin area = GetBaseArea ( base ) ;
5757: LD_ADDR_VAR 0 6
5761: PUSH
5762: LD_VAR 0 5
5766: PPUSH
5767: CALL 18845 0 1
5771: ST_TO_ADDR
// side = GetBaseSide ( base ) ;
5772: LD_ADDR_VAR 0 2
5776: PUSH
5777: LD_VAR 0 5
5781: PPUSH
5782: CALL 18937 0 1
5786: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_building ] , [ f_inarea , area ] ] ) ) ;
5787: LD_ADDR_EXP 62
5791: PUSH
5792: LD_EXP 62
5796: PPUSH
5797: LD_VAR 0 5
5801: PPUSH
5802: LD_INT 22
5804: PUSH
5805: LD_VAR 0 2
5809: PUSH
5810: EMPTY
5811: LIST
5812: LIST
5813: PUSH
5814: LD_INT 21
5816: PUSH
5817: LD_INT 3
5819: PUSH
5820: EMPTY
5821: LIST
5822: LIST
5823: PUSH
5824: LD_INT 95
5826: PUSH
5827: LD_VAR 0 6
5831: PUSH
5832: EMPTY
5833: LIST
5834: LIST
5835: PUSH
5836: EMPTY
5837: LIST
5838: LIST
5839: LIST
5840: PPUSH
5841: CALL_OW 69
5845: PPUSH
5846: CALL_OW 1
5850: ST_TO_ADDR
// if base = 1 then
5851: LD_VAR 0 5
5855: PUSH
5856: LD_INT 1
5858: EQUAL
5859: IFFALSE 6183
// begin for i in ai_all_buildings [ base ] do
5861: LD_ADDR_VAR 0 3
5865: PUSH
5866: LD_EXP 62
5870: PUSH
5871: LD_VAR 0 5
5875: ARRAY
5876: PUSH
5877: FOR_IN
5878: IFFALSE 6060
// begin if GetNation ( i ) = nation_arabian then
5880: LD_VAR 0 3
5884: PPUSH
5885: CALL_OW 248
5889: PUSH
5890: LD_INT 2
5892: EQUAL
5893: IFFALSE 5897
// continue ;
5895: GO 5877
// if GetBType ( i ) in [ b_depot , b_warehouse ] then
5897: LD_VAR 0 3
5901: PPUSH
5902: CALL_OW 266
5906: PUSH
5907: LD_INT 0
5909: PUSH
5910: LD_INT 1
5912: PUSH
5913: EMPTY
5914: LIST
5915: LIST
5916: IN
5917: IFFALSE 5921
// continue ;
5919: GO 5877
// if GetBType ( i ) in [ b_armoury , b_barracks , b_bunker , b_turret , b_breastwork ] then
5921: LD_VAR 0 3
5925: PPUSH
5926: CALL_OW 266
5930: PUSH
5931: LD_INT 4
5933: PUSH
5934: LD_INT 5
5936: PUSH
5937: LD_INT 32
5939: PUSH
5940: LD_INT 33
5942: PUSH
5943: LD_INT 31
5945: PUSH
5946: EMPTY
5947: LIST
5948: LIST
5949: LIST
5950: LIST
5951: LIST
5952: IN
5953: IFFALSE 5994
// k = Rand ( 800 , 1000 ) - [ 500 , 450 , 400 ] [ difficulty ] else
5955: LD_ADDR_VAR 0 7
5959: PUSH
5960: LD_INT 800
5962: PPUSH
5963: LD_INT 1000
5965: PPUSH
5966: CALL_OW 12
5970: PUSH
5971: LD_INT 500
5973: PUSH
5974: LD_INT 450
5976: PUSH
5977: LD_INT 400
5979: PUSH
5980: EMPTY
5981: LIST
5982: LIST
5983: LIST
5984: PUSH
5985: LD_OWVAR 67
5989: ARRAY
5990: MINUS
5991: ST_TO_ADDR
5992: GO 6044
// if Rand ( 1 , 4 ) = 1 then
5994: LD_INT 1
5996: PPUSH
5997: LD_INT 4
5999: PPUSH
6000: CALL_OW 12
6004: PUSH
6005: LD_INT 1
6007: EQUAL
6008: IFFALSE 6028
// k = Rand ( 300 , 500 ) else
6010: LD_ADDR_VAR 0 7
6014: PUSH
6015: LD_INT 300
6017: PPUSH
6018: LD_INT 500
6020: PPUSH
6021: CALL_OW 12
6025: ST_TO_ADDR
6026: GO 6044
// k = Rand ( 700 , 1000 ) ;
6028: LD_ADDR_VAR 0 7
6032: PUSH
6033: LD_INT 700
6035: PPUSH
6036: LD_INT 1000
6038: PPUSH
6039: CALL_OW 12
6043: ST_TO_ADDR
// SetLives ( i , k ) ;
6044: LD_VAR 0 3
6048: PPUSH
6049: LD_VAR 0 7
6053: PPUSH
6054: CALL_OW 234
// end ;
6058: GO 5877
6060: POP
6061: POP
// i = 1 ;
6062: LD_ADDR_VAR 0 3
6066: PUSH
6067: LD_INT 1
6069: ST_TO_ADDR
// while i <= ai_all_buildings [ base ] do
6070: LD_VAR 0 3
6074: PUSH
6075: LD_EXP 62
6079: PUSH
6080: LD_VAR 0 5
6084: ARRAY
6085: LESSEQUAL
6086: IFFALSE 6183
// begin if IsInArea ( ai_all_buildings [ base ] [ i ] , legion_base_ignore_scan ) then
6088: LD_EXP 62
6092: PUSH
6093: LD_VAR 0 5
6097: ARRAY
6098: PUSH
6099: LD_VAR 0 3
6103: ARRAY
6104: PPUSH
6105: LD_INT 4
6107: PPUSH
6108: CALL_OW 308
6112: IFFALSE 6167
// begin temp_list = Delete ( ai_all_buildings [ base ] , i ) ;
6114: LD_ADDR_VAR 0 4
6118: PUSH
6119: LD_EXP 62
6123: PUSH
6124: LD_VAR 0 5
6128: ARRAY
6129: PPUSH
6130: LD_VAR 0 3
6134: PPUSH
6135: CALL_OW 3
6139: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
6140: LD_ADDR_EXP 62
6144: PUSH
6145: LD_EXP 62
6149: PPUSH
6150: LD_VAR 0 5
6154: PPUSH
6155: LD_VAR 0 4
6159: PPUSH
6160: CALL_OW 1
6164: ST_TO_ADDR
// continue ;
6165: GO 6070
// end ; i = i + 1 ;
6167: LD_ADDR_VAR 0 3
6171: PUSH
6172: LD_VAR 0 3
6176: PUSH
6177: LD_INT 1
6179: PLUS
6180: ST_TO_ADDR
// end ;
6181: GO 6070
// end ; for i in ai_all_buildings [ base ] do
6183: LD_ADDR_VAR 0 3
6187: PUSH
6188: LD_EXP 62
6192: PUSH
6193: LD_VAR 0 5
6197: ARRAY
6198: PUSH
6199: FOR_IN
6200: IFFALSE 6221
// UpdateBuildingBasicVariables ( base , i , true ) ;
6202: LD_VAR 0 5
6206: PPUSH
6207: LD_VAR 0 3
6211: PPUSH
6212: LD_INT 1
6214: PPUSH
6215: CALL 6500 0 3
6219: GO 6199
6221: POP
6222: POP
// temp_list = [ ] ;
6223: LD_ADDR_VAR 0 4
6227: PUSH
6228: EMPTY
6229: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
6230: LD_ADDR_VAR 0 3
6234: PUSH
6235: LD_EXP 62
6239: PUSH
6240: LD_VAR 0 5
6244: ARRAY
6245: PUSH
6246: FOR_IN
6247: IFFALSE 6350
// begin temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , GetBWeapon ( i ) ] ] ;
6249: LD_ADDR_VAR 0 4
6253: PUSH
6254: LD_VAR 0 4
6258: PUSH
6259: LD_VAR 0 3
6263: PPUSH
6264: CALL_OW 250
6268: PUSH
6269: LD_VAR 0 3
6273: PPUSH
6274: CALL_OW 251
6278: PUSH
6279: LD_VAR 0 3
6283: PPUSH
6284: CALL_OW 254
6288: PUSH
6289: LD_VAR 0 3
6293: PPUSH
6294: CALL_OW 266
6298: PUSH
6299: LD_VAR 0 3
6303: PPUSH
6304: LD_INT 1
6306: PPUSH
6307: CALL_OW 268
6311: PUSH
6312: LD_VAR 0 3
6316: PPUSH
6317: LD_INT 2
6319: PPUSH
6320: CALL_OW 268
6324: PUSH
6325: LD_VAR 0 3
6329: PPUSH
6330: CALL_OW 269
6334: PUSH
6335: EMPTY
6336: LIST
6337: LIST
6338: LIST
6339: LIST
6340: LIST
6341: LIST
6342: LIST
6343: PUSH
6344: EMPTY
6345: LIST
6346: ADD
6347: ST_TO_ADDR
// end ;
6348: GO 6246
6350: POP
6351: POP
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
6352: LD_ADDR_EXP 48
6356: PUSH
6357: LD_EXP 48
6361: PPUSH
6362: LD_VAR 0 5
6366: PPUSH
6367: LD_VAR 0 4
6371: PPUSH
6372: CALL_OW 1
6376: ST_TO_ADDR
// SortBuildingLocationsListInCorrectOrder ( base ) ;
6377: LD_VAR 0 5
6381: PPUSH
6382: CALL 7712 0 1
// for i in ai_siberite_mines [ base ] ^ ai_oil_mine [ base ] do
6386: LD_ADDR_VAR 0 3
6390: PUSH
6391: LD_EXP 43
6395: PUSH
6396: LD_VAR 0 5
6400: ARRAY
6401: PUSH
6402: LD_EXP 42
6406: PUSH
6407: LD_VAR 0 5
6411: ARRAY
6412: ADD
6413: PUSH
6414: FOR_IN
6415: IFFALSE 6448
// SetResourceVisibility ( GetX ( i ) , GetY ( i ) , side ) ;
6417: LD_VAR 0 3
6421: PPUSH
6422: CALL_OW 250
6426: PPUSH
6427: LD_VAR 0 3
6431: PPUSH
6432: CALL_OW 251
6436: PPUSH
6437: LD_VAR 0 2
6441: PPUSH
6442: CALL_OW 441
6446: GO 6414
6448: POP
6449: POP
// end ;
6450: GO 5754
6452: POP
6453: POP
// ai_fact_extension_replace_locations = Replace ( ai_fact_extension_replace_locations , 2 , [ [ GetX ( am_ext_rep ) , GetY ( am_ext_rep ) ] ] ) ;
6454: LD_ADDR_EXP 84
6458: PUSH
6459: LD_EXP 84
6463: PPUSH
6464: LD_INT 2
6466: PPUSH
6467: LD_INT 163
6469: PPUSH
6470: CALL_OW 250
6474: PUSH
6475: LD_INT 163
6477: PPUSH
6478: CALL_OW 251
6482: PUSH
6483: EMPTY
6484: LIST
6485: LIST
6486: PUSH
6487: EMPTY
6488: LIST
6489: PPUSH
6490: CALL_OW 1
6494: ST_TO_ADDR
// end ;
6495: LD_VAR 0 1
6499: RET
// export function UpdateBuildingBasicVariables ( base , un , add ) ; var temp_list ; begin
6500: LD_INT 0
6502: PPUSH
6503: PPUSH
// case GetBType ( un ) of b_depot , b_warehouse :
6504: LD_VAR 0 2
6508: PPUSH
6509: CALL_OW 266
6513: PUSH
6514: LD_INT 0
6516: DOUBLE
6517: EQUAL
6518: IFTRUE 6528
6520: LD_INT 1
6522: DOUBLE
6523: EQUAL
6524: IFTRUE 6528
6526: GO 6605
6528: POP
// if add then
6529: LD_VAR 0 3
6533: IFFALSE 6562
// ai_depot = Replace ( ai_depot , base , un ) else
6535: LD_ADDR_EXP 36
6539: PUSH
6540: LD_EXP 36
6544: PPUSH
6545: LD_VAR 0 1
6549: PPUSH
6550: LD_VAR 0 2
6554: PPUSH
6555: CALL_OW 1
6559: ST_TO_ADDR
6560: GO 6603
// if un = ai_depot [ base ] then
6562: LD_VAR 0 2
6566: PUSH
6567: LD_EXP 36
6571: PUSH
6572: LD_VAR 0 1
6576: ARRAY
6577: EQUAL
6578: IFFALSE 6603
// ai_depot = Replace ( ai_depot , base , 0 ) ; b_lab , b_lab_half , b_lab_full :
6580: LD_ADDR_EXP 36
6584: PUSH
6585: LD_EXP 36
6589: PPUSH
6590: LD_VAR 0 1
6594: PPUSH
6595: LD_INT 0
6597: PPUSH
6598: CALL_OW 1
6602: ST_TO_ADDR
6603: GO 7707
6605: LD_INT 6
6607: DOUBLE
6608: EQUAL
6609: IFTRUE 6625
6611: LD_INT 7
6613: DOUBLE
6614: EQUAL
6615: IFTRUE 6625
6617: LD_INT 8
6619: DOUBLE
6620: EQUAL
6621: IFTRUE 6625
6623: GO 6705
6625: POP
// begin if add then
6626: LD_VAR 0 3
6630: IFFALSE 6656
// temp_list = ai_labs [ base ] ^ un else
6632: LD_ADDR_VAR 0 5
6636: PUSH
6637: LD_EXP 37
6641: PUSH
6642: LD_VAR 0 1
6646: ARRAY
6647: PUSH
6648: LD_VAR 0 2
6652: ADD
6653: ST_TO_ADDR
6654: GO 6678
// temp_list = ai_labs [ base ] diff un ;
6656: LD_ADDR_VAR 0 5
6660: PUSH
6661: LD_EXP 37
6665: PUSH
6666: LD_VAR 0 1
6670: ARRAY
6671: PUSH
6672: LD_VAR 0 2
6676: DIFF
6677: ST_TO_ADDR
// ai_labs = Replace ( ai_labs , base , temp_list ) ;
6678: LD_ADDR_EXP 37
6682: PUSH
6683: LD_EXP 37
6687: PPUSH
6688: LD_VAR 0 1
6692: PPUSH
6693: LD_VAR 0 5
6697: PPUSH
6698: CALL_OW 1
6702: ST_TO_ADDR
// end ; b_factory , b_workshop :
6703: GO 7707
6705: LD_INT 3
6707: DOUBLE
6708: EQUAL
6709: IFTRUE 6719
6711: LD_INT 2
6713: DOUBLE
6714: EQUAL
6715: IFTRUE 6719
6717: GO 6799
6719: POP
// begin if add then
6720: LD_VAR 0 3
6724: IFFALSE 6750
// temp_list = ai_facts [ base ] ^ un else
6726: LD_ADDR_VAR 0 5
6730: PUSH
6731: LD_EXP 38
6735: PUSH
6736: LD_VAR 0 1
6740: ARRAY
6741: PUSH
6742: LD_VAR 0 2
6746: ADD
6747: ST_TO_ADDR
6748: GO 6772
// temp_list = ai_facts [ base ] diff un ;
6750: LD_ADDR_VAR 0 5
6754: PUSH
6755: LD_EXP 38
6759: PUSH
6760: LD_VAR 0 1
6764: ARRAY
6765: PUSH
6766: LD_VAR 0 2
6770: DIFF
6771: ST_TO_ADDR
// ai_facts = Replace ( ai_facts , base , temp_list ) ;
6772: LD_ADDR_EXP 38
6776: PUSH
6777: LD_EXP 38
6781: PPUSH
6782: LD_VAR 0 1
6786: PPUSH
6787: LD_VAR 0 5
6791: PPUSH
6792: CALL_OW 1
6796: ST_TO_ADDR
// end ; b_armoury , b_barracks , b_fort :
6797: GO 7707
6799: LD_INT 4
6801: DOUBLE
6802: EQUAL
6803: IFTRUE 6819
6805: LD_INT 5
6807: DOUBLE
6808: EQUAL
6809: IFTRUE 6819
6811: LD_INT 35
6813: DOUBLE
6814: EQUAL
6815: IFTRUE 6819
6817: GO 6899
6819: POP
// begin if add then
6820: LD_VAR 0 3
6824: IFFALSE 6850
// temp_list = ai_armouries [ base ] ^ un else
6826: LD_ADDR_VAR 0 5
6830: PUSH
6831: LD_EXP 39
6835: PUSH
6836: LD_VAR 0 1
6840: ARRAY
6841: PUSH
6842: LD_VAR 0 2
6846: ADD
6847: ST_TO_ADDR
6848: GO 6872
// temp_list = ai_armouries [ base ] diff un ;
6850: LD_ADDR_VAR 0 5
6854: PUSH
6855: LD_EXP 39
6859: PUSH
6860: LD_VAR 0 1
6864: ARRAY
6865: PUSH
6866: LD_VAR 0 2
6870: DIFF
6871: ST_TO_ADDR
// ai_armouries = Replace ( ai_armouries , base , temp_list ) ;
6872: LD_ADDR_EXP 39
6876: PUSH
6877: LD_EXP 39
6881: PPUSH
6882: LD_VAR 0 1
6886: PPUSH
6887: LD_VAR 0 5
6891: PPUSH
6892: CALL_OW 1
6896: ST_TO_ADDR
// end ; b_breastwork , b_bunker :
6897: GO 7707
6899: LD_INT 31
6901: DOUBLE
6902: EQUAL
6903: IFTRUE 6913
6905: LD_INT 32
6907: DOUBLE
6908: EQUAL
6909: IFTRUE 6913
6911: GO 6993
6913: POP
// begin if add then
6914: LD_VAR 0 3
6918: IFFALSE 6944
// temp_list = ai_bunkers [ base ] ^ un else
6920: LD_ADDR_VAR 0 5
6924: PUSH
6925: LD_EXP 40
6929: PUSH
6930: LD_VAR 0 1
6934: ARRAY
6935: PUSH
6936: LD_VAR 0 2
6940: ADD
6941: ST_TO_ADDR
6942: GO 6966
// temp_list = ai_bunkers [ base ] diff un ;
6944: LD_ADDR_VAR 0 5
6948: PUSH
6949: LD_EXP 40
6953: PUSH
6954: LD_VAR 0 1
6958: ARRAY
6959: PUSH
6960: LD_VAR 0 2
6964: DIFF
6965: ST_TO_ADDR
// ai_bunkers = Replace ( ai_bunkers , base , temp_list ) ;
6966: LD_ADDR_EXP 40
6970: PUSH
6971: LD_EXP 40
6975: PPUSH
6976: LD_VAR 0 1
6980: PPUSH
6981: LD_VAR 0 5
6985: PPUSH
6986: CALL_OW 1
6990: ST_TO_ADDR
// end ; b_turret :
6991: GO 7707
6993: LD_INT 33
6995: DOUBLE
6996: EQUAL
6997: IFTRUE 7001
6999: GO 7081
7001: POP
// begin if add then
7002: LD_VAR 0 3
7006: IFFALSE 7032
// temp_list = ai_turrets [ base ] ^ un else
7008: LD_ADDR_VAR 0 5
7012: PUSH
7013: LD_EXP 41
7017: PUSH
7018: LD_VAR 0 1
7022: ARRAY
7023: PUSH
7024: LD_VAR 0 2
7028: ADD
7029: ST_TO_ADDR
7030: GO 7054
// temp_list = ai_turrets [ base ] diff un ;
7032: LD_ADDR_VAR 0 5
7036: PUSH
7037: LD_EXP 41
7041: PUSH
7042: LD_VAR 0 1
7046: ARRAY
7047: PUSH
7048: LD_VAR 0 2
7052: DIFF
7053: ST_TO_ADDR
// ai_turrets = Replace ( ai_turrets , base , temp_list ) ;
7054: LD_ADDR_EXP 41
7058: PUSH
7059: LD_EXP 41
7063: PPUSH
7064: LD_VAR 0 1
7068: PPUSH
7069: LD_VAR 0 5
7073: PPUSH
7074: CALL_OW 1
7078: ST_TO_ADDR
// end ; b_oil_mine :
7079: GO 7707
7081: LD_INT 29
7083: DOUBLE
7084: EQUAL
7085: IFTRUE 7089
7087: GO 7166
7089: POP
// if add then
7090: LD_VAR 0 3
7094: IFFALSE 7123
// ai_oil_mine = Replace ( ai_oil_mine , base , un ) else
7096: LD_ADDR_EXP 42
7100: PUSH
7101: LD_EXP 42
7105: PPUSH
7106: LD_VAR 0 1
7110: PPUSH
7111: LD_VAR 0 2
7115: PPUSH
7116: CALL_OW 1
7120: ST_TO_ADDR
7121: GO 7164
// if un = ai_oil_mine [ base ] then
7123: LD_VAR 0 2
7127: PUSH
7128: LD_EXP 42
7132: PUSH
7133: LD_VAR 0 1
7137: ARRAY
7138: EQUAL
7139: IFFALSE 7164
// ai_oil_mine = Replace ( ai_oil_mine , base , 0 ) ; b_siberite_mine :
7141: LD_ADDR_EXP 42
7145: PUSH
7146: LD_EXP 42
7150: PPUSH
7151: LD_VAR 0 1
7155: PPUSH
7156: LD_INT 0
7158: PPUSH
7159: CALL_OW 1
7163: ST_TO_ADDR
7164: GO 7707
7166: LD_INT 30
7168: DOUBLE
7169: EQUAL
7170: IFTRUE 7174
7172: GO 7254
7174: POP
// begin if add then
7175: LD_VAR 0 3
7179: IFFALSE 7205
// temp_list = ai_siberite_mines [ base ] ^ un else
7181: LD_ADDR_VAR 0 5
7185: PUSH
7186: LD_EXP 43
7190: PUSH
7191: LD_VAR 0 1
7195: ARRAY
7196: PUSH
7197: LD_VAR 0 2
7201: ADD
7202: ST_TO_ADDR
7203: GO 7227
// temp_list = ai_siberite_mines [ base ] diff un ;
7205: LD_ADDR_VAR 0 5
7209: PUSH
7210: LD_EXP 43
7214: PUSH
7215: LD_VAR 0 1
7219: ARRAY
7220: PUSH
7221: LD_VAR 0 2
7225: DIFF
7226: ST_TO_ADDR
// ai_siberite_mines = Replace ( ai_siberite_mines , base , temp_list ) ;
7227: LD_ADDR_EXP 43
7231: PUSH
7232: LD_EXP 43
7236: PPUSH
7237: LD_VAR 0 1
7241: PPUSH
7242: LD_VAR 0 5
7246: PPUSH
7247: CALL_OW 1
7251: 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 :
7252: GO 7707
7254: LD_INT 17
7256: DOUBLE
7257: EQUAL
7258: IFTRUE 7310
7260: LD_INT 19
7262: DOUBLE
7263: EQUAL
7264: IFTRUE 7310
7266: LD_INT 25
7268: DOUBLE
7269: EQUAL
7270: IFTRUE 7310
7272: LD_INT 24
7274: DOUBLE
7275: EQUAL
7276: IFTRUE 7310
7278: LD_INT 20
7280: DOUBLE
7281: EQUAL
7282: IFTRUE 7310
7284: LD_INT 18
7286: DOUBLE
7287: EQUAL
7288: IFTRUE 7310
7290: LD_INT 21
7292: DOUBLE
7293: EQUAL
7294: IFTRUE 7310
7296: LD_INT 16
7298: DOUBLE
7299: EQUAL
7300: IFTRUE 7310
7302: LD_INT 23
7304: DOUBLE
7305: EQUAL
7306: IFTRUE 7310
7308: GO 7390
7310: POP
// begin if add then
7311: LD_VAR 0 3
7315: IFFALSE 7341
// temp_list = ai_fact_extensions [ base ] ^ un else
7317: LD_ADDR_VAR 0 5
7321: PUSH
7322: LD_EXP 44
7326: PUSH
7327: LD_VAR 0 1
7331: ARRAY
7332: PUSH
7333: LD_VAR 0 2
7337: ADD
7338: ST_TO_ADDR
7339: GO 7363
// temp_list = ai_fact_extensions [ base ] diff un ;
7341: LD_ADDR_VAR 0 5
7345: PUSH
7346: LD_EXP 44
7350: PUSH
7351: LD_VAR 0 1
7355: ARRAY
7356: PUSH
7357: LD_VAR 0 2
7361: DIFF
7362: ST_TO_ADDR
// ai_fact_extensions = Replace ( ai_fact_extensions , base , temp_list ) ;
7363: LD_ADDR_EXP 44
7367: PUSH
7368: LD_EXP 44
7372: PPUSH
7373: LD_VAR 0 1
7377: PPUSH
7378: LD_VAR 0 5
7382: PPUSH
7383: CALL_OW 1
7387: ST_TO_ADDR
// end ; b_solar_power , b_oil_power , b_siberite_power :
7388: GO 7707
7390: LD_INT 27
7392: DOUBLE
7393: EQUAL
7394: IFTRUE 7410
7396: LD_INT 26
7398: DOUBLE
7399: EQUAL
7400: IFTRUE 7410
7402: LD_INT 28
7404: DOUBLE
7405: EQUAL
7406: IFTRUE 7410
7408: GO 7490
7410: POP
// begin if add then
7411: LD_VAR 0 3
7415: IFFALSE 7441
// temp_list = ai_power_plants [ base ] ^ un else
7417: LD_ADDR_VAR 0 5
7421: PUSH
7422: LD_EXP 45
7426: PUSH
7427: LD_VAR 0 1
7431: ARRAY
7432: PUSH
7433: LD_VAR 0 2
7437: ADD
7438: ST_TO_ADDR
7439: GO 7463
// temp_list = ai_power_plants [ base ] diff un ;
7441: LD_ADDR_VAR 0 5
7445: PUSH
7446: LD_EXP 45
7450: PUSH
7451: LD_VAR 0 1
7455: ARRAY
7456: PUSH
7457: LD_VAR 0 2
7461: DIFF
7462: ST_TO_ADDR
// ai_power_plants = Replace ( ai_power_plants , base , temp_list ) ;
7463: LD_ADDR_EXP 45
7467: PUSH
7468: LD_EXP 45
7472: PPUSH
7473: LD_VAR 0 1
7477: PPUSH
7478: LD_VAR 0 5
7482: PPUSH
7483: CALL_OW 1
7487: ST_TO_ADDR
// end ; b_control_tower :
7488: GO 7707
7490: LD_INT 36
7492: DOUBLE
7493: EQUAL
7494: IFTRUE 7498
7496: GO 7575
7498: POP
// begin if add then
7499: LD_VAR 0 3
7503: IFFALSE 7532
// ai_control_tower = Replace ( ai_control_tower , base , un ) else
7505: LD_ADDR_EXP 46
7509: PUSH
7510: LD_EXP 46
7514: PPUSH
7515: LD_VAR 0 1
7519: PPUSH
7520: LD_VAR 0 2
7524: PPUSH
7525: CALL_OW 1
7529: ST_TO_ADDR
7530: GO 7573
// if un = ai_control_tower [ base ] then
7532: LD_VAR 0 2
7536: PUSH
7537: LD_EXP 46
7541: PUSH
7542: LD_VAR 0 1
7546: ARRAY
7547: EQUAL
7548: IFFALSE 7573
// ai_control_tower = Replace ( ai_control_tower , base , 0 ) ;
7550: LD_ADDR_EXP 46
7554: PUSH
7555: LD_EXP 46
7559: PPUSH
7560: LD_VAR 0 1
7564: PPUSH
7565: LD_INT 0
7567: PPUSH
7568: CALL_OW 1
7572: ST_TO_ADDR
// end ; b_teleport :
7573: GO 7707
7575: LD_INT 34
7577: DOUBLE
7578: EQUAL
7579: IFTRUE 7583
7581: GO 7706
7583: POP
// begin if add then
7584: LD_VAR 0 3
7588: IFFALSE 7640
// begin ai_teleporter = Replace ( ai_teleporter , base , un ) ;
7590: LD_ADDR_EXP 47
7594: PUSH
7595: LD_EXP 47
7599: PPUSH
7600: LD_VAR 0 1
7604: PPUSH
7605: LD_VAR 0 2
7609: PPUSH
7610: CALL_OW 1
7614: ST_TO_ADDR
// ai_teleporter_exit_placed = Replace ( ai_teleporter_exit_placed , base , false ) ;
7615: LD_ADDR_EXP 82
7619: PUSH
7620: LD_EXP 82
7624: PPUSH
7625: LD_VAR 0 1
7629: PPUSH
7630: LD_INT 0
7632: PPUSH
7633: CALL_OW 1
7637: ST_TO_ADDR
// end else
7638: GO 7704
// if un = ai_teleporter [ base ] then
7640: LD_VAR 0 2
7644: PUSH
7645: LD_EXP 47
7649: PUSH
7650: LD_VAR 0 1
7654: ARRAY
7655: EQUAL
7656: IFFALSE 7704
// begin ai_teleporter = Replace ( ai_teleporter , base , 0 ) ;
7658: LD_ADDR_EXP 47
7662: PUSH
7663: LD_EXP 47
7667: PPUSH
7668: LD_VAR 0 1
7672: PPUSH
7673: LD_INT 0
7675: PPUSH
7676: CALL_OW 1
7680: ST_TO_ADDR
// ai_teleporter_exit_placed = Replace ( ai_teleporter_exit_placed , base , false ) ;
7681: LD_ADDR_EXP 82
7685: PUSH
7686: LD_EXP 82
7690: PPUSH
7691: LD_VAR 0 1
7695: PPUSH
7696: LD_INT 0
7698: PPUSH
7699: CALL_OW 1
7703: ST_TO_ADDR
// end ; end ; end ;
7704: GO 7707
7706: POP
// end ;
7707: LD_VAR 0 4
7711: RET
// export function SortBuildingLocationsListInCorrectOrder ( base ) ; var i , temp_list , p ; begin
7712: LD_INT 0
7714: PPUSH
7715: PPUSH
7716: PPUSH
7717: PPUSH
// temp_list = [ ] ;
7718: LD_ADDR_VAR 0 4
7722: PUSH
7723: EMPTY
7724: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
7725: LD_ADDR_VAR 0 3
7729: PUSH
7730: LD_EXP 48
7734: PUSH
7735: LD_VAR 0 1
7739: ARRAY
7740: PUSH
7741: FOR_IN
7742: IFFALSE 8115
// begin case i [ 4 ] of b_depot , b_warehouse :
7744: LD_VAR 0 3
7748: PUSH
7749: LD_INT 4
7751: ARRAY
7752: PUSH
7753: LD_INT 0
7755: DOUBLE
7756: EQUAL
7757: IFTRUE 7767
7759: LD_INT 1
7761: DOUBLE
7762: EQUAL
7763: IFTRUE 7767
7765: GO 7778
7767: POP
// p = 100 ; b_armoury , b_barracks , b_fort :
7768: LD_ADDR_VAR 0 5
7772: PUSH
7773: LD_INT 100
7775: ST_TO_ADDR
7776: GO 8097
7778: LD_INT 4
7780: DOUBLE
7781: EQUAL
7782: IFTRUE 7798
7784: LD_INT 5
7786: DOUBLE
7787: EQUAL
7788: IFTRUE 7798
7790: LD_INT 35
7792: DOUBLE
7793: EQUAL
7794: IFTRUE 7798
7796: GO 7809
7798: POP
// p = 99 ; b_solar_power , b_oil_power , b_siberite_power :
7799: LD_ADDR_VAR 0 5
7803: PUSH
7804: LD_INT 99
7806: ST_TO_ADDR
7807: GO 8097
7809: LD_INT 27
7811: DOUBLE
7812: EQUAL
7813: IFTRUE 7829
7815: LD_INT 26
7817: DOUBLE
7818: EQUAL
7819: IFTRUE 7829
7821: LD_INT 28
7823: DOUBLE
7824: EQUAL
7825: IFTRUE 7829
7827: GO 7840
7829: POP
// p = 98 ; b_breastwork :
7830: LD_ADDR_VAR 0 5
7834: PUSH
7835: LD_INT 98
7837: ST_TO_ADDR
7838: GO 8097
7840: LD_INT 31
7842: DOUBLE
7843: EQUAL
7844: IFTRUE 7848
7846: GO 7859
7848: POP
// p = 97 ; b_factory , b_workshop :
7849: LD_ADDR_VAR 0 5
7853: PUSH
7854: LD_INT 97
7856: ST_TO_ADDR
7857: GO 8097
7859: LD_INT 3
7861: DOUBLE
7862: EQUAL
7863: IFTRUE 7873
7865: LD_INT 2
7867: DOUBLE
7868: EQUAL
7869: IFTRUE 7873
7871: GO 7884
7873: 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 :
7874: LD_ADDR_VAR 0 5
7878: PUSH
7879: LD_INT 96
7881: ST_TO_ADDR
7882: GO 8097
7884: LD_INT 17
7886: DOUBLE
7887: EQUAL
7888: IFTRUE 7940
7890: LD_INT 19
7892: DOUBLE
7893: EQUAL
7894: IFTRUE 7940
7896: LD_INT 25
7898: DOUBLE
7899: EQUAL
7900: IFTRUE 7940
7902: LD_INT 24
7904: DOUBLE
7905: EQUAL
7906: IFTRUE 7940
7908: LD_INT 20
7910: DOUBLE
7911: EQUAL
7912: IFTRUE 7940
7914: LD_INT 18
7916: DOUBLE
7917: EQUAL
7918: IFTRUE 7940
7920: LD_INT 21
7922: DOUBLE
7923: EQUAL
7924: IFTRUE 7940
7926: LD_INT 16
7928: DOUBLE
7929: EQUAL
7930: IFTRUE 7940
7932: LD_INT 23
7934: DOUBLE
7935: EQUAL
7936: IFTRUE 7940
7938: GO 7951
7940: POP
// p = 95 ; b_bunker :
7941: LD_ADDR_VAR 0 5
7945: PUSH
7946: LD_INT 95
7948: ST_TO_ADDR
7949: GO 8097
7951: LD_INT 32
7953: DOUBLE
7954: EQUAL
7955: IFTRUE 7959
7957: GO 7970
7959: POP
// p = 94 ; b_control_tower :
7960: LD_ADDR_VAR 0 5
7964: PUSH
7965: LD_INT 94
7967: ST_TO_ADDR
7968: GO 8097
7970: LD_INT 36
7972: DOUBLE
7973: EQUAL
7974: IFTRUE 7978
7976: GO 7989
7978: POP
// p = 93 ; b_turret :
7979: LD_ADDR_VAR 0 5
7983: PUSH
7984: LD_INT 93
7986: ST_TO_ADDR
7987: GO 8097
7989: LD_INT 33
7991: DOUBLE
7992: EQUAL
7993: IFTRUE 7997
7995: GO 8008
7997: POP
// p = 92 ; b_lab , b_lab_half , b_lab_full :
7998: LD_ADDR_VAR 0 5
8002: PUSH
8003: LD_INT 92
8005: ST_TO_ADDR
8006: GO 8097
8008: LD_INT 6
8010: DOUBLE
8011: EQUAL
8012: IFTRUE 8028
8014: LD_INT 7
8016: DOUBLE
8017: EQUAL
8018: IFTRUE 8028
8020: LD_INT 8
8022: DOUBLE
8023: EQUAL
8024: IFTRUE 8028
8026: GO 8039
8028: POP
// p = 91 ; b_teleport :
8029: LD_ADDR_VAR 0 5
8033: PUSH
8034: LD_INT 91
8036: ST_TO_ADDR
8037: GO 8097
8039: LD_INT 34
8041: DOUBLE
8042: EQUAL
8043: IFTRUE 8047
8045: GO 8058
8047: POP
// p = 90 ; b_siberite_mine :
8048: LD_ADDR_VAR 0 5
8052: PUSH
8053: LD_INT 90
8055: ST_TO_ADDR
8056: GO 8097
8058: LD_INT 30
8060: DOUBLE
8061: EQUAL
8062: IFTRUE 8066
8064: GO 8077
8066: POP
// p = 89 ; b_oil_mine :
8067: LD_ADDR_VAR 0 5
8071: PUSH
8072: LD_INT 89
8074: ST_TO_ADDR
8075: GO 8097
8077: LD_INT 29
8079: DOUBLE
8080: EQUAL
8081: IFTRUE 8085
8083: GO 8096
8085: POP
// p = 88 ; end ;
8086: LD_ADDR_VAR 0 5
8090: PUSH
8091: LD_INT 88
8093: ST_TO_ADDR
8094: GO 8097
8096: POP
// temp_list = temp_list ^ p ;
8097: LD_ADDR_VAR 0 4
8101: PUSH
8102: LD_VAR 0 4
8106: PUSH
8107: LD_VAR 0 5
8111: ADD
8112: ST_TO_ADDR
// end ;
8113: GO 7741
8115: POP
8116: POP
// temp_list = SortListByListDesc ( ai_buildings_locations [ base ] , temp_list ) ;
8117: LD_ADDR_VAR 0 4
8121: PUSH
8122: LD_EXP 48
8126: PUSH
8127: LD_VAR 0 1
8131: ARRAY
8132: PPUSH
8133: LD_VAR 0 4
8137: PPUSH
8138: CALL_OW 77
8142: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
8143: LD_ADDR_EXP 48
8147: PUSH
8148: LD_EXP 48
8152: PPUSH
8153: LD_VAR 0 1
8157: PPUSH
8158: LD_VAR 0 4
8162: PPUSH
8163: CALL_OW 1
8167: ST_TO_ADDR
// end ;
8168: LD_VAR 0 2
8172: RET
// function PrepareComputerSides ; var i , temp_list , base , num ; begin
8173: LD_INT 0
8175: PPUSH
8176: PPUSH
8177: PPUSH
8178: PPUSH
8179: PPUSH
// for base in ai_bases do
8180: LD_ADDR_VAR 0 4
8184: PUSH
8185: LD_EXP 26
8189: PUSH
8190: FOR_IN
8191: IFFALSE 9341
// begin InitUc ;
8193: CALL_OW 18
// InitHc ;
8197: CALL_OW 19
// uc_side = GetBaseSide ( base ) ;
8201: LD_ADDR_OWVAR 20
8205: PUSH
8206: LD_VAR 0 4
8210: PPUSH
8211: CALL 18937 0 1
8215: ST_TO_ADDR
// uc_nation = GetBaseNation ( base ) ;
8216: LD_ADDR_OWVAR 21
8220: PUSH
8221: LD_VAR 0 4
8225: PPUSH
8226: CALL 19035 0 1
8230: ST_TO_ADDR
// case base of 1 :
8231: LD_VAR 0 4
8235: PUSH
8236: LD_INT 1
8238: DOUBLE
8239: EQUAL
8240: IFTRUE 8244
8242: GO 8380
8244: POP
// begin temp_list = CreateUnitsWithClass ( ai_bunkers [ base ] + 0 , class_soldier , base ) ;
8245: LD_ADDR_VAR 0 3
8249: PUSH
8250: LD_EXP 40
8254: PUSH
8255: LD_VAR 0 4
8259: ARRAY
8260: PUSH
8261: LD_INT 0
8263: PLUS
8264: PPUSH
8265: LD_INT 1
8267: PPUSH
8268: LD_VAR 0 4
8272: PPUSH
8273: CALL 9948 0 3
8277: ST_TO_ADDR
// temp_list = CreateUnitsWithClass ( [ 1 , 2 , 3 ] [ difficulty ] * ai_armouries [ base ] , class_mortar , base ) ^ temp_list ;
8278: LD_ADDR_VAR 0 3
8282: PUSH
8283: LD_INT 1
8285: PUSH
8286: LD_INT 2
8288: PUSH
8289: LD_INT 3
8291: PUSH
8292: EMPTY
8293: LIST
8294: LIST
8295: LIST
8296: PUSH
8297: LD_OWVAR 67
8301: ARRAY
8302: PUSH
8303: LD_EXP 39
8307: PUSH
8308: LD_VAR 0 4
8312: ARRAY
8313: MUL
8314: PPUSH
8315: LD_INT 8
8317: PPUSH
8318: LD_VAR 0 4
8322: PPUSH
8323: CALL 9948 0 3
8327: PUSH
8328: LD_VAR 0 3
8332: ADD
8333: ST_TO_ADDR
// temp_list = temp_list ^ CreateApemenWithClass ( [ 0 , 1 , 2 ] [ difficulty ] , class_apeman_soldier , base ) ;
8334: LD_ADDR_VAR 0 3
8338: PUSH
8339: LD_VAR 0 3
8343: PUSH
8344: LD_INT 0
8346: PUSH
8347: LD_INT 1
8349: PUSH
8350: LD_INT 2
8352: PUSH
8353: EMPTY
8354: LIST
8355: LIST
8356: LIST
8357: PUSH
8358: LD_OWVAR 67
8362: ARRAY
8363: PPUSH
8364: LD_INT 15
8366: PPUSH
8367: LD_VAR 0 4
8371: PPUSH
8372: CALL 10112 0 3
8376: ADD
8377: ST_TO_ADDR
// end ; 2 :
8378: GO 8469
8380: LD_INT 2
8382: DOUBLE
8383: EQUAL
8384: IFTRUE 8388
8386: GO 8468
8388: POP
// begin temp_list = CreateUnitsWithClass ( ai_bunkers [ base ] + 0 , class_soldier , base ) ;
8389: LD_ADDR_VAR 0 3
8393: PUSH
8394: LD_EXP 40
8398: PUSH
8399: LD_VAR 0 4
8403: ARRAY
8404: PUSH
8405: LD_INT 0
8407: PLUS
8408: PPUSH
8409: LD_INT 1
8411: PPUSH
8412: LD_VAR 0 4
8416: PPUSH
8417: CALL 9948 0 3
8421: ST_TO_ADDR
// temp_list = CreateUnitsWithClass ( [ 1 , 3 , 5 ] [ difficulty ] , class_sniper , base ) ^ temp_list ;
8422: LD_ADDR_VAR 0 3
8426: PUSH
8427: LD_INT 1
8429: PUSH
8430: LD_INT 3
8432: PUSH
8433: LD_INT 5
8435: PUSH
8436: EMPTY
8437: LIST
8438: LIST
8439: LIST
8440: PUSH
8441: LD_OWVAR 67
8445: ARRAY
8446: PPUSH
8447: LD_INT 5
8449: PPUSH
8450: LD_VAR 0 4
8454: PPUSH
8455: CALL 9948 0 3
8459: PUSH
8460: LD_VAR 0 3
8464: ADD
8465: ST_TO_ADDR
// end ; end ;
8466: GO 8469
8468: POP
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
8469: LD_ADDR_EXP 27
8473: PUSH
8474: LD_EXP 27
8478: PPUSH
8479: LD_VAR 0 4
8483: PPUSH
8484: LD_VAR 0 3
8488: PPUSH
8489: CALL_OW 1
8493: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_soldiers [ base ] , ai_armouries [ base ] ) ;
8494: LD_VAR 0 4
8498: PPUSH
8499: LD_EXP 27
8503: PUSH
8504: LD_VAR 0 4
8508: ARRAY
8509: PPUSH
8510: LD_EXP 39
8514: PUSH
8515: LD_VAR 0 4
8519: ARRAY
8520: PPUSH
8521: CALL 10293 0 3
// num = [ [ 1 , 1 , 2 ] [ difficulty ] , [ 3 , 4 , 5 ] [ difficulty ] ] [ base ] ;
8525: LD_ADDR_VAR 0 5
8529: PUSH
8530: LD_INT 1
8532: PUSH
8533: LD_INT 1
8535: PUSH
8536: LD_INT 2
8538: PUSH
8539: EMPTY
8540: LIST
8541: LIST
8542: LIST
8543: PUSH
8544: LD_OWVAR 67
8548: ARRAY
8549: PUSH
8550: LD_INT 3
8552: PUSH
8553: LD_INT 4
8555: PUSH
8556: LD_INT 5
8558: PUSH
8559: EMPTY
8560: LIST
8561: LIST
8562: LIST
8563: PUSH
8564: LD_OWVAR 67
8568: ARRAY
8569: PUSH
8570: EMPTY
8571: LIST
8572: LIST
8573: PUSH
8574: LD_VAR 0 4
8578: ARRAY
8579: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , base , CreateUnitsWithClass ( num , class_engineer , base ) ) ;
8580: LD_ADDR_EXP 29
8584: PUSH
8585: LD_EXP 29
8589: PPUSH
8590: LD_VAR 0 4
8594: PPUSH
8595: LD_VAR 0 5
8599: PPUSH
8600: LD_INT 2
8602: PPUSH
8603: LD_VAR 0 4
8607: PPUSH
8608: CALL 9948 0 3
8612: PPUSH
8613: CALL_OW 1
8617: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_engineers [ base ] , [ ai_depot [ base ] ] ) ;
8618: LD_VAR 0 4
8622: PPUSH
8623: LD_EXP 29
8627: PUSH
8628: LD_VAR 0 4
8632: ARRAY
8633: PPUSH
8634: LD_EXP 36
8638: PUSH
8639: LD_VAR 0 4
8643: ARRAY
8644: PUSH
8645: EMPTY
8646: LIST
8647: PPUSH
8648: CALL 10293 0 3
// temp_list = [ ] ;
8652: LD_ADDR_VAR 0 3
8656: PUSH
8657: EMPTY
8658: ST_TO_ADDR
// for i in ai_engineers [ base ] do
8659: LD_ADDR_VAR 0 2
8663: PUSH
8664: LD_EXP 29
8668: PUSH
8669: LD_VAR 0 4
8673: ARRAY
8674: PUSH
8675: FOR_IN
8676: IFFALSE 8704
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
8678: LD_ADDR_VAR 0 3
8682: PUSH
8683: LD_VAR 0 3
8687: PUSH
8688: LD_VAR 0 2
8692: PPUSH
8693: LD_INT 2
8695: PPUSH
8696: CALL_OW 259
8700: ADD
8701: ST_TO_ADDR
8702: GO 8675
8704: POP
8705: POP
// num = BestFromListByList ( temp_list , temp_list ) ;
8706: LD_ADDR_VAR 0 5
8710: PUSH
8711: LD_VAR 0 3
8715: PPUSH
8716: LD_VAR 0 3
8720: PPUSH
8721: CALL_OW 79
8725: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
8726: LD_ADDR_VAR 0 2
8730: PUSH
8731: LD_EXP 62
8735: PUSH
8736: LD_VAR 0 4
8740: ARRAY
8741: PUSH
8742: FOR_IN
8743: IFFALSE 8761
// SetBLevel ( i , num ) ;
8745: LD_VAR 0 2
8749: PPUSH
8750: LD_VAR 0 5
8754: PPUSH
8755: CALL_OW 241
8759: GO 8742
8761: POP
8762: POP
// num = [ 0 , [ 0 , 1 , 2 ] [ difficulty ] ] [ base ] ;
8763: LD_ADDR_VAR 0 5
8767: PUSH
8768: LD_INT 0
8770: PUSH
8771: LD_INT 0
8773: PUSH
8774: LD_INT 1
8776: PUSH
8777: LD_INT 2
8779: PUSH
8780: EMPTY
8781: LIST
8782: LIST
8783: LIST
8784: PUSH
8785: LD_OWVAR 67
8789: ARRAY
8790: PUSH
8791: EMPTY
8792: LIST
8793: LIST
8794: PUSH
8795: LD_VAR 0 4
8799: ARRAY
8800: ST_TO_ADDR
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , CreateApemenWithClass ( num , class_apeman_engineer , base ) ) ;
8801: LD_ADDR_EXP 34
8805: PUSH
8806: LD_EXP 34
8810: PPUSH
8811: LD_VAR 0 4
8815: PPUSH
8816: LD_VAR 0 5
8820: PPUSH
8821: LD_INT 16
8823: PPUSH
8824: LD_VAR 0 4
8828: PPUSH
8829: CALL 10112 0 3
8833: PPUSH
8834: CALL_OW 1
8838: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_apemen_engineers [ base ] , [ ai_depot [ base ] ] ) ;
8839: LD_VAR 0 4
8843: PPUSH
8844: LD_EXP 34
8848: PUSH
8849: LD_VAR 0 4
8853: ARRAY
8854: PPUSH
8855: LD_EXP 36
8859: PUSH
8860: LD_VAR 0 4
8864: ARRAY
8865: PUSH
8866: EMPTY
8867: LIST
8868: PPUSH
8869: CALL 10293 0 3
// num = [ [ 0 , 1 , 2 ] [ difficulty ] , [ 4 , 5 , 6 ] [ difficulty ] ] [ base ] ;
8873: LD_ADDR_VAR 0 5
8877: PUSH
8878: LD_INT 0
8880: PUSH
8881: LD_INT 1
8883: PUSH
8884: LD_INT 2
8886: PUSH
8887: EMPTY
8888: LIST
8889: LIST
8890: LIST
8891: PUSH
8892: LD_OWVAR 67
8896: ARRAY
8897: PUSH
8898: LD_INT 4
8900: PUSH
8901: LD_INT 5
8903: PUSH
8904: LD_INT 6
8906: PUSH
8907: EMPTY
8908: LIST
8909: LIST
8910: LIST
8911: PUSH
8912: LD_OWVAR 67
8916: ARRAY
8917: PUSH
8918: EMPTY
8919: LIST
8920: LIST
8921: PUSH
8922: LD_VAR 0 4
8926: ARRAY
8927: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , CreateUnitsWithClass ( num , class_mechanic , base ) ) ;
8928: LD_ADDR_EXP 30
8932: PUSH
8933: LD_EXP 30
8937: PPUSH
8938: LD_VAR 0 4
8942: PPUSH
8943: LD_VAR 0 5
8947: PPUSH
8948: LD_INT 3
8950: PPUSH
8951: LD_VAR 0 4
8955: PPUSH
8956: CALL 9948 0 3
8960: PPUSH
8961: CALL_OW 1
8965: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_mechanics_defend [ base ] , ai_facts [ base ] diff ai_sib_bomb_fact [ base ] ) ;
8966: LD_VAR 0 4
8970: PPUSH
8971: LD_EXP 30
8975: PUSH
8976: LD_VAR 0 4
8980: ARRAY
8981: PPUSH
8982: LD_EXP 38
8986: PUSH
8987: LD_VAR 0 4
8991: ARRAY
8992: PUSH
8993: LD_EXP 50
8997: PUSH
8998: LD_VAR 0 4
9002: ARRAY
9003: DIFF
9004: PPUSH
9005: CALL 10293 0 3
// num = [ 0 , 3 ] [ base ] ;
9009: LD_ADDR_VAR 0 5
9013: PUSH
9014: LD_INT 0
9016: PUSH
9017: LD_INT 3
9019: PUSH
9020: EMPTY
9021: LIST
9022: LIST
9023: PUSH
9024: LD_VAR 0 4
9028: ARRAY
9029: ST_TO_ADDR
// ai_sib_bomb_mechanics = Replace ( ai_sib_bomb_mechanics , base , CreateUnitsWithClass ( num , class_mechanic , base ) ) ;
9030: LD_ADDR_EXP 52
9034: PUSH
9035: LD_EXP 52
9039: PPUSH
9040: LD_VAR 0 4
9044: PPUSH
9045: LD_VAR 0 5
9049: PPUSH
9050: LD_INT 3
9052: PPUSH
9053: LD_VAR 0 4
9057: PPUSH
9058: CALL 9948 0 3
9062: PPUSH
9063: CALL_OW 1
9067: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_sib_bomb_mechanics [ base ] , ai_sib_bomb_fact [ base ] ) ;
9068: LD_VAR 0 4
9072: PPUSH
9073: LD_EXP 52
9077: PUSH
9078: LD_VAR 0 4
9082: ARRAY
9083: PPUSH
9084: LD_EXP 50
9088: PUSH
9089: LD_VAR 0 4
9093: ARRAY
9094: PPUSH
9095: CALL 10293 0 3
// for i in ai_sib_bomb_mechanics [ base ] do
9099: LD_ADDR_VAR 0 2
9103: PUSH
9104: LD_EXP 52
9108: PUSH
9109: LD_VAR 0 4
9113: ARRAY
9114: PUSH
9115: FOR_IN
9116: IFFALSE 9135
// SetSkill ( i , skill_mechanical , 10 ) ;
9118: LD_VAR 0 2
9122: PPUSH
9123: LD_INT 3
9125: PPUSH
9126: LD_INT 10
9128: PPUSH
9129: CALL_OW 237
9133: GO 9115
9135: POP
9136: POP
// num = [ [ 0 , 1 , 2 ] [ difficulty ] , [ 6 , 7 , 8 ] [ difficulty ] ] [ base ] ;
9137: LD_ADDR_VAR 0 5
9141: PUSH
9142: LD_INT 0
9144: PUSH
9145: LD_INT 1
9147: PUSH
9148: LD_INT 2
9150: PUSH
9151: EMPTY
9152: LIST
9153: LIST
9154: LIST
9155: PUSH
9156: LD_OWVAR 67
9160: ARRAY
9161: PUSH
9162: LD_INT 6
9164: PUSH
9165: LD_INT 7
9167: PUSH
9168: LD_INT 8
9170: PUSH
9171: EMPTY
9172: LIST
9173: LIST
9174: LIST
9175: PUSH
9176: LD_OWVAR 67
9180: ARRAY
9181: PUSH
9182: EMPTY
9183: LIST
9184: LIST
9185: PUSH
9186: LD_VAR 0 4
9190: ARRAY
9191: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , CreateUnitsWithClass ( num , class_scientistic , base ) ) ;
9192: LD_ADDR_EXP 32
9196: PUSH
9197: LD_EXP 32
9201: PPUSH
9202: LD_VAR 0 4
9206: PPUSH
9207: LD_VAR 0 5
9211: PPUSH
9212: LD_INT 4
9214: PPUSH
9215: LD_VAR 0 4
9219: PPUSH
9220: CALL 9948 0 3
9224: PPUSH
9225: CALL_OW 1
9229: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_scientists [ base ] , ai_labs [ base ] ) ;
9230: LD_VAR 0 4
9234: PPUSH
9235: LD_EXP 32
9239: PUSH
9240: LD_VAR 0 4
9244: ARRAY
9245: PPUSH
9246: LD_EXP 37
9250: PUSH
9251: LD_VAR 0 4
9255: ARRAY
9256: PPUSH
9257: CALL 10293 0 3
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_cans , 300 ) ;
9261: LD_EXP 36
9265: PUSH
9266: LD_VAR 0 4
9270: ARRAY
9271: PPUSH
9272: CALL_OW 274
9276: PPUSH
9277: LD_INT 1
9279: PPUSH
9280: LD_INT 300
9282: PPUSH
9283: CALL_OW 277
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_oil , 300 ) ;
9287: LD_EXP 36
9291: PUSH
9292: LD_VAR 0 4
9296: ARRAY
9297: PPUSH
9298: CALL_OW 274
9302: PPUSH
9303: LD_INT 2
9305: PPUSH
9306: LD_INT 300
9308: PPUSH
9309: CALL_OW 277
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_siberit , 300 ) ;
9313: LD_EXP 36
9317: PUSH
9318: LD_VAR 0 4
9322: ARRAY
9323: PPUSH
9324: CALL_OW 274
9328: PPUSH
9329: LD_INT 3
9331: PPUSH
9332: LD_INT 300
9334: PPUSH
9335: CALL_OW 277
// end ;
9339: GO 8190
9341: POP
9342: POP
// uc_side = americans ;
9343: LD_ADDR_OWVAR 20
9347: PUSH
9348: LD_EXP 6
9352: ST_TO_ADDR
// Hugh = NewCharacter ( Stevens ) ;
9353: LD_ADDR_EXP 24
9357: PUSH
9358: LD_STRING Stevens
9360: PPUSH
9361: CALL_OW 25
9365: ST_TO_ADDR
// SetClass ( Hugh , class_scientistic ) ;
9366: LD_EXP 24
9370: PPUSH
9371: LD_INT 4
9373: PPUSH
9374: CALL_OW 336
// temp_list = ai_scientists [ 2 ] ^ Hugh ;
9378: LD_ADDR_VAR 0 3
9382: PUSH
9383: LD_EXP 32
9387: PUSH
9388: LD_INT 2
9390: ARRAY
9391: PUSH
9392: LD_EXP 24
9396: ADD
9397: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , 2 , temp_list ) ;
9398: LD_ADDR_EXP 32
9402: PUSH
9403: LD_EXP 32
9407: PPUSH
9408: LD_INT 2
9410: PPUSH
9411: LD_VAR 0 3
9415: PPUSH
9416: CALL_OW 1
9420: ST_TO_ADDR
// PlaceComputerUnits ( 2 , [ Hugh ] , [ ] ) ;
9421: LD_INT 2
9423: PPUSH
9424: LD_EXP 24
9428: PUSH
9429: EMPTY
9430: LIST
9431: PPUSH
9432: EMPTY
9433: PPUSH
9434: CALL 10293 0 3
// SetTech ( tech_tech1 , americans , state_researched ) ;
9438: LD_INT 48
9440: PPUSH
9441: LD_EXP 6
9445: PPUSH
9446: LD_INT 2
9448: PPUSH
9449: CALL_OW 322
// SetTech ( tech_tech2 , americans , state_researched ) ;
9453: LD_INT 49
9455: PPUSH
9456: LD_EXP 6
9460: PPUSH
9461: LD_INT 2
9463: PPUSH
9464: CALL_OW 322
// SetTech ( tech_weap1 , americans , state_researched ) ;
9468: LD_INT 51
9470: PPUSH
9471: LD_EXP 6
9475: PPUSH
9476: LD_INT 2
9478: PPUSH
9479: CALL_OW 322
// SetTech ( tech_sib1 , americans , state_researched ) ;
9483: LD_INT 54
9485: PPUSH
9486: LD_EXP 6
9490: PPUSH
9491: LD_INT 2
9493: PPUSH
9494: CALL_OW 322
// SetTech ( tech_comp1 , americans , state_researched ) ;
9498: LD_INT 57
9500: PPUSH
9501: LD_EXP 6
9505: PPUSH
9506: LD_INT 2
9508: PPUSH
9509: CALL_OW 322
// if difficulty >= 2 then
9513: LD_OWVAR 67
9517: PUSH
9518: LD_INT 2
9520: GREATEREQUAL
9521: IFFALSE 9598
// begin SetTech ( tech_tech3 , americans , state_researched ) ;
9523: LD_INT 50
9525: PPUSH
9526: LD_EXP 6
9530: PPUSH
9531: LD_INT 2
9533: PPUSH
9534: CALL_OW 322
// SetTech ( tech_weap2 , americans , state_researched ) ;
9538: LD_INT 52
9540: PPUSH
9541: LD_EXP 6
9545: PPUSH
9546: LD_INT 2
9548: PPUSH
9549: CALL_OW 322
// SetTech ( tech_sib2 , americans , state_researched ) ;
9553: LD_INT 55
9555: PPUSH
9556: LD_EXP 6
9560: PPUSH
9561: LD_INT 2
9563: PPUSH
9564: CALL_OW 322
// SetTech ( tech_comp2 , americans , state_researched ) ;
9568: LD_INT 58
9570: PPUSH
9571: LD_EXP 6
9575: PPUSH
9576: LD_INT 2
9578: PPUSH
9579: CALL_OW 322
// SetTech ( tech_opto1 , americans , state_researched ) ;
9583: LD_INT 60
9585: PPUSH
9586: LD_EXP 6
9590: PPUSH
9591: LD_INT 2
9593: PPUSH
9594: CALL_OW 322
// end ; if difficulty = 3 then
9598: LD_OWVAR 67
9602: PUSH
9603: LD_INT 3
9605: EQUAL
9606: IFFALSE 9683
// begin SetTech ( tech_weap3 , americans , state_researched ) ;
9608: LD_INT 53
9610: PPUSH
9611: LD_EXP 6
9615: PPUSH
9616: LD_INT 2
9618: PPUSH
9619: CALL_OW 322
// SetTech ( tech_sib3 , americans , state_researched ) ;
9623: LD_INT 56
9625: PPUSH
9626: LD_EXP 6
9630: PPUSH
9631: LD_INT 2
9633: PPUSH
9634: CALL_OW 322
// SetTech ( tech_comp3 , americans , state_researched ) ;
9638: LD_INT 59
9640: PPUSH
9641: LD_EXP 6
9645: PPUSH
9646: LD_INT 2
9648: PPUSH
9649: CALL_OW 322
// SetTech ( tech_opto2 , americans , state_researched ) ;
9653: LD_INT 61
9655: PPUSH
9656: LD_EXP 6
9660: PPUSH
9661: LD_INT 2
9663: PPUSH
9664: CALL_OW 322
// SetTech ( tech_opto3 , americans , state_researched ) ;
9668: LD_INT 62
9670: PPUSH
9671: LD_EXP 6
9675: PPUSH
9676: LD_INT 2
9678: PPUSH
9679: CALL_OW 322
// end ; SetTech ( tech_spacanom , legion , state_researched ) ;
9683: LD_INT 29
9685: PPUSH
9686: LD_EXP 4
9690: PPUSH
9691: LD_INT 2
9693: PPUSH
9694: CALL_OW 322
// SetTech ( tech_taurad , legion , state_researched ) ;
9698: LD_INT 28
9700: PPUSH
9701: LD_EXP 4
9705: PPUSH
9706: LD_INT 2
9708: PPUSH
9709: CALL_OW 322
// SetTech ( tech_tech1 , legion , state_researched ) ;
9713: LD_INT 48
9715: PPUSH
9716: LD_EXP 4
9720: PPUSH
9721: LD_INT 2
9723: PPUSH
9724: CALL_OW 322
// if difficulty >= 2 then
9728: LD_OWVAR 67
9732: PUSH
9733: LD_INT 2
9735: GREATEREQUAL
9736: IFFALSE 9828
// begin SetTech ( tech_stimdrugs , legion , state_researched ) ;
9738: LD_INT 5
9740: PPUSH
9741: LD_EXP 4
9745: PPUSH
9746: LD_INT 2
9748: PPUSH
9749: CALL_OW 322
// SetTech ( tech_tech2 , legion , state_researched ) ;
9753: LD_INT 49
9755: PPUSH
9756: LD_EXP 4
9760: PPUSH
9761: LD_INT 2
9763: PPUSH
9764: CALL_OW 322
// SetTech ( tech_weap1 , legion , state_researched ) ;
9768: LD_INT 51
9770: PPUSH
9771: LD_EXP 4
9775: PPUSH
9776: LD_INT 2
9778: PPUSH
9779: CALL_OW 322
// SetTech ( tech_sib1 , legion , state_researched ) ;
9783: LD_INT 54
9785: PPUSH
9786: LD_EXP 4
9790: PPUSH
9791: LD_INT 2
9793: PPUSH
9794: CALL_OW 322
// SetTech ( tech_opto1 , legion , state_researched ) ;
9798: LD_INT 60
9800: PPUSH
9801: LD_EXP 4
9805: PPUSH
9806: LD_INT 2
9808: PPUSH
9809: CALL_OW 322
// SetTech ( tech_st1 , legion , state_researched ) ;
9813: LD_INT 63
9815: PPUSH
9816: LD_EXP 4
9820: PPUSH
9821: LD_INT 2
9823: PPUSH
9824: CALL_OW 322
// end ; if difficulty = 3 then
9828: LD_OWVAR 67
9832: PUSH
9833: LD_INT 3
9835: EQUAL
9836: IFFALSE 9943
// begin SetTech ( tech_tech3 , legion , state_researched ) ;
9838: LD_INT 50
9840: PPUSH
9841: LD_EXP 4
9845: PPUSH
9846: LD_INT 2
9848: PPUSH
9849: CALL_OW 322
// SetTech ( tech_weap2 , legion , state_researched ) ;
9853: LD_INT 52
9855: PPUSH
9856: LD_EXP 4
9860: PPUSH
9861: LD_INT 2
9863: PPUSH
9864: CALL_OW 322
// SetTech ( tech_sib2 , legion , state_researched ) ;
9868: LD_INT 55
9870: PPUSH
9871: LD_EXP 4
9875: PPUSH
9876: LD_INT 2
9878: PPUSH
9879: CALL_OW 322
// SetTech ( tech_opto2 , legion , state_researched ) ;
9883: LD_INT 61
9885: PPUSH
9886: LD_EXP 4
9890: PPUSH
9891: LD_INT 2
9893: PPUSH
9894: CALL_OW 322
// SetTech ( tech_opto3 , legion , state_researched ) ;
9898: LD_INT 62
9900: PPUSH
9901: LD_EXP 4
9905: PPUSH
9906: LD_INT 2
9908: PPUSH
9909: CALL_OW 322
// SetTech ( tech_bio1 , legion , state_researched ) ;
9913: LD_INT 66
9915: PPUSH
9916: LD_EXP 4
9920: PPUSH
9921: LD_INT 2
9923: PPUSH
9924: CALL_OW 322
// SetTech ( tech_st2 , legion , state_researched ) ;
9928: LD_INT 64
9930: PPUSH
9931: LD_EXP 4
9935: PPUSH
9936: LD_INT 2
9938: PPUSH
9939: CALL_OW 322
// end ; end ;
9943: LD_VAR 0 1
9947: RET
// export function CreateUnitsWithClass ( num_units , un_class , base ) ; var i , overskill ; begin
9948: LD_INT 0
9950: PPUSH
9951: PPUSH
9952: PPUSH
// result = [ ] ;
9953: LD_ADDR_VAR 0 4
9957: PUSH
9958: EMPTY
9959: ST_TO_ADDR
// InitUc ;
9960: CALL_OW 18
// InitHc ;
9964: CALL_OW 19
// uc_side = GetBaseSide ( base ) ;
9968: LD_ADDR_OWVAR 20
9972: PUSH
9973: LD_VAR 0 3
9977: PPUSH
9978: CALL 18937 0 1
9982: ST_TO_ADDR
// uc_nation = GetBaseNation ( base ) ;
9983: LD_ADDR_OWVAR 21
9987: PUSH
9988: LD_VAR 0 3
9992: PPUSH
9993: CALL 19035 0 1
9997: ST_TO_ADDR
// overskill = difficulty + 5 ;
9998: LD_ADDR_VAR 0 6
10002: PUSH
10003: LD_OWVAR 67
10007: PUSH
10008: LD_INT 5
10010: PLUS
10011: ST_TO_ADDR
// for i = 1 to num_units do
10012: LD_ADDR_VAR 0 5
10016: PUSH
10017: DOUBLE
10018: LD_INT 1
10020: DEC
10021: ST_TO_ADDR
10022: LD_VAR 0 1
10026: PUSH
10027: FOR_TO
10028: IFFALSE 10105
// begin if Rand ( 1 , 3 ) = 1 then
10030: LD_INT 1
10032: PPUSH
10033: LD_INT 3
10035: PPUSH
10036: CALL_OW 12
10040: PUSH
10041: LD_INT 1
10043: EQUAL
10044: IFFALSE 10070
// PrepareHuman ( false , un_class , - overskill + 1 ) else
10046: LD_INT 0
10048: PPUSH
10049: LD_VAR 0 2
10053: PPUSH
10054: LD_VAR 0 6
10058: NEG
10059: PUSH
10060: LD_INT 1
10062: PLUS
10063: PPUSH
10064: CALL_OW 380
10068: GO 10087
// PrepareHuman ( false , un_class , overskill ) ;
10070: LD_INT 0
10072: PPUSH
10073: LD_VAR 0 2
10077: PPUSH
10078: LD_VAR 0 6
10082: PPUSH
10083: CALL_OW 380
// result = result ^ CreateHuman ;
10087: LD_ADDR_VAR 0 4
10091: PUSH
10092: LD_VAR 0 4
10096: PUSH
10097: CALL_OW 44
10101: ADD
10102: ST_TO_ADDR
// end ;
10103: GO 10027
10105: POP
10106: POP
// end ;
10107: LD_VAR 0 4
10111: RET
// export function CreateApemenWithClass ( num_units , un_class , base ) ; var i ; begin
10112: LD_INT 0
10114: PPUSH
10115: PPUSH
// result = [ ] ;
10116: LD_ADDR_VAR 0 4
10120: PUSH
10121: EMPTY
10122: ST_TO_ADDR
// InitUc ;
10123: CALL_OW 18
// InitHc ;
10127: CALL_OW 19
// uc_side = GetBaseSide ( base ) ;
10131: LD_ADDR_OWVAR 20
10135: PUSH
10136: LD_VAR 0 3
10140: PPUSH
10141: CALL 18937 0 1
10145: ST_TO_ADDR
// uc_nation = nation_nature ;
10146: LD_ADDR_OWVAR 21
10150: PUSH
10151: LD_INT 0
10153: ST_TO_ADDR
// hc_class = un_class ;
10154: LD_ADDR_OWVAR 28
10158: PUSH
10159: LD_VAR 0 2
10163: ST_TO_ADDR
// for i = 1 to num_units do
10164: LD_ADDR_VAR 0 5
10168: PUSH
10169: DOUBLE
10170: LD_INT 1
10172: DEC
10173: ST_TO_ADDR
10174: LD_VAR 0 1
10178: PUSH
10179: FOR_TO
10180: IFFALSE 10286
// begin hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
10182: LD_ADDR_OWVAR 29
10186: PUSH
10187: LD_INT 11
10189: PPUSH
10190: LD_INT 13
10192: PPUSH
10193: CALL_OW 12
10197: PUSH
10198: LD_INT 10
10200: PPUSH
10201: LD_INT 11
10203: PPUSH
10204: CALL_OW 12
10208: PUSH
10209: EMPTY
10210: LIST
10211: LIST
10212: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
10213: LD_ADDR_OWVAR 27
10217: PUSH
10218: LD_INT 1
10220: PPUSH
10221: LD_INT 2
10223: PPUSH
10224: CALL_OW 12
10228: ST_TO_ADDR
// hc_skills = [ Rand ( 1 , 2 ) , Rand ( 1 , 2 ) , 0 , 0 ] ;
10229: LD_ADDR_OWVAR 31
10233: PUSH
10234: LD_INT 1
10236: PPUSH
10237: LD_INT 2
10239: PPUSH
10240: CALL_OW 12
10244: PUSH
10245: LD_INT 1
10247: PPUSH
10248: LD_INT 2
10250: PPUSH
10251: CALL_OW 12
10255: PUSH
10256: LD_INT 0
10258: PUSH
10259: LD_INT 0
10261: PUSH
10262: EMPTY
10263: LIST
10264: LIST
10265: LIST
10266: LIST
10267: ST_TO_ADDR
// result = result ^ CreateHuman ;
10268: LD_ADDR_VAR 0 4
10272: PUSH
10273: LD_VAR 0 4
10277: PUSH
10278: CALL_OW 44
10282: ADD
10283: ST_TO_ADDR
// end ;
10284: GO 10179
10286: POP
10287: POP
// end ;
10288: LD_VAR 0 4
10292: RET
// function PlaceComputerUnits ( base , un_list , buildings_list ) ; var num , i , b ; begin
10293: LD_INT 0
10295: PPUSH
10296: PPUSH
10297: PPUSH
10298: PPUSH
// num = 1 ;
10299: LD_ADDR_VAR 0 5
10303: PUSH
10304: LD_INT 1
10306: ST_TO_ADDR
// for b in buildings_list do
10307: LD_ADDR_VAR 0 7
10311: PUSH
10312: LD_VAR 0 3
10316: PUSH
10317: FOR_IN
10318: IFFALSE 10415
// begin if num > un_list then
10320: LD_VAR 0 5
10324: PUSH
10325: LD_VAR 0 2
10329: GREATER
10330: IFFALSE 10334
// break ;
10332: GO 10415
// for i = UnitsInside ( b ) + 1 to 6 do
10334: LD_ADDR_VAR 0 6
10338: PUSH
10339: DOUBLE
10340: LD_VAR 0 7
10344: PPUSH
10345: CALL_OW 313
10349: PUSH
10350: LD_INT 1
10352: PLUS
10353: DEC
10354: ST_TO_ADDR
10355: LD_INT 6
10357: PUSH
10358: FOR_TO
10359: IFFALSE 10411
// begin if num > un_list then
10361: LD_VAR 0 5
10365: PUSH
10366: LD_VAR 0 2
10370: GREATER
10371: IFFALSE 10375
// break ;
10373: GO 10411
// PlaceHumanInUnit ( un_list [ num ] , b ) ;
10375: LD_VAR 0 2
10379: PUSH
10380: LD_VAR 0 5
10384: ARRAY
10385: PPUSH
10386: LD_VAR 0 7
10390: PPUSH
10391: CALL_OW 52
// num = num + 1 ;
10395: LD_ADDR_VAR 0 5
10399: PUSH
10400: LD_VAR 0 5
10404: PUSH
10405: LD_INT 1
10407: PLUS
10408: ST_TO_ADDR
// end ;
10409: GO 10358
10411: POP
10412: POP
// end ;
10413: GO 10317
10415: POP
10416: POP
// for i = num to un_list do
10417: LD_ADDR_VAR 0 6
10421: PUSH
10422: DOUBLE
10423: LD_VAR 0 5
10427: DEC
10428: ST_TO_ADDR
10429: LD_VAR 0 2
10433: PUSH
10434: FOR_TO
10435: IFFALSE 10490
// PlaceUnitXYR ( un_list [ i ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] , 7 , false ) ;
10437: LD_VAR 0 2
10441: PUSH
10442: LD_VAR 0 6
10446: ARRAY
10447: PPUSH
10448: LD_EXP 59
10452: PUSH
10453: LD_VAR 0 1
10457: ARRAY
10458: PUSH
10459: LD_INT 1
10461: ARRAY
10462: PPUSH
10463: LD_EXP 59
10467: PUSH
10468: LD_VAR 0 1
10472: ARRAY
10473: PUSH
10474: LD_INT 2
10476: ARRAY
10477: PPUSH
10478: LD_INT 7
10480: PPUSH
10481: LD_INT 0
10483: PPUSH
10484: CALL_OW 50
10488: GO 10434
10490: POP
10491: POP
// end ;
10492: LD_VAR 0 4
10496: RET
// function PrepareMines ; var temp_list , i , k , temp_list_2 , temp_list_3 , p ; begin
10497: LD_INT 0
10499: PPUSH
10500: PPUSH
10501: PPUSH
10502: PPUSH
10503: PPUSH
10504: PPUSH
10505: PPUSH
// if difficulty > 1 then
10506: LD_OWVAR 67
10510: PUSH
10511: LD_INT 1
10513: GREATER
10514: IFFALSE 11231
// begin temp_list = [ ] ;
10516: LD_ADDR_VAR 0 2
10520: PUSH
10521: EMPTY
10522: ST_TO_ADDR
// temp_list_2 = [ [ 152 , 51 ] , [ 150 , 49 ] , [ 148 , 48 ] , [ 145 , 49 ] , [ 143 , 49 ] , [ 140 , 48 ] , [ 135 , 43 ] ] ;
10523: LD_ADDR_VAR 0 5
10527: PUSH
10528: LD_INT 152
10530: PUSH
10531: LD_INT 51
10533: PUSH
10534: EMPTY
10535: LIST
10536: LIST
10537: PUSH
10538: LD_INT 150
10540: PUSH
10541: LD_INT 49
10543: PUSH
10544: EMPTY
10545: LIST
10546: LIST
10547: PUSH
10548: LD_INT 148
10550: PUSH
10551: LD_INT 48
10553: PUSH
10554: EMPTY
10555: LIST
10556: LIST
10557: PUSH
10558: LD_INT 145
10560: PUSH
10561: LD_INT 49
10563: PUSH
10564: EMPTY
10565: LIST
10566: LIST
10567: PUSH
10568: LD_INT 143
10570: PUSH
10571: LD_INT 49
10573: PUSH
10574: EMPTY
10575: LIST
10576: LIST
10577: PUSH
10578: LD_INT 140
10580: PUSH
10581: LD_INT 48
10583: PUSH
10584: EMPTY
10585: LIST
10586: LIST
10587: PUSH
10588: LD_INT 135
10590: PUSH
10591: LD_INT 43
10593: PUSH
10594: EMPTY
10595: LIST
10596: LIST
10597: PUSH
10598: EMPTY
10599: LIST
10600: LIST
10601: LIST
10602: LIST
10603: LIST
10604: LIST
10605: LIST
10606: ST_TO_ADDR
// k = [ 0 , 3 , 6 ] [ difficulty ] ;
10607: LD_ADDR_VAR 0 4
10611: PUSH
10612: LD_INT 0
10614: PUSH
10615: LD_INT 3
10617: PUSH
10618: LD_INT 6
10620: PUSH
10621: EMPTY
10622: LIST
10623: LIST
10624: LIST
10625: PUSH
10626: LD_OWVAR 67
10630: ARRAY
10631: ST_TO_ADDR
// for i = 1 to k do
10632: LD_ADDR_VAR 0 3
10636: PUSH
10637: DOUBLE
10638: LD_INT 1
10640: DEC
10641: ST_TO_ADDR
10642: LD_VAR 0 4
10646: PUSH
10647: FOR_TO
10648: IFFALSE 10699
// begin p = Rand ( 1 , temp_list_2 + 0 ) ;
10650: LD_ADDR_VAR 0 7
10654: PUSH
10655: LD_INT 1
10657: PPUSH
10658: LD_VAR 0 5
10662: PUSH
10663: LD_INT 0
10665: PLUS
10666: PPUSH
10667: CALL_OW 12
10671: ST_TO_ADDR
// temp_list = temp_list ^ [ temp_list_2 [ p ] ] ;
10672: LD_ADDR_VAR 0 2
10676: PUSH
10677: LD_VAR 0 2
10681: PUSH
10682: LD_VAR 0 5
10686: PUSH
10687: LD_VAR 0 7
10691: ARRAY
10692: PUSH
10693: EMPTY
10694: LIST
10695: ADD
10696: ST_TO_ADDR
// end ;
10697: GO 10647
10699: POP
10700: POP
// temp_list_2 = [ [ 102 , 18 ] , [ 105 , 21 ] , [ 109 , 24 ] , [ 117 , 27 ] , [ 120 , 26 ] ] ;
10701: LD_ADDR_VAR 0 5
10705: PUSH
10706: LD_INT 102
10708: PUSH
10709: LD_INT 18
10711: PUSH
10712: EMPTY
10713: LIST
10714: LIST
10715: PUSH
10716: LD_INT 105
10718: PUSH
10719: LD_INT 21
10721: PUSH
10722: EMPTY
10723: LIST
10724: LIST
10725: PUSH
10726: LD_INT 109
10728: PUSH
10729: LD_INT 24
10731: PUSH
10732: EMPTY
10733: LIST
10734: LIST
10735: PUSH
10736: LD_INT 117
10738: PUSH
10739: LD_INT 27
10741: PUSH
10742: EMPTY
10743: LIST
10744: LIST
10745: PUSH
10746: LD_INT 120
10748: PUSH
10749: LD_INT 26
10751: PUSH
10752: EMPTY
10753: LIST
10754: LIST
10755: PUSH
10756: EMPTY
10757: LIST
10758: LIST
10759: LIST
10760: LIST
10761: LIST
10762: ST_TO_ADDR
// k = [ 0 , 2 , 4 ] [ difficulty ] ;
10763: LD_ADDR_VAR 0 4
10767: PUSH
10768: LD_INT 0
10770: PUSH
10771: LD_INT 2
10773: PUSH
10774: LD_INT 4
10776: PUSH
10777: EMPTY
10778: LIST
10779: LIST
10780: LIST
10781: PUSH
10782: LD_OWVAR 67
10786: ARRAY
10787: ST_TO_ADDR
// for i = 1 to k do
10788: LD_ADDR_VAR 0 3
10792: PUSH
10793: DOUBLE
10794: LD_INT 1
10796: DEC
10797: ST_TO_ADDR
10798: LD_VAR 0 4
10802: PUSH
10803: FOR_TO
10804: IFFALSE 10855
// begin p = Rand ( 1 , temp_list_2 + 0 ) ;
10806: LD_ADDR_VAR 0 7
10810: PUSH
10811: LD_INT 1
10813: PPUSH
10814: LD_VAR 0 5
10818: PUSH
10819: LD_INT 0
10821: PLUS
10822: PPUSH
10823: CALL_OW 12
10827: ST_TO_ADDR
// temp_list = temp_list ^ [ temp_list_2 [ p ] ] ;
10828: LD_ADDR_VAR 0 2
10832: PUSH
10833: LD_VAR 0 2
10837: PUSH
10838: LD_VAR 0 5
10842: PUSH
10843: LD_VAR 0 7
10847: ARRAY
10848: PUSH
10849: EMPTY
10850: LIST
10851: ADD
10852: ST_TO_ADDR
// end ;
10853: GO 10803
10855: POP
10856: POP
// temp_list_2 = [ [ 92 , 15 ] , [ 94 , 17 ] , [ 96 , 20 ] , [ 98 , 22 ] , [ 99 , 25 ] , [ 101 , 26 ] ] ;
10857: LD_ADDR_VAR 0 5
10861: PUSH
10862: LD_INT 92
10864: PUSH
10865: LD_INT 15
10867: PUSH
10868: EMPTY
10869: LIST
10870: LIST
10871: PUSH
10872: LD_INT 94
10874: PUSH
10875: LD_INT 17
10877: PUSH
10878: EMPTY
10879: LIST
10880: LIST
10881: PUSH
10882: LD_INT 96
10884: PUSH
10885: LD_INT 20
10887: PUSH
10888: EMPTY
10889: LIST
10890: LIST
10891: PUSH
10892: LD_INT 98
10894: PUSH
10895: LD_INT 22
10897: PUSH
10898: EMPTY
10899: LIST
10900: LIST
10901: PUSH
10902: LD_INT 99
10904: PUSH
10905: LD_INT 25
10907: PUSH
10908: EMPTY
10909: LIST
10910: LIST
10911: PUSH
10912: LD_INT 101
10914: PUSH
10915: LD_INT 26
10917: PUSH
10918: EMPTY
10919: LIST
10920: LIST
10921: PUSH
10922: EMPTY
10923: LIST
10924: LIST
10925: LIST
10926: LIST
10927: LIST
10928: LIST
10929: ST_TO_ADDR
// k = [ 0 , 3 , 6 ] [ difficulty ] ;
10930: LD_ADDR_VAR 0 4
10934: PUSH
10935: LD_INT 0
10937: PUSH
10938: LD_INT 3
10940: PUSH
10941: LD_INT 6
10943: PUSH
10944: EMPTY
10945: LIST
10946: LIST
10947: LIST
10948: PUSH
10949: LD_OWVAR 67
10953: ARRAY
10954: ST_TO_ADDR
// for i = 1 to k do
10955: LD_ADDR_VAR 0 3
10959: PUSH
10960: DOUBLE
10961: LD_INT 1
10963: DEC
10964: ST_TO_ADDR
10965: LD_VAR 0 4
10969: PUSH
10970: FOR_TO
10971: IFFALSE 11022
// begin p = Rand ( 1 , temp_list_2 + 0 ) ;
10973: LD_ADDR_VAR 0 7
10977: PUSH
10978: LD_INT 1
10980: PPUSH
10981: LD_VAR 0 5
10985: PUSH
10986: LD_INT 0
10988: PLUS
10989: PPUSH
10990: CALL_OW 12
10994: ST_TO_ADDR
// temp_list = temp_list ^ [ temp_list_2 [ p ] ] ;
10995: LD_ADDR_VAR 0 2
10999: PUSH
11000: LD_VAR 0 2
11004: PUSH
11005: LD_VAR 0 5
11009: PUSH
11010: LD_VAR 0 7
11014: ARRAY
11015: PUSH
11016: EMPTY
11017: LIST
11018: ADD
11019: ST_TO_ADDR
// end ;
11020: GO 10970
11022: POP
11023: POP
// temp_list_3 = [ ] ;
11024: LD_ADDR_VAR 0 6
11028: PUSH
11029: EMPTY
11030: ST_TO_ADDR
// for i = 1 to temp_list + 0 do
11031: LD_ADDR_VAR 0 3
11035: PUSH
11036: DOUBLE
11037: LD_INT 1
11039: DEC
11040: ST_TO_ADDR
11041: LD_VAR 0 2
11045: PUSH
11046: LD_INT 0
11048: PLUS
11049: PUSH
11050: FOR_TO
11051: IFFALSE 11145
// begin temp_list_2 = GetHexesNearHex ( temp_list [ i ] [ 1 ] , temp_list [ i ] [ 2 ] , 1 ) ;
11053: LD_ADDR_VAR 0 5
11057: PUSH
11058: LD_VAR 0 2
11062: PUSH
11063: LD_VAR 0 3
11067: ARRAY
11068: PUSH
11069: LD_INT 1
11071: ARRAY
11072: PPUSH
11073: LD_VAR 0 2
11077: PUSH
11078: LD_VAR 0 3
11082: ARRAY
11083: PUSH
11084: LD_INT 2
11086: ARRAY
11087: PPUSH
11088: LD_INT 1
11090: PPUSH
11091: CALL 15078 0 3
11095: ST_TO_ADDR
// k = Rand ( 1 , temp_list_2 + 0 ) ;
11096: LD_ADDR_VAR 0 4
11100: PUSH
11101: LD_INT 1
11103: PPUSH
11104: LD_VAR 0 5
11108: PUSH
11109: LD_INT 0
11111: PLUS
11112: PPUSH
11113: CALL_OW 12
11117: ST_TO_ADDR
// temp_list_3 = temp_list_3 ^ [ temp_list_2 [ k ] ] ;
11118: LD_ADDR_VAR 0 6
11122: PUSH
11123: LD_VAR 0 6
11127: PUSH
11128: LD_VAR 0 5
11132: PUSH
11133: LD_VAR 0 4
11137: ARRAY
11138: PUSH
11139: EMPTY
11140: LIST
11141: ADD
11142: ST_TO_ADDR
// end ;
11143: GO 11050
11145: POP
11146: POP
// temp_list_3 = temp_list_3 diff 0 ;
11147: LD_ADDR_VAR 0 6
11151: PUSH
11152: LD_VAR 0 6
11156: PUSH
11157: LD_INT 0
11159: DIFF
11160: ST_TO_ADDR
// for i in temp_list_3 do
11161: LD_ADDR_VAR 0 3
11165: PUSH
11166: LD_VAR 0 6
11170: PUSH
11171: FOR_IN
11172: IFFALSE 11206
// PlaceMine ( i [ 1 ] , i [ 2 ] , mines_side , 0 ) ;
11174: LD_VAR 0 3
11178: PUSH
11179: LD_INT 1
11181: ARRAY
11182: PPUSH
11183: LD_VAR 0 3
11187: PUSH
11188: LD_INT 2
11190: ARRAY
11191: PPUSH
11192: LD_EXP 7
11196: PPUSH
11197: LD_INT 0
11199: PPUSH
11200: CALL_OW 454
11204: GO 11171
11206: POP
11207: POP
// ai_defence_mines_hexes = Replace ( ai_defence_mines_hexes , 3 , temp_list_3 ) ;
11208: LD_ADDR_EXP 104
11212: PUSH
11213: LD_EXP 104
11217: PPUSH
11218: LD_INT 3
11220: PPUSH
11221: LD_VAR 0 6
11225: PPUSH
11226: CALL_OW 1
11230: ST_TO_ADDR
// end ; end ;
11231: LD_VAR 0 1
11235: RET
// function Action ; var i ; begin
11236: LD_INT 0
11238: PPUSH
11239: PPUSH
// InGameOn ;
11240: CALL_OW 8
// wait ( 2 ) ;
11244: LD_INT 2
11246: PPUSH
11247: CALL_OW 67
// CenterNowOnXY ( 194 , 133 ) ;
11251: LD_INT 194
11253: PPUSH
11254: LD_INT 133
11256: PPUSH
11257: CALL_OW 86
// ComStand ( FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) ) ;
11261: LD_INT 22
11263: PUSH
11264: LD_EXP 2
11268: PUSH
11269: EMPTY
11270: LIST
11271: LIST
11272: PUSH
11273: LD_INT 21
11275: PUSH
11276: LD_INT 1
11278: PUSH
11279: EMPTY
11280: LIST
11281: LIST
11282: PUSH
11283: EMPTY
11284: LIST
11285: LIST
11286: PPUSH
11287: CALL_OW 69
11291: PPUSH
11292: CALL_OW 165
// wait ( 0 0$2 ) ;
11296: LD_INT 70
11298: PPUSH
11299: CALL_OW 67
// InGameOff ;
11303: CALL_OW 9
// ComFree ( FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) ) ;
11307: LD_INT 22
11309: PUSH
11310: LD_EXP 2
11314: PUSH
11315: EMPTY
11316: LIST
11317: LIST
11318: PUSH
11319: LD_INT 21
11321: PUSH
11322: LD_INT 1
11324: PUSH
11325: EMPTY
11326: LIST
11327: LIST
11328: PUSH
11329: EMPTY
11330: LIST
11331: LIST
11332: PPUSH
11333: CALL_OW 69
11337: PPUSH
11338: CALL_OW 139
// wait ( 0 0$0.2 ) ;
11342: LD_INT 7
11344: PPUSH
11345: CALL_OW 67
// ChangeMissionObjectives ( M1 ) ;
11349: LD_STRING M1
11351: PPUSH
11352: CALL_OW 337
// wait ( 0 0$0.2 ) ;
11356: LD_INT 7
11358: PPUSH
11359: CALL_OW 67
// SaveForQuickRestart ;
11363: CALL_OW 22
// end ; end_of_file
11367: LD_VAR 0 1
11371: RET
// var dont_gather_crates , going_to_drop_material_units ; export function InitCrateModule ; begin
11372: LD_INT 0
11374: PPUSH
// dont_gather_crates = [ ] ;
11375: LD_ADDR_LOC 1
11379: PUSH
11380: EMPTY
11381: ST_TO_ADDR
// going_to_drop_material_units = [ ] ;
11382: LD_ADDR_LOC 2
11386: PUSH
11387: EMPTY
11388: ST_TO_ADDR
// end ;
11389: LD_VAR 0 1
11393: RET
// every 0 0$1 + 0 0$0.4 do var count ;
11394: GO 11396
11396: DISABLE
11397: LD_INT 0
11399: PPUSH
// begin count = 0 ;
11400: LD_ADDR_VAR 0 1
11404: PUSH
11405: LD_INT 0
11407: ST_TO_ADDR
// repeat wait ( Rand ( 2 2$10 , 2 2$40 ) ) ;
11408: LD_INT 4550
11410: PPUSH
11411: LD_INT 5600
11413: PPUSH
11414: CALL_OW 12
11418: PPUSH
11419: CALL_OW 67
// if not legion_base_captured then
11423: LD_EXP 110
11427: NOT
11428: IFFALSE 11457
// begin count = count + 1 ;
11430: LD_ADDR_VAR 0 1
11434: PUSH
11435: LD_VAR 0 1
11439: PUSH
11440: LD_INT 1
11442: PLUS
11443: ST_TO_ADDR
// wait ( 0 0$30 * count ) ;
11444: LD_INT 1050
11446: PUSH
11447: LD_VAR 0 1
11451: MUL
11452: PPUSH
11453: CALL_OW 67
// end ; CreateCratesAnywhere ( Rand ( 3 , 5 ) , true ) ;
11457: LD_INT 3
11459: PPUSH
11460: LD_INT 5
11462: PPUSH
11463: CALL_OW 12
11467: PPUSH
11468: LD_INT 1
11470: PPUSH
11471: CALL_OW 57
// if Rand ( 1 , 4 ) = 1 then
11475: LD_INT 1
11477: PPUSH
11478: LD_INT 4
11480: PPUSH
11481: CALL_OW 12
11485: PUSH
11486: LD_INT 1
11488: EQUAL
11489: IFFALSE 11524
// begin wait ( Rand ( 0 0$5 , 0 0$20 ) ) ;
11491: LD_INT 175
11493: PPUSH
11494: LD_INT 700
11496: PPUSH
11497: CALL_OW 12
11501: PPUSH
11502: CALL_OW 67
// CreateCratesAnywhere ( Rand ( 1 , 2 ) , true ) ;
11506: LD_INT 1
11508: PPUSH
11509: LD_INT 2
11511: PPUSH
11512: CALL_OW 12
11516: PPUSH
11517: LD_INT 1
11519: PPUSH
11520: CALL_OW 57
// end ; until false ;
11524: LD_INT 0
11526: IFFALSE 11408
// end ;
11528: PPOPN 1
11530: END
// every 0 0$1 + 0 0$0.8 do var crates_list , temp_list , c ;
11531: GO 11533
11533: DISABLE
11534: LD_INT 0
11536: PPUSH
11537: PPUSH
11538: PPUSH
// begin repeat wait ( 0 0$2 ) ;
11539: LD_INT 70
11541: PPUSH
11542: CALL_OW 67
// temp_list = GetListOfCratesInArea ( no_crate_area ) ;
11546: LD_ADDR_VAR 0 2
11550: PUSH
11551: LD_INT 5
11553: PPUSH
11554: CALL_OW 435
11558: ST_TO_ADDR
// if temp_list = 0 then
11559: LD_VAR 0 2
11563: PUSH
11564: LD_INT 0
11566: EQUAL
11567: IFFALSE 11571
// continue ;
11569: GO 11539
// c = 1 ;
11571: LD_ADDR_VAR 0 3
11575: PUSH
11576: LD_INT 1
11578: ST_TO_ADDR
// crates_list = [ ] ;
11579: LD_ADDR_VAR 0 1
11583: PUSH
11584: EMPTY
11585: ST_TO_ADDR
// repeat crates_list = crates_list ^ [ [ temp_list [ c ] , temp_list [ c + 1 ] ] ] ;
11586: LD_ADDR_VAR 0 1
11590: PUSH
11591: LD_VAR 0 1
11595: PUSH
11596: LD_VAR 0 2
11600: PUSH
11601: LD_VAR 0 3
11605: ARRAY
11606: PUSH
11607: LD_VAR 0 2
11611: PUSH
11612: LD_VAR 0 3
11616: PUSH
11617: LD_INT 1
11619: PLUS
11620: ARRAY
11621: PUSH
11622: EMPTY
11623: LIST
11624: LIST
11625: PUSH
11626: EMPTY
11627: LIST
11628: ADD
11629: ST_TO_ADDR
// c = c + 2 ;
11630: LD_ADDR_VAR 0 3
11634: PUSH
11635: LD_VAR 0 3
11639: PUSH
11640: LD_INT 2
11642: PLUS
11643: ST_TO_ADDR
// until c > temp_list ;
11644: LD_VAR 0 3
11648: PUSH
11649: LD_VAR 0 2
11653: GREATER
11654: IFFALSE 11586
// for c in crates_list do
11656: LD_ADDR_VAR 0 3
11660: PUSH
11661: LD_VAR 0 1
11665: PUSH
11666: FOR_IN
11667: IFFALSE 11726
// if not SeeXY ( you , c [ 1 ] , c [ 2 ] ) then
11669: LD_EXP 2
11673: PPUSH
11674: LD_VAR 0 3
11678: PUSH
11679: LD_INT 1
11681: ARRAY
11682: PPUSH
11683: LD_VAR 0 3
11687: PUSH
11688: LD_INT 2
11690: ARRAY
11691: PPUSH
11692: CALL_OW 293
11696: NOT
11697: IFFALSE 11724
// ChangeResourceAmountXY ( c [ 1 ] , c [ 2 ] , 0 ) ;
11699: LD_VAR 0 3
11703: PUSH
11704: LD_INT 1
11706: ARRAY
11707: PPUSH
11708: LD_VAR 0 3
11712: PUSH
11713: LD_INT 2
11715: ARRAY
11716: PPUSH
11717: LD_INT 0
11719: PPUSH
11720: CALL_OW 285
11724: GO 11666
11726: POP
11727: POP
// until false ;
11728: LD_INT 0
11730: IFFALSE 11539
// end ;
11732: PPOPN 3
11734: END
// export function OnCommand_CrateDropDetection ( com ) ; var b , temp_list , t ; begin
11735: LD_INT 0
11737: PPUSH
11738: PPUSH
11739: PPUSH
11740: PPUSH
// if com <> 74 then
11741: LD_VAR 0 1
11745: PUSH
11746: LD_INT 74
11748: NONEQUAL
11749: IFFALSE 11753
// exit ;
11751: GO 11925
// 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
11753: LD_ADDR_VAR 0 3
11757: PUSH
11758: LD_INT 22
11760: PUSH
11761: LD_EXP 2
11765: PUSH
11766: EMPTY
11767: LIST
11768: LIST
11769: PUSH
11770: LD_INT 2
11772: PUSH
11773: LD_INT 25
11775: PUSH
11776: LD_INT 2
11778: PUSH
11779: EMPTY
11780: LIST
11781: LIST
11782: PUSH
11783: LD_INT 25
11785: PUSH
11786: LD_INT 16
11788: PUSH
11789: EMPTY
11790: LIST
11791: LIST
11792: PUSH
11793: LD_INT 34
11795: PUSH
11796: LD_INT 12
11798: PUSH
11799: EMPTY
11800: LIST
11801: LIST
11802: PUSH
11803: LD_INT 34
11805: PUSH
11806: LD_INT 51
11808: PUSH
11809: EMPTY
11810: LIST
11811: LIST
11812: PUSH
11813: EMPTY
11814: LIST
11815: LIST
11816: LIST
11817: LIST
11818: LIST
11819: PUSH
11820: EMPTY
11821: LIST
11822: LIST
11823: PPUSH
11824: CALL_OW 69
11828: PUSH
11829: FOR_IN
11830: IFFALSE 11923
// if IsSelected ( b ) and not b in going_to_drop_material_units then
11832: LD_VAR 0 3
11836: PPUSH
11837: CALL_OW 306
11841: PUSH
11842: LD_VAR 0 3
11846: PUSH
11847: LD_LOC 2
11851: IN
11852: NOT
11853: AND
11854: IFFALSE 11921
// if HasTask ( b ) then
11856: LD_VAR 0 3
11860: PPUSH
11861: CALL_OW 314
11865: IFFALSE 11921
// begin for t in GetTaskList ( b ) do
11867: LD_ADDR_VAR 0 5
11871: PUSH
11872: LD_VAR 0 3
11876: PPUSH
11877: CALL_OW 437
11881: PUSH
11882: FOR_IN
11883: IFFALSE 11919
// begin if t [ 1 ] = m then
11885: LD_VAR 0 5
11889: PUSH
11890: LD_INT 1
11892: ARRAY
11893: PUSH
11894: LD_STRING m
11896: EQUAL
11897: IFFALSE 11917
// begin going_to_drop_material_units = going_to_drop_material_units ^ b ;
11899: LD_ADDR_LOC 2
11903: PUSH
11904: LD_LOC 2
11908: PUSH
11909: LD_VAR 0 3
11913: ADD
11914: ST_TO_ADDR
// break ;
11915: GO 11919
// end ; end ;
11917: GO 11882
11919: POP
11920: POP
// end ;
11921: GO 11829
11923: POP
11924: POP
// end ;
11925: LD_VAR 0 2
11929: RET
// every 0 0$1 + 0 0$0.1 do var un , temp_list , t , dist , hex ;
11930: GO 11932
11932: DISABLE
11933: LD_INT 0
11935: PPUSH
11936: PPUSH
11937: PPUSH
11938: PPUSH
11939: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
11940: LD_INT 18
11942: PPUSH
11943: CALL_OW 67
// if going_to_drop_material_units = 0 then
11947: LD_LOC 2
11951: PUSH
11952: LD_INT 0
11954: EQUAL
11955: IFFALSE 11959
// continue ;
11957: GO 11940
// for un in going_to_drop_material_units do
11959: LD_ADDR_VAR 0 1
11963: PUSH
11964: LD_LOC 2
11968: PUSH
11969: FOR_IN
11970: IFFALSE 12112
// if not Carry ( un ) then
11972: LD_VAR 0 1
11976: PPUSH
11977: CALL_OW 281
11981: NOT
11982: IFFALSE 12110
// begin if GetType ( un ) = unit_human then
11984: LD_VAR 0 1
11988: PPUSH
11989: CALL_OW 247
11993: PUSH
11994: LD_INT 1
11996: EQUAL
11997: IFFALSE 12009
// dist = 2 else
11999: LD_ADDR_VAR 0 4
12003: PUSH
12004: LD_INT 2
12006: ST_TO_ADDR
12007: GO 12017
// dist = 4 ;
12009: LD_ADDR_VAR 0 4
12013: PUSH
12014: LD_INT 4
12016: ST_TO_ADDR
// for hex in GetHexesNearHex ( GetX ( un ) , GetY ( un ) , dist ) do
12017: LD_ADDR_VAR 0 5
12021: PUSH
12022: LD_VAR 0 1
12026: PPUSH
12027: CALL_OW 250
12031: PPUSH
12032: LD_VAR 0 1
12036: PPUSH
12037: CALL_OW 251
12041: PPUSH
12042: LD_VAR 0 4
12046: PPUSH
12047: CALL 15078 0 3
12051: PUSH
12052: FOR_IN
12053: IFFALSE 12108
// if GetResourceAmountXY ( hex [ 1 ] , hex [ 2 ] ) > 0 then
12055: LD_VAR 0 5
12059: PUSH
12060: LD_INT 1
12062: ARRAY
12063: PPUSH
12064: LD_VAR 0 5
12068: PUSH
12069: LD_INT 2
12071: ARRAY
12072: PPUSH
12073: CALL_OW 284
12077: PUSH
12078: LD_INT 0
12080: GREATER
12081: IFFALSE 12106
// dont_gather_crates = Insert ( dont_gather_crates , 1 , hex ) ;
12083: LD_ADDR_LOC 1
12087: PUSH
12088: LD_LOC 1
12092: PPUSH
12093: LD_INT 1
12095: PPUSH
12096: LD_VAR 0 5
12100: PPUSH
12101: CALL_OW 2
12105: ST_TO_ADDR
12106: GO 12052
12108: POP
12109: POP
// end ;
12110: GO 11969
12112: POP
12113: POP
// going_to_drop_material_units = UnitFilter ( going_to_drop_material_units , [ f_hastask ] ) ;
12114: LD_ADDR_LOC 2
12118: PUSH
12119: LD_LOC 2
12123: PPUSH
12124: LD_INT 60
12126: PUSH
12127: EMPTY
12128: LIST
12129: PPUSH
12130: CALL_OW 72
12134: ST_TO_ADDR
// temp_list = [ ] ;
12135: LD_ADDR_VAR 0 2
12139: PUSH
12140: EMPTY
12141: ST_TO_ADDR
// for un in going_to_drop_material_units do
12142: LD_ADDR_VAR 0 1
12146: PUSH
12147: LD_LOC 2
12151: PUSH
12152: FOR_IN
12153: IFFALSE 12211
// begin for t in GetTaskList ( un ) do
12155: LD_ADDR_VAR 0 3
12159: PUSH
12160: LD_VAR 0 1
12164: PPUSH
12165: CALL_OW 437
12169: PUSH
12170: FOR_IN
12171: IFFALSE 12207
// if t [ 1 ] = m then
12173: LD_VAR 0 3
12177: PUSH
12178: LD_INT 1
12180: ARRAY
12181: PUSH
12182: LD_STRING m
12184: EQUAL
12185: IFFALSE 12205
// begin temp_list = temp_list ^ un ;
12187: LD_ADDR_VAR 0 2
12191: PUSH
12192: LD_VAR 0 2
12196: PUSH
12197: LD_VAR 0 1
12201: ADD
12202: ST_TO_ADDR
// break ;
12203: GO 12207
// end ;
12205: GO 12170
12207: POP
12208: POP
// end ;
12209: GO 12152
12211: POP
12212: POP
// going_to_drop_material_units = temp_list ;
12213: LD_ADDR_LOC 2
12217: PUSH
12218: LD_VAR 0 2
12222: ST_TO_ADDR
// until false ;
12223: LD_INT 0
12225: IFFALSE 11940
// end ;
12227: PPOPN 5
12229: END
// every 0 0$1 do var i ;
12230: GO 12232
12232: DISABLE
12233: LD_INT 0
12235: PPUSH
// begin repeat wait ( 0 0$1 ) ;
12236: LD_INT 35
12238: PPUSH
12239: CALL_OW 67
// if dont_gather_crates = 0 then
12243: LD_LOC 1
12247: PUSH
12248: LD_INT 0
12250: EQUAL
12251: IFFALSE 12255
// continue ;
12253: GO 12236
// i = 1 ;
12255: LD_ADDR_VAR 0 1
12259: PUSH
12260: LD_INT 1
12262: ST_TO_ADDR
// while i <= dont_gather_crates do
12263: LD_VAR 0 1
12267: PUSH
12268: LD_LOC 1
12272: LESSEQUAL
12273: IFFALSE 12353
// begin if GetResourceAmountXY ( dont_gather_crates [ i ] [ 1 ] , dont_gather_crates [ i ] [ 2 ] ) = 0 then
12275: LD_LOC 1
12279: PUSH
12280: LD_VAR 0 1
12284: ARRAY
12285: PUSH
12286: LD_INT 1
12288: ARRAY
12289: PPUSH
12290: LD_LOC 1
12294: PUSH
12295: LD_VAR 0 1
12299: ARRAY
12300: PUSH
12301: LD_INT 2
12303: ARRAY
12304: PPUSH
12305: CALL_OW 284
12309: PUSH
12310: LD_INT 0
12312: EQUAL
12313: IFFALSE 12337
// begin dont_gather_crates = Delete ( dont_gather_crates , i ) ;
12315: LD_ADDR_LOC 1
12319: PUSH
12320: LD_LOC 1
12324: PPUSH
12325: LD_VAR 0 1
12329: PPUSH
12330: CALL_OW 3
12334: ST_TO_ADDR
// continue ;
12335: GO 12263
// end ; i = i + 1 ;
12337: LD_ADDR_VAR 0 1
12341: PUSH
12342: LD_VAR 0 1
12346: PUSH
12347: LD_INT 1
12349: PLUS
12350: ST_TO_ADDR
// end ;
12351: GO 12263
// until false ;
12353: LD_INT 0
12355: IFFALSE 12236
// end ;
12357: PPOPN 1
12359: END
// export function GetListOfCratesInArea_ForGathering ( base , area ) ; var temp_list , c ; begin
12360: LD_INT 0
12362: PPUSH
12363: PPUSH
12364: PPUSH
// temp_list = GetListOfCratesInArea ( area ) ;
12365: LD_ADDR_VAR 0 4
12369: PUSH
12370: LD_VAR 0 2
12374: PPUSH
12375: CALL_OW 435
12379: ST_TO_ADDR
// result = [ ] ;
12380: LD_ADDR_VAR 0 3
12384: PUSH
12385: EMPTY
12386: ST_TO_ADDR
// if temp_list > 0 then
12387: LD_VAR 0 4
12391: PUSH
12392: LD_INT 0
12394: GREATER
12395: IFFALSE 12591
// begin c = 1 ;
12397: LD_ADDR_VAR 0 5
12401: PUSH
12402: LD_INT 1
12404: 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
12405: LD_VAR 0 4
12409: PUSH
12410: LD_VAR 0 5
12414: ARRAY
12415: PPUSH
12416: LD_VAR 0 4
12420: PUSH
12421: LD_VAR 0 5
12425: PUSH
12426: LD_INT 1
12428: PLUS
12429: ARRAY
12430: PPUSH
12431: CALL_OW 283
12435: PUSH
12436: LD_INT 4
12438: NONEQUAL
12439: PUSH
12440: LD_VAR 0 4
12444: PUSH
12445: LD_VAR 0 5
12449: ARRAY
12450: PPUSH
12451: LD_VAR 0 4
12455: PUSH
12456: LD_VAR 0 5
12460: PUSH
12461: LD_INT 1
12463: PLUS
12464: ARRAY
12465: PPUSH
12466: LD_VAR 0 1
12470: PPUSH
12471: CALL 18845 0 1
12475: PPUSH
12476: CALL_OW 309
12480: PUSH
12481: LD_VAR 0 4
12485: PUSH
12486: LD_VAR 0 5
12490: ARRAY
12491: PUSH
12492: LD_VAR 0 4
12496: PUSH
12497: LD_VAR 0 5
12501: PUSH
12502: LD_INT 1
12504: PLUS
12505: ARRAY
12506: PUSH
12507: EMPTY
12508: LIST
12509: LIST
12510: PUSH
12511: LD_LOC 1
12515: IN
12516: NOT
12517: OR
12518: AND
12519: IFFALSE 12565
// result = result ^ [ [ temp_list [ c ] , temp_list [ c + 1 ] ] ] ;
12521: LD_ADDR_VAR 0 3
12525: PUSH
12526: LD_VAR 0 3
12530: PUSH
12531: LD_VAR 0 4
12535: PUSH
12536: LD_VAR 0 5
12540: ARRAY
12541: PUSH
12542: LD_VAR 0 4
12546: PUSH
12547: LD_VAR 0 5
12551: PUSH
12552: LD_INT 1
12554: PLUS
12555: ARRAY
12556: PUSH
12557: EMPTY
12558: LIST
12559: LIST
12560: PUSH
12561: EMPTY
12562: LIST
12563: ADD
12564: ST_TO_ADDR
// c = c + 2 ;
12565: LD_ADDR_VAR 0 5
12569: PUSH
12570: LD_VAR 0 5
12574: PUSH
12575: LD_INT 2
12577: PLUS
12578: ST_TO_ADDR
// until c > temp_list ;
12579: LD_VAR 0 5
12583: PUSH
12584: LD_VAR 0 4
12588: GREATER
12589: IFFALSE 12405
// end ; end ; end_of_file
12591: LD_VAR 0 3
12595: 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
12596: LD_INT 0
12598: PPUSH
12599: PPUSH
12600: PPUSH
12601: PPUSH
12602: PPUSH
12603: PPUSH
12604: PPUSH
12605: PPUSH
12606: PPUSH
12607: PPUSH
12608: PPUSH
12609: 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
12610: LD_VAR 0 1
12614: PPUSH
12615: CALL_OW 302
12619: NOT
12620: PUSH
12621: LD_VAR 0 4
12625: PUSH
12626: LD_INT 1
12628: EQUAL
12629: OR
12630: PUSH
12631: LD_VAR 0 2
12635: PPUSH
12636: LD_VAR 0 3
12640: PPUSH
12641: CALL_OW 488
12645: NOT
12646: OR
12647: PUSH
12648: LD_VAR 0 1
12652: PPUSH
12653: LD_VAR 0 2
12657: PPUSH
12658: LD_VAR 0 3
12662: PPUSH
12663: CALL_OW 297
12667: PUSH
12668: LD_VAR 0 4
12672: GREATEREQUAL
12673: OR
12674: PUSH
12675: LD_VAR 0 5
12679: PUSH
12680: LD_INT 1
12682: PUSH
12683: LD_INT 0
12685: PUSH
12686: EMPTY
12687: LIST
12688: LIST
12689: IN
12690: NOT
12691: OR
12692: IFFALSE 12696
// exit ;
12694: GO 14253
// attempts = 0 ;
12696: LD_ADDR_VAR 0 17
12700: PUSH
12701: LD_INT 0
12703: ST_TO_ADDR
// repeat list_nearest = [ ] ;
12704: LD_ADDR_VAR 0 7
12708: PUSH
12709: EMPTY
12710: ST_TO_ADDR
// list_coords = [ ] ;
12711: LD_ADDR_VAR 0 8
12715: PUSH
12716: EMPTY
12717: ST_TO_ADDR
// temp_dir = AI_GetTurnDirection ( x , y , GetX ( unit1 ) , GetY ( unit1 ) ) ;
12718: LD_ADDR_VAR 0 9
12722: PUSH
12723: LD_VAR 0 2
12727: PPUSH
12728: LD_VAR 0 3
12732: PPUSH
12733: LD_VAR 0 1
12737: PPUSH
12738: CALL_OW 250
12742: PPUSH
12743: LD_VAR 0 1
12747: PPUSH
12748: CALL_OW 251
12752: PPUSH
12753: CALL 14258 0 4
12757: ST_TO_ADDR
// if attempts = 0 then
12758: LD_VAR 0 17
12762: PUSH
12763: LD_INT 0
12765: EQUAL
12766: IFFALSE 12874
// begin dir_list = [ temp_dir , temp_dir + 1 , temp_dir - 1 ] ;
12768: LD_ADDR_VAR 0 10
12772: PUSH
12773: LD_VAR 0 9
12777: PUSH
12778: LD_VAR 0 9
12782: PUSH
12783: LD_INT 1
12785: PLUS
12786: PUSH
12787: LD_VAR 0 9
12791: PUSH
12792: LD_INT 1
12794: MINUS
12795: PUSH
12796: EMPTY
12797: LIST
12798: LIST
12799: LIST
12800: ST_TO_ADDR
// if dir_list [ 2 ] = 6 then
12801: LD_VAR 0 10
12805: PUSH
12806: LD_INT 2
12808: ARRAY
12809: PUSH
12810: LD_INT 6
12812: EQUAL
12813: IFFALSE 12836
// dir_list = Replace ( dir_list , 2 , 0 ) ;
12815: LD_ADDR_VAR 0 10
12819: PUSH
12820: LD_VAR 0 10
12824: PPUSH
12825: LD_INT 2
12827: PPUSH
12828: LD_INT 0
12830: PPUSH
12831: CALL_OW 1
12835: ST_TO_ADDR
// if dir_list [ 3 ] = - 1 then
12836: LD_VAR 0 10
12840: PUSH
12841: LD_INT 3
12843: ARRAY
12844: PUSH
12845: LD_INT 1
12847: NEG
12848: EQUAL
12849: IFFALSE 12872
// dir_list = Replace ( dir_list , 3 , 5 ) ;
12851: LD_ADDR_VAR 0 10
12855: PUSH
12856: LD_VAR 0 10
12860: PPUSH
12861: LD_INT 3
12863: PPUSH
12864: LD_INT 5
12866: PPUSH
12867: CALL_OW 1
12871: ST_TO_ADDR
// end else
12872: GO 12911
// dir_list = [ 0 , 1 , 2 , 3 , 4 , 5 ] diff temp_dir ;
12874: LD_ADDR_VAR 0 10
12878: PUSH
12879: LD_INT 0
12881: PUSH
12882: LD_INT 1
12884: PUSH
12885: LD_INT 2
12887: PUSH
12888: LD_INT 3
12890: PUSH
12891: LD_INT 4
12893: PUSH
12894: LD_INT 5
12896: PUSH
12897: EMPTY
12898: LIST
12899: LIST
12900: LIST
12901: LIST
12902: LIST
12903: LIST
12904: PUSH
12905: LD_VAR 0 9
12909: DIFF
12910: ST_TO_ADDR
// for c = 1 to ( dir_list + 0 ) do
12911: LD_ADDR_VAR 0 14
12915: PUSH
12916: DOUBLE
12917: LD_INT 1
12919: DEC
12920: ST_TO_ADDR
12921: LD_VAR 0 10
12925: PUSH
12926: LD_INT 0
12928: PLUS
12929: PUSH
12930: FOR_TO
12931: IFFALSE 13253
// case dir_list [ c ] of 0 :
12933: LD_VAR 0 10
12937: PUSH
12938: LD_VAR 0 14
12942: ARRAY
12943: PUSH
12944: LD_INT 0
12946: DOUBLE
12947: EQUAL
12948: IFTRUE 12952
12950: GO 12993
12952: POP
// list_coords = Insert ( list_coords , 1 , [ x , y - dist ] ) ; 1 :
12953: LD_ADDR_VAR 0 8
12957: PUSH
12958: LD_VAR 0 8
12962: PPUSH
12963: LD_INT 1
12965: PPUSH
12966: LD_VAR 0 2
12970: PUSH
12971: LD_VAR 0 3
12975: PUSH
12976: LD_VAR 0 4
12980: MINUS
12981: PUSH
12982: EMPTY
12983: LIST
12984: LIST
12985: PPUSH
12986: CALL_OW 2
12990: ST_TO_ADDR
12991: GO 13251
12993: LD_INT 1
12995: DOUBLE
12996: EQUAL
12997: IFTRUE 13001
12999: GO 13042
13001: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y ] ) ; 2 :
13002: LD_ADDR_VAR 0 8
13006: PUSH
13007: LD_VAR 0 8
13011: PPUSH
13012: LD_INT 1
13014: PPUSH
13015: LD_VAR 0 2
13019: PUSH
13020: LD_VAR 0 4
13024: PLUS
13025: PUSH
13026: LD_VAR 0 3
13030: PUSH
13031: EMPTY
13032: LIST
13033: LIST
13034: PPUSH
13035: CALL_OW 2
13039: ST_TO_ADDR
13040: GO 13251
13042: LD_INT 2
13044: DOUBLE
13045: EQUAL
13046: IFTRUE 13050
13048: GO 13097
13050: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + dist ] ) ; 3 :
13051: LD_ADDR_VAR 0 8
13055: PUSH
13056: LD_VAR 0 8
13060: PPUSH
13061: LD_INT 1
13063: PPUSH
13064: LD_VAR 0 2
13068: PUSH
13069: LD_VAR 0 4
13073: PLUS
13074: PUSH
13075: LD_VAR 0 3
13079: PUSH
13080: LD_VAR 0 4
13084: PLUS
13085: PUSH
13086: EMPTY
13087: LIST
13088: LIST
13089: PPUSH
13090: CALL_OW 2
13094: ST_TO_ADDR
13095: GO 13251
13097: LD_INT 3
13099: DOUBLE
13100: EQUAL
13101: IFTRUE 13105
13103: GO 13146
13105: POP
// list_coords = Insert ( list_coords , 1 , [ x , y + dist ] ) ; 4 :
13106: LD_ADDR_VAR 0 8
13110: PUSH
13111: LD_VAR 0 8
13115: PPUSH
13116: LD_INT 1
13118: PPUSH
13119: LD_VAR 0 2
13123: PUSH
13124: LD_VAR 0 3
13128: PUSH
13129: LD_VAR 0 4
13133: PLUS
13134: PUSH
13135: EMPTY
13136: LIST
13137: LIST
13138: PPUSH
13139: CALL_OW 2
13143: ST_TO_ADDR
13144: GO 13251
13146: LD_INT 4
13148: DOUBLE
13149: EQUAL
13150: IFTRUE 13154
13152: GO 13195
13154: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y ] ) ; 5 :
13155: LD_ADDR_VAR 0 8
13159: PUSH
13160: LD_VAR 0 8
13164: PPUSH
13165: LD_INT 1
13167: PPUSH
13168: LD_VAR 0 2
13172: PUSH
13173: LD_VAR 0 4
13177: MINUS
13178: PUSH
13179: LD_VAR 0 3
13183: PUSH
13184: EMPTY
13185: LIST
13186: LIST
13187: PPUSH
13188: CALL_OW 2
13192: ST_TO_ADDR
13193: GO 13251
13195: LD_INT 5
13197: DOUBLE
13198: EQUAL
13199: IFTRUE 13203
13201: GO 13250
13203: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - dist ] ) ; end ;
13204: LD_ADDR_VAR 0 8
13208: PUSH
13209: LD_VAR 0 8
13213: PPUSH
13214: LD_INT 1
13216: PPUSH
13217: LD_VAR 0 2
13221: PUSH
13222: LD_VAR 0 4
13226: MINUS
13227: PUSH
13228: LD_VAR 0 3
13232: PUSH
13233: LD_VAR 0 4
13237: MINUS
13238: PUSH
13239: EMPTY
13240: LIST
13241: LIST
13242: PPUSH
13243: CALL_OW 2
13247: ST_TO_ADDR
13248: GO 13251
13250: POP
13251: GO 12930
13253: POP
13254: POP
// if dist < 30 then
13255: LD_VAR 0 4
13259: PUSH
13260: LD_INT 30
13262: LESS
13263: IFFALSE 13275
// c = 1 else
13265: LD_ADDR_VAR 0 14
13269: PUSH
13270: LD_INT 1
13272: ST_TO_ADDR
13273: GO 13283
// c = 2 ;
13275: LD_ADDR_VAR 0 14
13279: PUSH
13280: LD_INT 2
13282: ST_TO_ADDR
// b = 1 ;
13283: LD_ADDR_VAR 0 11
13287: PUSH
13288: LD_INT 1
13290: ST_TO_ADDR
// while b <= ( dist - 1 ) do
13291: LD_VAR 0 11
13295: PUSH
13296: LD_VAR 0 4
13300: PUSH
13301: LD_INT 1
13303: MINUS
13304: LESSEQUAL
13305: IFFALSE 13733
// begin if 0 in dir_list and 1 in dir_list then
13307: LD_INT 0
13309: PUSH
13310: LD_VAR 0 10
13314: IN
13315: PUSH
13316: LD_INT 1
13318: PUSH
13319: LD_VAR 0 10
13323: IN
13324: AND
13325: IFFALSE 13377
// list_coords = Insert ( list_coords , 1 , [ x + b , y - dist + b ] ) ;
13327: LD_ADDR_VAR 0 8
13331: PUSH
13332: LD_VAR 0 8
13336: PPUSH
13337: LD_INT 1
13339: PPUSH
13340: LD_VAR 0 2
13344: PUSH
13345: LD_VAR 0 11
13349: PLUS
13350: PUSH
13351: LD_VAR 0 3
13355: PUSH
13356: LD_VAR 0 4
13360: MINUS
13361: PUSH
13362: LD_VAR 0 11
13366: PLUS
13367: PUSH
13368: EMPTY
13369: LIST
13370: LIST
13371: PPUSH
13372: CALL_OW 2
13376: ST_TO_ADDR
// if 1 in dir_list and 2 in dir_list then
13377: LD_INT 1
13379: PUSH
13380: LD_VAR 0 10
13384: IN
13385: PUSH
13386: LD_INT 2
13388: PUSH
13389: LD_VAR 0 10
13393: IN
13394: AND
13395: IFFALSE 13441
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + b ] ) ;
13397: LD_ADDR_VAR 0 8
13401: PUSH
13402: LD_VAR 0 8
13406: PPUSH
13407: LD_INT 1
13409: PPUSH
13410: LD_VAR 0 2
13414: PUSH
13415: LD_VAR 0 4
13419: PLUS
13420: PUSH
13421: LD_VAR 0 3
13425: PUSH
13426: LD_VAR 0 11
13430: PLUS
13431: PUSH
13432: EMPTY
13433: LIST
13434: LIST
13435: PPUSH
13436: CALL_OW 2
13440: ST_TO_ADDR
// if 2 in dir_list and 3 in dir_list then
13441: LD_INT 2
13443: PUSH
13444: LD_VAR 0 10
13448: IN
13449: PUSH
13450: LD_INT 3
13452: PUSH
13453: LD_VAR 0 10
13457: IN
13458: AND
13459: IFFALSE 13511
// list_coords = Insert ( list_coords , 1 , [ x + dist - b , y + dist ] ) ;
13461: LD_ADDR_VAR 0 8
13465: PUSH
13466: LD_VAR 0 8
13470: PPUSH
13471: LD_INT 1
13473: PPUSH
13474: LD_VAR 0 2
13478: PUSH
13479: LD_VAR 0 4
13483: PLUS
13484: PUSH
13485: LD_VAR 0 11
13489: MINUS
13490: PUSH
13491: LD_VAR 0 3
13495: PUSH
13496: LD_VAR 0 4
13500: PLUS
13501: PUSH
13502: EMPTY
13503: LIST
13504: LIST
13505: PPUSH
13506: CALL_OW 2
13510: ST_TO_ADDR
// if 3 in dir_list and 4 in dir_list then
13511: LD_INT 3
13513: PUSH
13514: LD_VAR 0 10
13518: IN
13519: PUSH
13520: LD_INT 4
13522: PUSH
13523: LD_VAR 0 10
13527: IN
13528: AND
13529: IFFALSE 13581
// list_coords = Insert ( list_coords , 1 , [ x - b , y + dist - b ] ) ;
13531: LD_ADDR_VAR 0 8
13535: PUSH
13536: LD_VAR 0 8
13540: PPUSH
13541: LD_INT 1
13543: PPUSH
13544: LD_VAR 0 2
13548: PUSH
13549: LD_VAR 0 11
13553: MINUS
13554: PUSH
13555: LD_VAR 0 3
13559: PUSH
13560: LD_VAR 0 4
13564: PLUS
13565: PUSH
13566: LD_VAR 0 11
13570: MINUS
13571: PUSH
13572: EMPTY
13573: LIST
13574: LIST
13575: PPUSH
13576: CALL_OW 2
13580: ST_TO_ADDR
// if 4 in dir_list and 5 in dir_list then
13581: LD_INT 4
13583: PUSH
13584: LD_VAR 0 10
13588: IN
13589: PUSH
13590: LD_INT 5
13592: PUSH
13593: LD_VAR 0 10
13597: IN
13598: AND
13599: IFFALSE 13645
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - b ] ) ;
13601: LD_ADDR_VAR 0 8
13605: PUSH
13606: LD_VAR 0 8
13610: PPUSH
13611: LD_INT 1
13613: PPUSH
13614: LD_VAR 0 2
13618: PUSH
13619: LD_VAR 0 4
13623: MINUS
13624: PUSH
13625: LD_VAR 0 3
13629: PUSH
13630: LD_VAR 0 11
13634: MINUS
13635: PUSH
13636: EMPTY
13637: LIST
13638: LIST
13639: PPUSH
13640: CALL_OW 2
13644: ST_TO_ADDR
// if 5 in dir_list and 0 in dir_list then
13645: LD_INT 5
13647: PUSH
13648: LD_VAR 0 10
13652: IN
13653: PUSH
13654: LD_INT 0
13656: PUSH
13657: LD_VAR 0 10
13661: IN
13662: AND
13663: IFFALSE 13715
// list_coords = Insert ( list_coords , 1 , [ x - dist + b , y - dist ] ) ;
13665: LD_ADDR_VAR 0 8
13669: PUSH
13670: LD_VAR 0 8
13674: PPUSH
13675: LD_INT 1
13677: PPUSH
13678: LD_VAR 0 2
13682: PUSH
13683: LD_VAR 0 4
13687: MINUS
13688: PUSH
13689: LD_VAR 0 11
13693: PLUS
13694: PUSH
13695: LD_VAR 0 3
13699: PUSH
13700: LD_VAR 0 4
13704: MINUS
13705: PUSH
13706: EMPTY
13707: LIST
13708: LIST
13709: PPUSH
13710: CALL_OW 2
13714: ST_TO_ADDR
// b = b + c end ;
13715: LD_ADDR_VAR 0 11
13719: PUSH
13720: LD_VAR 0 11
13724: PUSH
13725: LD_VAR 0 14
13729: PLUS
13730: ST_TO_ADDR
13731: GO 13291
// if list_coords = 0 then
13733: LD_VAR 0 8
13737: PUSH
13738: LD_INT 0
13740: EQUAL
13741: IFFALSE 13745
// exit ;
13743: GO 14253
// repeat min_dist = 5000 ;
13745: LD_ADDR_VAR 0 12
13749: PUSH
13750: LD_INT 5000
13752: ST_TO_ADDR
// for b in list_coords do
13753: LD_ADDR_VAR 0 11
13757: PUSH
13758: LD_VAR 0 8
13762: PUSH
13763: FOR_IN
13764: IFFALSE 13823
// begin temp_dist = GetDistUnitXY ( unit1 , b [ 1 ] , b [ 2 ] ) ;
13766: LD_ADDR_VAR 0 13
13770: PUSH
13771: LD_VAR 0 1
13775: PPUSH
13776: LD_VAR 0 11
13780: PUSH
13781: LD_INT 1
13783: ARRAY
13784: PPUSH
13785: LD_VAR 0 11
13789: PUSH
13790: LD_INT 2
13792: ARRAY
13793: PPUSH
13794: CALL_OW 297
13798: ST_TO_ADDR
// if temp_dist < min_dist then
13799: LD_VAR 0 13
13803: PUSH
13804: LD_VAR 0 12
13808: LESS
13809: IFFALSE 13821
// min_dist = temp_dist ;
13811: LD_ADDR_VAR 0 12
13815: PUSH
13816: LD_VAR 0 13
13820: ST_TO_ADDR
// end ;
13821: GO 13763
13823: POP
13824: POP
// c = 0 ;
13825: LD_ADDR_VAR 0 14
13829: PUSH
13830: LD_INT 0
13832: ST_TO_ADDR
// repeat c = c + 1 ;
13833: LD_ADDR_VAR 0 14
13837: PUSH
13838: LD_VAR 0 14
13842: PUSH
13843: LD_INT 1
13845: PLUS
13846: ST_TO_ADDR
// if GetDistUnitXY ( unit1 , list_coords [ c ] [ 1 ] , list_coords [ c ] [ 2 ] ) = min_dist then
13847: LD_VAR 0 1
13851: PPUSH
13852: LD_VAR 0 8
13856: PUSH
13857: LD_VAR 0 14
13861: ARRAY
13862: PUSH
13863: LD_INT 1
13865: ARRAY
13866: PPUSH
13867: LD_VAR 0 8
13871: PUSH
13872: LD_VAR 0 14
13876: ARRAY
13877: PUSH
13878: LD_INT 2
13880: ARRAY
13881: PPUSH
13882: CALL_OW 297
13886: PUSH
13887: LD_VAR 0 12
13891: EQUAL
13892: IFFALSE 13957
// begin list_nearest = Insert ( list_nearest , 1 , list_coords [ c ] ) ;
13894: LD_ADDR_VAR 0 7
13898: PUSH
13899: LD_VAR 0 7
13903: PPUSH
13904: LD_INT 1
13906: PPUSH
13907: LD_VAR 0 8
13911: PUSH
13912: LD_VAR 0 14
13916: ARRAY
13917: PPUSH
13918: CALL_OW 2
13922: ST_TO_ADDR
// list_coords = Delete ( list_coords , c ) ;
13923: LD_ADDR_VAR 0 8
13927: PUSH
13928: LD_VAR 0 8
13932: PPUSH
13933: LD_VAR 0 14
13937: PPUSH
13938: CALL_OW 3
13942: ST_TO_ADDR
// c = c - 1 ;
13943: LD_ADDR_VAR 0 14
13947: PUSH
13948: LD_VAR 0 14
13952: PUSH
13953: LD_INT 1
13955: MINUS
13956: ST_TO_ADDR
// end ; until c = list_coords ;
13957: LD_VAR 0 14
13961: PUSH
13962: LD_VAR 0 8
13966: EQUAL
13967: IFFALSE 13833
// c = 0 ;
13969: LD_ADDR_VAR 0 14
13973: PUSH
13974: LD_INT 0
13976: ST_TO_ADDR
// if list_nearest > 0 then
13977: LD_VAR 0 7
13981: PUSH
13982: LD_INT 0
13984: GREATER
13985: IFFALSE 14127
// begin repeat rand_num = Rand ( 1 , list_nearest ) ;
13987: LD_ADDR_VAR 0 15
13991: PUSH
13992: LD_INT 1
13994: PPUSH
13995: LD_VAR 0 7
13999: PPUSH
14000: CALL_OW 12
14004: ST_TO_ADDR
// rand_near_hex = list_nearest [ rand_num ] ;
14005: LD_ADDR_VAR 0 16
14009: PUSH
14010: LD_VAR 0 7
14014: PUSH
14015: LD_VAR 0 15
14019: ARRAY
14020: 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
14021: LD_VAR 0 16
14025: PUSH
14026: LD_INT 1
14028: ARRAY
14029: PPUSH
14030: LD_VAR 0 16
14034: PUSH
14035: LD_INT 2
14037: ARRAY
14038: PPUSH
14039: CALL_OW 488
14043: PUSH
14044: LD_INT 0
14046: GREATER
14047: PUSH
14048: LD_VAR 0 16
14052: PUSH
14053: LD_INT 1
14055: ARRAY
14056: PPUSH
14057: LD_VAR 0 16
14061: PUSH
14062: LD_INT 2
14064: ARRAY
14065: PPUSH
14066: CALL_OW 428
14070: PUSH
14071: LD_INT 0
14073: EQUAL
14074: AND
14075: IFFALSE 14087
// c = 1 else
14077: LD_ADDR_VAR 0 14
14081: PUSH
14082: LD_INT 1
14084: ST_TO_ADDR
14085: GO 14107
// list_nearest = Delete ( list_nearest , rand_num ) ;
14087: LD_ADDR_VAR 0 7
14091: PUSH
14092: LD_VAR 0 7
14096: PPUSH
14097: LD_VAR 0 15
14101: PPUSH
14102: CALL_OW 3
14106: ST_TO_ADDR
// until c = 1 or list_nearest = 0 ;
14107: LD_VAR 0 14
14111: PUSH
14112: LD_INT 1
14114: EQUAL
14115: PUSH
14116: LD_VAR 0 7
14120: PUSH
14121: LD_INT 0
14123: EQUAL
14124: OR
14125: IFFALSE 13987
// end ; until c = 1 or list_coords = 0 ;
14127: LD_VAR 0 14
14131: PUSH
14132: LD_INT 1
14134: EQUAL
14135: PUSH
14136: LD_VAR 0 8
14140: PUSH
14141: LD_INT 0
14143: EQUAL
14144: OR
14145: IFFALSE 13745
// attempts = attempts + 1 ;
14147: LD_ADDR_VAR 0 17
14151: PUSH
14152: LD_VAR 0 17
14156: PUSH
14157: LD_INT 1
14159: PLUS
14160: ST_TO_ADDR
// until c = 1 or attempts > 1 ;
14161: LD_VAR 0 14
14165: PUSH
14166: LD_INT 1
14168: EQUAL
14169: PUSH
14170: LD_VAR 0 17
14174: PUSH
14175: LD_INT 1
14177: GREATER
14178: OR
14179: IFFALSE 12704
// if c = 1 then
14181: LD_VAR 0 14
14185: PUSH
14186: LD_INT 1
14188: EQUAL
14189: IFFALSE 14253
// if add then
14191: LD_VAR 0 5
14195: IFFALSE 14226
// AddComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) else
14197: LD_VAR 0 1
14201: PPUSH
14202: LD_VAR 0 16
14206: PUSH
14207: LD_INT 1
14209: ARRAY
14210: PPUSH
14211: LD_VAR 0 16
14215: PUSH
14216: LD_INT 2
14218: ARRAY
14219: PPUSH
14220: CALL_OW 171
14224: GO 14253
// ComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) ;
14226: LD_VAR 0 1
14230: PPUSH
14231: LD_VAR 0 16
14235: PUSH
14236: LD_INT 1
14238: ARRAY
14239: PPUSH
14240: LD_VAR 0 16
14244: PUSH
14245: LD_INT 2
14247: ARRAY
14248: PPUSH
14249: CALL_OW 111
// end ;
14253: LD_VAR 0 6
14257: RET
// export function AI_GetTurnDirection ( x1 , y1 , x , y ) ; var dist_1 , dist_2 , b , temp_dist , dir ; begin
14258: LD_INT 0
14260: PPUSH
14261: PPUSH
14262: PPUSH
14263: PPUSH
14264: PPUSH
14265: PPUSH
// if not ValidHex ( x1 , y1 ) or not ValidHex ( x , y ) then
14266: LD_VAR 0 1
14270: PPUSH
14271: LD_VAR 0 2
14275: PPUSH
14276: CALL_OW 488
14280: NOT
14281: PUSH
14282: LD_VAR 0 3
14286: PPUSH
14287: LD_VAR 0 4
14291: PPUSH
14292: CALL_OW 488
14296: NOT
14297: OR
14298: IFFALSE 14311
// begin result = - 1 ;
14300: LD_ADDR_VAR 0 5
14304: PUSH
14305: LD_INT 1
14307: NEG
14308: ST_TO_ADDR
// exit ;
14309: GO 14471
// end ; dist_1 = GetDistXY ( x1 , y1 , x , y ) ;
14311: LD_ADDR_VAR 0 6
14315: PUSH
14316: LD_VAR 0 1
14320: PPUSH
14321: LD_VAR 0 2
14325: PPUSH
14326: LD_VAR 0 3
14330: PPUSH
14331: LD_VAR 0 4
14335: PPUSH
14336: CALL_OW 298
14340: ST_TO_ADDR
// dist_2 = 99999 ;
14341: LD_ADDR_VAR 0 7
14345: PUSH
14346: LD_INT 99999
14348: ST_TO_ADDR
// for b = 0 to 5 do
14349: LD_ADDR_VAR 0 8
14353: PUSH
14354: DOUBLE
14355: LD_INT 0
14357: DEC
14358: ST_TO_ADDR
14359: LD_INT 5
14361: PUSH
14362: FOR_TO
14363: IFFALSE 14459
// begin temp_dist = GetDistXY ( ShiftX ( x1 , b , dist_1 ) , ShiftY ( y1 , b , dist_1 ) , x , y ) ;
14365: LD_ADDR_VAR 0 9
14369: PUSH
14370: LD_VAR 0 1
14374: PPUSH
14375: LD_VAR 0 8
14379: PPUSH
14380: LD_VAR 0 6
14384: PPUSH
14385: CALL_OW 272
14389: PPUSH
14390: LD_VAR 0 2
14394: PPUSH
14395: LD_VAR 0 8
14399: PPUSH
14400: LD_VAR 0 6
14404: PPUSH
14405: CALL_OW 273
14409: PPUSH
14410: LD_VAR 0 3
14414: PPUSH
14415: LD_VAR 0 4
14419: PPUSH
14420: CALL_OW 298
14424: ST_TO_ADDR
// if temp_dist < dist_2 then
14425: LD_VAR 0 9
14429: PUSH
14430: LD_VAR 0 7
14434: LESS
14435: IFFALSE 14457
// begin dist_2 = temp_dist ;
14437: LD_ADDR_VAR 0 7
14441: PUSH
14442: LD_VAR 0 9
14446: ST_TO_ADDR
// dir = b ;
14447: LD_ADDR_VAR 0 10
14451: PUSH
14452: LD_VAR 0 8
14456: ST_TO_ADDR
// end ; end ;
14457: GO 14362
14459: POP
14460: POP
// result = dir ;
14461: LD_ADDR_VAR 0 5
14465: PUSH
14466: LD_VAR 0 10
14470: ST_TO_ADDR
// end ;
14471: LD_VAR 0 5
14475: RET
// export function AI_InvertDirection ( direction ) ; var dir ; begin
14476: LD_INT 0
14478: PPUSH
14479: PPUSH
// dir = direction - 3 ;
14480: LD_ADDR_VAR 0 3
14484: PUSH
14485: LD_VAR 0 1
14489: PUSH
14490: LD_INT 3
14492: MINUS
14493: ST_TO_ADDR
// if dir < 0 then
14494: LD_VAR 0 3
14498: PUSH
14499: LD_INT 0
14501: LESS
14502: IFFALSE 14518
// dir = dir + 6 ;
14504: LD_ADDR_VAR 0 3
14508: PUSH
14509: LD_VAR 0 3
14513: PUSH
14514: LD_INT 6
14516: PLUS
14517: ST_TO_ADDR
// result = dir ;
14518: LD_ADDR_VAR 0 2
14522: PUSH
14523: LD_VAR 0 3
14527: ST_TO_ADDR
// end ;
14528: LD_VAR 0 2
14532: RET
// export function BehindLine ( un , x , y , dir , dist ) ; var c ; begin
14533: LD_INT 0
14535: PPUSH
14536: PPUSH
// case dir of 0 :
14537: LD_VAR 0 4
14541: PUSH
14542: LD_INT 0
14544: DOUBLE
14545: EQUAL
14546: IFTRUE 14550
14548: GO 14645
14550: POP
// begin c = GetX ( un ) - x ;
14551: LD_ADDR_VAR 0 7
14555: PUSH
14556: LD_VAR 0 1
14560: PPUSH
14561: CALL_OW 250
14565: PUSH
14566: LD_VAR 0 2
14570: MINUS
14571: ST_TO_ADDR
// if c > 0 then
14572: LD_VAR 0 7
14576: PUSH
14577: LD_INT 0
14579: GREATER
14580: IFFALSE 14596
// c = c + 1 ;
14582: LD_ADDR_VAR 0 7
14586: PUSH
14587: LD_VAR 0 7
14591: PUSH
14592: LD_INT 1
14594: PLUS
14595: ST_TO_ADDR
// y = y + ( c div 2 ) ;
14596: LD_ADDR_VAR 0 3
14600: PUSH
14601: LD_VAR 0 3
14605: PUSH
14606: LD_VAR 0 7
14610: PUSH
14611: LD_INT 2
14613: DIV
14614: PLUS
14615: ST_TO_ADDR
// result := GetY ( un ) >= y + dist ;
14616: LD_ADDR_VAR 0 6
14620: PUSH
14621: LD_VAR 0 1
14625: PPUSH
14626: CALL_OW 251
14630: PUSH
14631: LD_VAR 0 3
14635: PUSH
14636: LD_VAR 0 5
14640: PLUS
14641: GREATEREQUAL
14642: ST_TO_ADDR
// end ; 1 :
14643: GO 15073
14645: LD_INT 1
14647: DOUBLE
14648: EQUAL
14649: IFTRUE 14653
14651: GO 14748
14653: POP
// begin c = GetY ( un ) - y ;
14654: LD_ADDR_VAR 0 7
14658: PUSH
14659: LD_VAR 0 1
14663: PPUSH
14664: CALL_OW 251
14668: PUSH
14669: LD_VAR 0 3
14673: MINUS
14674: ST_TO_ADDR
// if c < 0 then
14675: LD_VAR 0 7
14679: PUSH
14680: LD_INT 0
14682: LESS
14683: IFFALSE 14699
// c = c - 1 ;
14685: LD_ADDR_VAR 0 7
14689: PUSH
14690: LD_VAR 0 7
14694: PUSH
14695: LD_INT 1
14697: MINUS
14698: ST_TO_ADDR
// x = x + ( c div 2 ) ;
14699: LD_ADDR_VAR 0 2
14703: PUSH
14704: LD_VAR 0 2
14708: PUSH
14709: LD_VAR 0 7
14713: PUSH
14714: LD_INT 2
14716: DIV
14717: PLUS
14718: ST_TO_ADDR
// result := GetX ( un ) <= x - dist ;
14719: LD_ADDR_VAR 0 6
14723: PUSH
14724: LD_VAR 0 1
14728: PPUSH
14729: CALL_OW 250
14733: PUSH
14734: LD_VAR 0 2
14738: PUSH
14739: LD_VAR 0 5
14743: MINUS
14744: LESSEQUAL
14745: ST_TO_ADDR
// end ; 2 :
14746: GO 15073
14748: LD_INT 2
14750: DOUBLE
14751: EQUAL
14752: IFTRUE 14756
14754: GO 14807
14756: POP
// begin result := GetX ( un ) + GetY ( un ) <= x + y - 2 * dist ;
14757: LD_ADDR_VAR 0 6
14761: PUSH
14762: LD_VAR 0 1
14766: PPUSH
14767: CALL_OW 250
14771: PUSH
14772: LD_VAR 0 1
14776: PPUSH
14777: CALL_OW 251
14781: PLUS
14782: PUSH
14783: LD_VAR 0 2
14787: PUSH
14788: LD_VAR 0 3
14792: PLUS
14793: PUSH
14794: LD_INT 2
14796: PUSH
14797: LD_VAR 0 5
14801: MUL
14802: MINUS
14803: LESSEQUAL
14804: ST_TO_ADDR
// end ; 3 :
14805: GO 15073
14807: LD_INT 3
14809: DOUBLE
14810: EQUAL
14811: IFTRUE 14815
14813: GO 14910
14815: POP
// begin c = GetX ( un ) - x ;
14816: LD_ADDR_VAR 0 7
14820: PUSH
14821: LD_VAR 0 1
14825: PPUSH
14826: CALL_OW 250
14830: PUSH
14831: LD_VAR 0 2
14835: MINUS
14836: ST_TO_ADDR
// if c < 0 then
14837: LD_VAR 0 7
14841: PUSH
14842: LD_INT 0
14844: LESS
14845: IFFALSE 14861
// c = c - 1 ;
14847: LD_ADDR_VAR 0 7
14851: PUSH
14852: LD_VAR 0 7
14856: PUSH
14857: LD_INT 1
14859: MINUS
14860: ST_TO_ADDR
// y = y + ( c div 2 ) ;
14861: LD_ADDR_VAR 0 3
14865: PUSH
14866: LD_VAR 0 3
14870: PUSH
14871: LD_VAR 0 7
14875: PUSH
14876: LD_INT 2
14878: DIV
14879: PLUS
14880: ST_TO_ADDR
// result := GetY ( un ) <= y - dist ;
14881: LD_ADDR_VAR 0 6
14885: PUSH
14886: LD_VAR 0 1
14890: PPUSH
14891: CALL_OW 251
14895: PUSH
14896: LD_VAR 0 3
14900: PUSH
14901: LD_VAR 0 5
14905: MINUS
14906: LESSEQUAL
14907: ST_TO_ADDR
// end ; 4 :
14908: GO 15073
14910: LD_INT 4
14912: DOUBLE
14913: EQUAL
14914: IFTRUE 14918
14916: GO 15013
14918: POP
// begin c = GetY ( un ) - y ;
14919: LD_ADDR_VAR 0 7
14923: PUSH
14924: LD_VAR 0 1
14928: PPUSH
14929: CALL_OW 251
14933: PUSH
14934: LD_VAR 0 3
14938: MINUS
14939: ST_TO_ADDR
// if c > 0 then
14940: LD_VAR 0 7
14944: PUSH
14945: LD_INT 0
14947: GREATER
14948: IFFALSE 14964
// c = c + 1 ;
14950: LD_ADDR_VAR 0 7
14954: PUSH
14955: LD_VAR 0 7
14959: PUSH
14960: LD_INT 1
14962: PLUS
14963: ST_TO_ADDR
// x = x + ( c div 2 ) ;
14964: LD_ADDR_VAR 0 2
14968: PUSH
14969: LD_VAR 0 2
14973: PUSH
14974: LD_VAR 0 7
14978: PUSH
14979: LD_INT 2
14981: DIV
14982: PLUS
14983: ST_TO_ADDR
// result := GetX ( un ) >= x + dist ;
14984: LD_ADDR_VAR 0 6
14988: PUSH
14989: LD_VAR 0 1
14993: PPUSH
14994: CALL_OW 250
14998: PUSH
14999: LD_VAR 0 2
15003: PUSH
15004: LD_VAR 0 5
15008: PLUS
15009: GREATEREQUAL
15010: ST_TO_ADDR
// end ; 5 :
15011: GO 15073
15013: LD_INT 5
15015: DOUBLE
15016: EQUAL
15017: IFTRUE 15021
15019: GO 15072
15021: POP
// begin result := GetX ( un ) + GetY ( un ) >= x + y + 2 * dist ;
15022: LD_ADDR_VAR 0 6
15026: PUSH
15027: LD_VAR 0 1
15031: PPUSH
15032: CALL_OW 250
15036: PUSH
15037: LD_VAR 0 1
15041: PPUSH
15042: CALL_OW 251
15046: PLUS
15047: PUSH
15048: LD_VAR 0 2
15052: PUSH
15053: LD_VAR 0 3
15057: PLUS
15058: PUSH
15059: LD_INT 2
15061: PUSH
15062: LD_VAR 0 5
15066: MUL
15067: PLUS
15068: GREATEREQUAL
15069: ST_TO_ADDR
// end ; end ;
15070: GO 15073
15072: POP
// end ;
15073: LD_VAR 0 6
15077: RET
// export function GetHexesNearHex ( x , y , dist ) ; var d , list_coords , b ; begin
15078: LD_INT 0
15080: PPUSH
15081: PPUSH
15082: PPUSH
15083: PPUSH
// result = [ [ x , y ] ] ;
15084: LD_ADDR_VAR 0 4
15088: PUSH
15089: LD_VAR 0 1
15093: PUSH
15094: LD_VAR 0 2
15098: PUSH
15099: EMPTY
15100: LIST
15101: LIST
15102: PUSH
15103: EMPTY
15104: LIST
15105: ST_TO_ADDR
// for d = 1 to dist do
15106: LD_ADDR_VAR 0 5
15110: PUSH
15111: DOUBLE
15112: LD_INT 1
15114: DEC
15115: ST_TO_ADDR
15116: LD_VAR 0 3
15120: PUSH
15121: FOR_TO
15122: IFFALSE 15717
// begin list_coords = [ ] ;
15124: LD_ADDR_VAR 0 6
15128: PUSH
15129: EMPTY
15130: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x , y - d ] ) ;
15131: LD_ADDR_VAR 0 6
15135: PUSH
15136: LD_VAR 0 6
15140: PPUSH
15141: LD_INT 1
15143: PPUSH
15144: LD_VAR 0 1
15148: PUSH
15149: LD_VAR 0 2
15153: PUSH
15154: LD_VAR 0 5
15158: MINUS
15159: PUSH
15160: EMPTY
15161: LIST
15162: LIST
15163: PPUSH
15164: CALL_OW 2
15168: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d , y ] ) ;
15169: LD_ADDR_VAR 0 6
15173: PUSH
15174: LD_VAR 0 6
15178: PPUSH
15179: LD_INT 1
15181: PPUSH
15182: LD_VAR 0 1
15186: PUSH
15187: LD_VAR 0 5
15191: PLUS
15192: PUSH
15193: LD_VAR 0 2
15197: PUSH
15198: EMPTY
15199: LIST
15200: LIST
15201: PPUSH
15202: CALL_OW 2
15206: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d , y + d ] ) ;
15207: LD_ADDR_VAR 0 6
15211: PUSH
15212: LD_VAR 0 6
15216: PPUSH
15217: LD_INT 1
15219: PPUSH
15220: LD_VAR 0 1
15224: PUSH
15225: LD_VAR 0 5
15229: PLUS
15230: PUSH
15231: LD_VAR 0 2
15235: PUSH
15236: LD_VAR 0 5
15240: PLUS
15241: PUSH
15242: EMPTY
15243: LIST
15244: LIST
15245: PPUSH
15246: CALL_OW 2
15250: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x , y + d ] ) ;
15251: LD_ADDR_VAR 0 6
15255: PUSH
15256: LD_VAR 0 6
15260: PPUSH
15261: LD_INT 1
15263: PPUSH
15264: LD_VAR 0 1
15268: PUSH
15269: LD_VAR 0 2
15273: PUSH
15274: LD_VAR 0 5
15278: PLUS
15279: PUSH
15280: EMPTY
15281: LIST
15282: LIST
15283: PPUSH
15284: CALL_OW 2
15288: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d , y ] ) ;
15289: LD_ADDR_VAR 0 6
15293: PUSH
15294: LD_VAR 0 6
15298: PPUSH
15299: LD_INT 1
15301: PPUSH
15302: LD_VAR 0 1
15306: PUSH
15307: LD_VAR 0 5
15311: MINUS
15312: PUSH
15313: LD_VAR 0 2
15317: PUSH
15318: EMPTY
15319: LIST
15320: LIST
15321: PPUSH
15322: CALL_OW 2
15326: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d , y - d ] ) ;
15327: LD_ADDR_VAR 0 6
15331: PUSH
15332: LD_VAR 0 6
15336: PPUSH
15337: LD_INT 1
15339: PPUSH
15340: LD_VAR 0 1
15344: PUSH
15345: LD_VAR 0 5
15349: MINUS
15350: PUSH
15351: LD_VAR 0 2
15355: PUSH
15356: LD_VAR 0 5
15360: MINUS
15361: PUSH
15362: EMPTY
15363: LIST
15364: LIST
15365: PPUSH
15366: CALL_OW 2
15370: ST_TO_ADDR
// b = 1 ;
15371: LD_ADDR_VAR 0 7
15375: PUSH
15376: LD_INT 1
15378: ST_TO_ADDR
// while b <= ( d - 1 ) do
15379: LD_VAR 0 7
15383: PUSH
15384: LD_VAR 0 5
15388: PUSH
15389: LD_INT 1
15391: MINUS
15392: LESSEQUAL
15393: IFFALSE 15699
// begin list_coords = Insert ( list_coords , 1 , [ x + b , y - d + b ] ) ;
15395: LD_ADDR_VAR 0 6
15399: PUSH
15400: LD_VAR 0 6
15404: PPUSH
15405: LD_INT 1
15407: PPUSH
15408: LD_VAR 0 1
15412: PUSH
15413: LD_VAR 0 7
15417: PLUS
15418: PUSH
15419: LD_VAR 0 2
15423: PUSH
15424: LD_VAR 0 5
15428: MINUS
15429: PUSH
15430: LD_VAR 0 7
15434: PLUS
15435: PUSH
15436: EMPTY
15437: LIST
15438: LIST
15439: PPUSH
15440: CALL_OW 2
15444: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d , y + b ] ) ;
15445: LD_ADDR_VAR 0 6
15449: PUSH
15450: LD_VAR 0 6
15454: PPUSH
15455: LD_INT 1
15457: PPUSH
15458: LD_VAR 0 1
15462: PUSH
15463: LD_VAR 0 5
15467: PLUS
15468: PUSH
15469: LD_VAR 0 2
15473: PUSH
15474: LD_VAR 0 7
15478: PLUS
15479: PUSH
15480: EMPTY
15481: LIST
15482: LIST
15483: PPUSH
15484: CALL_OW 2
15488: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d - b , y + d ] ) ;
15489: LD_ADDR_VAR 0 6
15493: PUSH
15494: LD_VAR 0 6
15498: PPUSH
15499: LD_INT 1
15501: PPUSH
15502: LD_VAR 0 1
15506: PUSH
15507: LD_VAR 0 5
15511: PLUS
15512: PUSH
15513: LD_VAR 0 7
15517: MINUS
15518: PUSH
15519: LD_VAR 0 2
15523: PUSH
15524: LD_VAR 0 5
15528: PLUS
15529: PUSH
15530: EMPTY
15531: LIST
15532: LIST
15533: PPUSH
15534: CALL_OW 2
15538: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - b , y + d - b ] ) ;
15539: LD_ADDR_VAR 0 6
15543: PUSH
15544: LD_VAR 0 6
15548: PPUSH
15549: LD_INT 1
15551: PPUSH
15552: LD_VAR 0 1
15556: PUSH
15557: LD_VAR 0 7
15561: MINUS
15562: PUSH
15563: LD_VAR 0 2
15567: PUSH
15568: LD_VAR 0 5
15572: PLUS
15573: PUSH
15574: LD_VAR 0 7
15578: MINUS
15579: PUSH
15580: EMPTY
15581: LIST
15582: LIST
15583: PPUSH
15584: CALL_OW 2
15588: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d , y - b ] ) ;
15589: LD_ADDR_VAR 0 6
15593: PUSH
15594: LD_VAR 0 6
15598: PPUSH
15599: LD_INT 1
15601: PPUSH
15602: LD_VAR 0 1
15606: PUSH
15607: LD_VAR 0 5
15611: MINUS
15612: PUSH
15613: LD_VAR 0 2
15617: PUSH
15618: LD_VAR 0 7
15622: MINUS
15623: PUSH
15624: EMPTY
15625: LIST
15626: LIST
15627: PPUSH
15628: CALL_OW 2
15632: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d + b , y - d ] ) ;
15633: LD_ADDR_VAR 0 6
15637: PUSH
15638: LD_VAR 0 6
15642: PPUSH
15643: LD_INT 1
15645: PPUSH
15646: LD_VAR 0 1
15650: PUSH
15651: LD_VAR 0 5
15655: MINUS
15656: PUSH
15657: LD_VAR 0 7
15661: PLUS
15662: PUSH
15663: LD_VAR 0 2
15667: PUSH
15668: LD_VAR 0 5
15672: MINUS
15673: PUSH
15674: EMPTY
15675: LIST
15676: LIST
15677: PPUSH
15678: CALL_OW 2
15682: ST_TO_ADDR
// b = b + 1 ;
15683: LD_ADDR_VAR 0 7
15687: PUSH
15688: LD_VAR 0 7
15692: PUSH
15693: LD_INT 1
15695: PLUS
15696: ST_TO_ADDR
// end ;
15697: GO 15379
// result = result ^ list_coords ;
15699: LD_ADDR_VAR 0 4
15703: PUSH
15704: LD_VAR 0 4
15708: PUSH
15709: LD_VAR 0 6
15713: ADD
15714: ST_TO_ADDR
// end ;
15715: GO 15121
15717: POP
15718: POP
// end ;
15719: LD_VAR 0 4
15723: RET
// export function RoundDouble ( d ) ; begin
15724: LD_INT 0
15726: PPUSH
// result = d div 1 ;
15727: LD_ADDR_VAR 0 2
15731: PUSH
15732: LD_VAR 0 1
15736: PUSH
15737: LD_INT 1
15739: DIV
15740: ST_TO_ADDR
// if d mod 1 >= 0.5 then
15741: LD_VAR 0 1
15745: PUSH
15746: LD_INT 1
15748: MOD
15749: PUSH
15750: LD_REAL  5.00000000000000E-0001
15753: GREATEREQUAL
15754: IFFALSE 15770
// result = result + 1 ;
15756: LD_ADDR_VAR 0 2
15760: PUSH
15761: LD_VAR 0 2
15765: PUSH
15766: LD_INT 1
15768: PLUS
15769: ST_TO_ADDR
// end ;
15770: LD_VAR 0 2
15774: RET
// export function Check2DArraysEqual ( list1 , list2 ) ; var a , b ; begin
15775: LD_INT 0
15777: PPUSH
15778: PPUSH
15779: PPUSH
// result = true ;
15780: LD_ADDR_VAR 0 3
15784: PUSH
15785: LD_INT 1
15787: ST_TO_ADDR
// if list1 + 0 <> list2 + 0 then
15788: LD_VAR 0 1
15792: PUSH
15793: LD_INT 0
15795: PLUS
15796: PUSH
15797: LD_VAR 0 2
15801: PUSH
15802: LD_INT 0
15804: PLUS
15805: NONEQUAL
15806: IFFALSE 15818
// begin result = false ;
15808: LD_ADDR_VAR 0 3
15812: PUSH
15813: LD_INT 0
15815: ST_TO_ADDR
// exit ;
15816: GO 15963
// end ; for a = 1 to list1 do
15818: LD_ADDR_VAR 0 4
15822: PUSH
15823: DOUBLE
15824: LD_INT 1
15826: DEC
15827: ST_TO_ADDR
15828: LD_VAR 0 1
15832: PUSH
15833: FOR_TO
15834: IFFALSE 15961
// begin if list1 [ a ] + 0 <> list2 [ a ] + 0 then
15836: LD_VAR 0 1
15840: PUSH
15841: LD_VAR 0 4
15845: ARRAY
15846: PUSH
15847: LD_INT 0
15849: PLUS
15850: PUSH
15851: LD_VAR 0 2
15855: PUSH
15856: LD_VAR 0 4
15860: ARRAY
15861: PUSH
15862: LD_INT 0
15864: PLUS
15865: NONEQUAL
15866: IFFALSE 15880
// begin result = false ;
15868: LD_ADDR_VAR 0 3
15872: PUSH
15873: LD_INT 0
15875: ST_TO_ADDR
// exit ;
15876: POP
15877: POP
15878: GO 15963
// end ; for b = 1 to list1 [ a ] do
15880: LD_ADDR_VAR 0 5
15884: PUSH
15885: DOUBLE
15886: LD_INT 1
15888: DEC
15889: ST_TO_ADDR
15890: LD_VAR 0 1
15894: PUSH
15895: LD_VAR 0 4
15899: ARRAY
15900: PUSH
15901: FOR_TO
15902: IFFALSE 15957
// if not list1 [ a ] [ b ] = list2 [ a ] [ b ] then
15904: LD_VAR 0 1
15908: PUSH
15909: LD_VAR 0 4
15913: ARRAY
15914: PUSH
15915: LD_VAR 0 5
15919: ARRAY
15920: PUSH
15921: LD_VAR 0 2
15925: PUSH
15926: LD_VAR 0 4
15930: ARRAY
15931: PUSH
15932: LD_VAR 0 5
15936: ARRAY
15937: EQUAL
15938: NOT
15939: IFFALSE 15955
// begin result = false ;
15941: LD_ADDR_VAR 0 3
15945: PUSH
15946: LD_INT 0
15948: ST_TO_ADDR
// exit ;
15949: POP
15950: POP
15951: POP
15952: POP
15953: GO 15963
// end ;
15955: GO 15901
15957: POP
15958: POP
// end ;
15959: GO 15833
15961: POP
15962: POP
// end ; end_of_file
15963: LD_VAR 0 3
15967: RET
// every 0 0$1.5 do var i , base , val ;
15968: GO 15970
15970: DISABLE
15971: LD_INT 0
15973: PPUSH
15974: PPUSH
15975: PPUSH
// begin for i = 1 to ai_depot do
15976: LD_ADDR_VAR 0 1
15980: PUSH
15981: DOUBLE
15982: LD_INT 1
15984: DEC
15985: ST_TO_ADDR
15986: LD_EXP 36
15990: PUSH
15991: FOR_TO
15992: IFFALSE 16102
// if IsOk ( ai_depot [ i ] ) and GetSide ( ai_depot [ i ] ) <> you then
15994: LD_EXP 36
15998: PUSH
15999: LD_VAR 0 1
16003: ARRAY
16004: PPUSH
16005: CALL_OW 302
16009: PUSH
16010: LD_EXP 36
16014: PUSH
16015: LD_VAR 0 1
16019: ARRAY
16020: PPUSH
16021: CALL_OW 255
16025: PUSH
16026: LD_EXP 2
16030: NONEQUAL
16031: AND
16032: IFFALSE 16100
// begin base = GetBase ( ai_depot [ i ] ) ;
16034: LD_ADDR_VAR 0 2
16038: PUSH
16039: LD_EXP 36
16043: PUSH
16044: LD_VAR 0 1
16048: ARRAY
16049: PPUSH
16050: CALL_OW 274
16054: ST_TO_ADDR
// SetResourceType ( base , mat_cans , 300 ) ;
16055: LD_VAR 0 2
16059: PPUSH
16060: LD_INT 1
16062: PPUSH
16063: LD_INT 300
16065: PPUSH
16066: CALL_OW 277
// SetResourceType ( base , mat_oil , 300 ) ;
16070: LD_VAR 0 2
16074: PPUSH
16075: LD_INT 2
16077: PPUSH
16078: LD_INT 300
16080: PPUSH
16081: CALL_OW 277
// SetResourceType ( base , mat_siberit , 300 ) ;
16085: LD_VAR 0 2
16089: PPUSH
16090: LD_INT 3
16092: PPUSH
16093: LD_INT 300
16095: PPUSH
16096: CALL_OW 277
// end ;
16100: GO 15991
16102: POP
16103: POP
// if IsOk ( leg_dep_smal ) and GetSide ( leg_dep_smal ) <> you then
16104: LD_INT 10
16106: PPUSH
16107: CALL_OW 302
16111: PUSH
16112: LD_INT 10
16114: PPUSH
16115: CALL_OW 255
16119: PUSH
16120: LD_EXP 2
16124: NONEQUAL
16125: AND
16126: IFFALSE 16186
// begin base = GetBase ( leg_dep_smal ) ;
16128: LD_ADDR_VAR 0 2
16132: PUSH
16133: LD_INT 10
16135: PPUSH
16136: CALL_OW 274
16140: ST_TO_ADDR
// SetResourceType ( base , mat_cans , 300 ) ;
16141: LD_VAR 0 2
16145: PPUSH
16146: LD_INT 1
16148: PPUSH
16149: LD_INT 300
16151: PPUSH
16152: CALL_OW 277
// SetResourceType ( base , mat_oil , 300 ) ;
16156: LD_VAR 0 2
16160: PPUSH
16161: LD_INT 2
16163: PPUSH
16164: LD_INT 300
16166: PPUSH
16167: CALL_OW 277
// SetResourceType ( base , mat_siberit , 300 ) ;
16171: LD_VAR 0 2
16175: PPUSH
16176: LD_INT 3
16178: PPUSH
16179: LD_INT 300
16181: PPUSH
16182: CALL_OW 277
// end ; enable ;
16186: ENABLE
// end ;
16187: PPOPN 3
16189: END
// on UnitDestroyed ( un ) do var side , temp_list , base , temp_value , i ;
16190: LD_INT 0
16192: PPUSH
16193: PPUSH
16194: PPUSH
16195: PPUSH
16196: PPUSH
// begin if un = Heike then
16197: LD_VAR 0 1
16201: PUSH
16202: LD_EXP 10
16206: EQUAL
16207: IFFALSE 16231
// begin ExclusiveOn ;
16209: CALL_OW 4
// Wait ( 0 0$1 ) ;
16213: LD_INT 35
16215: PPUSH
16216: CALL_OW 67
// YouLost ( HeikeDead ) ;
16220: LD_STRING HeikeDead
16222: PPUSH
16223: CALL_OW 104
// ExclusiveOff ;
16227: CALL_OW 5
// end ; if un = Makise then
16231: LD_VAR 0 1
16235: PUSH
16236: LD_EXP 21
16240: EQUAL
16241: IFFALSE 16265
// begin ExclusiveOn ;
16243: CALL_OW 4
// Wait ( 0 0$1 ) ;
16247: LD_INT 35
16249: PPUSH
16250: CALL_OW 67
// YouLost ( MakiseDead ) ;
16254: LD_STRING MakiseDead
16256: PPUSH
16257: CALL_OW 104
// ExclusiveOff ;
16261: CALL_OW 5
// end ; for base in ai_bases do
16265: LD_ADDR_VAR 0 4
16269: PUSH
16270: LD_EXP 26
16274: PUSH
16275: FOR_IN
16276: IFFALSE 16327
// begin temp_list = ai_captured_buildings [ base ] diff un ;
16278: LD_ADDR_VAR 0 3
16282: PUSH
16283: LD_EXP 49
16287: PUSH
16288: LD_VAR 0 4
16292: ARRAY
16293: PUSH
16294: LD_VAR 0 1
16298: DIFF
16299: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
16300: LD_ADDR_EXP 49
16304: PUSH
16305: LD_EXP 49
16309: PPUSH
16310: LD_VAR 0 4
16314: PPUSH
16315: LD_VAR 0 3
16319: PPUSH
16320: CALL_OW 1
16324: ST_TO_ADDR
// end ;
16325: GO 16275
16327: POP
16328: POP
// side = GetSide ( un ) ;
16329: LD_ADDR_VAR 0 2
16333: PUSH
16334: LD_VAR 0 1
16338: PPUSH
16339: CALL_OW 255
16343: ST_TO_ADDR
// if side = you then
16344: LD_VAR 0 2
16348: PUSH
16349: LD_EXP 2
16353: EQUAL
16354: IFFALSE 16358
// exit ;
16356: GO 16540
// if un = ai_cargo_bay [ 2 ] then
16358: LD_VAR 0 1
16362: PUSH
16363: LD_EXP 71
16367: PUSH
16368: LD_INT 2
16370: ARRAY
16371: EQUAL
16372: IFFALSE 16400
// if IsInArea ( ai_cargo_bay [ 2 ] , am_crate_area_unsafe ) then
16374: LD_EXP 71
16378: PUSH
16379: LD_INT 2
16381: ARRAY
16382: PPUSH
16383: LD_INT 10
16385: PPUSH
16386: CALL_OW 308
16390: IFFALSE 16400
// cargo_bay_destroyed_in_unsafe_area = true ;
16392: LD_ADDR_EXP 108
16396: PUSH
16397: LD_INT 1
16399: ST_TO_ADDR
// case GetType ( un ) of unit_human :
16400: LD_VAR 0 1
16404: PPUSH
16405: CALL_OW 247
16409: PUSH
16410: LD_INT 1
16412: DOUBLE
16413: EQUAL
16414: IFTRUE 16418
16416: GO 16455
16418: POP
// for base in ai_bases do
16419: LD_ADDR_VAR 0 4
16423: PUSH
16424: LD_EXP 26
16428: PUSH
16429: FOR_IN
16430: IFFALSE 16451
// RemoveHumanFromVariables ( base , un , true ) ; unit_vehicle :
16432: LD_VAR 0 4
16436: PPUSH
16437: LD_VAR 0 1
16441: PPUSH
16442: LD_INT 1
16444: PPUSH
16445: CALL 17900 0 3
16449: GO 16429
16451: POP
16452: POP
16453: GO 16540
16455: LD_INT 2
16457: DOUBLE
16458: EQUAL
16459: IFTRUE 16463
16461: GO 16497
16463: POP
// for base in ai_bases do
16464: LD_ADDR_VAR 0 4
16468: PUSH
16469: LD_EXP 26
16473: PUSH
16474: FOR_IN
16475: IFFALSE 16493
// RemoveVehicleFromVariables ( base , un ) ; unit_building :
16477: LD_VAR 0 4
16481: PPUSH
16482: LD_VAR 0 1
16486: PPUSH
16487: CALL 16916 0 2
16491: GO 16474
16493: POP
16494: POP
16495: GO 16540
16497: LD_INT 3
16499: DOUBLE
16500: EQUAL
16501: IFTRUE 16505
16503: GO 16539
16505: POP
// for base in ai_bases do
16506: LD_ADDR_VAR 0 4
16510: PUSH
16511: LD_EXP 26
16515: PUSH
16516: FOR_IN
16517: IFFALSE 16535
// RemoveBuildingFromVariables ( base , un ) ; end ;
16519: LD_VAR 0 4
16523: PPUSH
16524: LD_VAR 0 1
16528: PPUSH
16529: CALL 16667 0 2
16533: GO 16516
16535: POP
16536: POP
16537: GO 16540
16539: POP
// end ;
16540: PPOPN 6
16542: END
// every 0 0$0.5 do var base , i ;
16543: GO 16545
16545: DISABLE
16546: LD_INT 0
16548: PPUSH
16549: PPUSH
// begin for base in ai_bases do
16550: LD_ADDR_VAR 0 1
16554: PUSH
16555: LD_EXP 26
16559: PUSH
16560: FOR_IN
16561: IFFALSE 16661
// begin for i in ai_implosion_vehicles [ base ] do
16563: LD_ADDR_VAR 0 2
16567: PUSH
16568: LD_EXP 87
16572: PUSH
16573: LD_VAR 0 1
16577: ARRAY
16578: PUSH
16579: FOR_IN
16580: IFFALSE 16609
// if IsDead ( i ) then
16582: LD_VAR 0 2
16586: PPUSH
16587: CALL_OW 301
16591: IFFALSE 16607
// RemoveVehicleFromVariables ( base , i ) ;
16593: LD_VAR 0 1
16597: PPUSH
16598: LD_VAR 0 2
16602: PPUSH
16603: CALL 16916 0 2
16607: GO 16579
16609: POP
16610: POP
// for i in ai_vehicles_attack [ base ] do
16611: LD_ADDR_VAR 0 2
16615: PUSH
16616: LD_EXP 54
16620: PUSH
16621: LD_VAR 0 1
16625: ARRAY
16626: PUSH
16627: FOR_IN
16628: IFFALSE 16657
// if IsDead ( i ) then
16630: LD_VAR 0 2
16634: PPUSH
16635: CALL_OW 301
16639: IFFALSE 16655
// RemoveVehicleFromVariables ( base , i ) ;
16641: LD_VAR 0 1
16645: PPUSH
16646: LD_VAR 0 2
16650: PPUSH
16651: CALL 16916 0 2
16655: GO 16627
16657: POP
16658: POP
// end ;
16659: GO 16560
16661: POP
16662: POP
// enable ;
16663: ENABLE
// end ;
16664: PPOPN 2
16666: END
// export function RemoveBuildingFromVariables ( base , building ) ; var temp_list ; begin
16667: LD_INT 0
16669: PPUSH
16670: PPUSH
// temp_list = ai_all_buildings [ base ] diff building ;
16671: LD_ADDR_VAR 0 4
16675: PUSH
16676: LD_EXP 62
16680: PUSH
16681: LD_VAR 0 1
16685: ARRAY
16686: PUSH
16687: LD_VAR 0 2
16691: DIFF
16692: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
16693: LD_ADDR_EXP 62
16697: PUSH
16698: LD_EXP 62
16702: PPUSH
16703: LD_VAR 0 1
16707: PPUSH
16708: LD_VAR 0 4
16712: PPUSH
16713: CALL_OW 1
16717: ST_TO_ADDR
// temp_list = ai_excepted_buildings [ base ] diff building ;
16718: LD_ADDR_VAR 0 4
16722: PUSH
16723: LD_EXP 83
16727: PUSH
16728: LD_VAR 0 1
16732: ARRAY
16733: PUSH
16734: LD_VAR 0 2
16738: DIFF
16739: ST_TO_ADDR
// ai_excepted_buildings = Replace ( ai_excepted_buildings , base , temp_list ) ;
16740: LD_ADDR_EXP 83
16744: PUSH
16745: LD_EXP 83
16749: PPUSH
16750: LD_VAR 0 1
16754: PPUSH
16755: LD_VAR 0 4
16759: PPUSH
16760: CALL_OW 1
16764: ST_TO_ADDR
// temp_list = ai_dismantle_these_buildings [ base ] diff building ;
16765: LD_ADDR_VAR 0 4
16769: PUSH
16770: LD_EXP 85
16774: PUSH
16775: LD_VAR 0 1
16779: ARRAY
16780: PUSH
16781: LD_VAR 0 2
16785: DIFF
16786: ST_TO_ADDR
// ai_dismantle_these_buildings = Replace ( ai_dismantle_these_buildings , base , temp_list ) ;
16787: LD_ADDR_EXP 85
16791: PUSH
16792: LD_EXP 85
16796: PPUSH
16797: LD_VAR 0 1
16801: PPUSH
16802: LD_VAR 0 4
16806: PPUSH
16807: CALL_OW 1
16811: ST_TO_ADDR
// if building = ai_building_under_construction [ base ] then
16812: LD_VAR 0 2
16816: PUSH
16817: LD_EXP 60
16821: PUSH
16822: LD_VAR 0 1
16826: ARRAY
16827: EQUAL
16828: IFFALSE 16853
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
16830: LD_ADDR_EXP 60
16834: PUSH
16835: LD_EXP 60
16839: PPUSH
16840: LD_VAR 0 1
16844: PPUSH
16845: LD_INT 0
16847: PPUSH
16848: CALL_OW 1
16852: ST_TO_ADDR
// if building = ai_sib_bomb_fact [ base ] then
16853: LD_VAR 0 2
16857: PUSH
16858: LD_EXP 50
16862: PUSH
16863: LD_VAR 0 1
16867: ARRAY
16868: EQUAL
16869: IFFALSE 16894
// ai_sib_bomb_fact = Replace ( ai_sib_bomb_fact , base , 0 ) ;
16871: LD_ADDR_EXP 50
16875: PUSH
16876: LD_EXP 50
16880: PPUSH
16881: LD_VAR 0 1
16885: PPUSH
16886: LD_INT 0
16888: PPUSH
16889: CALL_OW 1
16893: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , false ) ;
16894: LD_VAR 0 1
16898: PPUSH
16899: LD_VAR 0 2
16903: PPUSH
16904: LD_INT 0
16906: PPUSH
16907: CALL 6500 0 3
// end ;
16911: LD_VAR 0 3
16915: RET
// function RemoveVehicleFromVariables ( base , vehicle ) ; var temp_list ; begin
16916: LD_INT 0
16918: PPUSH
16919: PPUSH
// if vehicle in ai_vehicles_defend [ base ] then
16920: LD_VAR 0 2
16924: PUSH
16925: LD_EXP 53
16929: PUSH
16930: LD_VAR 0 1
16934: ARRAY
16935: IN
16936: IFFALSE 16985
// begin temp_list = ai_vehicles_defend [ base ] diff vehicle ;
16938: LD_ADDR_VAR 0 4
16942: PUSH
16943: LD_EXP 53
16947: PUSH
16948: LD_VAR 0 1
16952: ARRAY
16953: PUSH
16954: LD_VAR 0 2
16958: DIFF
16959: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
16960: LD_ADDR_EXP 53
16964: PUSH
16965: LD_EXP 53
16969: PPUSH
16970: LD_VAR 0 1
16974: PPUSH
16975: LD_VAR 0 4
16979: PPUSH
16980: CALL_OW 1
16984: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_attack [ base ] then
16985: LD_VAR 0 2
16989: PUSH
16990: LD_EXP 54
16994: PUSH
16995: LD_VAR 0 1
16999: ARRAY
17000: IN
17001: IFFALSE 17050
// begin temp_list = ai_vehicles_attack [ base ] diff vehicle ;
17003: LD_ADDR_VAR 0 4
17007: PUSH
17008: LD_EXP 54
17012: PUSH
17013: LD_VAR 0 1
17017: ARRAY
17018: PUSH
17019: LD_VAR 0 2
17023: DIFF
17024: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
17025: LD_ADDR_EXP 54
17029: PUSH
17030: LD_EXP 54
17034: PPUSH
17035: LD_VAR 0 1
17039: PPUSH
17040: LD_VAR 0 4
17044: PPUSH
17045: CALL_OW 1
17049: ST_TO_ADDR
// end ; if vehicle in ai_taufield_vehicles [ base ] then
17050: LD_VAR 0 2
17054: PUSH
17055: LD_EXP 86
17059: PUSH
17060: LD_VAR 0 1
17064: ARRAY
17065: IN
17066: IFFALSE 17115
// begin temp_list = ai_taufield_vehicles [ base ] diff vehicle ;
17068: LD_ADDR_VAR 0 4
17072: PUSH
17073: LD_EXP 86
17077: PUSH
17078: LD_VAR 0 1
17082: ARRAY
17083: PUSH
17084: LD_VAR 0 2
17088: DIFF
17089: ST_TO_ADDR
// ai_taufield_vehicles = Replace ( ai_taufield_vehicles , base , temp_list ) ;
17090: LD_ADDR_EXP 86
17094: PUSH
17095: LD_EXP 86
17099: PPUSH
17100: LD_VAR 0 1
17104: PPUSH
17105: LD_VAR 0 4
17109: PPUSH
17110: CALL_OW 1
17114: ST_TO_ADDR
// end ; if vehicle in ai_implosion_vehicles [ base ] then
17115: LD_VAR 0 2
17119: PUSH
17120: LD_EXP 87
17124: PUSH
17125: LD_VAR 0 1
17129: ARRAY
17130: IN
17131: IFFALSE 17180
// begin temp_list = ai_implosion_vehicles [ base ] diff vehicle ;
17133: LD_ADDR_VAR 0 4
17137: PUSH
17138: LD_EXP 87
17142: PUSH
17143: LD_VAR 0 1
17147: ARRAY
17148: PUSH
17149: LD_VAR 0 2
17153: DIFF
17154: ST_TO_ADDR
// ai_implosion_vehicles = Replace ( ai_implosion_vehicles , base , temp_list ) ;
17155: LD_ADDR_EXP 87
17159: PUSH
17160: LD_EXP 87
17164: PPUSH
17165: LD_VAR 0 1
17169: PPUSH
17170: LD_VAR 0 4
17174: PPUSH
17175: CALL_OW 1
17179: ST_TO_ADDR
// end ; if vehicle in ai_control_tower_vehicles [ base ] then
17180: LD_VAR 0 2
17184: PUSH
17185: LD_EXP 81
17189: PUSH
17190: LD_VAR 0 1
17194: ARRAY
17195: IN
17196: IFFALSE 17245
// begin temp_list = ai_control_tower_vehicles [ base ] diff vehicle ;
17198: LD_ADDR_VAR 0 4
17202: PUSH
17203: LD_EXP 81
17207: PUSH
17208: LD_VAR 0 1
17212: ARRAY
17213: PUSH
17214: LD_VAR 0 2
17218: DIFF
17219: ST_TO_ADDR
// ai_control_tower_vehicles = Replace ( ai_control_tower_vehicles , base , temp_list ) ;
17220: LD_ADDR_EXP 81
17224: PUSH
17225: LD_EXP 81
17229: PPUSH
17230: LD_VAR 0 1
17234: PPUSH
17235: LD_VAR 0 4
17239: PPUSH
17240: CALL_OW 1
17244: ST_TO_ADDR
// end ; if vehicle = ai_cargo_bay [ base ] then
17245: LD_VAR 0 2
17249: PUSH
17250: LD_EXP 71
17254: PUSH
17255: LD_VAR 0 1
17259: ARRAY
17260: EQUAL
17261: IFFALSE 17311
// begin ai_cargo_bay = Replace ( ai_cargo_bay , base , 0 ) ;
17263: LD_ADDR_EXP 71
17267: PUSH
17268: LD_EXP 71
17272: PPUSH
17273: LD_VAR 0 1
17277: PPUSH
17278: LD_INT 0
17280: PPUSH
17281: CALL_OW 1
17285: ST_TO_ADDR
// ai_cargo_bay_destroy_tick = Replace ( ai_cargo_bay_destroy_tick , base , tick ) ;
17286: LD_ADDR_EXP 73
17290: PUSH
17291: LD_EXP 73
17295: PPUSH
17296: LD_VAR 0 1
17300: PPUSH
17301: LD_OWVAR 1
17305: PPUSH
17306: CALL_OW 1
17310: ST_TO_ADDR
// end ; if vehicle = ai_crane [ base ] then
17311: LD_VAR 0 2
17315: PUSH
17316: LD_EXP 74
17320: PUSH
17321: LD_VAR 0 1
17325: ARRAY
17326: EQUAL
17327: IFFALSE 17464
// begin ai_crane = Replace ( ai_crane , base , 0 ) ;
17329: LD_ADDR_EXP 74
17333: PUSH
17334: LD_EXP 74
17338: PPUSH
17339: LD_VAR 0 1
17343: PPUSH
17344: LD_INT 0
17346: PPUSH
17347: CALL_OW 1
17351: ST_TO_ADDR
// ai_crane_destroy_tick = Replace ( ai_crane_destroy_tick , base , tick ) ;
17352: LD_ADDR_EXP 76
17356: PUSH
17357: LD_EXP 76
17361: PPUSH
17362: LD_VAR 0 1
17366: PPUSH
17367: LD_OWVAR 1
17371: PPUSH
17372: CALL_OW 1
17376: ST_TO_ADDR
// ai_crane_driver = Replace ( ai_crane_driver , base , 0 ) ;
17377: LD_ADDR_EXP 78
17381: PUSH
17382: LD_EXP 78
17386: PPUSH
17387: LD_VAR 0 1
17391: PPUSH
17392: LD_INT 0
17394: PPUSH
17395: CALL_OW 1
17399: ST_TO_ADDR
// ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , false ) ;
17400: LD_ADDR_EXP 77
17404: PUSH
17405: LD_EXP 77
17409: PPUSH
17410: LD_VAR 0 1
17414: PPUSH
17415: LD_INT 0
17417: PPUSH
17418: CALL_OW 1
17422: ST_TO_ADDR
// if vehicle = ai_building_constructor [ base ] then
17423: LD_VAR 0 2
17427: PUSH
17428: LD_EXP 63
17432: PUSH
17433: LD_VAR 0 1
17437: ARRAY
17438: EQUAL
17439: IFFALSE 17464
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
17441: LD_ADDR_EXP 63
17445: PUSH
17446: LD_EXP 63
17450: PPUSH
17451: LD_VAR 0 1
17455: PPUSH
17456: LD_INT 0
17458: PPUSH
17459: CALL_OW 1
17463: ST_TO_ADDR
// end ; if vehicle in ai_sib_bomb_vehicles [ base ] then
17464: LD_VAR 0 2
17468: PUSH
17469: LD_EXP 93
17473: PUSH
17474: LD_VAR 0 1
17478: ARRAY
17479: IN
17480: IFFALSE 17529
// begin temp_list = ai_sib_bomb_vehicles [ base ] diff vehicle ;
17482: LD_ADDR_VAR 0 4
17486: PUSH
17487: LD_EXP 93
17491: PUSH
17492: LD_VAR 0 1
17496: ARRAY
17497: PUSH
17498: LD_VAR 0 2
17502: DIFF
17503: ST_TO_ADDR
// ai_sib_bomb_vehicles = Replace ( ai_sib_bomb_vehicles , base , temp_list ) ;
17504: LD_ADDR_EXP 93
17508: PUSH
17509: LD_EXP 93
17513: PPUSH
17514: LD_VAR 0 1
17518: PPUSH
17519: LD_VAR 0 4
17523: PPUSH
17524: CALL_OW 1
17528: ST_TO_ADDR
// end ; if vehicle in ai_behemoths [ base ] then
17529: LD_VAR 0 2
17533: PUSH
17534: LD_EXP 89
17538: PUSH
17539: LD_VAR 0 1
17543: ARRAY
17544: IN
17545: IFFALSE 17594
// begin temp_list = ai_behemoths [ base ] diff vehicle ;
17547: LD_ADDR_VAR 0 4
17551: PUSH
17552: LD_EXP 89
17556: PUSH
17557: LD_VAR 0 1
17561: ARRAY
17562: PUSH
17563: LD_VAR 0 2
17567: DIFF
17568: ST_TO_ADDR
// ai_behemoths = Replace ( ai_behemoths , base , temp_list ) ;
17569: LD_ADDR_EXP 89
17573: PUSH
17574: LD_EXP 89
17578: PPUSH
17579: LD_VAR 0 1
17583: PPUSH
17584: LD_VAR 0 4
17588: PPUSH
17589: CALL_OW 1
17593: ST_TO_ADDR
// end ; if vehicle in ai_retreating_vehicles_defend [ base ] then
17594: LD_VAR 0 2
17598: PUSH
17599: LD_EXP 55
17603: PUSH
17604: LD_VAR 0 1
17608: ARRAY
17609: IN
17610: IFFALSE 17659
// begin temp_list = ai_retreating_vehicles_defend [ base ] diff vehicle ;
17612: LD_ADDR_VAR 0 4
17616: PUSH
17617: LD_EXP 55
17621: PUSH
17622: LD_VAR 0 1
17626: ARRAY
17627: PUSH
17628: LD_VAR 0 2
17632: DIFF
17633: ST_TO_ADDR
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
17634: LD_ADDR_EXP 55
17638: PUSH
17639: LD_EXP 55
17643: PPUSH
17644: LD_VAR 0 1
17648: PPUSH
17649: LD_VAR 0 4
17653: PPUSH
17654: CALL_OW 1
17658: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_being_repaired [ base ] then
17659: LD_VAR 0 2
17663: PUSH
17664: LD_EXP 56
17668: PUSH
17669: LD_VAR 0 1
17673: ARRAY
17674: IN
17675: IFFALSE 17724
// begin temp_list = ai_vehicles_being_repaired [ base ] diff vehicle ;
17677: LD_ADDR_VAR 0 4
17681: PUSH
17682: LD_EXP 56
17686: PUSH
17687: LD_VAR 0 1
17691: ARRAY
17692: PUSH
17693: LD_VAR 0 2
17697: DIFF
17698: ST_TO_ADDR
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
17699: LD_ADDR_EXP 56
17703: PUSH
17704: LD_EXP 56
17708: PPUSH
17709: LD_VAR 0 1
17713: PPUSH
17714: LD_VAR 0 4
17718: PPUSH
17719: CALL_OW 1
17723: ST_TO_ADDR
// end ; if vehicle in ai_refuel_vehicles_list [ base ] then
17724: LD_VAR 0 2
17728: PUSH
17729: LD_EXP 57
17733: PUSH
17734: LD_VAR 0 1
17738: ARRAY
17739: IN
17740: IFFALSE 17789
// begin temp_list = ai_refuel_vehicles_list [ base ] diff vehicle ;
17742: LD_ADDR_VAR 0 4
17746: PUSH
17747: LD_EXP 57
17751: PUSH
17752: LD_VAR 0 1
17756: ARRAY
17757: PUSH
17758: LD_VAR 0 2
17762: DIFF
17763: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
17764: LD_ADDR_EXP 57
17768: PUSH
17769: LD_EXP 57
17773: PPUSH
17774: LD_VAR 0 1
17778: PPUSH
17779: LD_VAR 0 4
17783: PPUSH
17784: CALL_OW 1
17788: ST_TO_ADDR
// end ; if vehicle = ai_vehicle_being_moved [ base ] then
17789: LD_VAR 0 2
17793: PUSH
17794: LD_EXP 64
17798: PUSH
17799: LD_VAR 0 1
17803: ARRAY
17804: EQUAL
17805: IFFALSE 17830
// ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
17807: LD_ADDR_EXP 64
17811: PUSH
17812: LD_EXP 64
17816: PPUSH
17817: LD_VAR 0 1
17821: PPUSH
17822: LD_INT 0
17824: PPUSH
17825: CALL_OW 1
17829: ST_TO_ADDR
// if vehicle in ai_vehicles_having_been_moved [ base ] then
17830: LD_VAR 0 2
17834: PUSH
17835: LD_EXP 65
17839: PUSH
17840: LD_VAR 0 1
17844: ARRAY
17845: IN
17846: IFFALSE 17895
// begin temp_list = ai_vehicles_having_been_moved [ base ] diff vehicle ;
17848: LD_ADDR_VAR 0 4
17852: PUSH
17853: LD_EXP 65
17857: PUSH
17858: LD_VAR 0 1
17862: ARRAY
17863: PUSH
17864: LD_VAR 0 2
17868: DIFF
17869: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , temp_list ) ;
17870: LD_ADDR_EXP 65
17874: PUSH
17875: LD_EXP 65
17879: PPUSH
17880: LD_VAR 0 1
17884: PPUSH
17885: LD_VAR 0 4
17889: PPUSH
17890: CALL_OW 1
17894: ST_TO_ADDR
// end ; end ;
17895: LD_VAR 0 3
17899: RET
// export function RemoveHumanFromVariables ( base , human , check_if_base_is_dead ) ; var temp_list , i ; begin
17900: LD_INT 0
17902: PPUSH
17903: PPUSH
17904: PPUSH
// if human in ai_soldiers [ base ] then
17905: LD_VAR 0 2
17909: PUSH
17910: LD_EXP 27
17914: PUSH
17915: LD_VAR 0 1
17919: ARRAY
17920: IN
17921: IFFALSE 17970
// begin temp_list = ai_soldiers [ base ] diff human ;
17923: LD_ADDR_VAR 0 5
17927: PUSH
17928: LD_EXP 27
17932: PUSH
17933: LD_VAR 0 1
17937: ARRAY
17938: PUSH
17939: LD_VAR 0 2
17943: DIFF
17944: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
17945: LD_ADDR_EXP 27
17949: PUSH
17950: LD_EXP 27
17954: PPUSH
17955: LD_VAR 0 1
17959: PPUSH
17960: LD_VAR 0 5
17964: PPUSH
17965: CALL_OW 1
17969: ST_TO_ADDR
// end ; if human in ai_attacking_soldiers [ base ] then
17970: LD_VAR 0 2
17974: PUSH
17975: LD_EXP 28
17979: PUSH
17980: LD_VAR 0 1
17984: ARRAY
17985: IN
17986: IFFALSE 18035
// begin temp_list = ai_attacking_soldiers [ base ] diff human ;
17988: LD_ADDR_VAR 0 5
17992: PUSH
17993: LD_EXP 28
17997: PUSH
17998: LD_VAR 0 1
18002: ARRAY
18003: PUSH
18004: LD_VAR 0 2
18008: DIFF
18009: ST_TO_ADDR
// ai_attacking_soldiers = Replace ( ai_attacking_soldiers , base , temp_list ) ;
18010: LD_ADDR_EXP 28
18014: PUSH
18015: LD_EXP 28
18019: PPUSH
18020: LD_VAR 0 1
18024: PPUSH
18025: LD_VAR 0 5
18029: PPUSH
18030: CALL_OW 1
18034: ST_TO_ADDR
// end ; if human in ai_engineers [ base ] then
18035: LD_VAR 0 2
18039: PUSH
18040: LD_EXP 29
18044: PUSH
18045: LD_VAR 0 1
18049: ARRAY
18050: IN
18051: IFFALSE 18100
// begin temp_list = ai_engineers [ base ] diff human ;
18053: LD_ADDR_VAR 0 5
18057: PUSH
18058: LD_EXP 29
18062: PUSH
18063: LD_VAR 0 1
18067: ARRAY
18068: PUSH
18069: LD_VAR 0 2
18073: DIFF
18074: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , base , temp_list ) ;
18075: LD_ADDR_EXP 29
18079: PUSH
18080: LD_EXP 29
18084: PPUSH
18085: LD_VAR 0 1
18089: PPUSH
18090: LD_VAR 0 5
18094: PPUSH
18095: CALL_OW 1
18099: ST_TO_ADDR
// end ; if human in ai_apemen_engineers [ base ] then
18100: LD_VAR 0 2
18104: PUSH
18105: LD_EXP 34
18109: PUSH
18110: LD_VAR 0 1
18114: ARRAY
18115: IN
18116: IFFALSE 18165
// begin temp_list = ai_apemen_engineers [ base ] diff human ;
18118: LD_ADDR_VAR 0 5
18122: PUSH
18123: LD_EXP 34
18127: PUSH
18128: LD_VAR 0 1
18132: ARRAY
18133: PUSH
18134: LD_VAR 0 2
18138: DIFF
18139: ST_TO_ADDR
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , temp_list ) ;
18140: LD_ADDR_EXP 34
18144: PUSH
18145: LD_EXP 34
18149: PPUSH
18150: LD_VAR 0 1
18154: PPUSH
18155: LD_VAR 0 5
18159: PPUSH
18160: CALL_OW 1
18164: ST_TO_ADDR
// end ; if human in ai_mechanics_defend [ base ] then
18165: LD_VAR 0 2
18169: PUSH
18170: LD_EXP 30
18174: PUSH
18175: LD_VAR 0 1
18179: ARRAY
18180: IN
18181: IFFALSE 18230
// begin temp_list = ai_mechanics_defend [ base ] diff human ;
18183: LD_ADDR_VAR 0 5
18187: PUSH
18188: LD_EXP 30
18192: PUSH
18193: LD_VAR 0 1
18197: ARRAY
18198: PUSH
18199: LD_VAR 0 2
18203: DIFF
18204: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , temp_list ) ;
18205: LD_ADDR_EXP 30
18209: PUSH
18210: LD_EXP 30
18214: PPUSH
18215: LD_VAR 0 1
18219: PPUSH
18220: LD_VAR 0 5
18224: PPUSH
18225: CALL_OW 1
18229: ST_TO_ADDR
// end ; if human in ai_mechanics_attack [ base ] then
18230: LD_VAR 0 2
18234: PUSH
18235: LD_EXP 31
18239: PUSH
18240: LD_VAR 0 1
18244: ARRAY
18245: IN
18246: IFFALSE 18295
// begin temp_list = ai_mechanics_attack [ base ] diff human ;
18248: LD_ADDR_VAR 0 5
18252: PUSH
18253: LD_EXP 31
18257: PUSH
18258: LD_VAR 0 1
18262: ARRAY
18263: PUSH
18264: LD_VAR 0 2
18268: DIFF
18269: ST_TO_ADDR
// ai_mechanics_attack = Replace ( ai_mechanics_attack , base , temp_list ) ;
18270: LD_ADDR_EXP 31
18274: PUSH
18275: LD_EXP 31
18279: PPUSH
18280: LD_VAR 0 1
18284: PPUSH
18285: LD_VAR 0 5
18289: PPUSH
18290: CALL_OW 1
18294: ST_TO_ADDR
// end ; if human in ai_sib_bomb_mechanics [ base ] then
18295: LD_VAR 0 2
18299: PUSH
18300: LD_EXP 52
18304: PUSH
18305: LD_VAR 0 1
18309: ARRAY
18310: IN
18311: IFFALSE 18360
// begin temp_list = ai_sib_bomb_mechanics [ base ] diff human ;
18313: LD_ADDR_VAR 0 5
18317: PUSH
18318: LD_EXP 52
18322: PUSH
18323: LD_VAR 0 1
18327: ARRAY
18328: PUSH
18329: LD_VAR 0 2
18333: DIFF
18334: ST_TO_ADDR
// ai_sib_bomb_mechanics = Replace ( ai_sib_bomb_mechanics , base , temp_list ) ;
18335: LD_ADDR_EXP 52
18339: PUSH
18340: LD_EXP 52
18344: PPUSH
18345: LD_VAR 0 1
18349: PPUSH
18350: LD_VAR 0 5
18354: PPUSH
18355: CALL_OW 1
18359: ST_TO_ADDR
// end ; if human in ai_scientists [ base ] then
18360: LD_VAR 0 2
18364: PUSH
18365: LD_EXP 32
18369: PUSH
18370: LD_VAR 0 1
18374: ARRAY
18375: IN
18376: IFFALSE 18425
// begin temp_list = ai_scientists [ base ] diff human ;
18378: LD_ADDR_VAR 0 5
18382: PUSH
18383: LD_EXP 32
18387: PUSH
18388: LD_VAR 0 1
18392: ARRAY
18393: PUSH
18394: LD_VAR 0 2
18398: DIFF
18399: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , temp_list ) ;
18400: LD_ADDR_EXP 32
18404: PUSH
18405: LD_EXP 32
18409: PPUSH
18410: LD_VAR 0 1
18414: PPUSH
18415: LD_VAR 0 5
18419: PPUSH
18420: CALL_OW 1
18424: ST_TO_ADDR
// end ; if human in ai_attacking_scientists [ base ] then
18425: LD_VAR 0 2
18429: PUSH
18430: LD_EXP 33
18434: PUSH
18435: LD_VAR 0 1
18439: ARRAY
18440: IN
18441: IFFALSE 18490
// begin temp_list = ai_attacking_scientists [ base ] diff human ;
18443: LD_ADDR_VAR 0 5
18447: PUSH
18448: LD_EXP 33
18452: PUSH
18453: LD_VAR 0 1
18457: ARRAY
18458: PUSH
18459: LD_VAR 0 2
18463: DIFF
18464: ST_TO_ADDR
// ai_attacking_scientists = Replace ( ai_attacking_scientists , base , temp_list ) ;
18465: LD_ADDR_EXP 33
18469: PUSH
18470: LD_EXP 33
18474: PPUSH
18475: LD_VAR 0 1
18479: PPUSH
18480: LD_VAR 0 5
18484: PPUSH
18485: CALL_OW 1
18489: ST_TO_ADDR
// end ; if human in ai_heal_these_humans [ base ] then
18490: LD_VAR 0 2
18494: PUSH
18495: LD_EXP 61
18499: PUSH
18500: LD_VAR 0 1
18504: ARRAY
18505: IN
18506: IFFALSE 18555
// begin temp_list = ai_heal_these_humans [ base ] diff human ;
18508: LD_ADDR_VAR 0 5
18512: PUSH
18513: LD_EXP 61
18517: PUSH
18518: LD_VAR 0 1
18522: ARRAY
18523: PUSH
18524: LD_VAR 0 2
18528: DIFF
18529: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
18530: LD_ADDR_EXP 61
18534: PUSH
18535: LD_EXP 61
18539: PPUSH
18540: LD_VAR 0 1
18544: PPUSH
18545: LD_VAR 0 5
18549: PPUSH
18550: CALL_OW 1
18554: ST_TO_ADDR
// end ; if human = ai_building_constructor [ base ] then
18555: LD_VAR 0 2
18559: PUSH
18560: LD_EXP 63
18564: PUSH
18565: LD_VAR 0 1
18569: ARRAY
18570: EQUAL
18571: IFFALSE 18596
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
18573: LD_ADDR_EXP 63
18577: PUSH
18578: LD_EXP 63
18582: PPUSH
18583: LD_VAR 0 1
18587: PPUSH
18588: LD_INT 0
18590: PPUSH
18591: CALL_OW 1
18595: ST_TO_ADDR
// if human in ai_retreating_attacking_humans [ base ] then
18596: LD_VAR 0 2
18600: PUSH
18601: LD_EXP 80
18605: PUSH
18606: LD_VAR 0 1
18610: ARRAY
18611: IN
18612: IFFALSE 18661
// begin temp_list = ai_retreating_attacking_humans [ base ] diff human ;
18614: LD_ADDR_VAR 0 5
18618: PUSH
18619: LD_EXP 80
18623: PUSH
18624: LD_VAR 0 1
18628: ARRAY
18629: PUSH
18630: LD_VAR 0 2
18634: DIFF
18635: ST_TO_ADDR
// ai_retreating_attacking_humans = Replace ( ai_retreating_attacking_humans , base , temp_list ) ;
18636: LD_ADDR_EXP 80
18640: PUSH
18641: LD_EXP 80
18645: PPUSH
18646: LD_VAR 0 1
18650: PPUSH
18651: LD_VAR 0 5
18655: PPUSH
18656: CALL_OW 1
18660: ST_TO_ADDR
// end ; if human = ai_crane_driver [ base ] then
18661: LD_VAR 0 2
18665: PUSH
18666: LD_EXP 78
18670: PUSH
18671: LD_VAR 0 1
18675: ARRAY
18676: EQUAL
18677: IFFALSE 18702
// ai_crane_driver = Replace ( ai_crane_driver , base , 0 ) ;
18679: LD_ADDR_EXP 78
18683: PUSH
18684: LD_EXP 78
18688: PPUSH
18689: LD_VAR 0 1
18693: PPUSH
18694: LD_INT 0
18696: PPUSH
18697: CALL_OW 1
18701: ST_TO_ADDR
// if check_if_base_is_dead then
18702: LD_VAR 0 3
18706: IFFALSE 18840
// if ( ( ai_soldiers [ base ] ^ ai_attacking_soldiers [ base ] ^ ai_engineers [ base ] ^ ai_apemen_engineers [ base ] ^ ai_mechanics_defend [ base ] ^ ai_mechanics_attack [ base ] ^ ai_sib_bomb_mechanics [ base ] ^ ai_scientists [ base ] ^ ai_attacking_scientists [ base ] ) diff 0 ) = 0 then
18708: LD_EXP 27
18712: PUSH
18713: LD_VAR 0 1
18717: ARRAY
18718: PUSH
18719: LD_EXP 28
18723: PUSH
18724: LD_VAR 0 1
18728: ARRAY
18729: ADD
18730: PUSH
18731: LD_EXP 29
18735: PUSH
18736: LD_VAR 0 1
18740: ARRAY
18741: ADD
18742: PUSH
18743: LD_EXP 34
18747: PUSH
18748: LD_VAR 0 1
18752: ARRAY
18753: ADD
18754: PUSH
18755: LD_EXP 30
18759: PUSH
18760: LD_VAR 0 1
18764: ARRAY
18765: ADD
18766: PUSH
18767: LD_EXP 31
18771: PUSH
18772: LD_VAR 0 1
18776: ARRAY
18777: ADD
18778: PUSH
18779: LD_EXP 52
18783: PUSH
18784: LD_VAR 0 1
18788: ARRAY
18789: ADD
18790: PUSH
18791: LD_EXP 32
18795: PUSH
18796: LD_VAR 0 1
18800: ARRAY
18801: ADD
18802: PUSH
18803: LD_EXP 33
18807: PUSH
18808: LD_VAR 0 1
18812: ARRAY
18813: ADD
18814: PUSH
18815: LD_INT 0
18817: DIFF
18818: PUSH
18819: LD_INT 0
18821: EQUAL
18822: IFFALSE 18840
// begin ai_bases = ai_bases diff base ;
18824: LD_ADDR_EXP 26
18828: PUSH
18829: LD_EXP 26
18833: PUSH
18834: LD_VAR 0 1
18838: DIFF
18839: ST_TO_ADDR
// end ; end ;
18840: LD_VAR 0 4
18844: RET
// export function GetBaseArea ( base ) ; begin
18845: LD_INT 0
18847: PPUSH
// case base of 1 :
18848: LD_VAR 0 1
18852: PUSH
18853: LD_INT 1
18855: DOUBLE
18856: EQUAL
18857: IFTRUE 18861
18859: GO 18872
18861: POP
// result = Legion_base ; 2 :
18862: LD_ADDR_VAR 0 2
18866: PUSH
18867: LD_INT 3
18869: ST_TO_ADDR
18870: GO 18932
18872: LD_INT 2
18874: DOUBLE
18875: EQUAL
18876: IFTRUE 18880
18878: GO 18891
18880: POP
// result = Am_base ; 3 :
18881: LD_ADDR_VAR 0 2
18885: PUSH
18886: LD_INT 2
18888: ST_TO_ADDR
18889: GO 18932
18891: LD_INT 3
18893: DOUBLE
18894: EQUAL
18895: IFTRUE 18899
18897: GO 18911
18899: POP
// result = - 15 ; 4 :
18900: LD_ADDR_VAR 0 2
18904: PUSH
18905: LD_INT 15
18907: NEG
18908: ST_TO_ADDR
18909: GO 18932
18911: LD_INT 4
18913: DOUBLE
18914: EQUAL
18915: IFTRUE 18919
18917: GO 18931
18919: POP
// result = - 16 ; end ;
18920: LD_ADDR_VAR 0 2
18924: PUSH
18925: LD_INT 16
18927: NEG
18928: ST_TO_ADDR
18929: GO 18932
18931: POP
// end ;
18932: LD_VAR 0 2
18936: RET
// export function GetBaseSide ( base ) ; begin
18937: LD_INT 0
18939: PPUSH
// case base of 1 :
18940: LD_VAR 0 1
18944: PUSH
18945: LD_INT 1
18947: DOUBLE
18948: EQUAL
18949: IFTRUE 18953
18951: GO 18966
18953: POP
// result = legion ; 2 :
18954: LD_ADDR_VAR 0 2
18958: PUSH
18959: LD_EXP 4
18963: ST_TO_ADDR
18964: GO 19030
18966: LD_INT 2
18968: DOUBLE
18969: EQUAL
18970: IFTRUE 18974
18972: GO 18987
18974: POP
// result = americans ; 3 :
18975: LD_ADDR_VAR 0 2
18979: PUSH
18980: LD_EXP 6
18984: ST_TO_ADDR
18985: GO 19030
18987: LD_INT 3
18989: DOUBLE
18990: EQUAL
18991: IFTRUE 18995
18993: GO 19008
18995: POP
// result = legion ; 4 :
18996: LD_ADDR_VAR 0 2
19000: PUSH
19001: LD_EXP 4
19005: ST_TO_ADDR
19006: GO 19030
19008: LD_INT 4
19010: DOUBLE
19011: EQUAL
19012: IFTRUE 19016
19014: GO 19029
19016: POP
// result = americans ; end ;
19017: LD_ADDR_VAR 0 2
19021: PUSH
19022: LD_EXP 6
19026: ST_TO_ADDR
19027: GO 19030
19029: POP
// end ;
19030: LD_VAR 0 2
19034: RET
// export function GetBaseNation ( base ) ; begin
19035: LD_INT 0
19037: PPUSH
// case base of 1 :
19038: LD_VAR 0 1
19042: PUSH
19043: LD_INT 1
19045: DOUBLE
19046: EQUAL
19047: IFTRUE 19051
19049: GO 19062
19051: POP
// result = nation_arabian ; 2 :
19052: LD_ADDR_VAR 0 2
19056: PUSH
19057: LD_INT 2
19059: ST_TO_ADDR
19060: GO 19120
19062: LD_INT 2
19064: DOUBLE
19065: EQUAL
19066: IFTRUE 19070
19068: GO 19081
19070: POP
// result = nation_american ; 3 :
19071: LD_ADDR_VAR 0 2
19075: PUSH
19076: LD_INT 1
19078: ST_TO_ADDR
19079: GO 19120
19081: LD_INT 3
19083: DOUBLE
19084: EQUAL
19085: IFTRUE 19089
19087: GO 19100
19089: POP
// result = nation_arabian ; 4 :
19090: LD_ADDR_VAR 0 2
19094: PUSH
19095: LD_INT 2
19097: ST_TO_ADDR
19098: GO 19120
19100: LD_INT 4
19102: DOUBLE
19103: EQUAL
19104: IFTRUE 19108
19106: GO 19119
19108: POP
// result = nation_american ; end ;
19109: LD_ADDR_VAR 0 2
19113: PUSH
19114: LD_INT 1
19116: ST_TO_ADDR
19117: GO 19120
19119: POP
// end ;
19120: LD_VAR 0 2
19124: RET
// export function FindBase ( un ) ; var base ; begin
19125: LD_INT 0
19127: PPUSH
19128: PPUSH
// result = 0 ;
19129: LD_ADDR_VAR 0 2
19133: PUSH
19134: LD_INT 0
19136: ST_TO_ADDR
// for base in ai_bases do
19137: LD_ADDR_VAR 0 3
19141: PUSH
19142: LD_EXP 26
19146: PUSH
19147: FOR_IN
19148: IFFALSE 19202
// if GetBaseArea ( base ) > 0 then
19150: LD_VAR 0 3
19154: PPUSH
19155: CALL 18845 0 1
19159: PUSH
19160: LD_INT 0
19162: GREATER
19163: IFFALSE 19200
// if IsInArea ( un , GetBaseArea ( base ) ) then
19165: LD_VAR 0 1
19169: PPUSH
19170: LD_VAR 0 3
19174: PPUSH
19175: CALL 18845 0 1
19179: PPUSH
19180: CALL_OW 308
19184: IFFALSE 19200
// begin result = base ;
19186: LD_ADDR_VAR 0 2
19190: PUSH
19191: LD_VAR 0 3
19195: ST_TO_ADDR
// exit ;
19196: POP
19197: POP
19198: GO 19204
// end ;
19200: GO 19147
19202: POP
19203: POP
// end ;
19204: LD_VAR 0 2
19208: RET
// 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 temp_list_2 , special_defenders ;
19209: GO 19211
19211: DISABLE
19212: LD_INT 0
19214: PPUSH
19215: PPUSH
19216: PPUSH
19217: PPUSH
19218: PPUSH
19219: PPUSH
19220: PPUSH
19221: PPUSH
19222: PPUSH
19223: PPUSH
19224: PPUSH
19225: PPUSH
19226: PPUSH
19227: PPUSH
// begin repeat if ai_bases = 0 then
19228: LD_EXP 26
19232: PUSH
19233: LD_INT 0
19235: EQUAL
19236: IFFALSE 19240
// exit ;
19238: GO 20961
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
19240: LD_INT 35
19242: PUSH
19243: LD_EXP 26
19247: PUSH
19248: LD_INT 0
19250: PLUS
19251: MOD
19252: PPUSH
19253: CALL_OW 67
// for base in ai_bases do
19257: LD_ADDR_VAR 0 7
19261: PUSH
19262: LD_EXP 26
19266: PUSH
19267: FOR_IN
19268: IFFALSE 20955
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
19270: LD_INT 35
19272: PUSH
19273: LD_EXP 26
19277: PUSH
19278: LD_INT 0
19280: PLUS
19281: DIV
19282: PPUSH
19283: CALL_OW 67
// side = GetBaseSide ( base ) ;
19287: LD_ADDR_VAR 0 1
19291: PUSH
19292: LD_VAR 0 7
19296: PPUSH
19297: CALL 18937 0 1
19301: ST_TO_ADDR
// soldiers_list = ai_soldiers [ base ] diff ai_excepted_soldiers [ base ] ;
19302: LD_ADDR_VAR 0 5
19306: PUSH
19307: LD_EXP 27
19311: PUSH
19312: LD_VAR 0 7
19316: ARRAY
19317: PUSH
19318: LD_EXP 35
19322: PUSH
19323: LD_VAR 0 7
19327: ARRAY
19328: DIFF
19329: ST_TO_ADDR
// under_attack := BaseUnderAttack ( base , - 1 ) ;
19330: LD_ADDR_VAR 0 11
19334: PUSH
19335: LD_VAR 0 7
19339: PPUSH
19340: LD_INT 1
19342: NEG
19343: PPUSH
19344: CALL 32934 0 2
19348: ST_TO_ADDR
// if under_attack then
19349: LD_VAR 0 11
19353: IFFALSE 19525
// begin special_defenders = UnitFilter ( soldiers_list , [ f_not , [ f_inside ] ] ) ;
19355: LD_ADDR_VAR 0 14
19359: PUSH
19360: LD_VAR 0 5
19364: PPUSH
19365: LD_INT 3
19367: PUSH
19368: LD_INT 54
19370: PUSH
19371: EMPTY
19372: LIST
19373: PUSH
19374: EMPTY
19375: LIST
19376: LIST
19377: PPUSH
19378: CALL_OW 72
19382: ST_TO_ADDR
// if base = 2 then
19383: LD_VAR 0 7
19387: PUSH
19388: LD_INT 2
19390: EQUAL
19391: IFFALSE 19523
// begin for i in ai_armouries [ base ] do
19393: LD_ADDR_VAR 0 2
19397: PUSH
19398: LD_EXP 39
19402: PUSH
19403: LD_VAR 0 7
19407: ARRAY
19408: PUSH
19409: FOR_IN
19410: IFFALSE 19521
// begin temp_list = UnitFilter ( UnitsInside ( i ) , [ f_or , [ f_class , class_sniper ] , [ f_class , class_mortar ] , [ f_class , class_bazooker ] ] ) ;
19412: LD_ADDR_VAR 0 3
19416: PUSH
19417: LD_VAR 0 2
19421: PPUSH
19422: CALL_OW 313
19426: PPUSH
19427: LD_INT 2
19429: PUSH
19430: LD_INT 25
19432: PUSH
19433: LD_INT 5
19435: PUSH
19436: EMPTY
19437: LIST
19438: LIST
19439: PUSH
19440: LD_INT 25
19442: PUSH
19443: LD_INT 8
19445: PUSH
19446: EMPTY
19447: LIST
19448: LIST
19449: PUSH
19450: LD_INT 25
19452: PUSH
19453: LD_INT 9
19455: PUSH
19456: EMPTY
19457: LIST
19458: LIST
19459: PUSH
19460: EMPTY
19461: LIST
19462: LIST
19463: LIST
19464: LIST
19465: PPUSH
19466: CALL_OW 72
19470: ST_TO_ADDR
// for j = 1 to temp_list - 3 do
19471: LD_ADDR_VAR 0 12
19475: PUSH
19476: DOUBLE
19477: LD_INT 1
19479: DEC
19480: ST_TO_ADDR
19481: LD_VAR 0 3
19485: PUSH
19486: LD_INT 3
19488: MINUS
19489: PUSH
19490: FOR_TO
19491: IFFALSE 19517
// special_defenders = special_defenders ^ temp_list [ j ] ;
19493: LD_ADDR_VAR 0 14
19497: PUSH
19498: LD_VAR 0 14
19502: PUSH
19503: LD_VAR 0 3
19507: PUSH
19508: LD_VAR 0 12
19512: ARRAY
19513: ADD
19514: ST_TO_ADDR
19515: GO 19490
19517: POP
19518: POP
// end ;
19519: GO 19409
19521: POP
19522: POP
// end ; end else
19523: GO 19532
// special_defenders = [ ] ;
19525: LD_ADDR_VAR 0 14
19529: PUSH
19530: EMPTY
19531: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
19532: LD_ADDR_VAR 0 3
19536: PUSH
19537: LD_EXP 61
19541: PUSH
19542: LD_VAR 0 7
19546: ARRAY
19547: ST_TO_ADDR
// for i in soldiers_list diff ai_heal_these_humans [ base ] do
19548: LD_ADDR_VAR 0 2
19552: PUSH
19553: LD_VAR 0 5
19557: PUSH
19558: LD_EXP 61
19562: PUSH
19563: LD_VAR 0 7
19567: ARRAY
19568: DIFF
19569: PUSH
19570: FOR_IN
19571: IFFALSE 19634
// if GetLives ( i ) <= 500 or ( GetLives ( i ) < 800 and not i in special_defenders ) then
19573: LD_VAR 0 2
19577: PPUSH
19578: CALL_OW 256
19582: PUSH
19583: LD_INT 500
19585: LESSEQUAL
19586: PUSH
19587: LD_VAR 0 2
19591: PPUSH
19592: CALL_OW 256
19596: PUSH
19597: LD_INT 800
19599: LESS
19600: PUSH
19601: LD_VAR 0 2
19605: PUSH
19606: LD_VAR 0 14
19610: IN
19611: NOT
19612: AND
19613: OR
19614: IFFALSE 19632
// temp_list = temp_list ^ i ;
19616: LD_ADDR_VAR 0 3
19620: PUSH
19621: LD_VAR 0 3
19625: PUSH
19626: LD_VAR 0 2
19630: ADD
19631: ST_TO_ADDR
19632: GO 19570
19634: POP
19635: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
19636: LD_ADDR_EXP 61
19640: PUSH
19641: LD_EXP 61
19645: PPUSH
19646: LD_VAR 0 7
19650: PPUSH
19651: LD_VAR 0 3
19655: PPUSH
19656: CALL_OW 1
19660: ST_TO_ADDR
// if not under_attack then
19661: LD_VAR 0 11
19665: NOT
19666: IFFALSE 19803
// begin for i in ai_heal_these_humans [ base ] do
19668: LD_ADDR_VAR 0 2
19672: PUSH
19673: LD_EXP 61
19677: PUSH
19678: LD_VAR 0 7
19682: ARRAY
19683: PUSH
19684: FOR_IN
19685: IFFALSE 19757
// if i in soldiers_list then
19687: LD_VAR 0 2
19691: PUSH
19692: LD_VAR 0 5
19696: IN
19697: IFFALSE 19755
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
19699: LD_VAR 0 2
19703: PPUSH
19704: CALL_OW 310
19708: PPUSH
19709: CALL_OW 247
19713: PUSH
19714: LD_INT 2
19716: DOUBLE
19717: EQUAL
19718: IFTRUE 19722
19720: GO 19734
19722: POP
// ComExitVehicle ( i ) ; unit_building :
19723: LD_VAR 0 2
19727: PPUSH
19728: CALL_OW 121
19732: GO 19755
19734: LD_INT 3
19736: DOUBLE
19737: EQUAL
19738: IFTRUE 19742
19740: GO 19754
19742: POP
// ComExitBuilding ( i ) ; end ;
19743: LD_VAR 0 2
19747: PPUSH
19748: CALL_OW 122
19752: GO 19755
19754: POP
19755: GO 19684
19757: POP
19758: POP
// soldiers_list = soldiers_list diff ai_heal_these_humans [ base ] ;
19759: LD_ADDR_VAR 0 5
19763: PUSH
19764: LD_VAR 0 5
19768: PUSH
19769: LD_EXP 61
19773: PUSH
19774: LD_VAR 0 7
19778: ARRAY
19779: DIFF
19780: ST_TO_ADDR
// special_defenders = special_defenders diff ai_heal_these_humans [ base ] ;
19781: LD_ADDR_VAR 0 14
19785: PUSH
19786: LD_VAR 0 14
19790: PUSH
19791: LD_EXP 61
19795: PUSH
19796: LD_VAR 0 7
19800: ARRAY
19801: DIFF
19802: ST_TO_ADDR
// end ; if soldiers_list = 0 then
19803: LD_VAR 0 5
19807: PUSH
19808: LD_INT 0
19810: EQUAL
19811: IFFALSE 19815
// continue ;
19813: GO 19267
// if special_defenders > 0 then
19815: LD_VAR 0 14
19819: PUSH
19820: LD_INT 0
19822: GREATER
19823: IFFALSE 20017
// begin case base of 1 :
19825: LD_VAR 0 7
19829: PUSH
19830: LD_INT 1
19832: DOUBLE
19833: EQUAL
19834: IFTRUE 19838
19836: GO 19889
19838: POP
// temp_list_2 = DangerousUnits ( FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , GetBaseArea ( base ) ] ] ) ) ; 2 :
19839: LD_ADDR_VAR 0 13
19843: PUSH
19844: LD_INT 81
19846: PUSH
19847: LD_VAR 0 1
19851: PUSH
19852: EMPTY
19853: LIST
19854: LIST
19855: PUSH
19856: LD_INT 95
19858: PUSH
19859: LD_VAR 0 7
19863: PPUSH
19864: CALL 18845 0 1
19868: PUSH
19869: EMPTY
19870: LIST
19871: LIST
19872: PUSH
19873: EMPTY
19874: LIST
19875: LIST
19876: PPUSH
19877: CALL_OW 69
19881: PPUSH
19882: CALL 83864 0 1
19886: ST_TO_ADDR
19887: GO 19949
19889: LD_INT 2
19891: DOUBLE
19892: EQUAL
19893: IFTRUE 19897
19895: GO 19948
19897: POP
// temp_list_2 = DangerousUnits ( FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , GetBaseArea ( base ) ] ] ) ) ; end ;
19898: LD_ADDR_VAR 0 13
19902: PUSH
19903: LD_INT 81
19905: PUSH
19906: LD_VAR 0 1
19910: PUSH
19911: EMPTY
19912: LIST
19913: LIST
19914: PUSH
19915: LD_INT 95
19917: PUSH
19918: LD_VAR 0 7
19922: PPUSH
19923: CALL 18845 0 1
19927: PUSH
19928: EMPTY
19929: LIST
19930: LIST
19931: PUSH
19932: EMPTY
19933: LIST
19934: LIST
19935: PPUSH
19936: CALL_OW 69
19940: PPUSH
19941: CALL 83864 0 1
19945: ST_TO_ADDR
19946: GO 19949
19948: POP
// if temp_list_2 > 0 then
19949: LD_VAR 0 13
19953: PUSH
19954: LD_INT 0
19956: GREATER
19957: IFFALSE 20017
// begin soldiers_list = soldiers_list diff special_defenders ;
19959: LD_ADDR_VAR 0 5
19963: PUSH
19964: LD_VAR 0 5
19968: PUSH
19969: LD_VAR 0 14
19973: DIFF
19974: ST_TO_ADDR
// ComAgressiveMove ( GetHumansOutOfUnits ( special_defenders ) , GetX ( temp_list_2 [ 1 ] ) , GetY ( temp_list_2 [ 1 ] ) ) ;
19975: LD_VAR 0 14
19979: PPUSH
19980: CALL 32829 0 1
19984: PPUSH
19985: LD_VAR 0 13
19989: PUSH
19990: LD_INT 1
19992: ARRAY
19993: PPUSH
19994: CALL_OW 250
19998: PPUSH
19999: LD_VAR 0 13
20003: PUSH
20004: LD_INT 1
20006: ARRAY
20007: PPUSH
20008: CALL_OW 251
20012: PPUSH
20013: CALL_OW 114
// end ; end ; i = false ;
20017: LD_ADDR_VAR 0 2
20021: PUSH
20022: LD_INT 0
20024: ST_TO_ADDR
// if IsOk ( ai_depot [ base ] ) then
20025: LD_EXP 36
20029: PUSH
20030: LD_VAR 0 7
20034: ARRAY
20035: PPUSH
20036: CALL_OW 302
20040: IFFALSE 20080
// if GetEnergy ( GetBase ( ai_depot [ base ] ) ) [ 4 ] > 0 then
20042: LD_EXP 36
20046: PUSH
20047: LD_VAR 0 7
20051: ARRAY
20052: PPUSH
20053: CALL_OW 274
20057: PPUSH
20058: CALL_OW 278
20062: PUSH
20063: LD_INT 4
20065: ARRAY
20066: PUSH
20067: LD_INT 0
20069: GREATER
20070: IFFALSE 20080
// i = true ;
20072: LD_ADDR_VAR 0 2
20076: PUSH
20077: LD_INT 1
20079: ST_TO_ADDR
// if i or difficulty = 1 then
20080: LD_VAR 0 2
20084: PUSH
20085: LD_OWVAR 67
20089: PUSH
20090: LD_INT 1
20092: EQUAL
20093: OR
20094: IFFALSE 20114
// bunkers = ai_bunkers [ base ] else
20096: LD_ADDR_VAR 0 10
20100: PUSH
20101: LD_EXP 40
20105: PUSH
20106: LD_VAR 0 7
20110: ARRAY
20111: ST_TO_ADDR
20112: GO 20175
// begin bunkers = [ ] ;
20114: LD_ADDR_VAR 0 10
20118: PUSH
20119: EMPTY
20120: ST_TO_ADDR
// for i in ai_bunkers [ base ] do
20121: LD_ADDR_VAR 0 2
20125: PUSH
20126: LD_EXP 40
20130: PUSH
20131: LD_VAR 0 7
20135: ARRAY
20136: PUSH
20137: FOR_IN
20138: IFFALSE 20173
// if GetBType ( i ) = b_breastwork then
20140: LD_VAR 0 2
20144: PPUSH
20145: CALL_OW 266
20149: PUSH
20150: LD_INT 31
20152: EQUAL
20153: IFFALSE 20171
// bunkers = bunkers ^ i ;
20155: LD_ADDR_VAR 0 10
20159: PUSH
20160: LD_VAR 0 10
20164: PUSH
20165: LD_VAR 0 2
20169: ADD
20170: ST_TO_ADDR
20171: GO 20137
20173: POP
20174: POP
// end ; if base = 1 and ( not IsOk ( ai_depot [ base ] ) or ai_depot [ base ] = 0 ) then
20175: LD_VAR 0 7
20179: PUSH
20180: LD_INT 1
20182: EQUAL
20183: PUSH
20184: LD_EXP 36
20188: PUSH
20189: LD_VAR 0 7
20193: ARRAY
20194: PPUSH
20195: CALL_OW 302
20199: NOT
20200: PUSH
20201: LD_EXP 36
20205: PUSH
20206: LD_VAR 0 7
20210: ARRAY
20211: PUSH
20212: LD_INT 0
20214: EQUAL
20215: OR
20216: AND
20217: IFFALSE 20226
// bunkers = [ ] ;
20219: LD_ADDR_VAR 0 10
20223: PUSH
20224: EMPTY
20225: ST_TO_ADDR
// buildings_list = [ ] ;
20226: LD_ADDR_VAR 0 4
20230: PUSH
20231: EMPTY
20232: ST_TO_ADDR
// for i in UnitFilter ( bunkers , [ f_ok ] ) do
20233: LD_ADDR_VAR 0 2
20237: PUSH
20238: LD_VAR 0 10
20242: PPUSH
20243: LD_INT 50
20245: PUSH
20246: EMPTY
20247: LIST
20248: PPUSH
20249: CALL_OW 72
20253: PUSH
20254: FOR_IN
20255: IFFALSE 20318
// begin temp_unit = UnitsInside ( i ) ;
20257: LD_ADDR_VAR 0 6
20261: PUSH
20262: LD_VAR 0 2
20266: PPUSH
20267: CALL_OW 313
20271: ST_TO_ADDR
// if temp_unit = 0 then
20272: LD_VAR 0 6
20276: PUSH
20277: LD_INT 0
20279: EQUAL
20280: IFFALSE 20300
// buildings_list = buildings_list ^ i else
20282: LD_ADDR_VAR 0 4
20286: PUSH
20287: LD_VAR 0 4
20291: PUSH
20292: LD_VAR 0 2
20296: ADD
20297: ST_TO_ADDR
20298: GO 20316
// soldiers_list = soldiers_list diff temp_unit ;
20300: LD_ADDR_VAR 0 5
20304: PUSH
20305: LD_VAR 0 5
20309: PUSH
20310: LD_VAR 0 6
20314: DIFF
20315: ST_TO_ADDR
// end ;
20316: GO 20254
20318: POP
20319: POP
// if buildings_list > 0 then
20320: LD_VAR 0 4
20324: PUSH
20325: LD_INT 0
20327: GREATER
20328: IFFALSE 20875
// begin if not under_attack then
20330: LD_VAR 0 11
20334: NOT
20335: IFFALSE 20405
// begin temp_list = [ ] ;
20337: LD_ADDR_VAR 0 3
20341: PUSH
20342: EMPTY
20343: ST_TO_ADDR
// for i in soldiers_list do
20344: LD_ADDR_VAR 0 2
20348: PUSH
20349: LD_VAR 0 5
20353: PUSH
20354: FOR_IN
20355: IFFALSE 20383
// temp_list = temp_list ^ GetSkill ( i , skill_combat ) ;
20357: LD_ADDR_VAR 0 3
20361: PUSH
20362: LD_VAR 0 3
20366: PUSH
20367: LD_VAR 0 2
20371: PPUSH
20372: LD_INT 1
20374: PPUSH
20375: CALL_OW 259
20379: ADD
20380: ST_TO_ADDR
20381: GO 20354
20383: POP
20384: POP
// soldiers_list = SortListByListDesc ( soldiers_list , temp_list ) ;
20385: LD_ADDR_VAR 0 5
20389: PUSH
20390: LD_VAR 0 5
20394: PPUSH
20395: LD_VAR 0 3
20399: PPUSH
20400: CALL_OW 77
20404: ST_TO_ADDR
// end ; special_units = UnitFilter ( soldiers_list , [ f_or , [ f_class , class_bazooker ] , [ f_class , class_sniper ] , [ f_class , class_mortar ] ] ) ;
20405: LD_ADDR_VAR 0 9
20409: PUSH
20410: LD_VAR 0 5
20414: PPUSH
20415: LD_INT 2
20417: PUSH
20418: LD_INT 25
20420: PUSH
20421: LD_INT 9
20423: PUSH
20424: EMPTY
20425: LIST
20426: LIST
20427: PUSH
20428: LD_INT 25
20430: PUSH
20431: LD_INT 5
20433: PUSH
20434: EMPTY
20435: LIST
20436: LIST
20437: PUSH
20438: LD_INT 25
20440: PUSH
20441: LD_INT 8
20443: PUSH
20444: EMPTY
20445: LIST
20446: LIST
20447: PUSH
20448: EMPTY
20449: LIST
20450: LIST
20451: LIST
20452: LIST
20453: PPUSH
20454: CALL_OW 72
20458: ST_TO_ADDR
// soldiers_list = soldiers_list diff special_units ;
20459: LD_ADDR_VAR 0 5
20463: PUSH
20464: LD_VAR 0 5
20468: PUSH
20469: LD_VAR 0 9
20473: DIFF
20474: ST_TO_ADDR
// for i = 1 to buildings_list do
20475: LD_ADDR_VAR 0 2
20479: PUSH
20480: DOUBLE
20481: LD_INT 1
20483: DEC
20484: ST_TO_ADDR
20485: LD_VAR 0 4
20489: PUSH
20490: FOR_TO
20491: IFFALSE 20871
// begin if soldiers_list = 0 then
20493: LD_VAR 0 5
20497: PUSH
20498: LD_INT 0
20500: EQUAL
20501: IFFALSE 20532
// begin if special_units = 0 then
20503: LD_VAR 0 9
20507: PUSH
20508: LD_INT 0
20510: EQUAL
20511: IFFALSE 20515
// break ;
20513: GO 20871
// soldiers_list = special_units ;
20515: LD_ADDR_VAR 0 5
20519: PUSH
20520: LD_VAR 0 9
20524: ST_TO_ADDR
// special_units = [ ] ;
20525: LD_ADDR_VAR 0 9
20529: PUSH
20530: EMPTY
20531: ST_TO_ADDR
// end ; if not under_attack then
20532: LD_VAR 0 11
20536: NOT
20537: IFFALSE 20602
// begin if GetBType ( buildings_list [ i ] ) = b_breastwork and special_units > 0 then
20539: LD_VAR 0 4
20543: PUSH
20544: LD_VAR 0 2
20548: ARRAY
20549: PPUSH
20550: CALL_OW 266
20554: PUSH
20555: LD_INT 31
20557: EQUAL
20558: PUSH
20559: LD_VAR 0 9
20563: PUSH
20564: LD_INT 0
20566: GREATER
20567: AND
20568: IFFALSE 20586
// temp_unit = special_units [ 1 ] else
20570: LD_ADDR_VAR 0 6
20574: PUSH
20575: LD_VAR 0 9
20579: PUSH
20580: LD_INT 1
20582: ARRAY
20583: ST_TO_ADDR
20584: GO 20600
// temp_unit = soldiers_list [ 1 ] ;
20586: LD_ADDR_VAR 0 6
20590: PUSH
20591: LD_VAR 0 5
20595: PUSH
20596: LD_INT 1
20598: ARRAY
20599: ST_TO_ADDR
// end else
20600: GO 20731
// begin if GetBType ( buildings_list [ i ] ) = b_breastwork and special_units > 0 then
20602: LD_VAR 0 4
20606: PUSH
20607: LD_VAR 0 2
20611: ARRAY
20612: PPUSH
20613: CALL_OW 266
20617: PUSH
20618: LD_INT 31
20620: EQUAL
20621: PUSH
20622: LD_VAR 0 9
20626: PUSH
20627: LD_INT 0
20629: GREATER
20630: AND
20631: IFFALSE 20645
// temp_list_2 = special_units else
20633: LD_ADDR_VAR 0 13
20637: PUSH
20638: LD_VAR 0 9
20642: ST_TO_ADDR
20643: GO 20655
// temp_list_2 = soldiers_list ;
20645: LD_ADDR_VAR 0 13
20649: PUSH
20650: LD_VAR 0 5
20654: ST_TO_ADDR
// temp_list = [ ] ;
20655: LD_ADDR_VAR 0 3
20659: PUSH
20660: EMPTY
20661: ST_TO_ADDR
// for j in temp_list_2 do
20662: LD_ADDR_VAR 0 12
20666: PUSH
20667: LD_VAR 0 13
20671: PUSH
20672: FOR_IN
20673: IFFALSE 20709
// temp_list = temp_list ^ GetDistUnits ( j , buildings_list [ i ] ) ;
20675: LD_ADDR_VAR 0 3
20679: PUSH
20680: LD_VAR 0 3
20684: PUSH
20685: LD_VAR 0 12
20689: PPUSH
20690: LD_VAR 0 4
20694: PUSH
20695: LD_VAR 0 2
20699: ARRAY
20700: PPUSH
20701: CALL_OW 296
20705: ADD
20706: ST_TO_ADDR
20707: GO 20672
20709: POP
20710: POP
// temp_unit = WorstFromListByList ( temp_list_2 , temp_list ) ;
20711: LD_ADDR_VAR 0 6
20715: PUSH
20716: LD_VAR 0 13
20720: PPUSH
20721: LD_VAR 0 3
20725: PPUSH
20726: CALL_OW 78
20730: ST_TO_ADDR
// end ; if IsOk ( buildings_list [ i ] ) then
20731: LD_VAR 0 4
20735: PUSH
20736: LD_VAR 0 2
20740: ARRAY
20741: PPUSH
20742: CALL_OW 302
20746: IFFALSE 20770
// ComEnterUnit ( temp_unit , buildings_list [ i ] ) else
20748: LD_VAR 0 6
20752: PPUSH
20753: LD_VAR 0 4
20757: PUSH
20758: LD_VAR 0 2
20762: ARRAY
20763: PPUSH
20764: CALL_OW 120
20768: GO 20837
// if GetDistUnits ( temp_unit , buildings_list [ i ] ) > 4 then
20770: LD_VAR 0 6
20774: PPUSH
20775: LD_VAR 0 4
20779: PUSH
20780: LD_VAR 0 2
20784: ARRAY
20785: PPUSH
20786: CALL_OW 296
20790: PUSH
20791: LD_INT 4
20793: GREATER
20794: IFFALSE 20837
// ComAgressiveMove ( temp_unit , GetX ( buildings_list [ i ] ) , GetY ( buildings_list [ i ] ) ) ;
20796: LD_VAR 0 6
20800: PPUSH
20801: LD_VAR 0 4
20805: PUSH
20806: LD_VAR 0 2
20810: ARRAY
20811: PPUSH
20812: CALL_OW 250
20816: PPUSH
20817: LD_VAR 0 4
20821: PUSH
20822: LD_VAR 0 2
20826: ARRAY
20827: PPUSH
20828: CALL_OW 251
20832: PPUSH
20833: CALL_OW 114
// soldiers_list = soldiers_list diff temp_unit ;
20837: LD_ADDR_VAR 0 5
20841: PUSH
20842: LD_VAR 0 5
20846: PUSH
20847: LD_VAR 0 6
20851: DIFF
20852: ST_TO_ADDR
// special_units = special_units diff temp_unit ;
20853: LD_ADDR_VAR 0 9
20857: PUSH
20858: LD_VAR 0 9
20862: PUSH
20863: LD_VAR 0 6
20867: DIFF
20868: ST_TO_ADDR
// end ;
20869: GO 20490
20871: POP
20872: POP
// end else
20873: GO 20882
// special_units = [ ] ;
20875: LD_ADDR_VAR 0 9
20879: PUSH
20880: EMPTY
20881: ST_TO_ADDR
// DistributeHumansToBuildings ( base , soldiers_list ^ special_units , UnitFilter ( ai_armouries [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , false , 6 , true , true ) ;
20882: LD_VAR 0 7
20886: PPUSH
20887: LD_VAR 0 5
20891: PUSH
20892: LD_VAR 0 9
20896: ADD
20897: PPUSH
20898: LD_EXP 39
20902: PUSH
20903: LD_VAR 0 7
20907: ARRAY
20908: PPUSH
20909: LD_INT 50
20911: PUSH
20912: EMPTY
20913: LIST
20914: PUSH
20915: LD_INT 3
20917: PUSH
20918: LD_INT 57
20920: PUSH
20921: EMPTY
20922: LIST
20923: PUSH
20924: EMPTY
20925: LIST
20926: LIST
20927: PUSH
20928: EMPTY
20929: LIST
20930: LIST
20931: PPUSH
20932: CALL_OW 72
20936: PPUSH
20937: LD_INT 0
20939: PPUSH
20940: LD_INT 6
20942: PPUSH
20943: LD_INT 1
20945: PPUSH
20946: LD_INT 1
20948: PPUSH
20949: CALL 22559 0 7
// end ;
20953: GO 19267
20955: POP
20956: POP
// until false ;
20957: LD_INT 0
20959: IFFALSE 19228
// end ;
20961: PPOPN 14
20963: END
// every 0 0$1 + 0 0$0.2 do var i , un , base , temp_list ;
20964: GO 20966
20966: DISABLE
20967: LD_INT 0
20969: PPUSH
20970: PPUSH
20971: PPUSH
20972: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
20973: LD_INT 18
20975: PPUSH
20976: CALL_OW 67
// for base in ai_bases ^ 3 do
20980: LD_ADDR_VAR 0 3
20984: PUSH
20985: LD_EXP 26
20989: PUSH
20990: LD_INT 3
20992: ADD
20993: PUSH
20994: FOR_IN
20995: IFFALSE 21410
// begin i = 1 ;
20997: LD_ADDR_VAR 0 1
21001: PUSH
21002: LD_INT 1
21004: ST_TO_ADDR
// while i <= ai_defence_mines_hexes [ base ] do
21005: LD_VAR 0 1
21009: PUSH
21010: LD_EXP 104
21014: PUSH
21015: LD_VAR 0 3
21019: ARRAY
21020: LESSEQUAL
21021: IFFALSE 21408
// begin un = HexInfo ( ai_defence_mines_hexes [ base ] [ i ] [ 1 ] , ai_defence_mines_hexes [ base ] [ i ] [ 2 ] ) ;
21023: LD_ADDR_VAR 0 2
21027: PUSH
21028: LD_EXP 104
21032: PUSH
21033: LD_VAR 0 3
21037: ARRAY
21038: PUSH
21039: LD_VAR 0 1
21043: ARRAY
21044: PUSH
21045: LD_INT 1
21047: ARRAY
21048: PPUSH
21049: LD_EXP 104
21053: PUSH
21054: LD_VAR 0 3
21058: ARRAY
21059: PUSH
21060: LD_VAR 0 1
21064: ARRAY
21065: PUSH
21066: LD_INT 2
21068: ARRAY
21069: PPUSH
21070: CALL_OW 428
21074: ST_TO_ADDR
// if un <= 0 then
21075: LD_VAR 0 2
21079: PUSH
21080: LD_INT 0
21082: LESSEQUAL
21083: IFFALSE 21101
// begin i = i + 1 ;
21085: LD_ADDR_VAR 0 1
21089: PUSH
21090: LD_VAR 0 1
21094: PUSH
21095: LD_INT 1
21097: PLUS
21098: ST_TO_ADDR
// continue ;
21099: GO 21005
// end ; if GetAttitude ( GetBaseSide ( base ) , GetSide ( un ) ) = att_enemy then
21101: LD_VAR 0 3
21105: PPUSH
21106: CALL 18937 0 1
21110: PPUSH
21111: LD_VAR 0 2
21115: PPUSH
21116: CALL_OW 255
21120: PPUSH
21121: CALL_OW 81
21125: PUSH
21126: LD_INT 2
21128: EQUAL
21129: IFFALSE 21392
// begin LaunchMineAtPos ( ai_defence_mines_hexes [ base ] [ i ] [ 1 ] , ai_defence_mines_hexes [ base ] [ i ] [ 2 ] , mines_side ) ;
21131: LD_EXP 104
21135: PUSH
21136: LD_VAR 0 3
21140: ARRAY
21141: PUSH
21142: LD_VAR 0 1
21146: ARRAY
21147: PUSH
21148: LD_INT 1
21150: ARRAY
21151: PPUSH
21152: LD_EXP 104
21156: PUSH
21157: LD_VAR 0 3
21161: ARRAY
21162: PUSH
21163: LD_VAR 0 1
21167: ARRAY
21168: PUSH
21169: LD_INT 2
21171: ARRAY
21172: PPUSH
21173: LD_EXP 7
21177: PPUSH
21178: CALL_OW 456
// if difficulty > 1 then
21182: LD_OWVAR 67
21186: PUSH
21187: LD_INT 1
21189: GREATER
21190: IFFALSE 21277
// begin if GetLives ( un ) > [ - 1 , 100 , 150 ] [ difficulty ] then
21192: LD_VAR 0 2
21196: PPUSH
21197: CALL_OW 256
21201: PUSH
21202: LD_INT 1
21204: NEG
21205: PUSH
21206: LD_INT 100
21208: PUSH
21209: LD_INT 150
21211: PUSH
21212: EMPTY
21213: LIST
21214: LIST
21215: LIST
21216: PUSH
21217: LD_OWVAR 67
21221: ARRAY
21222: GREATER
21223: IFFALSE 21268
// SetLives ( un , GetLives ( un ) - [ - 1 , 50 , 100 ] [ difficulty ] ) else
21225: LD_VAR 0 2
21229: PPUSH
21230: LD_VAR 0 2
21234: PPUSH
21235: CALL_OW 256
21239: PUSH
21240: LD_INT 1
21242: NEG
21243: PUSH
21244: LD_INT 50
21246: PUSH
21247: LD_INT 100
21249: PUSH
21250: EMPTY
21251: LIST
21252: LIST
21253: LIST
21254: PUSH
21255: LD_OWVAR 67
21259: ARRAY
21260: MINUS
21261: PPUSH
21262: CALL_OW 234
21266: GO 21277
// KillUnit ( un ) ;
21268: LD_VAR 0 2
21272: PPUSH
21273: CALL_OW 66
// end ; temp_list = ai_defence_replace_mines_hexes [ base ] diff [ ai_defence_mines_hexes [ base ] [ i ] ] ;
21277: LD_ADDR_VAR 0 4
21281: PUSH
21282: LD_EXP 107
21286: PUSH
21287: LD_VAR 0 3
21291: ARRAY
21292: PUSH
21293: LD_EXP 104
21297: PUSH
21298: LD_VAR 0 3
21302: ARRAY
21303: PUSH
21304: LD_VAR 0 1
21308: ARRAY
21309: PUSH
21310: EMPTY
21311: LIST
21312: DIFF
21313: ST_TO_ADDR
// ai_defence_replace_mines_hexes = Replace ( ai_defence_replace_mines_hexes , base , temp_list ) ;
21314: LD_ADDR_EXP 107
21318: PUSH
21319: LD_EXP 107
21323: PPUSH
21324: LD_VAR 0 3
21328: PPUSH
21329: LD_VAR 0 4
21333: PPUSH
21334: CALL_OW 1
21338: ST_TO_ADDR
// temp_list = Delete ( ai_defence_mines_hexes [ base ] , i ) ;
21339: LD_ADDR_VAR 0 4
21343: PUSH
21344: LD_EXP 104
21348: PUSH
21349: LD_VAR 0 3
21353: ARRAY
21354: PPUSH
21355: LD_VAR 0 1
21359: PPUSH
21360: CALL_OW 3
21364: ST_TO_ADDR
// ai_defence_mines_hexes = Replace ( ai_defence_mines_hexes , base , temp_list ) ;
21365: LD_ADDR_EXP 104
21369: PUSH
21370: LD_EXP 104
21374: PPUSH
21375: LD_VAR 0 3
21379: PPUSH
21380: LD_VAR 0 4
21384: PPUSH
21385: CALL_OW 1
21389: ST_TO_ADDR
// continue ;
21390: GO 21005
// end ; i = i + 1 ;
21392: LD_ADDR_VAR 0 1
21396: PUSH
21397: LD_VAR 0 1
21401: PUSH
21402: LD_INT 1
21404: PLUS
21405: ST_TO_ADDR
// end ;
21406: GO 21005
// end ;
21408: GO 20994
21410: POP
21411: POP
// until false ;
21412: LD_INT 0
21414: IFFALSE 20973
// end ;
21416: PPOPN 4
21418: END
// every 0 0$1 + 0 0$0.4 do var side , base , i , temp_list , un1 , temp_list_2 , temp_value , val ; var sopo_cooldown ;
21419: GO 21421
21421: DISABLE
21422: LD_INT 0
21424: PPUSH
21425: PPUSH
21426: PPUSH
21427: PPUSH
21428: PPUSH
21429: PPUSH
21430: PPUSH
21431: PPUSH
21432: PPUSH
// begin sopo_cooldown = [ ] ;
21433: LD_ADDR_VAR 0 9
21437: PUSH
21438: EMPTY
21439: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
21440: LD_INT 35
21442: PPUSH
21443: CALL_OW 67
// for base in ai_bases do
21447: LD_ADDR_VAR 0 2
21451: PUSH
21452: LD_EXP 26
21456: PUSH
21457: FOR_IN
21458: IFFALSE 21800
// begin if base in [ 1 ] then
21460: LD_VAR 0 2
21464: PUSH
21465: LD_INT 1
21467: PUSH
21468: EMPTY
21469: LIST
21470: IN
21471: IFFALSE 21475
// continue ;
21473: GO 21457
// side = GetBaseSide ( base ) ;
21475: LD_ADDR_VAR 0 1
21479: PUSH
21480: LD_VAR 0 2
21484: PPUSH
21485: CALL 18937 0 1
21489: ST_TO_ADDR
// for i in ai_soldiers [ base ] do
21490: LD_ADDR_VAR 0 3
21494: PUSH
21495: LD_EXP 27
21499: PUSH
21500: LD_VAR 0 2
21504: ARRAY
21505: PUSH
21506: FOR_IN
21507: IFFALSE 21574
// if sopo_cooldown >= i then
21509: LD_VAR 0 9
21513: PUSH
21514: LD_VAR 0 3
21518: GREATEREQUAL
21519: IFFALSE 21572
// if sopo_cooldown [ i ] > 0 0$0 then
21521: LD_VAR 0 9
21525: PUSH
21526: LD_VAR 0 3
21530: ARRAY
21531: PUSH
21532: LD_INT 0
21534: GREATER
21535: IFFALSE 21572
// sopo_cooldown = Replace ( sopo_cooldown , i , sopo_cooldown [ i ] - 0 0$0.5 ) ;
21537: LD_ADDR_VAR 0 9
21541: PUSH
21542: LD_VAR 0 9
21546: PPUSH
21547: LD_VAR 0 3
21551: PPUSH
21552: LD_VAR 0 9
21556: PUSH
21557: LD_VAR 0 3
21561: ARRAY
21562: PUSH
21563: LD_INT 18
21565: MINUS
21566: PPUSH
21567: CALL_OW 1
21571: ST_TO_ADDR
21572: GO 21506
21574: POP
21575: POP
// for i in ai_soldiers [ base ] diff ai_heal_these_humans [ base ] do
21576: LD_ADDR_VAR 0 3
21580: PUSH
21581: LD_EXP 27
21585: PUSH
21586: LD_VAR 0 2
21590: ARRAY
21591: PUSH
21592: LD_EXP 61
21596: PUSH
21597: LD_VAR 0 2
21601: ARRAY
21602: DIFF
21603: PUSH
21604: FOR_IN
21605: IFFALSE 21796
// if GetClass ( i ) = class_sniper then
21607: LD_VAR 0 3
21611: PPUSH
21612: CALL_OW 257
21616: PUSH
21617: LD_INT 5
21619: EQUAL
21620: IFFALSE 21794
// begin temp_list = GetTaskList ( i ) ;
21622: LD_ADDR_VAR 0 4
21626: PUSH
21627: LD_VAR 0 3
21631: PPUSH
21632: CALL_OW 437
21636: ST_TO_ADDR
// if temp_list > 0 then
21637: LD_VAR 0 4
21641: PUSH
21642: LD_INT 0
21644: GREATER
21645: IFFALSE 21667
// if temp_list [ 1 ] [ 1 ] = n then
21647: LD_VAR 0 4
21651: PUSH
21652: LD_INT 1
21654: ARRAY
21655: PUSH
21656: LD_INT 1
21658: ARRAY
21659: PUSH
21660: LD_STRING n
21662: EQUAL
21663: IFFALSE 21667
// continue ;
21665: GO 21604
// un1 = Attacks ( i ) ;
21667: LD_ADDR_VAR 0 5
21671: PUSH
21672: LD_VAR 0 3
21676: PPUSH
21677: CALL_OW 320
21681: ST_TO_ADDR
// if un1 > 0 and GetType ( un1 ) = unit_human then
21682: LD_VAR 0 5
21686: PUSH
21687: LD_INT 0
21689: GREATER
21690: PUSH
21691: LD_VAR 0 5
21695: PPUSH
21696: CALL_OW 247
21700: PUSH
21701: LD_INT 1
21703: EQUAL
21704: AND
21705: IFFALSE 21794
// begin val = true ;
21707: LD_ADDR_VAR 0 8
21711: PUSH
21712: LD_INT 1
21714: ST_TO_ADDR
// if sopo_cooldown >= i then
21715: LD_VAR 0 9
21719: PUSH
21720: LD_VAR 0 3
21724: GREATEREQUAL
21725: IFFALSE 21751
// if sopo_cooldown [ i ] > 0 0$0 then
21727: LD_VAR 0 9
21731: PUSH
21732: LD_VAR 0 3
21736: ARRAY
21737: PUSH
21738: LD_INT 0
21740: GREATER
21741: IFFALSE 21751
// val = false ;
21743: LD_ADDR_VAR 0 8
21747: PUSH
21748: LD_INT 0
21750: ST_TO_ADDR
// if val then
21751: LD_VAR 0 8
21755: IFFALSE 21794
// begin ComAttackSoporific ( i , un1 ) ;
21757: LD_VAR 0 3
21761: PPUSH
21762: LD_VAR 0 5
21766: PPUSH
21767: CALL_OW 166
// sopo_cooldown = Replace ( sopo_cooldown , i , 0 0$10 ) ;
21771: LD_ADDR_VAR 0 9
21775: PUSH
21776: LD_VAR 0 9
21780: PPUSH
21781: LD_VAR 0 3
21785: PPUSH
21786: LD_INT 350
21788: PPUSH
21789: CALL_OW 1
21793: ST_TO_ADDR
// end ; end ; end ;
21794: GO 21604
21796: POP
21797: POP
// end ;
21798: GO 21457
21800: POP
21801: POP
// until false ;
21802: LD_INT 0
21804: IFFALSE 21440
// end ;
21806: PPOPN 9
21808: END
// every 0 0$1 do var base , side , val , temp_value , temp_list ;
21809: GO 21811
21811: DISABLE
21812: LD_INT 0
21814: PPUSH
21815: PPUSH
21816: PPUSH
21817: PPUSH
21818: PPUSH
// begin repeat wait ( 1 ) ;
21819: LD_INT 1
21821: PPUSH
21822: CALL_OW 67
// for base in [ 3 ] do
21826: LD_ADDR_VAR 0 1
21830: PUSH
21831: LD_INT 3
21833: PUSH
21834: EMPTY
21835: LIST
21836: PUSH
21837: FOR_IN
21838: IFFALSE 22281
// begin side = GetBaseSide ( base ) ;
21840: LD_ADDR_VAR 0 2
21844: PUSH
21845: LD_VAR 0 1
21849: PPUSH
21850: CALL 18937 0 1
21854: ST_TO_ADDR
// val = 1 ;
21855: LD_ADDR_VAR 0 3
21859: PUSH
21860: LD_INT 1
21862: ST_TO_ADDR
// while val <= ai_time_shift_hexes_underway [ base ] do
21863: LD_VAR 0 3
21867: PUSH
21868: LD_EXP 97
21872: PUSH
21873: LD_VAR 0 1
21877: ARRAY
21878: LESSEQUAL
21879: IFFALSE 22279
// begin if tick = ai_time_shift_hexes_underway [ base ] [ val ] [ 4 ] then
21881: LD_OWVAR 1
21885: PUSH
21886: LD_EXP 97
21890: PUSH
21891: LD_VAR 0 1
21895: ARRAY
21896: PUSH
21897: LD_VAR 0 3
21901: ARRAY
21902: PUSH
21903: LD_INT 4
21905: ARRAY
21906: EQUAL
21907: IFFALSE 21925
// begin val = val + 1 ;
21909: LD_ADDR_VAR 0 3
21913: PUSH
21914: LD_VAR 0 3
21918: PUSH
21919: LD_INT 1
21921: PLUS
21922: ST_TO_ADDR
// continue ;
21923: GO 21863
// end ; temp_value = false ;
21925: LD_ADDR_VAR 0 4
21929: PUSH
21930: LD_INT 0
21932: ST_TO_ADDR
// temp_list = GetTaskList ( ai_time_shift_hexes_underway [ base ] [ val ] [ 3 ] ) ;
21933: LD_ADDR_VAR 0 5
21937: PUSH
21938: LD_EXP 97
21942: PUSH
21943: LD_VAR 0 1
21947: ARRAY
21948: PUSH
21949: LD_VAR 0 3
21953: ARRAY
21954: PUSH
21955: LD_INT 3
21957: ARRAY
21958: PPUSH
21959: CALL_OW 437
21963: ST_TO_ADDR
// if IsOk ( ai_time_shift_hexes_underway [ base ] [ val ] [ 3 ] ) then
21964: LD_EXP 97
21968: PUSH
21969: LD_VAR 0 1
21973: ARRAY
21974: PUSH
21975: LD_VAR 0 3
21979: ARRAY
21980: PUSH
21981: LD_INT 3
21983: ARRAY
21984: PPUSH
21985: CALL_OW 302
21989: IFFALSE 22040
// begin if temp_list = 0 then
21991: LD_VAR 0 5
21995: PUSH
21996: LD_INT 0
21998: EQUAL
21999: IFFALSE 22011
// temp_value = true else
22001: LD_ADDR_VAR 0 4
22005: PUSH
22006: LD_INT 1
22008: ST_TO_ADDR
22009: GO 22038
// if not temp_list [ 1 ] [ 1 ] = & then
22011: LD_VAR 0 5
22015: PUSH
22016: LD_INT 1
22018: ARRAY
22019: PUSH
22020: LD_INT 1
22022: ARRAY
22023: PUSH
22024: LD_STRING &
22026: EQUAL
22027: NOT
22028: IFFALSE 22038
// temp_value = true ;
22030: LD_ADDR_VAR 0 4
22034: PUSH
22035: LD_INT 1
22037: ST_TO_ADDR
// end else
22038: GO 22093
// begin temp_list = Delete ( ai_time_shift_hexes_underway [ base ] , val ) ;
22040: LD_ADDR_VAR 0 5
22044: PUSH
22045: LD_EXP 97
22049: PUSH
22050: LD_VAR 0 1
22054: ARRAY
22055: PPUSH
22056: LD_VAR 0 3
22060: PPUSH
22061: CALL_OW 3
22065: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
22066: LD_ADDR_EXP 97
22070: PUSH
22071: LD_EXP 97
22075: PPUSH
22076: LD_VAR 0 1
22080: PPUSH
22081: LD_VAR 0 5
22085: PPUSH
22086: CALL_OW 1
22090: ST_TO_ADDR
// continue ;
22091: GO 21863
// end ; if temp_value then
22093: LD_VAR 0 4
22097: IFFALSE 22263
// 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 ] ] ) ;
22099: LD_ADDR_VAR 0 5
22103: PUSH
22104: LD_EXP 96
22108: PUSH
22109: LD_VAR 0 1
22113: ARRAY
22114: PPUSH
22115: LD_INT 1
22117: PPUSH
22118: LD_EXP 97
22122: PUSH
22123: LD_VAR 0 1
22127: ARRAY
22128: PUSH
22129: LD_VAR 0 3
22133: ARRAY
22134: PUSH
22135: LD_INT 1
22137: ARRAY
22138: PUSH
22139: LD_EXP 97
22143: PUSH
22144: LD_VAR 0 1
22148: ARRAY
22149: PUSH
22150: LD_VAR 0 3
22154: ARRAY
22155: PUSH
22156: LD_INT 2
22158: ARRAY
22159: PUSH
22160: LD_EXP 95
22164: PUSH
22165: LD_VAR 0 2
22169: ARRAY
22170: PUSH
22171: LD_INT 1
22173: ARRAY
22174: PUSH
22175: EMPTY
22176: LIST
22177: LIST
22178: LIST
22179: PPUSH
22180: CALL_OW 2
22184: ST_TO_ADDR
// ai_time_shift_hexes = Replace ( ai_time_shift_hexes , base , temp_list ) ;
22185: LD_ADDR_EXP 96
22189: PUSH
22190: LD_EXP 96
22194: PPUSH
22195: LD_VAR 0 1
22199: PPUSH
22200: LD_VAR 0 5
22204: PPUSH
22205: CALL_OW 1
22209: ST_TO_ADDR
// temp_list = Delete ( ai_time_shift_hexes_underway [ base ] , val ) ;
22210: LD_ADDR_VAR 0 5
22214: PUSH
22215: LD_EXP 97
22219: PUSH
22220: LD_VAR 0 1
22224: ARRAY
22225: PPUSH
22226: LD_VAR 0 3
22230: PPUSH
22231: CALL_OW 3
22235: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
22236: LD_ADDR_EXP 97
22240: PUSH
22241: LD_EXP 97
22245: PPUSH
22246: LD_VAR 0 1
22250: PPUSH
22251: LD_VAR 0 5
22255: PPUSH
22256: CALL_OW 1
22260: ST_TO_ADDR
// continue ;
22261: GO 21863
// end ; val = val + 1 ;
22263: LD_ADDR_VAR 0 3
22267: PUSH
22268: LD_VAR 0 3
22272: PUSH
22273: LD_INT 1
22275: PLUS
22276: ST_TO_ADDR
// end ;
22277: GO 21863
// end ;
22279: GO 21837
22281: POP
22282: POP
// until false ;
22283: LD_INT 0
22285: IFFALSE 21819
// end ;
22287: PPOPN 5
22289: END
// every 0 0$1 + 0 0$0.3 do var base , val , temp_list , time ;
22290: GO 22292
22292: DISABLE
22293: LD_INT 0
22295: PPUSH
22296: PPUSH
22297: PPUSH
22298: PPUSH
// begin repeat wait ( 0 0$1 ) ;
22299: LD_INT 35
22301: PPUSH
22302: CALL_OW 67
// for base in [ 3 ] do
22306: LD_ADDR_VAR 0 1
22310: PUSH
22311: LD_INT 3
22313: PUSH
22314: EMPTY
22315: LIST
22316: PUSH
22317: FOR_IN
22318: IFFALSE 22550
// begin val = 1 ;
22320: LD_ADDR_VAR 0 2
22324: PUSH
22325: LD_INT 1
22327: ST_TO_ADDR
// while val <= ai_time_shift_hexes [ base ] do
22328: LD_VAR 0 2
22332: PUSH
22333: LD_EXP 96
22337: PUSH
22338: LD_VAR 0 1
22342: ARRAY
22343: LESSEQUAL
22344: IFFALSE 22548
// begin time = ai_time_shift_hexes [ base ] [ val ] [ 3 ] - 0 0$1 ;
22346: LD_ADDR_VAR 0 4
22350: PUSH
22351: LD_EXP 96
22355: PUSH
22356: LD_VAR 0 1
22360: ARRAY
22361: PUSH
22362: LD_VAR 0 2
22366: ARRAY
22367: PUSH
22368: LD_INT 3
22370: ARRAY
22371: PUSH
22372: LD_INT 35
22374: MINUS
22375: ST_TO_ADDR
// if time <= 0 0$0 then
22376: LD_VAR 0 4
22380: PUSH
22381: LD_INT 0
22383: LESSEQUAL
22384: IFFALSE 22441
// begin temp_list = Delete ( ai_time_shift_hexes [ base ] , val ) ;
22386: LD_ADDR_VAR 0 3
22390: PUSH
22391: LD_EXP 96
22395: PUSH
22396: LD_VAR 0 1
22400: ARRAY
22401: PPUSH
22402: LD_VAR 0 2
22406: PPUSH
22407: CALL_OW 3
22411: ST_TO_ADDR
// ai_time_shift_hexes = Replace ( ai_time_shift_hexes , base , temp_list ) ;
22412: LD_ADDR_EXP 96
22416: PUSH
22417: LD_EXP 96
22421: PPUSH
22422: LD_VAR 0 1
22426: PPUSH
22427: LD_VAR 0 3
22431: PPUSH
22432: CALL_OW 1
22436: ST_TO_ADDR
// continue ;
22437: GO 22328
// end else
22439: GO 22532
// begin temp_list = Replace ( ai_time_shift_hexes [ base ] [ val ] , 3 , time ) ;
22441: LD_ADDR_VAR 0 3
22445: PUSH
22446: LD_EXP 96
22450: PUSH
22451: LD_VAR 0 1
22455: ARRAY
22456: PUSH
22457: LD_VAR 0 2
22461: ARRAY
22462: PPUSH
22463: LD_INT 3
22465: PPUSH
22466: LD_VAR 0 4
22470: PPUSH
22471: CALL_OW 1
22475: ST_TO_ADDR
// temp_list = Replace ( ai_time_shift_hexes [ base ] , val , temp_list ) ;
22476: LD_ADDR_VAR 0 3
22480: PUSH
22481: LD_EXP 96
22485: PUSH
22486: LD_VAR 0 1
22490: ARRAY
22491: PPUSH
22492: LD_VAR 0 2
22496: PPUSH
22497: LD_VAR 0 3
22501: PPUSH
22502: CALL_OW 1
22506: ST_TO_ADDR
// ai_time_shift_hexes = Replace ( ai_time_shift_hexes , base , temp_list ) ;
22507: LD_ADDR_EXP 96
22511: PUSH
22512: LD_EXP 96
22516: PPUSH
22517: LD_VAR 0 1
22521: PPUSH
22522: LD_VAR 0 3
22526: PPUSH
22527: CALL_OW 1
22531: ST_TO_ADDR
// end ; val = val + 1 ;
22532: LD_ADDR_VAR 0 2
22536: PUSH
22537: LD_VAR 0 2
22541: PUSH
22542: LD_INT 1
22544: PLUS
22545: ST_TO_ADDR
// end ;
22546: GO 22328
// end ;
22548: GO 22317
22550: POP
22551: POP
// until false ;
22552: LD_INT 0
22554: IFFALSE 22299
// end ;
22556: PPOPN 4
22558: 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
22559: LD_INT 0
22561: PPUSH
22562: PPUSH
22563: PPUSH
22564: PPUSH
22565: PPUSH
22566: PPUSH
22567: PPUSH
22568: PPUSH
22569: PPUSH
22570: PPUSH
// if human_list = 0 then
22571: LD_VAR 0 2
22575: PUSH
22576: LD_INT 0
22578: EQUAL
22579: IFFALSE 22583
// exit ;
22581: GO 23861
// area = GetBaseArea ( base ) ;
22583: LD_ADDR_VAR 0 13
22587: PUSH
22588: LD_VAR 0 1
22592: PPUSH
22593: CALL 18845 0 1
22597: ST_TO_ADDR
// under_attack = BaseUnderAttack ( base , - 1 ) ;
22598: LD_ADDR_VAR 0 17
22602: PUSH
22603: LD_VAR 0 1
22607: PPUSH
22608: LD_INT 1
22610: NEG
22611: PPUSH
22612: CALL 32934 0 2
22616: ST_TO_ADDR
// if not GetClass ( human_list [ 1 ] ) in [ class_engineer , class_apeman_engineer , class_mechanic , class_scientistic ] and building_list > 0 then
22617: LD_VAR 0 2
22621: PUSH
22622: LD_INT 1
22624: ARRAY
22625: PPUSH
22626: CALL_OW 257
22630: PUSH
22631: LD_INT 2
22633: PUSH
22634: LD_INT 16
22636: PUSH
22637: LD_INT 3
22639: PUSH
22640: LD_INT 4
22642: PUSH
22643: EMPTY
22644: LIST
22645: LIST
22646: LIST
22647: LIST
22648: IN
22649: NOT
22650: PUSH
22651: LD_VAR 0 3
22655: PUSH
22656: LD_INT 0
22658: GREATER
22659: AND
22660: IFFALSE 22749
// begin val = 0 ;
22662: LD_ADDR_VAR 0 11
22666: PUSH
22667: LD_INT 0
22669: ST_TO_ADDR
// for i in human_list do
22670: LD_ADDR_VAR 0 9
22674: PUSH
22675: LD_VAR 0 2
22679: PUSH
22680: FOR_IN
22681: IFFALSE 22725
// if GetClass ( i ) in [ class_sniper , class_mortar , class_bazooker ] then
22683: LD_VAR 0 9
22687: PPUSH
22688: CALL_OW 257
22692: PUSH
22693: LD_INT 5
22695: PUSH
22696: LD_INT 8
22698: PUSH
22699: LD_INT 9
22701: PUSH
22702: EMPTY
22703: LIST
22704: LIST
22705: LIST
22706: IN
22707: IFFALSE 22723
// val = val + 1 ;
22709: LD_ADDR_VAR 0 11
22713: PUSH
22714: LD_VAR 0 11
22718: PUSH
22719: LD_INT 1
22721: PLUS
22722: ST_TO_ADDR
22723: GO 22680
22725: POP
22726: POP
// special_un_count = val div ( building_list + 0 ) ;
22727: LD_ADDR_VAR 0 14
22731: PUSH
22732: LD_VAR 0 11
22736: PUSH
22737: LD_VAR 0 3
22741: PUSH
22742: LD_INT 0
22744: PLUS
22745: DIV
22746: ST_TO_ADDR
// end else
22747: GO 22757
// special_un_count = 0 ;
22749: LD_ADDR_VAR 0 14
22753: PUSH
22754: LD_INT 0
22756: ST_TO_ADDR
// val = building_list + 0 ;
22757: LD_ADDR_VAR 0 11
22761: PUSH
22762: LD_VAR 0 3
22766: PUSH
22767: LD_INT 0
22769: PLUS
22770: ST_TO_ADDR
// while val > 0 and human_list > 0 do
22771: LD_VAR 0 11
22775: PUSH
22776: LD_INT 0
22778: GREATER
22779: PUSH
22780: LD_VAR 0 2
22784: PUSH
22785: LD_INT 0
22787: GREATER
22788: AND
22789: IFFALSE 23595
// begin temp_list = [ ] ;
22791: LD_ADDR_VAR 0 10
22795: PUSH
22796: EMPTY
22797: ST_TO_ADDR
// for i in human_list do
22798: LD_ADDR_VAR 0 9
22802: PUSH
22803: LD_VAR 0 2
22807: PUSH
22808: FOR_IN
22809: IFFALSE 22852
// if IsInUnit ( i ) = building_list [ val ] then
22811: LD_VAR 0 9
22815: PPUSH
22816: CALL_OW 310
22820: PUSH
22821: LD_VAR 0 3
22825: PUSH
22826: LD_VAR 0 11
22830: ARRAY
22831: EQUAL
22832: IFFALSE 22850
// temp_list = temp_list ^ i ;
22834: LD_ADDR_VAR 0 10
22838: PUSH
22839: LD_VAR 0 10
22843: PUSH
22844: LD_VAR 0 9
22848: ADD
22849: ST_TO_ADDR
22850: GO 22808
22852: POP
22853: POP
// human_list = temp_list ^ ( human_list diff temp_list ) ;
22854: LD_ADDR_VAR 0 2
22858: PUSH
22859: LD_VAR 0 10
22863: PUSH
22864: LD_VAR 0 2
22868: PUSH
22869: LD_VAR 0 10
22873: DIFF
22874: ADD
22875: ST_TO_ADDR
// counter = 0 ;
22876: LD_ADDR_VAR 0 15
22880: PUSH
22881: LD_INT 0
22883: ST_TO_ADDR
// temp_list = [ ] ;
22884: LD_ADDR_VAR 0 10
22888: PUSH
22889: EMPTY
22890: ST_TO_ADDR
// for i = 1 to human_list div val do
22891: LD_ADDR_VAR 0 9
22895: PUSH
22896: DOUBLE
22897: LD_INT 1
22899: DEC
22900: ST_TO_ADDR
22901: LD_VAR 0 2
22905: PUSH
22906: LD_VAR 0 11
22910: DIV
22911: PUSH
22912: FOR_TO
22913: IFFALSE 23278
// begin if i > building_capacity then
22915: LD_VAR 0 9
22919: PUSH
22920: LD_VAR 0 5
22924: GREATER
22925: IFFALSE 22929
// break ;
22927: GO 23278
// if special_un_count = 0 then
22929: LD_VAR 0 14
22933: PUSH
22934: LD_INT 0
22936: EQUAL
22937: IFFALSE 22979
// begin temp_list = temp_list ^ human_list [ 1 ] ;
22939: LD_ADDR_VAR 0 10
22943: PUSH
22944: LD_VAR 0 10
22948: PUSH
22949: LD_VAR 0 2
22953: PUSH
22954: LD_INT 1
22956: ARRAY
22957: ADD
22958: ST_TO_ADDR
// human_list = Delete ( human_list , 1 ) ;
22959: LD_ADDR_VAR 0 2
22963: PUSH
22964: LD_VAR 0 2
22968: PPUSH
22969: LD_INT 1
22971: PPUSH
22972: CALL_OW 3
22976: ST_TO_ADDR
// end else
22977: GO 23276
// if counter = special_un_count then
22979: LD_VAR 0 15
22983: PUSH
22984: LD_VAR 0 14
22988: EQUAL
22989: IFFALSE 23128
// begin temp_unit = 0 ;
22991: LD_ADDR_VAR 0 12
22995: PUSH
22996: LD_INT 0
22998: ST_TO_ADDR
// for k = 1 to human_list do
22999: LD_ADDR_VAR 0 16
23003: PUSH
23004: DOUBLE
23005: LD_INT 1
23007: DEC
23008: ST_TO_ADDR
23009: LD_VAR 0 2
23013: PUSH
23014: FOR_TO
23015: IFFALSE 23064
// if not GetClass ( human_list [ k ] ) in [ class_sniper , class_mortar , class_bazooker ] then
23017: LD_VAR 0 2
23021: PUSH
23022: LD_VAR 0 16
23026: ARRAY
23027: PPUSH
23028: CALL_OW 257
23032: PUSH
23033: LD_INT 5
23035: PUSH
23036: LD_INT 8
23038: PUSH
23039: LD_INT 9
23041: PUSH
23042: EMPTY
23043: LIST
23044: LIST
23045: LIST
23046: IN
23047: NOT
23048: IFFALSE 23062
// begin temp_unit = k ;
23050: LD_ADDR_VAR 0 12
23054: PUSH
23055: LD_VAR 0 16
23059: ST_TO_ADDR
// break ;
23060: GO 23064
// end ;
23062: GO 23014
23064: POP
23065: POP
// if temp_unit = 0 then
23066: LD_VAR 0 12
23070: PUSH
23071: LD_INT 0
23073: EQUAL
23074: IFFALSE 23084
// temp_unit = 1 ;
23076: LD_ADDR_VAR 0 12
23080: PUSH
23081: LD_INT 1
23083: ST_TO_ADDR
// temp_list = temp_list ^ human_list [ temp_unit ] ;
23084: LD_ADDR_VAR 0 10
23088: PUSH
23089: LD_VAR 0 10
23093: PUSH
23094: LD_VAR 0 2
23098: PUSH
23099: LD_VAR 0 12
23103: ARRAY
23104: ADD
23105: ST_TO_ADDR
// human_list = Delete ( human_list , temp_unit ) ;
23106: LD_ADDR_VAR 0 2
23110: PUSH
23111: LD_VAR 0 2
23115: PPUSH
23116: LD_VAR 0 12
23120: PPUSH
23121: CALL_OW 3
23125: ST_TO_ADDR
// end else
23126: GO 23276
// begin counter = counter + 1 ;
23128: LD_ADDR_VAR 0 15
23132: PUSH
23133: LD_VAR 0 15
23137: PUSH
23138: LD_INT 1
23140: PLUS
23141: ST_TO_ADDR
// temp_unit = 0 ;
23142: LD_ADDR_VAR 0 12
23146: PUSH
23147: LD_INT 0
23149: ST_TO_ADDR
// for k = 1 to human_list do
23150: LD_ADDR_VAR 0 16
23154: PUSH
23155: DOUBLE
23156: LD_INT 1
23158: DEC
23159: ST_TO_ADDR
23160: LD_VAR 0 2
23164: PUSH
23165: FOR_TO
23166: IFFALSE 23214
// if GetClass ( human_list [ k ] ) in [ class_sniper , class_mortar , class_bazooker ] then
23168: LD_VAR 0 2
23172: PUSH
23173: LD_VAR 0 16
23177: ARRAY
23178: PPUSH
23179: CALL_OW 257
23183: PUSH
23184: LD_INT 5
23186: PUSH
23187: LD_INT 8
23189: PUSH
23190: LD_INT 9
23192: PUSH
23193: EMPTY
23194: LIST
23195: LIST
23196: LIST
23197: IN
23198: IFFALSE 23212
// begin temp_unit = k ;
23200: LD_ADDR_VAR 0 12
23204: PUSH
23205: LD_VAR 0 16
23209: ST_TO_ADDR
// break ;
23210: GO 23214
// end ;
23212: GO 23165
23214: POP
23215: POP
// if temp_unit = 0 then
23216: LD_VAR 0 12
23220: PUSH
23221: LD_INT 0
23223: EQUAL
23224: IFFALSE 23234
// temp_unit = 1 ;
23226: LD_ADDR_VAR 0 12
23230: PUSH
23231: LD_INT 1
23233: ST_TO_ADDR
// temp_list = temp_list ^ human_list [ temp_unit ] ;
23234: LD_ADDR_VAR 0 10
23238: PUSH
23239: LD_VAR 0 10
23243: PUSH
23244: LD_VAR 0 2
23248: PUSH
23249: LD_VAR 0 12
23253: ARRAY
23254: ADD
23255: ST_TO_ADDR
// human_list = Delete ( human_list , temp_unit ) ;
23256: LD_ADDR_VAR 0 2
23260: PUSH
23261: LD_VAR 0 2
23265: PPUSH
23266: LD_VAR 0 12
23270: PPUSH
23271: CALL_OW 3
23275: ST_TO_ADDR
// end ; end ;
23276: GO 22912
23278: POP
23279: POP
// for i in temp_list do
23280: LD_ADDR_VAR 0 9
23284: PUSH
23285: LD_VAR 0 10
23289: PUSH
23290: FOR_IN
23291: IFFALSE 23577
// begin temp_unit = IsInUnit ( i ) ;
23293: LD_ADDR_VAR 0 12
23297: PUSH
23298: LD_VAR 0 9
23302: PPUSH
23303: CALL_OW 310
23307: ST_TO_ADDR
// if temp_unit <> building_list [ val ] then
23308: LD_VAR 0 12
23312: PUSH
23313: LD_VAR 0 3
23317: PUSH
23318: LD_VAR 0 11
23322: ARRAY
23323: NONEQUAL
23324: IFFALSE 23575
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
23326: LD_VAR 0 9
23330: PPUSH
23331: CALL_OW 310
23335: PPUSH
23336: CALL_OW 247
23340: PUSH
23341: LD_INT 2
23343: DOUBLE
23344: EQUAL
23345: IFTRUE 23349
23347: GO 23361
23349: POP
// ComExitVehicle ( i ) ; unit_building :
23350: LD_VAR 0 9
23354: PPUSH
23355: CALL_OW 121
23359: GO 23575
23361: LD_INT 3
23363: DOUBLE
23364: EQUAL
23365: IFTRUE 23369
23367: GO 23381
23369: POP
// ComExitBuilding ( i ) ; else
23370: LD_VAR 0 9
23374: PPUSH
23375: CALL_OW 122
23379: GO 23575
23381: POP
// begin if IsInArea ( i , area ) or not aggressive_pullback then
23382: LD_VAR 0 9
23386: PPUSH
23387: LD_VAR 0 13
23391: PPUSH
23392: CALL_OW 308
23396: PUSH
23397: LD_VAR 0 7
23401: NOT
23402: OR
23403: IFFALSE 23427
// ComEnterUnit ( i , building_list [ val ] ) else
23405: LD_VAR 0 9
23409: PPUSH
23410: LD_VAR 0 3
23414: PUSH
23415: LD_VAR 0 11
23419: ARRAY
23420: PPUSH
23421: CALL_OW 120
23425: GO 23468
// ComAgressiveMove ( i , GetX ( building_list [ val ] ) , GetY ( building_list [ val ] ) ) ;
23427: LD_VAR 0 9
23431: PPUSH
23432: LD_VAR 0 3
23436: PUSH
23437: LD_VAR 0 11
23441: ARRAY
23442: PPUSH
23443: CALL_OW 250
23447: PPUSH
23448: LD_VAR 0 3
23452: PUSH
23453: LD_VAR 0 11
23457: ARRAY
23458: PPUSH
23459: CALL_OW 251
23463: PPUSH
23464: CALL_OW 114
// if change_to_this_class > 0 then
23468: LD_VAR 0 4
23472: PUSH
23473: LD_INT 0
23475: GREATER
23476: IFFALSE 23575
// begin if GetClass ( i ) <> change_to_this_class and GetNation ( i ) <> nation_nature then
23478: LD_VAR 0 9
23482: PPUSH
23483: CALL_OW 257
23487: PUSH
23488: LD_VAR 0 4
23492: NONEQUAL
23493: PUSH
23494: LD_VAR 0 9
23498: PPUSH
23499: CALL_OW 248
23503: PUSH
23504: LD_INT 0
23506: NONEQUAL
23507: AND
23508: IFFALSE 23575
// 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
23510: LD_VAR 0 4
23514: PUSH
23515: LD_INT 5
23517: PUSH
23518: LD_INT 8
23520: PUSH
23521: LD_INT 9
23523: PUSH
23524: EMPTY
23525: LIST
23526: LIST
23527: LIST
23528: IN
23529: PUSH
23530: LD_VAR 0 3
23534: PUSH
23535: LD_VAR 0 11
23539: ARRAY
23540: PPUSH
23541: CALL_OW 266
23545: PUSH
23546: LD_INT 5
23548: PUSH
23549: LD_INT 35
23551: PUSH
23552: EMPTY
23553: LIST
23554: LIST
23555: IN
23556: NOT
23557: AND
23558: NOT
23559: IFFALSE 23575
// AddComChangeProfession ( i , change_to_this_class ) ;
23561: LD_VAR 0 9
23565: PPUSH
23566: LD_VAR 0 4
23570: PPUSH
23571: CALL_OW 183
// end ; end ; end ; end ;
23575: GO 23290
23577: POP
23578: POP
// val = val - 1 ;
23579: LD_ADDR_VAR 0 11
23583: PUSH
23584: LD_VAR 0 11
23588: PUSH
23589: LD_INT 1
23591: MINUS
23592: ST_TO_ADDR
// end ;
23593: GO 22771
// if human_list > 0 then
23595: LD_VAR 0 2
23599: PUSH
23600: LD_INT 0
23602: GREATER
23603: IFFALSE 23861
// if ai_building_under_construction [ base ] > 0 and help_building and not under_attack then
23605: LD_EXP 60
23609: PUSH
23610: LD_VAR 0 1
23614: ARRAY
23615: PUSH
23616: LD_INT 0
23618: GREATER
23619: PUSH
23620: LD_VAR 0 6
23624: AND
23625: PUSH
23626: LD_VAR 0 17
23630: NOT
23631: AND
23632: IFFALSE 23708
// begin for i in GetHumansOutOfUnits ( human_list ) do
23634: LD_ADDR_VAR 0 9
23638: PUSH
23639: LD_VAR 0 2
23643: PPUSH
23644: CALL 32829 0 1
23648: PUSH
23649: FOR_IN
23650: IFFALSE 23704
// SetTaskList ( i , [ [ h , 0 , 0 , ai_building_under_construction [ base ] , 0 , 0 , 0 ] ] ) ;
23652: LD_VAR 0 9
23656: PPUSH
23657: LD_STRING h
23659: PUSH
23660: LD_INT 0
23662: PUSH
23663: LD_INT 0
23665: PUSH
23666: LD_EXP 60
23670: PUSH
23671: LD_VAR 0 1
23675: ARRAY
23676: PUSH
23677: LD_INT 0
23679: PUSH
23680: LD_INT 0
23682: PUSH
23683: LD_INT 0
23685: PUSH
23686: EMPTY
23687: LIST
23688: LIST
23689: LIST
23690: LIST
23691: LIST
23692: LIST
23693: LIST
23694: PUSH
23695: EMPTY
23696: LIST
23697: PPUSH
23698: CALL_OW 446
23702: GO 23649
23704: POP
23705: POP
// end else
23706: GO 23861
// for i in GetHumansOutOfUnits ( human_list ) do
23708: LD_ADDR_VAR 0 9
23712: PUSH
23713: LD_VAR 0 2
23717: PPUSH
23718: CALL 32829 0 1
23722: PUSH
23723: FOR_IN
23724: IFFALSE 23859
// if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
23726: LD_VAR 0 9
23730: PPUSH
23731: LD_EXP 59
23735: PUSH
23736: LD_VAR 0 1
23740: ARRAY
23741: PUSH
23742: LD_INT 1
23744: ARRAY
23745: PPUSH
23746: LD_EXP 59
23750: PUSH
23751: LD_VAR 0 1
23755: ARRAY
23756: PUSH
23757: LD_INT 2
23759: ARRAY
23760: PPUSH
23761: CALL_OW 297
23765: PUSH
23766: LD_INT 4
23768: GREATER
23769: IFFALSE 23857
// if aggressive_pullback then
23771: LD_VAR 0 7
23775: IFFALSE 23818
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) else
23777: LD_VAR 0 9
23781: PPUSH
23782: LD_EXP 59
23786: PUSH
23787: LD_VAR 0 1
23791: ARRAY
23792: PUSH
23793: LD_INT 1
23795: ARRAY
23796: PPUSH
23797: LD_EXP 59
23801: PUSH
23802: LD_VAR 0 1
23806: ARRAY
23807: PUSH
23808: LD_INT 2
23810: ARRAY
23811: PPUSH
23812: CALL_OW 114
23816: GO 23857
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
23818: LD_VAR 0 9
23822: PPUSH
23823: LD_EXP 59
23827: PUSH
23828: LD_VAR 0 1
23832: ARRAY
23833: PUSH
23834: LD_INT 1
23836: ARRAY
23837: PPUSH
23838: LD_EXP 59
23842: PUSH
23843: LD_VAR 0 1
23847: ARRAY
23848: PUSH
23849: LD_INT 2
23851: ARRAY
23852: PPUSH
23853: CALL_OW 111
23857: GO 23723
23859: POP
23860: POP
// end ;
23861: LD_VAR 0 8
23865: 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 ;
23866: GO 23868
23868: DISABLE
23869: LD_INT 0
23871: PPUSH
23872: PPUSH
23873: PPUSH
23874: PPUSH
23875: PPUSH
23876: PPUSH
23877: PPUSH
23878: PPUSH
23879: PPUSH
23880: PPUSH
23881: PPUSH
23882: PPUSH
23883: PPUSH
23884: PPUSH
23885: PPUSH
23886: PPUSH
23887: PPUSH
23888: PPUSH
23889: PPUSH
23890: PPUSH
23891: PPUSH
23892: PPUSH
// begin crane_is_refueling = [ false , false , false , false ] ;
23893: LD_ADDR_VAR 0 21
23897: PUSH
23898: LD_INT 0
23900: PUSH
23901: LD_INT 0
23903: PUSH
23904: LD_INT 0
23906: PUSH
23907: LD_INT 0
23909: PUSH
23910: EMPTY
23911: LIST
23912: LIST
23913: LIST
23914: LIST
23915: ST_TO_ADDR
// try_rebuild_again_time = [ ] ;
23916: LD_ADDR_VAR 0 22
23920: PUSH
23921: EMPTY
23922: ST_TO_ADDR
// for base in ai_bases do
23923: LD_ADDR_VAR 0 9
23927: PUSH
23928: LD_EXP 26
23932: PUSH
23933: FOR_IN
23934: IFFALSE 23961
// try_rebuild_again_time = Replace ( try_rebuild_again_time , base , 0 0$0 ) ;
23936: LD_ADDR_VAR 0 22
23940: PUSH
23941: LD_VAR 0 22
23945: PPUSH
23946: LD_VAR 0 9
23950: PPUSH
23951: LD_INT 0
23953: PPUSH
23954: CALL_OW 1
23958: ST_TO_ADDR
23959: GO 23933
23961: POP
23962: POP
// repeat if ai_bases = 0 then
23963: LD_EXP 26
23967: PUSH
23968: LD_INT 0
23970: EQUAL
23971: IFFALSE 23975
// exit ;
23973: GO 31620
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
23975: LD_INT 35
23977: PUSH
23978: LD_EXP 26
23982: PUSH
23983: LD_INT 0
23985: PLUS
23986: MOD
23987: PPUSH
23988: CALL_OW 67
// for base in ai_bases do
23992: LD_ADDR_VAR 0 9
23996: PUSH
23997: LD_EXP 26
24001: PUSH
24002: FOR_IN
24003: IFFALSE 31614
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
24005: LD_INT 35
24007: PUSH
24008: LD_EXP 26
24012: PUSH
24013: LD_INT 0
24015: PLUS
24016: DIV
24017: PPUSH
24018: CALL_OW 67
// side = GetBaseSide ( base ) ;
24022: LD_ADDR_VAR 0 1
24026: PUSH
24027: LD_VAR 0 9
24031: PPUSH
24032: CALL 18937 0 1
24036: ST_TO_ADDR
// under_attack := BaseUnderAttack ( base , - 1 ) ;
24037: LD_ADDR_VAR 0 19
24041: PUSH
24042: LD_VAR 0 9
24046: PPUSH
24047: LD_INT 1
24049: NEG
24050: PPUSH
24051: CALL 32934 0 2
24055: ST_TO_ADDR
// if under_attack then
24056: LD_VAR 0 19
24060: IFFALSE 24107
// begin ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
24062: LD_ADDR_EXP 64
24066: PUSH
24067: LD_EXP 64
24071: PPUSH
24072: LD_VAR 0 9
24076: PPUSH
24077: LD_INT 0
24079: PPUSH
24080: CALL_OW 1
24084: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , [ ] ) ;
24085: LD_ADDR_EXP 65
24089: PUSH
24090: LD_EXP 65
24094: PPUSH
24095: LD_VAR 0 9
24099: PPUSH
24100: EMPTY
24101: PPUSH
24102: CALL_OW 1
24106: 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
24107: LD_EXP 67
24111: PUSH
24112: LD_VAR 0 9
24116: ARRAY
24117: PUSH
24118: LD_INT 0
24120: GREATER
24121: PUSH
24122: LD_EXP 29
24126: PUSH
24127: LD_VAR 0 9
24131: ARRAY
24132: PUSH
24133: LD_INT 0
24135: GREATER
24136: PUSH
24137: LD_VAR 0 22
24141: PUSH
24142: LD_VAR 0 9
24146: ARRAY
24147: PUSH
24148: LD_INT 700
24150: GREATEREQUAL
24151: OR
24152: AND
24153: IFFALSE 24202
// begin ai_cannot_rebuild_these_buildings = Replace ( ai_cannot_rebuild_these_buildings , base , [ ] ) ;
24155: LD_ADDR_EXP 67
24159: PUSH
24160: LD_EXP 67
24164: PPUSH
24165: LD_VAR 0 9
24169: PPUSH
24170: EMPTY
24171: PPUSH
24172: CALL_OW 1
24176: ST_TO_ADDR
// try_rebuild_again_time = Replace ( try_rebuild_again_time , base , 0 0$0 ) ;
24177: LD_ADDR_VAR 0 22
24181: PUSH
24182: LD_VAR 0 22
24186: PPUSH
24187: LD_VAR 0 9
24191: PPUSH
24192: LD_INT 0
24194: PPUSH
24195: CALL_OW 1
24199: ST_TO_ADDR
// end else
24200: GO 24237
// try_rebuild_again_time = Replace ( try_rebuild_again_time , base , try_rebuild_again_time [ base ] + 0 0$1 ) ;
24202: LD_ADDR_VAR 0 22
24206: PUSH
24207: LD_VAR 0 22
24211: PPUSH
24212: LD_VAR 0 9
24216: PPUSH
24217: LD_VAR 0 22
24221: PUSH
24222: LD_VAR 0 9
24226: ARRAY
24227: PUSH
24228: LD_INT 35
24230: PLUS
24231: PPUSH
24232: CALL_OW 1
24236: ST_TO_ADDR
// engineers_list = ai_engineers [ base ] diff ai_heal_these_humans [ base ] ;
24237: LD_ADDR_VAR 0 3
24241: PUSH
24242: LD_EXP 29
24246: PUSH
24247: LD_VAR 0 9
24251: ARRAY
24252: PUSH
24253: LD_EXP 61
24257: PUSH
24258: LD_VAR 0 9
24262: ARRAY
24263: DIFF
24264: ST_TO_ADDR
// apemen_engineers_list = ai_apemen_engineers [ base ] diff ai_heal_these_humans [ base ] ;
24265: LD_ADDR_VAR 0 10
24269: PUSH
24270: LD_EXP 34
24274: PUSH
24275: LD_VAR 0 9
24279: ARRAY
24280: PUSH
24281: LD_EXP 61
24285: PUSH
24286: LD_VAR 0 9
24290: ARRAY
24291: DIFF
24292: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
24293: LD_ADDR_VAR 0 4
24297: PUSH
24298: LD_EXP 61
24302: PUSH
24303: LD_VAR 0 9
24307: ARRAY
24308: ST_TO_ADDR
// humans_list = engineers_list ^ apemen_engineers_list ;
24309: LD_ADDR_VAR 0 11
24313: PUSH
24314: LD_VAR 0 3
24318: PUSH
24319: LD_VAR 0 10
24323: ADD
24324: ST_TO_ADDR
// i = 1 ;
24325: LD_ADDR_VAR 0 2
24329: PUSH
24330: LD_INT 1
24332: ST_TO_ADDR
// while i <= humans_list do
24333: LD_VAR 0 2
24337: PUSH
24338: LD_VAR 0 11
24342: LESSEQUAL
24343: IFFALSE 24470
// begin if GetLives ( humans_list [ i ] ) <= 700 then
24345: LD_VAR 0 11
24349: PUSH
24350: LD_VAR 0 2
24354: ARRAY
24355: PPUSH
24356: CALL_OW 256
24360: PUSH
24361: LD_INT 700
24363: LESSEQUAL
24364: IFFALSE 24454
// begin temp_list = temp_list ^ humans_list [ i ] ;
24366: LD_ADDR_VAR 0 4
24370: PUSH
24371: LD_VAR 0 4
24375: PUSH
24376: LD_VAR 0 11
24380: PUSH
24381: LD_VAR 0 2
24385: ARRAY
24386: ADD
24387: ST_TO_ADDR
// engineers_list = engineers_list diff humans_list [ i ] ;
24388: LD_ADDR_VAR 0 3
24392: PUSH
24393: LD_VAR 0 3
24397: PUSH
24398: LD_VAR 0 11
24402: PUSH
24403: LD_VAR 0 2
24407: ARRAY
24408: DIFF
24409: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff humans_list [ i ] ;
24410: LD_ADDR_VAR 0 10
24414: PUSH
24415: LD_VAR 0 10
24419: PUSH
24420: LD_VAR 0 11
24424: PUSH
24425: LD_VAR 0 2
24429: ARRAY
24430: DIFF
24431: ST_TO_ADDR
// humans_list = Delete ( humans_list , i ) ;
24432: LD_ADDR_VAR 0 11
24436: PUSH
24437: LD_VAR 0 11
24441: PPUSH
24442: LD_VAR 0 2
24446: PPUSH
24447: CALL_OW 3
24451: ST_TO_ADDR
// continue ;
24452: GO 24333
// end ; i = i + 1 ;
24454: LD_ADDR_VAR 0 2
24458: PUSH
24459: LD_VAR 0 2
24463: PUSH
24464: LD_INT 1
24466: PLUS
24467: ST_TO_ADDR
// end ;
24468: GO 24333
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
24470: LD_ADDR_EXP 61
24474: PUSH
24475: LD_EXP 61
24479: PPUSH
24480: LD_VAR 0 9
24484: PPUSH
24485: LD_VAR 0 4
24489: PPUSH
24490: CALL_OW 1
24494: ST_TO_ADDR
// crane_usable = false ;
24495: LD_ADDR_VAR 0 12
24499: PUSH
24500: LD_INT 0
24502: ST_TO_ADDR
// if ai_crane [ base ] > 0 then
24503: LD_EXP 74
24507: PUSH
24508: LD_VAR 0 9
24512: ARRAY
24513: PUSH
24514: LD_INT 0
24516: GREATER
24517: IFFALSE 25116
// begin if GetControl ( ai_crane [ base ] ) = control_manual and not ai_crane [ base ] = ai_vehicle_being_moved [ base ] then
24519: LD_EXP 74
24523: PUSH
24524: LD_VAR 0 9
24528: ARRAY
24529: PPUSH
24530: CALL_OW 263
24534: PUSH
24535: LD_INT 1
24537: EQUAL
24538: PUSH
24539: LD_EXP 74
24543: PUSH
24544: LD_VAR 0 9
24548: ARRAY
24549: PUSH
24550: LD_EXP 64
24554: PUSH
24555: LD_VAR 0 9
24559: ARRAY
24560: EQUAL
24561: NOT
24562: AND
24563: IFFALSE 24631
// begin temp_list = UnitsInside ( ai_crane [ base ] ) ;
24565: LD_ADDR_VAR 0 4
24569: PUSH
24570: LD_EXP 74
24574: PUSH
24575: LD_VAR 0 9
24579: ARRAY
24580: PPUSH
24581: CALL_OW 313
24585: ST_TO_ADDR
// if temp_list > 0 then
24586: LD_VAR 0 4
24590: PUSH
24591: LD_INT 0
24593: GREATER
24594: IFFALSE 24631
// if temp_list [ 1 ] <> ai_crane_driver [ base ] then
24596: LD_VAR 0 4
24600: PUSH
24601: LD_INT 1
24603: ARRAY
24604: PUSH
24605: LD_EXP 78
24609: PUSH
24610: LD_VAR 0 9
24614: ARRAY
24615: NONEQUAL
24616: IFFALSE 24631
// ComExitVehicle ( temp_list [ 1 ] ) ;
24618: LD_VAR 0 4
24622: PUSH
24623: LD_INT 1
24625: ARRAY
24626: PPUSH
24627: 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
24631: LD_EXP 74
24635: PUSH
24636: LD_VAR 0 9
24640: ARRAY
24641: PPUSH
24642: CALL_OW 256
24646: PUSH
24647: LD_INT 500
24649: LESSEQUAL
24650: PUSH
24651: LD_EXP 78
24655: PUSH
24656: LD_VAR 0 9
24660: ARRAY
24661: PUSH
24662: LD_INT 0
24664: GREATER
24665: PUSH
24666: LD_EXP 78
24670: PUSH
24671: LD_VAR 0 9
24675: ARRAY
24676: PPUSH
24677: CALL_OW 256
24681: PUSH
24682: LD_INT 500
24684: LESSEQUAL
24685: AND
24686: OR
24687: PUSH
24688: LD_EXP 77
24692: PUSH
24693: LD_VAR 0 9
24697: ARRAY
24698: PUSH
24699: LD_EXP 74
24703: PUSH
24704: LD_VAR 0 9
24708: ARRAY
24709: PPUSH
24710: CALL_OW 256
24714: PUSH
24715: LD_INT 1000
24717: LESS
24718: PUSH
24719: LD_EXP 78
24723: PUSH
24724: LD_VAR 0 9
24728: ARRAY
24729: PUSH
24730: LD_INT 0
24732: GREATER
24733: PUSH
24734: LD_EXP 78
24738: PUSH
24739: LD_VAR 0 9
24743: ARRAY
24744: PPUSH
24745: CALL_OW 256
24749: PUSH
24750: LD_INT 1000
24752: LESS
24753: AND
24754: OR
24755: AND
24756: OR
24757: IFFALSE 24880
// begin ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , true ) ;
24759: LD_ADDR_EXP 77
24763: PUSH
24764: LD_EXP 77
24768: PPUSH
24769: LD_VAR 0 9
24773: PPUSH
24774: LD_INT 1
24776: PPUSH
24777: CALL_OW 1
24781: ST_TO_ADDR
// if GetDistUnitXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 6 then
24782: LD_EXP 74
24786: PUSH
24787: LD_VAR 0 9
24791: ARRAY
24792: PPUSH
24793: LD_EXP 59
24797: PUSH
24798: LD_VAR 0 9
24802: ARRAY
24803: PUSH
24804: LD_INT 1
24806: ARRAY
24807: PPUSH
24808: LD_EXP 59
24812: PUSH
24813: LD_VAR 0 9
24817: ARRAY
24818: PUSH
24819: LD_INT 2
24821: ARRAY
24822: PPUSH
24823: CALL_OW 297
24827: PUSH
24828: LD_INT 6
24830: GREATER
24831: IFFALSE 24878
// ComMoveXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
24833: LD_EXP 74
24837: PUSH
24838: LD_VAR 0 9
24842: ARRAY
24843: PPUSH
24844: LD_EXP 59
24848: PUSH
24849: LD_VAR 0 9
24853: ARRAY
24854: PUSH
24855: LD_INT 1
24857: ARRAY
24858: PPUSH
24859: LD_EXP 59
24863: PUSH
24864: LD_VAR 0 9
24868: ARRAY
24869: PUSH
24870: LD_INT 2
24872: ARRAY
24873: PPUSH
24874: CALL_OW 111
// end else
24878: GO 25116
// begin ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , false ) ;
24880: LD_ADDR_EXP 77
24884: PUSH
24885: LD_EXP 77
24889: PPUSH
24890: LD_VAR 0 9
24894: PPUSH
24895: LD_INT 0
24897: PPUSH
24898: CALL_OW 1
24902: ST_TO_ADDR
// if GetEngine ( ai_crane [ base ] ) = engine_combustion then
24903: LD_EXP 74
24907: PUSH
24908: LD_VAR 0 9
24912: ARRAY
24913: PPUSH
24914: CALL_OW 262
24918: PUSH
24919: LD_INT 1
24921: EQUAL
24922: IFFALSE 25095
// begin i = GetFuel ( ai_crane [ base ] ) ;
24924: LD_ADDR_VAR 0 2
24928: PUSH
24929: LD_EXP 74
24933: PUSH
24934: LD_VAR 0 9
24938: ARRAY
24939: PPUSH
24940: CALL_OW 261
24944: ST_TO_ADDR
// if i > 90 or not IsOk ( ai_depot [ base ] ) then
24945: LD_VAR 0 2
24949: PUSH
24950: LD_INT 90
24952: GREATER
24953: PUSH
24954: LD_EXP 36
24958: PUSH
24959: LD_VAR 0 9
24963: ARRAY
24964: PPUSH
24965: CALL_OW 302
24969: NOT
24970: OR
24971: IFFALSE 24998
// crane_is_refueling = Replace ( crane_is_refueling , base , false ) else
24973: LD_ADDR_VAR 0 21
24977: PUSH
24978: LD_VAR 0 21
24982: PPUSH
24983: LD_VAR 0 9
24987: PPUSH
24988: LD_INT 0
24990: PPUSH
24991: CALL_OW 1
24995: ST_TO_ADDR
24996: GO 25095
// if i < 25 or crane_is_refueling [ base ] then
24998: LD_VAR 0 2
25002: PUSH
25003: LD_INT 25
25005: LESS
25006: PUSH
25007: LD_VAR 0 21
25011: PUSH
25012: LD_VAR 0 9
25016: ARRAY
25017: OR
25018: IFFALSE 25095
// begin ComMoveUnit ( ai_crane [ base ] , ai_depot [ base ] ) ;
25020: LD_EXP 74
25024: PUSH
25025: LD_VAR 0 9
25029: ARRAY
25030: PPUSH
25031: LD_EXP 36
25035: PUSH
25036: LD_VAR 0 9
25040: ARRAY
25041: PPUSH
25042: CALL_OW 112
// AddComRefuel ( ai_crane [ base ] , ai_depot [ base ] ) ;
25046: LD_EXP 74
25050: PUSH
25051: LD_VAR 0 9
25055: ARRAY
25056: PPUSH
25057: LD_EXP 36
25061: PUSH
25062: LD_VAR 0 9
25066: ARRAY
25067: PPUSH
25068: CALL_OW 210
// crane_is_refueling = Replace ( crane_is_refueling , base , true ) ;
25072: LD_ADDR_VAR 0 21
25076: PUSH
25077: LD_VAR 0 21
25081: PPUSH
25082: LD_VAR 0 9
25086: PPUSH
25087: LD_INT 1
25089: PPUSH
25090: CALL_OW 1
25094: ST_TO_ADDR
// end ; end ; if not crane_is_refueling [ base ] then
25095: LD_VAR 0 21
25099: PUSH
25100: LD_VAR 0 9
25104: ARRAY
25105: NOT
25106: IFFALSE 25116
// crane_usable = true ;
25108: LD_ADDR_VAR 0 12
25112: PUSH
25113: LD_INT 1
25115: ST_TO_ADDR
// end ; end ; if engineers_list = 0 and apemen_engineers_list = 0 and not crane_usable then
25116: LD_VAR 0 3
25120: PUSH
25121: LD_INT 0
25123: EQUAL
25124: PUSH
25125: LD_VAR 0 10
25129: PUSH
25130: LD_INT 0
25132: EQUAL
25133: AND
25134: PUSH
25135: LD_VAR 0 12
25139: NOT
25140: AND
25141: IFFALSE 25145
// continue ;
25143: GO 24002
// temp_list_2 = UnitFilter ( engineers_list , [ f_class , class_engineer ] ) ;
25145: LD_ADDR_VAR 0 8
25149: PUSH
25150: LD_VAR 0 3
25154: PPUSH
25155: LD_INT 25
25157: PUSH
25158: LD_INT 2
25160: PUSH
25161: EMPTY
25162: LIST
25163: LIST
25164: PPUSH
25165: CALL_OW 72
25169: ST_TO_ADDR
// if ai_captured_buildings [ base ] > 0 and temp_list_2 > 0 then
25170: LD_EXP 49
25174: PUSH
25175: LD_VAR 0 9
25179: ARRAY
25180: PUSH
25181: LD_INT 0
25183: GREATER
25184: PUSH
25185: LD_VAR 0 8
25189: PUSH
25190: LD_INT 0
25192: GREATER
25193: AND
25194: IFFALSE 25472
// begin temp_list = [ ] ;
25196: LD_ADDR_VAR 0 4
25200: PUSH
25201: EMPTY
25202: ST_TO_ADDR
// for i in ai_captured_buildings [ base ] do
25203: LD_ADDR_VAR 0 2
25207: PUSH
25208: LD_EXP 49
25212: PUSH
25213: LD_VAR 0 9
25217: ARRAY
25218: PUSH
25219: FOR_IN
25220: IFFALSE 25276
// if GetBType ( i ) in [ b_depot , b_warehouse ] then
25222: LD_VAR 0 2
25226: PPUSH
25227: CALL_OW 266
25231: PUSH
25232: LD_INT 0
25234: PUSH
25235: LD_INT 1
25237: PUSH
25238: EMPTY
25239: LIST
25240: LIST
25241: IN
25242: IFFALSE 25260
// temp_list = temp_list ^ 1 else
25244: LD_ADDR_VAR 0 4
25248: PUSH
25249: LD_VAR 0 4
25253: PUSH
25254: LD_INT 1
25256: ADD
25257: ST_TO_ADDR
25258: GO 25274
// temp_list = temp_list ^ 0 ;
25260: LD_ADDR_VAR 0 4
25264: PUSH
25265: LD_VAR 0 4
25269: PUSH
25270: LD_INT 0
25272: ADD
25273: ST_TO_ADDR
25274: GO 25219
25276: POP
25277: POP
// temp_list = SortListByListDesc ( ai_captured_buildings [ base ] , temp_list ) ;
25278: LD_ADDR_VAR 0 4
25282: PUSH
25283: LD_EXP 49
25287: PUSH
25288: LD_VAR 0 9
25292: ARRAY
25293: PPUSH
25294: LD_VAR 0 4
25298: PPUSH
25299: CALL_OW 77
25303: ST_TO_ADDR
// temp_list_2 = GetHumansOutOfUnits ( temp_list_2 ) ;
25304: LD_ADDR_VAR 0 8
25308: PUSH
25309: LD_VAR 0 8
25313: PPUSH
25314: CALL 32829 0 1
25318: ST_TO_ADDR
// if temp_list_2 > 0 then
25319: LD_VAR 0 8
25323: PUSH
25324: LD_INT 0
25326: GREATER
25327: IFFALSE 25443
// begin temp_list_2 = SortListByListDesc ( temp_list_2 , temp_list_2 ) ;
25329: LD_ADDR_VAR 0 8
25333: PUSH
25334: LD_VAR 0 8
25338: PPUSH
25339: LD_VAR 0 8
25343: PPUSH
25344: CALL_OW 77
25348: ST_TO_ADDR
// SetTaskList ( temp_list_2 [ 1 ] , [ [ e , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) , temp_list [ 1 ] , 0 , 0 , 0 ] ] ) ;
25349: LD_VAR 0 8
25353: PUSH
25354: LD_INT 1
25356: ARRAY
25357: PPUSH
25358: LD_STRING e
25360: PUSH
25361: LD_VAR 0 4
25365: PUSH
25366: LD_INT 1
25368: ARRAY
25369: PPUSH
25370: CALL_OW 250
25374: PUSH
25375: LD_VAR 0 4
25379: PUSH
25380: LD_INT 1
25382: ARRAY
25383: PPUSH
25384: CALL_OW 251
25388: PUSH
25389: LD_VAR 0 4
25393: PUSH
25394: LD_INT 1
25396: ARRAY
25397: PUSH
25398: LD_INT 0
25400: PUSH
25401: LD_INT 0
25403: PUSH
25404: LD_INT 0
25406: PUSH
25407: EMPTY
25408: LIST
25409: LIST
25410: LIST
25411: LIST
25412: LIST
25413: LIST
25414: LIST
25415: PUSH
25416: EMPTY
25417: LIST
25418: PPUSH
25419: CALL_OW 446
// engineers_list = engineers_list diff temp_list_2 [ 1 ] ;
25423: LD_ADDR_VAR 0 3
25427: PUSH
25428: LD_VAR 0 3
25432: PUSH
25433: LD_VAR 0 8
25437: PUSH
25438: LD_INT 1
25440: ARRAY
25441: DIFF
25442: ST_TO_ADDR
// end ; if engineers_list = 0 and apemen_engineers_list = 0 and not crane_usable then
25443: LD_VAR 0 3
25447: PUSH
25448: LD_INT 0
25450: EQUAL
25451: PUSH
25452: LD_VAR 0 10
25456: PUSH
25457: LD_INT 0
25459: EQUAL
25460: AND
25461: PUSH
25462: LD_VAR 0 12
25466: NOT
25467: AND
25468: IFFALSE 25472
// continue ;
25470: GO 24002
// end ; case base of 1 :
25472: LD_VAR 0 9
25476: PUSH
25477: LD_INT 1
25479: DOUBLE
25480: EQUAL
25481: IFTRUE 25485
25483: GO 25504
25485: POP
// begin engineers_not_allowed_to_repair_area = le_no_engineer_repair_area ;
25486: LD_ADDR_VAR 0 14
25490: PUSH
25491: LD_INT 7
25493: ST_TO_ADDR
// crane_not_allowed_to_repair_area = 0 ;
25494: LD_ADDR_VAR 0 15
25498: PUSH
25499: LD_INT 0
25501: ST_TO_ADDR
// end ; 2 :
25502: GO 25532
25504: LD_INT 2
25506: DOUBLE
25507: EQUAL
25508: IFTRUE 25512
25510: GO 25531
25512: POP
// begin engineers_not_allowed_to_repair_area = am_no_engineer_repair_area ;
25513: LD_ADDR_VAR 0 14
25517: PUSH
25518: LD_INT 6
25520: ST_TO_ADDR
// crane_not_allowed_to_repair_area = 0 ;
25521: LD_ADDR_VAR 0 15
25525: PUSH
25526: LD_INT 0
25528: ST_TO_ADDR
// end ; end ;
25529: GO 25532
25531: POP
// repairing_buildings = [ false , false , false ] ;
25532: LD_ADDR_VAR 0 18
25536: PUSH
25537: LD_INT 0
25539: PUSH
25540: LD_INT 0
25542: PUSH
25543: LD_INT 0
25545: PUSH
25546: EMPTY
25547: LIST
25548: LIST
25549: LIST
25550: ST_TO_ADDR
// for k = 1 to 3 do
25551: LD_ADDR_VAR 0 17
25555: PUSH
25556: DOUBLE
25557: LD_INT 1
25559: DEC
25560: ST_TO_ADDR
25561: LD_INT 3
25563: PUSH
25564: FOR_TO
25565: IFFALSE 26258
// begin i = 1 ;
25567: LD_ADDR_VAR 0 2
25571: PUSH
25572: LD_INT 1
25574: ST_TO_ADDR
// buildings_list = [ ] ;
25575: LD_ADDR_VAR 0 5
25579: PUSH
25580: EMPTY
25581: ST_TO_ADDR
// repeat case i of 1 :
25582: LD_VAR 0 2
25586: PUSH
25587: LD_INT 1
25589: DOUBLE
25590: EQUAL
25591: IFTRUE 25595
25593: GO 25644
25595: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] diff ai_dismantle_these_buildings [ base ] , [ f_not , [ f_ok ] ] ) ; 2 :
25596: LD_ADDR_VAR 0 5
25600: PUSH
25601: LD_EXP 62
25605: PUSH
25606: LD_VAR 0 9
25610: ARRAY
25611: PUSH
25612: LD_EXP 85
25616: PUSH
25617: LD_VAR 0 9
25621: ARRAY
25622: DIFF
25623: PPUSH
25624: LD_INT 3
25626: PUSH
25627: LD_INT 50
25629: PUSH
25630: EMPTY
25631: LIST
25632: PUSH
25633: EMPTY
25634: LIST
25635: LIST
25636: PPUSH
25637: CALL_OW 72
25641: ST_TO_ADDR
25642: GO 25706
25644: LD_INT 2
25646: DOUBLE
25647: EQUAL
25648: IFTRUE 25652
25650: GO 25705
25652: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] diff ai_dismantle_these_buildings [ base ] , [ f_not , [ f_lives , 1000 ] ] ) ; end ;
25653: LD_ADDR_VAR 0 5
25657: PUSH
25658: LD_EXP 62
25662: PUSH
25663: LD_VAR 0 9
25667: ARRAY
25668: PUSH
25669: LD_EXP 85
25673: PUSH
25674: LD_VAR 0 9
25678: ARRAY
25679: DIFF
25680: PPUSH
25681: LD_INT 3
25683: PUSH
25684: LD_INT 24
25686: PUSH
25687: LD_INT 1000
25689: PUSH
25690: EMPTY
25691: LIST
25692: LIST
25693: PUSH
25694: EMPTY
25695: LIST
25696: LIST
25697: PPUSH
25698: CALL_OW 72
25702: ST_TO_ADDR
25703: GO 25706
25705: POP
// case k of 2 :
25706: LD_VAR 0 17
25710: PUSH
25711: LD_INT 2
25713: DOUBLE
25714: EQUAL
25715: IFTRUE 25719
25717: GO 25772
25719: POP
// begin if under_attack and engineers_not_allowed_to_repair_area > 0 then
25720: LD_VAR 0 19
25724: PUSH
25725: LD_VAR 0 14
25729: PUSH
25730: LD_INT 0
25732: GREATER
25733: AND
25734: IFFALSE 25770
// buildings_list = UnitFilter ( buildings_list , [ f_not , [ f_inarea , engineers_not_allowed_to_repair_area ] ] ) ;
25736: LD_ADDR_VAR 0 5
25740: PUSH
25741: LD_VAR 0 5
25745: PPUSH
25746: LD_INT 3
25748: PUSH
25749: LD_INT 95
25751: PUSH
25752: LD_VAR 0 14
25756: PUSH
25757: EMPTY
25758: LIST
25759: LIST
25760: PUSH
25761: EMPTY
25762: LIST
25763: LIST
25764: PPUSH
25765: CALL_OW 72
25769: ST_TO_ADDR
// end ; 3 :
25770: GO 25828
25772: LD_INT 3
25774: DOUBLE
25775: EQUAL
25776: IFTRUE 25780
25778: GO 25827
25780: POP
// begin if crane_not_allowed_to_repair_area > 0 then
25781: LD_VAR 0 15
25785: PUSH
25786: LD_INT 0
25788: GREATER
25789: IFFALSE 25825
// buildings_list = UnitFilter ( buildings_list , [ f_not , [ f_inarea , crane_not_allowed_to_repair_area ] ] ) ;
25791: LD_ADDR_VAR 0 5
25795: PUSH
25796: LD_VAR 0 5
25800: PPUSH
25801: LD_INT 3
25803: PUSH
25804: LD_INT 95
25806: PUSH
25807: LD_VAR 0 15
25811: PUSH
25812: EMPTY
25813: LIST
25814: LIST
25815: PUSH
25816: EMPTY
25817: LIST
25818: LIST
25819: PPUSH
25820: CALL_OW 72
25824: ST_TO_ADDR
// end ; end ;
25825: GO 25828
25827: POP
// i = i + 1 ;
25828: LD_ADDR_VAR 0 2
25832: PUSH
25833: LD_VAR 0 2
25837: PUSH
25838: LD_INT 1
25840: PLUS
25841: ST_TO_ADDR
// until buildings_list > 0 or i > 2 ;
25842: LD_VAR 0 5
25846: PUSH
25847: LD_INT 0
25849: GREATER
25850: PUSH
25851: LD_VAR 0 2
25855: PUSH
25856: LD_INT 2
25858: GREATER
25859: OR
25860: IFFALSE 25582
// if buildings_list > 0 then
25862: LD_VAR 0 5
25866: PUSH
25867: LD_INT 0
25869: GREATER
25870: IFFALSE 26256
// begin case k of 1 :
25872: LD_VAR 0 17
25876: PUSH
25877: LD_INT 1
25879: DOUBLE
25880: EQUAL
25881: IFTRUE 25885
25883: GO 25936
25885: POP
// begin if apemen_engineers_list > 0 then
25886: LD_VAR 0 10
25890: PUSH
25891: LD_INT 0
25893: GREATER
25894: IFFALSE 25919
// repairing_buildings = Replace ( repairing_buildings , k , true ) ;
25896: LD_ADDR_VAR 0 18
25900: PUSH
25901: LD_VAR 0 18
25905: PPUSH
25906: LD_VAR 0 17
25910: PPUSH
25911: LD_INT 1
25913: PPUSH
25914: CALL_OW 1
25918: ST_TO_ADDR
// workers_list = GetHumansOutOfUnits ( apemen_engineers_list ) ;
25919: LD_ADDR_VAR 0 16
25923: PUSH
25924: LD_VAR 0 10
25928: PPUSH
25929: CALL 32829 0 1
25933: ST_TO_ADDR
// end ; 2 :
25934: GO 26104
25936: LD_INT 2
25938: DOUBLE
25939: EQUAL
25940: IFTRUE 25944
25942: GO 25995
25944: POP
// begin if engineers_list > 0 then
25945: LD_VAR 0 3
25949: PUSH
25950: LD_INT 0
25952: GREATER
25953: IFFALSE 25978
// repairing_buildings = Replace ( repairing_buildings , k , true ) ;
25955: LD_ADDR_VAR 0 18
25959: PUSH
25960: LD_VAR 0 18
25964: PPUSH
25965: LD_VAR 0 17
25969: PPUSH
25970: LD_INT 1
25972: PPUSH
25973: CALL_OW 1
25977: ST_TO_ADDR
// workers_list = GetHumansOutOfUnits ( engineers_list ) ;
25978: LD_ADDR_VAR 0 16
25982: PUSH
25983: LD_VAR 0 3
25987: PPUSH
25988: CALL 32829 0 1
25992: ST_TO_ADDR
// end ; 3 :
25993: GO 26104
25995: LD_INT 3
25997: DOUBLE
25998: EQUAL
25999: IFTRUE 26003
26001: GO 26103
26003: POP
// begin if ai_crane [ base ] > 0 then
26004: LD_EXP 74
26008: PUSH
26009: LD_VAR 0 9
26013: ARRAY
26014: PUSH
26015: LD_INT 0
26017: GREATER
26018: IFFALSE 26043
// repairing_buildings = Replace ( repairing_buildings , k , true ) ;
26020: LD_ADDR_VAR 0 18
26024: PUSH
26025: LD_VAR 0 18
26029: PPUSH
26030: LD_VAR 0 17
26034: PPUSH
26035: LD_INT 1
26037: PPUSH
26038: CALL_OW 1
26042: ST_TO_ADDR
// if ai_crane [ base ] > 0 and crane_usable then
26043: LD_EXP 74
26047: PUSH
26048: LD_VAR 0 9
26052: ARRAY
26053: PUSH
26054: LD_INT 0
26056: GREATER
26057: PUSH
26058: LD_VAR 0 12
26062: AND
26063: IFFALSE 26094
// begin workers_list = [ ai_crane [ base ] ] ;
26065: LD_ADDR_VAR 0 16
26069: PUSH
26070: LD_EXP 74
26074: PUSH
26075: LD_VAR 0 9
26079: ARRAY
26080: PUSH
26081: EMPTY
26082: LIST
26083: ST_TO_ADDR
// crane_usable = false ;
26084: LD_ADDR_VAR 0 12
26088: PUSH
26089: LD_INT 0
26091: ST_TO_ADDR
// end else
26092: GO 26101
// workers_list = [ ] ;
26094: LD_ADDR_VAR 0 16
26098: PUSH
26099: EMPTY
26100: ST_TO_ADDR
// end ; end ;
26101: GO 26104
26103: POP
// repeat i = 1 ;
26104: LD_ADDR_VAR 0 2
26108: PUSH
26109: LD_INT 1
26111: ST_TO_ADDR
// while i <= buildings_list do
26112: LD_VAR 0 2
26116: PUSH
26117: LD_VAR 0 5
26121: LESSEQUAL
26122: IFFALSE 26246
// begin if workers_list = 0 then
26124: LD_VAR 0 16
26128: PUSH
26129: LD_INT 0
26131: EQUAL
26132: IFFALSE 26136
// break ;
26134: GO 26246
// temp_unit = NearestUnitToUnit ( workers_list , buildings_list [ i ] ) ;
26136: LD_ADDR_VAR 0 6
26140: PUSH
26141: LD_VAR 0 16
26145: PPUSH
26146: LD_VAR 0 5
26150: PUSH
26151: LD_VAR 0 2
26155: ARRAY
26156: PPUSH
26157: CALL_OW 74
26161: ST_TO_ADDR
// ComRepairBuilding ( temp_unit , buildings_list [ i ] ) ;
26162: LD_VAR 0 6
26166: PPUSH
26167: LD_VAR 0 5
26171: PUSH
26172: LD_VAR 0 2
26176: ARRAY
26177: PPUSH
26178: CALL_OW 130
// workers_list = workers_list diff temp_unit ;
26182: LD_ADDR_VAR 0 16
26186: PUSH
26187: LD_VAR 0 16
26191: PUSH
26192: LD_VAR 0 6
26196: DIFF
26197: ST_TO_ADDR
// engineers_list = engineers_list diff temp_unit ;
26198: LD_ADDR_VAR 0 3
26202: PUSH
26203: LD_VAR 0 3
26207: PUSH
26208: LD_VAR 0 6
26212: DIFF
26213: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff temp_unit ;
26214: LD_ADDR_VAR 0 10
26218: PUSH
26219: LD_VAR 0 10
26223: PUSH
26224: LD_VAR 0 6
26228: DIFF
26229: ST_TO_ADDR
// i = i + 1 ;
26230: LD_ADDR_VAR 0 2
26234: PUSH
26235: LD_VAR 0 2
26239: PUSH
26240: LD_INT 1
26242: PLUS
26243: ST_TO_ADDR
// end ;
26244: GO 26112
// until workers_list = 0 ;
26246: LD_VAR 0 16
26250: PUSH
26251: LD_INT 0
26253: EQUAL
26254: IFFALSE 26104
// end ; end ;
26256: GO 25564
26258: POP
26259: POP
// if true in repairing_buildings then
26260: LD_INT 1
26262: PUSH
26263: LD_VAR 0 18
26267: IN
26268: IFFALSE 26398
// begin temp_list = [ ] ;
26270: LD_ADDR_VAR 0 4
26274: PUSH
26275: EMPTY
26276: ST_TO_ADDR
// if not repairing_buildings [ 1 ] then
26277: LD_VAR 0 18
26281: PUSH
26282: LD_INT 1
26284: ARRAY
26285: NOT
26286: IFFALSE 26304
// temp_list = temp_list ^ apemen_engineers_list ;
26288: LD_ADDR_VAR 0 4
26292: PUSH
26293: LD_VAR 0 4
26297: PUSH
26298: LD_VAR 0 10
26302: ADD
26303: ST_TO_ADDR
// if not repairing_buildings [ 2 ] then
26304: LD_VAR 0 18
26308: PUSH
26309: LD_INT 2
26311: ARRAY
26312: NOT
26313: IFFALSE 26331
// temp_list = temp_list ^ engineers_list ;
26315: LD_ADDR_VAR 0 4
26319: PUSH
26320: LD_VAR 0 4
26324: PUSH
26325: LD_VAR 0 3
26329: ADD
26330: ST_TO_ADDR
// DistributeHumansToBuildings ( base , temp_list , UnitFilter ( ai_depot [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_engineer , 6 , false , false ) ;
26331: LD_VAR 0 9
26335: PPUSH
26336: LD_VAR 0 4
26340: PPUSH
26341: LD_EXP 36
26345: PUSH
26346: LD_VAR 0 9
26350: ARRAY
26351: PPUSH
26352: LD_INT 50
26354: PUSH
26355: EMPTY
26356: LIST
26357: PUSH
26358: LD_INT 3
26360: PUSH
26361: LD_INT 57
26363: PUSH
26364: EMPTY
26365: LIST
26366: PUSH
26367: EMPTY
26368: LIST
26369: LIST
26370: PUSH
26371: EMPTY
26372: LIST
26373: LIST
26374: PPUSH
26375: CALL_OW 72
26379: PPUSH
26380: LD_INT 2
26382: PPUSH
26383: LD_INT 6
26385: PPUSH
26386: LD_INT 0
26388: PPUSH
26389: LD_INT 0
26391: PPUSH
26392: CALL 22559 0 7
// continue ;
26396: GO 24002
// end ; if not under_attack then
26398: LD_VAR 0 19
26402: NOT
26403: IFFALSE 31409
// begin if ai_building_under_construction [ base ] > 0 then
26405: LD_EXP 60
26409: PUSH
26410: LD_VAR 0 9
26414: ARRAY
26415: PUSH
26416: LD_INT 0
26418: GREATER
26419: IFFALSE 26593
// if BuildingStatus ( ai_building_under_construction [ base ] ) = bs_build then
26421: LD_EXP 60
26425: PUSH
26426: LD_VAR 0 9
26430: ARRAY
26431: PPUSH
26432: CALL_OW 461
26436: PUSH
26437: LD_INT 1
26439: EQUAL
26440: IFFALSE 26555
// begin temp_list_2 = GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) ;
26442: LD_ADDR_VAR 0 8
26446: PUSH
26447: LD_VAR 0 3
26451: PUSH
26452: LD_VAR 0 10
26456: ADD
26457: PPUSH
26458: CALL 32829 0 1
26462: ST_TO_ADDR
// if crane_usable and not IsInArea ( ai_building_under_construction [ base ] , crane_not_allowed_to_repair_area ) then
26463: LD_VAR 0 12
26467: PUSH
26468: LD_EXP 60
26472: PUSH
26473: LD_VAR 0 9
26477: ARRAY
26478: PPUSH
26479: LD_VAR 0 15
26483: PPUSH
26484: CALL_OW 308
26488: NOT
26489: AND
26490: IFFALSE 26514
// temp_list_2 = temp_list_2 ^ ai_crane [ base ] ;
26492: LD_ADDR_VAR 0 8
26496: PUSH
26497: LD_VAR 0 8
26501: PUSH
26502: LD_EXP 74
26506: PUSH
26507: LD_VAR 0 9
26511: ARRAY
26512: ADD
26513: ST_TO_ADDR
// for i in temp_list_2 do
26514: LD_ADDR_VAR 0 2
26518: PUSH
26519: LD_VAR 0 8
26523: PUSH
26524: FOR_IN
26525: IFFALSE 26549
// ComRepairBuilding ( i , ai_building_under_construction [ base ] ) ;
26527: LD_VAR 0 2
26531: PPUSH
26532: LD_EXP 60
26536: PUSH
26537: LD_VAR 0 9
26541: ARRAY
26542: PPUSH
26543: CALL_OW 130
26547: GO 26524
26549: POP
26550: POP
// continue ;
26551: GO 24002
// end else
26553: GO 26593
// begin ComCancel ( ai_building_under_construction [ base ] ) ;
26555: LD_EXP 60
26559: PUSH
26560: LD_VAR 0 9
26564: ARRAY
26565: PPUSH
26566: CALL_OW 127
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
26570: LD_ADDR_EXP 60
26574: PUSH
26575: LD_EXP 60
26579: PPUSH
26580: LD_VAR 0 9
26584: PPUSH
26585: LD_INT 0
26587: PPUSH
26588: CALL_OW 1
26592: ST_TO_ADDR
// end ; if ai_dismantle_these_buildings [ base ] > 0 and engineers_list > 0 then
26593: LD_EXP 85
26597: PUSH
26598: LD_VAR 0 9
26602: ARRAY
26603: PUSH
26604: LD_INT 0
26606: GREATER
26607: PUSH
26608: LD_VAR 0 3
26612: PUSH
26613: LD_INT 0
26615: GREATER
26616: AND
26617: IFFALSE 26781
// begin is_dismantling = true ;
26619: LD_ADDR_VAR 0 20
26623: PUSH
26624: LD_INT 1
26626: ST_TO_ADDR
// if ai_building_constructor [ base ] in engineers_list then
26627: LD_EXP 63
26631: PUSH
26632: LD_VAR 0 9
26636: ARRAY
26637: PUSH
26638: LD_VAR 0 3
26642: IN
26643: IFFALSE 26663
// k = ai_building_constructor [ base ] else
26645: LD_ADDR_VAR 0 17
26649: PUSH
26650: LD_EXP 63
26654: PUSH
26655: LD_VAR 0 9
26659: ARRAY
26660: ST_TO_ADDR
26661: GO 26683
// k = BestFromListByList ( engineers_list , engineers_list ) ;
26663: LD_ADDR_VAR 0 17
26667: PUSH
26668: LD_VAR 0 3
26672: PPUSH
26673: LD_VAR 0 3
26677: PPUSH
26678: CALL_OW 79
26682: ST_TO_ADDR
// engineers_list = engineers_list diff k ;
26683: LD_ADDR_VAR 0 3
26687: PUSH
26688: LD_VAR 0 3
26692: PUSH
26693: LD_VAR 0 17
26697: DIFF
26698: ST_TO_ADDR
// case GetType ( IsInUnit ( k ) ) of unit_vehicle :
26699: LD_VAR 0 17
26703: PPUSH
26704: CALL_OW 310
26708: PPUSH
26709: CALL_OW 247
26713: PUSH
26714: LD_INT 2
26716: DOUBLE
26717: EQUAL
26718: IFTRUE 26722
26720: GO 26734
26722: POP
// ComExitVehicle ( k ) ; unit_building :
26723: LD_VAR 0 17
26727: PPUSH
26728: CALL_OW 121
26732: GO 26779
26734: LD_INT 3
26736: DOUBLE
26737: EQUAL
26738: IFTRUE 26742
26740: GO 26754
26742: POP
// ComExitBuilding ( k ) ; else
26743: LD_VAR 0 17
26747: PPUSH
26748: CALL_OW 122
26752: GO 26779
26754: POP
// ComDismantle ( k , ai_dismantle_these_buildings [ base ] [ 1 ] ) ; end ;
26755: LD_VAR 0 17
26759: PPUSH
26760: LD_EXP 85
26764: PUSH
26765: LD_VAR 0 9
26769: ARRAY
26770: PUSH
26771: LD_INT 1
26773: ARRAY
26774: PPUSH
26775: CALL_OW 167
// end else
26779: GO 26789
// is_dismantling = false ;
26781: LD_ADDR_VAR 0 20
26785: PUSH
26786: LD_INT 0
26788: ST_TO_ADDR
// if ( ai_all_buildings [ base ] - ai_excepted_buildings [ base ] < ai_buildings_locations [ base ] or ai_upcoming_building_data [ base ] > 0 ) and not is_dismantling then
26789: LD_EXP 62
26793: PUSH
26794: LD_VAR 0 9
26798: ARRAY
26799: PUSH
26800: LD_EXP 83
26804: PUSH
26805: LD_VAR 0 9
26809: ARRAY
26810: MINUS
26811: PUSH
26812: LD_EXP 48
26816: PUSH
26817: LD_VAR 0 9
26821: ARRAY
26822: LESS
26823: PUSH
26824: LD_EXP 66
26828: PUSH
26829: LD_VAR 0 9
26833: ARRAY
26834: PUSH
26835: LD_INT 0
26837: GREATER
26838: OR
26839: PUSH
26840: LD_VAR 0 20
26844: NOT
26845: AND
26846: IFFALSE 31225
// begin if ai_upcoming_building_data [ base ] = 0 then
26848: LD_EXP 66
26852: PUSH
26853: LD_VAR 0 9
26857: ARRAY
26858: PUSH
26859: LD_INT 0
26861: EQUAL
26862: IFFALSE 27290
// begin temp_list = [ ] ;
26864: LD_ADDR_VAR 0 4
26868: PUSH
26869: EMPTY
26870: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
26871: LD_ADDR_VAR 0 2
26875: PUSH
26876: LD_EXP 48
26880: PUSH
26881: LD_VAR 0 9
26885: ARRAY
26886: PUSH
26887: FOR_IN
26888: IFFALSE 26957
// if GetBType ( HexInfo ( i [ 1 ] , i [ 2 ] ) ) = - 1 and not i in ai_cannot_rebuild_these_buildings [ base ] then
26890: LD_VAR 0 2
26894: PUSH
26895: LD_INT 1
26897: ARRAY
26898: PPUSH
26899: LD_VAR 0 2
26903: PUSH
26904: LD_INT 2
26906: ARRAY
26907: PPUSH
26908: CALL_OW 428
26912: PPUSH
26913: CALL_OW 266
26917: PUSH
26918: LD_INT 1
26920: NEG
26921: EQUAL
26922: PUSH
26923: LD_VAR 0 2
26927: PUSH
26928: LD_EXP 67
26932: PUSH
26933: LD_VAR 0 9
26937: ARRAY
26938: IN
26939: NOT
26940: AND
26941: IFFALSE 26955
// begin temp_list = i ;
26943: LD_ADDR_VAR 0 4
26947: PUSH
26948: LD_VAR 0 2
26952: ST_TO_ADDR
// break ;
26953: GO 26957
// end ;
26955: GO 26887
26957: POP
26958: POP
// if temp_list > 0 then
26959: LD_VAR 0 4
26963: PUSH
26964: LD_INT 0
26966: GREATER
26967: IFFALSE 27290
// begin if temp_list [ 4 ] = b_bunker and GetBaseNation ( base ) in [ nation_american , nation_russian ] then
26969: LD_VAR 0 4
26973: PUSH
26974: LD_INT 4
26976: ARRAY
26977: PUSH
26978: LD_INT 32
26980: EQUAL
26981: PUSH
26982: LD_VAR 0 9
26986: PPUSH
26987: CALL 19035 0 1
26991: PUSH
26992: LD_INT 1
26994: PUSH
26995: LD_INT 3
26997: PUSH
26998: EMPTY
26999: LIST
27000: LIST
27001: IN
27002: AND
27003: IFFALSE 27265
// begin k = 0 ;
27005: LD_ADDR_VAR 0 17
27009: PUSH
27010: LD_INT 0
27012: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
27013: LD_ADDR_VAR 0 2
27017: PUSH
27018: LD_EXP 48
27022: PUSH
27023: LD_VAR 0 9
27027: ARRAY
27028: PUSH
27029: FOR_IN
27030: IFFALSE 27081
// if i [ 4 ] in [ b_breastwork , b_bunker , b_armoury , b_barracks , b_fort ] then
27032: LD_VAR 0 2
27036: PUSH
27037: LD_INT 4
27039: ARRAY
27040: PUSH
27041: LD_INT 31
27043: PUSH
27044: LD_INT 32
27046: PUSH
27047: LD_INT 4
27049: PUSH
27050: LD_INT 5
27052: PUSH
27053: LD_INT 35
27055: PUSH
27056: EMPTY
27057: LIST
27058: LIST
27059: LIST
27060: LIST
27061: LIST
27062: IN
27063: IFFALSE 27079
// k = k + 1 ;
27065: LD_ADDR_VAR 0 17
27069: PUSH
27070: LD_VAR 0 17
27074: PUSH
27075: LD_INT 1
27077: PLUS
27078: ST_TO_ADDR
27079: GO 27029
27081: POP
27082: POP
// if k > ai_soldiers [ base ] then
27083: LD_VAR 0 17
27087: PUSH
27088: LD_EXP 27
27092: PUSH
27093: LD_VAR 0 9
27097: ARRAY
27098: GREATER
27099: IFFALSE 27265
// begin for i = 1 to ai_buildings_locations [ base ] do
27101: LD_ADDR_VAR 0 2
27105: PUSH
27106: DOUBLE
27107: LD_INT 1
27109: DEC
27110: ST_TO_ADDR
27111: LD_EXP 48
27115: PUSH
27116: LD_VAR 0 9
27120: ARRAY
27121: PUSH
27122: FOR_TO
27123: IFFALSE 27242
// if ai_buildings_locations [ base ] [ i ] = temp_list then
27125: LD_EXP 48
27129: PUSH
27130: LD_VAR 0 9
27134: ARRAY
27135: PUSH
27136: LD_VAR 0 2
27140: ARRAY
27141: PUSH
27142: LD_VAR 0 4
27146: EQUAL
27147: IFFALSE 27240
// begin temp_list_2 = Replace ( ai_buildings_locations [ base ] [ i ] , 4 , b_turret ) ;
27149: LD_ADDR_VAR 0 8
27153: PUSH
27154: LD_EXP 48
27158: PUSH
27159: LD_VAR 0 9
27163: ARRAY
27164: PUSH
27165: LD_VAR 0 2
27169: ARRAY
27170: PPUSH
27171: LD_INT 4
27173: PPUSH
27174: LD_INT 33
27176: PPUSH
27177: CALL_OW 1
27181: ST_TO_ADDR
// temp_list_2 = Replace ( ai_buildings_locations [ base ] , i , temp_list_2 ) ;
27182: LD_ADDR_VAR 0 8
27186: PUSH
27187: LD_EXP 48
27191: PUSH
27192: LD_VAR 0 9
27196: ARRAY
27197: PPUSH
27198: LD_VAR 0 2
27202: PPUSH
27203: LD_VAR 0 8
27207: PPUSH
27208: CALL_OW 1
27212: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list_2 ) ;
27213: LD_ADDR_EXP 48
27217: PUSH
27218: LD_EXP 48
27222: PPUSH
27223: LD_VAR 0 9
27227: PPUSH
27228: LD_VAR 0 8
27232: PPUSH
27233: CALL_OW 1
27237: ST_TO_ADDR
// break ;
27238: GO 27242
// end ;
27240: GO 27122
27242: POP
27243: POP
// temp_list = Replace ( temp_list , 4 , b_turret ) ;
27244: LD_ADDR_VAR 0 4
27248: PUSH
27249: LD_VAR 0 4
27253: PPUSH
27254: LD_INT 4
27256: PPUSH
27257: LD_INT 33
27259: PPUSH
27260: CALL_OW 1
27264: ST_TO_ADDR
// end ; end ; ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , temp_list ) ;
27265: LD_ADDR_EXP 66
27269: PUSH
27270: LD_EXP 66
27274: PPUSH
27275: LD_VAR 0 9
27279: PPUSH
27280: LD_VAR 0 4
27284: PPUSH
27285: CALL_OW 1
27289: ST_TO_ADDR
// end ; end ; if ai_upcoming_building_data [ base ] > 0 then
27290: LD_EXP 66
27294: PUSH
27295: LD_VAR 0 9
27299: ARRAY
27300: PUSH
27301: LD_INT 0
27303: GREATER
27304: IFFALSE 31225
// begin if ai_building_constructor [ base ] = 0 then
27306: LD_EXP 63
27310: PUSH
27311: LD_VAR 0 9
27315: ARRAY
27316: PUSH
27317: LD_INT 0
27319: EQUAL
27320: IFFALSE 27638
// begin temp_list_2 = UnitFilter ( ai_engineers [ base ] , [ f_class , class_engineer ] ) ;
27322: LD_ADDR_VAR 0 8
27326: PUSH
27327: LD_EXP 29
27331: PUSH
27332: LD_VAR 0 9
27336: ARRAY
27337: PPUSH
27338: LD_INT 25
27340: PUSH
27341: LD_INT 2
27343: PUSH
27344: EMPTY
27345: LIST
27346: LIST
27347: PPUSH
27348: CALL_OW 72
27352: ST_TO_ADDR
// if temp_list_2 > 0 then
27353: LD_VAR 0 8
27357: PUSH
27358: LD_INT 0
27360: GREATER
27361: IFFALSE 27448
// begin temp_list = [ ] ;
27363: LD_ADDR_VAR 0 4
27367: PUSH
27368: EMPTY
27369: ST_TO_ADDR
// for i in temp_list_2 do
27370: LD_ADDR_VAR 0 2
27374: PUSH
27375: LD_VAR 0 8
27379: PUSH
27380: FOR_IN
27381: IFFALSE 27409
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
27383: LD_ADDR_VAR 0 4
27387: PUSH
27388: LD_VAR 0 4
27392: PUSH
27393: LD_VAR 0 2
27397: PPUSH
27398: LD_INT 2
27400: PPUSH
27401: CALL_OW 259
27405: ADD
27406: ST_TO_ADDR
27407: GO 27380
27409: POP
27410: POP
// ai_building_constructor = Replace ( ai_building_constructor , base , BestFromListByList ( temp_list_2 , temp_list ) ) ;
27411: LD_ADDR_EXP 63
27415: PUSH
27416: LD_EXP 63
27420: PPUSH
27421: LD_VAR 0 9
27425: PPUSH
27426: LD_VAR 0 8
27430: PPUSH
27431: LD_VAR 0 4
27435: PPUSH
27436: CALL_OW 79
27440: PPUSH
27441: CALL_OW 1
27445: ST_TO_ADDR
// end else
27446: GO 27638
// if ai_engineers [ base ] = 0 and ai_crane [ base ] > 0 and crane_usable then
27448: LD_EXP 29
27452: PUSH
27453: LD_VAR 0 9
27457: ARRAY
27458: PUSH
27459: LD_INT 0
27461: EQUAL
27462: PUSH
27463: LD_EXP 74
27467: PUSH
27468: LD_VAR 0 9
27472: ARRAY
27473: PUSH
27474: LD_INT 0
27476: GREATER
27477: AND
27478: PUSH
27479: LD_VAR 0 12
27483: AND
27484: IFFALSE 27638
// begin if InArea ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , crane_not_allowed_to_repair_area ) then
27486: LD_EXP 66
27490: PUSH
27491: LD_VAR 0 9
27495: ARRAY
27496: PUSH
27497: LD_INT 1
27499: ARRAY
27500: PPUSH
27501: LD_EXP 66
27505: PUSH
27506: LD_VAR 0 9
27510: ARRAY
27511: PUSH
27512: LD_INT 2
27514: ARRAY
27515: PPUSH
27516: LD_VAR 0 15
27520: PPUSH
27521: CALL_OW 309
27525: IFFALSE 27607
// begin temp_list = ai_cannot_rebuild_these_buildings [ base ] ^ [ ai_upcoming_building_data [ base ] ] ;
27527: LD_ADDR_VAR 0 4
27531: PUSH
27532: LD_EXP 67
27536: PUSH
27537: LD_VAR 0 9
27541: ARRAY
27542: PUSH
27543: LD_EXP 66
27547: PUSH
27548: LD_VAR 0 9
27552: ARRAY
27553: PUSH
27554: EMPTY
27555: LIST
27556: ADD
27557: ST_TO_ADDR
// ai_cannot_rebuild_these_buildings = Replace ( ai_cannot_rebuild_these_buildings , base , temp_list ) ;
27558: LD_ADDR_EXP 67
27562: PUSH
27563: LD_EXP 67
27567: PPUSH
27568: LD_VAR 0 9
27572: PPUSH
27573: LD_VAR 0 4
27577: PPUSH
27578: CALL_OW 1
27582: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
27583: LD_ADDR_EXP 66
27587: PUSH
27588: LD_EXP 66
27592: PPUSH
27593: LD_VAR 0 9
27597: PPUSH
27598: EMPTY
27599: PPUSH
27600: CALL_OW 1
27604: ST_TO_ADDR
// end else
27605: GO 27638
// ai_building_constructor = Replace ( ai_building_constructor , base , ai_crane [ base ] ) ;
27607: LD_ADDR_EXP 63
27611: PUSH
27612: LD_EXP 63
27616: PPUSH
27617: LD_VAR 0 9
27621: PPUSH
27622: LD_EXP 74
27626: PUSH
27627: LD_VAR 0 9
27631: ARRAY
27632: PPUSH
27633: CALL_OW 1
27637: 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
27638: LD_EXP 63
27642: PUSH
27643: LD_VAR 0 9
27647: ARRAY
27648: PUSH
27649: LD_INT 0
27651: GREATER
27652: PUSH
27653: LD_EXP 63
27657: PUSH
27658: LD_VAR 0 9
27662: ARRAY
27663: PUSH
27664: LD_VAR 0 3
27668: IN
27669: PUSH
27670: LD_EXP 63
27674: PUSH
27675: LD_VAR 0 9
27679: ARRAY
27680: PUSH
27681: LD_EXP 74
27685: PUSH
27686: LD_VAR 0 9
27690: ARRAY
27691: EQUAL
27692: PUSH
27693: LD_VAR 0 12
27697: AND
27698: OR
27699: AND
27700: IFFALSE 31225
// begin engineers_list = engineers_list diff ai_building_constructor [ base ] ;
27702: LD_ADDR_VAR 0 3
27706: PUSH
27707: LD_VAR 0 3
27711: PUSH
27712: LD_EXP 63
27716: PUSH
27717: LD_VAR 0 9
27721: ARRAY
27722: DIFF
27723: ST_TO_ADDR
// if ai_building_constructor [ base ] = ai_crane [ base ] then
27724: LD_EXP 63
27728: PUSH
27729: LD_VAR 0 9
27733: ARRAY
27734: PUSH
27735: LD_EXP 74
27739: PUSH
27740: LD_VAR 0 9
27744: ARRAY
27745: EQUAL
27746: IFFALSE 27756
// crane_usable = false ;
27748: LD_ADDR_VAR 0 12
27752: PUSH
27753: LD_INT 0
27755: ST_TO_ADDR
// away_dist = 7 ;
27756: LD_ADDR_VAR 0 7
27760: PUSH
27761: LD_INT 7
27763: ST_TO_ADDR
// if ai_vehicle_being_moved [ base ] = 0 then
27764: LD_EXP 64
27768: PUSH
27769: LD_VAR 0 9
27773: ARRAY
27774: PUSH
27775: LD_INT 0
27777: EQUAL
27778: IFFALSE 30967
// 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 ] ^ ai_sib_bomb_vehicles [ base ] , [ [ f_control , control_manual ] , [ f_empty ] , [ f_distxy , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , away_dist ] ] ) ;
27780: LD_ADDR_VAR 0 4
27784: PUSH
27785: LD_EXP 53
27789: PUSH
27790: LD_VAR 0 9
27794: ARRAY
27795: PUSH
27796: LD_EXP 86
27800: PUSH
27801: LD_VAR 0 9
27805: ARRAY
27806: ADD
27807: PUSH
27808: LD_EXP 87
27812: PUSH
27813: LD_VAR 0 9
27817: ARRAY
27818: ADD
27819: PUSH
27820: LD_EXP 81
27824: PUSH
27825: LD_VAR 0 9
27829: ARRAY
27830: ADD
27831: PUSH
27832: LD_EXP 74
27836: PUSH
27837: LD_VAR 0 9
27841: ARRAY
27842: ADD
27843: PUSH
27844: LD_EXP 71
27848: PUSH
27849: LD_VAR 0 9
27853: ARRAY
27854: ADD
27855: PUSH
27856: LD_EXP 93
27860: PUSH
27861: LD_VAR 0 9
27865: ARRAY
27866: ADD
27867: PPUSH
27868: LD_INT 33
27870: PUSH
27871: LD_INT 1
27873: PUSH
27874: EMPTY
27875: LIST
27876: LIST
27877: PUSH
27878: LD_INT 58
27880: PUSH
27881: EMPTY
27882: LIST
27883: PUSH
27884: LD_INT 92
27886: PUSH
27887: LD_EXP 66
27891: PUSH
27892: LD_VAR 0 9
27896: ARRAY
27897: PUSH
27898: LD_INT 1
27900: ARRAY
27901: PUSH
27902: LD_EXP 66
27906: PUSH
27907: LD_VAR 0 9
27911: ARRAY
27912: PUSH
27913: LD_INT 2
27915: ARRAY
27916: PUSH
27917: LD_VAR 0 7
27921: PUSH
27922: EMPTY
27923: LIST
27924: LIST
27925: LIST
27926: LIST
27927: PUSH
27928: EMPTY
27929: LIST
27930: LIST
27931: LIST
27932: PPUSH
27933: CALL_OW 72
27937: ST_TO_ADDR
// if temp_list > 0 then
27938: LD_VAR 0 4
27942: PUSH
27943: LD_INT 0
27945: GREATER
27946: IFFALSE 28157
// begin if ai_building_constructor [ base ] = ai_crane [ base ] then
27948: LD_EXP 63
27952: PUSH
27953: LD_VAR 0 9
27957: ARRAY
27958: PUSH
27959: LD_EXP 74
27963: PUSH
27964: LD_VAR 0 9
27968: ARRAY
27969: EQUAL
27970: IFFALSE 28075
// begin temp_list = ai_cannot_rebuild_these_buildings [ base ] ^ [ ai_upcoming_building_data [ base ] ] ;
27972: LD_ADDR_VAR 0 4
27976: PUSH
27977: LD_EXP 67
27981: PUSH
27982: LD_VAR 0 9
27986: ARRAY
27987: PUSH
27988: LD_EXP 66
27992: PUSH
27993: LD_VAR 0 9
27997: ARRAY
27998: PUSH
27999: EMPTY
28000: LIST
28001: ADD
28002: ST_TO_ADDR
// ai_cannot_rebuild_these_buildings = Replace ( ai_cannot_rebuild_these_buildings , base , temp_list ) ;
28003: LD_ADDR_EXP 67
28007: PUSH
28008: LD_EXP 67
28012: PPUSH
28013: LD_VAR 0 9
28017: PPUSH
28018: LD_VAR 0 4
28022: PPUSH
28023: CALL_OW 1
28027: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
28028: LD_ADDR_EXP 66
28032: PUSH
28033: LD_EXP 66
28037: PPUSH
28038: LD_VAR 0 9
28042: PPUSH
28043: EMPTY
28044: PPUSH
28045: CALL_OW 1
28049: ST_TO_ADDR
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
28050: LD_ADDR_EXP 63
28054: PUSH
28055: LD_EXP 63
28059: PPUSH
28060: LD_VAR 0 9
28064: PPUSH
28065: LD_INT 0
28067: PPUSH
28068: CALL_OW 1
28072: ST_TO_ADDR
// end else
28073: GO 28155
// begin ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , temp_list [ 1 ] ) ;
28075: LD_ADDR_EXP 64
28079: PUSH
28080: LD_EXP 64
28084: PPUSH
28085: LD_VAR 0 9
28089: PPUSH
28090: LD_VAR 0 4
28094: PUSH
28095: LD_INT 1
28097: ARRAY
28098: PPUSH
28099: CALL_OW 1
28103: ST_TO_ADDR
// temp_list_2 = ai_vehicles_having_been_moved [ base ] ^ temp_list [ 1 ] ;
28104: LD_ADDR_VAR 0 8
28108: PUSH
28109: LD_EXP 65
28113: PUSH
28114: LD_VAR 0 9
28118: ARRAY
28119: PUSH
28120: LD_VAR 0 4
28124: PUSH
28125: LD_INT 1
28127: ARRAY
28128: ADD
28129: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , temp_list_2 ) ;
28130: LD_ADDR_EXP 65
28134: PUSH
28135: LD_EXP 65
28139: PPUSH
28140: LD_VAR 0 9
28144: PPUSH
28145: LD_VAR 0 8
28149: PPUSH
28150: CALL_OW 1
28154: ST_TO_ADDR
// end ; end else
28155: GO 30965
// case GetType ( IsInUnit ( ai_building_constructor [ base ] ) ) of unit_building :
28157: LD_EXP 63
28161: PUSH
28162: LD_VAR 0 9
28166: ARRAY
28167: PPUSH
28168: CALL_OW 310
28172: PPUSH
28173: CALL_OW 247
28177: PUSH
28178: LD_INT 3
28180: DOUBLE
28181: EQUAL
28182: IFTRUE 28186
28184: GO 28204
28186: POP
// ComExitBuilding ( ai_building_constructor [ base ] ) ; unit_vehicle :
28187: LD_EXP 63
28191: PUSH
28192: LD_VAR 0 9
28196: ARRAY
28197: PPUSH
28198: CALL_OW 122
28202: GO 30965
28204: LD_INT 2
28206: DOUBLE
28207: EQUAL
28208: IFTRUE 28212
28210: GO 28230
28212: POP
// ComExitVehicle ( ai_building_constructor [ base ] ) ; else
28213: LD_EXP 63
28217: PUSH
28218: LD_VAR 0 9
28222: ARRAY
28223: PPUSH
28224: CALL_OW 121
28228: GO 30965
28230: POP
// case GetBType ( HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ) of - 1 :
28231: LD_EXP 66
28235: PUSH
28236: LD_VAR 0 9
28240: ARRAY
28241: PUSH
28242: LD_INT 1
28244: ARRAY
28245: PPUSH
28246: LD_EXP 66
28250: PUSH
28251: LD_VAR 0 9
28255: ARRAY
28256: PUSH
28257: LD_INT 2
28259: ARRAY
28260: PPUSH
28261: CALL_OW 428
28265: PPUSH
28266: CALL_OW 266
28270: PUSH
28271: LD_INT 1
28273: NEG
28274: DOUBLE
28275: EQUAL
28276: IFTRUE 28280
28278: GO 30470
28280: POP
// begin case ai_upcoming_building_data [ base ] [ 4 ] of b_warehouse :
28281: LD_EXP 66
28285: PUSH
28286: LD_VAR 0 9
28290: ARRAY
28291: PUSH
28292: LD_INT 4
28294: ARRAY
28295: PUSH
28296: LD_INT 1
28298: DOUBLE
28299: EQUAL
28300: IFTRUE 28304
28302: GO 28315
28304: POP
// i = b_depot ; b_factory :
28305: LD_ADDR_VAR 0 2
28309: PUSH
28310: LD_INT 0
28312: ST_TO_ADDR
28313: GO 28399
28315: LD_INT 3
28317: DOUBLE
28318: EQUAL
28319: IFTRUE 28323
28321: GO 28334
28323: POP
// i = b_workshop ; b_lab_half , b_lab_full :
28324: LD_ADDR_VAR 0 2
28328: PUSH
28329: LD_INT 2
28331: ST_TO_ADDR
28332: GO 28399
28334: LD_INT 7
28336: DOUBLE
28337: EQUAL
28338: IFTRUE 28348
28340: LD_INT 8
28342: DOUBLE
28343: EQUAL
28344: IFTRUE 28348
28346: GO 28359
28348: POP
// i = b_lab ; b_barracks :
28349: LD_ADDR_VAR 0 2
28353: PUSH
28354: LD_INT 6
28356: ST_TO_ADDR
28357: GO 28399
28359: LD_INT 5
28361: DOUBLE
28362: EQUAL
28363: IFTRUE 28367
28365: GO 28378
28367: POP
// i = b_armoury ; else
28368: LD_ADDR_VAR 0 2
28372: PUSH
28373: LD_INT 4
28375: ST_TO_ADDR
28376: GO 28399
28378: POP
// i = ai_upcoming_building_data [ base ] [ 4 ] ; end ;
28379: LD_ADDR_VAR 0 2
28383: PUSH
28384: LD_EXP 66
28388: PUSH
28389: LD_VAR 0 9
28393: ARRAY
28394: PUSH
28395: LD_INT 4
28397: ARRAY
28398: ST_TO_ADDR
// case i of b_depot :
28399: LD_VAR 0 2
28403: PUSH
28404: LD_INT 0
28406: DOUBLE
28407: EQUAL
28408: IFTRUE 28412
28410: GO 28489
28412: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
28413: LD_EXP 63
28417: PUSH
28418: LD_VAR 0 9
28422: ARRAY
28423: PPUSH
28424: CALL_OW 248
28428: PUSH
28429: LD_INT 3
28431: DOUBLE
28432: EQUAL
28433: IFTRUE 28437
28435: GO 28448
28437: POP
// b_value = 64 ; nation_american :
28438: LD_ADDR_VAR 0 13
28442: PUSH
28443: LD_INT 64
28445: ST_TO_ADDR
28446: GO 28487
28448: LD_INT 1
28450: DOUBLE
28451: EQUAL
28452: IFTRUE 28456
28454: GO 28467
28456: POP
// b_value = 1 ; nation_arabian :
28457: LD_ADDR_VAR 0 13
28461: PUSH
28462: LD_INT 1
28464: ST_TO_ADDR
28465: GO 28487
28467: LD_INT 2
28469: DOUBLE
28470: EQUAL
28471: IFTRUE 28475
28473: GO 28486
28475: POP
// b_value = 34 ; end ;
28476: LD_ADDR_VAR 0 13
28480: PUSH
28481: LD_INT 34
28483: ST_TO_ADDR
28484: GO 28487
28486: POP
// end ; b_workshop :
28487: GO 30382
28489: LD_INT 2
28491: DOUBLE
28492: EQUAL
28493: IFTRUE 28497
28495: GO 28574
28497: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
28498: LD_EXP 63
28502: PUSH
28503: LD_VAR 0 9
28507: ARRAY
28508: PPUSH
28509: CALL_OW 248
28513: PUSH
28514: LD_INT 3
28516: DOUBLE
28517: EQUAL
28518: IFTRUE 28522
28520: GO 28533
28522: POP
// b_value = 68 ; nation_american :
28523: LD_ADDR_VAR 0 13
28527: PUSH
28528: LD_INT 68
28530: ST_TO_ADDR
28531: GO 28572
28533: LD_INT 1
28535: DOUBLE
28536: EQUAL
28537: IFTRUE 28541
28539: GO 28552
28541: POP
// b_value = 5 ; nation_arabian :
28542: LD_ADDR_VAR 0 13
28546: PUSH
28547: LD_INT 5
28549: ST_TO_ADDR
28550: GO 28572
28552: LD_INT 2
28554: DOUBLE
28555: EQUAL
28556: IFTRUE 28560
28558: GO 28571
28560: POP
// b_value = 38 ; end ;
28561: LD_ADDR_VAR 0 13
28565: PUSH
28566: LD_INT 38
28568: ST_TO_ADDR
28569: GO 28572
28571: POP
// end ; b_armoury :
28572: GO 30382
28574: LD_INT 4
28576: DOUBLE
28577: EQUAL
28578: IFTRUE 28582
28580: GO 28659
28582: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
28583: LD_EXP 63
28587: PUSH
28588: LD_VAR 0 9
28592: ARRAY
28593: PPUSH
28594: CALL_OW 248
28598: PUSH
28599: LD_INT 3
28601: DOUBLE
28602: EQUAL
28603: IFTRUE 28607
28605: GO 28618
28607: POP
// b_value = 66 ; nation_american :
28608: LD_ADDR_VAR 0 13
28612: PUSH
28613: LD_INT 66
28615: ST_TO_ADDR
28616: GO 28657
28618: LD_INT 1
28620: DOUBLE
28621: EQUAL
28622: IFTRUE 28626
28624: GO 28637
28626: POP
// b_value = 3 ; nation_arabian :
28627: LD_ADDR_VAR 0 13
28631: PUSH
28632: LD_INT 3
28634: ST_TO_ADDR
28635: GO 28657
28637: LD_INT 2
28639: DOUBLE
28640: EQUAL
28641: IFTRUE 28645
28643: GO 28656
28645: POP
// b_value = 36 ; end ;
28646: LD_ADDR_VAR 0 13
28650: PUSH
28651: LD_INT 36
28653: ST_TO_ADDR
28654: GO 28657
28656: POP
// end ; b_lab :
28657: GO 30382
28659: LD_INT 6
28661: DOUBLE
28662: EQUAL
28663: IFTRUE 28667
28665: GO 28744
28667: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
28668: LD_EXP 63
28672: PUSH
28673: LD_VAR 0 9
28677: ARRAY
28678: PPUSH
28679: CALL_OW 248
28683: PUSH
28684: LD_INT 3
28686: DOUBLE
28687: EQUAL
28688: IFTRUE 28692
28690: GO 28703
28692: POP
// b_value = 77 ; nation_american :
28693: LD_ADDR_VAR 0 13
28697: PUSH
28698: LD_INT 77
28700: ST_TO_ADDR
28701: GO 28742
28703: LD_INT 1
28705: DOUBLE
28706: EQUAL
28707: IFTRUE 28711
28709: GO 28722
28711: POP
// b_value = 17 ; nation_arabian :
28712: LD_ADDR_VAR 0 13
28716: PUSH
28717: LD_INT 17
28719: ST_TO_ADDR
28720: GO 28742
28722: LD_INT 2
28724: DOUBLE
28725: EQUAL
28726: IFTRUE 28730
28728: GO 28741
28730: POP
// b_value = 48 ; end ;
28731: LD_ADDR_VAR 0 13
28735: PUSH
28736: LD_INT 48
28738: ST_TO_ADDR
28739: GO 28742
28741: POP
// end ; b_oil_power :
28742: GO 30382
28744: LD_INT 26
28746: DOUBLE
28747: EQUAL
28748: IFTRUE 28752
28750: GO 28829
28752: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
28753: LD_EXP 63
28757: PUSH
28758: LD_VAR 0 9
28762: ARRAY
28763: PPUSH
28764: CALL_OW 248
28768: PUSH
28769: LD_INT 3
28771: DOUBLE
28772: EQUAL
28773: IFTRUE 28777
28775: GO 28788
28777: POP
// b_value = 85 ; nation_american :
28778: LD_ADDR_VAR 0 13
28782: PUSH
28783: LD_INT 85
28785: ST_TO_ADDR
28786: GO 28827
28788: LD_INT 1
28790: DOUBLE
28791: EQUAL
28792: IFTRUE 28796
28794: GO 28807
28796: POP
// b_value = 25 ; nation_arabian :
28797: LD_ADDR_VAR 0 13
28801: PUSH
28802: LD_INT 25
28804: ST_TO_ADDR
28805: GO 28827
28807: LD_INT 2
28809: DOUBLE
28810: EQUAL
28811: IFTRUE 28815
28813: GO 28826
28815: POP
// b_value = 56 ; end ;
28816: LD_ADDR_VAR 0 13
28820: PUSH
28821: LD_INT 56
28823: ST_TO_ADDR
28824: GO 28827
28826: POP
// end ; b_solar_power :
28827: GO 30382
28829: LD_INT 27
28831: DOUBLE
28832: EQUAL
28833: IFTRUE 28837
28835: GO 28915
28837: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
28838: LD_EXP 63
28842: PUSH
28843: LD_VAR 0 9
28847: ARRAY
28848: PPUSH
28849: CALL_OW 248
28853: PUSH
28854: LD_INT 3
28856: DOUBLE
28857: EQUAL
28858: IFTRUE 28862
28860: GO 28874
28862: POP
// b_value = - 7 ; nation_american :
28863: LD_ADDR_VAR 0 13
28867: PUSH
28868: LD_INT 7
28870: NEG
28871: ST_TO_ADDR
28872: GO 28913
28874: LD_INT 1
28876: DOUBLE
28877: EQUAL
28878: IFTRUE 28882
28880: GO 28893
28882: POP
// b_value = 26 ; nation_arabian :
28883: LD_ADDR_VAR 0 13
28887: PUSH
28888: LD_INT 26
28890: ST_TO_ADDR
28891: GO 28913
28893: LD_INT 2
28895: DOUBLE
28896: EQUAL
28897: IFTRUE 28901
28899: GO 28912
28901: POP
// b_value = 57 ; end ;
28902: LD_ADDR_VAR 0 13
28906: PUSH
28907: LD_INT 57
28909: ST_TO_ADDR
28910: GO 28913
28912: POP
// end ; b_siberite_power :
28913: GO 30382
28915: LD_INT 28
28917: DOUBLE
28918: EQUAL
28919: IFTRUE 28923
28921: GO 29000
28923: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
28924: LD_EXP 63
28928: PUSH
28929: LD_VAR 0 9
28933: ARRAY
28934: PPUSH
28935: CALL_OW 248
28939: PUSH
28940: LD_INT 3
28942: DOUBLE
28943: EQUAL
28944: IFTRUE 28948
28946: GO 28959
28948: POP
// b_value = 86 ; nation_american :
28949: LD_ADDR_VAR 0 13
28953: PUSH
28954: LD_INT 86
28956: ST_TO_ADDR
28957: GO 28998
28959: LD_INT 1
28961: DOUBLE
28962: EQUAL
28963: IFTRUE 28967
28965: GO 28978
28967: POP
// b_value = 27 ; nation_arabian :
28968: LD_ADDR_VAR 0 13
28972: PUSH
28973: LD_INT 27
28975: ST_TO_ADDR
28976: GO 28998
28978: LD_INT 2
28980: DOUBLE
28981: EQUAL
28982: IFTRUE 28986
28984: GO 28997
28986: POP
// b_value = 58 ; end ;
28987: LD_ADDR_VAR 0 13
28991: PUSH
28992: LD_INT 58
28994: ST_TO_ADDR
28995: GO 28998
28997: POP
// end ; b_oil_mine :
28998: GO 30382
29000: LD_INT 29
29002: DOUBLE
29003: EQUAL
29004: IFTRUE 29008
29006: GO 29085
29008: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
29009: LD_EXP 63
29013: PUSH
29014: LD_VAR 0 9
29018: ARRAY
29019: PPUSH
29020: CALL_OW 248
29024: PUSH
29025: LD_INT 3
29027: DOUBLE
29028: EQUAL
29029: IFTRUE 29033
29031: GO 29044
29033: POP
// b_value = 87 ; nation_american :
29034: LD_ADDR_VAR 0 13
29038: PUSH
29039: LD_INT 87
29041: ST_TO_ADDR
29042: GO 29083
29044: LD_INT 1
29046: DOUBLE
29047: EQUAL
29048: IFTRUE 29052
29050: GO 29063
29052: POP
// b_value = 28 ; nation_arabian :
29053: LD_ADDR_VAR 0 13
29057: PUSH
29058: LD_INT 28
29060: ST_TO_ADDR
29061: GO 29083
29063: LD_INT 2
29065: DOUBLE
29066: EQUAL
29067: IFTRUE 29071
29069: GO 29082
29071: POP
// b_value = 59 ; end ;
29072: LD_ADDR_VAR 0 13
29076: PUSH
29077: LD_INT 59
29079: ST_TO_ADDR
29080: GO 29083
29082: POP
// end ; b_siberite_mine :
29083: GO 30382
29085: LD_INT 30
29087: DOUBLE
29088: EQUAL
29089: IFTRUE 29093
29091: GO 29170
29093: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
29094: LD_EXP 63
29098: PUSH
29099: LD_VAR 0 9
29103: ARRAY
29104: PPUSH
29105: CALL_OW 248
29109: PUSH
29110: LD_INT 3
29112: DOUBLE
29113: EQUAL
29114: IFTRUE 29118
29116: GO 29129
29118: POP
// b_value = 88 ; nation_american :
29119: LD_ADDR_VAR 0 13
29123: PUSH
29124: LD_INT 88
29126: ST_TO_ADDR
29127: GO 29168
29129: LD_INT 1
29131: DOUBLE
29132: EQUAL
29133: IFTRUE 29137
29135: GO 29148
29137: POP
// b_value = 29 ; nation_arabian :
29138: LD_ADDR_VAR 0 13
29142: PUSH
29143: LD_INT 29
29145: ST_TO_ADDR
29146: GO 29168
29148: LD_INT 2
29150: DOUBLE
29151: EQUAL
29152: IFTRUE 29156
29154: GO 29167
29156: POP
// b_value = 60 ; end ;
29157: LD_ADDR_VAR 0 13
29161: PUSH
29162: LD_INT 60
29164: ST_TO_ADDR
29165: GO 29168
29167: POP
// end ; b_breastwork :
29168: GO 30382
29170: LD_INT 31
29172: DOUBLE
29173: EQUAL
29174: IFTRUE 29178
29176: GO 29255
29178: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
29179: LD_EXP 63
29183: PUSH
29184: LD_VAR 0 9
29188: ARRAY
29189: PPUSH
29190: CALL_OW 248
29194: PUSH
29195: LD_INT 3
29197: DOUBLE
29198: EQUAL
29199: IFTRUE 29203
29201: GO 29214
29203: POP
// b_value = 89 ; nation_american :
29204: LD_ADDR_VAR 0 13
29208: PUSH
29209: LD_INT 89
29211: ST_TO_ADDR
29212: GO 29253
29214: LD_INT 1
29216: DOUBLE
29217: EQUAL
29218: IFTRUE 29222
29220: GO 29233
29222: POP
// b_value = 30 ; nation_arabian :
29223: LD_ADDR_VAR 0 13
29227: PUSH
29228: LD_INT 30
29230: ST_TO_ADDR
29231: GO 29253
29233: LD_INT 2
29235: DOUBLE
29236: EQUAL
29237: IFTRUE 29241
29239: GO 29252
29241: POP
// b_value = 61 ; end ;
29242: LD_ADDR_VAR 0 13
29246: PUSH
29247: LD_INT 61
29249: ST_TO_ADDR
29250: GO 29253
29252: POP
// end ; b_bunker :
29253: GO 30382
29255: LD_INT 32
29257: DOUBLE
29258: EQUAL
29259: IFTRUE 29263
29261: GO 29340
29263: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
29264: LD_EXP 63
29268: PUSH
29269: LD_VAR 0 9
29273: ARRAY
29274: PPUSH
29275: CALL_OW 248
29279: PUSH
29280: LD_INT 3
29282: DOUBLE
29283: EQUAL
29284: IFTRUE 29288
29286: GO 29299
29288: POP
// b_value = 90 ; nation_american :
29289: LD_ADDR_VAR 0 13
29293: PUSH
29294: LD_INT 90
29296: ST_TO_ADDR
29297: GO 29338
29299: LD_INT 1
29301: DOUBLE
29302: EQUAL
29303: IFTRUE 29307
29305: GO 29318
29307: POP
// b_value = 31 ; nation_arabian :
29308: LD_ADDR_VAR 0 13
29312: PUSH
29313: LD_INT 31
29315: ST_TO_ADDR
29316: GO 29338
29318: LD_INT 2
29320: DOUBLE
29321: EQUAL
29322: IFTRUE 29326
29324: GO 29337
29326: POP
// b_value = 62 ; end ;
29327: LD_ADDR_VAR 0 13
29331: PUSH
29332: LD_INT 62
29334: ST_TO_ADDR
29335: GO 29338
29337: POP
// end ; b_turret :
29338: GO 30382
29340: LD_INT 33
29342: DOUBLE
29343: EQUAL
29344: IFTRUE 29348
29346: GO 29426
29348: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
29349: LD_EXP 63
29353: PUSH
29354: LD_VAR 0 9
29358: ARRAY
29359: PPUSH
29360: CALL_OW 248
29364: PUSH
29365: LD_INT 3
29367: DOUBLE
29368: EQUAL
29369: IFTRUE 29373
29371: GO 29384
29373: POP
// b_value = 91 ; nation_american :
29374: LD_ADDR_VAR 0 13
29378: PUSH
29379: LD_INT 91
29381: ST_TO_ADDR
29382: GO 29424
29384: LD_INT 1
29386: DOUBLE
29387: EQUAL
29388: IFTRUE 29392
29390: GO 29403
29392: POP
// b_value = 32 ; nation_arabian :
29393: LD_ADDR_VAR 0 13
29397: PUSH
29398: LD_INT 32
29400: ST_TO_ADDR
29401: GO 29424
29403: LD_INT 2
29405: DOUBLE
29406: EQUAL
29407: IFTRUE 29411
29409: GO 29423
29411: POP
// b_value = - 7 ; end ;
29412: LD_ADDR_VAR 0 13
29416: PUSH
29417: LD_INT 7
29419: NEG
29420: ST_TO_ADDR
29421: GO 29424
29423: POP
// end ; b_teleport :
29424: GO 30382
29426: LD_INT 34
29428: DOUBLE
29429: EQUAL
29430: IFTRUE 29434
29432: GO 29513
29434: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
29435: LD_EXP 63
29439: PUSH
29440: LD_VAR 0 9
29444: ARRAY
29445: PPUSH
29446: CALL_OW 248
29450: PUSH
29451: LD_INT 3
29453: DOUBLE
29454: EQUAL
29455: IFTRUE 29459
29457: GO 29470
29459: POP
// b_value = 92 ; nation_american :
29460: LD_ADDR_VAR 0 13
29464: PUSH
29465: LD_INT 92
29467: ST_TO_ADDR
29468: GO 29511
29470: LD_INT 1
29472: DOUBLE
29473: EQUAL
29474: IFTRUE 29478
29476: GO 29490
29478: POP
// b_value = - 7 ; nation_arabian :
29479: LD_ADDR_VAR 0 13
29483: PUSH
29484: LD_INT 7
29486: NEG
29487: ST_TO_ADDR
29488: GO 29511
29490: LD_INT 2
29492: DOUBLE
29493: EQUAL
29494: IFTRUE 29498
29496: GO 29510
29498: POP
// b_value = - 7 ; end ;
29499: LD_ADDR_VAR 0 13
29503: PUSH
29504: LD_INT 7
29506: NEG
29507: ST_TO_ADDR
29508: GO 29511
29510: POP
// end ; b_control_tower :
29511: GO 30382
29513: LD_INT 36
29515: DOUBLE
29516: EQUAL
29517: IFTRUE 29521
29519: GO 29600
29521: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
29522: LD_EXP 63
29526: PUSH
29527: LD_VAR 0 9
29531: ARRAY
29532: PPUSH
29533: CALL_OW 248
29537: PUSH
29538: LD_INT 3
29540: DOUBLE
29541: EQUAL
29542: IFTRUE 29546
29544: GO 29558
29546: POP
// b_value = - 7 ; nation_american :
29547: LD_ADDR_VAR 0 13
29551: PUSH
29552: LD_INT 7
29554: NEG
29555: ST_TO_ADDR
29556: GO 29598
29558: LD_INT 1
29560: DOUBLE
29561: EQUAL
29562: IFTRUE 29566
29564: GO 29577
29566: POP
// b_value = 94 ; nation_arabian :
29567: LD_ADDR_VAR 0 13
29571: PUSH
29572: LD_INT 94
29574: ST_TO_ADDR
29575: GO 29598
29577: LD_INT 2
29579: DOUBLE
29580: EQUAL
29581: IFTRUE 29585
29583: GO 29597
29585: POP
// b_value = - 7 ; end ;
29586: LD_ADDR_VAR 0 13
29590: PUSH
29591: LD_INT 7
29593: NEG
29594: ST_TO_ADDR
29595: GO 29598
29597: POP
// end ; b_ext_track :
29598: GO 30382
29600: LD_INT 16
29602: DOUBLE
29603: EQUAL
29604: IFTRUE 29608
29606: GO 29685
29608: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
29609: LD_EXP 63
29613: PUSH
29614: LD_VAR 0 9
29618: ARRAY
29619: PPUSH
29620: CALL_OW 248
29624: PUSH
29625: LD_INT 3
29627: DOUBLE
29628: EQUAL
29629: IFTRUE 29633
29631: GO 29644
29633: POP
// b_value = 70 ; nation_american :
29634: LD_ADDR_VAR 0 13
29638: PUSH
29639: LD_INT 70
29641: ST_TO_ADDR
29642: GO 29683
29644: LD_INT 1
29646: DOUBLE
29647: EQUAL
29648: IFTRUE 29652
29650: GO 29663
29652: POP
// b_value = 7 ; nation_arabian :
29653: LD_ADDR_VAR 0 13
29657: PUSH
29658: LD_INT 7
29660: ST_TO_ADDR
29661: GO 29683
29663: LD_INT 2
29665: DOUBLE
29666: EQUAL
29667: IFTRUE 29671
29669: GO 29682
29671: POP
// b_value = 40 ; end ;
29672: LD_ADDR_VAR 0 13
29676: PUSH
29677: LD_INT 40
29679: ST_TO_ADDR
29680: GO 29683
29682: POP
// end ; b_ext_gun :
29683: GO 30382
29685: LD_INT 17
29687: DOUBLE
29688: EQUAL
29689: IFTRUE 29693
29691: GO 29770
29693: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
29694: LD_EXP 63
29698: PUSH
29699: LD_VAR 0 9
29703: ARRAY
29704: PPUSH
29705: CALL_OW 248
29709: PUSH
29710: LD_INT 3
29712: DOUBLE
29713: EQUAL
29714: IFTRUE 29718
29716: GO 29729
29718: POP
// b_value = 71 ; nation_american :
29719: LD_ADDR_VAR 0 13
29723: PUSH
29724: LD_INT 71
29726: ST_TO_ADDR
29727: GO 29768
29729: LD_INT 1
29731: DOUBLE
29732: EQUAL
29733: IFTRUE 29737
29735: GO 29748
29737: POP
// b_value = 8 ; nation_arabian :
29738: LD_ADDR_VAR 0 13
29742: PUSH
29743: LD_INT 8
29745: ST_TO_ADDR
29746: GO 29768
29748: LD_INT 2
29750: DOUBLE
29751: EQUAL
29752: IFTRUE 29756
29754: GO 29767
29756: POP
// b_value = 41 ; end ;
29757: LD_ADDR_VAR 0 13
29761: PUSH
29762: LD_INT 41
29764: ST_TO_ADDR
29765: GO 29768
29767: POP
// end ; b_ext_rocket :
29768: GO 30382
29770: LD_INT 18
29772: DOUBLE
29773: EQUAL
29774: IFTRUE 29778
29776: GO 29855
29778: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
29779: LD_EXP 63
29783: PUSH
29784: LD_VAR 0 9
29788: ARRAY
29789: PPUSH
29790: CALL_OW 248
29794: PUSH
29795: LD_INT 3
29797: DOUBLE
29798: EQUAL
29799: IFTRUE 29803
29801: GO 29814
29803: POP
// b_value = 72 ; nation_american :
29804: LD_ADDR_VAR 0 13
29808: PUSH
29809: LD_INT 72
29811: ST_TO_ADDR
29812: GO 29853
29814: LD_INT 1
29816: DOUBLE
29817: EQUAL
29818: IFTRUE 29822
29820: GO 29833
29822: POP
// b_value = 9 ; nation_arabian :
29823: LD_ADDR_VAR 0 13
29827: PUSH
29828: LD_INT 9
29830: ST_TO_ADDR
29831: GO 29853
29833: LD_INT 2
29835: DOUBLE
29836: EQUAL
29837: IFTRUE 29841
29839: GO 29852
29841: POP
// b_value = 42 ; end ;
29842: LD_ADDR_VAR 0 13
29846: PUSH
29847: LD_INT 42
29849: ST_TO_ADDR
29850: GO 29853
29852: POP
// end ; b_ext_noncombat :
29853: GO 30382
29855: LD_INT 19
29857: DOUBLE
29858: EQUAL
29859: IFTRUE 29863
29861: GO 29941
29863: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
29864: LD_EXP 63
29868: PUSH
29869: LD_VAR 0 9
29873: ARRAY
29874: PPUSH
29875: CALL_OW 248
29879: PUSH
29880: LD_INT 3
29882: DOUBLE
29883: EQUAL
29884: IFTRUE 29888
29886: GO 29899
29888: POP
// b_value = 73 ; nation_american :
29889: LD_ADDR_VAR 0 13
29893: PUSH
29894: LD_INT 73
29896: ST_TO_ADDR
29897: GO 29939
29899: LD_INT 1
29901: DOUBLE
29902: EQUAL
29903: IFTRUE 29907
29905: GO 29918
29907: POP
// b_value = 10 ; nation_arabian :
29908: LD_ADDR_VAR 0 13
29912: PUSH
29913: LD_INT 10
29915: ST_TO_ADDR
29916: GO 29939
29918: LD_INT 2
29920: DOUBLE
29921: EQUAL
29922: IFTRUE 29926
29924: GO 29938
29926: POP
// b_value = - 7 ; end ;
29927: LD_ADDR_VAR 0 13
29931: PUSH
29932: LD_INT 7
29934: NEG
29935: ST_TO_ADDR
29936: GO 29939
29938: POP
// end ; b_ext_radar :
29939: GO 30382
29941: LD_INT 20
29943: DOUBLE
29944: EQUAL
29945: IFTRUE 29949
29947: GO 30027
29949: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
29950: LD_EXP 63
29954: PUSH
29955: LD_VAR 0 9
29959: ARRAY
29960: PPUSH
29961: CALL_OW 248
29965: PUSH
29966: LD_INT 3
29968: DOUBLE
29969: EQUAL
29970: IFTRUE 29974
29972: GO 29986
29974: POP
// b_value = - 7 ; nation_american :
29975: LD_ADDR_VAR 0 13
29979: PUSH
29980: LD_INT 7
29982: NEG
29983: ST_TO_ADDR
29984: GO 30025
29986: LD_INT 1
29988: DOUBLE
29989: EQUAL
29990: IFTRUE 29994
29992: GO 30005
29994: POP
// b_value = 11 ; nation_arabian :
29995: LD_ADDR_VAR 0 13
29999: PUSH
30000: LD_INT 11
30002: ST_TO_ADDR
30003: GO 30025
30005: LD_INT 2
30007: DOUBLE
30008: EQUAL
30009: IFTRUE 30013
30011: GO 30024
30013: POP
// b_value = 44 ; end ;
30014: LD_ADDR_VAR 0 13
30018: PUSH
30019: LD_INT 44
30021: ST_TO_ADDR
30022: GO 30025
30024: POP
// end ; b_ext_siberium :
30025: GO 30382
30027: LD_INT 21
30029: DOUBLE
30030: EQUAL
30031: IFTRUE 30035
30033: GO 30112
30035: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
30036: LD_EXP 63
30040: PUSH
30041: LD_VAR 0 9
30045: ARRAY
30046: PPUSH
30047: CALL_OW 248
30051: PUSH
30052: LD_INT 3
30054: DOUBLE
30055: EQUAL
30056: IFTRUE 30060
30058: GO 30071
30060: POP
// b_value = 75 ; nation_american :
30061: LD_ADDR_VAR 0 13
30065: PUSH
30066: LD_INT 75
30068: ST_TO_ADDR
30069: GO 30110
30071: LD_INT 1
30073: DOUBLE
30074: EQUAL
30075: IFTRUE 30079
30077: GO 30090
30079: POP
// b_value = 12 ; nation_arabian :
30080: LD_ADDR_VAR 0 13
30084: PUSH
30085: LD_INT 12
30087: ST_TO_ADDR
30088: GO 30110
30090: LD_INT 2
30092: DOUBLE
30093: EQUAL
30094: IFTRUE 30098
30096: GO 30109
30098: POP
// b_value = 45 ; end ;
30099: LD_ADDR_VAR 0 13
30103: PUSH
30104: LD_INT 45
30106: ST_TO_ADDR
30107: GO 30110
30109: POP
// end ; b_ext_stitch :
30110: GO 30382
30112: LD_INT 23
30114: DOUBLE
30115: EQUAL
30116: IFTRUE 30120
30118: GO 30199
30120: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
30121: LD_EXP 63
30125: PUSH
30126: LD_VAR 0 9
30130: ARRAY
30131: PPUSH
30132: CALL_OW 248
30136: PUSH
30137: LD_INT 3
30139: DOUBLE
30140: EQUAL
30141: IFTRUE 30145
30143: GO 30157
30145: POP
// b_value = - 7 ; nation_american :
30146: LD_ADDR_VAR 0 13
30150: PUSH
30151: LD_INT 7
30153: NEG
30154: ST_TO_ADDR
30155: GO 30197
30157: LD_INT 1
30159: DOUBLE
30160: EQUAL
30161: IFTRUE 30165
30163: GO 30177
30165: POP
// b_value = - 7 ; nation_arabian :
30166: LD_ADDR_VAR 0 13
30170: PUSH
30171: LD_INT 7
30173: NEG
30174: ST_TO_ADDR
30175: GO 30197
30177: LD_INT 2
30179: DOUBLE
30180: EQUAL
30181: IFTRUE 30185
30183: GO 30196
30185: POP
// b_value = 43 ; end ;
30186: LD_ADDR_VAR 0 13
30190: PUSH
30191: LD_INT 43
30193: ST_TO_ADDR
30194: GO 30197
30196: POP
// end ; b_ext_computer :
30197: GO 30382
30199: LD_INT 24
30201: DOUBLE
30202: EQUAL
30203: IFTRUE 30207
30205: GO 30285
30207: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
30208: LD_EXP 63
30212: PUSH
30213: LD_VAR 0 9
30217: ARRAY
30218: PPUSH
30219: CALL_OW 248
30223: PUSH
30224: LD_INT 3
30226: DOUBLE
30227: EQUAL
30228: IFTRUE 30232
30230: GO 30243
30232: POP
// b_value = 76 ; nation_american :
30233: LD_ADDR_VAR 0 13
30237: PUSH
30238: LD_INT 76
30240: ST_TO_ADDR
30241: GO 30283
30243: LD_INT 1
30245: DOUBLE
30246: EQUAL
30247: IFTRUE 30251
30249: GO 30262
30251: POP
// b_value = 15 ; nation_arabian :
30252: LD_ADDR_VAR 0 13
30256: PUSH
30257: LD_INT 15
30259: ST_TO_ADDR
30260: GO 30283
30262: LD_INT 2
30264: DOUBLE
30265: EQUAL
30266: IFTRUE 30270
30268: GO 30282
30270: POP
// b_value = - 7 ; end ;
30271: LD_ADDR_VAR 0 13
30275: PUSH
30276: LD_INT 7
30278: NEG
30279: ST_TO_ADDR
30280: GO 30283
30282: POP
// end ; b_ext_laser :
30283: GO 30382
30285: LD_INT 25
30287: DOUBLE
30288: EQUAL
30289: IFTRUE 30293
30291: GO 30372
30293: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
30294: LD_EXP 63
30298: PUSH
30299: LD_VAR 0 9
30303: ARRAY
30304: PPUSH
30305: CALL_OW 248
30309: PUSH
30310: LD_INT 3
30312: DOUBLE
30313: EQUAL
30314: IFTRUE 30318
30316: GO 30330
30318: POP
// b_value = - 7 ; nation_american :
30319: LD_ADDR_VAR 0 13
30323: PUSH
30324: LD_INT 7
30326: NEG
30327: ST_TO_ADDR
30328: GO 30370
30330: LD_INT 1
30332: DOUBLE
30333: EQUAL
30334: IFTRUE 30338
30336: GO 30349
30338: POP
// b_value = 16 ; nation_arabian :
30339: LD_ADDR_VAR 0 13
30343: PUSH
30344: LD_INT 16
30346: ST_TO_ADDR
30347: GO 30370
30349: LD_INT 2
30351: DOUBLE
30352: EQUAL
30353: IFTRUE 30357
30355: GO 30369
30357: POP
// b_value = - 7 ; end ;
30358: LD_ADDR_VAR 0 13
30362: PUSH
30363: LD_INT 7
30365: NEG
30366: ST_TO_ADDR
30367: GO 30370
30369: POP
// end ; else
30370: GO 30382
30372: POP
// b_value = - 42 ; end ;
30373: LD_ADDR_VAR 0 13
30377: PUSH
30378: LD_INT 42
30380: NEG
30381: 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 ] ] ) ;
30382: LD_EXP 63
30386: PUSH
30387: LD_VAR 0 9
30391: ARRAY
30392: PPUSH
30393: LD_STRING B
30395: PUSH
30396: LD_EXP 66
30400: PUSH
30401: LD_VAR 0 9
30405: ARRAY
30406: PUSH
30407: LD_INT 1
30409: ARRAY
30410: PUSH
30411: LD_EXP 66
30415: PUSH
30416: LD_VAR 0 9
30420: ARRAY
30421: PUSH
30422: LD_INT 2
30424: ARRAY
30425: PUSH
30426: LD_INT 0
30428: PUSH
30429: LD_VAR 0 13
30433: PUSH
30434: LD_EXP 66
30438: PUSH
30439: LD_VAR 0 9
30443: ARRAY
30444: PUSH
30445: LD_INT 3
30447: ARRAY
30448: PUSH
30449: LD_INT 0
30451: PUSH
30452: EMPTY
30453: LIST
30454: LIST
30455: LIST
30456: LIST
30457: LIST
30458: LIST
30459: LIST
30460: PUSH
30461: EMPTY
30462: LIST
30463: PPUSH
30464: CALL_OW 446
// end ; b_depot :
30468: GO 30965
30470: LD_INT 0
30472: DOUBLE
30473: EQUAL
30474: IFTRUE 30478
30476: GO 30527
30478: POP
// begin ComUpgrade ( ai_depot [ base ] ) ;
30479: LD_EXP 36
30483: PUSH
30484: LD_VAR 0 9
30488: ARRAY
30489: PPUSH
30490: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , ai_depot [ base ] ) ;
30494: LD_ADDR_EXP 60
30498: PUSH
30499: LD_EXP 60
30503: PPUSH
30504: LD_VAR 0 9
30508: PPUSH
30509: LD_EXP 36
30513: PUSH
30514: LD_VAR 0 9
30518: ARRAY
30519: PPUSH
30520: CALL_OW 1
30524: ST_TO_ADDR
// end ; b_workshop :
30525: GO 30965
30527: LD_INT 2
30529: DOUBLE
30530: EQUAL
30531: IFTRUE 30535
30533: GO 30612
30535: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
30536: LD_ADDR_VAR 0 6
30540: PUSH
30541: LD_EXP 66
30545: PUSH
30546: LD_VAR 0 9
30550: ARRAY
30551: PUSH
30552: LD_INT 1
30554: ARRAY
30555: PPUSH
30556: LD_EXP 66
30560: PUSH
30561: LD_VAR 0 9
30565: ARRAY
30566: PUSH
30567: LD_INT 2
30569: ARRAY
30570: PPUSH
30571: CALL_OW 428
30575: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
30576: LD_VAR 0 6
30580: PPUSH
30581: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
30585: LD_ADDR_EXP 60
30589: PUSH
30590: LD_EXP 60
30594: PPUSH
30595: LD_VAR 0 9
30599: PPUSH
30600: LD_VAR 0 6
30604: PPUSH
30605: CALL_OW 1
30609: ST_TO_ADDR
// end ; b_lab , b_lab_half :
30610: GO 30965
30612: LD_INT 6
30614: DOUBLE
30615: EQUAL
30616: IFTRUE 30626
30618: LD_INT 7
30620: DOUBLE
30621: EQUAL
30622: IFTRUE 30626
30624: GO 30879
30626: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
30627: LD_ADDR_VAR 0 6
30631: PUSH
30632: LD_EXP 66
30636: PUSH
30637: LD_VAR 0 9
30641: ARRAY
30642: PUSH
30643: LD_INT 1
30645: ARRAY
30646: PPUSH
30647: LD_EXP 66
30651: PUSH
30652: LD_VAR 0 9
30656: ARRAY
30657: PUSH
30658: LD_INT 2
30660: ARRAY
30661: PPUSH
30662: CALL_OW 428
30666: 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
30667: LD_EXP 66
30671: PUSH
30672: LD_VAR 0 9
30676: ARRAY
30677: PUSH
30678: LD_INT 5
30680: ARRAY
30681: PUSH
30682: LD_INT 9
30684: NONEQUAL
30685: PUSH
30686: LD_EXP 66
30690: PUSH
30691: LD_VAR 0 9
30695: ARRAY
30696: PUSH
30697: LD_INT 5
30699: ARRAY
30700: PUSH
30701: LD_VAR 0 6
30705: PPUSH
30706: LD_INT 1
30708: PPUSH
30709: CALL_OW 268
30713: PUSH
30714: LD_VAR 0 6
30718: PPUSH
30719: LD_INT 2
30721: PPUSH
30722: CALL_OW 268
30726: PUSH
30727: EMPTY
30728: LIST
30729: LIST
30730: IN
30731: NOT
30732: AND
30733: IFFALSE 30761
// begin ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 5 ] ) ;
30735: LD_VAR 0 6
30739: PPUSH
30740: LD_EXP 66
30744: PUSH
30745: LD_VAR 0 9
30749: ARRAY
30750: PUSH
30751: LD_INT 5
30753: ARRAY
30754: PPUSH
30755: CALL_OW 147
// end else
30759: GO 30852
// if ai_upcoming_building_data [ base ] [ 6 ] <> b_lab_basic then
30761: LD_EXP 66
30765: PUSH
30766: LD_VAR 0 9
30770: ARRAY
30771: PUSH
30772: LD_INT 6
30774: ARRAY
30775: PUSH
30776: LD_INT 9
30778: NONEQUAL
30779: IFFALSE 30807
// begin ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 6 ] ) ;
30781: LD_VAR 0 6
30785: PPUSH
30786: LD_EXP 66
30790: PUSH
30791: LD_VAR 0 9
30795: ARRAY
30796: PUSH
30797: LD_INT 6
30799: ARRAY
30800: PPUSH
30801: CALL_OW 147
// end else
30805: GO 30852
// begin ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
30807: LD_ADDR_EXP 63
30811: PUSH
30812: LD_EXP 63
30816: PPUSH
30817: LD_VAR 0 9
30821: PPUSH
30822: LD_INT 0
30824: PPUSH
30825: CALL_OW 1
30829: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
30830: LD_ADDR_EXP 66
30834: PUSH
30835: LD_EXP 66
30839: PPUSH
30840: LD_VAR 0 9
30844: PPUSH
30845: EMPTY
30846: PPUSH
30847: CALL_OW 1
30851: ST_TO_ADDR
// end ; ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
30852: LD_ADDR_EXP 60
30856: PUSH
30857: LD_EXP 60
30861: PPUSH
30862: LD_VAR 0 9
30866: PPUSH
30867: LD_VAR 0 6
30871: PPUSH
30872: CALL_OW 1
30876: ST_TO_ADDR
// end ; b_armoury :
30877: GO 30965
30879: LD_INT 4
30881: DOUBLE
30882: EQUAL
30883: IFTRUE 30887
30885: GO 30964
30887: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
30888: LD_ADDR_VAR 0 6
30892: PUSH
30893: LD_EXP 66
30897: PUSH
30898: LD_VAR 0 9
30902: ARRAY
30903: PUSH
30904: LD_INT 1
30906: ARRAY
30907: PPUSH
30908: LD_EXP 66
30912: PUSH
30913: LD_VAR 0 9
30917: ARRAY
30918: PUSH
30919: LD_INT 2
30921: ARRAY
30922: PPUSH
30923: CALL_OW 428
30927: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
30928: LD_VAR 0 6
30932: PPUSH
30933: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
30937: LD_ADDR_EXP 60
30941: PUSH
30942: LD_EXP 60
30946: PPUSH
30947: LD_VAR 0 9
30951: PPUSH
30952: LD_VAR 0 6
30956: PPUSH
30957: CALL_OW 1
30961: ST_TO_ADDR
// end ; end ; end ;
30962: GO 30965
30964: POP
// end else
30965: GO 31225
// if UnitsInside ( ai_vehicle_being_moved [ base ] ) > 0 then
30967: LD_EXP 64
30971: PUSH
30972: LD_VAR 0 9
30976: ARRAY
30977: PPUSH
30978: CALL_OW 313
30982: PUSH
30983: LD_INT 0
30985: GREATER
30986: IFFALSE 31125
// begin if GetDistUnitXY ( ai_vehicle_being_moved [ base ] , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) <= away_dist then
30988: LD_EXP 64
30992: PUSH
30993: LD_VAR 0 9
30997: ARRAY
30998: PPUSH
30999: LD_EXP 66
31003: PUSH
31004: LD_VAR 0 9
31008: ARRAY
31009: PUSH
31010: LD_INT 1
31012: ARRAY
31013: PPUSH
31014: LD_EXP 66
31018: PUSH
31019: LD_VAR 0 9
31023: ARRAY
31024: PUSH
31025: LD_INT 2
31027: ARRAY
31028: PPUSH
31029: CALL_OW 297
31033: PUSH
31034: LD_VAR 0 7
31038: LESSEQUAL
31039: IFFALSE 31100
// AI_GetAwayFromXY ( ai_vehicle_being_moved [ base ] , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , away_dist + 2 , false ) else
31041: LD_EXP 64
31045: PUSH
31046: LD_VAR 0 9
31050: ARRAY
31051: PPUSH
31052: LD_EXP 66
31056: PUSH
31057: LD_VAR 0 9
31061: ARRAY
31062: PUSH
31063: LD_INT 1
31065: ARRAY
31066: PPUSH
31067: LD_EXP 66
31071: PUSH
31072: LD_VAR 0 9
31076: ARRAY
31077: PUSH
31078: LD_INT 2
31080: ARRAY
31081: PPUSH
31082: LD_VAR 0 7
31086: PUSH
31087: LD_INT 2
31089: PLUS
31090: PPUSH
31091: LD_INT 0
31093: PPUSH
31094: CALL 12596 0 5
31098: GO 31123
// ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
31100: LD_ADDR_EXP 64
31104: PUSH
31105: LD_EXP 64
31109: PPUSH
31110: LD_VAR 0 9
31114: PPUSH
31115: LD_INT 0
31117: PPUSH
31118: CALL_OW 1
31122: ST_TO_ADDR
// end else
31123: GO 31225
// case GetType ( IsInUnit ( ai_building_constructor [ base ] ) ) of unit_building :
31125: LD_EXP 63
31129: PUSH
31130: LD_VAR 0 9
31134: ARRAY
31135: PPUSH
31136: CALL_OW 310
31140: PPUSH
31141: CALL_OW 247
31145: PUSH
31146: LD_INT 3
31148: DOUBLE
31149: EQUAL
31150: IFTRUE 31154
31152: GO 31172
31154: POP
// ComExitBuilding ( ai_building_constructor [ base ] ) ; unit_vehicle :
31155: LD_EXP 63
31159: PUSH
31160: LD_VAR 0 9
31164: ARRAY
31165: PPUSH
31166: CALL_OW 122
31170: GO 31225
31172: LD_INT 2
31174: DOUBLE
31175: EQUAL
31176: IFTRUE 31180
31178: GO 31198
31180: POP
// ComExitVehicle ( ai_building_constructor [ base ] ) ; else
31181: LD_EXP 63
31185: PUSH
31186: LD_VAR 0 9
31190: ARRAY
31191: PPUSH
31192: CALL_OW 121
31196: GO 31225
31198: POP
// ComEnterUnit ( ai_building_constructor [ base ] , ai_vehicle_being_moved [ base ] ) ; end ;
31199: LD_EXP 63
31203: PUSH
31204: LD_VAR 0 9
31208: ARRAY
31209: PPUSH
31210: LD_EXP 64
31214: PUSH
31215: LD_VAR 0 9
31219: ARRAY
31220: PPUSH
31221: CALL_OW 120
// end ; end ; end ; if ( engineers_list ^ apemen_engineers_list ) > 0 and ai_depot [ base ] > 0 then
31225: LD_VAR 0 3
31229: PUSH
31230: LD_VAR 0 10
31234: ADD
31235: PUSH
31236: LD_INT 0
31238: GREATER
31239: PUSH
31240: LD_EXP 36
31244: PUSH
31245: LD_VAR 0 9
31249: ARRAY
31250: PUSH
31251: LD_INT 0
31253: GREATER
31254: AND
31255: IFFALSE 31409
// begin temp_list = GetListOfCratesInArea ( GetBaseArea ( base ) ) ;
31257: LD_ADDR_VAR 0 4
31261: PUSH
31262: LD_VAR 0 9
31266: PPUSH
31267: CALL 18845 0 1
31271: PPUSH
31272: CALL_OW 435
31276: ST_TO_ADDR
// while temp_list > 0 do
31277: LD_VAR 0 4
31281: PUSH
31282: LD_INT 0
31284: GREATER
31285: IFFALSE 31409
// begin if GetResourceTypeXY ( temp_list [ 1 ] , temp_list [ 2 ] ) = mat_artifact then
31287: LD_VAR 0 4
31291: PUSH
31292: LD_INT 1
31294: ARRAY
31295: PPUSH
31296: LD_VAR 0 4
31300: PUSH
31301: LD_INT 2
31303: ARRAY
31304: PPUSH
31305: CALL_OW 283
31309: PUSH
31310: LD_INT 4
31312: EQUAL
31313: IFFALSE 31353
// begin temp_list = Delete ( temp_list , 1 ) ;
31315: LD_ADDR_VAR 0 4
31319: PUSH
31320: LD_VAR 0 4
31324: PPUSH
31325: LD_INT 1
31327: PPUSH
31328: CALL_OW 3
31332: ST_TO_ADDR
// temp_list = Delete ( temp_list , 1 ) ;
31333: LD_ADDR_VAR 0 4
31337: PUSH
31338: LD_VAR 0 4
31342: PPUSH
31343: LD_INT 1
31345: PPUSH
31346: CALL_OW 3
31350: ST_TO_ADDR
// continue ;
31351: GO 31277
// end ; ComCollect ( GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) , temp_list [ 1 ] , temp_list [ 2 ] ) ;
31353: LD_VAR 0 3
31357: PUSH
31358: LD_VAR 0 10
31362: ADD
31363: PPUSH
31364: CALL 32829 0 1
31368: PPUSH
31369: LD_VAR 0 4
31373: PUSH
31374: LD_INT 1
31376: ARRAY
31377: PPUSH
31378: LD_VAR 0 4
31382: PUSH
31383: LD_INT 2
31385: ARRAY
31386: PPUSH
31387: CALL_OW 117
// engineers_list = [ ] ;
31391: LD_ADDR_VAR 0 3
31395: PUSH
31396: EMPTY
31397: ST_TO_ADDR
// apemen_engineers_list = [ ] ;
31398: LD_ADDR_VAR 0 10
31402: PUSH
31403: EMPTY
31404: ST_TO_ADDR
// break ;
31405: GO 31409
// end ;
31407: GO 31277
// end ; end ; DistributeHumansToBuildings ( base , engineers_list ^ apemen_engineers_list , UnitFilter ( ai_depot [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_engineer , 6 , false , false ) ;
31409: LD_VAR 0 9
31413: PPUSH
31414: LD_VAR 0 3
31418: PUSH
31419: LD_VAR 0 10
31423: ADD
31424: PPUSH
31425: LD_EXP 36
31429: PUSH
31430: LD_VAR 0 9
31434: ARRAY
31435: PPUSH
31436: LD_INT 50
31438: PUSH
31439: EMPTY
31440: LIST
31441: PUSH
31442: LD_INT 3
31444: PUSH
31445: LD_INT 57
31447: PUSH
31448: EMPTY
31449: LIST
31450: PUSH
31451: EMPTY
31452: LIST
31453: LIST
31454: PUSH
31455: EMPTY
31456: LIST
31457: LIST
31458: PPUSH
31459: CALL_OW 72
31463: PPUSH
31464: LD_INT 2
31466: PPUSH
31467: LD_INT 6
31469: PPUSH
31470: LD_INT 0
31472: PPUSH
31473: LD_INT 0
31475: PPUSH
31476: CALL 22559 0 7
// if crane_usable then
31480: LD_VAR 0 12
31484: IFFALSE 31612
// if not IsInArea ( ai_crane [ base ] , GetBaseArea ( base ) ) then
31486: LD_EXP 74
31490: PUSH
31491: LD_VAR 0 9
31495: ARRAY
31496: PPUSH
31497: LD_VAR 0 9
31501: PPUSH
31502: CALL 18845 0 1
31506: PPUSH
31507: CALL_OW 308
31511: NOT
31512: IFFALSE 31561
// ComMoveXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) else
31514: LD_EXP 74
31518: PUSH
31519: LD_VAR 0 9
31523: ARRAY
31524: PPUSH
31525: LD_EXP 59
31529: PUSH
31530: LD_VAR 0 9
31534: ARRAY
31535: PUSH
31536: LD_INT 1
31538: ARRAY
31539: PPUSH
31540: LD_EXP 59
31544: PUSH
31545: LD_VAR 0 9
31549: ARRAY
31550: PUSH
31551: LD_INT 2
31553: ARRAY
31554: PPUSH
31555: CALL_OW 111
31559: GO 31612
// if GetLives ( ai_crane [ base ] ) < 1000 and not under_attack then
31561: LD_EXP 74
31565: PUSH
31566: LD_VAR 0 9
31570: ARRAY
31571: PPUSH
31572: CALL_OW 256
31576: PUSH
31577: LD_INT 1000
31579: LESS
31580: PUSH
31581: LD_VAR 0 19
31585: NOT
31586: AND
31587: IFFALSE 31612
// ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , true ) ;
31589: LD_ADDR_EXP 77
31593: PUSH
31594: LD_EXP 77
31598: PPUSH
31599: LD_VAR 0 9
31603: PPUSH
31604: LD_INT 1
31606: PPUSH
31607: CALL_OW 1
31611: ST_TO_ADDR
// end ;
31612: GO 24002
31614: POP
31615: POP
// until false ;
31616: LD_INT 0
31618: IFFALSE 23963
// end ;
31620: PPOPN 22
31622: END
// on BuildingStarted ( building , builder ) do var side , temp_list , base , i ;
31623: LD_INT 0
31625: PPUSH
31626: PPUSH
31627: PPUSH
31628: PPUSH
// begin side = GetSide ( building ) ;
31629: LD_ADDR_VAR 0 3
31633: PUSH
31634: LD_VAR 0 1
31638: PPUSH
31639: CALL_OW 255
31643: ST_TO_ADDR
// if side = you then
31644: LD_VAR 0 3
31648: PUSH
31649: LD_EXP 2
31653: EQUAL
31654: IFFALSE 31658
// exit ;
31656: GO 31755
// base = FindBase ( building ) ;
31658: LD_ADDR_VAR 0 5
31662: PUSH
31663: LD_VAR 0 1
31667: PPUSH
31668: CALL 19125 0 1
31672: ST_TO_ADDR
// if base = 0 then
31673: LD_VAR 0 5
31677: PUSH
31678: LD_INT 0
31680: EQUAL
31681: IFFALSE 31685
// exit ;
31683: GO 31755
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
31685: LD_ADDR_EXP 63
31689: PUSH
31690: LD_EXP 63
31694: PPUSH
31695: LD_VAR 0 5
31699: PPUSH
31700: LD_INT 0
31702: PPUSH
31703: CALL_OW 1
31707: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , [ ] ) ;
31708: LD_ADDR_EXP 65
31712: PUSH
31713: LD_EXP 65
31717: PPUSH
31718: LD_VAR 0 5
31722: PPUSH
31723: EMPTY
31724: PPUSH
31725: CALL_OW 1
31729: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , building ) ;
31730: LD_ADDR_EXP 60
31734: PUSH
31735: LD_EXP 60
31739: PPUSH
31740: LD_VAR 0 5
31744: PPUSH
31745: LD_VAR 0 1
31749: PPUSH
31750: CALL_OW 1
31754: ST_TO_ADDR
// end ;
31755: PPOPN 6
31757: END
// on BuildingComplete ( building ) do var side , temp_list , temp_unit , base , i , hex ;
31758: LD_INT 0
31760: PPUSH
31761: PPUSH
31762: PPUSH
31763: PPUSH
31764: PPUSH
31765: PPUSH
// begin side = GetSide ( building ) ;
31766: LD_ADDR_VAR 0 2
31770: PUSH
31771: LD_VAR 0 1
31775: PPUSH
31776: CALL_OW 255
31780: ST_TO_ADDR
// if side = you then
31781: LD_VAR 0 2
31785: PUSH
31786: LD_EXP 2
31790: EQUAL
31791: IFFALSE 31795
// exit ;
31793: GO 32137
// base = FindBase ( building ) ;
31795: LD_ADDR_VAR 0 5
31799: PUSH
31800: LD_VAR 0 1
31804: PPUSH
31805: CALL 19125 0 1
31809: ST_TO_ADDR
// if base = 0 then
31810: LD_VAR 0 5
31814: PUSH
31815: LD_INT 0
31817: EQUAL
31818: IFFALSE 31822
// exit ;
31820: GO 32137
// if ai_sib_bomb_fact_location [ base ] > 0 then
31822: LD_EXP 51
31826: PUSH
31827: LD_VAR 0 5
31831: ARRAY
31832: PUSH
31833: LD_INT 0
31835: GREATER
31836: IFFALSE 31927
// if ai_upcoming_building_data [ base ] [ 1 ] = ai_sib_bomb_fact_location [ base ] [ 1 ] and ai_upcoming_building_data [ base ] [ 2 ] = ai_sib_bomb_fact_location [ base ] [ 2 ] then
31838: LD_EXP 66
31842: PUSH
31843: LD_VAR 0 5
31847: ARRAY
31848: PUSH
31849: LD_INT 1
31851: ARRAY
31852: PUSH
31853: LD_EXP 51
31857: PUSH
31858: LD_VAR 0 5
31862: ARRAY
31863: PUSH
31864: LD_INT 1
31866: ARRAY
31867: EQUAL
31868: PUSH
31869: LD_EXP 66
31873: PUSH
31874: LD_VAR 0 5
31878: ARRAY
31879: PUSH
31880: LD_INT 2
31882: ARRAY
31883: PUSH
31884: LD_EXP 51
31888: PUSH
31889: LD_VAR 0 5
31893: ARRAY
31894: PUSH
31895: LD_INT 2
31897: ARRAY
31898: EQUAL
31899: AND
31900: IFFALSE 31927
// ai_sib_bomb_fact = Replace ( ai_sib_bomb_fact , base , building ) ;
31902: LD_ADDR_EXP 50
31906: PUSH
31907: LD_EXP 50
31911: PPUSH
31912: LD_VAR 0 5
31916: PPUSH
31917: LD_VAR 0 1
31921: PPUSH
31922: CALL_OW 1
31926: ST_TO_ADDR
// hex = [ GetX ( building ) , GetY ( building ) ] ;
31927: LD_ADDR_VAR 0 7
31931: PUSH
31932: LD_VAR 0 1
31936: PPUSH
31937: CALL_OW 250
31941: PUSH
31942: LD_VAR 0 1
31946: PPUSH
31947: CALL_OW 251
31951: PUSH
31952: EMPTY
31953: LIST
31954: LIST
31955: ST_TO_ADDR
// if hex in ai_fact_extension_replace_locations [ base ] then
31956: LD_VAR 0 7
31960: PUSH
31961: LD_EXP 84
31965: PUSH
31966: LD_VAR 0 5
31970: ARRAY
31971: IN
31972: IFFALSE 32059
// begin for i in ai_facts [ base ] do
31974: LD_ADDR_VAR 0 6
31978: PUSH
31979: LD_EXP 38
31983: PUSH
31984: LD_VAR 0 5
31988: ARRAY
31989: PUSH
31990: FOR_IN
31991: IFFALSE 32057
// if ai_facts_with_ext_rebuild_map >= i then
31993: LD_EXP 94
31997: PUSH
31998: LD_VAR 0 6
32002: GREATEREQUAL
32003: IFFALSE 32055
// begin temp_list = ai_facts_with_ext_rebuild_map [ i ] diff [ hex ] ;
32005: LD_ADDR_VAR 0 3
32009: PUSH
32010: LD_EXP 94
32014: PUSH
32015: LD_VAR 0 6
32019: ARRAY
32020: PUSH
32021: LD_VAR 0 7
32025: PUSH
32026: EMPTY
32027: LIST
32028: DIFF
32029: ST_TO_ADDR
// ai_facts_with_ext_rebuild_map = Replace ( ai_facts_with_ext_rebuild_map , i , temp_list ) ;
32030: LD_ADDR_EXP 94
32034: PUSH
32035: LD_EXP 94
32039: PPUSH
32040: LD_VAR 0 6
32044: PPUSH
32045: LD_VAR 0 3
32049: PPUSH
32050: CALL_OW 1
32054: ST_TO_ADDR
// end ;
32055: GO 31990
32057: POP
32058: POP
// end ; BuildUpgradeCommon ( base , building ) ;
32059: LD_VAR 0 5
32063: PPUSH
32064: LD_VAR 0 1
32068: PPUSH
32069: CALL 32218 0 2
// temp_list = ai_all_buildings [ base ] ^ building ;
32073: LD_ADDR_VAR 0 3
32077: PUSH
32078: LD_EXP 62
32082: PUSH
32083: LD_VAR 0 5
32087: ARRAY
32088: PUSH
32089: LD_VAR 0 1
32093: ADD
32094: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
32095: LD_ADDR_EXP 62
32099: PUSH
32100: LD_EXP 62
32104: PPUSH
32105: LD_VAR 0 5
32109: PPUSH
32110: LD_VAR 0 3
32114: PPUSH
32115: CALL_OW 1
32119: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , true ) ;
32120: LD_VAR 0 5
32124: PPUSH
32125: LD_VAR 0 1
32129: PPUSH
32130: LD_INT 1
32132: PPUSH
32133: CALL 6500 0 3
// end ;
32137: PPOPN 7
32139: END
// on UpgradeComplete ( building ) do var side , temp_list , base ;
32140: LD_INT 0
32142: PPUSH
32143: PPUSH
32144: PPUSH
// begin side = GetSide ( building ) ;
32145: LD_ADDR_VAR 0 2
32149: PUSH
32150: LD_VAR 0 1
32154: PPUSH
32155: CALL_OW 255
32159: ST_TO_ADDR
// if side = you then
32160: LD_VAR 0 2
32164: PUSH
32165: LD_EXP 2
32169: EQUAL
32170: IFFALSE 32174
// exit ;
32172: GO 32215
// base = FindBase ( building ) ;
32174: LD_ADDR_VAR 0 4
32178: PUSH
32179: LD_VAR 0 1
32183: PPUSH
32184: CALL 19125 0 1
32188: ST_TO_ADDR
// if base = 0 then
32189: LD_VAR 0 4
32193: PUSH
32194: LD_INT 0
32196: EQUAL
32197: IFFALSE 32201
// exit ;
32199: GO 32215
// BuildUpgradeCommon ( base , building ) ;
32201: LD_VAR 0 4
32205: PPUSH
32206: LD_VAR 0 1
32210: PPUSH
32211: CALL 32218 0 2
// end ;
32215: PPOPN 4
32217: END
// function BuildUpgradeCommon ( base , building ) ; begin
32218: LD_INT 0
32220: PPUSH
// if GetBType ( building ) = ai_upcoming_building_data [ base ] [ 4 ] then
32221: LD_VAR 0 2
32225: PPUSH
32226: CALL_OW 266
32230: PUSH
32231: LD_EXP 66
32235: PUSH
32236: LD_VAR 0 1
32240: ARRAY
32241: PUSH
32242: LD_INT 4
32244: ARRAY
32245: EQUAL
32246: IFFALSE 32270
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
32248: LD_ADDR_EXP 66
32252: PUSH
32253: LD_EXP 66
32257: PPUSH
32258: LD_VAR 0 1
32262: PPUSH
32263: EMPTY
32264: PPUSH
32265: CALL_OW 1
32269: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
32270: LD_ADDR_EXP 60
32274: PUSH
32275: LD_EXP 60
32279: PPUSH
32280: LD_VAR 0 1
32284: PPUSH
32285: LD_INT 0
32287: PPUSH
32288: CALL_OW 1
32292: ST_TO_ADDR
// end ;
32293: LD_VAR 0 3
32297: RET
// on BuildingCaptured ( captured_building , building_former_side , capturing_unit ) do var temp_list , base , i ;
32298: LD_INT 0
32300: PPUSH
32301: PPUSH
32302: PPUSH
// begin if captured_building = ai_depot [ 1 ] then
32303: LD_VAR 0 1
32307: PUSH
32308: LD_EXP 36
32312: PUSH
32313: LD_INT 1
32315: ARRAY
32316: EQUAL
32317: IFFALSE 32326
// SetLegionMainDepotResources ( true ) ;
32319: LD_INT 1
32321: PPUSH
32322: CALL 53157 0 1
// if captured_building = leg_dep_smal then
32326: LD_VAR 0 1
32330: PUSH
32331: LD_INT 10
32333: EQUAL
32334: IFFALSE 32343
// SetLegionSecondaryDepotResources ( true ) ;
32336: LD_INT 1
32338: PPUSH
32339: CALL 53270 0 1
// if captured_building = am_dep_2 then
32343: LD_VAR 0 1
32347: PUSH
32348: LD_INT 188
32350: EQUAL
32351: IFFALSE 32360
// SetLoneAmDepotResources ( true ) ;
32353: LD_INT 1
32355: PPUSH
32356: CALL 53373 0 1
// if captured_building in ai_depot then
32360: LD_VAR 0 1
32364: PUSH
32365: LD_EXP 36
32369: IN
32370: IFFALSE 32488
// begin if captured_building = ai_depot [ 2 ] then
32372: LD_VAR 0 1
32376: PUSH
32377: LD_EXP 36
32381: PUSH
32382: LD_INT 2
32384: ARRAY
32385: EQUAL
32386: IFFALSE 32488
// begin SetResourceType ( GetBase ( captured_building ) , mat_cans , 200 + Rand ( 0 , 7 ) * 10 ) ;
32388: LD_VAR 0 1
32392: PPUSH
32393: CALL_OW 274
32397: PPUSH
32398: LD_INT 1
32400: PPUSH
32401: LD_INT 200
32403: PUSH
32404: LD_INT 0
32406: PPUSH
32407: LD_INT 7
32409: PPUSH
32410: CALL_OW 12
32414: PUSH
32415: LD_INT 10
32417: MUL
32418: PLUS
32419: PPUSH
32420: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_oil , 600 + Rand ( 0 , 100 ) ) ;
32424: LD_VAR 0 1
32428: PPUSH
32429: CALL_OW 274
32433: PPUSH
32434: LD_INT 2
32436: PPUSH
32437: LD_INT 600
32439: PUSH
32440: LD_INT 0
32442: PPUSH
32443: LD_INT 100
32445: PPUSH
32446: CALL_OW 12
32450: PLUS
32451: PPUSH
32452: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_siberit , 150 + Rand ( 0 , 50 ) ) ;
32456: LD_VAR 0 1
32460: PPUSH
32461: CALL_OW 274
32465: PPUSH
32466: LD_INT 3
32468: PPUSH
32469: LD_INT 150
32471: PUSH
32472: LD_INT 0
32474: PPUSH
32475: LD_INT 50
32477: PPUSH
32478: CALL_OW 12
32482: PLUS
32483: PPUSH
32484: CALL_OW 277
// end ; end ; base = FindBase ( captured_building ) ;
32488: LD_ADDR_VAR 0 5
32492: PUSH
32493: LD_VAR 0 1
32497: PPUSH
32498: CALL 19125 0 1
32502: ST_TO_ADDR
// if base = 0 then
32503: LD_VAR 0 5
32507: PUSH
32508: LD_INT 0
32510: EQUAL
32511: IFFALSE 32515
// exit ;
32513: GO 32826
// if building_former_side = GetBaseSide ( base ) then
32515: LD_VAR 0 2
32519: PUSH
32520: LD_VAR 0 5
32524: PPUSH
32525: CALL 18937 0 1
32529: EQUAL
32530: IFFALSE 32613
// begin if captured_building in ai_all_buildings [ base ] then
32532: LD_VAR 0 1
32536: PUSH
32537: LD_EXP 62
32541: PUSH
32542: LD_VAR 0 5
32546: ARRAY
32547: IN
32548: IFFALSE 32611
// begin RemoveBuildingFromVariables ( base , captured_building ) ;
32550: LD_VAR 0 5
32554: PPUSH
32555: LD_VAR 0 1
32559: PPUSH
32560: CALL 16667 0 2
// temp_list = ai_captured_buildings [ base ] ^ captured_building ;
32564: LD_ADDR_VAR 0 4
32568: PUSH
32569: LD_EXP 49
32573: PUSH
32574: LD_VAR 0 5
32578: ARRAY
32579: PUSH
32580: LD_VAR 0 1
32584: ADD
32585: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
32586: LD_ADDR_EXP 49
32590: PUSH
32591: LD_EXP 49
32595: PPUSH
32596: LD_VAR 0 5
32600: PPUSH
32601: LD_VAR 0 4
32605: PPUSH
32606: CALL_OW 1
32610: ST_TO_ADDR
// end ; end else
32611: GO 32826
// begin if GetSide ( captured_building ) = GetBaseSide ( base ) then
32613: LD_VAR 0 1
32617: PPUSH
32618: CALL_OW 255
32622: PUSH
32623: LD_VAR 0 5
32627: PPUSH
32628: CALL 18937 0 1
32632: EQUAL
32633: IFFALSE 32826
// begin temp_list = ai_all_buildings [ base ] ^ captured_building ;
32635: LD_ADDR_VAR 0 4
32639: PUSH
32640: LD_EXP 62
32644: PUSH
32645: LD_VAR 0 5
32649: ARRAY
32650: PUSH
32651: LD_VAR 0 1
32655: ADD
32656: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
32657: LD_ADDR_EXP 62
32661: PUSH
32662: LD_EXP 62
32666: PPUSH
32667: LD_VAR 0 5
32671: PPUSH
32672: LD_VAR 0 4
32676: PPUSH
32677: CALL_OW 1
32681: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , captured_building , true ) ;
32682: LD_VAR 0 5
32686: PPUSH
32687: LD_VAR 0 1
32691: PPUSH
32692: LD_INT 1
32694: PPUSH
32695: CALL 6500 0 3
// temp_list = ai_captured_buildings [ base ] diff captured_building ;
32699: LD_ADDR_VAR 0 4
32703: PUSH
32704: LD_EXP 49
32708: PUSH
32709: LD_VAR 0 5
32713: ARRAY
32714: PUSH
32715: LD_VAR 0 1
32719: DIFF
32720: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
32721: LD_ADDR_EXP 49
32725: PUSH
32726: LD_EXP 49
32730: PPUSH
32731: LD_VAR 0 5
32735: PPUSH
32736: LD_VAR 0 4
32740: PPUSH
32741: CALL_OW 1
32745: ST_TO_ADDR
// if captured_building = ai_depot [ 1 ] then
32746: LD_VAR 0 1
32750: PUSH
32751: LD_EXP 36
32755: PUSH
32756: LD_INT 1
32758: ARRAY
32759: EQUAL
32760: IFFALSE 32826
// begin legion_main_depot_resources = [ GetResourceType ( GetBase ( captured_building ) , mat_cans ) , GetResourceType ( GetBase ( captured_building ) , mat_oil ) , GetResourceType ( GetBase ( captured_building ) , mat_siberit ) ] ;
32762: LD_ADDR_EXP 123
32766: PUSH
32767: LD_VAR 0 1
32771: PPUSH
32772: CALL_OW 274
32776: PPUSH
32777: LD_INT 1
32779: PPUSH
32780: CALL_OW 275
32784: PUSH
32785: LD_VAR 0 1
32789: PPUSH
32790: CALL_OW 274
32794: PPUSH
32795: LD_INT 2
32797: PPUSH
32798: CALL_OW 275
32802: PUSH
32803: LD_VAR 0 1
32807: PPUSH
32808: CALL_OW 274
32812: PPUSH
32813: LD_INT 3
32815: PPUSH
32816: CALL_OW 275
32820: PUSH
32821: EMPTY
32822: LIST
32823: LIST
32824: LIST
32825: ST_TO_ADDR
// end ; end ; end ; end ;
32826: PPOPN 6
32828: END
// export function GetHumansOutOfUnits ( un_list ) ; var i ; begin
32829: LD_INT 0
32831: PPUSH
32832: PPUSH
// result = [ ] ;
32833: LD_ADDR_VAR 0 2
32837: PUSH
32838: EMPTY
32839: ST_TO_ADDR
// for i in un_list do
32840: LD_ADDR_VAR 0 3
32844: PUSH
32845: LD_VAR 0 1
32849: PUSH
32850: FOR_IN
32851: IFFALSE 32927
// case GetType ( IsInUnit ( i ) ) of unit_building :
32853: LD_VAR 0 3
32857: PPUSH
32858: CALL_OW 310
32862: PPUSH
32863: CALL_OW 247
32867: PUSH
32868: LD_INT 3
32870: DOUBLE
32871: EQUAL
32872: IFTRUE 32876
32874: GO 32888
32876: POP
// ComExitBuilding ( i ) ; unit_vehicle :
32877: LD_VAR 0 3
32881: PPUSH
32882: CALL_OW 122
32886: GO 32925
32888: LD_INT 2
32890: DOUBLE
32891: EQUAL
32892: IFTRUE 32896
32894: GO 32908
32896: POP
// ComExitVehicle ( i ) ; else
32897: LD_VAR 0 3
32901: PPUSH
32902: CALL_OW 121
32906: GO 32925
32908: POP
// result = result ^ i ; end ;
32909: LD_ADDR_VAR 0 2
32913: PUSH
32914: LD_VAR 0 2
32918: PUSH
32919: LD_VAR 0 3
32923: ADD
32924: ST_TO_ADDR
32925: GO 32850
32927: POP
32928: POP
// end ;
32929: LD_VAR 0 2
32933: RET
// export function BaseUnderAttack ( base , attack_side ) ; var area , i , val , def_side , temp_list ; begin
32934: LD_INT 0
32936: PPUSH
32937: PPUSH
32938: PPUSH
32939: PPUSH
32940: PPUSH
32941: PPUSH
// result = false ;
32942: LD_ADDR_VAR 0 3
32946: PUSH
32947: LD_INT 0
32949: ST_TO_ADDR
// def_side = GetBaseSide ( base ) ;
32950: LD_ADDR_VAR 0 7
32954: PUSH
32955: LD_VAR 0 1
32959: PPUSH
32960: CALL 18937 0 1
32964: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
32965: LD_ADDR_VAR 0 4
32969: PUSH
32970: LD_VAR 0 1
32974: PPUSH
32975: CALL 18845 0 1
32979: ST_TO_ADDR
// if attack_side = def_side then
32980: LD_VAR 0 2
32984: PUSH
32985: LD_VAR 0 7
32989: EQUAL
32990: IFFALSE 32994
// exit ;
32992: GO 33661
// if attack_side = - 1 then
32994: LD_VAR 0 2
32998: PUSH
32999: LD_INT 1
33001: NEG
33002: EQUAL
33003: IFFALSE 33354
// begin for i = 1 to 8 do
33005: LD_ADDR_VAR 0 5
33009: PUSH
33010: DOUBLE
33011: LD_INT 1
33013: DEC
33014: ST_TO_ADDR
33015: LD_INT 8
33017: PUSH
33018: FOR_TO
33019: IFFALSE 33088
// if ai_sib_bomb_used_time_matrix [ base ] [ i ] > - 1 and ai_sib_bomb_used_time_matrix [ base ] [ i ] + ai_sib_bomb_contamination_duration >= tick then
33021: LD_EXP 101
33025: PUSH
33026: LD_VAR 0 1
33030: ARRAY
33031: PUSH
33032: LD_VAR 0 5
33036: ARRAY
33037: PUSH
33038: LD_INT 1
33040: NEG
33041: GREATER
33042: PUSH
33043: LD_EXP 101
33047: PUSH
33048: LD_VAR 0 1
33052: ARRAY
33053: PUSH
33054: LD_VAR 0 5
33058: ARRAY
33059: PUSH
33060: LD_EXP 102
33064: PLUS
33065: PUSH
33066: LD_OWVAR 1
33070: GREATEREQUAL
33071: AND
33072: IFFALSE 33086
// begin result = true ;
33074: LD_ADDR_VAR 0 3
33078: PUSH
33079: LD_INT 1
33081: ST_TO_ADDR
// exit ;
33082: POP
33083: POP
33084: GO 33661
// end ;
33086: GO 33018
33088: POP
33089: POP
// if FilterAllUnits ( [ [ f_enemy , def_side ] , [ f_inarea , area ] ] ) > 0 then
33090: LD_INT 81
33092: PUSH
33093: LD_VAR 0 7
33097: PUSH
33098: EMPTY
33099: LIST
33100: LIST
33101: PUSH
33102: LD_INT 95
33104: PUSH
33105: LD_VAR 0 4
33109: PUSH
33110: EMPTY
33111: LIST
33112: LIST
33113: PUSH
33114: EMPTY
33115: LIST
33116: LIST
33117: PPUSH
33118: CALL_OW 69
33122: PUSH
33123: LD_INT 0
33125: GREATER
33126: IFFALSE 33138
// begin result = true ;
33128: LD_ADDR_VAR 0 3
33132: PUSH
33133: LD_INT 1
33135: ST_TO_ADDR
// exit ;
33136: GO 33661
// end ; val = true ;
33138: LD_ADDR_VAR 0 6
33142: PUSH
33143: LD_INT 1
33145: ST_TO_ADDR
// for i in ai_contact_time [ def_side ] do
33146: LD_ADDR_VAR 0 5
33150: PUSH
33151: LD_EXP 98
33155: PUSH
33156: LD_VAR 0 7
33160: ARRAY
33161: PUSH
33162: FOR_IN
33163: IFFALSE 33187
// if i < 0 0$10 then
33165: LD_VAR 0 5
33169: PUSH
33170: LD_INT 350
33172: LESS
33173: IFFALSE 33185
// begin val = false ;
33175: LD_ADDR_VAR 0 6
33179: PUSH
33180: LD_INT 0
33182: ST_TO_ADDR
// break ;
33183: GO 33187
// end ;
33185: GO 33162
33187: POP
33188: POP
// if ContactTime ( def_side ) >= 0 0$10 and val then
33189: LD_VAR 0 7
33193: PPUSH
33194: CALL_OW 462
33198: PUSH
33199: LD_INT 350
33201: GREATEREQUAL
33202: PUSH
33203: LD_VAR 0 6
33207: AND
33208: IFFALSE 33212
// exit ;
33210: GO 33661
// temp_list = [ ] ;
33212: LD_ADDR_VAR 0 8
33216: PUSH
33217: EMPTY
33218: ST_TO_ADDR
// for i in ( ai_bases diff base ) do
33219: LD_ADDR_VAR 0 5
33223: PUSH
33224: LD_EXP 26
33228: PUSH
33229: LD_VAR 0 1
33233: DIFF
33234: PUSH
33235: FOR_IN
33236: IFFALSE 33282
// temp_list = Insert ( temp_list , 1 , [ f_not , [ f_inarea , GetBaseArea ( i ) ] ] ) ;
33238: LD_ADDR_VAR 0 8
33242: PUSH
33243: LD_VAR 0 8
33247: PPUSH
33248: LD_INT 1
33250: PPUSH
33251: LD_INT 3
33253: PUSH
33254: LD_INT 95
33256: PUSH
33257: LD_VAR 0 5
33261: PPUSH
33262: CALL 18845 0 1
33266: PUSH
33267: EMPTY
33268: LIST
33269: LIST
33270: PUSH
33271: EMPTY
33272: LIST
33273: LIST
33274: PPUSH
33275: CALL_OW 2
33279: ST_TO_ADDR
33280: GO 33235
33282: POP
33283: POP
// temp_list = FilterAllUnits ( [ [ f_enemy , def_side ] , [ f_not , [ f_type , unit_building ] ] ] ^ temp_list ) ;
33284: LD_ADDR_VAR 0 8
33288: PUSH
33289: LD_INT 81
33291: PUSH
33292: LD_VAR 0 7
33296: PUSH
33297: EMPTY
33298: LIST
33299: LIST
33300: PUSH
33301: LD_INT 3
33303: PUSH
33304: LD_INT 21
33306: PUSH
33307: LD_INT 3
33309: PUSH
33310: EMPTY
33311: LIST
33312: LIST
33313: PUSH
33314: EMPTY
33315: LIST
33316: LIST
33317: PUSH
33318: EMPTY
33319: LIST
33320: LIST
33321: PUSH
33322: LD_VAR 0 8
33326: ADD
33327: PPUSH
33328: CALL_OW 69
33332: ST_TO_ADDR
// if not AnyNearBaseArea ( temp_list , base ) then
33333: LD_VAR 0 8
33337: PPUSH
33338: LD_VAR 0 1
33342: PPUSH
33343: CALL 33737 0 2
33347: NOT
33348: IFFALSE 33352
// exit ;
33350: GO 33661
// end else
33352: GO 33653
// begin if ai_sib_bomb_used_time_matrix [ base ] [ attack_side ] > - 1 and ai_sib_bomb_used_time_matrix [ base ] [ attack_side ] + ai_sib_bomb_contamination_duration >= tick then
33354: LD_EXP 101
33358: PUSH
33359: LD_VAR 0 1
33363: ARRAY
33364: PUSH
33365: LD_VAR 0 2
33369: ARRAY
33370: PUSH
33371: LD_INT 1
33373: NEG
33374: GREATER
33375: PUSH
33376: LD_EXP 101
33380: PUSH
33381: LD_VAR 0 1
33385: ARRAY
33386: PUSH
33387: LD_VAR 0 2
33391: ARRAY
33392: PUSH
33393: LD_EXP 102
33397: PLUS
33398: PUSH
33399: LD_OWVAR 1
33403: GREATEREQUAL
33404: AND
33405: IFFALSE 33417
// begin result = true ;
33407: LD_ADDR_VAR 0 3
33411: PUSH
33412: LD_INT 1
33414: ST_TO_ADDR
// exit ;
33415: GO 33661
// end ; if FilterAllUnits ( [ [ f_side , attack_side ] , [ f_inarea , area ] ] ) > 0 then
33417: LD_INT 22
33419: PUSH
33420: LD_VAR 0 2
33424: PUSH
33425: EMPTY
33426: LIST
33427: LIST
33428: PUSH
33429: LD_INT 95
33431: PUSH
33432: LD_VAR 0 4
33436: PUSH
33437: EMPTY
33438: LIST
33439: LIST
33440: PUSH
33441: EMPTY
33442: LIST
33443: LIST
33444: PPUSH
33445: CALL_OW 69
33449: PUSH
33450: LD_INT 0
33452: GREATER
33453: IFFALSE 33465
// begin result = true ;
33455: LD_ADDR_VAR 0 3
33459: PUSH
33460: LD_INT 1
33462: ST_TO_ADDR
// exit ;
33463: GO 33661
// end ; if ContactTime ( [ def_side , attack_side ] ) >= 0 0$10 and ai_contact_time [ def_side ] [ attack_side ] >= 0 0$10 then
33465: LD_VAR 0 7
33469: PUSH
33470: LD_VAR 0 2
33474: PUSH
33475: EMPTY
33476: LIST
33477: LIST
33478: PPUSH
33479: CALL_OW 462
33483: PUSH
33484: LD_INT 350
33486: GREATEREQUAL
33487: PUSH
33488: LD_EXP 98
33492: PUSH
33493: LD_VAR 0 7
33497: ARRAY
33498: PUSH
33499: LD_VAR 0 2
33503: ARRAY
33504: PUSH
33505: LD_INT 350
33507: GREATEREQUAL
33508: AND
33509: IFFALSE 33513
// exit ;
33511: GO 33661
// temp_list = [ ] ;
33513: LD_ADDR_VAR 0 8
33517: PUSH
33518: EMPTY
33519: ST_TO_ADDR
// for i in ( ai_bases diff base ) do
33520: LD_ADDR_VAR 0 5
33524: PUSH
33525: LD_EXP 26
33529: PUSH
33530: LD_VAR 0 1
33534: DIFF
33535: PUSH
33536: FOR_IN
33537: IFFALSE 33583
// temp_list = Insert ( temp_list , 1 , [ f_not , [ f_inarea , GetBaseArea ( i ) ] ] ) ;
33539: LD_ADDR_VAR 0 8
33543: PUSH
33544: LD_VAR 0 8
33548: PPUSH
33549: LD_INT 1
33551: PPUSH
33552: LD_INT 3
33554: PUSH
33555: LD_INT 95
33557: PUSH
33558: LD_VAR 0 5
33562: PPUSH
33563: CALL 18845 0 1
33567: PUSH
33568: EMPTY
33569: LIST
33570: LIST
33571: PUSH
33572: EMPTY
33573: LIST
33574: LIST
33575: PPUSH
33576: CALL_OW 2
33580: ST_TO_ADDR
33581: GO 33536
33583: POP
33584: POP
// temp_list = FilterAllUnits ( [ [ f_side , attack_side ] , [ f_not , [ f_type , unit_building ] ] ] ^ temp_list ) ;
33585: LD_ADDR_VAR 0 8
33589: PUSH
33590: LD_INT 22
33592: PUSH
33593: LD_VAR 0 2
33597: PUSH
33598: EMPTY
33599: LIST
33600: LIST
33601: PUSH
33602: LD_INT 3
33604: PUSH
33605: LD_INT 21
33607: PUSH
33608: LD_INT 3
33610: PUSH
33611: EMPTY
33612: LIST
33613: LIST
33614: PUSH
33615: EMPTY
33616: LIST
33617: LIST
33618: PUSH
33619: EMPTY
33620: LIST
33621: LIST
33622: PUSH
33623: LD_VAR 0 8
33627: ADD
33628: PPUSH
33629: CALL_OW 69
33633: ST_TO_ADDR
// if not AnyNearBaseArea ( temp_list , base ) then
33634: LD_VAR 0 8
33638: PPUSH
33639: LD_VAR 0 1
33643: PPUSH
33644: CALL 33737 0 2
33648: NOT
33649: IFFALSE 33653
// exit ;
33651: GO 33661
// end ; result = true ;
33653: LD_ADDR_VAR 0 3
33657: PUSH
33658: LD_INT 1
33660: ST_TO_ADDR
// end ;
33661: LD_VAR 0 3
33665: RET
// export function ListFilterNearArea ( list , area , dist ) ; var i ; begin
33666: LD_INT 0
33668: PPUSH
33669: PPUSH
// result = [ ] ;
33670: LD_ADDR_VAR 0 4
33674: PUSH
33675: EMPTY
33676: ST_TO_ADDR
// for i in list do
33677: LD_ADDR_VAR 0 5
33681: PUSH
33682: LD_VAR 0 1
33686: PUSH
33687: FOR_IN
33688: IFFALSE 33730
// if GetDistUnitArea ( i , area ) <= dist then
33690: LD_VAR 0 5
33694: PPUSH
33695: LD_VAR 0 2
33699: PPUSH
33700: CALL_OW 299
33704: PUSH
33705: LD_VAR 0 3
33709: LESSEQUAL
33710: IFFALSE 33728
// result = result ^ i ;
33712: LD_ADDR_VAR 0 4
33716: PUSH
33717: LD_VAR 0 4
33721: PUSH
33722: LD_VAR 0 5
33726: ADD
33727: ST_TO_ADDR
33728: GO 33687
33730: POP
33731: POP
// end ;
33732: LD_VAR 0 4
33736: RET
// function AnyNearBaseArea ( list , base ) ; var i , area ; begin
33737: LD_INT 0
33739: PPUSH
33740: PPUSH
33741: PPUSH
// result = false ;
33742: LD_ADDR_VAR 0 3
33746: PUSH
33747: LD_INT 0
33749: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
33750: LD_ADDR_VAR 0 5
33754: PUSH
33755: LD_VAR 0 2
33759: PPUSH
33760: CALL 18845 0 1
33764: ST_TO_ADDR
// for i in list do
33765: LD_ADDR_VAR 0 4
33769: PUSH
33770: LD_VAR 0 1
33774: PUSH
33775: FOR_IN
33776: IFFALSE 33812
// if GetDistUnitArea ( i , area ) <= ai_near_base_dist then
33778: LD_VAR 0 4
33782: PPUSH
33783: LD_VAR 0 5
33787: PPUSH
33788: CALL_OW 299
33792: PUSH
33793: LD_EXP 68
33797: LESSEQUAL
33798: IFFALSE 33810
// begin result = true ;
33800: LD_ADDR_VAR 0 3
33804: PUSH
33805: LD_INT 1
33807: ST_TO_ADDR
// break ;
33808: GO 33812
// end ;
33810: GO 33775
33812: POP
33813: POP
// end ;
33814: LD_VAR 0 3
33818: RET
// on Command ( com ) do var i , temp_list , hex_list , un , k , target_hex ;
33819: LD_INT 0
33821: PPUSH
33822: PPUSH
33823: PPUSH
33824: PPUSH
33825: PPUSH
33826: PPUSH
// begin OnCommand_CrateDropDetection ( com ) ;
33827: LD_VAR 0 1
33831: PPUSH
33832: CALL 11735 0 1
// OnCommand_Contaminate ( com ) ;
33836: LD_VAR 0 1
33840: PPUSH
33841: CALL 62503 0 1
// if com = 124 then
33845: LD_VAR 0 1
33849: PUSH
33850: LD_INT 124
33852: EQUAL
33853: IFFALSE 34264
// begin for i in FilterAllUnits ( [ f_side , you ] ) do
33855: LD_ADDR_VAR 0 2
33859: PUSH
33860: LD_INT 22
33862: PUSH
33863: LD_EXP 2
33867: PUSH
33868: EMPTY
33869: LIST
33870: LIST
33871: PPUSH
33872: CALL_OW 69
33876: PUSH
33877: FOR_IN
33878: IFFALSE 34262
// if IsSelected ( i ) and HasTask ( i ) then
33880: LD_VAR 0 2
33884: PPUSH
33885: CALL_OW 306
33889: PUSH
33890: LD_VAR 0 2
33894: PPUSH
33895: CALL_OW 314
33899: AND
33900: IFFALSE 34260
// begin target_hex = [ ] ;
33902: LD_ADDR_VAR 0 7
33906: PUSH
33907: EMPTY
33908: ST_TO_ADDR
// for k in GetTaskList ( i ) do
33909: LD_ADDR_VAR 0 6
33913: PUSH
33914: LD_VAR 0 2
33918: PPUSH
33919: CALL_OW 437
33923: PUSH
33924: FOR_IN
33925: IFFALSE 33972
// if k [ 1 ] = | then
33927: LD_VAR 0 6
33931: PUSH
33932: LD_INT 1
33934: ARRAY
33935: PUSH
33936: LD_STRING |
33938: EQUAL
33939: IFFALSE 33970
// begin target_hex = [ k [ 2 ] , k [ 3 ] ] ;
33941: LD_ADDR_VAR 0 7
33945: PUSH
33946: LD_VAR 0 6
33950: PUSH
33951: LD_INT 2
33953: ARRAY
33954: PUSH
33955: LD_VAR 0 6
33959: PUSH
33960: LD_INT 3
33962: ARRAY
33963: PUSH
33964: EMPTY
33965: LIST
33966: LIST
33967: ST_TO_ADDR
// break ;
33968: GO 33972
// end ;
33970: GO 33924
33972: POP
33973: POP
// if target_hex > 0 then
33974: LD_VAR 0 7
33978: PUSH
33979: LD_INT 0
33981: GREATER
33982: IFFALSE 34260
// begin hex_list = target_hex ;
33984: LD_ADDR_VAR 0 4
33988: PUSH
33989: LD_VAR 0 7
33993: ST_TO_ADDR
// temp_list = [ ] ;
33994: LD_ADDR_VAR 0 3
33998: PUSH
33999: EMPTY
34000: ST_TO_ADDR
// for k = 0 to 5 do
34001: LD_ADDR_VAR 0 6
34005: PUSH
34006: DOUBLE
34007: LD_INT 0
34009: DEC
34010: ST_TO_ADDR
34011: LD_INT 5
34013: PUSH
34014: FOR_TO
34015: IFFALSE 34085
// temp_list = Insert ( temp_list , 1 , [ ShiftX ( hex_list [ 1 ] , k , 1 ) , ShiftY ( hex_list [ 2 ] , k , 1 ) ] ) ;
34017: LD_ADDR_VAR 0 3
34021: PUSH
34022: LD_VAR 0 3
34026: PPUSH
34027: LD_INT 1
34029: PPUSH
34030: LD_VAR 0 4
34034: PUSH
34035: LD_INT 1
34037: ARRAY
34038: PPUSH
34039: LD_VAR 0 6
34043: PPUSH
34044: LD_INT 1
34046: PPUSH
34047: CALL_OW 272
34051: PUSH
34052: LD_VAR 0 4
34056: PUSH
34057: LD_INT 2
34059: ARRAY
34060: PPUSH
34061: LD_VAR 0 6
34065: PPUSH
34066: LD_INT 1
34068: PPUSH
34069: CALL_OW 273
34073: PUSH
34074: EMPTY
34075: LIST
34076: LIST
34077: PPUSH
34078: CALL_OW 2
34082: ST_TO_ADDR
34083: GO 34014
34085: POP
34086: POP
// hex_list = [ hex_list ] ^ temp_list ;
34087: LD_ADDR_VAR 0 4
34091: PUSH
34092: LD_VAR 0 4
34096: PUSH
34097: EMPTY
34098: LIST
34099: PUSH
34100: LD_VAR 0 3
34104: ADD
34105: ST_TO_ADDR
// temp_list = [ ] ;
34106: LD_ADDR_VAR 0 3
34110: PUSH
34111: EMPTY
34112: ST_TO_ADDR
// for k in hex_list do
34113: LD_ADDR_VAR 0 6
34117: PUSH
34118: LD_VAR 0 4
34122: PUSH
34123: FOR_IN
34124: IFFALSE 34258
// begin un = HexInfo ( k [ 1 ] , k [ 2 ] ) ;
34126: LD_ADDR_VAR 0 5
34130: PUSH
34131: LD_VAR 0 6
34135: PUSH
34136: LD_INT 1
34138: ARRAY
34139: PPUSH
34140: LD_VAR 0 6
34144: PUSH
34145: LD_INT 2
34147: ARRAY
34148: PPUSH
34149: CALL_OW 428
34153: ST_TO_ADDR
// if un > 0 and not un in temp_list then
34154: LD_VAR 0 5
34158: PUSH
34159: LD_INT 0
34161: GREATER
34162: PUSH
34163: LD_VAR 0 5
34167: PUSH
34168: LD_VAR 0 3
34172: IN
34173: NOT
34174: AND
34175: IFFALSE 34256
// begin ai_attack_ground_info_initial = Insert ( ai_attack_ground_info_initial , 1 , [ i , un , GetSide ( un ) , target_hex [ 1 ] , target_hex [ 2 ] ] ) ;
34177: LD_ADDR_EXP 99
34181: PUSH
34182: LD_EXP 99
34186: PPUSH
34187: LD_INT 1
34189: PPUSH
34190: LD_VAR 0 2
34194: PUSH
34195: LD_VAR 0 5
34199: PUSH
34200: LD_VAR 0 5
34204: PPUSH
34205: CALL_OW 255
34209: PUSH
34210: LD_VAR 0 7
34214: PUSH
34215: LD_INT 1
34217: ARRAY
34218: PUSH
34219: LD_VAR 0 7
34223: PUSH
34224: LD_INT 2
34226: ARRAY
34227: PUSH
34228: EMPTY
34229: LIST
34230: LIST
34231: LIST
34232: LIST
34233: LIST
34234: PPUSH
34235: CALL_OW 2
34239: ST_TO_ADDR
// temp_list = temp_list ^ un ;
34240: LD_ADDR_VAR 0 3
34244: PUSH
34245: LD_VAR 0 3
34249: PUSH
34250: LD_VAR 0 5
34254: ADD
34255: ST_TO_ADDR
// end ; end ;
34256: GO 34123
34258: POP
34259: POP
// end ; end ;
34260: GO 33877
34262: POP
34263: POP
// end ; end ;
34264: PPOPN 7
34266: END
// every 0 0$1 + 0 0$0.1 do var a , b , temp_list , temp_list_2 , yup , i , t ;
34267: GO 34269
34269: DISABLE
34270: LD_INT 0
34272: PPUSH
34273: PPUSH
34274: PPUSH
34275: PPUSH
34276: PPUSH
34277: PPUSH
34278: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
34279: LD_INT 18
34281: PPUSH
34282: CALL_OW 67
// i = 1 ;
34286: LD_ADDR_VAR 0 6
34290: PUSH
34291: LD_INT 1
34293: ST_TO_ADDR
// while i <= ai_attack_ground_info_initial do
34294: LD_VAR 0 6
34298: PUSH
34299: LD_EXP 99
34303: LESSEQUAL
34304: IFFALSE 34467
// begin yup = false ;
34306: LD_ADDR_VAR 0 5
34310: PUSH
34311: LD_INT 0
34313: ST_TO_ADDR
// for t in GetTaskList ( ai_attack_ground_info_initial [ i ] [ 1 ] ) do
34314: LD_ADDR_VAR 0 7
34318: PUSH
34319: LD_EXP 99
34323: PUSH
34324: LD_VAR 0 6
34328: ARRAY
34329: PUSH
34330: LD_INT 1
34332: ARRAY
34333: PPUSH
34334: CALL_OW 437
34338: PUSH
34339: FOR_IN
34340: IFFALSE 34420
// if t [ 1 ] = | then
34342: LD_VAR 0 7
34346: PUSH
34347: LD_INT 1
34349: ARRAY
34350: PUSH
34351: LD_STRING |
34353: EQUAL
34354: IFFALSE 34418
// if t [ 2 ] = ai_attack_ground_info_initial [ i ] [ 4 ] and t [ 3 ] = ai_attack_ground_info_initial [ i ] [ 5 ] then
34356: LD_VAR 0 7
34360: PUSH
34361: LD_INT 2
34363: ARRAY
34364: PUSH
34365: LD_EXP 99
34369: PUSH
34370: LD_VAR 0 6
34374: ARRAY
34375: PUSH
34376: LD_INT 4
34378: ARRAY
34379: EQUAL
34380: PUSH
34381: LD_VAR 0 7
34385: PUSH
34386: LD_INT 3
34388: ARRAY
34389: PUSH
34390: LD_EXP 99
34394: PUSH
34395: LD_VAR 0 6
34399: ARRAY
34400: PUSH
34401: LD_INT 5
34403: ARRAY
34404: EQUAL
34405: AND
34406: IFFALSE 34418
// begin yup = true ;
34408: LD_ADDR_VAR 0 5
34412: PUSH
34413: LD_INT 1
34415: ST_TO_ADDR
// break ;
34416: GO 34420
// end ;
34418: GO 34339
34420: POP
34421: POP
// if not yup then
34422: LD_VAR 0 5
34426: NOT
34427: IFFALSE 34451
// begin ai_attack_ground_info_initial = Delete ( ai_attack_ground_info_initial , i ) ;
34429: LD_ADDR_EXP 99
34433: PUSH
34434: LD_EXP 99
34438: PPUSH
34439: LD_VAR 0 6
34443: PPUSH
34444: CALL_OW 3
34448: ST_TO_ADDR
// continue ;
34449: GO 34294
// end ; i = i + 1 ;
34451: LD_ADDR_VAR 0 6
34455: PUSH
34456: LD_VAR 0 6
34460: PUSH
34461: LD_INT 1
34463: PLUS
34464: ST_TO_ADDR
// end ;
34465: GO 34294
// i = 1 ;
34467: LD_ADDR_VAR 0 6
34471: PUSH
34472: LD_INT 1
34474: ST_TO_ADDR
// while i <= ai_attack_ground_info_sustain do
34475: LD_VAR 0 6
34479: PUSH
34480: LD_EXP 100
34484: LESSEQUAL
34485: IFFALSE 34648
// begin yup = false ;
34487: LD_ADDR_VAR 0 5
34491: PUSH
34492: LD_INT 0
34494: ST_TO_ADDR
// for t in GetTaskList ( ai_attack_ground_info_sustain [ i ] [ 1 ] ) do
34495: LD_ADDR_VAR 0 7
34499: PUSH
34500: LD_EXP 100
34504: PUSH
34505: LD_VAR 0 6
34509: ARRAY
34510: PUSH
34511: LD_INT 1
34513: ARRAY
34514: PPUSH
34515: CALL_OW 437
34519: PUSH
34520: FOR_IN
34521: IFFALSE 34601
// if t [ 1 ] = | then
34523: LD_VAR 0 7
34527: PUSH
34528: LD_INT 1
34530: ARRAY
34531: PUSH
34532: LD_STRING |
34534: EQUAL
34535: IFFALSE 34599
// if t [ 2 ] = ai_attack_ground_info_sustain [ i ] [ 4 ] and t [ 3 ] = ai_attack_ground_info_sustain [ i ] [ 5 ] then
34537: LD_VAR 0 7
34541: PUSH
34542: LD_INT 2
34544: ARRAY
34545: PUSH
34546: LD_EXP 100
34550: PUSH
34551: LD_VAR 0 6
34555: ARRAY
34556: PUSH
34557: LD_INT 4
34559: ARRAY
34560: EQUAL
34561: PUSH
34562: LD_VAR 0 7
34566: PUSH
34567: LD_INT 3
34569: ARRAY
34570: PUSH
34571: LD_EXP 100
34575: PUSH
34576: LD_VAR 0 6
34580: ARRAY
34581: PUSH
34582: LD_INT 5
34584: ARRAY
34585: EQUAL
34586: AND
34587: IFFALSE 34599
// begin yup = true ;
34589: LD_ADDR_VAR 0 5
34593: PUSH
34594: LD_INT 1
34596: ST_TO_ADDR
// break ;
34597: GO 34601
// end ;
34599: GO 34520
34601: POP
34602: POP
// if not yup then
34603: LD_VAR 0 5
34607: NOT
34608: IFFALSE 34632
// begin ai_attack_ground_info_sustain = Delete ( ai_attack_ground_info_sustain , i ) ;
34610: LD_ADDR_EXP 100
34614: PUSH
34615: LD_EXP 100
34619: PPUSH
34620: LD_VAR 0 6
34624: PPUSH
34625: CALL_OW 3
34629: ST_TO_ADDR
// continue ;
34630: GO 34475
// end ; i = i + 1 ;
34632: LD_ADDR_VAR 0 6
34636: PUSH
34637: LD_VAR 0 6
34641: PUSH
34642: LD_INT 1
34644: PLUS
34645: ST_TO_ADDR
// end ;
34646: GO 34475
// temp_list = ai_contact_time ;
34648: LD_ADDR_VAR 0 3
34652: PUSH
34653: LD_EXP 98
34657: ST_TO_ADDR
// for a = 1 to temp_list do
34658: LD_ADDR_VAR 0 1
34662: PUSH
34663: DOUBLE
34664: LD_INT 1
34666: DEC
34667: ST_TO_ADDR
34668: LD_VAR 0 3
34672: PUSH
34673: FOR_TO
34674: IFFALSE 34800
// for b = 1 to temp_list [ a ] do
34676: LD_ADDR_VAR 0 2
34680: PUSH
34681: DOUBLE
34682: LD_INT 1
34684: DEC
34685: ST_TO_ADDR
34686: LD_VAR 0 3
34690: PUSH
34691: LD_VAR 0 1
34695: ARRAY
34696: PUSH
34697: FOR_TO
34698: IFFALSE 34796
// if temp_list [ a ] [ b ] < 100000 then
34700: LD_VAR 0 3
34704: PUSH
34705: LD_VAR 0 1
34709: ARRAY
34710: PUSH
34711: LD_VAR 0 2
34715: ARRAY
34716: PUSH
34717: LD_INT 100000
34719: LESS
34720: IFFALSE 34794
// begin temp_list_2 = Replace ( ai_contact_time [ a ] , b , temp_list [ a ] [ b ] + 0 0$0.5 ) ;
34722: LD_ADDR_VAR 0 4
34726: PUSH
34727: LD_EXP 98
34731: PUSH
34732: LD_VAR 0 1
34736: ARRAY
34737: PPUSH
34738: LD_VAR 0 2
34742: PPUSH
34743: LD_VAR 0 3
34747: PUSH
34748: LD_VAR 0 1
34752: ARRAY
34753: PUSH
34754: LD_VAR 0 2
34758: ARRAY
34759: PUSH
34760: LD_INT 18
34762: PLUS
34763: PPUSH
34764: CALL_OW 1
34768: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a , temp_list_2 ) ;
34769: LD_ADDR_EXP 98
34773: PUSH
34774: LD_EXP 98
34778: PPUSH
34779: LD_VAR 0 1
34783: PPUSH
34784: LD_VAR 0 4
34788: PPUSH
34789: CALL_OW 1
34793: ST_TO_ADDR
// end ;
34794: GO 34697
34796: POP
34797: POP
34798: GO 34673
34800: POP
34801: POP
// for a in ai_attack_ground_info_initial do
34802: LD_ADDR_VAR 0 1
34806: PUSH
34807: LD_EXP 99
34811: PUSH
34812: FOR_IN
34813: IFFALSE 35019
// begin if IsDead ( a [ 2 ] ) or UnitShoot ( a [ 2 ] ) = a [ 1 ] then
34815: LD_VAR 0 1
34819: PUSH
34820: LD_INT 2
34822: ARRAY
34823: PPUSH
34824: CALL_OW 301
34828: PUSH
34829: LD_VAR 0 1
34833: PUSH
34834: LD_INT 2
34836: ARRAY
34837: PPUSH
34838: CALL_OW 504
34842: PUSH
34843: LD_VAR 0 1
34847: PUSH
34848: LD_INT 1
34850: ARRAY
34851: EQUAL
34852: OR
34853: IFFALSE 35017
// begin temp_list = Replace ( ai_contact_time [ you ] , a [ 3 ] , 0 ) ;
34855: LD_ADDR_VAR 0 3
34859: PUSH
34860: LD_EXP 98
34864: PUSH
34865: LD_EXP 2
34869: ARRAY
34870: PPUSH
34871: LD_VAR 0 1
34875: PUSH
34876: LD_INT 3
34878: ARRAY
34879: PPUSH
34880: LD_INT 0
34882: PPUSH
34883: CALL_OW 1
34887: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , you , temp_list ) ;
34888: LD_ADDR_EXP 98
34892: PUSH
34893: LD_EXP 98
34897: PPUSH
34898: LD_EXP 2
34902: PPUSH
34903: LD_VAR 0 3
34907: PPUSH
34908: CALL_OW 1
34912: ST_TO_ADDR
// temp_list = Replace ( ai_contact_time [ a [ 3 ] ] , you , 0 ) ;
34913: LD_ADDR_VAR 0 3
34917: PUSH
34918: LD_EXP 98
34922: PUSH
34923: LD_VAR 0 1
34927: PUSH
34928: LD_INT 3
34930: ARRAY
34931: ARRAY
34932: PPUSH
34933: LD_EXP 2
34937: PPUSH
34938: LD_INT 0
34940: PPUSH
34941: CALL_OW 1
34945: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a [ 3 ] , temp_list ) ;
34946: LD_ADDR_EXP 98
34950: PUSH
34951: LD_EXP 98
34955: PPUSH
34956: LD_VAR 0 1
34960: PUSH
34961: LD_INT 3
34963: ARRAY
34964: PPUSH
34965: LD_VAR 0 3
34969: PPUSH
34970: CALL_OW 1
34974: ST_TO_ADDR
// ai_attack_ground_info_initial = ai_attack_ground_info_initial diff [ a ] ;
34975: LD_ADDR_EXP 99
34979: PUSH
34980: LD_EXP 99
34984: PUSH
34985: LD_VAR 0 1
34989: PUSH
34990: EMPTY
34991: LIST
34992: DIFF
34993: ST_TO_ADDR
// ai_attack_ground_info_sustain = Insert ( ai_attack_ground_info_sustain , 1 , a ) ;
34994: LD_ADDR_EXP 100
34998: PUSH
34999: LD_EXP 100
35003: PPUSH
35004: LD_INT 1
35006: PPUSH
35007: LD_VAR 0 1
35011: PPUSH
35012: CALL_OW 2
35016: ST_TO_ADDR
// end ; end ;
35017: GO 34812
35019: POP
35020: POP
// for a in ai_attack_ground_info_sustain do
35021: LD_ADDR_VAR 0 1
35025: PUSH
35026: LD_EXP 100
35030: PUSH
35031: FOR_IN
35032: IFFALSE 35156
// begin temp_list = Replace ( ai_contact_time [ you ] , a [ 3 ] , 0 ) ;
35034: LD_ADDR_VAR 0 3
35038: PUSH
35039: LD_EXP 98
35043: PUSH
35044: LD_EXP 2
35048: ARRAY
35049: PPUSH
35050: LD_VAR 0 1
35054: PUSH
35055: LD_INT 3
35057: ARRAY
35058: PPUSH
35059: LD_INT 0
35061: PPUSH
35062: CALL_OW 1
35066: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , you , temp_list ) ;
35067: LD_ADDR_EXP 98
35071: PUSH
35072: LD_EXP 98
35076: PPUSH
35077: LD_EXP 2
35081: PPUSH
35082: LD_VAR 0 3
35086: PPUSH
35087: CALL_OW 1
35091: ST_TO_ADDR
// temp_list = Replace ( ai_contact_time [ a [ 3 ] ] , you , 0 ) ;
35092: LD_ADDR_VAR 0 3
35096: PUSH
35097: LD_EXP 98
35101: PUSH
35102: LD_VAR 0 1
35106: PUSH
35107: LD_INT 3
35109: ARRAY
35110: ARRAY
35111: PPUSH
35112: LD_EXP 2
35116: PPUSH
35117: LD_INT 0
35119: PPUSH
35120: CALL_OW 1
35124: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a [ 3 ] , temp_list ) ;
35125: LD_ADDR_EXP 98
35129: PUSH
35130: LD_EXP 98
35134: PPUSH
35135: LD_VAR 0 1
35139: PUSH
35140: LD_INT 3
35142: ARRAY
35143: PPUSH
35144: LD_VAR 0 3
35148: PPUSH
35149: CALL_OW 1
35153: ST_TO_ADDR
// end ;
35154: GO 35031
35156: POP
35157: POP
// until false ;
35158: LD_INT 0
35160: IFFALSE 34279
// end ;
35162: PPOPN 7
35164: END
// on SiberiteRocketExploded ( vehicle , x , y ) do var side , base , i , temp_list ;
35165: LD_INT 0
35167: PPUSH
35168: PPUSH
35169: PPUSH
35170: PPUSH
// begin OnSiberiteRocketExploded_AmBomb ( vehicle , x , y ) ;
35171: LD_VAR 0 1
35175: PPUSH
35176: LD_VAR 0 2
35180: PPUSH
35181: LD_VAR 0 3
35185: PPUSH
35186: CALL 45051 0 3
// if IsDead ( vehicle ) then
35190: LD_VAR 0 1
35194: PPUSH
35195: CALL_OW 301
35199: IFFALSE 35203
// exit ;
35201: GO 35351
// side = GetSide ( vehicle ) ;
35203: LD_ADDR_VAR 0 4
35207: PUSH
35208: LD_VAR 0 1
35212: PPUSH
35213: CALL_OW 255
35217: ST_TO_ADDR
// base = - 1 ;
35218: LD_ADDR_VAR 0 5
35222: PUSH
35223: LD_INT 1
35225: NEG
35226: ST_TO_ADDR
// for i in ai_bases do
35227: LD_ADDR_VAR 0 6
35231: PUSH
35232: LD_EXP 26
35236: PUSH
35237: FOR_IN
35238: IFFALSE 35280
// if InArea ( x , y , GetBaseArea ( i ) ) then
35240: LD_VAR 0 2
35244: PPUSH
35245: LD_VAR 0 3
35249: PPUSH
35250: LD_VAR 0 6
35254: PPUSH
35255: CALL 18845 0 1
35259: PPUSH
35260: CALL_OW 309
35264: IFFALSE 35278
// begin base = i ;
35266: LD_ADDR_VAR 0 5
35270: PUSH
35271: LD_VAR 0 6
35275: ST_TO_ADDR
// break ;
35276: GO 35280
// end ;
35278: GO 35237
35280: POP
35281: POP
// if base = - 1 then
35282: LD_VAR 0 5
35286: PUSH
35287: LD_INT 1
35289: NEG
35290: EQUAL
35291: IFFALSE 35295
// exit ;
35293: GO 35351
// temp_list = Replace ( ai_sib_bomb_used_time_matrix [ base ] , side , tick ) ;
35295: LD_ADDR_VAR 0 7
35299: PUSH
35300: LD_EXP 101
35304: PUSH
35305: LD_VAR 0 5
35309: ARRAY
35310: PPUSH
35311: LD_VAR 0 4
35315: PPUSH
35316: LD_OWVAR 1
35320: PPUSH
35321: CALL_OW 1
35325: ST_TO_ADDR
// ai_sib_bomb_used_time_matrix = Replace ( ai_sib_bomb_used_time_matrix , base , temp_list ) ;
35326: LD_ADDR_EXP 101
35330: PUSH
35331: LD_EXP 101
35335: PPUSH
35336: LD_VAR 0 5
35340: PPUSH
35341: LD_VAR 0 7
35345: PPUSH
35346: CALL_OW 1
35350: ST_TO_ADDR
// end ;
35351: PPOPN 7
35353: 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 , free_behemoth_parking_spots , parked_behemoths , 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 ;
35354: GO 35356
35356: DISABLE
35357: LD_INT 0
35359: PPUSH
35360: PPUSH
35361: PPUSH
35362: PPUSH
35363: PPUSH
35364: PPUSH
35365: PPUSH
35366: PPUSH
35367: PPUSH
35368: PPUSH
35369: PPUSH
35370: PPUSH
35371: PPUSH
35372: PPUSH
35373: PPUSH
35374: PPUSH
35375: PPUSH
35376: PPUSH
35377: PPUSH
35378: PPUSH
35379: PPUSH
35380: PPUSH
35381: PPUSH
35382: PPUSH
35383: PPUSH
35384: PPUSH
35385: PPUSH
35386: PPUSH
35387: PPUSH
35388: PPUSH
// begin vehicles_drivers = [ ] ;
35389: LD_ADDR_VAR 0 29
35393: PUSH
35394: EMPTY
35395: ST_TO_ADDR
// remote_driver_vehicles = [ [ ] , [ ] , [ ] , [ ] ] ;
35396: LD_ADDR_VAR 0 30
35400: PUSH
35401: EMPTY
35402: PUSH
35403: EMPTY
35404: PUSH
35405: EMPTY
35406: PUSH
35407: EMPTY
35408: PUSH
35409: EMPTY
35410: LIST
35411: LIST
35412: LIST
35413: LIST
35414: ST_TO_ADDR
// repeat if ai_bases = 0 then
35415: LD_EXP 26
35419: PUSH
35420: LD_INT 0
35422: EQUAL
35423: IFFALSE 35427
// exit ;
35425: GO 43904
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
35427: LD_INT 35
35429: PUSH
35430: LD_EXP 26
35434: PUSH
35435: LD_INT 0
35437: PLUS
35438: MOD
35439: PPUSH
35440: CALL_OW 67
// for base in ai_bases do
35444: LD_ADDR_VAR 0 12
35448: PUSH
35449: LD_EXP 26
35453: PUSH
35454: FOR_IN
35455: IFFALSE 43898
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
35457: LD_INT 35
35459: PUSH
35460: LD_EXP 26
35464: PUSH
35465: LD_INT 0
35467: PLUS
35468: DIV
35469: PPUSH
35470: CALL_OW 67
// side = GetBaseSide ( base ) ;
35474: LD_ADDR_VAR 0 1
35478: PUSH
35479: LD_VAR 0 12
35483: PPUSH
35484: CALL 18937 0 1
35488: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
35489: LD_ADDR_VAR 0 13
35493: PUSH
35494: LD_VAR 0 12
35498: PPUSH
35499: CALL 18845 0 1
35503: ST_TO_ADDR
// under_attack = BaseUnderAttack ( base , - 1 ) ;
35504: LD_ADDR_VAR 0 9
35508: PUSH
35509: LD_VAR 0 12
35513: PPUSH
35514: LD_INT 1
35516: NEG
35517: PPUSH
35518: CALL 32934 0 2
35522: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] do
35523: LD_ADDR_VAR 0 2
35527: PUSH
35528: LD_EXP 53
35532: PUSH
35533: LD_VAR 0 12
35537: ARRAY
35538: PUSH
35539: LD_EXP 86
35543: PUSH
35544: LD_VAR 0 12
35548: ARRAY
35549: ADD
35550: PUSH
35551: LD_EXP 87
35555: PUSH
35556: LD_VAR 0 12
35560: ARRAY
35561: ADD
35562: PUSH
35563: FOR_IN
35564: IFFALSE 35659
// if vehicles_drivers >= i then
35566: LD_VAR 0 29
35570: PUSH
35571: LD_VAR 0 2
35575: GREATEREQUAL
35576: IFFALSE 35657
// if vehicles_drivers [ i ] > 0 then
35578: LD_VAR 0 29
35582: PUSH
35583: LD_VAR 0 2
35587: ARRAY
35588: PUSH
35589: LD_INT 0
35591: GREATER
35592: IFFALSE 35657
// if IsInUnit ( vehicles_drivers [ i ] ) = i or IsDead ( vehicles_drivers [ i ] ) then
35594: LD_VAR 0 29
35598: PUSH
35599: LD_VAR 0 2
35603: ARRAY
35604: PPUSH
35605: CALL_OW 310
35609: PUSH
35610: LD_VAR 0 2
35614: EQUAL
35615: PUSH
35616: LD_VAR 0 29
35620: PUSH
35621: LD_VAR 0 2
35625: ARRAY
35626: PPUSH
35627: CALL_OW 301
35631: OR
35632: IFFALSE 35657
// vehicles_drivers = Replace ( vehicles_drivers , i , 0 ) ;
35634: LD_ADDR_VAR 0 29
35638: PUSH
35639: LD_VAR 0 29
35643: PPUSH
35644: LD_VAR 0 2
35648: PPUSH
35649: LD_INT 0
35651: PPUSH
35652: CALL_OW 1
35656: ST_TO_ADDR
35657: GO 35563
35659: POP
35660: 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
35661: LD_EXP 74
35665: PUSH
35666: LD_VAR 0 12
35670: ARRAY
35671: PUSH
35672: LD_INT 0
35674: GREATER
35675: PUSH
35676: LD_EXP 74
35680: PUSH
35681: LD_VAR 0 12
35685: ARRAY
35686: PPUSH
35687: CALL_OW 263
35691: PUSH
35692: LD_INT 1
35694: EQUAL
35695: AND
35696: PUSH
35697: LD_EXP 78
35701: PUSH
35702: LD_VAR 0 12
35706: ARRAY
35707: PUSH
35708: LD_INT 0
35710: EQUAL
35711: AND
35712: PUSH
35713: LD_EXP 30
35717: PUSH
35718: LD_VAR 0 12
35722: ARRAY
35723: PUSH
35724: LD_INT 0
35726: GREATER
35727: AND
35728: IFFALSE 35879
// begin ai_crane_driver = Replace ( ai_crane_driver , base , FindBestCraneDriver ( base ) ) ;
35730: LD_ADDR_EXP 78
35734: PUSH
35735: LD_EXP 78
35739: PPUSH
35740: LD_VAR 0 12
35744: PPUSH
35745: LD_VAR 0 12
35749: PPUSH
35750: CALL 44218 0 1
35754: PPUSH
35755: CALL_OW 1
35759: ST_TO_ADDR
// for i = 1 to remote_driver_vehicles [ base ] + 0 do
35760: LD_ADDR_VAR 0 2
35764: PUSH
35765: DOUBLE
35766: LD_INT 1
35768: DEC
35769: ST_TO_ADDR
35770: LD_VAR 0 30
35774: PUSH
35775: LD_VAR 0 12
35779: ARRAY
35780: PUSH
35781: LD_INT 0
35783: PLUS
35784: PUSH
35785: FOR_TO
35786: IFFALSE 35877
// if remote_driver_vehicles [ base ] [ i ] [ 1 ] = ai_crane_driver [ base ] then
35788: LD_VAR 0 30
35792: PUSH
35793: LD_VAR 0 12
35797: ARRAY
35798: PUSH
35799: LD_VAR 0 2
35803: ARRAY
35804: PUSH
35805: LD_INT 1
35807: ARRAY
35808: PUSH
35809: LD_EXP 78
35813: PUSH
35814: LD_VAR 0 12
35818: ARRAY
35819: EQUAL
35820: IFFALSE 35875
// begin temp_list = Delete ( remote_driver_vehicles [ base ] , i ) ;
35822: LD_ADDR_VAR 0 4
35826: PUSH
35827: LD_VAR 0 30
35831: PUSH
35832: LD_VAR 0 12
35836: ARRAY
35837: PPUSH
35838: LD_VAR 0 2
35842: PPUSH
35843: CALL_OW 3
35847: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list ) ;
35848: LD_ADDR_VAR 0 30
35852: PUSH
35853: LD_VAR 0 30
35857: PPUSH
35858: LD_VAR 0 12
35862: PPUSH
35863: LD_VAR 0 4
35867: PPUSH
35868: CALL_OW 1
35872: ST_TO_ADDR
// break ;
35873: GO 35877
// end ;
35875: GO 35785
35877: POP
35878: POP
// end ; mechanics_list = UnitFilter ( ai_mechanics_defend [ base ] diff ( ai_heal_these_humans [ base ] ^ ai_crane_driver [ base ] ) , [ f_not , [ f_driving ] ] ) ;
35879: LD_ADDR_VAR 0 3
35883: PUSH
35884: LD_EXP 30
35888: PUSH
35889: LD_VAR 0 12
35893: ARRAY
35894: PUSH
35895: LD_EXP 61
35899: PUSH
35900: LD_VAR 0 12
35904: ARRAY
35905: PUSH
35906: LD_EXP 78
35910: PUSH
35911: LD_VAR 0 12
35915: ARRAY
35916: ADD
35917: DIFF
35918: PPUSH
35919: LD_INT 3
35921: PUSH
35922: LD_INT 55
35924: PUSH
35925: EMPTY
35926: LIST
35927: PUSH
35928: EMPTY
35929: LIST
35930: LIST
35931: PPUSH
35932: CALL_OW 72
35936: ST_TO_ADDR
// if ai_crane_driver [ base ] > 0 and not IsOk ( ai_crane [ base ] ) then
35937: LD_EXP 78
35941: PUSH
35942: LD_VAR 0 12
35946: ARRAY
35947: PUSH
35948: LD_INT 0
35950: GREATER
35951: PUSH
35952: LD_EXP 74
35956: PUSH
35957: LD_VAR 0 12
35961: ARRAY
35962: PPUSH
35963: CALL_OW 302
35967: NOT
35968: AND
35969: IFFALSE 35993
// mechanics_list = mechanics_list ^ ai_crane_driver [ base ] ;
35971: LD_ADDR_VAR 0 3
35975: PUSH
35976: LD_VAR 0 3
35980: PUSH
35981: LD_EXP 78
35985: PUSH
35986: LD_VAR 0 12
35990: ARRAY
35991: ADD
35992: ST_TO_ADDR
// remote_mechanics = [ ] ;
35993: LD_ADDR_VAR 0 15
35997: PUSH
35998: EMPTY
35999: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
36000: LD_ADDR_VAR 0 4
36004: PUSH
36005: LD_EXP 61
36009: PUSH
36010: LD_VAR 0 12
36014: ARRAY
36015: ST_TO_ADDR
// i = 1 ;
36016: LD_ADDR_VAR 0 2
36020: PUSH
36021: LD_INT 1
36023: ST_TO_ADDR
// while i <= mechanics_list do
36024: LD_VAR 0 2
36028: PUSH
36029: LD_VAR 0 3
36033: LESSEQUAL
36034: IFFALSE 36117
// begin if GetLives ( mechanics_list [ i ] ) <= 900 then
36036: LD_VAR 0 3
36040: PUSH
36041: LD_VAR 0 2
36045: ARRAY
36046: PPUSH
36047: CALL_OW 256
36051: PUSH
36052: LD_INT 900
36054: LESSEQUAL
36055: IFFALSE 36101
// begin temp_list = temp_list ^ mechanics_list [ i ] ;
36057: LD_ADDR_VAR 0 4
36061: PUSH
36062: LD_VAR 0 4
36066: PUSH
36067: LD_VAR 0 3
36071: PUSH
36072: LD_VAR 0 2
36076: ARRAY
36077: ADD
36078: ST_TO_ADDR
// mechanics_list = Delete ( mechanics_list , i ) ;
36079: LD_ADDR_VAR 0 3
36083: PUSH
36084: LD_VAR 0 3
36088: PPUSH
36089: LD_VAR 0 2
36093: PPUSH
36094: CALL_OW 3
36098: ST_TO_ADDR
// continue ;
36099: GO 36024
// end ; i = i + 1 ;
36101: LD_ADDR_VAR 0 2
36105: PUSH
36106: LD_VAR 0 2
36110: PUSH
36111: LD_INT 1
36113: PLUS
36114: ST_TO_ADDR
// end ;
36115: GO 36024
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
36117: LD_ADDR_EXP 61
36121: PUSH
36122: LD_EXP 61
36126: PPUSH
36127: LD_VAR 0 12
36131: PPUSH
36132: LD_VAR 0 4
36136: PPUSH
36137: CALL_OW 1
36141: ST_TO_ADDR
// if ai_control_tower [ base ] > 0 or ai_control_tower_vehicles [ base ] > 0 then
36142: LD_EXP 46
36146: PUSH
36147: LD_VAR 0 12
36151: ARRAY
36152: PUSH
36153: LD_INT 0
36155: GREATER
36156: PUSH
36157: LD_EXP 81
36161: PUSH
36162: LD_VAR 0 12
36166: ARRAY
36167: PUSH
36168: LD_INT 0
36170: GREATER
36171: OR
36172: IFFALSE 37833
// begin temp_list = remote_driver_vehicles [ base ] ;
36174: LD_ADDR_VAR 0 4
36178: PUSH
36179: LD_VAR 0 30
36183: PUSH
36184: LD_VAR 0 12
36188: ARRAY
36189: ST_TO_ADDR
// vehicles_list = [ ] ;
36190: LD_ADDR_VAR 0 7
36194: PUSH
36195: EMPTY
36196: ST_TO_ADDR
// i = 1 ;
36197: LD_ADDR_VAR 0 2
36201: PUSH
36202: LD_INT 1
36204: ST_TO_ADDR
// while i <= temp_list do
36205: LD_VAR 0 2
36209: PUSH
36210: LD_VAR 0 4
36214: LESSEQUAL
36215: IFFALSE 36487
// begin if IsDead ( temp_list [ i ] [ 1 ] ) then
36217: LD_VAR 0 4
36221: PUSH
36222: LD_VAR 0 2
36226: ARRAY
36227: PUSH
36228: LD_INT 1
36230: ARRAY
36231: PPUSH
36232: CALL_OW 301
36236: IFFALSE 36262
// begin temp_list = Delete ( temp_list , i ) ;
36238: LD_ADDR_VAR 0 4
36242: PUSH
36243: LD_VAR 0 4
36247: PPUSH
36248: LD_VAR 0 2
36252: PPUSH
36253: CALL_OW 3
36257: ST_TO_ADDR
// continue ;
36258: GO 36205
// end else
36260: GO 36445
// begin temp_list_3 = temp_list [ i ] [ 2 ] ;
36262: LD_ADDR_VAR 0 5
36266: PUSH
36267: LD_VAR 0 4
36271: PUSH
36272: LD_VAR 0 2
36276: ARRAY
36277: PUSH
36278: LD_INT 2
36280: ARRAY
36281: ST_TO_ADDR
// k = 1 ;
36282: LD_ADDR_VAR 0 11
36286: PUSH
36287: LD_INT 1
36289: ST_TO_ADDR
// while k <= temp_list_3 do
36290: LD_VAR 0 11
36294: PUSH
36295: LD_VAR 0 5
36299: LESSEQUAL
36300: IFFALSE 36357
// begin if IsDead ( temp_list_3 [ k ] ) then
36302: LD_VAR 0 5
36306: PUSH
36307: LD_VAR 0 11
36311: ARRAY
36312: PPUSH
36313: CALL_OW 301
36317: IFFALSE 36341
// begin temp_list_3 = Delete ( temp_list_3 , k ) ;
36319: LD_ADDR_VAR 0 5
36323: PUSH
36324: LD_VAR 0 5
36328: PPUSH
36329: LD_VAR 0 11
36333: PPUSH
36334: CALL_OW 3
36338: ST_TO_ADDR
// continue ;
36339: GO 36290
// end ; k = k + 1 ;
36341: LD_ADDR_VAR 0 11
36345: PUSH
36346: LD_VAR 0 11
36350: PUSH
36351: LD_INT 1
36353: PLUS
36354: ST_TO_ADDR
// end ;
36355: GO 36290
// if temp_list_3 > 0 then
36357: LD_VAR 0 5
36361: PUSH
36362: LD_INT 0
36364: GREATER
36365: IFFALSE 36423
// begin temp_list_2 = Replace ( temp_list [ i ] , 2 , temp_list_3 ) ;
36367: LD_ADDR_VAR 0 14
36371: PUSH
36372: LD_VAR 0 4
36376: PUSH
36377: LD_VAR 0 2
36381: ARRAY
36382: PPUSH
36383: LD_INT 2
36385: PPUSH
36386: LD_VAR 0 5
36390: PPUSH
36391: CALL_OW 1
36395: ST_TO_ADDR
// temp_list = Replace ( temp_list , i , temp_list_2 ) ;
36396: LD_ADDR_VAR 0 4
36400: PUSH
36401: LD_VAR 0 4
36405: PPUSH
36406: LD_VAR 0 2
36410: PPUSH
36411: LD_VAR 0 14
36415: PPUSH
36416: CALL_OW 1
36420: ST_TO_ADDR
// end else
36421: GO 36445
// begin temp_list = Delete ( temp_list , i ) ;
36423: LD_ADDR_VAR 0 4
36427: PUSH
36428: LD_VAR 0 4
36432: PPUSH
36433: LD_VAR 0 2
36437: PPUSH
36438: CALL_OW 3
36442: ST_TO_ADDR
// continue ;
36443: GO 36205
// end ; end ; vehicles_list = vehicles_list ^ temp_list [ i ] [ 2 ] ;
36445: LD_ADDR_VAR 0 7
36449: PUSH
36450: LD_VAR 0 7
36454: PUSH
36455: LD_VAR 0 4
36459: PUSH
36460: LD_VAR 0 2
36464: ARRAY
36465: PUSH
36466: LD_INT 2
36468: ARRAY
36469: ADD
36470: ST_TO_ADDR
// i = i + 1 ;
36471: LD_ADDR_VAR 0 2
36475: PUSH
36476: LD_VAR 0 2
36480: PUSH
36481: LD_INT 1
36483: PLUS
36484: ST_TO_ADDR
// end ;
36485: GO 36205
// num_control_stations = ai_control_tower_vehicles [ base ] + ( ai_control_tower [ base ] > 0 ) * 3 ;
36487: LD_ADDR_VAR 0 21
36491: PUSH
36492: LD_EXP 81
36496: PUSH
36497: LD_VAR 0 12
36501: ARRAY
36502: PUSH
36503: LD_EXP 46
36507: PUSH
36508: LD_VAR 0 12
36512: ARRAY
36513: PUSH
36514: LD_INT 0
36516: GREATER
36517: PUSH
36518: LD_INT 3
36520: MUL
36521: PLUS
36522: ST_TO_ADDR
// while temp_list > num_control_stations do
36523: LD_VAR 0 4
36527: PUSH
36528: LD_VAR 0 21
36532: GREATER
36533: IFFALSE 36591
// begin vehicles_list = vehicles_list diff temp_list [ temp_list + 0 ] [ 2 ] ;
36535: LD_ADDR_VAR 0 7
36539: PUSH
36540: LD_VAR 0 7
36544: PUSH
36545: LD_VAR 0 4
36549: PUSH
36550: LD_VAR 0 4
36554: PUSH
36555: LD_INT 0
36557: PLUS
36558: ARRAY
36559: PUSH
36560: LD_INT 2
36562: ARRAY
36563: DIFF
36564: ST_TO_ADDR
// temp_list = Delete ( temp_list , temp_list + 0 ) ;
36565: LD_ADDR_VAR 0 4
36569: PUSH
36570: LD_VAR 0 4
36574: PPUSH
36575: LD_VAR 0 4
36579: PUSH
36580: LD_INT 0
36582: PLUS
36583: PPUSH
36584: CALL_OW 3
36588: ST_TO_ADDR
// end ;
36589: GO 36523
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list ) ;
36591: LD_ADDR_VAR 0 30
36595: PUSH
36596: LD_VAR 0 30
36600: PPUSH
36601: LD_VAR 0 12
36605: PPUSH
36606: LD_VAR 0 4
36610: PPUSH
36611: CALL_OW 1
36615: ST_TO_ADDR
// temp_list = UnitFilter ( ( ai_vehicles_defend [ base ] ^ ( ai_cargo_bay [ base ] diff 0 ) ^ ( ai_crane [ base ] diff 0 ) ^ ai_vehicles_attack [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] ^ ai_sib_bomb_vehicles [ base ] ) diff vehicles_list , [ f_control , control_remote ] ) ;
36616: LD_ADDR_VAR 0 4
36620: PUSH
36621: LD_EXP 53
36625: PUSH
36626: LD_VAR 0 12
36630: ARRAY
36631: PUSH
36632: LD_EXP 71
36636: PUSH
36637: LD_VAR 0 12
36641: ARRAY
36642: PUSH
36643: LD_INT 0
36645: DIFF
36646: ADD
36647: PUSH
36648: LD_EXP 74
36652: PUSH
36653: LD_VAR 0 12
36657: ARRAY
36658: PUSH
36659: LD_INT 0
36661: DIFF
36662: ADD
36663: PUSH
36664: LD_EXP 54
36668: PUSH
36669: LD_VAR 0 12
36673: ARRAY
36674: ADD
36675: PUSH
36676: LD_EXP 86
36680: PUSH
36681: LD_VAR 0 12
36685: ARRAY
36686: ADD
36687: PUSH
36688: LD_EXP 87
36692: PUSH
36693: LD_VAR 0 12
36697: ARRAY
36698: ADD
36699: PUSH
36700: LD_EXP 93
36704: PUSH
36705: LD_VAR 0 12
36709: ARRAY
36710: ADD
36711: PUSH
36712: LD_VAR 0 7
36716: DIFF
36717: PPUSH
36718: LD_INT 33
36720: PUSH
36721: LD_INT 2
36723: PUSH
36724: EMPTY
36725: LIST
36726: LIST
36727: PPUSH
36728: CALL_OW 72
36732: ST_TO_ADDR
// if temp_list > 0 then
36733: LD_VAR 0 4
36737: PUSH
36738: LD_INT 0
36740: GREATER
36741: IFFALSE 37489
// begin temp_list_3 = mechanics_list ;
36743: LD_ADDR_VAR 0 5
36747: PUSH
36748: LD_VAR 0 3
36752: ST_TO_ADDR
// for i in remote_driver_vehicles [ base ] do
36753: LD_ADDR_VAR 0 2
36757: PUSH
36758: LD_VAR 0 30
36762: PUSH
36763: LD_VAR 0 12
36767: ARRAY
36768: PUSH
36769: FOR_IN
36770: IFFALSE 36794
// temp_list_3 = temp_list_3 diff i [ 1 ] ;
36772: LD_ADDR_VAR 0 5
36776: PUSH
36777: LD_VAR 0 5
36781: PUSH
36782: LD_VAR 0 2
36786: PUSH
36787: LD_INT 1
36789: ARRAY
36790: DIFF
36791: ST_TO_ADDR
36792: GO 36769
36794: POP
36795: POP
// if temp_list_3 > 0 then
36796: LD_VAR 0 5
36800: PUSH
36801: LD_INT 0
36803: GREATER
36804: IFFALSE 36830
// temp_list_3 = temp_list_3 diff FindMinSkill ( temp_list_3 , skill_mechanical ) ;
36806: LD_ADDR_VAR 0 5
36810: PUSH
36811: LD_VAR 0 5
36815: PUSH
36816: LD_VAR 0 5
36820: PPUSH
36821: LD_INT 3
36823: PPUSH
36824: CALL_OW 443
36828: DIFF
36829: ST_TO_ADDR
// i = 1 ;
36830: LD_ADDR_VAR 0 2
36834: PUSH
36835: LD_INT 1
36837: ST_TO_ADDR
// while i <= temp_list do
36838: LD_VAR 0 2
36842: PUSH
36843: LD_VAR 0 4
36847: LESSEQUAL
36848: IFFALSE 37489
// begin a = 1 ;
36850: LD_ADDR_VAR 0 18
36854: PUSH
36855: LD_INT 1
36857: ST_TO_ADDR
// while a <= remote_driver_vehicles [ base ] do
36858: LD_VAR 0 18
36862: PUSH
36863: LD_VAR 0 30
36867: PUSH
36868: LD_VAR 0 12
36872: ARRAY
36873: LESSEQUAL
36874: IFFALSE 36954
// begin if remote_driver_vehicles [ base ] [ a ] [ 2 ] < 2 and GetSkill ( remote_driver_vehicles [ base ] [ a ] [ 1 ] , skill_mechanical ) >= 2 then
36876: LD_VAR 0 30
36880: PUSH
36881: LD_VAR 0 12
36885: ARRAY
36886: PUSH
36887: LD_VAR 0 18
36891: ARRAY
36892: PUSH
36893: LD_INT 2
36895: ARRAY
36896: PUSH
36897: LD_INT 2
36899: LESS
36900: PUSH
36901: LD_VAR 0 30
36905: PUSH
36906: LD_VAR 0 12
36910: ARRAY
36911: PUSH
36912: LD_VAR 0 18
36916: ARRAY
36917: PUSH
36918: LD_INT 1
36920: ARRAY
36921: PPUSH
36922: LD_INT 3
36924: PPUSH
36925: CALL_OW 259
36929: PUSH
36930: LD_INT 2
36932: GREATEREQUAL
36933: AND
36934: IFFALSE 36938
// break ;
36936: GO 36954
// a = a + 1 ;
36938: LD_ADDR_VAR 0 18
36942: PUSH
36943: LD_VAR 0 18
36947: PUSH
36948: LD_INT 1
36950: PLUS
36951: ST_TO_ADDR
// end ;
36952: GO 36858
// if a > remote_driver_vehicles [ base ] then
36954: LD_VAR 0 18
36958: PUSH
36959: LD_VAR 0 30
36963: PUSH
36964: LD_VAR 0 12
36968: ARRAY
36969: GREATER
36970: IFFALSE 37344
// begin if remote_driver_vehicles [ base ] >= num_control_stations then
36972: LD_VAR 0 30
36976: PUSH
36977: LD_VAR 0 12
36981: ARRAY
36982: PUSH
36983: LD_VAR 0 21
36987: GREATEREQUAL
36988: IFFALSE 36997
// begin temp_list_3 = [ ] ;
36990: LD_ADDR_VAR 0 5
36994: PUSH
36995: EMPTY
36996: ST_TO_ADDR
// end ; if temp_list_3 > 0 then
36997: LD_VAR 0 5
37001: PUSH
37002: LD_INT 0
37004: GREATER
37005: IFFALSE 37125
// begin temp_unit = FindMaxSkill ( temp_list_3 , skill_mechanical ) ;
37007: LD_ADDR_VAR 0 6
37011: PUSH
37012: LD_VAR 0 5
37016: PPUSH
37017: LD_INT 3
37019: PPUSH
37020: CALL_OW 433
37024: ST_TO_ADDR
// temp_list_3 = temp_list_3 diff temp_unit ;
37025: LD_ADDR_VAR 0 5
37029: PUSH
37030: LD_VAR 0 5
37034: PUSH
37035: LD_VAR 0 6
37039: DIFF
37040: ST_TO_ADDR
// temp_list_2 = remote_driver_vehicles [ base ] ^ [ [ temp_unit , [ temp_list [ i ] ] ] ] ;
37041: LD_ADDR_VAR 0 14
37045: PUSH
37046: LD_VAR 0 30
37050: PUSH
37051: LD_VAR 0 12
37055: ARRAY
37056: PUSH
37057: LD_VAR 0 6
37061: PUSH
37062: LD_VAR 0 4
37066: PUSH
37067: LD_VAR 0 2
37071: ARRAY
37072: PUSH
37073: EMPTY
37074: LIST
37075: PUSH
37076: EMPTY
37077: LIST
37078: LIST
37079: PUSH
37080: EMPTY
37081: LIST
37082: ADD
37083: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list_2 ) ;
37084: LD_ADDR_VAR 0 30
37088: PUSH
37089: LD_VAR 0 30
37093: PPUSH
37094: LD_VAR 0 12
37098: PPUSH
37099: LD_VAR 0 14
37103: PPUSH
37104: CALL_OW 1
37108: ST_TO_ADDR
// i = i + 1 ;
37109: LD_ADDR_VAR 0 2
37113: PUSH
37114: LD_VAR 0 2
37118: PUSH
37119: LD_INT 1
37121: PLUS
37122: ST_TO_ADDR
// continue ;
37123: GO 36838
// end ; temp_list_4 = [ ] ;
37125: LD_ADDR_VAR 0 19
37129: PUSH
37130: EMPTY
37131: ST_TO_ADDR
// for a in remote_driver_vehicles [ base ] do
37132: LD_ADDR_VAR 0 18
37136: PUSH
37137: LD_VAR 0 30
37141: PUSH
37142: LD_VAR 0 12
37146: ARRAY
37147: PUSH
37148: FOR_IN
37149: IFFALSE 37200
// if GetSkill ( a [ 1 ] , skill_mechanical ) > a [ 2 ] then
37151: LD_VAR 0 18
37155: PUSH
37156: LD_INT 1
37158: ARRAY
37159: PPUSH
37160: LD_INT 3
37162: PPUSH
37163: CALL_OW 259
37167: PUSH
37168: LD_VAR 0 18
37172: PUSH
37173: LD_INT 2
37175: ARRAY
37176: GREATER
37177: IFFALSE 37198
// temp_list_4 = temp_list_4 ^ [ a ] ;
37179: LD_ADDR_VAR 0 19
37183: PUSH
37184: LD_VAR 0 19
37188: PUSH
37189: LD_VAR 0 18
37193: PUSH
37194: EMPTY
37195: LIST
37196: ADD
37197: ST_TO_ADDR
37198: GO 37148
37200: POP
37201: POP
// if temp_list_4 = 0 then
37202: LD_VAR 0 19
37206: PUSH
37207: LD_INT 0
37209: EQUAL
37210: IFFALSE 37214
// break ;
37212: GO 37489
// temp_list_2 = [ ] ;
37214: LD_ADDR_VAR 0 14
37218: PUSH
37219: EMPTY
37220: ST_TO_ADDR
// for a in temp_list_4 do
37221: LD_ADDR_VAR 0 18
37225: PUSH
37226: LD_VAR 0 19
37230: PUSH
37231: FOR_IN
37232: IFFALSE 37260
// temp_list_2 = temp_list_2 ^ ( a [ 2 ] + 0 ) ;
37234: LD_ADDR_VAR 0 14
37238: PUSH
37239: LD_VAR 0 14
37243: PUSH
37244: LD_VAR 0 18
37248: PUSH
37249: LD_INT 2
37251: ARRAY
37252: PUSH
37253: LD_INT 0
37255: PLUS
37256: ADD
37257: ST_TO_ADDR
37258: GO 37231
37260: POP
37261: POP
// temp_list_2 = WorstFromListByList ( temp_list_4 , temp_list_2 ) ;
37262: LD_ADDR_VAR 0 14
37266: PUSH
37267: LD_VAR 0 19
37271: PPUSH
37272: LD_VAR 0 14
37276: PPUSH
37277: CALL_OW 78
37281: ST_TO_ADDR
// for a = 1 to remote_driver_vehicles [ base ] do
37282: LD_ADDR_VAR 0 18
37286: PUSH
37287: DOUBLE
37288: LD_INT 1
37290: DEC
37291: ST_TO_ADDR
37292: LD_VAR 0 30
37296: PUSH
37297: LD_VAR 0 12
37301: ARRAY
37302: PUSH
37303: FOR_TO
37304: IFFALSE 37342
// if remote_driver_vehicles [ base ] [ a ] [ 1 ] = temp_list_2 [ 1 ] then
37306: LD_VAR 0 30
37310: PUSH
37311: LD_VAR 0 12
37315: ARRAY
37316: PUSH
37317: LD_VAR 0 18
37321: ARRAY
37322: PUSH
37323: LD_INT 1
37325: ARRAY
37326: PUSH
37327: LD_VAR 0 14
37331: PUSH
37332: LD_INT 1
37334: ARRAY
37335: EQUAL
37336: IFFALSE 37340
// break ;
37338: GO 37342
37340: GO 37303
37342: POP
37343: POP
// end ; temp_list_2 = remote_driver_vehicles [ base ] [ a ] [ 2 ] ^ temp_list [ i ] ;
37344: LD_ADDR_VAR 0 14
37348: PUSH
37349: LD_VAR 0 30
37353: PUSH
37354: LD_VAR 0 12
37358: ARRAY
37359: PUSH
37360: LD_VAR 0 18
37364: ARRAY
37365: PUSH
37366: LD_INT 2
37368: ARRAY
37369: PUSH
37370: LD_VAR 0 4
37374: PUSH
37375: LD_VAR 0 2
37379: ARRAY
37380: ADD
37381: ST_TO_ADDR
// temp_list_2 = Replace ( remote_driver_vehicles [ base ] [ a ] , 2 , temp_list_2 ) ;
37382: LD_ADDR_VAR 0 14
37386: PUSH
37387: LD_VAR 0 30
37391: PUSH
37392: LD_VAR 0 12
37396: ARRAY
37397: PUSH
37398: LD_VAR 0 18
37402: ARRAY
37403: PPUSH
37404: LD_INT 2
37406: PPUSH
37407: LD_VAR 0 14
37411: PPUSH
37412: CALL_OW 1
37416: ST_TO_ADDR
// temp_list_2 = Replace ( remote_driver_vehicles [ base ] , a , temp_list_2 ) ;
37417: LD_ADDR_VAR 0 14
37421: PUSH
37422: LD_VAR 0 30
37426: PUSH
37427: LD_VAR 0 12
37431: ARRAY
37432: PPUSH
37433: LD_VAR 0 18
37437: PPUSH
37438: LD_VAR 0 14
37442: PPUSH
37443: CALL_OW 1
37447: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list_2 ) ;
37448: LD_ADDR_VAR 0 30
37452: PUSH
37453: LD_VAR 0 30
37457: PPUSH
37458: LD_VAR 0 12
37462: PPUSH
37463: LD_VAR 0 14
37467: PPUSH
37468: CALL_OW 1
37472: ST_TO_ADDR
// i = i + 1 ;
37473: LD_ADDR_VAR 0 2
37477: PUSH
37478: LD_VAR 0 2
37482: PUSH
37483: LD_INT 1
37485: PLUS
37486: ST_TO_ADDR
// end ;
37487: GO 36838
// end ; for i in remote_driver_vehicles [ base ] do
37489: LD_ADDR_VAR 0 2
37493: PUSH
37494: LD_VAR 0 30
37498: PUSH
37499: LD_VAR 0 12
37503: ARRAY
37504: PUSH
37505: FOR_IN
37506: IFFALSE 37530
// remote_mechanics = remote_mechanics ^ i [ 1 ] ;
37508: LD_ADDR_VAR 0 15
37512: PUSH
37513: LD_VAR 0 15
37517: PUSH
37518: LD_VAR 0 2
37522: PUSH
37523: LD_INT 1
37525: ARRAY
37526: ADD
37527: ST_TO_ADDR
37528: GO 37505
37530: POP
37531: POP
// mechanics_list = mechanics_list diff remote_mechanics ;
37532: LD_ADDR_VAR 0 3
37536: PUSH
37537: LD_VAR 0 3
37541: PUSH
37542: LD_VAR 0 15
37546: DIFF
37547: ST_TO_ADDR
// remote_mechanics = remote_mechanics diff ai_heal_these_humans [ base ] ;
37548: LD_ADDR_VAR 0 15
37552: PUSH
37553: LD_VAR 0 15
37557: PUSH
37558: LD_EXP 61
37562: PUSH
37563: LD_VAR 0 12
37567: ARRAY
37568: DIFF
37569: ST_TO_ADDR
// if mechanics_list = 0 and remote_driver_vehicles [ base ] > 0 then
37570: LD_VAR 0 3
37574: PUSH
37575: LD_INT 0
37577: EQUAL
37578: PUSH
37579: LD_VAR 0 30
37583: PUSH
37584: LD_VAR 0 12
37588: ARRAY
37589: PUSH
37590: LD_INT 0
37592: GREATER
37593: AND
37594: IFFALSE 37831
// begin n = 0 ;
37596: LD_ADDR_VAR 0 17
37600: PUSH
37601: LD_INT 0
37603: ST_TO_ADDR
// a = 9999 ;
37604: LD_ADDR_VAR 0 18
37608: PUSH
37609: LD_INT 9999
37611: ST_TO_ADDR
// for i = 1 to ( remote_driver_vehicles [ base ] + 0 ) do
37612: LD_ADDR_VAR 0 2
37616: PUSH
37617: DOUBLE
37618: LD_INT 1
37620: DEC
37621: ST_TO_ADDR
37622: LD_VAR 0 30
37626: PUSH
37627: LD_VAR 0 12
37631: ARRAY
37632: PUSH
37633: LD_INT 0
37635: PLUS
37636: PUSH
37637: FOR_TO
37638: IFFALSE 37714
// begin if remote_driver_vehicles [ base ] [ i ] [ 2 ] + 0 < a then
37640: LD_VAR 0 30
37644: PUSH
37645: LD_VAR 0 12
37649: ARRAY
37650: PUSH
37651: LD_VAR 0 2
37655: ARRAY
37656: PUSH
37657: LD_INT 2
37659: ARRAY
37660: PUSH
37661: LD_INT 0
37663: PLUS
37664: PUSH
37665: LD_VAR 0 18
37669: LESS
37670: IFFALSE 37712
// begin a = remote_driver_vehicles [ base ] [ i ] [ 2 ] + 0 ;
37672: LD_ADDR_VAR 0 18
37676: PUSH
37677: LD_VAR 0 30
37681: PUSH
37682: LD_VAR 0 12
37686: ARRAY
37687: PUSH
37688: LD_VAR 0 2
37692: ARRAY
37693: PUSH
37694: LD_INT 2
37696: ARRAY
37697: PUSH
37698: LD_INT 0
37700: PLUS
37701: ST_TO_ADDR
// n = i ;
37702: LD_ADDR_VAR 0 17
37706: PUSH
37707: LD_VAR 0 2
37711: ST_TO_ADDR
// end ; end ;
37712: GO 37637
37714: POP
37715: POP
// mechanics_list = mechanics_list ^ remote_driver_vehicles [ base ] [ n ] [ 1 ] ;
37716: LD_ADDR_VAR 0 3
37720: PUSH
37721: LD_VAR 0 3
37725: PUSH
37726: LD_VAR 0 30
37730: PUSH
37731: LD_VAR 0 12
37735: ARRAY
37736: PUSH
37737: LD_VAR 0 17
37741: ARRAY
37742: PUSH
37743: LD_INT 1
37745: ARRAY
37746: ADD
37747: ST_TO_ADDR
// remote_mechanics = remote_mechanics diff remote_driver_vehicles [ base ] [ n ] [ 1 ] ;
37748: LD_ADDR_VAR 0 15
37752: PUSH
37753: LD_VAR 0 15
37757: PUSH
37758: LD_VAR 0 30
37762: PUSH
37763: LD_VAR 0 12
37767: ARRAY
37768: PUSH
37769: LD_VAR 0 17
37773: ARRAY
37774: PUSH
37775: LD_INT 1
37777: ARRAY
37778: DIFF
37779: ST_TO_ADDR
// temp_list_2 = Delete ( remote_driver_vehicles [ base ] , n ) ;
37780: LD_ADDR_VAR 0 14
37784: PUSH
37785: LD_VAR 0 30
37789: PUSH
37790: LD_VAR 0 12
37794: ARRAY
37795: PPUSH
37796: LD_VAR 0 17
37800: PPUSH
37801: CALL_OW 3
37805: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list_2 ) ;
37806: LD_ADDR_VAR 0 30
37810: PUSH
37811: LD_VAR 0 30
37815: PPUSH
37816: LD_VAR 0 12
37820: PPUSH
37821: LD_VAR 0 14
37825: PPUSH
37826: CALL_OW 1
37830: ST_TO_ADDR
// end ; end else
37831: GO 37855
// begin remote_driver_vehicles = Replace ( remote_driver_vehicles , base , [ ] ) ;
37833: LD_ADDR_VAR 0 30
37837: PUSH
37838: LD_VAR 0 30
37842: PPUSH
37843: LD_VAR 0 12
37847: PPUSH
37848: EMPTY
37849: PPUSH
37850: CALL_OW 1
37854: ST_TO_ADDR
// end ; temp_list = [ ] ;
37855: LD_ADDR_VAR 0 4
37859: PUSH
37860: EMPTY
37861: ST_TO_ADDR
// for i in ai_vehicles_being_repaired [ base ] do
37862: LD_ADDR_VAR 0 2
37866: PUSH
37867: LD_EXP 56
37871: PUSH
37872: LD_VAR 0 12
37876: ARRAY
37877: PUSH
37878: FOR_IN
37879: IFFALSE 37914
// if GetLives ( i ) < 1000 then
37881: LD_VAR 0 2
37885: PPUSH
37886: CALL_OW 256
37890: PUSH
37891: LD_INT 1000
37893: LESS
37894: IFFALSE 37912
// temp_list = temp_list ^ i ;
37896: LD_ADDR_VAR 0 4
37900: PUSH
37901: LD_VAR 0 4
37905: PUSH
37906: LD_VAR 0 2
37910: ADD
37911: ST_TO_ADDR
37912: GO 37878
37914: POP
37915: POP
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
37916: LD_ADDR_EXP 56
37920: PUSH
37921: LD_EXP 56
37925: PPUSH
37926: LD_VAR 0 12
37930: PPUSH
37931: LD_VAR 0 4
37935: PPUSH
37936: CALL_OW 1
37940: ST_TO_ADDR
// temp_list = [ ] ;
37941: LD_ADDR_VAR 0 4
37945: PUSH
37946: EMPTY
37947: ST_TO_ADDR
// for i in ai_retreating_vehicles_defend [ base ] do
37948: LD_ADDR_VAR 0 2
37952: PUSH
37953: LD_EXP 55
37957: PUSH
37958: LD_VAR 0 12
37962: ARRAY
37963: PUSH
37964: FOR_IN
37965: IFFALSE 38000
// if GetLives ( i ) < 1000 then
37967: LD_VAR 0 2
37971: PPUSH
37972: CALL_OW 256
37976: PUSH
37977: LD_INT 1000
37979: LESS
37980: IFFALSE 37998
// temp_list = temp_list ^ i ;
37982: LD_ADDR_VAR 0 4
37986: PUSH
37987: LD_VAR 0 4
37991: PUSH
37992: LD_VAR 0 2
37996: ADD
37997: ST_TO_ADDR
37998: GO 37964
38000: POP
38001: POP
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
38002: LD_ADDR_EXP 55
38006: PUSH
38007: LD_EXP 55
38011: PPUSH
38012: LD_VAR 0 12
38016: PPUSH
38017: LD_VAR 0 4
38021: PPUSH
38022: CALL_OW 1
38026: ST_TO_ADDR
// temp_list = ai_retreating_vehicles_defend [ base ] ;
38027: LD_ADDR_VAR 0 4
38031: PUSH
38032: LD_EXP 55
38036: PUSH
38037: LD_VAR 0 12
38041: ARRAY
38042: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] diff ai_retreating_vehicles_defend [ base ] do
38043: LD_ADDR_VAR 0 2
38047: PUSH
38048: LD_EXP 53
38052: PUSH
38053: LD_VAR 0 12
38057: ARRAY
38058: PUSH
38059: LD_EXP 55
38063: PUSH
38064: LD_VAR 0 12
38068: ARRAY
38069: DIFF
38070: PUSH
38071: FOR_IN
38072: IFFALSE 38107
// if GetLives ( i ) <= 250 then
38074: LD_VAR 0 2
38078: PPUSH
38079: CALL_OW 256
38083: PUSH
38084: LD_INT 250
38086: LESSEQUAL
38087: IFFALSE 38105
// temp_list = temp_list ^ i ;
38089: LD_ADDR_VAR 0 4
38093: PUSH
38094: LD_VAR 0 4
38098: PUSH
38099: LD_VAR 0 2
38103: ADD
38104: ST_TO_ADDR
38105: GO 38071
38107: POP
38108: POP
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
38109: LD_ADDR_EXP 55
38113: PUSH
38114: LD_EXP 55
38118: PPUSH
38119: LD_VAR 0 12
38123: PPUSH
38124: LD_VAR 0 4
38128: PPUSH
38129: CALL_OW 1
38133: ST_TO_ADDR
// if not under_attack then
38134: LD_VAR 0 9
38138: NOT
38139: IFFALSE 38277
// begin temp_list = [ ] ;
38141: LD_ADDR_VAR 0 4
38145: PUSH
38146: EMPTY
38147: 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
38148: LD_ADDR_VAR 0 2
38152: PUSH
38153: LD_EXP 57
38157: PUSH
38158: LD_VAR 0 12
38162: ARRAY
38163: PUSH
38164: LD_EXP 55
38168: PUSH
38169: LD_VAR 0 12
38173: ARRAY
38174: PUSH
38175: LD_EXP 56
38179: PUSH
38180: LD_VAR 0 12
38184: ARRAY
38185: ADD
38186: PUSH
38187: LD_EXP 64
38191: PUSH
38192: LD_VAR 0 12
38196: ARRAY
38197: ADD
38198: PUSH
38199: LD_EXP 65
38203: PUSH
38204: LD_VAR 0 12
38208: ARRAY
38209: ADD
38210: DIFF
38211: PUSH
38212: FOR_IN
38213: IFFALSE 38248
// if GetFuel ( i ) < 95 then
38215: LD_VAR 0 2
38219: PPUSH
38220: CALL_OW 261
38224: PUSH
38225: LD_INT 95
38227: LESS
38228: IFFALSE 38246
// temp_list = temp_list ^ i ;
38230: LD_ADDR_VAR 0 4
38234: PUSH
38235: LD_VAR 0 4
38239: PUSH
38240: LD_VAR 0 2
38244: ADD
38245: ST_TO_ADDR
38246: GO 38212
38248: POP
38249: POP
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
38250: LD_ADDR_EXP 57
38254: PUSH
38255: LD_EXP 57
38259: PPUSH
38260: LD_VAR 0 12
38264: PPUSH
38265: LD_VAR 0 4
38269: PPUSH
38270: CALL_OW 1
38274: ST_TO_ADDR
// end else
38275: GO 38299
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , [ ] ) ;
38277: LD_ADDR_EXP 57
38281: PUSH
38282: LD_EXP 57
38286: PPUSH
38287: LD_VAR 0 12
38291: PPUSH
38292: EMPTY
38293: PPUSH
38294: CALL_OW 1
38298: ST_TO_ADDR
// vehicles_to_consider = ai_vehicles_defend [ base ] ^ ai_control_tower_vehicles [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] ;
38299: LD_ADDR_VAR 0 25
38303: PUSH
38304: LD_EXP 53
38308: PUSH
38309: LD_VAR 0 12
38313: ARRAY
38314: PUSH
38315: LD_EXP 81
38319: PUSH
38320: LD_VAR 0 12
38324: ARRAY
38325: ADD
38326: PUSH
38327: LD_EXP 86
38331: PUSH
38332: LD_VAR 0 12
38336: ARRAY
38337: ADD
38338: PUSH
38339: LD_EXP 87
38343: PUSH
38344: LD_VAR 0 12
38348: ARRAY
38349: ADD
38350: ST_TO_ADDR
// if under_attack then
38351: LD_VAR 0 9
38355: IFFALSE 38806
// 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 ] ) ;
38357: LD_ADDR_VAR 0 7
38361: PUSH
38362: LD_EXP 53
38366: PUSH
38367: LD_VAR 0 12
38371: ARRAY
38372: PUSH
38373: LD_EXP 57
38377: PUSH
38378: LD_VAR 0 12
38382: ARRAY
38383: PUSH
38384: LD_EXP 55
38388: PUSH
38389: LD_VAR 0 12
38393: ARRAY
38394: ADD
38395: PUSH
38396: LD_EXP 56
38400: PUSH
38401: LD_VAR 0 12
38405: ARRAY
38406: ADD
38407: PUSH
38408: LD_EXP 65
38412: PUSH
38413: LD_VAR 0 12
38417: ARRAY
38418: ADD
38419: PUSH
38420: LD_EXP 64
38424: PUSH
38425: LD_VAR 0 12
38429: ARRAY
38430: ADD
38431: DIFF
38432: ST_TO_ADDR
// temp_list = UnitFilter ( vehicles_list , [ [ f_control , control_manual ] , [ f_ok ] , [ f_empty ] , [ f_inarea , area ] ] ) ;
38433: LD_ADDR_VAR 0 4
38437: PUSH
38438: LD_VAR 0 7
38442: PPUSH
38443: LD_INT 33
38445: PUSH
38446: LD_INT 1
38448: PUSH
38449: EMPTY
38450: LIST
38451: LIST
38452: PUSH
38453: LD_INT 50
38455: PUSH
38456: EMPTY
38457: LIST
38458: PUSH
38459: LD_INT 58
38461: PUSH
38462: EMPTY
38463: LIST
38464: PUSH
38465: LD_INT 95
38467: PUSH
38468: LD_VAR 0 13
38472: PUSH
38473: EMPTY
38474: LIST
38475: LIST
38476: PUSH
38477: EMPTY
38478: LIST
38479: LIST
38480: LIST
38481: LIST
38482: PPUSH
38483: CALL_OW 72
38487: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
38488: LD_ADDR_VAR 0 4
38492: PUSH
38493: LD_VAR 0 4
38497: PPUSH
38498: LD_VAR 0 3
38502: PPUSH
38503: LD_VAR 0 29
38507: PPUSH
38508: CALL 43907 0 3
38512: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
38513: LD_ADDR_VAR 0 3
38517: PUSH
38518: LD_VAR 0 4
38522: PUSH
38523: LD_INT 1
38525: ARRAY
38526: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
38527: LD_ADDR_VAR 0 29
38531: PUSH
38532: LD_VAR 0 4
38536: PUSH
38537: LD_INT 2
38539: ARRAY
38540: ST_TO_ADDR
// case base of 1 :
38541: LD_VAR 0 12
38545: PUSH
38546: LD_INT 1
38548: DOUBLE
38549: EQUAL
38550: IFTRUE 38554
38552: GO 38598
38554: POP
// temp_list = DangerousUnits ( FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , le_vehicle_defend_area ] ] ) ) ; 2 :
38555: LD_ADDR_VAR 0 4
38559: PUSH
38560: LD_INT 81
38562: PUSH
38563: LD_VAR 0 1
38567: PUSH
38568: EMPTY
38569: LIST
38570: LIST
38571: PUSH
38572: LD_INT 95
38574: PUSH
38575: LD_INT 8
38577: PUSH
38578: EMPTY
38579: LIST
38580: LIST
38581: PUSH
38582: EMPTY
38583: LIST
38584: LIST
38585: PPUSH
38586: CALL_OW 69
38590: PPUSH
38591: CALL 83864 0 1
38595: ST_TO_ADDR
38596: GO 38652
38598: LD_INT 2
38600: DOUBLE
38601: EQUAL
38602: IFTRUE 38606
38604: GO 38651
38606: POP
// temp_list = DangerousUnits ( ListFilterNearArea ( FilterAllUnits ( [ f_enemy , side ] ) , area , ai_near_base_dist ) ) ; end ;
38607: LD_ADDR_VAR 0 4
38611: PUSH
38612: LD_INT 81
38614: PUSH
38615: LD_VAR 0 1
38619: PUSH
38620: EMPTY
38621: LIST
38622: LIST
38623: PPUSH
38624: CALL_OW 69
38628: PPUSH
38629: LD_VAR 0 13
38633: PPUSH
38634: LD_EXP 68
38638: PPUSH
38639: CALL 33666 0 3
38643: PPUSH
38644: CALL 83864 0 1
38648: ST_TO_ADDR
38649: GO 38652
38651: POP
// if temp_list > 0 then
38652: LD_VAR 0 4
38656: PUSH
38657: LD_INT 0
38659: GREATER
38660: IFFALSE 38713
// ComAgressiveMove ( vehicles_list ^ ai_behemoths [ base ] , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) else
38662: LD_VAR 0 7
38666: PUSH
38667: LD_EXP 89
38671: PUSH
38672: LD_VAR 0 12
38676: ARRAY
38677: ADD
38678: PPUSH
38679: LD_VAR 0 4
38683: PUSH
38684: LD_INT 1
38686: ARRAY
38687: PPUSH
38688: CALL_OW 250
38692: PPUSH
38693: LD_VAR 0 4
38697: PUSH
38698: LD_INT 1
38700: ARRAY
38701: PPUSH
38702: CALL_OW 251
38706: PPUSH
38707: CALL_OW 114
38711: GO 38804
// begin temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , area ] ] ) ;
38713: LD_ADDR_VAR 0 4
38717: PUSH
38718: LD_INT 81
38720: PUSH
38721: LD_VAR 0 1
38725: PUSH
38726: EMPTY
38727: LIST
38728: LIST
38729: PUSH
38730: LD_INT 95
38732: PUSH
38733: LD_VAR 0 13
38737: PUSH
38738: EMPTY
38739: LIST
38740: LIST
38741: PUSH
38742: EMPTY
38743: LIST
38744: LIST
38745: PPUSH
38746: CALL_OW 69
38750: ST_TO_ADDR
// if temp_list > 0 then
38751: LD_VAR 0 4
38755: PUSH
38756: LD_INT 0
38758: GREATER
38759: IFFALSE 38804
// begin temp_list_2 = DangerousUnits ( temp_list ) ;
38761: LD_ADDR_VAR 0 14
38765: PUSH
38766: LD_VAR 0 4
38770: PPUSH
38771: CALL 83864 0 1
38775: ST_TO_ADDR
// if temp_list_2 = 0 then
38776: LD_VAR 0 14
38780: PUSH
38781: LD_INT 0
38783: EQUAL
38784: IFFALSE 38804
// ComAttackUnit ( vehicles_list , temp_list [ 1 ] ) ;
38786: LD_VAR 0 7
38790: PPUSH
38791: LD_VAR 0 4
38795: PUSH
38796: LD_INT 1
38798: ARRAY
38799: PPUSH
38800: CALL_OW 115
// end ; end ; end else
38804: GO 39385
// begin if IsOk ( ai_depot [ base ] ) then
38806: LD_EXP 36
38810: PUSH
38811: LD_VAR 0 12
38815: ARRAY
38816: PPUSH
38817: CALL_OW 302
38821: IFFALSE 39230
// begin temp_list = ai_refuel_vehicles_list [ base ] ;
38823: LD_ADDR_VAR 0 4
38827: PUSH
38828: LD_EXP 57
38832: PUSH
38833: LD_VAR 0 12
38837: ARRAY
38838: ST_TO_ADDR
// for i in vehicles_to_consider diff ai_refuel_vehicles_list [ base ] do
38839: LD_ADDR_VAR 0 2
38843: PUSH
38844: LD_VAR 0 25
38848: PUSH
38849: LD_EXP 57
38853: PUSH
38854: LD_VAR 0 12
38858: ARRAY
38859: DIFF
38860: PUSH
38861: FOR_IN
38862: IFFALSE 38912
// if GetFuel ( i ) < 70 and GetEngine ( i ) = engine_combustion then
38864: LD_VAR 0 2
38868: PPUSH
38869: CALL_OW 261
38873: PUSH
38874: LD_INT 70
38876: LESS
38877: PUSH
38878: LD_VAR 0 2
38882: PPUSH
38883: CALL_OW 262
38887: PUSH
38888: LD_INT 1
38890: EQUAL
38891: AND
38892: IFFALSE 38910
// temp_list = temp_list ^ i ;
38894: LD_ADDR_VAR 0 4
38898: PUSH
38899: LD_VAR 0 4
38903: PUSH
38904: LD_VAR 0 2
38908: ADD
38909: ST_TO_ADDR
38910: GO 38861
38912: POP
38913: 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 ] ) ;
38914: LD_ADDR_VAR 0 4
38918: PUSH
38919: LD_VAR 0 4
38923: PUSH
38924: LD_EXP 55
38928: PUSH
38929: LD_VAR 0 12
38933: ARRAY
38934: PUSH
38935: LD_EXP 56
38939: PUSH
38940: LD_VAR 0 12
38944: ARRAY
38945: ADD
38946: PUSH
38947: LD_EXP 64
38951: PUSH
38952: LD_VAR 0 12
38956: ARRAY
38957: ADD
38958: PUSH
38959: LD_EXP 65
38963: PUSH
38964: LD_VAR 0 12
38968: ARRAY
38969: ADD
38970: DIFF
38971: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
38972: LD_ADDR_EXP 57
38976: PUSH
38977: LD_EXP 57
38981: PPUSH
38982: LD_VAR 0 12
38986: PPUSH
38987: LD_VAR 0 4
38991: PPUSH
38992: CALL_OW 1
38996: 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 ] ;
38997: LD_ADDR_VAR 0 4
39001: PUSH
39002: LD_EXP 57
39006: PUSH
39007: LD_VAR 0 12
39011: ARRAY
39012: PPUSH
39013: LD_INT 33
39015: PUSH
39016: LD_INT 1
39018: PUSH
39019: EMPTY
39020: LIST
39021: LIST
39022: PUSH
39023: LD_INT 58
39025: PUSH
39026: EMPTY
39027: LIST
39028: PUSH
39029: LD_INT 50
39031: PUSH
39032: EMPTY
39033: LIST
39034: PUSH
39035: EMPTY
39036: LIST
39037: LIST
39038: LIST
39039: PPUSH
39040: CALL_OW 72
39044: PUSH
39045: LD_EXP 81
39049: PUSH
39050: LD_VAR 0 12
39054: ARRAY
39055: DIFF
39056: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
39057: LD_ADDR_VAR 0 4
39061: PUSH
39062: LD_VAR 0 4
39066: PPUSH
39067: LD_VAR 0 3
39071: PPUSH
39072: LD_VAR 0 29
39076: PPUSH
39077: CALL 43907 0 3
39081: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
39082: LD_ADDR_VAR 0 3
39086: PUSH
39087: LD_VAR 0 4
39091: PUSH
39092: LD_INT 1
39094: ARRAY
39095: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
39096: LD_ADDR_VAR 0 29
39100: PUSH
39101: LD_VAR 0 4
39105: PUSH
39106: LD_INT 2
39108: ARRAY
39109: ST_TO_ADDR
// for i in ai_refuel_vehicles_list [ base ] do
39110: LD_ADDR_VAR 0 2
39114: PUSH
39115: LD_EXP 57
39119: PUSH
39120: LD_VAR 0 12
39124: ARRAY
39125: PUSH
39126: FOR_IN
39127: IFFALSE 39228
// begin if IsInArea ( i , area ) then
39129: LD_VAR 0 2
39133: PPUSH
39134: LD_VAR 0 13
39138: PPUSH
39139: CALL_OW 308
39143: IFFALSE 39187
// begin ComMoveUnit ( i , ai_depot [ base ] ) ;
39145: LD_VAR 0 2
39149: PPUSH
39150: LD_EXP 36
39154: PUSH
39155: LD_VAR 0 12
39159: ARRAY
39160: PPUSH
39161: CALL_OW 112
// AddComRefuel ( i , ai_depot [ base ] ) ;
39165: LD_VAR 0 2
39169: PPUSH
39170: LD_EXP 36
39174: PUSH
39175: LD_VAR 0 12
39179: ARRAY
39180: PPUSH
39181: CALL_OW 210
// end else
39185: GO 39226
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
39187: LD_VAR 0 2
39191: PPUSH
39192: LD_EXP 59
39196: PUSH
39197: LD_VAR 0 12
39201: ARRAY
39202: PUSH
39203: LD_INT 1
39205: ARRAY
39206: PPUSH
39207: LD_EXP 59
39211: PUSH
39212: LD_VAR 0 12
39216: ARRAY
39217: PUSH
39218: LD_INT 2
39220: ARRAY
39221: PPUSH
39222: CALL_OW 114
// end ;
39226: GO 39126
39228: POP
39229: 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
39230: LD_ADDR_VAR 0 2
39234: PUSH
39235: LD_VAR 0 25
39239: PPUSH
39240: LD_INT 3
39242: PUSH
39243: LD_INT 33
39245: PUSH
39246: LD_INT 1
39248: PUSH
39249: EMPTY
39250: LIST
39251: LIST
39252: PUSH
39253: EMPTY
39254: LIST
39255: LIST
39256: PPUSH
39257: CALL_OW 72
39261: PUSH
39262: LD_EXP 57
39266: PUSH
39267: LD_VAR 0 12
39271: ARRAY
39272: PUSH
39273: LD_EXP 55
39277: PUSH
39278: LD_VAR 0 12
39282: ARRAY
39283: ADD
39284: PUSH
39285: LD_EXP 56
39289: PUSH
39290: LD_VAR 0 12
39294: ARRAY
39295: ADD
39296: PUSH
39297: LD_EXP 64
39301: PUSH
39302: LD_VAR 0 12
39306: ARRAY
39307: ADD
39308: PUSH
39309: LD_EXP 65
39313: PUSH
39314: LD_VAR 0 12
39318: ARRAY
39319: ADD
39320: DIFF
39321: PUSH
39322: FOR_IN
39323: IFFALSE 39383
// if not IsInArea ( i , area ) then
39325: LD_VAR 0 2
39329: PPUSH
39330: LD_VAR 0 13
39334: PPUSH
39335: CALL_OW 308
39339: NOT
39340: IFFALSE 39381
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
39342: LD_VAR 0 2
39346: PPUSH
39347: LD_EXP 59
39351: PUSH
39352: LD_VAR 0 12
39356: ARRAY
39357: PUSH
39358: LD_INT 1
39360: ARRAY
39361: PPUSH
39362: LD_EXP 59
39366: PUSH
39367: LD_VAR 0 12
39371: ARRAY
39372: PUSH
39373: LD_INT 2
39375: ARRAY
39376: PPUSH
39377: CALL_OW 114
39381: GO 39322
39383: POP
39384: POP
// end ; free_parking_spots = [ ] ;
39385: LD_ADDR_VAR 0 10
39389: PUSH
39390: EMPTY
39391: ST_TO_ADDR
// parked_vehicles = [ ] ;
39392: LD_ADDR_VAR 0 16
39396: PUSH
39397: EMPTY
39398: ST_TO_ADDR
// vehicles_allowed_to_park = UnitFilter ( vehicles_to_consider , [ f_control , control_manual ] ) ;
39399: LD_ADDR_VAR 0 26
39403: PUSH
39404: LD_VAR 0 25
39408: PPUSH
39409: LD_INT 33
39411: PUSH
39412: LD_INT 1
39414: PUSH
39415: EMPTY
39416: LIST
39417: LIST
39418: PPUSH
39419: CALL_OW 72
39423: ST_TO_ADDR
// case ( vehicles_to_consider diff vehicles_allowed_to_park ) + 0 of 0 .. 1 :
39424: LD_VAR 0 25
39428: PUSH
39429: LD_VAR 0 26
39433: DIFF
39434: PUSH
39435: LD_INT 0
39437: PLUS
39438: PUSH
39439: LD_INT 0
39441: DOUBLE
39442: GREATEREQUAL
39443: IFFALSE 39451
39445: LD_INT 1
39447: DOUBLE
39448: LESSEQUAL
39449: IFTRUE 39453
39451: GO 39464
39453: POP
// human_pullback_hex_max_dist = 4 ; 2 :
39454: LD_ADDR_VAR 0 27
39458: PUSH
39459: LD_INT 4
39461: ST_TO_ADDR
39462: GO 39517
39464: LD_INT 2
39466: DOUBLE
39467: EQUAL
39468: IFTRUE 39472
39470: GO 39483
39472: POP
// human_pullback_hex_max_dist = 5 ; 3 .. 4 :
39473: LD_ADDR_VAR 0 27
39477: PUSH
39478: LD_INT 5
39480: ST_TO_ADDR
39481: GO 39517
39483: LD_INT 3
39485: DOUBLE
39486: GREATEREQUAL
39487: IFFALSE 39495
39489: LD_INT 4
39491: DOUBLE
39492: LESSEQUAL
39493: IFTRUE 39497
39495: GO 39508
39497: POP
// human_pullback_hex_max_dist = 6 ; else
39498: LD_ADDR_VAR 0 27
39502: PUSH
39503: LD_INT 6
39505: ST_TO_ADDR
39506: GO 39517
39508: POP
// human_pullback_hex_max_dist = 7 ; end ;
39509: LD_ADDR_VAR 0 27
39513: PUSH
39514: LD_INT 7
39516: ST_TO_ADDR
// for i in ai_vehicle_pullback_hexes [ base ] do
39517: LD_ADDR_VAR 0 2
39521: PUSH
39522: LD_EXP 58
39526: PUSH
39527: LD_VAR 0 12
39531: ARRAY
39532: PUSH
39533: FOR_IN
39534: IFFALSE 39720
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
39536: LD_ADDR_VAR 0 6
39540: PUSH
39541: LD_VAR 0 2
39545: PUSH
39546: LD_INT 1
39548: ARRAY
39549: PPUSH
39550: LD_VAR 0 2
39554: PUSH
39555: LD_INT 2
39557: ARRAY
39558: PPUSH
39559: CALL_OW 428
39563: ST_TO_ADDR
// if temp_unit in vehicles_allowed_to_park then
39564: LD_VAR 0 6
39568: PUSH
39569: LD_VAR 0 26
39573: IN
39574: IFFALSE 39594
// begin parked_vehicles = parked_vehicles ^ temp_unit ;
39576: LD_ADDR_VAR 0 16
39580: PUSH
39581: LD_VAR 0 16
39585: PUSH
39586: LD_VAR 0 6
39590: ADD
39591: ST_TO_ADDR
// end else
39592: GO 39718
// 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
39594: LD_VAR 0 6
39598: PUSH
39599: LD_INT 0
39601: EQUAL
39602: PUSH
39603: LD_VAR 0 6
39607: PPUSH
39608: CALL_OW 247
39612: PUSH
39613: LD_INT 3
39615: EQUAL
39616: PUSH
39617: LD_VAR 0 6
39621: PPUSH
39622: CALL_OW 247
39626: PUSH
39627: LD_INT 2
39629: EQUAL
39630: PUSH
39631: LD_VAR 0 6
39635: PPUSH
39636: CALL_OW 263
39640: PUSH
39641: LD_INT 1
39643: EQUAL
39644: PUSH
39645: LD_VAR 0 6
39649: PPUSH
39650: CALL_OW 311
39654: PUSH
39655: LD_INT 0
39657: EQUAL
39658: AND
39659: PUSH
39660: LD_VAR 0 6
39664: PPUSH
39665: CALL_OW 263
39669: PUSH
39670: LD_INT 2
39672: EQUAL
39673: PUSH
39674: LD_VAR 0 6
39678: PPUSH
39679: CALL_OW 312
39683: PUSH
39684: LD_INT 0
39686: EQUAL
39687: AND
39688: OR
39689: AND
39690: OR
39691: NOT
39692: OR
39693: IFFALSE 39718
// free_parking_spots = Insert ( free_parking_spots , 1 , i ) ;
39695: LD_ADDR_VAR 0 10
39699: PUSH
39700: LD_VAR 0 10
39704: PPUSH
39705: LD_INT 1
39707: PPUSH
39708: LD_VAR 0 2
39712: PPUSH
39713: CALL_OW 2
39717: ST_TO_ADDR
// end ;
39718: GO 39533
39720: POP
39721: POP
// if under_attack then
39722: LD_VAR 0 9
39726: IFFALSE 40313
// begin vehicles_to_park = ( ai_vehicles_being_repaired [ base ] union ai_retreating_vehicles_defend [ base ] ) isect vehicles_allowed_to_park ;
39728: LD_ADDR_VAR 0 28
39732: PUSH
39733: LD_EXP 56
39737: PUSH
39738: LD_VAR 0 12
39742: ARRAY
39743: PUSH
39744: LD_EXP 55
39748: PUSH
39749: LD_VAR 0 12
39753: ARRAY
39754: UNION
39755: PUSH
39756: LD_VAR 0 26
39760: ISECT
39761: ST_TO_ADDR
// vehicles_to_park = UnitFilter ( vehicles_to_park diff parked_vehicles , [ f_ok ] ) ;
39762: LD_ADDR_VAR 0 28
39766: PUSH
39767: LD_VAR 0 28
39771: PUSH
39772: LD_VAR 0 16
39776: DIFF
39777: PPUSH
39778: LD_INT 50
39780: PUSH
39781: EMPTY
39782: LIST
39783: PPUSH
39784: CALL_OW 72
39788: 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 ] ) ;
39789: LD_ADDR_VAR 0 28
39793: PUSH
39794: LD_VAR 0 28
39798: PUSH
39799: LD_EXP 81
39803: PUSH
39804: LD_VAR 0 12
39808: ARRAY
39809: PUSH
39810: LD_VAR 0 16
39814: PUSH
39815: LD_EXP 57
39819: PUSH
39820: LD_VAR 0 12
39824: ARRAY
39825: ADD
39826: PUSH
39827: LD_EXP 65
39831: PUSH
39832: LD_VAR 0 12
39836: ARRAY
39837: ADD
39838: PUSH
39839: LD_EXP 64
39843: PUSH
39844: LD_VAR 0 12
39848: ARRAY
39849: ADD
39850: DIFF
39851: PPUSH
39852: LD_INT 50
39854: PUSH
39855: EMPTY
39856: LIST
39857: PPUSH
39858: CALL_OW 72
39862: UNION
39863: ST_TO_ADDR
// temp_list = [ ] ;
39864: LD_ADDR_VAR 0 4
39868: PUSH
39869: EMPTY
39870: ST_TO_ADDR
// temp_list_3 = ( ai_vehicles_being_repaired [ base ] union ai_retreating_vehicles_defend [ base ] ) isect parked_vehicles ;
39871: LD_ADDR_VAR 0 5
39875: PUSH
39876: LD_EXP 56
39880: PUSH
39881: LD_VAR 0 12
39885: ARRAY
39886: PUSH
39887: LD_EXP 55
39891: PUSH
39892: LD_VAR 0 12
39896: ARRAY
39897: UNION
39898: PUSH
39899: LD_VAR 0 16
39903: ISECT
39904: ST_TO_ADDR
// temp_list_3 = UnitFilter ( temp_list_3 , [ f_ok ] ) diff ai_control_tower_vehicles [ base ] ;
39905: LD_ADDR_VAR 0 5
39909: PUSH
39910: LD_VAR 0 5
39914: PPUSH
39915: LD_INT 50
39917: PUSH
39918: EMPTY
39919: LIST
39920: PPUSH
39921: CALL_OW 72
39925: PUSH
39926: LD_EXP 81
39930: PUSH
39931: LD_VAR 0 12
39935: ARRAY
39936: DIFF
39937: ST_TO_ADDR
// for i in temp_list_3 do
39938: LD_ADDR_VAR 0 2
39942: PUSH
39943: LD_VAR 0 5
39947: PUSH
39948: FOR_IN
39949: IFFALSE 40006
// if UnitShoot ( i ) > 0 then
39951: LD_VAR 0 2
39955: PPUSH
39956: CALL_OW 504
39960: PUSH
39961: LD_INT 0
39963: GREATER
39964: IFFALSE 40004
// if GetSide ( UnitShoot ( i ) ) <> side then
39966: LD_VAR 0 2
39970: PPUSH
39971: CALL_OW 504
39975: PPUSH
39976: CALL_OW 255
39980: PUSH
39981: LD_VAR 0 1
39985: NONEQUAL
39986: IFFALSE 40004
// temp_list = temp_list ^ i ;
39988: LD_ADDR_VAR 0 4
39992: PUSH
39993: LD_VAR 0 4
39997: PUSH
39998: LD_VAR 0 2
40002: ADD
40003: ST_TO_ADDR
40004: GO 39948
40006: POP
40007: POP
// for i in ai_mechanics_defend [ base ] do
40008: LD_ADDR_VAR 0 2
40012: PUSH
40013: LD_EXP 30
40017: PUSH
40018: LD_VAR 0 12
40022: ARRAY
40023: PUSH
40024: FOR_IN
40025: IFFALSE 40103
// if UnitShoot ( i ) > 0 then
40027: LD_VAR 0 2
40031: PPUSH
40032: CALL_OW 504
40036: PUSH
40037: LD_INT 0
40039: GREATER
40040: IFFALSE 40101
// if GetSide ( UnitShoot ( i ) ) <> side then
40042: LD_VAR 0 2
40046: PPUSH
40047: CALL_OW 504
40051: PPUSH
40052: CALL_OW 255
40056: PUSH
40057: LD_VAR 0 1
40061: NONEQUAL
40062: IFFALSE 40101
// temp_list = temp_list union UnitFilter ( temp_list_3 , [ f_dist , i , 5 ] ) ;
40064: LD_ADDR_VAR 0 4
40068: PUSH
40069: LD_VAR 0 4
40073: PUSH
40074: LD_VAR 0 5
40078: PPUSH
40079: LD_INT 91
40081: PUSH
40082: LD_VAR 0 2
40086: PUSH
40087: LD_INT 5
40089: PUSH
40090: EMPTY
40091: LIST
40092: LIST
40093: LIST
40094: PPUSH
40095: CALL_OW 72
40099: UNION
40100: ST_TO_ADDR
40101: GO 40024
40103: POP
40104: POP
// for i in temp_list_3 diff temp_list do
40105: LD_ADDR_VAR 0 2
40109: PUSH
40110: LD_VAR 0 5
40114: PUSH
40115: LD_VAR 0 4
40119: DIFF
40120: PUSH
40121: FOR_IN
40122: IFFALSE 40203
// begin if not i in ( ai_refuel_vehicles_list [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) then
40124: LD_VAR 0 2
40128: PUSH
40129: LD_EXP 57
40133: PUSH
40134: LD_VAR 0 12
40138: ARRAY
40139: PUSH
40140: LD_EXP 64
40144: PUSH
40145: LD_VAR 0 12
40149: ARRAY
40150: ADD
40151: PUSH
40152: LD_EXP 65
40156: PUSH
40157: LD_VAR 0 12
40161: ARRAY
40162: ADD
40163: IN
40164: NOT
40165: IFFALSE 40201
// begin k = IsDrivenBy ( i ) ;
40167: LD_ADDR_VAR 0 11
40171: PUSH
40172: LD_VAR 0 2
40176: PPUSH
40177: CALL_OW 311
40181: ST_TO_ADDR
// if k > 0 then
40182: LD_VAR 0 11
40186: PUSH
40187: LD_INT 0
40189: GREATER
40190: IFFALSE 40201
// ComExitVehicle ( k ) ;
40192: LD_VAR 0 11
40196: PPUSH
40197: CALL_OW 121
// end ; end ;
40201: GO 40121
40203: POP
40204: POP
// temp_list = UnitFilter ( temp_list ^ vehicles_to_park , [ [ f_control , control_manual ] , [ f_empty ] ] ) diff ai_control_tower_vehicles [ base ] ;
40205: LD_ADDR_VAR 0 4
40209: PUSH
40210: LD_VAR 0 4
40214: PUSH
40215: LD_VAR 0 28
40219: ADD
40220: PPUSH
40221: LD_INT 33
40223: PUSH
40224: LD_INT 1
40226: PUSH
40227: EMPTY
40228: LIST
40229: LIST
40230: PUSH
40231: LD_INT 58
40233: PUSH
40234: EMPTY
40235: LIST
40236: PUSH
40237: EMPTY
40238: LIST
40239: LIST
40240: PPUSH
40241: CALL_OW 72
40245: PUSH
40246: LD_EXP 81
40250: PUSH
40251: LD_VAR 0 12
40255: ARRAY
40256: DIFF
40257: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
40258: LD_ADDR_VAR 0 4
40262: PUSH
40263: LD_VAR 0 4
40267: PPUSH
40268: LD_VAR 0 3
40272: PPUSH
40273: LD_VAR 0 29
40277: PPUSH
40278: CALL 43907 0 3
40282: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
40283: LD_ADDR_VAR 0 3
40287: PUSH
40288: LD_VAR 0 4
40292: PUSH
40293: LD_INT 1
40295: ARRAY
40296: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
40297: LD_ADDR_VAR 0 29
40301: PUSH
40302: LD_VAR 0 4
40306: PUSH
40307: LD_INT 2
40309: ARRAY
40310: ST_TO_ADDR
// end else
40311: GO 40601
// 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 ] ) ;
40313: LD_ADDR_VAR 0 28
40317: PUSH
40318: LD_VAR 0 26
40322: PUSH
40323: LD_VAR 0 16
40327: PUSH
40328: LD_EXP 57
40332: PUSH
40333: LD_VAR 0 12
40337: ARRAY
40338: ADD
40339: PUSH
40340: LD_EXP 65
40344: PUSH
40345: LD_VAR 0 12
40349: ARRAY
40350: ADD
40351: PUSH
40352: LD_EXP 64
40356: PUSH
40357: LD_VAR 0 12
40361: ARRAY
40362: ADD
40363: DIFF
40364: PPUSH
40365: LD_INT 50
40367: PUSH
40368: EMPTY
40369: LIST
40370: PPUSH
40371: CALL_OW 72
40375: ST_TO_ADDR
// for i in parked_vehicles do
40376: LD_ADDR_VAR 0 2
40380: PUSH
40381: LD_VAR 0 16
40385: PUSH
40386: FOR_IN
40387: IFFALSE 40499
// begin if not i in ( ai_refuel_vehicles_list [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) then
40389: LD_VAR 0 2
40393: PUSH
40394: LD_EXP 57
40398: PUSH
40399: LD_VAR 0 12
40403: ARRAY
40404: PUSH
40405: LD_EXP 64
40409: PUSH
40410: LD_VAR 0 12
40414: ARRAY
40415: ADD
40416: PUSH
40417: LD_EXP 65
40421: PUSH
40422: LD_VAR 0 12
40426: ARRAY
40427: ADD
40428: IN
40429: NOT
40430: IFFALSE 40497
// begin k = IsDrivenBy ( i ) ;
40432: LD_ADDR_VAR 0 11
40436: PUSH
40437: LD_VAR 0 2
40441: PPUSH
40442: CALL_OW 311
40446: ST_TO_ADDR
// if k > 0 and not ( k in remote_mechanics and i in ai_control_tower_vehicles [ base ] ) then
40447: LD_VAR 0 11
40451: PUSH
40452: LD_INT 0
40454: GREATER
40455: PUSH
40456: LD_VAR 0 11
40460: PUSH
40461: LD_VAR 0 15
40465: IN
40466: PUSH
40467: LD_VAR 0 2
40471: PUSH
40472: LD_EXP 81
40476: PUSH
40477: LD_VAR 0 12
40481: ARRAY
40482: IN
40483: AND
40484: NOT
40485: AND
40486: IFFALSE 40497
// begin ComExitVehicle ( k ) ;
40488: LD_VAR 0 11
40492: PPUSH
40493: CALL_OW 121
// end ; end ; end ;
40497: GO 40386
40499: POP
40500: POP
// temp_list = UnitFilter ( vehicles_to_park , [ [ f_control , control_manual ] , [ f_empty ] ] ) diff ai_control_tower_vehicles [ base ] ;
40501: LD_ADDR_VAR 0 4
40505: PUSH
40506: LD_VAR 0 28
40510: PPUSH
40511: LD_INT 33
40513: PUSH
40514: LD_INT 1
40516: PUSH
40517: EMPTY
40518: LIST
40519: LIST
40520: PUSH
40521: LD_INT 58
40523: PUSH
40524: EMPTY
40525: LIST
40526: PUSH
40527: EMPTY
40528: LIST
40529: LIST
40530: PPUSH
40531: CALL_OW 72
40535: PUSH
40536: LD_EXP 81
40540: PUSH
40541: LD_VAR 0 12
40545: ARRAY
40546: DIFF
40547: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
40548: LD_ADDR_VAR 0 4
40552: PUSH
40553: LD_VAR 0 4
40557: PPUSH
40558: LD_VAR 0 3
40562: PPUSH
40563: LD_VAR 0 29
40567: PPUSH
40568: CALL 43907 0 3
40572: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
40573: LD_ADDR_VAR 0 3
40577: PUSH
40578: LD_VAR 0 4
40582: PUSH
40583: LD_INT 1
40585: ARRAY
40586: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
40587: LD_ADDR_VAR 0 29
40591: PUSH
40592: LD_VAR 0 4
40596: PUSH
40597: LD_INT 2
40599: ARRAY
40600: ST_TO_ADDR
// end ; while vehicles_to_park > 0 do
40601: LD_VAR 0 28
40605: PUSH
40606: LD_INT 0
40608: GREATER
40609: IFFALSE 40793
// begin if free_parking_spots = 0 then
40611: LD_VAR 0 10
40615: PUSH
40616: LD_INT 0
40618: EQUAL
40619: IFFALSE 40623
// break ;
40621: GO 40793
// temp_list = [ ] ;
40623: LD_ADDR_VAR 0 4
40627: PUSH
40628: EMPTY
40629: ST_TO_ADDR
// for k in free_parking_spots do
40630: LD_ADDR_VAR 0 11
40634: PUSH
40635: LD_VAR 0 10
40639: PUSH
40640: FOR_IN
40641: IFFALSE 40688
// temp_list = temp_list ^ GetDistUnitXY ( vehicles_to_park [ 1 ] , k [ 1 ] , k [ 2 ] ) ;
40643: LD_ADDR_VAR 0 4
40647: PUSH
40648: LD_VAR 0 4
40652: PUSH
40653: LD_VAR 0 28
40657: PUSH
40658: LD_INT 1
40660: ARRAY
40661: PPUSH
40662: LD_VAR 0 11
40666: PUSH
40667: LD_INT 1
40669: ARRAY
40670: PPUSH
40671: LD_VAR 0 11
40675: PUSH
40676: LD_INT 2
40678: ARRAY
40679: PPUSH
40680: CALL_OW 297
40684: ADD
40685: ST_TO_ADDR
40686: GO 40640
40688: POP
40689: POP
// temp_list = WorstFromListByList ( free_parking_spots , temp_list ) ;
40690: LD_ADDR_VAR 0 4
40694: PUSH
40695: LD_VAR 0 10
40699: PPUSH
40700: LD_VAR 0 4
40704: PPUSH
40705: CALL_OW 78
40709: ST_TO_ADDR
// ComMoveXY ( vehicles_to_park [ 1 ] , temp_list [ 1 ] , temp_list [ 2 ] ) ;
40710: LD_VAR 0 28
40714: PUSH
40715: LD_INT 1
40717: ARRAY
40718: PPUSH
40719: LD_VAR 0 4
40723: PUSH
40724: LD_INT 1
40726: ARRAY
40727: PPUSH
40728: LD_VAR 0 4
40732: PUSH
40733: LD_INT 2
40735: ARRAY
40736: PPUSH
40737: CALL_OW 111
// AddComHold ( vehicles_to_park [ 1 ] ) ;
40741: LD_VAR 0 28
40745: PUSH
40746: LD_INT 1
40748: ARRAY
40749: PPUSH
40750: CALL_OW 200
// free_parking_spots = free_parking_spots diff [ temp_list ] ;
40754: LD_ADDR_VAR 0 10
40758: PUSH
40759: LD_VAR 0 10
40763: PUSH
40764: LD_VAR 0 4
40768: PUSH
40769: EMPTY
40770: LIST
40771: DIFF
40772: ST_TO_ADDR
// vehicles_to_park = Delete ( vehicles_to_park , 1 ) ;
40773: LD_ADDR_VAR 0 28
40777: PUSH
40778: LD_VAR 0 28
40782: PPUSH
40783: LD_INT 1
40785: PPUSH
40786: CALL_OW 3
40790: ST_TO_ADDR
// end ;
40791: GO 40601
// if under_attack then
40793: LD_VAR 0 9
40797: IFFALSE 40937
// begin for i in UnitFilter ( ( ai_retreating_vehicles_defend [ base ] union ai_vehicles_being_repaired [ base ] ) diff vehicles_allowed_to_park , [ f_ok ] ) do
40799: LD_ADDR_VAR 0 2
40803: PUSH
40804: LD_EXP 55
40808: PUSH
40809: LD_VAR 0 12
40813: ARRAY
40814: PUSH
40815: LD_EXP 56
40819: PUSH
40820: LD_VAR 0 12
40824: ARRAY
40825: UNION
40826: PUSH
40827: LD_VAR 0 26
40831: DIFF
40832: PPUSH
40833: LD_INT 50
40835: PUSH
40836: EMPTY
40837: LIST
40838: PPUSH
40839: CALL_OW 72
40843: PUSH
40844: FOR_IN
40845: IFFALSE 40935
// begin if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > human_pullback_hex_max_dist then
40847: LD_VAR 0 2
40851: PPUSH
40852: LD_EXP 59
40856: PUSH
40857: LD_VAR 0 12
40861: ARRAY
40862: PUSH
40863: LD_INT 1
40865: ARRAY
40866: PPUSH
40867: LD_EXP 59
40871: PUSH
40872: LD_VAR 0 12
40876: ARRAY
40877: PUSH
40878: LD_INT 2
40880: ARRAY
40881: PPUSH
40882: CALL_OW 297
40886: PUSH
40887: LD_VAR 0 27
40891: GREATER
40892: IFFALSE 40933
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
40894: LD_VAR 0 2
40898: PPUSH
40899: LD_EXP 59
40903: PUSH
40904: LD_VAR 0 12
40908: ARRAY
40909: PUSH
40910: LD_INT 1
40912: ARRAY
40913: PPUSH
40914: LD_EXP 59
40918: PUSH
40919: LD_VAR 0 12
40923: ARRAY
40924: PUSH
40925: LD_INT 2
40927: ARRAY
40928: PPUSH
40929: CALL_OW 111
// end ;
40933: GO 40844
40935: POP
40936: POP
// end ; if under_attack then
40937: LD_VAR 0 9
40941: IFFALSE 41062
// 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 ] ) ;
40943: LD_ADDR_VAR 0 8
40947: PUSH
40948: LD_VAR 0 16
40952: PUSH
40953: LD_VAR 0 25
40957: PUSH
40958: LD_VAR 0 26
40962: DIFF
40963: PPUSH
40964: LD_INT 92
40966: PUSH
40967: LD_EXP 59
40971: PUSH
40972: LD_VAR 0 12
40976: ARRAY
40977: PUSH
40978: LD_INT 1
40980: ARRAY
40981: PUSH
40982: LD_EXP 59
40986: PUSH
40987: LD_VAR 0 12
40991: ARRAY
40992: PUSH
40993: LD_INT 2
40995: ARRAY
40996: PUSH
40997: LD_VAR 0 27
41001: PUSH
41002: EMPTY
41003: LIST
41004: LIST
41005: LIST
41006: LIST
41007: PPUSH
41008: CALL_OW 72
41012: ADD
41013: 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 ] ) ;
41014: LD_ADDR_VAR 0 8
41018: PUSH
41019: LD_VAR 0 8
41023: PUSH
41024: LD_EXP 57
41028: PUSH
41029: LD_VAR 0 12
41033: ARRAY
41034: PUSH
41035: LD_EXP 65
41039: PUSH
41040: LD_VAR 0 12
41044: ARRAY
41045: ADD
41046: PUSH
41047: LD_EXP 64
41051: PUSH
41052: LD_VAR 0 12
41056: ARRAY
41057: ADD
41058: DIFF
41059: ST_TO_ADDR
// end else
41060: GO 41253
// 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 ] ) ;
41062: LD_ADDR_VAR 0 8
41066: PUSH
41067: LD_VAR 0 25
41071: PUSH
41072: LD_EXP 57
41076: PUSH
41077: LD_VAR 0 12
41081: ARRAY
41082: PUSH
41083: LD_EXP 65
41087: PUSH
41088: LD_VAR 0 12
41092: ARRAY
41093: ADD
41094: PUSH
41095: LD_EXP 64
41099: PUSH
41100: LD_VAR 0 12
41104: ARRAY
41105: ADD
41106: DIFF
41107: ST_TO_ADDR
// allowed_to_repair_vehicles = allowed_to_repair_vehicles ^ UnitFilter ( ai_cargo_bay [ base ] diff 0 , [ f_inarea , area ] ) ;
41108: LD_ADDR_VAR 0 8
41112: PUSH
41113: LD_VAR 0 8
41117: PUSH
41118: LD_EXP 71
41122: PUSH
41123: LD_VAR 0 12
41127: ARRAY
41128: PUSH
41129: LD_INT 0
41131: DIFF
41132: PPUSH
41133: LD_INT 95
41135: PUSH
41136: LD_VAR 0 13
41140: PUSH
41141: EMPTY
41142: LIST
41143: LIST
41144: PPUSH
41145: CALL_OW 72
41149: ADD
41150: ST_TO_ADDR
// i = 1 ;
41151: LD_ADDR_VAR 0 2
41155: PUSH
41156: LD_INT 1
41158: ST_TO_ADDR
// while i <= allowed_to_repair_vehicles do
41159: LD_VAR 0 2
41163: PUSH
41164: LD_VAR 0 8
41168: LESSEQUAL
41169: IFFALSE 41253
// begin if not IsOk ( allowed_to_repair_vehicles [ i ] ) and GetDistUnitArea ( allowed_to_repair_vehicles [ i ] , area ) > 7 then
41171: LD_VAR 0 8
41175: PUSH
41176: LD_VAR 0 2
41180: ARRAY
41181: PPUSH
41182: CALL_OW 302
41186: NOT
41187: PUSH
41188: LD_VAR 0 8
41192: PUSH
41193: LD_VAR 0 2
41197: ARRAY
41198: PPUSH
41199: LD_VAR 0 13
41203: PPUSH
41204: CALL_OW 299
41208: PUSH
41209: LD_INT 7
41211: GREATER
41212: AND
41213: IFFALSE 41237
// begin allowed_to_repair_vehicles = Delete ( allowed_to_repair_vehicles , i ) ;
41215: LD_ADDR_VAR 0 8
41219: PUSH
41220: LD_VAR 0 8
41224: PPUSH
41225: LD_VAR 0 2
41229: PPUSH
41230: CALL_OW 3
41234: ST_TO_ADDR
// continue ;
41235: GO 41159
// end ; i = i + 1 ;
41237: LD_ADDR_VAR 0 2
41241: PUSH
41242: LD_VAR 0 2
41246: PUSH
41247: LD_INT 1
41249: PLUS
41250: ST_TO_ADDR
// end ;
41251: GO 41159
// end ; allowed_to_repair_vehicles = UnitFilter ( allowed_to_repair_vehicles , [ [ f_not , [ f_lives , 1000 ] ] , [ f_or , [ f_not , [ f_ok ] ] , [ f_inarea , area ] ] ] ) ;
41253: LD_ADDR_VAR 0 8
41257: PUSH
41258: LD_VAR 0 8
41262: PPUSH
41263: LD_INT 3
41265: PUSH
41266: LD_INT 24
41268: PUSH
41269: LD_INT 1000
41271: PUSH
41272: EMPTY
41273: LIST
41274: LIST
41275: PUSH
41276: EMPTY
41277: LIST
41278: LIST
41279: PUSH
41280: LD_INT 2
41282: PUSH
41283: LD_INT 3
41285: PUSH
41286: LD_INT 50
41288: PUSH
41289: EMPTY
41290: LIST
41291: PUSH
41292: EMPTY
41293: LIST
41294: LIST
41295: PUSH
41296: LD_INT 95
41298: PUSH
41299: LD_VAR 0 13
41303: PUSH
41304: EMPTY
41305: LIST
41306: LIST
41307: PUSH
41308: EMPTY
41309: LIST
41310: LIST
41311: LIST
41312: PUSH
41313: EMPTY
41314: LIST
41315: LIST
41316: PPUSH
41317: CALL_OW 72
41321: ST_TO_ADDR
// if ai_crane [ base ] > 0 then
41322: LD_EXP 74
41326: PUSH
41327: LD_VAR 0 12
41331: ARRAY
41332: PUSH
41333: LD_INT 0
41335: GREATER
41336: IFFALSE 41927
// begin k = false ;
41338: LD_ADDR_VAR 0 11
41342: PUSH
41343: LD_INT 0
41345: 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
41346: LD_EXP 77
41350: PUSH
41351: LD_VAR 0 12
41355: ARRAY
41356: PUSH
41357: LD_EXP 74
41361: PUSH
41362: LD_VAR 0 12
41366: ARRAY
41367: PPUSH
41368: LD_EXP 59
41372: PUSH
41373: LD_VAR 0 12
41377: ARRAY
41378: PUSH
41379: LD_INT 1
41381: ARRAY
41382: PPUSH
41383: LD_EXP 59
41387: PUSH
41388: LD_VAR 0 12
41392: ARRAY
41393: PUSH
41394: LD_INT 2
41396: ARRAY
41397: PPUSH
41398: CALL_OW 297
41402: PUSH
41403: LD_INT 6
41405: LESSEQUAL
41406: PUSH
41407: LD_EXP 74
41411: PUSH
41412: LD_VAR 0 12
41416: ARRAY
41417: PPUSH
41418: LD_VAR 0 13
41422: PPUSH
41423: CALL_OW 308
41427: PUSH
41428: LD_VAR 0 9
41432: NOT
41433: AND
41434: OR
41435: AND
41436: IFFALSE 41707
// begin if GetLives ( ai_crane [ base ] ) < 1000 then
41438: LD_EXP 74
41442: PUSH
41443: LD_VAR 0 12
41447: ARRAY
41448: PPUSH
41449: CALL_OW 256
41453: PUSH
41454: LD_INT 1000
41456: LESS
41457: IFFALSE 41481
// allowed_to_repair_vehicles = ai_crane [ base ] ^ allowed_to_repair_vehicles ;
41459: LD_ADDR_VAR 0 8
41463: PUSH
41464: LD_EXP 74
41468: PUSH
41469: LD_VAR 0 12
41473: ARRAY
41474: PUSH
41475: LD_VAR 0 8
41479: ADD
41480: ST_TO_ADDR
// if ai_crane_driver [ base ] > 0 then
41481: LD_EXP 78
41485: PUSH
41486: LD_VAR 0 12
41490: ARRAY
41491: PUSH
41492: LD_INT 0
41494: GREATER
41495: IFFALSE 41705
// begin if GetLives ( ai_crane_driver [ base ] ) = 1000 then
41497: LD_EXP 78
41501: PUSH
41502: LD_VAR 0 12
41506: ARRAY
41507: PPUSH
41508: CALL_OW 256
41512: PUSH
41513: LD_INT 1000
41515: EQUAL
41516: IFFALSE 41542
// begin mechanics_list = mechanics_list ^ ai_crane_driver [ base ] ;
41518: LD_ADDR_VAR 0 3
41522: PUSH
41523: LD_VAR 0 3
41527: PUSH
41528: LD_EXP 78
41532: PUSH
41533: LD_VAR 0 12
41537: ARRAY
41538: ADD
41539: ST_TO_ADDR
// end else
41540: GO 41705
// begin if GetDistUnitXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) <= 6 then
41542: LD_EXP 74
41546: PUSH
41547: LD_VAR 0 12
41551: ARRAY
41552: PPUSH
41553: LD_EXP 59
41557: PUSH
41558: LD_VAR 0 12
41562: ARRAY
41563: PUSH
41564: LD_INT 1
41566: ARRAY
41567: PPUSH
41568: LD_EXP 59
41572: PUSH
41573: LD_VAR 0 12
41577: ARRAY
41578: PUSH
41579: LD_INT 2
41581: ARRAY
41582: PPUSH
41583: CALL_OW 297
41587: PUSH
41588: LD_INT 6
41590: LESSEQUAL
41591: IFFALSE 41697
// begin if GetHumansOutOfUnits ( [ ai_crane_driver [ base ] ] ) > 0 and not ai_crane_driver [ base ] in ai_heal_these_humans [ base ] then
41593: LD_EXP 78
41597: PUSH
41598: LD_VAR 0 12
41602: ARRAY
41603: PUSH
41604: EMPTY
41605: LIST
41606: PPUSH
41607: CALL 32829 0 1
41611: PUSH
41612: LD_INT 0
41614: GREATER
41615: PUSH
41616: LD_EXP 78
41620: PUSH
41621: LD_VAR 0 12
41625: ARRAY
41626: PUSH
41627: LD_EXP 61
41631: PUSH
41632: LD_VAR 0 12
41636: ARRAY
41637: IN
41638: NOT
41639: AND
41640: IFFALSE 41695
// begin temp_list = ai_heal_these_humans [ base ] ^ ai_crane_driver [ base ] ;
41642: LD_ADDR_VAR 0 4
41646: PUSH
41647: LD_EXP 61
41651: PUSH
41652: LD_VAR 0 12
41656: ARRAY
41657: PUSH
41658: LD_EXP 78
41662: PUSH
41663: LD_VAR 0 12
41667: ARRAY
41668: ADD
41669: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
41670: LD_ADDR_EXP 61
41674: PUSH
41675: LD_EXP 61
41679: PPUSH
41680: LD_VAR 0 12
41684: PPUSH
41685: LD_VAR 0 4
41689: PPUSH
41690: CALL_OW 1
41694: ST_TO_ADDR
// end ; end else
41695: GO 41705
// k = true ;
41697: LD_ADDR_VAR 0 11
41701: PUSH
41702: LD_INT 1
41704: ST_TO_ADDR
// end ; end ; end else
41705: GO 41715
// k = true ;
41707: LD_ADDR_VAR 0 11
41711: PUSH
41712: LD_INT 1
41714: ST_TO_ADDR
// if k then
41715: LD_VAR 0 11
41719: IFFALSE 41927
// 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
41721: LD_EXP 74
41725: PUSH
41726: LD_VAR 0 12
41730: ARRAY
41731: PPUSH
41732: CALL_OW 302
41736: PUSH
41737: LD_EXP 78
41741: PUSH
41742: LD_VAR 0 12
41746: ARRAY
41747: PUSH
41748: LD_INT 0
41750: GREATER
41751: AND
41752: PUSH
41753: LD_EXP 78
41757: PUSH
41758: LD_VAR 0 12
41762: ARRAY
41763: PUSH
41764: LD_VAR 0 3
41768: IN
41769: NOT
41770: AND
41771: PUSH
41772: LD_EXP 78
41776: PUSH
41777: LD_VAR 0 12
41781: ARRAY
41782: PUSH
41783: LD_EXP 61
41787: PUSH
41788: LD_VAR 0 12
41792: ARRAY
41793: IN
41794: NOT
41795: AND
41796: IFFALSE 41927
// begin if IsInUnit ( ai_crane_driver [ base ] ) <> ai_crane [ base ] then
41798: LD_EXP 78
41802: PUSH
41803: LD_VAR 0 12
41807: ARRAY
41808: PPUSH
41809: CALL_OW 310
41813: PUSH
41814: LD_EXP 74
41818: PUSH
41819: LD_VAR 0 12
41823: ARRAY
41824: NONEQUAL
41825: IFFALSE 41927
// case GetType ( IsInUnit ( ai_crane_driver [ base ] ) ) of unit_building :
41827: LD_EXP 78
41831: PUSH
41832: LD_VAR 0 12
41836: ARRAY
41837: PPUSH
41838: CALL_OW 310
41842: PPUSH
41843: CALL_OW 247
41847: PUSH
41848: LD_INT 3
41850: DOUBLE
41851: EQUAL
41852: IFTRUE 41856
41854: GO 41874
41856: POP
// ComExitBuilding ( ai_crane_driver [ base ] ) ; unit_vehicle :
41857: LD_EXP 78
41861: PUSH
41862: LD_VAR 0 12
41866: ARRAY
41867: PPUSH
41868: CALL_OW 122
41872: GO 41927
41874: LD_INT 2
41876: DOUBLE
41877: EQUAL
41878: IFTRUE 41882
41880: GO 41900
41882: POP
// ComExitVehicle ( ai_crane_driver [ base ] ) ; else
41883: LD_EXP 78
41887: PUSH
41888: LD_VAR 0 12
41892: ARRAY
41893: PPUSH
41894: CALL_OW 121
41898: GO 41927
41900: POP
// ComEnterUnit ( ai_crane_driver [ base ] , ai_crane [ base ] ) ; end ;
41901: LD_EXP 78
41905: PUSH
41906: LD_VAR 0 12
41910: ARRAY
41911: PPUSH
41912: LD_EXP 74
41916: PUSH
41917: LD_VAR 0 12
41921: ARRAY
41922: PPUSH
41923: CALL_OW 120
// end ; end ; end ; if mechanics_list = 0 and remote_mechanics = 0 then
41927: LD_VAR 0 3
41931: PUSH
41932: LD_INT 0
41934: EQUAL
41935: PUSH
41936: LD_VAR 0 15
41940: PUSH
41941: LD_INT 0
41943: EQUAL
41944: AND
41945: IFFALSE 41949
// continue ;
41947: GO 35454
// allowed_to_repair_vehicles = allowed_to_repair_vehicles diff ai_vehicles_being_repaired [ base ] ;
41949: LD_ADDR_VAR 0 8
41953: PUSH
41954: LD_VAR 0 8
41958: PUSH
41959: LD_EXP 56
41963: PUSH
41964: LD_VAR 0 12
41968: ARRAY
41969: DIFF
41970: ST_TO_ADDR
// if allowed_to_repair_vehicles > 0 or ai_vehicles_being_repaired [ base ] > 0 then
41971: LD_VAR 0 8
41975: PUSH
41976: LD_INT 0
41978: GREATER
41979: PUSH
41980: LD_EXP 56
41984: PUSH
41985: LD_VAR 0 12
41989: ARRAY
41990: PUSH
41991: LD_INT 0
41993: GREATER
41994: OR
41995: IFFALSE 42497
// begin if remote_mechanics > 0 then
41997: LD_VAR 0 15
42001: PUSH
42002: LD_INT 0
42004: GREATER
42005: IFFALSE 42241
// begin if under_attack or UnitFilter ( ai_vehicles_attack [ base ] , [ [ f_control , control_remote ] , [ f_ok ] ] ) > 0 then
42007: LD_VAR 0 9
42011: PUSH
42012: LD_EXP 54
42016: PUSH
42017: LD_VAR 0 12
42021: ARRAY
42022: PPUSH
42023: LD_INT 33
42025: PUSH
42026: LD_INT 2
42028: PUSH
42029: EMPTY
42030: LIST
42031: LIST
42032: PUSH
42033: LD_INT 50
42035: PUSH
42036: EMPTY
42037: LIST
42038: PUSH
42039: EMPTY
42040: LIST
42041: LIST
42042: PPUSH
42043: CALL_OW 72
42047: PUSH
42048: LD_INT 0
42050: GREATER
42051: OR
42052: IFFALSE 42160
// begin for i in remote_driver_vehicles [ base ] do
42054: LD_ADDR_VAR 0 2
42058: PUSH
42059: LD_VAR 0 30
42063: PUSH
42064: LD_VAR 0 12
42068: ARRAY
42069: PUSH
42070: FOR_IN
42071: IFFALSE 42156
// if UnitFilter ( i [ 2 ] , [ f_ok ] ) = 0 and i [ 1 ] in remote_mechanics then
42073: LD_VAR 0 2
42077: PUSH
42078: LD_INT 2
42080: ARRAY
42081: PPUSH
42082: LD_INT 50
42084: PUSH
42085: EMPTY
42086: LIST
42087: PPUSH
42088: CALL_OW 72
42092: PUSH
42093: LD_INT 0
42095: EQUAL
42096: PUSH
42097: LD_VAR 0 2
42101: PUSH
42102: LD_INT 1
42104: ARRAY
42105: PUSH
42106: LD_VAR 0 15
42110: IN
42111: AND
42112: IFFALSE 42154
// begin mechanics_list = mechanics_list ^ i [ 1 ] ;
42114: LD_ADDR_VAR 0 3
42118: PUSH
42119: LD_VAR 0 3
42123: PUSH
42124: LD_VAR 0 2
42128: PUSH
42129: LD_INT 1
42131: ARRAY
42132: ADD
42133: ST_TO_ADDR
// remote_mechanics = remote_mechanics diff i [ 1 ] ;
42134: LD_ADDR_VAR 0 15
42138: PUSH
42139: LD_VAR 0 15
42143: PUSH
42144: LD_VAR 0 2
42148: PUSH
42149: LD_INT 1
42151: ARRAY
42152: DIFF
42153: ST_TO_ADDR
// end ;
42154: GO 42070
42156: POP
42157: POP
// end else
42158: GO 42241
// begin temp_unit = true ;
42160: LD_ADDR_VAR 0 6
42164: PUSH
42165: LD_INT 1
42167: ST_TO_ADDR
// for i in vehicles_to_consider do
42168: LD_ADDR_VAR 0 2
42172: PUSH
42173: LD_VAR 0 25
42177: PUSH
42178: FOR_IN
42179: IFFALSE 42210
// if not IsInArea ( i , area ) then
42181: LD_VAR 0 2
42185: PPUSH
42186: LD_VAR 0 13
42190: PPUSH
42191: CALL_OW 308
42195: NOT
42196: IFFALSE 42208
// begin temp_unit = false ;
42198: LD_ADDR_VAR 0 6
42202: PUSH
42203: LD_INT 0
42205: ST_TO_ADDR
// break ;
42206: GO 42210
// end ;
42208: GO 42178
42210: POP
42211: POP
// if temp_unit then
42212: LD_VAR 0 6
42216: IFFALSE 42241
// begin mechanics_list = mechanics_list ^ remote_mechanics ;
42218: LD_ADDR_VAR 0 3
42222: PUSH
42223: LD_VAR 0 3
42227: PUSH
42228: LD_VAR 0 15
42232: ADD
42233: ST_TO_ADDR
// remote_mechanics = [ ] ;
42234: LD_ADDR_VAR 0 15
42238: PUSH
42239: EMPTY
42240: ST_TO_ADDR
// end ; end ; end ; if allowed_to_repair_vehicles > 0 then
42241: LD_VAR 0 8
42245: PUSH
42246: LD_INT 0
42248: GREATER
42249: IFFALSE 42466
// begin k = false ;
42251: LD_ADDR_VAR 0 11
42255: PUSH
42256: LD_INT 0
42258: ST_TO_ADDR
// if ai_vehicles_being_repaired [ base ] = 0 then
42259: LD_EXP 56
42263: PUSH
42264: LD_VAR 0 12
42268: ARRAY
42269: PUSH
42270: LD_INT 0
42272: EQUAL
42273: IFFALSE 42285
// k = true else
42275: LD_ADDR_VAR 0 11
42279: PUSH
42280: LD_INT 1
42282: ST_TO_ADDR
42283: GO 42348
// if IsOk ( ai_vehicles_being_repaired [ base ] [ 1 ] ) then
42285: LD_EXP 56
42289: PUSH
42290: LD_VAR 0 12
42294: ARRAY
42295: PUSH
42296: LD_INT 1
42298: ARRAY
42299: PPUSH
42300: CALL_OW 302
42304: IFFALSE 42348
// begin allowed_to_repair_vehicles = UnitFilter ( allowed_to_repair_vehicles , [ f_not , [ f_ok ] ] ) ;
42306: LD_ADDR_VAR 0 8
42310: PUSH
42311: LD_VAR 0 8
42315: PPUSH
42316: LD_INT 3
42318: PUSH
42319: LD_INT 50
42321: PUSH
42322: EMPTY
42323: LIST
42324: PUSH
42325: EMPTY
42326: LIST
42327: LIST
42328: PPUSH
42329: CALL_OW 72
42333: ST_TO_ADDR
// k := allowed_to_repair_vehicles > 0 ;
42334: LD_ADDR_VAR 0 11
42338: PUSH
42339: LD_VAR 0 8
42343: PUSH
42344: LD_INT 0
42346: GREATER
42347: ST_TO_ADDR
// end ; if k then
42348: LD_VAR 0 11
42352: IFFALSE 42466
// begin temp_list = [ ] ;
42354: LD_ADDR_VAR 0 4
42358: PUSH
42359: EMPTY
42360: ST_TO_ADDR
// for i in allowed_to_repair_vehicles do
42361: LD_ADDR_VAR 0 2
42365: PUSH
42366: LD_VAR 0 8
42370: PUSH
42371: FOR_IN
42372: IFFALSE 42397
// temp_list = temp_list ^ GetLives ( i ) ;
42374: LD_ADDR_VAR 0 4
42378: PUSH
42379: LD_VAR 0 4
42383: PUSH
42384: LD_VAR 0 2
42388: PPUSH
42389: CALL_OW 256
42393: ADD
42394: ST_TO_ADDR
42395: GO 42371
42397: POP
42398: POP
// temp_unit = WorstFromListByList ( allowed_to_repair_vehicles , temp_list ) ;
42399: LD_ADDR_VAR 0 6
42403: PUSH
42404: LD_VAR 0 8
42408: PPUSH
42409: LD_VAR 0 4
42413: PPUSH
42414: CALL_OW 78
42418: ST_TO_ADDR
// temp_list = temp_unit ^ ai_vehicles_being_repaired [ base ] ;
42419: LD_ADDR_VAR 0 4
42423: PUSH
42424: LD_VAR 0 6
42428: PUSH
42429: LD_EXP 56
42433: PUSH
42434: LD_VAR 0 12
42438: ARRAY
42439: ADD
42440: ST_TO_ADDR
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
42441: LD_ADDR_EXP 56
42445: PUSH
42446: LD_EXP 56
42450: PPUSH
42451: LD_VAR 0 12
42455: PPUSH
42456: LD_VAR 0 4
42460: PPUSH
42461: CALL_OW 1
42465: ST_TO_ADDR
// end ; end ; ComRepairVehicle ( GetHumansOutOfUnits ( mechanics_list ) , ai_vehicles_being_repaired [ base ] [ 1 ] ) ;
42466: LD_VAR 0 3
42470: PPUSH
42471: CALL 32829 0 1
42475: PPUSH
42476: LD_EXP 56
42480: PUSH
42481: LD_VAR 0 12
42485: ARRAY
42486: PUSH
42487: LD_INT 1
42489: ARRAY
42490: PPUSH
42491: CALL_OW 129
// end else
42495: GO 42574
// begin DistributeHumansToBuildings ( base , mechanics_list , UnitFilter ( ai_facts [ base ] diff ai_sib_bomb_fact [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
42497: LD_VAR 0 12
42501: PPUSH
42502: LD_VAR 0 3
42506: PPUSH
42507: LD_EXP 38
42511: PUSH
42512: LD_VAR 0 12
42516: ARRAY
42517: PUSH
42518: LD_EXP 50
42522: PUSH
42523: LD_VAR 0 12
42527: ARRAY
42528: DIFF
42529: PPUSH
42530: LD_INT 50
42532: PUSH
42533: EMPTY
42534: LIST
42535: PUSH
42536: LD_INT 3
42538: PUSH
42539: LD_INT 57
42541: PUSH
42542: EMPTY
42543: LIST
42544: PUSH
42545: EMPTY
42546: LIST
42547: LIST
42548: PUSH
42549: EMPTY
42550: LIST
42551: LIST
42552: PPUSH
42553: CALL_OW 72
42557: PPUSH
42558: LD_INT 3
42560: PPUSH
42561: LD_INT 6
42563: PPUSH
42564: LD_INT 1
42566: PPUSH
42567: LD_INT 0
42569: PPUSH
42570: CALL 22559 0 7
// end ; if remote_driver_vehicles [ base ] > 0 then
42574: LD_VAR 0 30
42578: PUSH
42579: LD_VAR 0 12
42583: ARRAY
42584: PUSH
42585: LD_INT 0
42587: GREATER
42588: IFFALSE 43896
// begin if not IsOk ( ai_control_tower [ base ] ) and UnitFilter ( ai_control_tower_vehicles [ base ] , [ f_ok ] ) = 0 then
42590: LD_EXP 46
42594: PUSH
42595: LD_VAR 0 12
42599: ARRAY
42600: PPUSH
42601: CALL_OW 302
42605: NOT
42606: PUSH
42607: LD_EXP 81
42611: PUSH
42612: LD_VAR 0 12
42616: ARRAY
42617: PPUSH
42618: LD_INT 50
42620: PUSH
42621: EMPTY
42622: LIST
42623: PPUSH
42624: CALL_OW 72
42628: PUSH
42629: LD_INT 0
42631: EQUAL
42632: AND
42633: IFFALSE 42714
// begin DistributeHumansToBuildings ( base , remote_mechanics , UnitFilter ( ai_facts [ base ] diff ai_sib_bomb_fact [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
42635: LD_VAR 0 12
42639: PPUSH
42640: LD_VAR 0 15
42644: PPUSH
42645: LD_EXP 38
42649: PUSH
42650: LD_VAR 0 12
42654: ARRAY
42655: PUSH
42656: LD_EXP 50
42660: PUSH
42661: LD_VAR 0 12
42665: ARRAY
42666: DIFF
42667: PPUSH
42668: LD_INT 50
42670: PUSH
42671: EMPTY
42672: LIST
42673: PUSH
42674: LD_INT 3
42676: PUSH
42677: LD_INT 57
42679: PUSH
42680: EMPTY
42681: LIST
42682: PUSH
42683: EMPTY
42684: LIST
42685: LIST
42686: PUSH
42687: EMPTY
42688: LIST
42689: LIST
42690: PPUSH
42691: CALL_OW 72
42695: PPUSH
42696: LD_INT 3
42698: PPUSH
42699: LD_INT 6
42701: PPUSH
42702: LD_INT 1
42704: PPUSH
42705: LD_INT 0
42707: PPUSH
42708: CALL 22559 0 7
// end else
42712: GO 43896
// begin temp_list_3 = [ [ ] , 0 ] ;
42714: LD_ADDR_VAR 0 5
42718: PUSH
42719: EMPTY
42720: PUSH
42721: LD_INT 0
42723: PUSH
42724: EMPTY
42725: LIST
42726: LIST
42727: ST_TO_ADDR
// temp_list_2 = [ ] ;
42728: LD_ADDR_VAR 0 14
42732: PUSH
42733: EMPTY
42734: ST_TO_ADDR
// already_inside_mecs = [ ] ;
42735: LD_ADDR_VAR 0 24
42739: PUSH
42740: EMPTY
42741: ST_TO_ADDR
// for i in remote_driver_vehicles [ base ] do
42742: LD_ADDR_VAR 0 2
42746: PUSH
42747: LD_VAR 0 30
42751: PUSH
42752: LD_VAR 0 12
42756: ARRAY
42757: PUSH
42758: FOR_IN
42759: IFFALSE 42963
// begin if GetClass ( i [ 1 ] ) <> class_mechanic then
42761: LD_VAR 0 2
42765: PUSH
42766: LD_INT 1
42768: ARRAY
42769: PPUSH
42770: CALL_OW 257
42774: PUSH
42775: LD_INT 3
42777: NONEQUAL
42778: IFFALSE 42782
// continue ;
42780: GO 42758
// k = IsInUnit ( i [ 1 ] ) ;
42782: LD_ADDR_VAR 0 11
42786: PUSH
42787: LD_VAR 0 2
42791: PUSH
42792: LD_INT 1
42794: ARRAY
42795: PPUSH
42796: CALL_OW 310
42800: ST_TO_ADDR
// if k > 0 and ( k in ai_control_tower_vehicles [ base ] or k = ai_control_tower [ base ] ) then
42801: LD_VAR 0 11
42805: PUSH
42806: LD_INT 0
42808: GREATER
42809: PUSH
42810: LD_VAR 0 11
42814: PUSH
42815: LD_EXP 81
42819: PUSH
42820: LD_VAR 0 12
42824: ARRAY
42825: IN
42826: PUSH
42827: LD_VAR 0 11
42831: PUSH
42832: LD_EXP 46
42836: PUSH
42837: LD_VAR 0 12
42841: ARRAY
42842: EQUAL
42843: OR
42844: AND
42845: IFFALSE 42961
// begin already_inside_mecs = already_inside_mecs ^ i [ 1 ] ;
42847: LD_ADDR_VAR 0 24
42851: PUSH
42852: LD_VAR 0 24
42856: PUSH
42857: LD_VAR 0 2
42861: PUSH
42862: LD_INT 1
42864: ARRAY
42865: ADD
42866: ST_TO_ADDR
// if k in ai_control_tower_vehicles [ base ] then
42867: LD_VAR 0 11
42871: PUSH
42872: LD_EXP 81
42876: PUSH
42877: LD_VAR 0 12
42881: ARRAY
42882: IN
42883: IFFALSE 42930
// begin temp_list = temp_list_3 [ 1 ] ^ k ;
42885: LD_ADDR_VAR 0 4
42889: PUSH
42890: LD_VAR 0 5
42894: PUSH
42895: LD_INT 1
42897: ARRAY
42898: PUSH
42899: LD_VAR 0 11
42903: ADD
42904: ST_TO_ADDR
// temp_list_3 = Replace ( temp_list_3 , 1 , temp_list ) ;
42905: LD_ADDR_VAR 0 5
42909: PUSH
42910: LD_VAR 0 5
42914: PPUSH
42915: LD_INT 1
42917: PPUSH
42918: LD_VAR 0 4
42922: PPUSH
42923: CALL_OW 1
42927: ST_TO_ADDR
// end else
42928: GO 42961
// temp_list_3 = Replace ( temp_list_3 , 2 , temp_list_3 [ 2 ] + 1 ) ;
42930: LD_ADDR_VAR 0 5
42934: PUSH
42935: LD_VAR 0 5
42939: PPUSH
42940: LD_INT 2
42942: PPUSH
42943: LD_VAR 0 5
42947: PUSH
42948: LD_INT 2
42950: ARRAY
42951: PUSH
42952: LD_INT 1
42954: PLUS
42955: PPUSH
42956: CALL_OW 1
42960: ST_TO_ADDR
// end ; end ;
42961: GO 42758
42963: POP
42964: POP
// for i in remote_driver_vehicles [ base ] do
42965: LD_ADDR_VAR 0 2
42969: PUSH
42970: LD_VAR 0 30
42974: PUSH
42975: LD_VAR 0 12
42979: ARRAY
42980: PUSH
42981: FOR_IN
42982: IFFALSE 43817
// begin if not i [ 1 ] in remote_mechanics then
42984: LD_VAR 0 2
42988: PUSH
42989: LD_INT 1
42991: ARRAY
42992: PUSH
42993: LD_VAR 0 15
42997: IN
42998: NOT
42999: IFFALSE 43003
// continue ;
43001: GO 42981
// if GetClass ( i [ 1 ] ) <> class_mechanic then
43003: LD_VAR 0 2
43007: PUSH
43008: LD_INT 1
43010: ARRAY
43011: PPUSH
43012: CALL_OW 257
43016: PUSH
43017: LD_INT 3
43019: NONEQUAL
43020: IFFALSE 43228
// begin temp_unit = 0 ;
43022: LD_ADDR_VAR 0 6
43026: PUSH
43027: LD_INT 0
43029: ST_TO_ADDR
// for k in ai_facts [ base ] do
43030: LD_ADDR_VAR 0 11
43034: PUSH
43035: LD_EXP 38
43039: PUSH
43040: LD_VAR 0 12
43044: ARRAY
43045: PUSH
43046: FOR_IN
43047: IFFALSE 43089
// if IsOk ( k ) and UnitsInside ( k ) < 6 then
43049: LD_VAR 0 11
43053: PPUSH
43054: CALL_OW 302
43058: PUSH
43059: LD_VAR 0 11
43063: PPUSH
43064: CALL_OW 313
43068: PUSH
43069: LD_INT 6
43071: LESS
43072: AND
43073: IFFALSE 43087
// begin temp_unit = k ;
43075: LD_ADDR_VAR 0 6
43079: PUSH
43080: LD_VAR 0 11
43084: ST_TO_ADDR
// break ;
43085: GO 43089
// end ;
43087: GO 43046
43089: POP
43090: POP
// if temp_unit > 0 then
43091: LD_VAR 0 6
43095: PUSH
43096: LD_INT 0
43098: GREATER
43099: IFFALSE 43226
// begin if IsInUnit ( i [ 1 ] ) = temp_unit then
43101: LD_VAR 0 2
43105: PUSH
43106: LD_INT 1
43108: ARRAY
43109: PPUSH
43110: CALL_OW 310
43114: PUSH
43115: LD_VAR 0 6
43119: EQUAL
43120: IFFALSE 43140
// ComChangeProfession ( i [ 1 ] , class_mechanic ) else
43122: LD_VAR 0 2
43126: PUSH
43127: LD_INT 1
43129: ARRAY
43130: PPUSH
43131: LD_INT 3
43133: PPUSH
43134: CALL_OW 123
43138: GO 43226
// begin case GetType ( IsInUnit ( i [ 1 ] ) ) of unit_building :
43140: LD_VAR 0 2
43144: PUSH
43145: LD_INT 1
43147: ARRAY
43148: PPUSH
43149: CALL_OW 310
43153: PPUSH
43154: CALL_OW 247
43158: PUSH
43159: LD_INT 3
43161: DOUBLE
43162: EQUAL
43163: IFTRUE 43167
43165: GO 43183
43167: POP
// ComExitBuilding ( i [ 1 ] ) ; unit_vehicle :
43168: LD_VAR 0 2
43172: PUSH
43173: LD_INT 1
43175: ARRAY
43176: PPUSH
43177: CALL_OW 122
43181: GO 43226
43183: LD_INT 2
43185: DOUBLE
43186: EQUAL
43187: IFTRUE 43191
43189: GO 43207
43191: POP
// ComExitVehicle ( i [ 1 ] ) ; else
43192: LD_VAR 0 2
43196: PUSH
43197: LD_INT 1
43199: ARRAY
43200: PPUSH
43201: CALL_OW 121
43205: GO 43226
43207: POP
// ComEnterUnit ( i [ 1 ] , temp_unit ) ; end ;
43208: LD_VAR 0 2
43212: PUSH
43213: LD_INT 1
43215: ARRAY
43216: PPUSH
43217: LD_VAR 0 6
43221: PPUSH
43222: CALL_OW 120
// end ; end ; end else
43226: GO 43815
// begin temp_unit = 0 ;
43228: LD_ADDR_VAR 0 6
43232: PUSH
43233: LD_INT 0
43235: ST_TO_ADDR
// if i [ 1 ] in already_inside_mecs then
43236: LD_VAR 0 2
43240: PUSH
43241: LD_INT 1
43243: ARRAY
43244: PUSH
43245: LD_VAR 0 24
43249: IN
43250: IFFALSE 43273
// begin temp_unit = IsInUnit ( i [ 1 ] ) ;
43252: LD_ADDR_VAR 0 6
43256: PUSH
43257: LD_VAR 0 2
43261: PUSH
43262: LD_INT 1
43264: ARRAY
43265: PPUSH
43266: CALL_OW 310
43270: ST_TO_ADDR
// end else
43271: GO 43586
// begin if ( ai_control_tower_vehicles [ base ] diff temp_list_3 [ 1 ] ) > 0 then
43273: LD_EXP 81
43277: PUSH
43278: LD_VAR 0 12
43282: ARRAY
43283: PUSH
43284: LD_VAR 0 5
43288: PUSH
43289: LD_INT 1
43291: ARRAY
43292: DIFF
43293: PUSH
43294: LD_INT 0
43296: GREATER
43297: IFFALSE 43490
// begin temp_list = [ GetX ( i [ 1 ] ) , GetY ( i [ 1 ] ) ] ;
43299: LD_ADDR_VAR 0 4
43303: PUSH
43304: LD_VAR 0 2
43308: PUSH
43309: LD_INT 1
43311: ARRAY
43312: PPUSH
43313: CALL_OW 250
43317: PUSH
43318: LD_VAR 0 2
43322: PUSH
43323: LD_INT 1
43325: ARRAY
43326: PPUSH
43327: CALL_OW 251
43331: PUSH
43332: EMPTY
43333: LIST
43334: LIST
43335: ST_TO_ADDR
// temp_list_4 = [ ] ;
43336: LD_ADDR_VAR 0 19
43340: PUSH
43341: EMPTY
43342: ST_TO_ADDR
// temp_list_5 = ai_control_tower_vehicles [ base ] diff temp_list_3 [ 1 ] ;
43343: LD_ADDR_VAR 0 20
43347: PUSH
43348: LD_EXP 81
43352: PUSH
43353: LD_VAR 0 12
43357: ARRAY
43358: PUSH
43359: LD_VAR 0 5
43363: PUSH
43364: LD_INT 1
43366: ARRAY
43367: DIFF
43368: ST_TO_ADDR
// for k in temp_list_5 do
43369: LD_ADDR_VAR 0 11
43373: PUSH
43374: LD_VAR 0 20
43378: PUSH
43379: FOR_IN
43380: IFFALSE 43423
// temp_list_4 = temp_list_4 ^ GetDistUnitXY ( k , temp_list [ 1 ] , temp_list [ 2 ] ) ;
43382: LD_ADDR_VAR 0 19
43386: PUSH
43387: LD_VAR 0 19
43391: PUSH
43392: LD_VAR 0 11
43396: PPUSH
43397: LD_VAR 0 4
43401: PUSH
43402: LD_INT 1
43404: ARRAY
43405: PPUSH
43406: LD_VAR 0 4
43410: PUSH
43411: LD_INT 2
43413: ARRAY
43414: PPUSH
43415: CALL_OW 297
43419: ADD
43420: ST_TO_ADDR
43421: GO 43379
43423: POP
43424: POP
// temp_unit = WorstFromListByList ( temp_list_5 , temp_list_4 ) ;
43425: LD_ADDR_VAR 0 6
43429: PUSH
43430: LD_VAR 0 20
43434: PPUSH
43435: LD_VAR 0 19
43439: PPUSH
43440: CALL_OW 78
43444: ST_TO_ADDR
// temp_list = temp_list_3 [ 1 ] ^ temp_unit ;
43445: LD_ADDR_VAR 0 4
43449: PUSH
43450: LD_VAR 0 5
43454: PUSH
43455: LD_INT 1
43457: ARRAY
43458: PUSH
43459: LD_VAR 0 6
43463: ADD
43464: ST_TO_ADDR
// temp_list_3 = Replace ( temp_list_3 , 1 , temp_list ) ;
43465: LD_ADDR_VAR 0 5
43469: PUSH
43470: LD_VAR 0 5
43474: PPUSH
43475: LD_INT 1
43477: PPUSH
43478: LD_VAR 0 4
43482: PPUSH
43483: CALL_OW 1
43487: ST_TO_ADDR
// end else
43488: GO 43586
// if IsOk ( ai_control_tower [ base ] ) and temp_list_3 [ 2 ] < 3 then
43490: LD_EXP 46
43494: PUSH
43495: LD_VAR 0 12
43499: ARRAY
43500: PPUSH
43501: CALL_OW 302
43505: PUSH
43506: LD_VAR 0 5
43510: PUSH
43511: LD_INT 2
43513: ARRAY
43514: PUSH
43515: LD_INT 3
43517: LESS
43518: AND
43519: IFFALSE 43570
// begin temp_unit = ai_control_tower [ base ] ;
43521: LD_ADDR_VAR 0 6
43525: PUSH
43526: LD_EXP 46
43530: PUSH
43531: LD_VAR 0 12
43535: ARRAY
43536: ST_TO_ADDR
// temp_list_3 = Replace ( temp_list_3 , 2 , temp_list_3 [ 2 ] + 1 ) ;
43537: LD_ADDR_VAR 0 5
43541: PUSH
43542: LD_VAR 0 5
43546: PPUSH
43547: LD_INT 2
43549: PPUSH
43550: LD_VAR 0 5
43554: PUSH
43555: LD_INT 2
43557: ARRAY
43558: PUSH
43559: LD_INT 1
43561: PLUS
43562: PPUSH
43563: CALL_OW 1
43567: ST_TO_ADDR
// end else
43568: GO 43586
// temp_list_2 = temp_list_2 ^ i ;
43570: LD_ADDR_VAR 0 14
43574: PUSH
43575: LD_VAR 0 14
43579: PUSH
43580: LD_VAR 0 2
43584: ADD
43585: ST_TO_ADDR
// end ; if temp_unit > 0 then
43586: LD_VAR 0 6
43590: PUSH
43591: LD_INT 0
43593: GREATER
43594: IFFALSE 43815
// begin k = IsInUnit ( i [ 1 ] ) ;
43596: LD_ADDR_VAR 0 11
43600: PUSH
43601: LD_VAR 0 2
43605: PUSH
43606: LD_INT 1
43608: ARRAY
43609: PPUSH
43610: CALL_OW 310
43614: ST_TO_ADDR
// if k <> temp_unit then
43615: LD_VAR 0 11
43619: PUSH
43620: LD_VAR 0 6
43624: NONEQUAL
43625: IFFALSE 43706
// begin case GetType ( k ) of unit_building :
43627: LD_VAR 0 11
43631: PPUSH
43632: CALL_OW 247
43636: PUSH
43637: LD_INT 3
43639: DOUBLE
43640: EQUAL
43641: IFTRUE 43645
43643: GO 43661
43645: POP
// ComExitBuilding ( i [ 1 ] ) ; unit_vehicle :
43646: LD_VAR 0 2
43650: PUSH
43651: LD_INT 1
43653: ARRAY
43654: PPUSH
43655: CALL_OW 122
43659: GO 43704
43661: LD_INT 2
43663: DOUBLE
43664: EQUAL
43665: IFTRUE 43669
43667: GO 43685
43669: POP
// ComExitVehicle ( i [ 1 ] ) ; else
43670: LD_VAR 0 2
43674: PUSH
43675: LD_INT 1
43677: ARRAY
43678: PPUSH
43679: CALL_OW 121
43683: GO 43704
43685: POP
// ComEnterUnit ( i [ 1 ] , temp_unit ) ; end ;
43686: LD_VAR 0 2
43690: PUSH
43691: LD_INT 1
43693: ARRAY
43694: PPUSH
43695: LD_VAR 0 6
43699: PPUSH
43700: CALL_OW 120
// end else
43704: GO 43815
// for k in i [ 2 ] do
43706: LD_ADDR_VAR 0 11
43710: PUSH
43711: LD_VAR 0 2
43715: PUSH
43716: LD_INT 2
43718: ARRAY
43719: PUSH
43720: FOR_IN
43721: IFFALSE 43813
// if IsOk ( k ) and IsControledBy ( k ) <> i [ 1 ] then
43723: LD_VAR 0 11
43727: PPUSH
43728: CALL_OW 302
43732: PUSH
43733: LD_VAR 0 11
43737: PPUSH
43738: CALL_OW 312
43742: PUSH
43743: LD_VAR 0 2
43747: PUSH
43748: LD_INT 1
43750: ARRAY
43751: NONEQUAL
43752: AND
43753: IFFALSE 43775
// ComLinkTo ( k , i [ 1 ] ) else
43755: LD_VAR 0 11
43759: PPUSH
43760: LD_VAR 0 2
43764: PUSH
43765: LD_INT 1
43767: ARRAY
43768: PPUSH
43769: CALL_OW 135
43773: GO 43811
// if not IsOk ( k ) and IsControledBy ( k ) > 0 then
43775: LD_VAR 0 11
43779: PPUSH
43780: CALL_OW 302
43784: NOT
43785: PUSH
43786: LD_VAR 0 11
43790: PPUSH
43791: CALL_OW 312
43795: PUSH
43796: LD_INT 0
43798: GREATER
43799: AND
43800: IFFALSE 43811
// ComUnlink ( k ) ;
43802: LD_VAR 0 11
43806: PPUSH
43807: CALL_OW 136
43811: GO 43720
43813: POP
43814: POP
// end ; end ; end ;
43815: GO 42981
43817: POP
43818: POP
// DistributeHumansToBuildings ( base , temp_list_2 , UnitFilter ( ai_facts [ base ] diff ai_sib_bomb_fact [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
43819: LD_VAR 0 12
43823: PPUSH
43824: LD_VAR 0 14
43828: PPUSH
43829: LD_EXP 38
43833: PUSH
43834: LD_VAR 0 12
43838: ARRAY
43839: PUSH
43840: LD_EXP 50
43844: PUSH
43845: LD_VAR 0 12
43849: ARRAY
43850: DIFF
43851: PPUSH
43852: LD_INT 50
43854: PUSH
43855: EMPTY
43856: LIST
43857: PUSH
43858: LD_INT 3
43860: PUSH
43861: LD_INT 57
43863: PUSH
43864: EMPTY
43865: LIST
43866: PUSH
43867: EMPTY
43868: LIST
43869: LIST
43870: PUSH
43871: EMPTY
43872: LIST
43873: LIST
43874: PPUSH
43875: CALL_OW 72
43879: PPUSH
43880: LD_INT 3
43882: PPUSH
43883: LD_INT 6
43885: PPUSH
43886: LD_INT 1
43888: PPUSH
43889: LD_INT 0
43891: PPUSH
43892: CALL 22559 0 7
// end ; end ; end ;
43896: GO 35454
43898: POP
43899: POP
// until false ;
43900: LD_INT 0
43902: IFFALSE 35415
// end ;
43904: PPOPN 30
43906: END
// function FindDriverHelper ( vehicles_list , mechanics_list , vehicles_drivers ) ; var i , k , temp_unit ; begin
43907: LD_INT 0
43909: PPUSH
43910: PPUSH
43911: PPUSH
43912: PPUSH
// for i in vehicles_list do
43913: LD_ADDR_VAR 0 5
43917: PUSH
43918: LD_VAR 0 1
43922: PUSH
43923: FOR_IN
43924: IFFALSE 44192
// begin if mechanics_list = 0 then
43926: LD_VAR 0 2
43930: PUSH
43931: LD_INT 0
43933: EQUAL
43934: IFFALSE 43938
// break ;
43936: GO 44192
// k = false ;
43938: LD_ADDR_VAR 0 6
43942: PUSH
43943: LD_INT 0
43945: ST_TO_ADDR
// if vehicles_drivers < i then
43946: LD_VAR 0 3
43950: PUSH
43951: LD_VAR 0 5
43955: LESS
43956: IFFALSE 43968
// k = true else
43958: LD_ADDR_VAR 0 6
43962: PUSH
43963: LD_INT 1
43965: ST_TO_ADDR
43966: GO 43995
// if not vehicles_drivers [ i ] in mechanics_list then
43968: LD_VAR 0 3
43972: PUSH
43973: LD_VAR 0 5
43977: ARRAY
43978: PUSH
43979: LD_VAR 0 2
43983: IN
43984: NOT
43985: IFFALSE 43995
// k = true ;
43987: LD_ADDR_VAR 0 6
43991: PUSH
43992: LD_INT 1
43994: ST_TO_ADDR
// if k then
43995: LD_VAR 0 6
43999: IFFALSE 44036
// vehicles_drivers = Replace ( vehicles_drivers , i , AllNearestUnitToUnit ( mechanics_list , i ) ) ;
44001: LD_ADDR_VAR 0 3
44005: PUSH
44006: LD_VAR 0 3
44010: PPUSH
44011: LD_VAR 0 5
44015: PPUSH
44016: LD_VAR 0 2
44020: PPUSH
44021: LD_VAR 0 5
44025: PPUSH
44026: CALL_OW 75
44030: PPUSH
44031: CALL_OW 1
44035: ST_TO_ADDR
// if vehicles_drivers [ i ] > 0 then
44036: LD_VAR 0 3
44040: PUSH
44041: LD_VAR 0 5
44045: ARRAY
44046: PUSH
44047: LD_INT 0
44049: GREATER
44050: IFFALSE 44190
// begin temp_unit = IsInUnit ( vehicles_drivers [ i ] ) ;
44052: LD_ADDR_VAR 0 7
44056: PUSH
44057: LD_VAR 0 3
44061: PUSH
44062: LD_VAR 0 5
44066: ARRAY
44067: PPUSH
44068: CALL_OW 310
44072: ST_TO_ADDR
// if temp_unit <> i then
44073: LD_VAR 0 7
44077: PUSH
44078: LD_VAR 0 5
44082: NONEQUAL
44083: IFFALSE 44168
// case GetType ( temp_unit ) of unit_vehicle :
44085: LD_VAR 0 7
44089: PPUSH
44090: CALL_OW 247
44094: PUSH
44095: LD_INT 2
44097: DOUBLE
44098: EQUAL
44099: IFTRUE 44103
44101: GO 44121
44103: POP
// ComExitVehicle ( vehicles_drivers [ i ] ) ; unit_building :
44104: LD_VAR 0 3
44108: PUSH
44109: LD_VAR 0 5
44113: ARRAY
44114: PPUSH
44115: CALL_OW 121
44119: GO 44168
44121: LD_INT 3
44123: DOUBLE
44124: EQUAL
44125: IFTRUE 44129
44127: GO 44147
44129: POP
// ComExitBuilding ( vehicles_drivers [ i ] ) ; else
44130: LD_VAR 0 3
44134: PUSH
44135: LD_VAR 0 5
44139: ARRAY
44140: PPUSH
44141: CALL_OW 122
44145: GO 44168
44147: POP
// ComEnterUnit ( vehicles_drivers [ i ] , i ) ; end ;
44148: LD_VAR 0 3
44152: PUSH
44153: LD_VAR 0 5
44157: ARRAY
44158: PPUSH
44159: LD_VAR 0 5
44163: PPUSH
44164: CALL_OW 120
// mechanics_list = mechanics_list diff vehicles_drivers [ i ] ;
44168: LD_ADDR_VAR 0 2
44172: PUSH
44173: LD_VAR 0 2
44177: PUSH
44178: LD_VAR 0 3
44182: PUSH
44183: LD_VAR 0 5
44187: ARRAY
44188: DIFF
44189: ST_TO_ADDR
// end ; end ;
44190: GO 43923
44192: POP
44193: POP
// result = [ mechanics_list , vehicles_drivers ] ;
44194: LD_ADDR_VAR 0 4
44198: PUSH
44199: LD_VAR 0 2
44203: PUSH
44204: LD_VAR 0 3
44208: PUSH
44209: EMPTY
44210: LIST
44211: LIST
44212: ST_TO_ADDR
// end ;
44213: LD_VAR 0 4
44217: RET
// function FindBestCraneDriver ( base ) ; var i , temp_list ; begin
44218: LD_INT 0
44220: PPUSH
44221: PPUSH
44222: PPUSH
// if ai_mechanics_defend [ base ] = 0 then
44223: LD_EXP 30
44227: PUSH
44228: LD_VAR 0 1
44232: ARRAY
44233: PUSH
44234: LD_INT 0
44236: EQUAL
44237: IFFALSE 44249
// begin result = 0 ;
44239: LD_ADDR_VAR 0 2
44243: PUSH
44244: LD_INT 0
44246: ST_TO_ADDR
// exit ;
44247: GO 44343
// end ; temp_list = [ ] ;
44249: LD_ADDR_VAR 0 4
44253: PUSH
44254: EMPTY
44255: ST_TO_ADDR
// for i in ai_mechanics_defend [ base ] do
44256: LD_ADDR_VAR 0 3
44260: PUSH
44261: LD_EXP 30
44265: PUSH
44266: LD_VAR 0 1
44270: ARRAY
44271: PUSH
44272: FOR_IN
44273: IFFALSE 44315
// temp_list = temp_list ^ ( GetSkill ( i , skill_engineering ) + GetSkill ( i , skill_mechanical ) ) ;
44275: LD_ADDR_VAR 0 4
44279: PUSH
44280: LD_VAR 0 4
44284: PUSH
44285: LD_VAR 0 3
44289: PPUSH
44290: LD_INT 2
44292: PPUSH
44293: CALL_OW 259
44297: PUSH
44298: LD_VAR 0 3
44302: PPUSH
44303: LD_INT 3
44305: PPUSH
44306: CALL_OW 259
44310: PLUS
44311: ADD
44312: ST_TO_ADDR
44313: GO 44272
44315: POP
44316: POP
// result = BestFromListByList ( ai_mechanics_defend [ base ] , temp_list ) ;
44317: LD_ADDR_VAR 0 2
44321: PUSH
44322: LD_EXP 30
44326: PUSH
44327: LD_VAR 0 1
44331: ARRAY
44332: PPUSH
44333: LD_VAR 0 4
44337: PPUSH
44338: CALL_OW 79
44342: ST_TO_ADDR
// end ;
44343: LD_VAR 0 2
44347: RET
// every 0 0$1.1 do var base , i , temp_list , veh , mechanics_list , hex_list ; var has_been_seen ;
44348: GO 44350
44350: DISABLE
44351: LD_INT 0
44353: PPUSH
44354: PPUSH
44355: PPUSH
44356: PPUSH
44357: PPUSH
44358: PPUSH
44359: PPUSH
// begin has_been_seen = false ;
44360: LD_ADDR_VAR 0 7
44364: PUSH
44365: LD_INT 0
44367: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
44368: LD_INT 35
44370: PPUSH
44371: CALL_OW 67
// for base in ai_bases do
44375: LD_ADDR_VAR 0 1
44379: PUSH
44380: LD_EXP 26
44384: PUSH
44385: FOR_IN
44386: IFFALSE 45042
// begin if ai_sib_bomb_mechanics [ base ] = 0 then
44388: LD_EXP 52
44392: PUSH
44393: LD_VAR 0 1
44397: ARRAY
44398: PUSH
44399: LD_INT 0
44401: EQUAL
44402: IFFALSE 44406
// continue ;
44404: GO 44385
// mechanics_list = ai_sib_bomb_mechanics [ base ] diff ai_heal_these_humans [ base ] ;
44406: LD_ADDR_VAR 0 5
44410: PUSH
44411: LD_EXP 52
44415: PUSH
44416: LD_VAR 0 1
44420: ARRAY
44421: PUSH
44422: LD_EXP 61
44426: PUSH
44427: LD_VAR 0 1
44431: ARRAY
44432: DIFF
44433: ST_TO_ADDR
// for i in mechanics_list do
44434: LD_ADDR_VAR 0 2
44438: PUSH
44439: LD_VAR 0 5
44443: PUSH
44444: FOR_IN
44445: IFFALSE 44831
// begin veh = IsInUnit ( i ) ;
44447: LD_ADDR_VAR 0 4
44451: PUSH
44452: LD_VAR 0 2
44456: PPUSH
44457: CALL_OW 310
44461: ST_TO_ADDR
// if veh > 0 and GetType ( veh ) = unit_vehicle then
44462: LD_VAR 0 4
44466: PUSH
44467: LD_INT 0
44469: GREATER
44470: PUSH
44471: LD_VAR 0 4
44475: PPUSH
44476: CALL_OW 247
44480: PUSH
44481: LD_INT 2
44483: EQUAL
44484: AND
44485: IFFALSE 44829
// begin mechanics_list = mechanics_list diff i ;
44487: LD_ADDR_VAR 0 5
44491: PUSH
44492: LD_VAR 0 5
44496: PUSH
44497: LD_VAR 0 2
44501: DIFF
44502: ST_TO_ADDR
// if GetWeapon ( veh ) = us_siberium_rocket then
44503: LD_VAR 0 4
44507: PPUSH
44508: CALL_OW 264
44512: PUSH
44513: LD_INT 8
44515: EQUAL
44516: IFFALSE 44820
// begin if not has_been_seen and not See ( you , ai_sib_bomb_fact [ base ] ) and FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , GetBaseArea ( 2 ) ] ] ) = 0 then
44518: LD_VAR 0 7
44522: NOT
44523: PUSH
44524: LD_EXP 2
44528: PPUSH
44529: LD_EXP 50
44533: PUSH
44534: LD_VAR 0 1
44538: ARRAY
44539: PPUSH
44540: CALL_OW 292
44544: NOT
44545: AND
44546: PUSH
44547: LD_INT 22
44549: PUSH
44550: LD_EXP 2
44554: PUSH
44555: EMPTY
44556: LIST
44557: LIST
44558: PUSH
44559: LD_INT 95
44561: PUSH
44562: LD_INT 2
44564: PPUSH
44565: CALL 18845 0 1
44569: PUSH
44570: EMPTY
44571: LIST
44572: LIST
44573: PUSH
44574: EMPTY
44575: LIST
44576: LIST
44577: PPUSH
44578: CALL_OW 69
44582: PUSH
44583: LD_INT 0
44585: EQUAL
44586: AND
44587: IFFALSE 44633
// begin ExclusiveOn ;
44589: CALL_OW 4
// CenterNowOnXY ( 138 , 116 ) ;
44593: LD_INT 138
44595: PPUSH
44596: LD_INT 116
44598: PPUSH
44599: CALL_OW 86
// SendSiberiteRocket ( 138 , 116 ) ;
44603: LD_INT 138
44605: PPUSH
44606: LD_INT 116
44608: PPUSH
44609: CALL_OW 429
// wait ( 0 0$8 ) ;
44613: LD_INT 280
44615: PPUSH
44616: CALL_OW 67
// YouLost ( SibRocketFired ) ;
44620: LD_STRING SibRocketFired
44622: PPUSH
44623: CALL_OW 104
// ExclusiveOff ;
44627: CALL_OW 5
// end else
44631: GO 44818
// begin has_been_seen = true ;
44633: LD_ADDR_VAR 0 7
44637: PUSH
44638: LD_INT 1
44640: ST_TO_ADDR
// hex_list = [ [ 86 , 35 ] , [ 88 , 71 ] , [ 73 , 82 ] ] ;
44641: LD_ADDR_VAR 0 6
44645: PUSH
44646: LD_INT 86
44648: PUSH
44649: LD_INT 35
44651: PUSH
44652: EMPTY
44653: LIST
44654: LIST
44655: PUSH
44656: LD_INT 88
44658: PUSH
44659: LD_INT 71
44661: PUSH
44662: EMPTY
44663: LIST
44664: LIST
44665: PUSH
44666: LD_INT 73
44668: PUSH
44669: LD_INT 82
44671: PUSH
44672: EMPTY
44673: LIST
44674: LIST
44675: PUSH
44676: EMPTY
44677: LIST
44678: LIST
44679: LIST
44680: ST_TO_ADDR
// temp_list = [ ] ;
44681: LD_ADDR_VAR 0 3
44685: PUSH
44686: EMPTY
44687: ST_TO_ADDR
// for i in hex_list do
44688: LD_ADDR_VAR 0 2
44692: PUSH
44693: LD_VAR 0 6
44697: PUSH
44698: FOR_IN
44699: IFFALSE 44769
// temp_list = temp_list ^ ( FilterAllUnits ( [ [ f_side , you ] , [ f_distxy , i [ 1 ] , i [ 2 ] , 18 ] ] ) + 0 ) ;
44701: LD_ADDR_VAR 0 3
44705: PUSH
44706: LD_VAR 0 3
44710: PUSH
44711: LD_INT 22
44713: PUSH
44714: LD_EXP 2
44718: PUSH
44719: EMPTY
44720: LIST
44721: LIST
44722: PUSH
44723: LD_INT 92
44725: PUSH
44726: LD_VAR 0 2
44730: PUSH
44731: LD_INT 1
44733: ARRAY
44734: PUSH
44735: LD_VAR 0 2
44739: PUSH
44740: LD_INT 2
44742: ARRAY
44743: PUSH
44744: LD_INT 18
44746: PUSH
44747: EMPTY
44748: LIST
44749: LIST
44750: LIST
44751: LIST
44752: PUSH
44753: EMPTY
44754: LIST
44755: LIST
44756: PPUSH
44757: CALL_OW 69
44761: PUSH
44762: LD_INT 0
44764: PLUS
44765: ADD
44766: ST_TO_ADDR
44767: GO 44698
44769: POP
44770: POP
// i = BestFromListByList ( hex_list , temp_list ) ;
44771: LD_ADDR_VAR 0 2
44775: PUSH
44776: LD_VAR 0 6
44780: PPUSH
44781: LD_VAR 0 3
44785: PPUSH
44786: CALL_OW 79
44790: ST_TO_ADDR
// ComAttackPlace ( veh , i [ 1 ] , i [ 2 ] ) ;
44791: LD_VAR 0 4
44795: PPUSH
44796: LD_VAR 0 2
44800: PUSH
44801: LD_INT 1
44803: ARRAY
44804: PPUSH
44805: LD_VAR 0 2
44809: PUSH
44810: LD_INT 2
44812: ARRAY
44813: PPUSH
44814: CALL_OW 116
// end ; end else
44818: GO 44829
// ComExitVehicle ( i ) ;
44820: LD_VAR 0 2
44824: PPUSH
44825: CALL_OW 121
// end ; end ;
44829: GO 44444
44831: POP
44832: POP
// temp_list = ai_heal_these_humans [ base ] ;
44833: LD_ADDR_VAR 0 3
44837: PUSH
44838: LD_EXP 61
44842: PUSH
44843: LD_VAR 0 1
44847: ARRAY
44848: ST_TO_ADDR
// i = 1 ;
44849: LD_ADDR_VAR 0 2
44853: PUSH
44854: LD_INT 1
44856: ST_TO_ADDR
// while i <= mechanics_list do
44857: LD_VAR 0 2
44861: PUSH
44862: LD_VAR 0 5
44866: LESSEQUAL
44867: IFFALSE 44950
// begin if GetLives ( mechanics_list [ i ] ) <= 900 then
44869: LD_VAR 0 5
44873: PUSH
44874: LD_VAR 0 2
44878: ARRAY
44879: PPUSH
44880: CALL_OW 256
44884: PUSH
44885: LD_INT 900
44887: LESSEQUAL
44888: IFFALSE 44934
// begin temp_list = temp_list ^ mechanics_list [ i ] ;
44890: LD_ADDR_VAR 0 3
44894: PUSH
44895: LD_VAR 0 3
44899: PUSH
44900: LD_VAR 0 5
44904: PUSH
44905: LD_VAR 0 2
44909: ARRAY
44910: ADD
44911: ST_TO_ADDR
// mechanics_list = Delete ( mechanics_list , i ) ;
44912: LD_ADDR_VAR 0 5
44916: PUSH
44917: LD_VAR 0 5
44921: PPUSH
44922: LD_VAR 0 2
44926: PPUSH
44927: CALL_OW 3
44931: ST_TO_ADDR
// continue ;
44932: GO 44857
// end ; i = i + 1 ;
44934: LD_ADDR_VAR 0 2
44938: PUSH
44939: LD_VAR 0 2
44943: PUSH
44944: LD_INT 1
44946: PLUS
44947: ST_TO_ADDR
// end ;
44948: GO 44857
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
44950: LD_ADDR_EXP 61
44954: PUSH
44955: LD_EXP 61
44959: PPUSH
44960: LD_VAR 0 1
44964: PPUSH
44965: LD_VAR 0 3
44969: PPUSH
44970: CALL_OW 1
44974: ST_TO_ADDR
// DistributeHumansToBuildings ( base , mechanics_list , UnitFilter ( ai_sib_bomb_fact [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
44975: LD_VAR 0 1
44979: PPUSH
44980: LD_VAR 0 5
44984: PPUSH
44985: LD_EXP 50
44989: PUSH
44990: LD_VAR 0 1
44994: ARRAY
44995: PPUSH
44996: LD_INT 50
44998: PUSH
44999: EMPTY
45000: LIST
45001: PUSH
45002: LD_INT 3
45004: PUSH
45005: LD_INT 57
45007: PUSH
45008: EMPTY
45009: LIST
45010: PUSH
45011: EMPTY
45012: LIST
45013: LIST
45014: PUSH
45015: EMPTY
45016: LIST
45017: LIST
45018: PPUSH
45019: CALL_OW 72
45023: PPUSH
45024: LD_INT 3
45026: PPUSH
45027: LD_INT 6
45029: PPUSH
45030: LD_INT 1
45032: PPUSH
45033: LD_INT 0
45035: PPUSH
45036: CALL 22559 0 7
// end ;
45040: GO 44385
45042: POP
45043: POP
// until false ;
45044: LD_INT 0
45046: IFFALSE 44368
// end ;
45048: PPOPN 7
45050: END
// function OnSiberiteRocketExploded_AmBomb ( siberite_rocket_vehicle , target_x , target_y ) ; begin
45051: LD_INT 0
45053: PPUSH
// ExclusiveOn ;
45054: CALL_OW 4
// CenterNowOnXY ( target_x , target_y ) ;
45058: LD_VAR 0 2
45062: PPUSH
45063: LD_VAR 0 3
45067: PPUSH
45068: CALL_OW 86
// wait ( 0 0$8 ) ;
45072: LD_INT 280
45074: PPUSH
45075: CALL_OW 67
// YouLost ( SibRocketFired ) ;
45079: LD_STRING SibRocketFired
45081: PPUSH
45082: CALL_OW 104
// ExclusiveOff ;
45086: CALL_OW 5
// end ;
45090: LD_VAR 0 4
45094: RET
// function MaxNumWarVehiclesDefend ( base ) ; var time ; begin
45095: LD_INT 0
45097: PPUSH
45098: PPUSH
// case base of 1 :
45099: LD_VAR 0 1
45103: PUSH
45104: LD_INT 1
45106: DOUBLE
45107: EQUAL
45108: IFTRUE 45112
45110: GO 45123
45112: POP
// result = 0 ; 2 :
45113: LD_ADDR_VAR 0 2
45117: PUSH
45118: LD_INT 0
45120: ST_TO_ADDR
45121: GO 45198
45123: LD_INT 2
45125: DOUBLE
45126: EQUAL
45127: IFTRUE 45131
45129: GO 45159
45131: POP
// result = [ 3 , 4 , 5 ] [ difficulty ] ; 3 :
45132: LD_ADDR_VAR 0 2
45136: PUSH
45137: LD_INT 3
45139: PUSH
45140: LD_INT 4
45142: PUSH
45143: LD_INT 5
45145: PUSH
45146: EMPTY
45147: LIST
45148: LIST
45149: LIST
45150: PUSH
45151: LD_OWVAR 67
45155: ARRAY
45156: ST_TO_ADDR
45157: GO 45198
45159: LD_INT 3
45161: DOUBLE
45162: EQUAL
45163: IFTRUE 45167
45165: GO 45178
45167: POP
// result = 0 ; 4 :
45168: LD_ADDR_VAR 0 2
45172: PUSH
45173: LD_INT 0
45175: ST_TO_ADDR
45176: GO 45198
45178: LD_INT 4
45180: DOUBLE
45181: EQUAL
45182: IFTRUE 45186
45184: GO 45197
45186: POP
// result = 0 ; end ;
45187: LD_ADDR_VAR 0 2
45191: PUSH
45192: LD_INT 0
45194: ST_TO_ADDR
45195: GO 45198
45197: POP
// end ;
45198: LD_VAR 0 2
45202: RET
// every 0 0$1 + 0 0$0.6 do var i , temp_value , temp_unit , temp_list , base , idle_factories , fact , b , construct_list ; var vehicle_prod_delay , saved_construct_list , under_attack ;
45203: GO 45205
45205: DISABLE
45206: LD_INT 0
45208: PPUSH
45209: PPUSH
45210: PPUSH
45211: PPUSH
45212: PPUSH
45213: PPUSH
45214: PPUSH
45215: PPUSH
45216: PPUSH
45217: PPUSH
45218: PPUSH
45219: PPUSH
// begin vehicle_prod_delay = [ 0 0$0 , 0 0$0 , 0 0$0 , 0 0$0 ] ;
45220: LD_ADDR_VAR 0 10
45224: PUSH
45225: LD_INT 0
45227: PUSH
45228: LD_INT 0
45230: PUSH
45231: LD_INT 0
45233: PUSH
45234: LD_INT 0
45236: PUSH
45237: EMPTY
45238: LIST
45239: LIST
45240: LIST
45241: LIST
45242: ST_TO_ADDR
// saved_construct_list = [ [ ] , [ ] , [ ] , [ ] ] ;
45243: LD_ADDR_VAR 0 11
45247: PUSH
45248: EMPTY
45249: PUSH
45250: EMPTY
45251: PUSH
45252: EMPTY
45253: PUSH
45254: EMPTY
45255: PUSH
45256: EMPTY
45257: LIST
45258: LIST
45259: LIST
45260: LIST
45261: ST_TO_ADDR
// repeat if ai_bases = 0 then
45262: LD_EXP 26
45266: PUSH
45267: LD_INT 0
45269: EQUAL
45270: IFFALSE 45274
// exit ;
45272: GO 46964
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
45274: LD_INT 35
45276: PUSH
45277: LD_EXP 26
45281: PUSH
45282: LD_INT 0
45284: PLUS
45285: MOD
45286: PPUSH
45287: CALL_OW 67
// for base in ai_bases do
45291: LD_ADDR_VAR 0 5
45295: PUSH
45296: LD_EXP 26
45300: PUSH
45301: FOR_IN
45302: IFFALSE 46958
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
45304: LD_INT 35
45306: PUSH
45307: LD_EXP 26
45311: PUSH
45312: LD_INT 0
45314: PLUS
45315: DIV
45316: PPUSH
45317: CALL_OW 67
// under_attack = BaseUnderAttack ( base , - 1 ) ;
45321: LD_ADDR_VAR 0 12
45325: PUSH
45326: LD_VAR 0 5
45330: PPUSH
45331: LD_INT 1
45333: NEG
45334: PPUSH
45335: CALL 32934 0 2
45339: ST_TO_ADDR
// if under_attack and difficulty < 3 and ai_vehicles_defend [ base ] >= [ 1 , 2 , - 1 ] [ difficulty ] then
45340: LD_VAR 0 12
45344: PUSH
45345: LD_OWVAR 67
45349: PUSH
45350: LD_INT 3
45352: LESS
45353: AND
45354: PUSH
45355: LD_EXP 53
45359: PUSH
45360: LD_VAR 0 5
45364: ARRAY
45365: PUSH
45366: LD_INT 1
45368: PUSH
45369: LD_INT 2
45371: PUSH
45372: LD_INT 1
45374: NEG
45375: PUSH
45376: EMPTY
45377: LIST
45378: LIST
45379: LIST
45380: PUSH
45381: LD_OWVAR 67
45385: ARRAY
45386: GREATEREQUAL
45387: AND
45388: IFFALSE 45431
// begin vehicle_prod_delay = Replace ( vehicle_prod_delay , base , [ 1 1$0 , 0 0$30 , - 1 ] [ difficulty ] ) ;
45390: LD_ADDR_VAR 0 10
45394: PUSH
45395: LD_VAR 0 10
45399: PPUSH
45400: LD_VAR 0 5
45404: PPUSH
45405: LD_INT 2100
45407: PUSH
45408: LD_INT 1050
45410: PUSH
45411: LD_INT 1
45413: NEG
45414: PUSH
45415: EMPTY
45416: LIST
45417: LIST
45418: LIST
45419: PUSH
45420: LD_OWVAR 67
45424: ARRAY
45425: PPUSH
45426: CALL_OW 1
45430: ST_TO_ADDR
// end ; idle_factories = [ ] ;
45431: LD_ADDR_VAR 0 6
45435: PUSH
45436: EMPTY
45437: ST_TO_ADDR
// for i in ai_facts [ base ] diff ai_sib_bomb_fact [ base ] do
45438: LD_ADDR_VAR 0 1
45442: PUSH
45443: LD_EXP 38
45447: PUSH
45448: LD_VAR 0 5
45452: ARRAY
45453: PUSH
45454: LD_EXP 50
45458: PUSH
45459: LD_VAR 0 5
45463: ARRAY
45464: DIFF
45465: PUSH
45466: FOR_IN
45467: IFFALSE 45578
// if BuildingStatus ( i ) = bs_idle and IsOk ( i ) and GetBType ( i ) = b_factory then
45469: LD_VAR 0 1
45473: PPUSH
45474: CALL_OW 461
45478: PUSH
45479: LD_INT 2
45481: EQUAL
45482: PUSH
45483: LD_VAR 0 1
45487: PPUSH
45488: CALL_OW 302
45492: AND
45493: PUSH
45494: LD_VAR 0 1
45498: PPUSH
45499: CALL_OW 266
45503: PUSH
45504: LD_INT 3
45506: EQUAL
45507: AND
45508: IFFALSE 45576
// begin b = true ;
45510: LD_ADDR_VAR 0 8
45514: PUSH
45515: LD_INT 1
45517: ST_TO_ADDR
// if ai_facts_with_ext_rebuild_map >= i then
45518: LD_EXP 94
45522: PUSH
45523: LD_VAR 0 1
45527: GREATEREQUAL
45528: IFFALSE 45554
// if ai_facts_with_ext_rebuild_map [ i ] > 0 then
45530: LD_EXP 94
45534: PUSH
45535: LD_VAR 0 1
45539: ARRAY
45540: PUSH
45541: LD_INT 0
45543: GREATER
45544: IFFALSE 45554
// b = false ;
45546: LD_ADDR_VAR 0 8
45550: PUSH
45551: LD_INT 0
45553: ST_TO_ADDR
// if b then
45554: LD_VAR 0 8
45558: IFFALSE 45576
// idle_factories = idle_factories ^ i ;
45560: LD_ADDR_VAR 0 6
45564: PUSH
45565: LD_VAR 0 6
45569: PUSH
45570: LD_VAR 0 1
45574: ADD
45575: ST_TO_ADDR
// end ;
45576: GO 45466
45578: POP
45579: POP
// if idle_factories = 0 then
45580: LD_VAR 0 6
45584: PUSH
45585: LD_INT 0
45587: EQUAL
45588: IFFALSE 45592
// continue ;
45590: GO 45301
// temp_value = false ;
45592: LD_ADDR_VAR 0 2
45596: PUSH
45597: LD_INT 0
45599: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
45600: LD_ADDR_VAR 0 1
45604: PUSH
45605: LD_EXP 48
45609: PUSH
45610: LD_VAR 0 5
45614: ARRAY
45615: PUSH
45616: FOR_IN
45617: IFFALSE 45861
// if i [ 4 ] in [ b_bunker , b_turret ] then
45619: LD_VAR 0 1
45623: PUSH
45624: LD_INT 4
45626: ARRAY
45627: PUSH
45628: LD_INT 32
45630: PUSH
45631: LD_INT 33
45633: PUSH
45634: EMPTY
45635: LIST
45636: LIST
45637: IN
45638: IFFALSE 45859
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
45640: LD_ADDR_VAR 0 3
45644: PUSH
45645: LD_VAR 0 1
45649: PUSH
45650: LD_INT 1
45652: ARRAY
45653: PPUSH
45654: LD_VAR 0 1
45658: PUSH
45659: LD_INT 2
45661: ARRAY
45662: PPUSH
45663: CALL_OW 428
45667: ST_TO_ADDR
// if GetBType ( temp_unit ) in [ b_bunker , b_turret ] and not IsConstructed ( temp_unit ) and GetBWeapon ( temp_unit ) = 0 then
45668: LD_VAR 0 3
45672: PPUSH
45673: CALL_OW 266
45677: PUSH
45678: LD_INT 32
45680: PUSH
45681: LD_INT 33
45683: PUSH
45684: EMPTY
45685: LIST
45686: LIST
45687: IN
45688: PUSH
45689: LD_VAR 0 3
45693: PPUSH
45694: CALL_OW 304
45698: NOT
45699: AND
45700: PUSH
45701: LD_VAR 0 3
45705: PPUSH
45706: CALL_OW 269
45710: PUSH
45711: LD_INT 0
45713: EQUAL
45714: AND
45715: IFFALSE 45859
// begin b = false ;
45717: LD_ADDR_VAR 0 8
45721: PUSH
45722: LD_INT 0
45724: ST_TO_ADDR
// if not under_attack then
45725: LD_VAR 0 12
45729: NOT
45730: IFFALSE 45742
// b = true else
45732: LD_ADDR_VAR 0 8
45736: PUSH
45737: LD_INT 1
45739: ST_TO_ADDR
45740: GO 45781
// begin if CanFactConstructThis ( idle_factories [ 1 ] , i [ 7 ] , false ) = 1 then
45742: LD_VAR 0 6
45746: PUSH
45747: LD_INT 1
45749: ARRAY
45750: PPUSH
45751: LD_VAR 0 1
45755: PUSH
45756: LD_INT 7
45758: ARRAY
45759: PPUSH
45760: LD_INT 0
45762: PPUSH
45763: CALL 47128 0 3
45767: PUSH
45768: LD_INT 1
45770: EQUAL
45771: IFFALSE 45781
// b = true ;
45773: LD_ADDR_VAR 0 8
45777: PUSH
45778: LD_INT 1
45780: ST_TO_ADDR
// end ; if b then
45781: LD_VAR 0 8
45785: IFFALSE 45859
// begin if FactConstruct ( base , [ idle_factories [ 1 ] ] , [ temp_unit , - 1 , - 1 , i [ 7 ] ] ) in [ 0 , 1 ] then
45787: LD_VAR 0 5
45791: PPUSH
45792: LD_VAR 0 6
45796: PUSH
45797: LD_INT 1
45799: ARRAY
45800: PUSH
45801: EMPTY
45802: LIST
45803: PPUSH
45804: LD_VAR 0 3
45808: PUSH
45809: LD_INT 1
45811: NEG
45812: PUSH
45813: LD_INT 1
45815: NEG
45816: PUSH
45817: LD_VAR 0 1
45821: PUSH
45822: LD_INT 7
45824: ARRAY
45825: PUSH
45826: EMPTY
45827: LIST
45828: LIST
45829: LIST
45830: LIST
45831: PPUSH
45832: CALL 46967 0 3
45836: PUSH
45837: LD_INT 0
45839: PUSH
45840: LD_INT 1
45842: PUSH
45843: EMPTY
45844: LIST
45845: LIST
45846: IN
45847: IFFALSE 45859
// begin temp_value = true ;
45849: LD_ADDR_VAR 0 2
45853: PUSH
45854: LD_INT 1
45856: ST_TO_ADDR
// break ;
45857: GO 45861
// end ; end ; end ; end ;
45859: GO 45616
45861: POP
45862: POP
// if temp_value then
45863: LD_VAR 0 2
45867: IFFALSE 45871
// continue ;
45869: GO 45301
// if base = 2 and not under_attack then
45871: LD_VAR 0 5
45875: PUSH
45876: LD_INT 2
45878: EQUAL
45879: PUSH
45880: LD_VAR 0 12
45884: NOT
45885: AND
45886: IFFALSE 46056
// begin if ai_cargo_bay [ base ] = 0 and not ai_cargo_bay_under_construction [ base ] and tick - ai_cargo_bay_destroy_tick [ base ] >= [ 6 6$0 , 4 4$0 , 2 2$0 ] [ difficulty ] then
45888: LD_EXP 71
45892: PUSH
45893: LD_VAR 0 5
45897: ARRAY
45898: PUSH
45899: LD_INT 0
45901: EQUAL
45902: PUSH
45903: LD_EXP 72
45907: PUSH
45908: LD_VAR 0 5
45912: ARRAY
45913: NOT
45914: AND
45915: PUSH
45916: LD_OWVAR 1
45920: PUSH
45921: LD_EXP 73
45925: PUSH
45926: LD_VAR 0 5
45930: ARRAY
45931: MINUS
45932: PUSH
45933: LD_INT 12600
45935: PUSH
45936: LD_INT 8400
45938: PUSH
45939: LD_INT 4200
45941: PUSH
45942: EMPTY
45943: LIST
45944: LIST
45945: LIST
45946: PUSH
45947: LD_OWVAR 67
45951: ARRAY
45952: GREATEREQUAL
45953: AND
45954: IFFALSE 46056
// begin temp_list = [ us_medium_wheeled , engine_siberite , control_remote , us_cargo_bay ] ;
45956: LD_ADDR_VAR 0 4
45960: PUSH
45961: LD_INT 2
45963: PUSH
45964: LD_INT 3
45966: PUSH
45967: LD_INT 2
45969: PUSH
45970: LD_INT 12
45972: PUSH
45973: EMPTY
45974: LIST
45975: LIST
45976: LIST
45977: LIST
45978: ST_TO_ADDR
// b = FactConstruct ( base , idle_factories , temp_list ) ;
45979: LD_ADDR_VAR 0 8
45983: PUSH
45984: LD_VAR 0 5
45988: PPUSH
45989: LD_VAR 0 6
45993: PPUSH
45994: LD_VAR 0 4
45998: PPUSH
45999: CALL 46967 0 3
46003: ST_TO_ADDR
// if b in [ 0 , 1 ] then
46004: LD_VAR 0 8
46008: PUSH
46009: LD_INT 0
46011: PUSH
46012: LD_INT 1
46014: PUSH
46015: EMPTY
46016: LIST
46017: LIST
46018: IN
46019: IFFALSE 46056
// begin if b = 1 then
46021: LD_VAR 0 8
46025: PUSH
46026: LD_INT 1
46028: EQUAL
46029: IFFALSE 46054
// ai_cargo_bay_under_construction = Replace ( ai_cargo_bay_under_construction , base , true ) ;
46031: LD_ADDR_EXP 72
46035: PUSH
46036: LD_EXP 72
46040: PPUSH
46041: LD_VAR 0 5
46045: PPUSH
46046: LD_INT 1
46048: PPUSH
46049: CALL_OW 1
46053: ST_TO_ADDR
// continue ;
46054: GO 45301
// end ; end ; end ; if base = 2 and difficulty > 1 then
46056: LD_VAR 0 5
46060: PUSH
46061: LD_INT 2
46063: EQUAL
46064: PUSH
46065: LD_OWVAR 67
46069: PUSH
46070: LD_INT 1
46072: GREATER
46073: AND
46074: IFFALSE 46366
// begin if ai_crane [ base ] = 0 and not ai_crane_under_construction [ base ] and tick - ai_crane_destroy_tick [ base ] >= [ 4 4$0 , 2 2$0 , 0 0$0 ] [ difficulty ] then
46076: LD_EXP 74
46080: PUSH
46081: LD_VAR 0 5
46085: ARRAY
46086: PUSH
46087: LD_INT 0
46089: EQUAL
46090: PUSH
46091: LD_EXP 75
46095: PUSH
46096: LD_VAR 0 5
46100: ARRAY
46101: NOT
46102: AND
46103: PUSH
46104: LD_OWVAR 1
46108: PUSH
46109: LD_EXP 76
46113: PUSH
46114: LD_VAR 0 5
46118: ARRAY
46119: MINUS
46120: PUSH
46121: LD_INT 8400
46123: PUSH
46124: LD_INT 4200
46126: PUSH
46127: LD_INT 0
46129: PUSH
46130: EMPTY
46131: LIST
46132: LIST
46133: LIST
46134: PUSH
46135: LD_OWVAR 67
46139: ARRAY
46140: GREATEREQUAL
46141: AND
46142: IFFALSE 46366
// begin temp_list = [ us_medium_tracked , engine_siberite , control_remote , us_crane ] ;
46144: LD_ADDR_VAR 0 4
46148: PUSH
46149: LD_INT 3
46151: PUSH
46152: LD_INT 3
46154: PUSH
46155: LD_INT 2
46157: PUSH
46158: LD_INT 13
46160: PUSH
46161: EMPTY
46162: LIST
46163: LIST
46164: LIST
46165: LIST
46166: ST_TO_ADDR
// if ai_mechanics_defend [ base ] + ai_mechanics_attack [ base ] <= 1 then
46167: LD_EXP 30
46171: PUSH
46172: LD_VAR 0 5
46176: ARRAY
46177: PUSH
46178: LD_EXP 31
46182: PUSH
46183: LD_VAR 0 5
46187: ARRAY
46188: PLUS
46189: PUSH
46190: LD_INT 1
46192: LESSEQUAL
46193: IFFALSE 46202
// temp_list = [ ] ;
46195: LD_ADDR_VAR 0 4
46199: PUSH
46200: EMPTY
46201: ST_TO_ADDR
// if temp_list > 0 then
46202: LD_VAR 0 4
46206: PUSH
46207: LD_INT 0
46209: GREATER
46210: IFFALSE 46366
// begin b = false ;
46212: LD_ADDR_VAR 0 8
46216: PUSH
46217: LD_INT 0
46219: ST_TO_ADDR
// if not under_attack then
46220: LD_VAR 0 12
46224: NOT
46225: IFFALSE 46237
// b = true else
46227: LD_ADDR_VAR 0 8
46231: PUSH
46232: LD_INT 1
46234: ST_TO_ADDR
46235: GO 46276
// begin if CanFactConstructThis ( idle_factories [ 1 ] , temp_list [ 4 ] , false ) = 1 then
46237: LD_VAR 0 6
46241: PUSH
46242: LD_INT 1
46244: ARRAY
46245: PPUSH
46246: LD_VAR 0 4
46250: PUSH
46251: LD_INT 4
46253: ARRAY
46254: PPUSH
46255: LD_INT 0
46257: PPUSH
46258: CALL 47128 0 3
46262: PUSH
46263: LD_INT 1
46265: EQUAL
46266: IFFALSE 46276
// b = true ;
46268: LD_ADDR_VAR 0 8
46272: PUSH
46273: LD_INT 1
46275: ST_TO_ADDR
// end ; if b then
46276: LD_VAR 0 8
46280: IFFALSE 46366
// begin b = FactConstruct ( base , [ idle_factories [ 1 ] ] , temp_list ) ;
46282: LD_ADDR_VAR 0 8
46286: PUSH
46287: LD_VAR 0 5
46291: PPUSH
46292: LD_VAR 0 6
46296: PUSH
46297: LD_INT 1
46299: ARRAY
46300: PUSH
46301: EMPTY
46302: LIST
46303: PPUSH
46304: LD_VAR 0 4
46308: PPUSH
46309: CALL 46967 0 3
46313: ST_TO_ADDR
// if b in [ 0 , 1 ] then
46314: LD_VAR 0 8
46318: PUSH
46319: LD_INT 0
46321: PUSH
46322: LD_INT 1
46324: PUSH
46325: EMPTY
46326: LIST
46327: LIST
46328: IN
46329: IFFALSE 46366
// begin if b = 1 then
46331: LD_VAR 0 8
46335: PUSH
46336: LD_INT 1
46338: EQUAL
46339: IFFALSE 46364
// ai_crane_under_construction = Replace ( ai_crane_under_construction , base , true ) ;
46341: LD_ADDR_EXP 75
46345: PUSH
46346: LD_EXP 75
46350: PPUSH
46351: LD_VAR 0 5
46355: PPUSH
46356: LD_INT 1
46358: PPUSH
46359: CALL_OW 1
46363: ST_TO_ADDR
// continue ;
46364: GO 45301
// end ; end ; end ; end ; end ; if vehicle_prod_delay [ base ] > 0 0$0 then
46366: LD_VAR 0 10
46370: PUSH
46371: LD_VAR 0 5
46375: ARRAY
46376: PUSH
46377: LD_INT 0
46379: GREATER
46380: IFFALSE 46419
// begin vehicle_prod_delay = Replace ( vehicle_prod_delay , base , vehicle_prod_delay [ base ] - 0 0$1 ) ;
46382: LD_ADDR_VAR 0 10
46386: PUSH
46387: LD_VAR 0 10
46391: PPUSH
46392: LD_VAR 0 5
46396: PPUSH
46397: LD_VAR 0 10
46401: PUSH
46402: LD_VAR 0 5
46406: ARRAY
46407: PUSH
46408: LD_INT 35
46410: MINUS
46411: PPUSH
46412: CALL_OW 1
46416: ST_TO_ADDR
// continue ;
46417: GO 45301
// end ; if ai_vehicles_defend [ base ] < MaxNumWarVehiclesDefend ( base ) then
46419: LD_EXP 53
46423: PUSH
46424: LD_VAR 0 5
46428: ARRAY
46429: PUSH
46430: LD_VAR 0 5
46434: PPUSH
46435: CALL 45095 0 1
46439: LESS
46440: IFFALSE 46956
// begin if saved_construct_list [ base ] > 0 and not under_attack then
46442: LD_VAR 0 11
46446: PUSH
46447: LD_VAR 0 5
46451: ARRAY
46452: PUSH
46453: LD_INT 0
46455: GREATER
46456: PUSH
46457: LD_VAR 0 12
46461: NOT
46462: AND
46463: IFFALSE 46483
// begin construct_list = saved_construct_list [ base ] ;
46465: LD_ADDR_VAR 0 9
46469: PUSH
46470: LD_VAR 0 11
46474: PUSH
46475: LD_VAR 0 5
46479: ARRAY
46480: ST_TO_ADDR
// end else
46481: GO 46831
// begin construct_list = [ ] ;
46483: LD_ADDR_VAR 0 9
46487: PUSH
46488: EMPTY
46489: ST_TO_ADDR
// case base of 1 :
46490: LD_VAR 0 5
46494: PUSH
46495: LD_INT 1
46497: DOUBLE
46498: EQUAL
46499: IFTRUE 46503
46501: GO 46506
46503: POP
// begin end ; 2 :
46504: GO 46831
46506: LD_INT 2
46508: DOUBLE
46509: EQUAL
46510: IFTRUE 46514
46512: GO 46830
46514: POP
// begin temp_list = [ us_double_gun , us_heavy_gun , us_gatling_gun ] ;
46515: LD_ADDR_VAR 0 4
46519: PUSH
46520: LD_INT 5
46522: PUSH
46523: LD_INT 6
46525: PUSH
46526: LD_INT 4
46528: PUSH
46529: EMPTY
46530: LIST
46531: LIST
46532: LIST
46533: ST_TO_ADDR
// if difficulty >= 2 then
46534: LD_OWVAR 67
46538: PUSH
46539: LD_INT 2
46541: GREATEREQUAL
46542: IFFALSE 46558
// temp_list = temp_list ^ us_gatling_gun ;
46544: LD_ADDR_VAR 0 4
46548: PUSH
46549: LD_VAR 0 4
46553: PUSH
46554: LD_INT 4
46556: ADD
46557: ST_TO_ADDR
// if difficulty = 3 then
46558: LD_OWVAR 67
46562: PUSH
46563: LD_INT 3
46565: EQUAL
46566: IFFALSE 46589
// temp_list = Replace ( temp_list , 1 , us_heavy_gun ) ;
46568: LD_ADDR_VAR 0 4
46572: PUSH
46573: LD_VAR 0 4
46577: PPUSH
46578: LD_INT 1
46580: PPUSH
46581: LD_INT 6
46583: PPUSH
46584: CALL_OW 1
46588: ST_TO_ADDR
// temp_value = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
46589: LD_ADDR_VAR 0 2
46593: PUSH
46594: LD_VAR 0 4
46598: PUSH
46599: LD_INT 1
46601: PPUSH
46602: LD_VAR 0 4
46606: PUSH
46607: LD_INT 0
46609: PLUS
46610: PPUSH
46611: CALL_OW 12
46615: ARRAY
46616: ST_TO_ADDR
// if under_attack then
46617: LD_VAR 0 12
46621: IFFALSE 46658
// if CanFactConstructThis ( idle_factories [ 1 ] , temp_value , false ) <> 1 then
46623: LD_VAR 0 6
46627: PUSH
46628: LD_INT 1
46630: ARRAY
46631: PPUSH
46632: LD_VAR 0 2
46636: PPUSH
46637: LD_INT 0
46639: PPUSH
46640: CALL 47128 0 3
46644: PUSH
46645: LD_INT 1
46647: NONEQUAL
46648: IFFALSE 46658
// temp_value = us_machine_gun ;
46650: LD_ADDR_VAR 0 2
46654: PUSH
46655: LD_INT 2
46657: ST_TO_ADDR
// if Rand ( 1 , [ 2 , 3 , 4 ] [ difficulty ] ) = 1 and not temp_value = us_heavy_gun then
46658: LD_INT 1
46660: PPUSH
46661: LD_INT 2
46663: PUSH
46664: LD_INT 3
46666: PUSH
46667: LD_INT 4
46669: PUSH
46670: EMPTY
46671: LIST
46672: LIST
46673: LIST
46674: PUSH
46675: LD_OWVAR 67
46679: ARRAY
46680: PPUSH
46681: CALL_OW 12
46685: PUSH
46686: LD_INT 1
46688: EQUAL
46689: PUSH
46690: LD_VAR 0 2
46694: PUSH
46695: LD_INT 6
46697: EQUAL
46698: NOT
46699: AND
46700: IFFALSE 46712
// i = us_medium_wheeled else
46702: LD_ADDR_VAR 0 1
46706: PUSH
46707: LD_INT 2
46709: ST_TO_ADDR
46710: GO 46801
// case difficulty of 1 :
46712: LD_OWVAR 67
46716: PUSH
46717: LD_INT 1
46719: DOUBLE
46720: EQUAL
46721: IFTRUE 46725
46723: GO 46736
46725: POP
// i = us_heavy_tracked ; 2 :
46726: LD_ADDR_VAR 0 1
46730: PUSH
46731: LD_INT 4
46733: ST_TO_ADDR
46734: GO 46801
46736: LD_INT 2
46738: DOUBLE
46739: EQUAL
46740: IFTRUE 46744
46742: GO 46781
46744: POP
// begin if Rand ( 1 , 2 ) = 1 then
46745: LD_INT 1
46747: PPUSH
46748: LD_INT 2
46750: PPUSH
46751: CALL_OW 12
46755: PUSH
46756: LD_INT 1
46758: EQUAL
46759: IFFALSE 46771
// i = us_heavy_tracked else
46761: LD_ADDR_VAR 0 1
46765: PUSH
46766: LD_INT 4
46768: ST_TO_ADDR
46769: GO 46779
// i = us_morphling ;
46771: LD_ADDR_VAR 0 1
46775: PUSH
46776: LD_INT 5
46778: ST_TO_ADDR
// end ; 3 :
46779: GO 46801
46781: LD_INT 3
46783: DOUBLE
46784: EQUAL
46785: IFTRUE 46789
46787: GO 46800
46789: POP
// i = us_morphling ; end ;
46790: LD_ADDR_VAR 0 1
46794: PUSH
46795: LD_INT 5
46797: ST_TO_ADDR
46798: GO 46801
46800: POP
// construct_list = [ i , engine_siberite , control_remote , temp_value ] ;
46801: LD_ADDR_VAR 0 9
46805: PUSH
46806: LD_VAR 0 1
46810: PUSH
46811: LD_INT 3
46813: PUSH
46814: LD_INT 2
46816: PUSH
46817: LD_VAR 0 2
46821: PUSH
46822: EMPTY
46823: LIST
46824: LIST
46825: LIST
46826: LIST
46827: ST_TO_ADDR
// end ; end ;
46828: GO 46831
46830: POP
// end ; if construct_list > 0 then
46831: LD_VAR 0 9
46835: PUSH
46836: LD_INT 0
46838: GREATER
46839: IFFALSE 46954
// begin b = FactConstruct ( base , [ idle_factories [ 1 ] ] , construct_list ) ;
46841: LD_ADDR_VAR 0 8
46845: PUSH
46846: LD_VAR 0 5
46850: PPUSH
46851: LD_VAR 0 6
46855: PUSH
46856: LD_INT 1
46858: ARRAY
46859: PUSH
46860: EMPTY
46861: LIST
46862: PPUSH
46863: LD_VAR 0 9
46867: PPUSH
46868: CALL 46967 0 3
46872: ST_TO_ADDR
// case b of 0 :
46873: LD_VAR 0 8
46877: PUSH
46878: LD_INT 0
46880: DOUBLE
46881: EQUAL
46882: IFTRUE 46886
46884: GO 46914
46886: POP
// saved_construct_list = Replace ( saved_construct_list , base , construct_list ) ; 1 , 2 :
46887: LD_ADDR_VAR 0 11
46891: PUSH
46892: LD_VAR 0 11
46896: PPUSH
46897: LD_VAR 0 5
46901: PPUSH
46902: LD_VAR 0 9
46906: PPUSH
46907: CALL_OW 1
46911: ST_TO_ADDR
46912: GO 46954
46914: LD_INT 1
46916: DOUBLE
46917: EQUAL
46918: IFTRUE 46928
46920: LD_INT 2
46922: DOUBLE
46923: EQUAL
46924: IFTRUE 46928
46926: GO 46953
46928: POP
// saved_construct_list = Replace ( saved_construct_list , base , [ ] ) ; end ;
46929: LD_ADDR_VAR 0 11
46933: PUSH
46934: LD_VAR 0 11
46938: PPUSH
46939: LD_VAR 0 5
46943: PPUSH
46944: EMPTY
46945: PPUSH
46946: CALL_OW 1
46950: ST_TO_ADDR
46951: GO 46954
46953: POP
// end ; continue ;
46954: GO 45301
// end ; end ;
46956: GO 45301
46958: POP
46959: POP
// until false ;
46960: LD_INT 0
46962: IFFALSE 45262
// end ;
46964: PPOPN 12
46966: END
// function FactConstruct ( base , fact_list , construct_list ) ; var i , temp_list , map_list , val ; begin
46967: LD_INT 0
46969: PPUSH
46970: PPUSH
46971: PPUSH
46972: PPUSH
46973: PPUSH
// if fact_list = 0 then
46974: LD_VAR 0 2
46978: PUSH
46979: LD_INT 0
46981: EQUAL
46982: IFFALSE 46994
// begin result = 2 ;
46984: LD_ADDR_VAR 0 4
46988: PUSH
46989: LD_INT 2
46991: ST_TO_ADDR
// exit ;
46992: GO 47123
// end ; result = CanFactConstructThis ( fact_list [ 1 ] , construct_list [ 4 ] , true ) ;
46994: LD_ADDR_VAR 0 4
46998: PUSH
46999: LD_VAR 0 2
47003: PUSH
47004: LD_INT 1
47006: ARRAY
47007: PPUSH
47008: LD_VAR 0 3
47012: PUSH
47013: LD_INT 4
47015: ARRAY
47016: PPUSH
47017: LD_INT 1
47019: PPUSH
47020: CALL 47128 0 3
47024: ST_TO_ADDR
// if result = 1 then
47025: LD_VAR 0 4
47029: PUSH
47030: LD_INT 1
47032: EQUAL
47033: IFFALSE 47123
// begin if construct_list [ 2 ] = - 1 then
47035: LD_VAR 0 3
47039: PUSH
47040: LD_INT 2
47042: ARRAY
47043: PUSH
47044: LD_INT 1
47046: NEG
47047: EQUAL
47048: IFFALSE 47074
// ComPlaceWeapon ( construct_list [ 1 ] , construct_list [ 4 ] ) else
47050: LD_VAR 0 3
47054: PUSH
47055: LD_INT 1
47057: ARRAY
47058: PPUSH
47059: LD_VAR 0 3
47063: PUSH
47064: LD_INT 4
47066: ARRAY
47067: PPUSH
47068: CALL_OW 148
47072: GO 47123
// ComConstruct ( fact_list [ 1 ] , construct_list [ 1 ] , construct_list [ 2 ] , construct_list [ 3 ] , construct_list [ 4 ] ) ;
47074: LD_VAR 0 2
47078: PUSH
47079: LD_INT 1
47081: ARRAY
47082: PPUSH
47083: LD_VAR 0 3
47087: PUSH
47088: LD_INT 1
47090: ARRAY
47091: PPUSH
47092: LD_VAR 0 3
47096: PUSH
47097: LD_INT 2
47099: ARRAY
47100: PPUSH
47101: LD_VAR 0 3
47105: PUSH
47106: LD_INT 3
47108: ARRAY
47109: PPUSH
47110: LD_VAR 0 3
47114: PUSH
47115: LD_INT 4
47117: ARRAY
47118: PPUSH
47119: CALL_OW 125
// end ; end ;
47123: LD_VAR 0 4
47127: RET
// function CanFactConstructThis ( fact , weapon , do_something_about_it ) ; var base , i , temp_list , un , loc_list , btype_list_planned , btype_list_exists , temp_list_2 , temp_list_3 , all_needed , currently_needed ; var fact_ext_replace_loc_list ; begin
47128: LD_INT 0
47130: PPUSH
47131: PPUSH
47132: PPUSH
47133: PPUSH
47134: PPUSH
47135: PPUSH
47136: PPUSH
47137: PPUSH
47138: PPUSH
47139: PPUSH
47140: PPUSH
47141: PPUSH
47142: PPUSH
// base = FindBase ( fact ) ;
47143: LD_ADDR_VAR 0 5
47147: PUSH
47148: LD_VAR 0 1
47152: PPUSH
47153: CALL 19125 0 1
47157: ST_TO_ADDR
// if base = 0 then
47158: LD_VAR 0 5
47162: PUSH
47163: LD_INT 0
47165: EQUAL
47166: IFFALSE 47178
// begin result = 2 ;
47168: LD_ADDR_VAR 0 4
47172: PUSH
47173: LD_INT 2
47175: ST_TO_ADDR
// exit ;
47176: GO 49085
// end ; btype_list_planned = [ ] ;
47178: LD_ADDR_VAR 0 10
47182: PUSH
47183: EMPTY
47184: ST_TO_ADDR
// temp_list = [ GetX ( fact ) , GetY ( fact ) ] ;
47185: LD_ADDR_VAR 0 7
47189: PUSH
47190: LD_VAR 0 1
47194: PPUSH
47195: CALL_OW 250
47199: PUSH
47200: LD_VAR 0 1
47204: PPUSH
47205: CALL_OW 251
47209: PUSH
47210: EMPTY
47211: LIST
47212: LIST
47213: ST_TO_ADDR
// for i = 1 to ai_buildings_locations [ base ] + 0 do
47214: LD_ADDR_VAR 0 6
47218: PUSH
47219: DOUBLE
47220: LD_INT 1
47222: DEC
47223: ST_TO_ADDR
47224: LD_EXP 48
47228: PUSH
47229: LD_VAR 0 5
47233: ARRAY
47234: PUSH
47235: LD_INT 0
47237: PLUS
47238: PUSH
47239: FOR_TO
47240: IFFALSE 47521
// if ai_buildings_locations [ base ] [ i ] [ 4 ] in [ b_ext_computer , b_ext_gun , b_ext_noncombat , b_ext_laser , b_ext_radar , b_ext_radio , b_ext_rocket , b_ext_siberium , b_ext_stitch , b_ext_track ] then
47242: LD_EXP 48
47246: PUSH
47247: LD_VAR 0 5
47251: ARRAY
47252: PUSH
47253: LD_VAR 0 6
47257: ARRAY
47258: PUSH
47259: LD_INT 4
47261: ARRAY
47262: PUSH
47263: LD_INT 24
47265: PUSH
47266: LD_INT 17
47268: PUSH
47269: LD_INT 19
47271: PUSH
47272: LD_INT 25
47274: PUSH
47275: LD_INT 20
47277: PUSH
47278: LD_INT 22
47280: PUSH
47281: LD_INT 18
47283: PUSH
47284: LD_INT 21
47286: PUSH
47287: LD_INT 23
47289: PUSH
47290: LD_INT 16
47292: PUSH
47293: EMPTY
47294: LIST
47295: LIST
47296: LIST
47297: LIST
47298: LIST
47299: LIST
47300: LIST
47301: LIST
47302: LIST
47303: LIST
47304: IN
47305: IFFALSE 47519
// if GetDistXY ( ai_buildings_locations [ base ] [ i ] [ 1 ] , ai_buildings_locations [ base ] [ i ] [ 2 ] , temp_list [ 1 ] , temp_list [ 2 ] ) <= 4 then
47307: LD_EXP 48
47311: PUSH
47312: LD_VAR 0 5
47316: ARRAY
47317: PUSH
47318: LD_VAR 0 6
47322: ARRAY
47323: PUSH
47324: LD_INT 1
47326: ARRAY
47327: PPUSH
47328: LD_EXP 48
47332: PUSH
47333: LD_VAR 0 5
47337: ARRAY
47338: PUSH
47339: LD_VAR 0 6
47343: ARRAY
47344: PUSH
47345: LD_INT 2
47347: ARRAY
47348: PPUSH
47349: LD_VAR 0 7
47353: PUSH
47354: LD_INT 1
47356: ARRAY
47357: PPUSH
47358: LD_VAR 0 7
47362: PUSH
47363: LD_INT 2
47365: ARRAY
47366: PPUSH
47367: CALL_OW 298
47371: PUSH
47372: LD_INT 4
47374: LESSEQUAL
47375: IFFALSE 47519
// begin btype_list_planned = btype_list_planned ^ ai_buildings_locations [ base ] [ i ] [ 4 ] ;
47377: LD_ADDR_VAR 0 10
47381: PUSH
47382: LD_VAR 0 10
47386: PUSH
47387: LD_EXP 48
47391: PUSH
47392: LD_VAR 0 5
47396: ARRAY
47397: PUSH
47398: LD_VAR 0 6
47402: ARRAY
47403: PUSH
47404: LD_INT 4
47406: ARRAY
47407: ADD
47408: ST_TO_ADDR
// un = HexInfo ( ai_buildings_locations [ base ] [ i ] [ 1 ] , ai_buildings_locations [ base ] [ i ] [ 2 ] ) ;
47409: LD_ADDR_VAR 0 8
47413: PUSH
47414: LD_EXP 48
47418: PUSH
47419: LD_VAR 0 5
47423: ARRAY
47424: PUSH
47425: LD_VAR 0 6
47429: ARRAY
47430: PUSH
47431: LD_INT 1
47433: ARRAY
47434: PPUSH
47435: LD_EXP 48
47439: PUSH
47440: LD_VAR 0 5
47444: ARRAY
47445: PUSH
47446: LD_VAR 0 6
47450: ARRAY
47451: PUSH
47452: LD_INT 2
47454: ARRAY
47455: PPUSH
47456: CALL_OW 428
47460: ST_TO_ADDR
// if un > 0 and GetType ( un ) = unit_building and not IsConstructed ( un ) then
47461: LD_VAR 0 8
47465: PUSH
47466: LD_INT 0
47468: GREATER
47469: PUSH
47470: LD_VAR 0 8
47474: PPUSH
47475: CALL_OW 247
47479: PUSH
47480: LD_INT 3
47482: EQUAL
47483: AND
47484: PUSH
47485: LD_VAR 0 8
47489: PPUSH
47490: CALL_OW 304
47494: NOT
47495: AND
47496: IFFALSE 47519
// btype_list_exists = btype_list_exists ^ GetBType ( un ) ;
47498: LD_ADDR_VAR 0 11
47502: PUSH
47503: LD_VAR 0 11
47507: PUSH
47508: LD_VAR 0 8
47512: PPUSH
47513: CALL_OW 266
47517: ADD
47518: ST_TO_ADDR
// end ;
47519: GO 47239
47521: POP
47522: POP
// currently_needed = [ ] ;
47523: LD_ADDR_VAR 0 15
47527: PUSH
47528: EMPTY
47529: ST_TO_ADDR
// case weapon of ar_cargo_bay , ru_cargo_bay , us_cargo_bay , ru_crane , us_crane , ru_bulldozer , us_bulldozer :
47530: LD_VAR 0 2
47534: PUSH
47535: LD_INT 32
47537: DOUBLE
47538: EQUAL
47539: IFTRUE 47579
47541: LD_INT 51
47543: DOUBLE
47544: EQUAL
47545: IFTRUE 47579
47547: LD_INT 12
47549: DOUBLE
47550: EQUAL
47551: IFTRUE 47579
47553: LD_INT 52
47555: DOUBLE
47556: EQUAL
47557: IFTRUE 47579
47559: LD_INT 13
47561: DOUBLE
47562: EQUAL
47563: IFTRUE 47579
47565: LD_INT 53
47567: DOUBLE
47568: EQUAL
47569: IFTRUE 47579
47571: LD_INT 14
47573: DOUBLE
47574: EQUAL
47575: IFTRUE 47579
47577: GO 47690
47579: POP
// begin if b_ext_noncombat in btype_list_exists then
47580: LD_INT 19
47582: PUSH
47583: LD_VAR 0 11
47587: IN
47588: IFFALSE 47602
// begin result = 1 ;
47590: LD_ADDR_VAR 0 4
47594: PUSH
47595: LD_INT 1
47597: ST_TO_ADDR
// exit ;
47598: GO 49085
// end else
47600: GO 47688
// begin if GetBaseNation ( base ) = nation_arabian then
47602: LD_VAR 0 5
47606: PPUSH
47607: CALL 19035 0 1
47611: PUSH
47612: LD_INT 2
47614: EQUAL
47615: IFFALSE 47652
// begin if not b_ext_stitch in btype_list_planned then
47617: LD_INT 23
47619: PUSH
47620: LD_VAR 0 10
47624: IN
47625: NOT
47626: IFFALSE 47639
// currently_needed = [ b_ext_stitch ] ;
47628: LD_ADDR_VAR 0 15
47632: PUSH
47633: LD_INT 23
47635: PUSH
47636: EMPTY
47637: LIST
47638: ST_TO_ADDR
// all_needed = [ b_ext_stitch ] ;
47639: LD_ADDR_VAR 0 14
47643: PUSH
47644: LD_INT 23
47646: PUSH
47647: EMPTY
47648: LIST
47649: ST_TO_ADDR
// end else
47650: GO 47688
// begin if not b_ext_noncombat in btype_list_planned then
47652: LD_INT 19
47654: PUSH
47655: LD_VAR 0 10
47659: IN
47660: NOT
47661: IFFALSE 47677
// currently_needed = currently_needed ^ b_ext_noncombat ;
47663: LD_ADDR_VAR 0 15
47667: PUSH
47668: LD_VAR 0 15
47672: PUSH
47673: LD_INT 19
47675: ADD
47676: ST_TO_ADDR
// all_needed = [ b_ext_noncombat ] ;
47677: LD_ADDR_VAR 0 14
47681: PUSH
47682: LD_INT 19
47684: PUSH
47685: EMPTY
47686: LIST
47687: ST_TO_ADDR
// end ; end ; end ; us_rocket_launcher , ru_rocket_launcher , ru_rocket , ar_rocket_launcher :
47688: GO 48175
47690: LD_INT 7
47692: DOUBLE
47693: EQUAL
47694: IFTRUE 47716
47696: LD_INT 45
47698: DOUBLE
47699: EQUAL
47700: IFTRUE 47716
47702: LD_INT 47
47704: DOUBLE
47705: EQUAL
47706: IFTRUE 47716
47708: LD_INT 28
47710: DOUBLE
47711: EQUAL
47712: IFTRUE 47716
47714: GO 47774
47716: POP
// begin if b_ext_rocket in btype_list_exists then
47717: LD_INT 18
47719: PUSH
47720: LD_VAR 0 11
47724: IN
47725: IFFALSE 47739
// begin result = 1 ;
47727: LD_ADDR_VAR 0 4
47731: PUSH
47732: LD_INT 1
47734: ST_TO_ADDR
// exit ;
47735: GO 49085
// end else
47737: GO 47772
// begin if not b_ext_rocket in btype_list_planned then
47739: LD_INT 18
47741: PUSH
47742: LD_VAR 0 10
47746: IN
47747: NOT
47748: IFFALSE 47761
// currently_needed = [ b_ext_rocket ] ;
47750: LD_ADDR_VAR 0 15
47754: PUSH
47755: LD_INT 18
47757: PUSH
47758: EMPTY
47759: LIST
47760: ST_TO_ADDR
// all_needed = [ b_ext_rocket ] ;
47761: LD_ADDR_VAR 0 14
47765: PUSH
47766: LD_INT 18
47768: PUSH
47769: EMPTY
47770: LIST
47771: ST_TO_ADDR
// end ; end ; us_light_gun , us_double_gun , us_heavy_gun , ru_gun , ru_heavy_gun , ar_light_gun , ar_gun :
47772: GO 48175
47774: LD_INT 3
47776: DOUBLE
47777: EQUAL
47778: IFTRUE 47818
47780: LD_INT 5
47782: DOUBLE
47783: EQUAL
47784: IFTRUE 47818
47786: LD_INT 6
47788: DOUBLE
47789: EQUAL
47790: IFTRUE 47818
47792: LD_INT 44
47794: DOUBLE
47795: EQUAL
47796: IFTRUE 47818
47798: LD_INT 46
47800: DOUBLE
47801: EQUAL
47802: IFTRUE 47818
47804: LD_INT 23
47806: DOUBLE
47807: EQUAL
47808: IFTRUE 47818
47810: LD_INT 27
47812: DOUBLE
47813: EQUAL
47814: IFTRUE 47818
47816: GO 47876
47818: POP
// begin if b_ext_gun in btype_list_exists then
47819: LD_INT 17
47821: PUSH
47822: LD_VAR 0 11
47826: IN
47827: IFFALSE 47841
// begin result = 1 ;
47829: LD_ADDR_VAR 0 4
47833: PUSH
47834: LD_INT 1
47836: ST_TO_ADDR
// exit ;
47837: GO 49085
// end else
47839: GO 47874
// begin if not b_ext_gun in btype_list_planned then
47841: LD_INT 17
47843: PUSH
47844: LD_VAR 0 10
47848: IN
47849: NOT
47850: IFFALSE 47863
// currently_needed = [ b_ext_gun ] ;
47852: LD_ADDR_VAR 0 15
47856: PUSH
47857: LD_INT 17
47859: PUSH
47860: EMPTY
47861: LIST
47862: ST_TO_ADDR
// all_needed = [ b_ext_gun ] ;
47863: LD_ADDR_VAR 0 14
47867: PUSH
47868: LD_INT 17
47870: PUSH
47871: EMPTY
47872: LIST
47873: ST_TO_ADDR
// end ; end ; us_laser , us_double_laser :
47874: GO 48175
47876: LD_INT 9
47878: DOUBLE
47879: EQUAL
47880: IFTRUE 47890
47882: LD_INT 10
47884: DOUBLE
47885: EQUAL
47886: IFTRUE 47890
47888: GO 47948
47890: POP
// begin if b_ext_laser in btype_list_exists then
47891: LD_INT 25
47893: PUSH
47894: LD_VAR 0 11
47898: IN
47899: IFFALSE 47913
// begin result = 1 ;
47901: LD_ADDR_VAR 0 4
47905: PUSH
47906: LD_INT 1
47908: ST_TO_ADDR
// exit ;
47909: GO 49085
// end else
47911: GO 47946
// begin if not b_ext_laser in btype_list_planned then
47913: LD_INT 25
47915: PUSH
47916: LD_VAR 0 10
47920: IN
47921: NOT
47922: IFFALSE 47935
// currently_needed = [ b_ext_laser ] ;
47924: LD_ADDR_VAR 0 15
47928: PUSH
47929: LD_INT 25
47931: PUSH
47932: EMPTY
47933: LIST
47934: ST_TO_ADDR
// all_needed = [ b_ext_laser ] ;
47935: LD_ADDR_VAR 0 14
47939: PUSH
47940: LD_INT 25
47942: PUSH
47943: EMPTY
47944: LIST
47945: ST_TO_ADDR
// end ; end ; us_radar , ar_radar , ar_control_tower :
47946: GO 48175
47948: LD_INT 11
47950: DOUBLE
47951: EQUAL
47952: IFTRUE 47968
47954: LD_INT 30
47956: DOUBLE
47957: EQUAL
47958: IFTRUE 47968
47960: LD_INT 31
47962: DOUBLE
47963: EQUAL
47964: IFTRUE 47968
47966: GO 48026
47968: POP
// begin if b_ext_radar in btype_list_exists then
47969: LD_INT 20
47971: PUSH
47972: LD_VAR 0 11
47976: IN
47977: IFFALSE 47991
// begin result = 1 ;
47979: LD_ADDR_VAR 0 4
47983: PUSH
47984: LD_INT 1
47986: ST_TO_ADDR
// exit ;
47987: GO 49085
// end else
47989: GO 48024
// begin if not b_ext_radar in btype_list_planned then
47991: LD_INT 20
47993: PUSH
47994: LD_VAR 0 10
47998: IN
47999: NOT
48000: IFFALSE 48013
// currently_needed = [ b_ext_radar ] ;
48002: LD_ADDR_VAR 0 15
48006: PUSH
48007: LD_INT 20
48009: PUSH
48010: EMPTY
48011: LIST
48012: ST_TO_ADDR
// all_needed = [ b_ext_radar ] ;
48013: LD_ADDR_VAR 0 14
48017: PUSH
48018: LD_INT 20
48020: PUSH
48021: EMPTY
48022: LIST
48023: ST_TO_ADDR
// end ; end ; ar_flame_thrower :
48024: GO 48175
48026: LD_INT 26
48028: DOUBLE
48029: EQUAL
48030: IFTRUE 48034
48032: GO 48092
48034: POP
// begin if b_ext_stitch in btype_list_exists then
48035: LD_INT 23
48037: PUSH
48038: LD_VAR 0 11
48042: IN
48043: IFFALSE 48057
// begin result = 1 ;
48045: LD_ADDR_VAR 0 4
48049: PUSH
48050: LD_INT 1
48052: ST_TO_ADDR
// exit ;
48053: GO 49085
// end else
48055: GO 48090
// begin if not b_ext_stitch in btype_list_planned then
48057: LD_INT 23
48059: PUSH
48060: LD_VAR 0 10
48064: IN
48065: NOT
48066: IFFALSE 48079
// currently_needed = [ b_ext_stitch ] ;
48068: LD_ADDR_VAR 0 15
48072: PUSH
48073: LD_INT 23
48075: PUSH
48076: EMPTY
48077: LIST
48078: ST_TO_ADDR
// all_needed = [ b_ext_stitch ] ;
48079: LD_ADDR_VAR 0 14
48083: PUSH
48084: LD_INT 23
48086: PUSH
48087: EMPTY
48088: LIST
48089: ST_TO_ADDR
// end ; end ; ar_selfpropelled_bomb , ru_time_lapser :
48090: GO 48175
48092: LD_INT 29
48094: DOUBLE
48095: EQUAL
48096: IFTRUE 48106
48098: LD_INT 49
48100: DOUBLE
48101: EQUAL
48102: IFTRUE 48106
48104: GO 48164
48106: POP
// begin if b_ext_siberium in btype_list_exists then
48107: LD_INT 21
48109: PUSH
48110: LD_VAR 0 11
48114: IN
48115: IFFALSE 48129
// begin result = 1 ;
48117: LD_ADDR_VAR 0 4
48121: PUSH
48122: LD_INT 1
48124: ST_TO_ADDR
// exit ;
48125: GO 49085
// end else
48127: GO 48162
// begin if not b_ext_siberium in btype_list_planned then
48129: LD_INT 21
48131: PUSH
48132: LD_VAR 0 10
48136: IN
48137: NOT
48138: IFFALSE 48151
// currently_needed = [ b_ext_siberium ] ;
48140: LD_ADDR_VAR 0 15
48144: PUSH
48145: LD_INT 21
48147: PUSH
48148: EMPTY
48149: LIST
48150: ST_TO_ADDR
// all_needed = [ b_ext_siberium ] ;
48151: LD_ADDR_VAR 0 14
48155: PUSH
48156: LD_INT 21
48158: PUSH
48159: EMPTY
48160: LIST
48161: ST_TO_ADDR
// end ; end ; else
48162: GO 48175
48164: POP
// begin result = 1 ;
48165: LD_ADDR_VAR 0 4
48169: PUSH
48170: LD_INT 1
48172: ST_TO_ADDR
// exit ;
48173: GO 49085
// end ; end ; if currently_needed = 0 then
48175: LD_VAR 0 15
48179: PUSH
48180: LD_INT 0
48182: EQUAL
48183: IFFALSE 48195
// begin result = 0 ;
48185: LD_ADDR_VAR 0 4
48189: PUSH
48190: LD_INT 0
48192: ST_TO_ADDR
// end else
48193: GO 49085
// begin if ai_engineers [ base ] = 0 then
48195: LD_EXP 29
48199: PUSH
48200: LD_VAR 0 5
48204: ARRAY
48205: PUSH
48206: LD_INT 0
48208: EQUAL
48209: IFFALSE 48221
// begin result = 2 ;
48211: LD_ADDR_VAR 0 4
48215: PUSH
48216: LD_INT 2
48218: ST_TO_ADDR
// exit ;
48219: GO 49085
// end ; fact_ext_replace_loc_list = [ ] ;
48221: LD_ADDR_VAR 0 16
48225: PUSH
48226: EMPTY
48227: ST_TO_ADDR
// for i in ai_fact_extension_replace_locations [ base ] do
48228: LD_ADDR_VAR 0 6
48232: PUSH
48233: LD_EXP 84
48237: PUSH
48238: LD_VAR 0 5
48242: ARRAY
48243: PUSH
48244: FOR_IN
48245: IFFALSE 48301
// if GetDistUnitXY ( fact , i [ 1 ] , i [ 2 ] ) <= 4 then
48247: LD_VAR 0 1
48251: PPUSH
48252: LD_VAR 0 6
48256: PUSH
48257: LD_INT 1
48259: ARRAY
48260: PPUSH
48261: LD_VAR 0 6
48265: PUSH
48266: LD_INT 2
48268: ARRAY
48269: PPUSH
48270: CALL_OW 297
48274: PUSH
48275: LD_INT 4
48277: LESSEQUAL
48278: IFFALSE 48299
// fact_ext_replace_loc_list = fact_ext_replace_loc_list ^ [ i ] ;
48280: LD_ADDR_VAR 0 16
48284: PUSH
48285: LD_VAR 0 16
48289: PUSH
48290: LD_VAR 0 6
48294: PUSH
48295: EMPTY
48296: LIST
48297: ADD
48298: ST_TO_ADDR
48299: GO 48244
48301: POP
48302: POP
// if fact_ext_replace_loc_list = 0 then
48303: LD_VAR 0 16
48307: PUSH
48308: LD_INT 0
48310: EQUAL
48311: IFFALSE 48323
// begin result = 2 ;
48313: LD_ADDR_VAR 0 4
48317: PUSH
48318: LD_INT 2
48320: ST_TO_ADDR
// exit ;
48321: GO 49085
// end ; if not do_something_about_it then
48323: LD_VAR 0 3
48327: NOT
48328: IFFALSE 48332
// exit ;
48330: GO 49085
// temp_list_2 = [ ] ;
48332: LD_ADDR_VAR 0 12
48336: PUSH
48337: EMPTY
48338: ST_TO_ADDR
// for i = 1 to ai_buildings_locations [ base ] + 0 do
48339: LD_ADDR_VAR 0 6
48343: PUSH
48344: DOUBLE
48345: LD_INT 1
48347: DEC
48348: ST_TO_ADDR
48349: LD_EXP 48
48353: PUSH
48354: LD_VAR 0 5
48358: ARRAY
48359: PUSH
48360: LD_INT 0
48362: PLUS
48363: PUSH
48364: FOR_TO
48365: IFFALSE 48438
// if [ ai_buildings_locations [ base ] [ i ] [ 1 ] , ai_buildings_locations [ base ] [ i ] [ 2 ] ] in fact_ext_replace_loc_list then
48367: LD_EXP 48
48371: PUSH
48372: LD_VAR 0 5
48376: ARRAY
48377: PUSH
48378: LD_VAR 0 6
48382: ARRAY
48383: PUSH
48384: LD_INT 1
48386: ARRAY
48387: PUSH
48388: LD_EXP 48
48392: PUSH
48393: LD_VAR 0 5
48397: ARRAY
48398: PUSH
48399: LD_VAR 0 6
48403: ARRAY
48404: PUSH
48405: LD_INT 2
48407: ARRAY
48408: PUSH
48409: EMPTY
48410: LIST
48411: LIST
48412: PUSH
48413: LD_VAR 0 16
48417: IN
48418: IFFALSE 48436
// temp_list_2 = temp_list_2 ^ i ;
48420: LD_ADDR_VAR 0 12
48424: PUSH
48425: LD_VAR 0 12
48429: PUSH
48430: LD_VAR 0 6
48434: ADD
48435: ST_TO_ADDR
48436: GO 48364
48438: POP
48439: POP
// for i in temp_list_2 do
48440: LD_ADDR_VAR 0 6
48444: PUSH
48445: LD_VAR 0 12
48449: PUSH
48450: FOR_IN
48451: IFFALSE 48870
// begin if currently_needed = 0 then
48453: LD_VAR 0 15
48457: PUSH
48458: LD_INT 0
48460: EQUAL
48461: IFFALSE 48465
// break ;
48463: GO 48870
// if not ai_buildings_locations [ base ] [ i ] [ 4 ] in all_needed then
48465: LD_EXP 48
48469: PUSH
48470: LD_VAR 0 5
48474: ARRAY
48475: PUSH
48476: LD_VAR 0 6
48480: ARRAY
48481: PUSH
48482: LD_INT 4
48484: ARRAY
48485: PUSH
48486: LD_VAR 0 14
48490: IN
48491: NOT
48492: IFFALSE 48868
// begin un = HexInfo ( ai_buildings_locations [ base ] [ i ] [ 1 ] , ai_buildings_locations [ base ] [ i ] [ 2 ] ) ;
48494: LD_ADDR_VAR 0 8
48498: PUSH
48499: LD_EXP 48
48503: PUSH
48504: LD_VAR 0 5
48508: ARRAY
48509: PUSH
48510: LD_VAR 0 6
48514: ARRAY
48515: PUSH
48516: LD_INT 1
48518: ARRAY
48519: PPUSH
48520: LD_EXP 48
48524: PUSH
48525: LD_VAR 0 5
48529: ARRAY
48530: PUSH
48531: LD_VAR 0 6
48535: ARRAY
48536: PUSH
48537: LD_INT 2
48539: ARRAY
48540: PPUSH
48541: CALL_OW 428
48545: ST_TO_ADDR
// if un > 0 and GetType ( un ) = unit_building and not IsConstructed ( un ) then
48546: LD_VAR 0 8
48550: PUSH
48551: LD_INT 0
48553: GREATER
48554: PUSH
48555: LD_VAR 0 8
48559: PPUSH
48560: CALL_OW 247
48564: PUSH
48565: LD_INT 3
48567: EQUAL
48568: AND
48569: PUSH
48570: LD_VAR 0 8
48574: PPUSH
48575: CALL_OW 304
48579: NOT
48580: AND
48581: IFFALSE 48850
// begin temp_list = Replace ( ai_buildings_locations [ base ] [ i ] , 4 , currently_needed [ 1 ] ) ;
48583: LD_ADDR_VAR 0 7
48587: PUSH
48588: LD_EXP 48
48592: PUSH
48593: LD_VAR 0 5
48597: ARRAY
48598: PUSH
48599: LD_VAR 0 6
48603: ARRAY
48604: PPUSH
48605: LD_INT 4
48607: PPUSH
48608: LD_VAR 0 15
48612: PUSH
48613: LD_INT 1
48615: ARRAY
48616: PPUSH
48617: CALL_OW 1
48621: ST_TO_ADDR
// temp_list = Replace ( ai_buildings_locations [ base ] , i , temp_list ) ;
48622: LD_ADDR_VAR 0 7
48626: PUSH
48627: LD_EXP 48
48631: PUSH
48632: LD_VAR 0 5
48636: ARRAY
48637: PPUSH
48638: LD_VAR 0 6
48642: PPUSH
48643: LD_VAR 0 7
48647: PPUSH
48648: CALL_OW 1
48652: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
48653: LD_ADDR_EXP 48
48657: PUSH
48658: LD_EXP 48
48662: PPUSH
48663: LD_VAR 0 5
48667: PPUSH
48668: LD_VAR 0 7
48672: PPUSH
48673: CALL_OW 1
48677: ST_TO_ADDR
// temp_list = ai_dismantle_these_buildings [ base ] ^ un ;
48678: LD_ADDR_VAR 0 7
48682: PUSH
48683: LD_EXP 85
48687: PUSH
48688: LD_VAR 0 5
48692: ARRAY
48693: PUSH
48694: LD_VAR 0 8
48698: ADD
48699: ST_TO_ADDR
// ai_dismantle_these_buildings = Replace ( ai_dismantle_these_buildings , base , temp_list ) ;
48700: LD_ADDR_EXP 85
48704: PUSH
48705: LD_EXP 85
48709: PPUSH
48710: LD_VAR 0 5
48714: PPUSH
48715: LD_VAR 0 7
48719: PPUSH
48720: CALL_OW 1
48724: ST_TO_ADDR
// if ai_facts_with_ext_rebuild_map < fact then
48725: LD_EXP 94
48729: PUSH
48730: LD_VAR 0 1
48734: LESS
48735: IFFALSE 48759
// ai_facts_with_ext_rebuild_map = Replace ( ai_facts_with_ext_rebuild_map , fact , [ ] ) ;
48737: LD_ADDR_EXP 94
48741: PUSH
48742: LD_EXP 94
48746: PPUSH
48747: LD_VAR 0 1
48751: PPUSH
48752: EMPTY
48753: PPUSH
48754: CALL_OW 1
48758: ST_TO_ADDR
// temp_list = ai_facts_with_ext_rebuild_map [ fact ] ^ [ [ ai_buildings_locations [ base ] [ i ] [ 1 ] , ai_buildings_locations [ base ] [ i ] [ 2 ] ] ] ;
48759: LD_ADDR_VAR 0 7
48763: PUSH
48764: LD_EXP 94
48768: PUSH
48769: LD_VAR 0 1
48773: ARRAY
48774: PUSH
48775: LD_EXP 48
48779: PUSH
48780: LD_VAR 0 5
48784: ARRAY
48785: PUSH
48786: LD_VAR 0 6
48790: ARRAY
48791: PUSH
48792: LD_INT 1
48794: ARRAY
48795: PUSH
48796: LD_EXP 48
48800: PUSH
48801: LD_VAR 0 5
48805: ARRAY
48806: PUSH
48807: LD_VAR 0 6
48811: ARRAY
48812: PUSH
48813: LD_INT 2
48815: ARRAY
48816: PUSH
48817: EMPTY
48818: LIST
48819: LIST
48820: PUSH
48821: EMPTY
48822: LIST
48823: ADD
48824: ST_TO_ADDR
// ai_facts_with_ext_rebuild_map = Replace ( ai_facts_with_ext_rebuild_map , fact , temp_list ) ;
48825: LD_ADDR_EXP 94
48829: PUSH
48830: LD_EXP 94
48834: PPUSH
48835: LD_VAR 0 1
48839: PPUSH
48840: LD_VAR 0 7
48844: PPUSH
48845: CALL_OW 1
48849: ST_TO_ADDR
// end ; currently_needed = Delete ( currently_needed , 1 ) ;
48850: LD_ADDR_VAR 0 15
48854: PUSH
48855: LD_VAR 0 15
48859: PPUSH
48860: LD_INT 1
48862: PPUSH
48863: CALL_OW 3
48867: ST_TO_ADDR
// end ; end ;
48868: GO 48450
48870: POP
48871: POP
// if temp_list_2 >= 2 then
48872: LD_VAR 0 12
48876: PUSH
48877: LD_INT 2
48879: GREATEREQUAL
48880: IFFALSE 49057
// begin temp_list_3 = ai_buildings_locations [ base ] ;
48882: LD_ADDR_VAR 0 13
48886: PUSH
48887: LD_EXP 48
48891: PUSH
48892: LD_VAR 0 5
48896: ARRAY
48897: ST_TO_ADDR
// temp_list = ai_buildings_locations [ base ] [ temp_list_2 [ 1 ] ] ;
48898: LD_ADDR_VAR 0 7
48902: PUSH
48903: LD_EXP 48
48907: PUSH
48908: LD_VAR 0 5
48912: ARRAY
48913: PUSH
48914: LD_VAR 0 12
48918: PUSH
48919: LD_INT 1
48921: ARRAY
48922: ARRAY
48923: ST_TO_ADDR
// for i = 2 to temp_list_2 + 0 do
48924: LD_ADDR_VAR 0 6
48928: PUSH
48929: DOUBLE
48930: LD_INT 2
48932: DEC
48933: ST_TO_ADDR
48934: LD_VAR 0 12
48938: PUSH
48939: LD_INT 0
48941: PLUS
48942: PUSH
48943: FOR_TO
48944: IFFALSE 48995
// begin temp_list_3 = Replace ( temp_list_3 , temp_list_2 [ i - 1 ] , temp_list_3 [ temp_list_2 [ i ] ] ) ;
48946: LD_ADDR_VAR 0 13
48950: PUSH
48951: LD_VAR 0 13
48955: PPUSH
48956: LD_VAR 0 12
48960: PUSH
48961: LD_VAR 0 6
48965: PUSH
48966: LD_INT 1
48968: MINUS
48969: ARRAY
48970: PPUSH
48971: LD_VAR 0 13
48975: PUSH
48976: LD_VAR 0 12
48980: PUSH
48981: LD_VAR 0 6
48985: ARRAY
48986: ARRAY
48987: PPUSH
48988: CALL_OW 1
48992: ST_TO_ADDR
// end ;
48993: GO 48943
48995: POP
48996: POP
// temp_list_3 = Replace ( temp_list_3 , temp_list_2 [ temp_list_2 + 0 ] , temp_list ) ;
48997: LD_ADDR_VAR 0 13
49001: PUSH
49002: LD_VAR 0 13
49006: PPUSH
49007: LD_VAR 0 12
49011: PUSH
49012: LD_VAR 0 12
49016: PUSH
49017: LD_INT 0
49019: PLUS
49020: ARRAY
49021: PPUSH
49022: LD_VAR 0 7
49026: PPUSH
49027: CALL_OW 1
49031: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list_3 ) ;
49032: LD_ADDR_EXP 48
49036: PUSH
49037: LD_EXP 48
49041: PPUSH
49042: LD_VAR 0 5
49046: PPUSH
49047: LD_VAR 0 13
49051: PPUSH
49052: CALL_OW 1
49056: ST_TO_ADDR
// end ; if currently_needed = 0 then
49057: LD_VAR 0 15
49061: PUSH
49062: LD_INT 0
49064: EQUAL
49065: IFFALSE 49077
// result = 0 else
49067: LD_ADDR_VAR 0 4
49071: PUSH
49072: LD_INT 0
49074: ST_TO_ADDR
49075: GO 49085
// result = 2 ;
49077: LD_ADDR_VAR 0 4
49081: PUSH
49082: LD_INT 2
49084: ST_TO_ADDR
// end ; end ;
49085: LD_VAR 0 4
49089: RET
// on VehicleCaptured ( new_identifier , old_identifier , old_side , capturing_unit ) do var temp_list , base ;
49090: LD_INT 0
49092: PPUSH
49093: PPUSH
// begin vehicle_captured_events = vehicle_captured_events ^ [ [ old_identifier , new_identifier ] ] ;
49094: LD_ADDR_EXP 112
49098: PUSH
49099: LD_EXP 112
49103: PUSH
49104: LD_VAR 0 2
49108: PUSH
49109: LD_VAR 0 1
49113: PUSH
49114: EMPTY
49115: LIST
49116: LIST
49117: PUSH
49118: EMPTY
49119: LIST
49120: ADD
49121: ST_TO_ADDR
// if old_side = you then
49122: LD_VAR 0 3
49126: PUSH
49127: LD_EXP 2
49131: EQUAL
49132: IFFALSE 49136
// exit ;
49134: GO 49167
// for base in ai_bases do
49136: LD_ADDR_VAR 0 6
49140: PUSH
49141: LD_EXP 26
49145: PUSH
49146: FOR_IN
49147: IFFALSE 49165
// RemoveVehicleFromVariables ( base , old_identifier ) ;
49149: LD_VAR 0 6
49153: PPUSH
49154: LD_VAR 0 2
49158: PPUSH
49159: CALL 16916 0 2
49163: GO 49146
49165: POP
49166: POP
// end ;
49167: PPOPN 6
49169: END
// on VehicleConstructed ( vehicle , factory ) do var side , temp_list , base , un ;
49170: LD_INT 0
49172: PPUSH
49173: PPUSH
49174: PPUSH
49175: PPUSH
// begin base = FindBase ( vehicle ) ;
49176: LD_ADDR_VAR 0 5
49180: PUSH
49181: LD_VAR 0 1
49185: PPUSH
49186: CALL 19125 0 1
49190: ST_TO_ADDR
// if base = 0 then
49191: LD_VAR 0 5
49195: PUSH
49196: LD_INT 0
49198: EQUAL
49199: IFFALSE 49203
// exit ;
49201: GO 49635
// case GetWeapon ( vehicle ) of us_cargo_bay , ar_cargo_bay , ru_cargo_bay :
49203: LD_VAR 0 1
49207: PPUSH
49208: CALL_OW 264
49212: PUSH
49213: LD_INT 12
49215: DOUBLE
49216: EQUAL
49217: IFTRUE 49233
49219: LD_INT 32
49221: DOUBLE
49222: EQUAL
49223: IFTRUE 49233
49225: LD_INT 51
49227: DOUBLE
49228: EQUAL
49229: IFTRUE 49233
49231: GO 49284
49233: POP
// begin ai_cargo_bay = Replace ( ai_cargo_bay , base , vehicle ) ;
49234: LD_ADDR_EXP 71
49238: PUSH
49239: LD_EXP 71
49243: PPUSH
49244: LD_VAR 0 5
49248: PPUSH
49249: LD_VAR 0 1
49253: PPUSH
49254: CALL_OW 1
49258: ST_TO_ADDR
// ai_cargo_bay_under_construction = Replace ( ai_cargo_bay_under_construction , base , false ) ;
49259: LD_ADDR_EXP 72
49263: PUSH
49264: LD_EXP 72
49268: PPUSH
49269: LD_VAR 0 5
49273: PPUSH
49274: LD_INT 0
49276: PPUSH
49277: CALL_OW 1
49281: ST_TO_ADDR
// end ; us_crane , ru_crane :
49282: GO 49635
49284: LD_INT 13
49286: DOUBLE
49287: EQUAL
49288: IFTRUE 49298
49290: LD_INT 52
49292: DOUBLE
49293: EQUAL
49294: IFTRUE 49298
49296: GO 49349
49298: POP
// begin ai_crane = Replace ( ai_crane , base , vehicle ) ;
49299: LD_ADDR_EXP 74
49303: PUSH
49304: LD_EXP 74
49308: PPUSH
49309: LD_VAR 0 5
49313: PPUSH
49314: LD_VAR 0 1
49318: PPUSH
49319: CALL_OW 1
49323: ST_TO_ADDR
// ai_crane_under_construction = Replace ( ai_crane_under_construction , base , false ) ;
49324: LD_ADDR_EXP 75
49328: PUSH
49329: LD_EXP 75
49333: PPUSH
49334: LD_VAR 0 5
49338: PPUSH
49339: LD_INT 0
49341: PPUSH
49342: CALL_OW 1
49346: ST_TO_ADDR
// end ; ar_control_tower :
49347: GO 49635
49349: LD_INT 31
49351: DOUBLE
49352: EQUAL
49353: IFTRUE 49357
49355: GO 49407
49357: POP
// begin temp_list = ai_control_tower_vehicles [ base ] ^ vehicle ;
49358: LD_ADDR_VAR 0 4
49362: PUSH
49363: LD_EXP 81
49367: PUSH
49368: LD_VAR 0 5
49372: ARRAY
49373: PUSH
49374: LD_VAR 0 1
49378: ADD
49379: ST_TO_ADDR
// ai_control_tower_vehicles = Replace ( ai_control_tower_vehicles , base , temp_list ) ;
49380: LD_ADDR_EXP 81
49384: PUSH
49385: LD_EXP 81
49389: PPUSH
49390: LD_VAR 0 5
49394: PPUSH
49395: LD_VAR 0 4
49399: PPUSH
49400: CALL_OW 1
49404: ST_TO_ADDR
// end ; ar_selfpropelled_bomb :
49405: GO 49635
49407: LD_INT 29
49409: DOUBLE
49410: EQUAL
49411: IFTRUE 49415
49413: GO 49465
49415: POP
// begin temp_list = ai_implosion_vehicles [ base ] ^ vehicle ;
49416: LD_ADDR_VAR 0 4
49420: PUSH
49421: LD_EXP 87
49425: PUSH
49426: LD_VAR 0 5
49430: ARRAY
49431: PUSH
49432: LD_VAR 0 1
49436: ADD
49437: ST_TO_ADDR
// ai_implosion_vehicles = Replace ( ai_implosion_vehicles , base , temp_list ) ;
49438: LD_ADDR_EXP 87
49442: PUSH
49443: LD_EXP 87
49447: PPUSH
49448: LD_VAR 0 5
49452: PPUSH
49453: LD_VAR 0 4
49457: PPUSH
49458: CALL_OW 1
49462: ST_TO_ADDR
// end ; ru_time_lapser :
49463: GO 49635
49465: LD_INT 49
49467: DOUBLE
49468: EQUAL
49469: IFTRUE 49473
49471: GO 49523
49473: POP
// begin temp_list = ai_taufield_vehicles [ base ] ^ vehicle ;
49474: LD_ADDR_VAR 0 4
49478: PUSH
49479: LD_EXP 86
49483: PUSH
49484: LD_VAR 0 5
49488: ARRAY
49489: PUSH
49490: LD_VAR 0 1
49494: ADD
49495: ST_TO_ADDR
// ai_taufield_vehicles = Replace ( ai_taufield_vehicles , base , temp_list ) ;
49496: LD_ADDR_EXP 86
49500: PUSH
49501: LD_EXP 86
49505: PPUSH
49506: LD_VAR 0 5
49510: PPUSH
49511: LD_VAR 0 4
49515: PPUSH
49516: CALL_OW 1
49520: ST_TO_ADDR
// end ; ru_siberium_rocket , us_siberium_rocket :
49521: GO 49635
49523: LD_INT 48
49525: DOUBLE
49526: EQUAL
49527: IFTRUE 49537
49529: LD_INT 8
49531: DOUBLE
49532: EQUAL
49533: IFTRUE 49537
49535: GO 49587
49537: POP
// begin temp_list = ai_sib_bomb_vehicles [ base ] ^ vehicle ;
49538: LD_ADDR_VAR 0 4
49542: PUSH
49543: LD_EXP 93
49547: PUSH
49548: LD_VAR 0 5
49552: ARRAY
49553: PUSH
49554: LD_VAR 0 1
49558: ADD
49559: ST_TO_ADDR
// ai_sib_bomb_vehicles = Replace ( ai_sib_bomb_vehicles , base , temp_list ) ;
49560: LD_ADDR_EXP 93
49564: PUSH
49565: LD_EXP 93
49569: PPUSH
49570: LD_VAR 0 5
49574: PPUSH
49575: LD_VAR 0 4
49579: PPUSH
49580: CALL_OW 1
49584: ST_TO_ADDR
// end ; else
49585: GO 49635
49587: POP
// begin temp_list = ai_vehicles_defend [ base ] ^ vehicle ;
49588: LD_ADDR_VAR 0 4
49592: PUSH
49593: LD_EXP 53
49597: PUSH
49598: LD_VAR 0 5
49602: ARRAY
49603: PUSH
49604: LD_VAR 0 1
49608: ADD
49609: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
49610: LD_ADDR_EXP 53
49614: PUSH
49615: LD_EXP 53
49619: PPUSH
49620: LD_VAR 0 5
49624: PPUSH
49625: LD_VAR 0 4
49629: PPUSH
49630: CALL_OW 1
49634: ST_TO_ADDR
// end ; end ; end ;
49635: PPOPN 6
49637: END
// every 0 0$5 do var base , i ;
49638: GO 49640
49640: DISABLE
49641: LD_INT 0
49643: PPUSH
49644: PPUSH
// begin for base in ai_bases ^ [ 3 , 4 ] do
49645: LD_ADDR_VAR 0 1
49649: PUSH
49650: LD_EXP 26
49654: PUSH
49655: LD_INT 3
49657: PUSH
49658: LD_INT 4
49660: PUSH
49661: EMPTY
49662: LIST
49663: LIST
49664: ADD
49665: PUSH
49666: FOR_IN
49667: IFFALSE 49824
// 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 ] ^ ai_sib_bomb_vehicles [ base ] ) diff 0 do
49669: LD_ADDR_VAR 0 2
49673: PUSH
49674: LD_EXP 54
49678: PUSH
49679: LD_VAR 0 1
49683: ARRAY
49684: PUSH
49685: LD_EXP 53
49689: PUSH
49690: LD_VAR 0 1
49694: ARRAY
49695: ADD
49696: PUSH
49697: LD_EXP 71
49701: PUSH
49702: LD_VAR 0 1
49706: ARRAY
49707: ADD
49708: PUSH
49709: LD_EXP 74
49713: PUSH
49714: LD_VAR 0 1
49718: ARRAY
49719: ADD
49720: PUSH
49721: LD_EXP 86
49725: PUSH
49726: LD_VAR 0 1
49730: ARRAY
49731: ADD
49732: PUSH
49733: LD_EXP 87
49737: PUSH
49738: LD_VAR 0 1
49742: ARRAY
49743: ADD
49744: PUSH
49745: LD_EXP 81
49749: PUSH
49750: LD_VAR 0 1
49754: ARRAY
49755: ADD
49756: PUSH
49757: LD_EXP 93
49761: PUSH
49762: LD_VAR 0 1
49766: ARRAY
49767: ADD
49768: PUSH
49769: LD_INT 0
49771: DIFF
49772: PUSH
49773: FOR_IN
49774: IFFALSE 49820
// if GetFuel ( i ) < 10 and GetEngine ( i ) = engine_combustion then
49776: LD_VAR 0 2
49780: PPUSH
49781: CALL_OW 261
49785: PUSH
49786: LD_INT 10
49788: LESS
49789: PUSH
49790: LD_VAR 0 2
49794: PPUSH
49795: CALL_OW 262
49799: PUSH
49800: LD_INT 1
49802: EQUAL
49803: AND
49804: IFFALSE 49818
// SetFuel ( i , 10 ) ;
49806: LD_VAR 0 2
49810: PPUSH
49811: LD_INT 10
49813: PPUSH
49814: CALL_OW 240
49818: GO 49773
49820: POP
49821: POP
49822: GO 49666
49824: POP
49825: POP
// enable ;
49826: ENABLE
// end ;
49827: PPOPN 2
49829: 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 ;
49830: GO 49832
49832: DISABLE
49833: LD_INT 0
49835: PPUSH
49836: PPUSH
49837: PPUSH
49838: PPUSH
49839: PPUSH
49840: PPUSH
49841: PPUSH
49842: PPUSH
49843: PPUSH
// begin refueling = [ false , false , false , false ] ;
49844: LD_ADDR_VAR 0 9
49848: PUSH
49849: LD_INT 0
49851: PUSH
49852: LD_INT 0
49854: PUSH
49855: LD_INT 0
49857: PUSH
49858: LD_INT 0
49860: PUSH
49861: EMPTY
49862: LIST
49863: LIST
49864: LIST
49865: LIST
49866: ST_TO_ADDR
// repeat if ai_bases = 0 then
49867: LD_EXP 26
49871: PUSH
49872: LD_INT 0
49874: EQUAL
49875: IFFALSE 49879
// exit ;
49877: GO 50807
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
49879: LD_INT 35
49881: PUSH
49882: LD_EXP 26
49886: PUSH
49887: LD_INT 0
49889: PLUS
49890: MOD
49891: PPUSH
49892: CALL_OW 67
// for base in ai_bases do
49896: LD_ADDR_VAR 0 1
49900: PUSH
49901: LD_EXP 26
49905: PUSH
49906: FOR_IN
49907: IFFALSE 50801
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
49909: LD_INT 35
49911: PUSH
49912: LD_EXP 26
49916: PUSH
49917: LD_INT 0
49919: PLUS
49920: DIV
49921: PPUSH
49922: CALL_OW 67
// if ai_cargo_bay [ base ] = 0 then
49926: LD_EXP 71
49930: PUSH
49931: LD_VAR 0 1
49935: ARRAY
49936: PUSH
49937: LD_INT 0
49939: EQUAL
49940: IFFALSE 49944
// continue ;
49942: GO 49906
// temp_value = GetLives ( ai_cargo_bay [ base ] ) ;
49944: LD_ADDR_VAR 0 8
49948: PUSH
49949: LD_EXP 71
49953: PUSH
49954: LD_VAR 0 1
49958: ARRAY
49959: PPUSH
49960: CALL_OW 256
49964: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
49965: LD_ADDR_VAR 0 3
49969: PUSH
49970: LD_VAR 0 1
49974: PPUSH
49975: CALL 18845 0 1
49979: ST_TO_ADDR
// if IsInArea ( ai_cargo_bay [ base ] , area ) then
49980: LD_EXP 71
49984: PUSH
49985: LD_VAR 0 1
49989: ARRAY
49990: PPUSH
49991: LD_VAR 0 3
49995: PPUSH
49996: CALL_OW 308
50000: IFFALSE 50016
// begin if temp_value < 1000 then
50002: LD_VAR 0 8
50006: PUSH
50007: LD_INT 1000
50009: LESS
50010: IFFALSE 50014
// continue ;
50012: GO 49906
// end else
50014: GO 50118
// if temp_value < 600 then
50016: LD_VAR 0 8
50020: PUSH
50021: LD_INT 600
50023: LESS
50024: IFFALSE 50118
// begin if IsLive ( ai_depot [ base ] ) then
50026: LD_EXP 36
50030: PUSH
50031: LD_VAR 0 1
50035: ARRAY
50036: PPUSH
50037: CALL_OW 300
50041: IFFALSE 50071
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) else
50043: LD_EXP 71
50047: PUSH
50048: LD_VAR 0 1
50052: ARRAY
50053: PPUSH
50054: LD_EXP 36
50058: PUSH
50059: LD_VAR 0 1
50063: ARRAY
50064: PPUSH
50065: CALL_OW 161
50069: GO 50116
// ComMoveXY ( ai_cargo_bay [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
50071: LD_EXP 71
50075: PUSH
50076: LD_VAR 0 1
50080: ARRAY
50081: PPUSH
50082: LD_EXP 59
50086: PUSH
50087: LD_VAR 0 1
50091: ARRAY
50092: PUSH
50093: LD_INT 1
50095: ARRAY
50096: PPUSH
50097: LD_EXP 59
50101: PUSH
50102: LD_VAR 0 1
50106: ARRAY
50107: PUSH
50108: LD_INT 2
50110: ARRAY
50111: PPUSH
50112: CALL_OW 111
// continue ;
50116: GO 49906
// end ; if GetEngine ( ai_cargo_bay [ base ] ) = engine_combustion then
50118: LD_EXP 71
50122: PUSH
50123: LD_VAR 0 1
50127: ARRAY
50128: PPUSH
50129: CALL_OW 262
50133: PUSH
50134: LD_INT 1
50136: EQUAL
50137: IFFALSE 50312
// begin c = GetFuel ( ai_cargo_bay [ base ] ) ;
50139: LD_ADDR_VAR 0 4
50143: PUSH
50144: LD_EXP 71
50148: PUSH
50149: LD_VAR 0 1
50153: ARRAY
50154: PPUSH
50155: CALL_OW 261
50159: ST_TO_ADDR
// if c > 90 or not IsOk ( ai_depot [ base ] ) then
50160: LD_VAR 0 4
50164: PUSH
50165: LD_INT 90
50167: GREATER
50168: PUSH
50169: LD_EXP 36
50173: PUSH
50174: LD_VAR 0 1
50178: ARRAY
50179: PPUSH
50180: CALL_OW 302
50184: NOT
50185: OR
50186: IFFALSE 50213
// refueling = Replace ( refueling , base , false ) else
50188: LD_ADDR_VAR 0 9
50192: PUSH
50193: LD_VAR 0 9
50197: PPUSH
50198: LD_VAR 0 1
50202: PPUSH
50203: LD_INT 0
50205: PPUSH
50206: CALL_OW 1
50210: ST_TO_ADDR
50211: GO 50312
// if c < 25 or refueling [ base ] then
50213: LD_VAR 0 4
50217: PUSH
50218: LD_INT 25
50220: LESS
50221: PUSH
50222: LD_VAR 0 9
50226: PUSH
50227: LD_VAR 0 1
50231: ARRAY
50232: OR
50233: IFFALSE 50312
// begin ComMoveUnit ( ai_cargo_bay [ base ] , ai_depot [ base ] ) ;
50235: LD_EXP 71
50239: PUSH
50240: LD_VAR 0 1
50244: ARRAY
50245: PPUSH
50246: LD_EXP 36
50250: PUSH
50251: LD_VAR 0 1
50255: ARRAY
50256: PPUSH
50257: CALL_OW 112
// AddComRefuel ( ai_cargo_bay [ base ] , ai_depot [ base ] ) ;
50261: LD_EXP 71
50265: PUSH
50266: LD_VAR 0 1
50270: ARRAY
50271: PPUSH
50272: LD_EXP 36
50276: PUSH
50277: LD_VAR 0 1
50281: ARRAY
50282: PPUSH
50283: CALL_OW 210
// refueling = Replace ( refueling , base , true ) ;
50287: LD_ADDR_VAR 0 9
50291: PUSH
50292: LD_VAR 0 9
50296: PPUSH
50297: LD_VAR 0 1
50301: PPUSH
50302: LD_INT 1
50304: PPUSH
50305: CALL_OW 1
50309: ST_TO_ADDR
// continue ;
50310: GO 49906
// end ; end ; case base of 1 :
50312: LD_VAR 0 1
50316: PUSH
50317: LD_INT 1
50319: DOUBLE
50320: EQUAL
50321: IFTRUE 50325
50323: GO 50335
50325: POP
// area_list = [ ] ; 2 :
50326: LD_ADDR_VAR 0 2
50330: PUSH
50331: EMPTY
50332: ST_TO_ADDR
50333: GO 50379
50335: LD_INT 2
50337: DOUBLE
50338: EQUAL
50339: IFTRUE 50343
50341: GO 50378
50343: POP
// begin area_list = [ am_crate_area ] ;
50344: LD_ADDR_VAR 0 2
50348: PUSH
50349: LD_INT 9
50351: PUSH
50352: EMPTY
50353: LIST
50354: ST_TO_ADDR
// if not cargo_bay_destroyed_in_unsafe_area then
50355: LD_EXP 108
50359: NOT
50360: IFFALSE 50376
// area_list = area_list ^ am_crate_area_unsafe ;
50362: LD_ADDR_VAR 0 2
50366: PUSH
50367: LD_VAR 0 2
50371: PUSH
50372: LD_INT 10
50374: ADD
50375: ST_TO_ADDR
// end ; end ;
50376: GO 50379
50378: POP
// crates_list = [ ] ;
50379: LD_ADDR_VAR 0 6
50383: PUSH
50384: EMPTY
50385: ST_TO_ADDR
// for b in area_list do
50386: LD_ADDR_VAR 0 7
50390: PUSH
50391: LD_VAR 0 2
50395: PUSH
50396: FOR_IN
50397: IFFALSE 50427
// begin crates_list = crates_list ^ GetListOfCratesInArea_ForGathering ( base , b ) ;
50399: LD_ADDR_VAR 0 6
50403: PUSH
50404: LD_VAR 0 6
50408: PUSH
50409: LD_VAR 0 1
50413: PPUSH
50414: LD_VAR 0 7
50418: PPUSH
50419: CALL 12360 0 2
50423: ADD
50424: ST_TO_ADDR
// end ;
50425: GO 50396
50427: POP
50428: POP
// if crates_list > 0 and ai_depot [ base ] > 0 then
50429: LD_VAR 0 6
50433: PUSH
50434: LD_INT 0
50436: GREATER
50437: PUSH
50438: LD_EXP 36
50442: PUSH
50443: LD_VAR 0 1
50447: ARRAY
50448: PUSH
50449: LD_INT 0
50451: GREATER
50452: AND
50453: IFFALSE 50624
// begin temp_list = [ ] ;
50455: LD_ADDR_VAR 0 5
50459: PUSH
50460: EMPTY
50461: ST_TO_ADDR
// for c in crates_list do
50462: LD_ADDR_VAR 0 4
50466: PUSH
50467: LD_VAR 0 6
50471: PUSH
50472: FOR_IN
50473: IFFALSE 50522
// temp_list = temp_list ^ GetDistUnitXY ( ai_cargo_bay [ base ] , c [ 1 ] , c [ 2 ] ) ;
50475: LD_ADDR_VAR 0 5
50479: PUSH
50480: LD_VAR 0 5
50484: PUSH
50485: LD_EXP 71
50489: PUSH
50490: LD_VAR 0 1
50494: ARRAY
50495: PPUSH
50496: LD_VAR 0 4
50500: PUSH
50501: LD_INT 1
50503: ARRAY
50504: PPUSH
50505: LD_VAR 0 4
50509: PUSH
50510: LD_INT 2
50512: ARRAY
50513: PPUSH
50514: CALL_OW 297
50518: ADD
50519: ST_TO_ADDR
50520: GO 50472
50522: POP
50523: POP
// temp_list = WorstFromListByList ( crates_list , temp_list ) ;
50524: LD_ADDR_VAR 0 5
50528: PUSH
50529: LD_VAR 0 6
50533: PPUSH
50534: LD_VAR 0 5
50538: PPUSH
50539: CALL_OW 78
50543: ST_TO_ADDR
// if CanCarryNext ( ai_cargo_bay [ base ] ) then
50544: LD_EXP 71
50548: PUSH
50549: LD_VAR 0 1
50553: ARRAY
50554: PPUSH
50555: CALL_OW 282
50559: IFFALSE 50596
// ComCollect ( ai_cargo_bay [ base ] , temp_list [ 1 ] , temp_list [ 2 ] ) else
50561: LD_EXP 71
50565: PUSH
50566: LD_VAR 0 1
50570: ARRAY
50571: PPUSH
50572: LD_VAR 0 5
50576: PUSH
50577: LD_INT 1
50579: ARRAY
50580: PPUSH
50581: LD_VAR 0 5
50585: PUSH
50586: LD_INT 2
50588: ARRAY
50589: PPUSH
50590: CALL_OW 117
50594: GO 50622
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) ;
50596: LD_EXP 71
50600: PUSH
50601: LD_VAR 0 1
50605: ARRAY
50606: PPUSH
50607: LD_EXP 36
50611: PUSH
50612: LD_VAR 0 1
50616: ARRAY
50617: PPUSH
50618: CALL_OW 161
// end else
50622: GO 50799
// if IsOk ( ai_depot [ base ] ) and Carry ( ai_cargo_bay [ base ] ) then
50624: LD_EXP 36
50628: PUSH
50629: LD_VAR 0 1
50633: ARRAY
50634: PPUSH
50635: CALL_OW 302
50639: PUSH
50640: LD_EXP 71
50644: PUSH
50645: LD_VAR 0 1
50649: ARRAY
50650: PPUSH
50651: CALL_OW 281
50655: AND
50656: IFFALSE 50686
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) else
50658: LD_EXP 71
50662: PUSH
50663: LD_VAR 0 1
50667: ARRAY
50668: PPUSH
50669: LD_EXP 36
50673: PUSH
50674: LD_VAR 0 1
50678: ARRAY
50679: PPUSH
50680: CALL_OW 161
50684: GO 50799
// if not IsInArea ( ai_cargo_bay [ base ] , area ) then
50686: LD_EXP 71
50690: PUSH
50691: LD_VAR 0 1
50695: ARRAY
50696: PPUSH
50697: LD_VAR 0 3
50701: PPUSH
50702: CALL_OW 308
50706: NOT
50707: IFFALSE 50799
// if IsOk ( ai_depot [ base ] ) then
50709: LD_EXP 36
50713: PUSH
50714: LD_VAR 0 1
50718: ARRAY
50719: PPUSH
50720: CALL_OW 302
50724: IFFALSE 50754
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) else
50726: LD_EXP 71
50730: PUSH
50731: LD_VAR 0 1
50735: ARRAY
50736: PPUSH
50737: LD_EXP 36
50741: PUSH
50742: LD_VAR 0 1
50746: ARRAY
50747: PPUSH
50748: CALL_OW 161
50752: GO 50799
// ComMoveXY ( ai_cargo_bay [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
50754: LD_EXP 71
50758: PUSH
50759: LD_VAR 0 1
50763: ARRAY
50764: PPUSH
50765: LD_EXP 59
50769: PUSH
50770: LD_VAR 0 1
50774: ARRAY
50775: PUSH
50776: LD_INT 1
50778: ARRAY
50779: PPUSH
50780: LD_EXP 59
50784: PUSH
50785: LD_VAR 0 1
50789: ARRAY
50790: PUSH
50791: LD_INT 2
50793: ARRAY
50794: PPUSH
50795: CALL_OW 111
// end ;
50799: GO 49906
50801: POP
50802: POP
// until false ;
50803: LD_INT 0
50805: IFFALSE 49867
// end ;
50807: PPOPN 9
50809: 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 ;
50810: GO 50812
50812: DISABLE
50813: LD_INT 0
50815: PPUSH
50816: PPUSH
50817: PPUSH
50818: PPUSH
50819: PPUSH
50820: PPUSH
50821: PPUSH
50822: PPUSH
50823: PPUSH
// begin repeat if ai_bases = 0 then
50824: LD_EXP 26
50828: PUSH
50829: LD_INT 0
50831: EQUAL
50832: IFFALSE 50836
// exit ;
50834: GO 51570
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
50836: LD_INT 35
50838: PUSH
50839: LD_EXP 26
50843: PUSH
50844: LD_INT 0
50846: PLUS
50847: MOD
50848: PPUSH
50849: CALL_OW 67
// for base in ai_bases do
50853: LD_ADDR_VAR 0 6
50857: PUSH
50858: LD_EXP 26
50862: PUSH
50863: FOR_IN
50864: IFFALSE 51564
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
50866: LD_INT 35
50868: PUSH
50869: LD_EXP 26
50873: PUSH
50874: LD_INT 0
50876: PLUS
50877: DIV
50878: PPUSH
50879: CALL_OW 67
// side = GetBaseSide ( base ) ;
50883: LD_ADDR_VAR 0 1
50887: PUSH
50888: LD_VAR 0 6
50892: PPUSH
50893: CALL 18937 0 1
50897: ST_TO_ADDR
// scientists_list = ai_scientists [ base ] diff ai_heal_these_humans [ base ] ;
50898: LD_ADDR_VAR 0 3
50902: PUSH
50903: LD_EXP 32
50907: PUSH
50908: LD_VAR 0 6
50912: ARRAY
50913: PUSH
50914: LD_EXP 61
50918: PUSH
50919: LD_VAR 0 6
50923: ARRAY
50924: DIFF
50925: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
50926: LD_ADDR_VAR 0 4
50930: PUSH
50931: LD_EXP 61
50935: PUSH
50936: LD_VAR 0 6
50940: ARRAY
50941: ST_TO_ADDR
// i = 1 ;
50942: LD_ADDR_VAR 0 2
50946: PUSH
50947: LD_INT 1
50949: ST_TO_ADDR
// while i <= scientists_list do
50950: LD_VAR 0 2
50954: PUSH
50955: LD_VAR 0 3
50959: LESSEQUAL
50960: IFFALSE 51043
// begin if GetLives ( scientists_list [ i ] ) <= 700 then
50962: LD_VAR 0 3
50966: PUSH
50967: LD_VAR 0 2
50971: ARRAY
50972: PPUSH
50973: CALL_OW 256
50977: PUSH
50978: LD_INT 700
50980: LESSEQUAL
50981: IFFALSE 51027
// begin temp_list = temp_list ^ scientists_list [ i ] ;
50983: LD_ADDR_VAR 0 4
50987: PUSH
50988: LD_VAR 0 4
50992: PUSH
50993: LD_VAR 0 3
50997: PUSH
50998: LD_VAR 0 2
51002: ARRAY
51003: ADD
51004: ST_TO_ADDR
// scientists_list = Delete ( scientists_list , i ) ;
51005: LD_ADDR_VAR 0 3
51009: PUSH
51010: LD_VAR 0 3
51014: PPUSH
51015: LD_VAR 0 2
51019: PPUSH
51020: CALL_OW 3
51024: ST_TO_ADDR
// continue ;
51025: GO 50950
// end ; i = i + 1 ;
51027: LD_ADDR_VAR 0 2
51031: PUSH
51032: LD_VAR 0 2
51036: PUSH
51037: LD_INT 1
51039: PLUS
51040: ST_TO_ADDR
// end ;
51041: GO 50950
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
51043: LD_ADDR_EXP 61
51047: PUSH
51048: LD_EXP 61
51052: PPUSH
51053: LD_VAR 0 6
51057: PPUSH
51058: LD_VAR 0 4
51062: PPUSH
51063: CALL_OW 1
51067: ST_TO_ADDR
// temp_list = [ ] ;
51068: LD_ADDR_VAR 0 4
51072: PUSH
51073: EMPTY
51074: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
51075: LD_ADDR_VAR 0 2
51079: PUSH
51080: LD_EXP 61
51084: PUSH
51085: LD_VAR 0 6
51089: ARRAY
51090: PUSH
51091: FOR_IN
51092: IFFALSE 51142
// if GetLives ( i ) < 1000 and IsInUnit ( i ) = 0 then
51094: LD_VAR 0 2
51098: PPUSH
51099: CALL_OW 256
51103: PUSH
51104: LD_INT 1000
51106: LESS
51107: PUSH
51108: LD_VAR 0 2
51112: PPUSH
51113: CALL_OW 310
51117: PUSH
51118: LD_INT 0
51120: EQUAL
51121: AND
51122: IFFALSE 51140
// temp_list = temp_list ^ i ;
51124: LD_ADDR_VAR 0 4
51128: PUSH
51129: LD_VAR 0 4
51133: PUSH
51134: LD_VAR 0 2
51138: ADD
51139: ST_TO_ADDR
51140: GO 51091
51142: POP
51143: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
51144: LD_ADDR_EXP 61
51148: PUSH
51149: LD_EXP 61
51153: PPUSH
51154: LD_VAR 0 6
51158: PPUSH
51159: LD_VAR 0 4
51163: PPUSH
51164: CALL_OW 1
51168: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
51169: LD_ADDR_VAR 0 2
51173: PUSH
51174: LD_EXP 61
51178: PUSH
51179: LD_VAR 0 6
51183: ARRAY
51184: PUSH
51185: FOR_IN
51186: IFFALSE 51274
// begin if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
51188: LD_VAR 0 2
51192: PPUSH
51193: LD_EXP 59
51197: PUSH
51198: LD_VAR 0 6
51202: ARRAY
51203: PUSH
51204: LD_INT 1
51206: ARRAY
51207: PPUSH
51208: LD_EXP 59
51212: PUSH
51213: LD_VAR 0 6
51217: ARRAY
51218: PUSH
51219: LD_INT 2
51221: ARRAY
51222: PPUSH
51223: CALL_OW 297
51227: PUSH
51228: LD_INT 4
51230: GREATER
51231: IFFALSE 51272
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
51233: LD_VAR 0 2
51237: PPUSH
51238: LD_EXP 59
51242: PUSH
51243: LD_VAR 0 6
51247: ARRAY
51248: PUSH
51249: LD_INT 1
51251: ARRAY
51252: PPUSH
51253: LD_EXP 59
51257: PUSH
51258: LD_VAR 0 6
51262: ARRAY
51263: PUSH
51264: LD_INT 2
51266: ARRAY
51267: PPUSH
51268: CALL_OW 111
// end ;
51272: GO 51185
51274: POP
51275: POP
// if scientists_list = 0 then
51276: LD_VAR 0 3
51280: PUSH
51281: LD_INT 0
51283: EQUAL
51284: IFFALSE 51288
// continue ;
51286: GO 50863
// if ai_heal_these_humans [ base ] > 0 then
51288: LD_EXP 61
51292: PUSH
51293: LD_VAR 0 6
51297: ARRAY
51298: PUSH
51299: LD_INT 0
51301: GREATER
51302: IFFALSE 51497
// begin area = GetBaseArea ( base ) ;
51304: LD_ADDR_VAR 0 9
51308: PUSH
51309: LD_VAR 0 6
51313: PPUSH
51314: CALL 18845 0 1
51318: ST_TO_ADDR
// temp_list = UnitFilter ( ai_heal_these_humans [ base ] , [ f_inarea , area ] ) ;
51319: LD_ADDR_VAR 0 4
51323: PUSH
51324: LD_EXP 61
51328: PUSH
51329: LD_VAR 0 6
51333: ARRAY
51334: PPUSH
51335: LD_INT 95
51337: PUSH
51338: LD_VAR 0 9
51342: PUSH
51343: EMPTY
51344: LIST
51345: LIST
51346: PPUSH
51347: CALL_OW 72
51351: ST_TO_ADDR
// if temp_list > 0 then
51352: LD_VAR 0 4
51356: PUSH
51357: LD_INT 0
51359: GREATER
51360: IFFALSE 51497
// begin scientists_list = GetHumansOutOfUnits ( scientists_list ) ;
51362: LD_ADDR_VAR 0 3
51366: PUSH
51367: LD_VAR 0 3
51371: PPUSH
51372: CALL 32829 0 1
51376: ST_TO_ADDR
// repeat i = 1 ;
51377: LD_ADDR_VAR 0 2
51381: PUSH
51382: LD_INT 1
51384: ST_TO_ADDR
// while i <= temp_list do
51385: LD_VAR 0 2
51389: PUSH
51390: LD_VAR 0 4
51394: LESSEQUAL
51395: IFFALSE 51487
// begin if scientists_list = 0 then
51397: LD_VAR 0 3
51401: PUSH
51402: LD_INT 0
51404: EQUAL
51405: IFFALSE 51409
// break ;
51407: GO 51487
// temp_unit = NearestUnitToUnit ( scientists_list , temp_list [ i ] ) ;
51409: LD_ADDR_VAR 0 5
51413: PUSH
51414: LD_VAR 0 3
51418: PPUSH
51419: LD_VAR 0 4
51423: PUSH
51424: LD_VAR 0 2
51428: ARRAY
51429: PPUSH
51430: CALL_OW 74
51434: ST_TO_ADDR
// ComHeal ( temp_unit , temp_list [ i ] ) ;
51435: LD_VAR 0 5
51439: PPUSH
51440: LD_VAR 0 4
51444: PUSH
51445: LD_VAR 0 2
51449: ARRAY
51450: PPUSH
51451: CALL_OW 128
// scientists_list = scientists_list diff temp_unit ;
51455: LD_ADDR_VAR 0 3
51459: PUSH
51460: LD_VAR 0 3
51464: PUSH
51465: LD_VAR 0 5
51469: DIFF
51470: ST_TO_ADDR
// i = i + 1 ;
51471: LD_ADDR_VAR 0 2
51475: PUSH
51476: LD_VAR 0 2
51480: PUSH
51481: LD_INT 1
51483: PLUS
51484: ST_TO_ADDR
// end ;
51485: GO 51385
// until scientists_list = 0 ;
51487: LD_VAR 0 3
51491: PUSH
51492: LD_INT 0
51494: EQUAL
51495: IFFALSE 51377
// end ; end ; DistributeHumansToBuildings ( base , scientists_list , UnitFilter ( ai_labs [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_scientistic , 6 , true , false ) ;
51497: LD_VAR 0 6
51501: PPUSH
51502: LD_VAR 0 3
51506: PPUSH
51507: LD_EXP 37
51511: PUSH
51512: LD_VAR 0 6
51516: ARRAY
51517: PPUSH
51518: LD_INT 50
51520: PUSH
51521: EMPTY
51522: LIST
51523: PUSH
51524: LD_INT 3
51526: PUSH
51527: LD_INT 57
51529: PUSH
51530: EMPTY
51531: LIST
51532: PUSH
51533: EMPTY
51534: LIST
51535: LIST
51536: PUSH
51537: EMPTY
51538: LIST
51539: LIST
51540: PPUSH
51541: CALL_OW 72
51545: PPUSH
51546: LD_INT 4
51548: PPUSH
51549: LD_INT 6
51551: PPUSH
51552: LD_INT 1
51554: PPUSH
51555: LD_INT 0
51557: PPUSH
51558: CALL 22559 0 7
// end ;
51562: GO 50863
51564: POP
51565: POP
// until false ;
51566: LD_INT 0
51568: IFFALSE 50824
// end ; end_of_file
51570: PPOPN 9
51572: END
// export function GetApes ( side ) ; begin
51573: LD_INT 0
51575: 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 ] ] ] ) ;
51576: LD_ADDR_VAR 0 2
51580: PUSH
51581: LD_INT 22
51583: PUSH
51584: LD_VAR 0 1
51588: PUSH
51589: EMPTY
51590: LIST
51591: LIST
51592: PUSH
51593: LD_INT 2
51595: PUSH
51596: LD_INT 25
51598: PUSH
51599: LD_INT 12
51601: PUSH
51602: EMPTY
51603: LIST
51604: LIST
51605: PUSH
51606: LD_INT 25
51608: PUSH
51609: LD_INT 15
51611: PUSH
51612: EMPTY
51613: LIST
51614: LIST
51615: PUSH
51616: LD_INT 25
51618: PUSH
51619: LD_INT 16
51621: PUSH
51622: EMPTY
51623: LIST
51624: LIST
51625: PUSH
51626: LD_INT 25
51628: PUSH
51629: LD_INT 17
51631: PUSH
51632: EMPTY
51633: LIST
51634: LIST
51635: PUSH
51636: EMPTY
51637: LIST
51638: LIST
51639: LIST
51640: LIST
51641: LIST
51642: PUSH
51643: EMPTY
51644: LIST
51645: LIST
51646: PPUSH
51647: CALL_OW 69
51651: ST_TO_ADDR
// end ;
51652: LD_VAR 0 2
51656: RET
// export function GetMainPlayerCharacters ; begin
51657: LD_INT 0
51659: PPUSH
// result = [ Heike , Sonya , Oswald , Ralph , Kowalski , Evelyn , Olaf , Dwayne , Aviradze , Swansson , Khattam , Makise ] ;
51660: LD_ADDR_VAR 0 1
51664: PUSH
51665: LD_EXP 10
51669: PUSH
51670: LD_EXP 11
51674: PUSH
51675: LD_EXP 12
51679: PUSH
51680: LD_EXP 13
51684: PUSH
51685: LD_EXP 14
51689: PUSH
51690: LD_EXP 15
51694: PUSH
51695: LD_EXP 16
51699: PUSH
51700: LD_EXP 17
51704: PUSH
51705: LD_EXP 18
51709: PUSH
51710: LD_EXP 19
51714: PUSH
51715: LD_EXP 20
51719: PUSH
51720: LD_EXP 21
51724: PUSH
51725: EMPTY
51726: LIST
51727: LIST
51728: LIST
51729: LIST
51730: LIST
51731: LIST
51732: LIST
51733: LIST
51734: LIST
51735: LIST
51736: LIST
51737: LIST
51738: ST_TO_ADDR
// end ;
51739: LD_VAR 0 1
51743: RET
// export function GetNonmainPlayerCharacters ; begin
51744: LD_INT 0
51746: PPUSH
// result = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) diff ( GetApes ( you ) ^ GetMainPlayerCharacters ) ;
51747: LD_ADDR_VAR 0 1
51751: PUSH
51752: LD_INT 22
51754: PUSH
51755: LD_EXP 2
51759: PUSH
51760: EMPTY
51761: LIST
51762: LIST
51763: PUSH
51764: LD_INT 21
51766: PUSH
51767: LD_INT 1
51769: PUSH
51770: EMPTY
51771: LIST
51772: LIST
51773: PUSH
51774: EMPTY
51775: LIST
51776: LIST
51777: PPUSH
51778: CALL_OW 69
51782: PUSH
51783: LD_EXP 2
51787: PPUSH
51788: CALL 51573 0 1
51792: PUSH
51793: CALL 51657 0 0
51797: ADD
51798: DIFF
51799: ST_TO_ADDR
// end ;
51800: LD_VAR 0 1
51804: RET
// every 0 0$1.1 do var ok_list , wounded_list , i , un , temp_list , pris_map ;
51805: GO 51807
51807: DISABLE
51808: LD_INT 0
51810: PPUSH
51811: PPUSH
51812: PPUSH
51813: PPUSH
51814: PPUSH
51815: PPUSH
// begin repeat wait ( 0 0$0.2 ) ;
51816: LD_INT 7
51818: PPUSH
51819: CALL_OW 67
// ok_list = GetBaseHumans ( 1 ) ;
51823: LD_ADDR_VAR 0 1
51827: PUSH
51828: LD_INT 1
51830: PPUSH
51831: CALL 52825 0 1
51835: ST_TO_ADDR
// ok_list = UnitFilter ( ok_list , [ f_lives , 251 ] ) ;
51836: LD_ADDR_VAR 0 1
51840: PUSH
51841: LD_VAR 0 1
51845: PPUSH
51846: LD_INT 24
51848: PUSH
51849: LD_INT 251
51851: PUSH
51852: EMPTY
51853: LIST
51854: LIST
51855: PPUSH
51856: CALL_OW 72
51860: ST_TO_ADDR
// until ok_list <= 3 ;
51861: LD_VAR 0 1
51865: PUSH
51866: LD_INT 3
51868: LESSEQUAL
51869: IFFALSE 51816
// wounded_list = GetBaseHumans ( 1 ) diff ok_list ;
51871: LD_ADDR_VAR 0 2
51875: PUSH
51876: LD_INT 1
51878: PPUSH
51879: CALL 52825 0 1
51883: PUSH
51884: LD_VAR 0 1
51888: DIFF
51889: ST_TO_ADDR
// if ok_list < 3 then
51890: LD_VAR 0 1
51894: PUSH
51895: LD_INT 3
51897: LESS
51898: IFFALSE 51976
// begin for i = 1 to 3 - ok_list do
51900: LD_ADDR_VAR 0 3
51904: PUSH
51905: DOUBLE
51906: LD_INT 1
51908: DEC
51909: ST_TO_ADDR
51910: LD_INT 3
51912: PUSH
51913: LD_VAR 0 1
51917: MINUS
51918: PUSH
51919: FOR_TO
51920: IFFALSE 51974
// begin if wounded_list = 0 then
51922: LD_VAR 0 2
51926: PUSH
51927: LD_INT 0
51929: EQUAL
51930: IFFALSE 51934
// break ;
51932: GO 51974
// ok_list = ok_list ^ wounded_list [ 1 ] ;
51934: LD_ADDR_VAR 0 1
51938: PUSH
51939: LD_VAR 0 1
51943: PUSH
51944: LD_VAR 0 2
51948: PUSH
51949: LD_INT 1
51951: ARRAY
51952: ADD
51953: ST_TO_ADDR
// wounded_list = Delete ( wounded_list , 1 ) ;
51954: LD_ADDR_VAR 0 2
51958: PUSH
51959: LD_VAR 0 2
51963: PPUSH
51964: LD_INT 1
51966: PPUSH
51967: CALL_OW 3
51971: ST_TO_ADDR
// end ;
51972: GO 51919
51974: POP
51975: POP
// end ; if ok_list < 3 then
51976: LD_VAR 0 1
51980: PUSH
51981: LD_INT 3
51983: LESS
51984: IFFALSE 52085
// begin temp_list = CreateUnitsWithClass ( 3 - ok_list , class_engineer , 1 ) ;
51986: LD_ADDR_VAR 0 5
51990: PUSH
51991: LD_INT 3
51993: PUSH
51994: LD_VAR 0 1
51998: MINUS
51999: PPUSH
52000: LD_INT 2
52002: PPUSH
52003: LD_INT 1
52005: PPUSH
52006: CALL 9948 0 3
52010: ST_TO_ADDR
// for i in temp_list do
52011: LD_ADDR_VAR 0 3
52015: PUSH
52016: LD_VAR 0 5
52020: PUSH
52021: FOR_IN
52022: IFFALSE 52067
// PlaceUnitXYR ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] , 7 , false ) ;
52024: LD_VAR 0 3
52028: PPUSH
52029: LD_EXP 59
52033: PUSH
52034: LD_INT 1
52036: ARRAY
52037: PUSH
52038: LD_INT 1
52040: ARRAY
52041: PPUSH
52042: LD_EXP 59
52046: PUSH
52047: LD_INT 1
52049: ARRAY
52050: PUSH
52051: LD_INT 2
52053: ARRAY
52054: PPUSH
52055: LD_INT 7
52057: PPUSH
52058: LD_INT 0
52060: PPUSH
52061: CALL_OW 50
52065: GO 52021
52067: POP
52068: POP
// ok_list = ok_list ^ temp_list ;
52069: LD_ADDR_VAR 0 1
52073: PUSH
52074: LD_VAR 0 1
52078: PUSH
52079: LD_VAR 0 5
52083: ADD
52084: ST_TO_ADDR
// end ; un = 0 ;
52085: LD_ADDR_VAR 0 4
52089: PUSH
52090: LD_INT 0
52092: ST_TO_ADDR
// for i in ok_list do
52093: LD_ADDR_VAR 0 3
52097: PUSH
52098: LD_VAR 0 1
52102: PUSH
52103: FOR_IN
52104: IFFALSE 52136
// if See ( you , i ) then
52106: LD_EXP 2
52110: PPUSH
52111: LD_VAR 0 3
52115: PPUSH
52116: CALL_OW 292
52120: IFFALSE 52134
// begin un = i ;
52122: LD_ADDR_VAR 0 4
52126: PUSH
52127: LD_VAR 0 3
52131: ST_TO_ADDR
// break ;
52132: GO 52136
// end ;
52134: GO 52103
52136: POP
52137: POP
// if un = 0 then
52138: LD_VAR 0 4
52142: PUSH
52143: LD_INT 0
52145: EQUAL
52146: IFFALSE 52162
// un = ok_list [ 1 ] ;
52148: LD_ADDR_VAR 0 4
52152: PUSH
52153: LD_VAR 0 1
52157: PUSH
52158: LD_INT 1
52160: ARRAY
52161: ST_TO_ADDR
// DialogueOn ;
52162: CALL_OW 6
// if GetSex ( un ) = sex_male then
52166: LD_VAR 0 4
52170: PPUSH
52171: CALL_OW 258
52175: PUSH
52176: LD_INT 1
52178: EQUAL
52179: IFFALSE 52195
// ForceSay ( un , D3-PriM-1 ) else
52181: LD_VAR 0 4
52185: PPUSH
52186: LD_STRING D3-PriM-1
52188: PPUSH
52189: CALL_OW 91
52193: GO 52207
// ForceSay ( un , D3-PriF-1 ) ;
52195: LD_VAR 0 4
52199: PPUSH
52200: LD_STRING D3-PriF-1
52202: PPUSH
52203: CALL_OW 91
// DialogueOff ;
52207: CALL_OW 7
// for i in wounded_list do
52211: LD_ADDR_VAR 0 3
52215: PUSH
52216: LD_VAR 0 2
52220: PUSH
52221: FOR_IN
52222: IFFALSE 52235
// KillUnit ( i ) ;
52224: LD_VAR 0 3
52228: PPUSH
52229: CALL_OW 66
52233: GO 52221
52235: POP
52236: POP
// legion_prisoners = ok_list ;
52237: LD_ADDR_EXP 109
52241: PUSH
52242: LD_VAR 0 1
52246: ST_TO_ADDR
// for i in legion_prisoners do
52247: LD_ADDR_VAR 0 3
52251: PUSH
52252: LD_EXP 109
52256: PUSH
52257: FOR_IN
52258: IFFALSE 52461
// begin SetSide ( i , you_alt ) ;
52260: LD_VAR 0 3
52264: PPUSH
52265: LD_EXP 8
52269: PPUSH
52270: CALL_OW 235
// if GetClass ( i ) in [ class_soldier , class_mortar ] then
52274: LD_VAR 0 3
52278: PPUSH
52279: CALL_OW 257
52283: PUSH
52284: LD_INT 1
52286: PUSH
52287: LD_INT 8
52289: PUSH
52290: EMPTY
52291: LIST
52292: LIST
52293: IN
52294: IFFALSE 52308
// SetClass ( i , class_engineer ) ;
52296: LD_VAR 0 3
52300: PPUSH
52301: LD_INT 2
52303: PPUSH
52304: CALL_OW 336
// pris_map = Replace ( pris_map , i , GetAttr ( i , attr_stamina ) ) ;
52308: LD_ADDR_VAR 0 6
52312: PUSH
52313: LD_VAR 0 6
52317: PPUSH
52318: LD_VAR 0 3
52322: PPUSH
52323: LD_VAR 0 3
52327: PPUSH
52328: LD_INT 1
52330: PPUSH
52331: CALL_OW 260
52335: PPUSH
52336: CALL_OW 1
52340: ST_TO_ADDR
// SetAttr ( i , attr_stamina , 500 ) ;
52341: LD_VAR 0 3
52345: PPUSH
52346: LD_INT 1
52348: PPUSH
52349: LD_INT 500
52351: PPUSH
52352: CALL_OW 239
// if GetLives ( i ) <= 500 then
52356: LD_VAR 0 3
52360: PPUSH
52361: CALL_OW 256
52365: PUSH
52366: LD_INT 500
52368: LESSEQUAL
52369: IFFALSE 52383
// SetLives ( i , 500 ) ;
52371: LD_VAR 0 3
52375: PPUSH
52376: LD_INT 500
52378: PPUSH
52379: CALL_OW 234
// un = IsInUnit ( i ) ;
52383: LD_ADDR_VAR 0 4
52387: PUSH
52388: LD_VAR 0 3
52392: PPUSH
52393: CALL_OW 310
52397: ST_TO_ADDR
// if un > 0 then
52398: LD_VAR 0 4
52402: PUSH
52403: LD_INT 0
52405: GREATER
52406: IFFALSE 52459
// case GetType ( un ) of unit_building :
52408: LD_VAR 0 4
52412: PPUSH
52413: CALL_OW 247
52417: PUSH
52418: LD_INT 3
52420: DOUBLE
52421: EQUAL
52422: IFTRUE 52426
52424: GO 52438
52426: POP
// ComExitBuilding ( i ) ; unit_vehicle :
52427: LD_VAR 0 3
52431: PPUSH
52432: CALL_OW 122
52436: GO 52459
52438: LD_INT 2
52440: DOUBLE
52441: EQUAL
52442: IFTRUE 52446
52444: GO 52458
52446: POP
// ComExitVehicle ( i ) ; end ;
52447: LD_VAR 0 3
52451: PPUSH
52452: CALL_OW 121
52456: GO 52459
52458: POP
// end ;
52459: GO 52257
52461: POP
52462: POP
// ai_bases = ai_bases diff 1 ;
52463: LD_ADDR_EXP 26
52467: PUSH
52468: LD_EXP 26
52472: PUSH
52473: LD_INT 1
52475: DIFF
52476: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , legion ] , [ f_type , unit_building ] , [ f_inarea , big_hill_area ] ] ) ^ ai_apemen_engineers [ 1 ] ^ UnitFilter ( ai_soldiers [ 1 ] , [ f_or , [ f_class , class_apeman ] , [ f_class , class_apeman_engineer ] , [ f_class , class_apeman_soldier ] , [ f_class , class_apeman_kamikaze ] ] ) do
52477: LD_ADDR_VAR 0 3
52481: PUSH
52482: LD_INT 22
52484: PUSH
52485: LD_EXP 4
52489: PUSH
52490: EMPTY
52491: LIST
52492: LIST
52493: PUSH
52494: LD_INT 21
52496: PUSH
52497: LD_INT 3
52499: PUSH
52500: EMPTY
52501: LIST
52502: LIST
52503: PUSH
52504: LD_INT 95
52506: PUSH
52507: LD_INT 11
52509: PUSH
52510: EMPTY
52511: LIST
52512: LIST
52513: PUSH
52514: EMPTY
52515: LIST
52516: LIST
52517: LIST
52518: PPUSH
52519: CALL_OW 69
52523: PUSH
52524: LD_EXP 34
52528: PUSH
52529: LD_INT 1
52531: ARRAY
52532: ADD
52533: PUSH
52534: LD_EXP 27
52538: PUSH
52539: LD_INT 1
52541: ARRAY
52542: PPUSH
52543: LD_INT 2
52545: PUSH
52546: LD_INT 25
52548: PUSH
52549: LD_INT 12
52551: PUSH
52552: EMPTY
52553: LIST
52554: LIST
52555: PUSH
52556: LD_INT 25
52558: PUSH
52559: LD_INT 16
52561: PUSH
52562: EMPTY
52563: LIST
52564: LIST
52565: PUSH
52566: LD_INT 25
52568: PUSH
52569: LD_INT 15
52571: PUSH
52572: EMPTY
52573: LIST
52574: LIST
52575: PUSH
52576: LD_INT 25
52578: PUSH
52579: LD_INT 17
52581: PUSH
52582: EMPTY
52583: LIST
52584: LIST
52585: PUSH
52586: EMPTY
52587: LIST
52588: LIST
52589: LIST
52590: LIST
52591: LIST
52592: PPUSH
52593: CALL_OW 72
52597: ADD
52598: PUSH
52599: FOR_IN
52600: IFFALSE 52618
// SetSide ( i , you ) ;
52602: LD_VAR 0 3
52606: PPUSH
52607: LD_EXP 2
52611: PPUSH
52612: CALL_OW 235
52616: GO 52599
52618: POP
52619: POP
// SetLegionMainDepotResources ( true ) ;
52620: LD_INT 1
52622: PPUSH
52623: CALL 53157 0 1
// SetLegionSecondaryDepotResources ( true ) ;
52627: LD_INT 1
52629: PPUSH
52630: CALL 53270 0 1
// wait ( 0 0$5 ) ;
52634: LD_INT 175
52636: PPUSH
52637: CALL_OW 67
// DialogueOn ;
52641: CALL_OW 6
// ForceSay ( Heike , D3-H-1 ) ;
52645: LD_EXP 10
52649: PPUSH
52650: LD_STRING D3-H-1
52652: PPUSH
52653: CALL_OW 91
// SayRadio ( Abdul , D3-Ab-1 ) ;
52657: LD_EXP 23
52661: PPUSH
52662: LD_STRING D3-Ab-1
52664: PPUSH
52665: CALL_OW 94
// SayRadio ( Abdul , D3-Ab-2 ) ;
52669: LD_EXP 23
52673: PPUSH
52674: LD_STRING D3-Ab-2
52676: PPUSH
52677: CALL_OW 94
// SayRadio ( Abdul , D3-Ab-3 ) ;
52681: LD_EXP 23
52685: PPUSH
52686: LD_STRING D3-Ab-3
52688: PPUSH
52689: CALL_OW 94
// ForceSay ( Heike , D3-H-2 ) ;
52693: LD_EXP 10
52697: PPUSH
52698: LD_STRING D3-H-2
52700: PPUSH
52701: CALL_OW 91
// ForceSay ( Heike , D3-H-3 ) ;
52705: LD_EXP 10
52709: PPUSH
52710: LD_STRING D3-H-3
52712: PPUSH
52713: CALL_OW 91
// DialogueOff ;
52717: CALL_OW 7
// wait ( 0 0$0.2 ) ;
52721: LD_INT 7
52723: PPUSH
52724: CALL_OW 67
// ChangeMissionObjectives ( M2 ) ;
52728: LD_STRING M2
52730: PPUSH
52731: CALL_OW 337
// wait ( 0 0$0.2 ) ;
52735: LD_INT 7
52737: PPUSH
52738: CALL_OW 67
// Query ( QUpDownHill ) ;
52742: LD_STRING QUpDownHill
52744: PPUSH
52745: CALL_OW 97
// legion_base_captured = true ;
52749: LD_ADDR_EXP 110
52753: PUSH
52754: LD_INT 1
52756: ST_TO_ADDR
// num_legion_prisoners = UnitFilter ( legion_prisoners , [ f_alive ] ) + 0 ;
52757: LD_ADDR_EXP 114
52761: PUSH
52762: LD_EXP 109
52766: PPUSH
52767: LD_INT 51
52769: PUSH
52770: EMPTY
52771: LIST
52772: PPUSH
52773: CALL_OW 72
52777: PUSH
52778: LD_INT 0
52780: PLUS
52781: ST_TO_ADDR
// for i in legion_prisoners do
52782: LD_ADDR_VAR 0 3
52786: PUSH
52787: LD_EXP 109
52791: PUSH
52792: FOR_IN
52793: IFFALSE 52820
// SetAttr ( i , attr_stamina , pris_map [ i ] ) ;
52795: LD_VAR 0 3
52799: PPUSH
52800: LD_INT 1
52802: PPUSH
52803: LD_VAR 0 6
52807: PUSH
52808: LD_VAR 0 3
52812: ARRAY
52813: PPUSH
52814: CALL_OW 239
52818: GO 52792
52820: POP
52821: POP
// end ;
52822: PPOPN 6
52824: END
// function GetBaseHumans ( base ) ; begin
52825: LD_INT 0
52827: PPUSH
// result = UnitFilter ( ( ai_soldiers [ base ] ^ ai_attacking_soldiers [ base ] ^ ai_engineers [ base ] ^ ai_mechanics_defend [ base ] ^ ai_mechanics_attack [ base ] ^ ai_sib_bomb_mechanics [ base ] ^ ai_scientists [ base ] ^ ai_attacking_scientists [ base ] ) diff 0 , [ f_not , [ f_or , [ f_class , class_apeman ] , [ f_class , class_apeman_engineer ] , [ f_class , class_apeman_soldier ] , [ f_class , class_apeman_kamikaze ] ] ] ) ;
52828: LD_ADDR_VAR 0 2
52832: PUSH
52833: LD_EXP 27
52837: PUSH
52838: LD_VAR 0 1
52842: ARRAY
52843: PUSH
52844: LD_EXP 28
52848: PUSH
52849: LD_VAR 0 1
52853: ARRAY
52854: ADD
52855: PUSH
52856: LD_EXP 29
52860: PUSH
52861: LD_VAR 0 1
52865: ARRAY
52866: ADD
52867: PUSH
52868: LD_EXP 30
52872: PUSH
52873: LD_VAR 0 1
52877: ARRAY
52878: ADD
52879: PUSH
52880: LD_EXP 31
52884: PUSH
52885: LD_VAR 0 1
52889: ARRAY
52890: ADD
52891: PUSH
52892: LD_EXP 52
52896: PUSH
52897: LD_VAR 0 1
52901: ARRAY
52902: ADD
52903: PUSH
52904: LD_EXP 32
52908: PUSH
52909: LD_VAR 0 1
52913: ARRAY
52914: ADD
52915: PUSH
52916: LD_EXP 33
52920: PUSH
52921: LD_VAR 0 1
52925: ARRAY
52926: ADD
52927: PUSH
52928: LD_INT 0
52930: DIFF
52931: PPUSH
52932: LD_INT 3
52934: PUSH
52935: LD_INT 2
52937: PUSH
52938: LD_INT 25
52940: PUSH
52941: LD_INT 12
52943: PUSH
52944: EMPTY
52945: LIST
52946: LIST
52947: PUSH
52948: LD_INT 25
52950: PUSH
52951: LD_INT 16
52953: PUSH
52954: EMPTY
52955: LIST
52956: LIST
52957: PUSH
52958: LD_INT 25
52960: PUSH
52961: LD_INT 15
52963: PUSH
52964: EMPTY
52965: LIST
52966: LIST
52967: PUSH
52968: LD_INT 25
52970: PUSH
52971: LD_INT 17
52973: PUSH
52974: EMPTY
52975: LIST
52976: LIST
52977: PUSH
52978: EMPTY
52979: LIST
52980: LIST
52981: LIST
52982: LIST
52983: LIST
52984: PUSH
52985: EMPTY
52986: LIST
52987: LIST
52988: PPUSH
52989: CALL_OW 72
52993: ST_TO_ADDR
// end ;
52994: LD_VAR 0 2
52998: RET
// every 1 trigger legion_prisoners > 0 do var hp_map , i ;
52999: LD_EXP 109
53003: PUSH
53004: LD_INT 0
53006: GREATER
53007: IFFALSE 53154
53009: GO 53011
53011: DISABLE
53012: LD_INT 0
53014: PPUSH
53015: PPUSH
// begin hp_map = [ ] ;
53016: LD_ADDR_VAR 0 1
53020: PUSH
53021: EMPTY
53022: ST_TO_ADDR
// for i in legion_prisoners do
53023: LD_ADDR_VAR 0 2
53027: PUSH
53028: LD_EXP 109
53032: PUSH
53033: FOR_IN
53034: IFFALSE 53068
// hp_map = Replace ( hp_map , i , GetLives ( i ) ) ;
53036: LD_ADDR_VAR 0 1
53040: PUSH
53041: LD_VAR 0 1
53045: PPUSH
53046: LD_VAR 0 2
53050: PPUSH
53051: LD_VAR 0 2
53055: PPUSH
53056: CALL_OW 256
53060: PPUSH
53061: CALL_OW 1
53065: ST_TO_ADDR
53066: GO 53033
53068: POP
53069: POP
// repeat wait ( 1 ) ;
53070: LD_INT 1
53072: PPUSH
53073: CALL_OW 67
// if legion_base_captured then
53077: LD_EXP 110
53081: IFFALSE 53085
// exit ;
53083: GO 53154
// for i in legion_prisoners do
53085: LD_ADDR_VAR 0 2
53089: PUSH
53090: LD_EXP 109
53094: PUSH
53095: FOR_IN
53096: IFFALSE 53148
// if hp_map <= i then
53098: LD_VAR 0 1
53102: PUSH
53103: LD_VAR 0 2
53107: LESSEQUAL
53108: IFFALSE 53146
// if hp_map [ i ] > 0 then
53110: LD_VAR 0 1
53114: PUSH
53115: LD_VAR 0 2
53119: ARRAY
53120: PUSH
53121: LD_INT 0
53123: GREATER
53124: IFFALSE 53146
// SetLives ( i , hp_map [ i ] ) ;
53126: LD_VAR 0 2
53130: PPUSH
53131: LD_VAR 0 1
53135: PUSH
53136: LD_VAR 0 2
53140: ARRAY
53141: PPUSH
53142: CALL_OW 234
53146: GO 53095
53148: POP
53149: POP
// until false ;
53150: LD_INT 0
53152: IFFALSE 53070
// end ;
53154: PPOPN 2
53156: END
// export function SetLegionMainDepotResources ( checkIfIsLive ) ; var base ; begin
53157: LD_INT 0
53159: PPUSH
53160: PPUSH
// if IsLive ( ai_depot [ 1 ] ) or not checkIfIsLive then
53161: LD_EXP 36
53165: PUSH
53166: LD_INT 1
53168: ARRAY
53169: PPUSH
53170: CALL_OW 300
53174: PUSH
53175: LD_VAR 0 1
53179: NOT
53180: OR
53181: IFFALSE 53265
// begin base = GetBase ( ai_depot [ 1 ] ) ;
53183: LD_ADDR_VAR 0 3
53187: PUSH
53188: LD_EXP 36
53192: PUSH
53193: LD_INT 1
53195: ARRAY
53196: PPUSH
53197: CALL_OW 274
53201: ST_TO_ADDR
// SetResourceType ( base , mat_cans , legion_main_depot_resources [ 1 ] ) ;
53202: LD_VAR 0 3
53206: PPUSH
53207: LD_INT 1
53209: PPUSH
53210: LD_EXP 123
53214: PUSH
53215: LD_INT 1
53217: ARRAY
53218: PPUSH
53219: CALL_OW 277
// SetResourceType ( base , mat_oil , legion_main_depot_resources [ 2 ] ) ;
53223: LD_VAR 0 3
53227: PPUSH
53228: LD_INT 2
53230: PPUSH
53231: LD_EXP 123
53235: PUSH
53236: LD_INT 2
53238: ARRAY
53239: PPUSH
53240: CALL_OW 277
// SetResourceType ( base , mat_siberit , legion_main_depot_resources [ 3 ] ) ;
53244: LD_VAR 0 3
53248: PPUSH
53249: LD_INT 3
53251: PPUSH
53252: LD_EXP 123
53256: PUSH
53257: LD_INT 3
53259: ARRAY
53260: PPUSH
53261: CALL_OW 277
// end ; end ;
53265: LD_VAR 0 2
53269: RET
// export function SetLegionSecondaryDepotResources ( checkIfIsLive ) ; var base ; begin
53270: LD_INT 0
53272: PPUSH
53273: PPUSH
// if IsLive ( leg_dep_smal ) or not checkIfIsLive then
53274: LD_INT 10
53276: PPUSH
53277: CALL_OW 300
53281: PUSH
53282: LD_VAR 0 1
53286: NOT
53287: OR
53288: IFFALSE 53368
// begin base = GetBase ( leg_dep_smal ) ;
53290: LD_ADDR_VAR 0 3
53294: PUSH
53295: LD_INT 10
53297: PPUSH
53298: CALL_OW 274
53302: ST_TO_ADDR
// SetResourceType ( base , mat_cans , 10 * Rand ( 0 , 1 ) ) ;
53303: LD_VAR 0 3
53307: PPUSH
53308: LD_INT 1
53310: PPUSH
53311: LD_INT 10
53313: PUSH
53314: LD_INT 0
53316: PPUSH
53317: LD_INT 1
53319: PPUSH
53320: CALL_OW 12
53324: MUL
53325: PPUSH
53326: CALL_OW 277
// SetResourceType ( base , mat_oil , Rand ( 1 , 2 ) ) ;
53330: LD_VAR 0 3
53334: PPUSH
53335: LD_INT 2
53337: PPUSH
53338: LD_INT 1
53340: PPUSH
53341: LD_INT 2
53343: PPUSH
53344: CALL_OW 12
53348: PPUSH
53349: CALL_OW 277
// SetResourceType ( base , mat_siberit , 0 ) ;
53353: LD_VAR 0 3
53357: PPUSH
53358: LD_INT 3
53360: PPUSH
53361: LD_INT 0
53363: PPUSH
53364: CALL_OW 277
// end ; end ;
53368: LD_VAR 0 2
53372: RET
// export function SetLoneAmDepotResources ( checkIfIsLive ) ; var base ; begin
53373: LD_INT 0
53375: PPUSH
53376: PPUSH
// if IsLive ( am_dep_2 ) or not checkIfIsLive then
53377: LD_INT 188
53379: PPUSH
53380: CALL_OW 300
53384: PUSH
53385: LD_VAR 0 1
53389: NOT
53390: OR
53391: IFFALSE 53509
// begin base = GetBase ( am_dep_2 ) ;
53393: LD_ADDR_VAR 0 3
53397: PUSH
53398: LD_INT 188
53400: PPUSH
53401: CALL_OW 274
53405: ST_TO_ADDR
// SetResourceType ( base , mat_cans , [ 90 , 70 , 50 ] [ difficulty ] + 10 * Rand ( 0 , 1 ) ) ;
53406: LD_VAR 0 3
53410: PPUSH
53411: LD_INT 1
53413: PPUSH
53414: LD_INT 90
53416: PUSH
53417: LD_INT 70
53419: PUSH
53420: LD_INT 50
53422: PUSH
53423: EMPTY
53424: LIST
53425: LIST
53426: LIST
53427: PUSH
53428: LD_OWVAR 67
53432: ARRAY
53433: PUSH
53434: LD_INT 10
53436: PUSH
53437: LD_INT 0
53439: PPUSH
53440: LD_INT 1
53442: PPUSH
53443: CALL_OW 12
53447: MUL
53448: PLUS
53449: PPUSH
53450: CALL_OW 277
// SetResourceType ( base , mat_oil , Rand ( 300 , 500 ) ) ;
53454: LD_VAR 0 3
53458: PPUSH
53459: LD_INT 2
53461: PPUSH
53462: LD_INT 300
53464: PPUSH
53465: LD_INT 500
53467: PPUSH
53468: CALL_OW 12
53472: PPUSH
53473: CALL_OW 277
// SetResourceType ( base , mat_siberit , [ 50 , 25 , 0 ] [ difficulty ] ) ;
53477: LD_VAR 0 3
53481: PPUSH
53482: LD_INT 3
53484: PPUSH
53485: LD_INT 50
53487: PUSH
53488: LD_INT 25
53490: PUSH
53491: LD_INT 0
53493: PUSH
53494: EMPTY
53495: LIST
53496: LIST
53497: LIST
53498: PUSH
53499: LD_OWVAR 67
53503: ARRAY
53504: PPUSH
53505: CALL_OW 277
// end ; end ;
53509: LD_VAR 0 2
53513: RET
// every 0 0$1 + 0 0$0.3 trigger legion_base_captured do var i , units_list , temp_list , temp_unit , temp_value , temp_list_2 , k , humans_needing_healing , scis_present , time ; var temp_list_3 , temp_list_4 , normal_prisoners ; var vehicles_drivers , attack_cooldown , detect_attack_cooldown , time_to_escape_tick ; var escape_initiated , escaping_prisoners , rebellion , prisoner_info_shown , escape_cooldown , legion_attacking ;
53514: LD_EXP 110
53518: IFFALSE 56976
53520: GO 53522
53522: DISABLE
53523: LD_INT 0
53525: PPUSH
53526: PPUSH
53527: PPUSH
53528: PPUSH
53529: PPUSH
53530: PPUSH
53531: PPUSH
53532: PPUSH
53533: PPUSH
53534: PPUSH
53535: PPUSH
53536: PPUSH
53537: PPUSH
53538: PPUSH
53539: PPUSH
53540: PPUSH
53541: PPUSH
53542: PPUSH
53543: PPUSH
53544: PPUSH
53545: PPUSH
53546: PPUSH
53547: PPUSH
// begin vehicles_drivers = [ ] ;
53548: LD_ADDR_VAR 0 14
53552: PUSH
53553: EMPTY
53554: ST_TO_ADDR
// attack_cooldown = 0 0$15 ;
53555: LD_ADDR_VAR 0 15
53559: PUSH
53560: LD_INT 525
53562: ST_TO_ADDR
// detect_attack_cooldown = 0 0$5 ;
53563: LD_ADDR_VAR 0 16
53567: PUSH
53568: LD_INT 175
53570: ST_TO_ADDR
// time_to_escape_tick = 0 ;
53571: LD_ADDR_VAR 0 17
53575: PUSH
53576: LD_INT 0
53578: ST_TO_ADDR
// escape_initiated = false ;
53579: LD_ADDR_VAR 0 18
53583: PUSH
53584: LD_INT 0
53586: ST_TO_ADDR
// escaping_prisoners = [ ] ;
53587: LD_ADDR_VAR 0 19
53591: PUSH
53592: EMPTY
53593: ST_TO_ADDR
// rebellion = false ;
53594: LD_ADDR_VAR 0 20
53598: PUSH
53599: LD_INT 0
53601: ST_TO_ADDR
// prisoner_info_shown = false ;
53602: LD_ADDR_VAR 0 21
53606: PUSH
53607: LD_INT 0
53609: ST_TO_ADDR
// escape_cooldown = 0 0$10 ;
53610: LD_ADDR_VAR 0 22
53614: PUSH
53615: LD_INT 350
53617: ST_TO_ADDR
// legion_attacking = false ;
53618: LD_ADDR_VAR 0 23
53622: PUSH
53623: LD_INT 0
53625: ST_TO_ADDR
// repeat time = 0 0$0.8 ;
53626: LD_ADDR_VAR 0 10
53630: PUSH
53631: LD_INT 28
53633: ST_TO_ADDR
// wait ( time ) ;
53634: LD_VAR 0 10
53638: PPUSH
53639: CALL_OW 67
// legion_prisoners = UnitFilter ( legion_prisoners , [ f_alive ] ) ;
53643: LD_ADDR_EXP 109
53647: PUSH
53648: LD_EXP 109
53652: PPUSH
53653: LD_INT 51
53655: PUSH
53656: EMPTY
53657: LIST
53658: PPUSH
53659: CALL_OW 72
53663: ST_TO_ADDR
// if legion_prisoners = 0 then
53664: LD_EXP 109
53668: PUSH
53669: LD_INT 0
53671: EQUAL
53672: IFFALSE 53696
// begin ExclusiveOn ;
53674: CALL_OW 4
// wait ( 0 0$1 ) ;
53678: LD_INT 35
53680: PPUSH
53681: CALL_OW 67
// YouLost ( PrisonersGone ) ;
53685: LD_STRING PrisonersGone
53687: PPUSH
53688: CALL_OW 104
// ExclusiveOff ;
53692: CALL_OW 5
// end ; escaping_prisoners = UnitFilter ( escaping_prisoners , [ f_alive ] ) ;
53696: LD_ADDR_VAR 0 19
53700: PUSH
53701: LD_VAR 0 19
53705: PPUSH
53706: LD_INT 51
53708: PUSH
53709: EMPTY
53710: LIST
53711: PPUSH
53712: CALL_OW 72
53716: ST_TO_ADDR
// if escape_cooldown > 0 0$0 then
53717: LD_VAR 0 22
53721: PUSH
53722: LD_INT 0
53724: GREATER
53725: IFFALSE 53743
// escape_cooldown = escape_cooldown - time ;
53727: LD_ADDR_VAR 0 22
53731: PUSH
53732: LD_VAR 0 22
53736: PUSH
53737: LD_VAR 0 10
53741: MINUS
53742: ST_TO_ADDR
// if legion_attacking then
53743: LD_VAR 0 23
53747: IFFALSE 53800
// begin if DangerousUnits ( FilterAllUnits ( [ [ f_side , legion ] , [ f_inarea , big_hill_area ] ] ) ) = 0 then
53749: LD_INT 22
53751: PUSH
53752: LD_EXP 4
53756: PUSH
53757: EMPTY
53758: LIST
53759: LIST
53760: PUSH
53761: LD_INT 95
53763: PUSH
53764: LD_INT 11
53766: PUSH
53767: EMPTY
53768: LIST
53769: LIST
53770: PUSH
53771: EMPTY
53772: LIST
53773: LIST
53774: PPUSH
53775: CALL_OW 69
53779: PPUSH
53780: CALL 83864 0 1
53784: PUSH
53785: LD_INT 0
53787: EQUAL
53788: IFFALSE 53798
// legion_attacking = false ;
53790: LD_ADDR_VAR 0 23
53794: PUSH
53795: LD_INT 0
53797: ST_TO_ADDR
// end else
53798: GO 53817
// begin if PlayerBaseUnderAttackByPseudoBase ( 3 ) then
53800: LD_INT 3
53802: PPUSH
53803: CALL 78606 0 1
53807: IFFALSE 53817
// legion_attacking = true ;
53809: LD_ADDR_VAR 0 23
53813: PUSH
53814: LD_INT 1
53816: ST_TO_ADDR
// end ; if escape_initiated then
53817: LD_VAR 0 18
53821: IFFALSE 53864
// if not legion_attacking and escaping_prisoners = 0 then
53823: LD_VAR 0 23
53827: NOT
53828: PUSH
53829: LD_VAR 0 19
53833: PUSH
53834: LD_INT 0
53836: EQUAL
53837: AND
53838: IFFALSE 53864
// begin escape_initiated = false ;
53840: LD_ADDR_VAR 0 18
53844: PUSH
53845: LD_INT 0
53847: ST_TO_ADDR
// time_to_escape_tick = 0 ;
53848: LD_ADDR_VAR 0 17
53852: PUSH
53853: LD_INT 0
53855: ST_TO_ADDR
// attack_cooldown = 0 0$15 ;
53856: LD_ADDR_VAR 0 15
53860: PUSH
53861: LD_INT 525
53863: ST_TO_ADDR
// end ; if not escape_initiated and not rebellion and escape_cooldown <= 0 0$0 then
53864: LD_VAR 0 18
53868: NOT
53869: PUSH
53870: LD_VAR 0 20
53874: NOT
53875: AND
53876: PUSH
53877: LD_VAR 0 22
53881: PUSH
53882: LD_INT 0
53884: LESSEQUAL
53885: AND
53886: IFFALSE 54330
// begin if legion_attacking and current_attack_num > 1 then
53888: LD_VAR 0 23
53892: PUSH
53893: LD_EXP 115
53897: PUSH
53898: LD_INT 1
53900: GREATER
53901: AND
53902: IFFALSE 54232
// begin if FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , big_hill_area ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) = 0 then
53904: LD_INT 22
53906: PUSH
53907: LD_EXP 2
53911: PUSH
53912: EMPTY
53913: LIST
53914: LIST
53915: PUSH
53916: LD_INT 95
53918: PUSH
53919: LD_INT 11
53921: PUSH
53922: EMPTY
53923: LIST
53924: LIST
53925: PUSH
53926: LD_INT 2
53928: PUSH
53929: LD_INT 30
53931: PUSH
53932: LD_INT 0
53934: PUSH
53935: EMPTY
53936: LIST
53937: LIST
53938: PUSH
53939: LD_INT 30
53941: PUSH
53942: LD_INT 1
53944: PUSH
53945: EMPTY
53946: LIST
53947: LIST
53948: PUSH
53949: EMPTY
53950: LIST
53951: LIST
53952: LIST
53953: PUSH
53954: LD_INT 50
53956: PUSH
53957: EMPTY
53958: LIST
53959: PUSH
53960: LD_INT 3
53962: PUSH
53963: LD_INT 57
53965: PUSH
53966: EMPTY
53967: LIST
53968: PUSH
53969: EMPTY
53970: LIST
53971: LIST
53972: PUSH
53973: EMPTY
53974: LIST
53975: LIST
53976: LIST
53977: LIST
53978: LIST
53979: PPUSH
53980: CALL_OW 69
53984: PUSH
53985: LD_INT 0
53987: EQUAL
53988: IFFALSE 54030
// begin escape_initiated = true ;
53990: LD_ADDR_VAR 0 18
53994: PUSH
53995: LD_INT 1
53997: ST_TO_ADDR
// escaping_prisoners = legion_prisoners ;
53998: LD_ADDR_VAR 0 19
54002: PUSH
54003: LD_EXP 109
54007: ST_TO_ADDR
// SetAttitude ( you , you_alt_escaping , att_neutral , true ) ;
54008: LD_EXP 2
54012: PPUSH
54013: LD_EXP 9
54017: PPUSH
54018: LD_INT 0
54020: PPUSH
54021: LD_INT 1
54023: PPUSH
54024: CALL_OW 80
// end else
54028: GO 54230
// begin if time_to_escape_tick = 0 then
54030: LD_VAR 0 17
54034: PUSH
54035: LD_INT 0
54037: EQUAL
54038: IFFALSE 54064
// time_to_escape_tick = tick + Rand ( 0 0$4 , 0 0$10 ) else
54040: LD_ADDR_VAR 0 17
54044: PUSH
54045: LD_OWVAR 1
54049: PUSH
54050: LD_INT 140
54052: PPUSH
54053: LD_INT 350
54055: PPUSH
54056: CALL_OW 12
54060: PLUS
54061: ST_TO_ADDR
54062: GO 54230
// if tick >= time_to_escape_tick then
54064: LD_OWVAR 1
54068: PUSH
54069: LD_VAR 0 17
54073: GREATEREQUAL
54074: IFFALSE 54230
// begin escape_initiated = true ;
54076: LD_ADDR_VAR 0 18
54080: PUSH
54081: LD_INT 1
54083: ST_TO_ADDR
// escaping_prisoners = [ ] ;
54084: LD_ADDR_VAR 0 19
54088: PUSH
54089: EMPTY
54090: ST_TO_ADDR
// temp_list = legion_prisoners ;
54091: LD_ADDR_VAR 0 3
54095: PUSH
54096: LD_EXP 109
54100: ST_TO_ADDR
// for i = 1 to [ 0 , 1 , 1 ] [ difficulty ] do
54101: LD_ADDR_VAR 0 1
54105: PUSH
54106: DOUBLE
54107: LD_INT 1
54109: DEC
54110: ST_TO_ADDR
54111: LD_INT 0
54113: PUSH
54114: LD_INT 1
54116: PUSH
54117: LD_INT 1
54119: PUSH
54120: EMPTY
54121: LIST
54122: LIST
54123: LIST
54124: PUSH
54125: LD_OWVAR 67
54129: ARRAY
54130: PUSH
54131: FOR_TO
54132: IFFALSE 54208
// begin if temp_list = 0 then
54134: LD_VAR 0 3
54138: PUSH
54139: LD_INT 0
54141: EQUAL
54142: IFFALSE 54146
// break ;
54144: GO 54208
// temp_unit = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
54146: LD_ADDR_VAR 0 4
54150: PUSH
54151: LD_VAR 0 3
54155: PUSH
54156: LD_INT 1
54158: PPUSH
54159: LD_VAR 0 3
54163: PUSH
54164: LD_INT 0
54166: PLUS
54167: PPUSH
54168: CALL_OW 12
54172: ARRAY
54173: ST_TO_ADDR
// temp_list = temp_list diff temp_unit ;
54174: LD_ADDR_VAR 0 3
54178: PUSH
54179: LD_VAR 0 3
54183: PUSH
54184: LD_VAR 0 4
54188: DIFF
54189: ST_TO_ADDR
// escaping_prisoners = escaping_prisoners ^ temp_unit ;
54190: LD_ADDR_VAR 0 19
54194: PUSH
54195: LD_VAR 0 19
54199: PUSH
54200: LD_VAR 0 4
54204: ADD
54205: ST_TO_ADDR
// end ;
54206: GO 54131
54208: POP
54209: POP
// SetAttitude ( you , you_alt_escaping , att_neutral , true ) ;
54210: LD_EXP 2
54214: PPUSH
54215: LD_EXP 9
54219: PPUSH
54220: LD_INT 0
54222: PPUSH
54223: LD_INT 1
54225: PPUSH
54226: CALL_OW 80
// end ; end ; end else
54230: GO 54330
// if ( FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , big_hill_area ] , [ f_type , unit_human ] , [ f_ok ] ] ) diff legion_prisoners ) = 0 then
54232: LD_INT 22
54234: PUSH
54235: LD_EXP 2
54239: PUSH
54240: EMPTY
54241: LIST
54242: LIST
54243: PUSH
54244: LD_INT 95
54246: PUSH
54247: LD_INT 11
54249: PUSH
54250: EMPTY
54251: LIST
54252: LIST
54253: PUSH
54254: LD_INT 21
54256: PUSH
54257: LD_INT 1
54259: PUSH
54260: EMPTY
54261: LIST
54262: LIST
54263: PUSH
54264: LD_INT 50
54266: PUSH
54267: EMPTY
54268: LIST
54269: PUSH
54270: EMPTY
54271: LIST
54272: LIST
54273: LIST
54274: LIST
54275: PPUSH
54276: CALL_OW 69
54280: PUSH
54281: LD_EXP 109
54285: DIFF
54286: PUSH
54287: LD_INT 0
54289: EQUAL
54290: IFFALSE 54330
// begin escape_initiated = true ;
54292: LD_ADDR_VAR 0 18
54296: PUSH
54297: LD_INT 1
54299: ST_TO_ADDR
// escaping_prisoners = legion_prisoners ;
54300: LD_ADDR_VAR 0 19
54304: PUSH
54305: LD_EXP 109
54309: ST_TO_ADDR
// SetAttitude ( you , you_alt_escaping , att_neutral , true ) ;
54310: LD_EXP 2
54314: PPUSH
54315: LD_EXP 9
54319: PPUSH
54320: LD_INT 0
54322: PPUSH
54323: LD_INT 1
54325: PPUSH
54326: CALL_OW 80
// end ; end ; if not prisoner_info_shown and escape_initiated and GetAttitude ( you , you_alt_escaping ) = att_enemy then
54330: LD_VAR 0 21
54334: NOT
54335: PUSH
54336: LD_VAR 0 18
54340: AND
54341: PUSH
54342: LD_EXP 2
54346: PPUSH
54347: LD_EXP 9
54351: PPUSH
54352: CALL_OW 81
54356: PUSH
54357: LD_INT 2
54359: EQUAL
54360: AND
54361: IFFALSE 54378
// begin prisoner_info_shown = true ;
54363: LD_ADDR_VAR 0 21
54367: PUSH
54368: LD_INT 1
54370: ST_TO_ADDR
// Query ( QPrisonersRecapture ) ;
54371: LD_STRING QPrisonersRecapture
54373: PPUSH
54374: CALL_OW 97
// end ; for i in legion_prisoners_shot_to_red do
54378: LD_ADDR_VAR 0 1
54382: PUSH
54383: LD_EXP 111
54387: PUSH
54388: FOR_IN
54389: IFFALSE 54440
// begin if GetLives ( i ) > 250 then
54391: LD_VAR 0 1
54395: PPUSH
54396: CALL_OW 256
54400: PUSH
54401: LD_INT 250
54403: GREATER
54404: IFFALSE 54438
// begin legion_prisoners_shot_to_red = legion_prisoners_shot_to_red diff i ;
54406: LD_ADDR_EXP 111
54410: PUSH
54411: LD_EXP 111
54415: PUSH
54416: LD_VAR 0 1
54420: DIFF
54421: ST_TO_ADDR
// escaping_prisoners = escaping_prisoners diff i ;
54422: LD_ADDR_VAR 0 19
54426: PUSH
54427: LD_VAR 0 19
54431: PUSH
54432: LD_VAR 0 1
54436: DIFF
54437: ST_TO_ADDR
// end ; end ;
54438: GO 54388
54440: POP
54441: POP
// if not escape_initiated and not rebellion then
54442: LD_VAR 0 18
54446: NOT
54447: PUSH
54448: LD_VAR 0 20
54452: NOT
54453: AND
54454: IFFALSE 54701
// begin if attack_cooldown > 0 0$0 then
54456: LD_VAR 0 15
54460: PUSH
54461: LD_INT 0
54463: GREATER
54464: IFFALSE 54482
// attack_cooldown = attack_cooldown - time ;
54466: LD_ADDR_VAR 0 15
54470: PUSH
54471: LD_VAR 0 15
54475: PUSH
54476: LD_VAR 0 10
54480: MINUS
54481: ST_TO_ADDR
// temp_value = false ;
54482: LD_ADDR_VAR 0 5
54486: PUSH
54487: LD_INT 0
54489: ST_TO_ADDR
// if attack_cooldown <= 0 0$0 then
54490: LD_VAR 0 15
54494: PUSH
54495: LD_INT 0
54497: LESSEQUAL
54498: IFFALSE 54566
// begin temp_list = FilterAllUnits ( [ f_side , you ] ) ;
54500: LD_ADDR_VAR 0 3
54504: PUSH
54505: LD_INT 22
54507: PUSH
54508: LD_EXP 2
54512: PUSH
54513: EMPTY
54514: LIST
54515: LIST
54516: PPUSH
54517: CALL_OW 69
54521: ST_TO_ADDR
// for i in legion_prisoners do
54522: LD_ADDR_VAR 0 1
54526: PUSH
54527: LD_EXP 109
54531: PUSH
54532: FOR_IN
54533: IFFALSE 54564
// if UnitShoot ( i ) in temp_list then
54535: LD_VAR 0 1
54539: PPUSH
54540: CALL_OW 504
54544: PUSH
54545: LD_VAR 0 3
54549: IN
54550: IFFALSE 54562
// begin temp_value = true ;
54552: LD_ADDR_VAR 0 5
54556: PUSH
54557: LD_INT 1
54559: ST_TO_ADDR
// break ;
54560: GO 54564
// end ;
54562: GO 54532
54564: POP
54565: POP
// end ; if detect_attack_cooldown > 0 0$0 then
54566: LD_VAR 0 16
54570: PUSH
54571: LD_INT 0
54573: GREATER
54574: IFFALSE 54592
// detect_attack_cooldown = detect_attack_cooldown - time ;
54576: LD_ADDR_VAR 0 16
54580: PUSH
54581: LD_VAR 0 16
54585: PUSH
54586: LD_VAR 0 10
54590: MINUS
54591: ST_TO_ADDR
// if detect_attack_cooldown <= 0 0$0 and ( ContactTime ( [ you , you_alt ] ) <= 0 0$2 or temp_value ) then
54592: LD_VAR 0 16
54596: PUSH
54597: LD_INT 0
54599: LESSEQUAL
54600: PUSH
54601: LD_EXP 2
54605: PUSH
54606: LD_EXP 8
54610: PUSH
54611: EMPTY
54612: LIST
54613: LIST
54614: PPUSH
54615: CALL_OW 462
54619: PUSH
54620: LD_INT 70
54622: LESSEQUAL
54623: PUSH
54624: LD_VAR 0 5
54628: OR
54629: AND
54630: IFFALSE 54701
// begin rebellion = true ;
54632: LD_ADDR_VAR 0 20
54636: PUSH
54637: LD_INT 1
54639: ST_TO_ADDR
// DialogueOn ;
54640: CALL_OW 6
// if GetSex ( legion_prisoners [ 1 ] ) = sex_male then
54644: LD_EXP 109
54648: PUSH
54649: LD_INT 1
54651: ARRAY
54652: PPUSH
54653: CALL_OW 258
54657: PUSH
54658: LD_INT 1
54660: EQUAL
54661: IFFALSE 54681
// Say ( legion_prisoners [ 1 ] , D13-PriM-1 ) else
54663: LD_EXP 109
54667: PUSH
54668: LD_INT 1
54670: ARRAY
54671: PPUSH
54672: LD_STRING D13-PriM-1
54674: PPUSH
54675: CALL_OW 88
54679: GO 54697
// Say ( legion_prisoners [ 1 ] , D13-PriF-1 ) ;
54681: LD_EXP 109
54685: PUSH
54686: LD_INT 1
54688: ARRAY
54689: PPUSH
54690: LD_STRING D13-PriF-1
54692: PPUSH
54693: CALL_OW 88
// DialogueOff ;
54697: CALL_OW 7
// end ; end ; if rebellion then
54701: LD_VAR 0 20
54705: IFFALSE 56100
// begin for i in UnitFilter ( legion_prisoners , [ f_not , [ f_side , legion ] ] ) do
54707: LD_ADDR_VAR 0 1
54711: PUSH
54712: LD_EXP 109
54716: PPUSH
54717: LD_INT 3
54719: PUSH
54720: LD_INT 22
54722: PUSH
54723: LD_EXP 4
54727: PUSH
54728: EMPTY
54729: LIST
54730: LIST
54731: PUSH
54732: EMPTY
54733: LIST
54734: LIST
54735: PPUSH
54736: CALL_OW 72
54740: PUSH
54741: FOR_IN
54742: IFFALSE 54760
// SetSide ( i , legion ) ;
54744: LD_VAR 0 1
54748: PPUSH
54749: LD_EXP 4
54753: PPUSH
54754: CALL_OW 235
54758: GO 54741
54760: POP
54761: POP
// for i in vehicle_captured_events do
54762: LD_ADDR_VAR 0 1
54766: PUSH
54767: LD_EXP 112
54771: PUSH
54772: FOR_IN
54773: IFFALSE 54879
// if vehicles_drivers >= i [ 1 ] then
54775: LD_VAR 0 14
54779: PUSH
54780: LD_VAR 0 1
54784: PUSH
54785: LD_INT 1
54787: ARRAY
54788: GREATEREQUAL
54789: IFFALSE 54877
// if vehicles_drivers [ i [ 1 ] ] > 0 then
54791: LD_VAR 0 14
54795: PUSH
54796: LD_VAR 0 1
54800: PUSH
54801: LD_INT 1
54803: ARRAY
54804: ARRAY
54805: PUSH
54806: LD_INT 0
54808: GREATER
54809: IFFALSE 54877
// begin vehicles_drivers = Replace ( vehicles_drivers , i [ 2 ] , vehicles_drivers [ i [ 1 ] ] ) ;
54811: LD_ADDR_VAR 0 14
54815: PUSH
54816: LD_VAR 0 14
54820: PPUSH
54821: LD_VAR 0 1
54825: PUSH
54826: LD_INT 2
54828: ARRAY
54829: PPUSH
54830: LD_VAR 0 14
54834: PUSH
54835: LD_VAR 0 1
54839: PUSH
54840: LD_INT 1
54842: ARRAY
54843: ARRAY
54844: PPUSH
54845: CALL_OW 1
54849: ST_TO_ADDR
// vehicles_drivers = Replace ( vehicles_drivers , i [ 1 ] , 0 ) ;
54850: LD_ADDR_VAR 0 14
54854: PUSH
54855: LD_VAR 0 14
54859: PPUSH
54860: LD_VAR 0 1
54864: PUSH
54865: LD_INT 1
54867: ARRAY
54868: PPUSH
54869: LD_INT 0
54871: PPUSH
54872: CALL_OW 1
54876: ST_TO_ADDR
// end ;
54877: GO 54772
54879: POP
54880: POP
// vehicle_captured_events = [ ] ;
54881: LD_ADDR_EXP 112
54885: PUSH
54886: EMPTY
54887: ST_TO_ADDR
// units_list = legion_prisoners ;
54888: LD_ADDR_VAR 0 2
54892: PUSH
54893: LD_EXP 109
54897: ST_TO_ADDR
// for i = 1 to vehicles_drivers + 0 do
54898: LD_ADDR_VAR 0 1
54902: PUSH
54903: DOUBLE
54904: LD_INT 1
54906: DEC
54907: ST_TO_ADDR
54908: LD_VAR 0 14
54912: PUSH
54913: LD_INT 0
54915: PLUS
54916: PUSH
54917: FOR_TO
54918: IFFALSE 55288
// begin if vehicles_drivers [ i ] > 0 then
54920: LD_VAR 0 14
54924: PUSH
54925: LD_VAR 0 1
54929: ARRAY
54930: PUSH
54931: LD_INT 0
54933: GREATER
54934: IFFALSE 54989
// if not IsOk ( i ) or not IsOk ( vehicles_drivers [ i ] ) then
54936: LD_VAR 0 1
54940: PPUSH
54941: CALL_OW 302
54945: NOT
54946: PUSH
54947: LD_VAR 0 14
54951: PUSH
54952: LD_VAR 0 1
54956: ARRAY
54957: PPUSH
54958: CALL_OW 302
54962: NOT
54963: OR
54964: IFFALSE 54989
// vehicles_drivers = Replace ( vehicles_drivers , i , 0 ) ;
54966: LD_ADDR_VAR 0 14
54970: PUSH
54971: LD_VAR 0 14
54975: PPUSH
54976: LD_VAR 0 1
54980: PPUSH
54981: LD_INT 0
54983: PPUSH
54984: CALL_OW 1
54988: ST_TO_ADDR
// if vehicles_drivers [ i ] = 0 then
54989: LD_VAR 0 14
54993: PUSH
54994: LD_VAR 0 1
54998: ARRAY
54999: PUSH
55000: LD_INT 0
55002: EQUAL
55003: IFFALSE 55007
// continue ;
55005: GO 54917
// units_list = units_list diff vehicles_drivers [ i ] ;
55007: LD_ADDR_VAR 0 2
55011: PUSH
55012: LD_VAR 0 2
55016: PUSH
55017: LD_VAR 0 14
55021: PUSH
55022: LD_VAR 0 1
55026: ARRAY
55027: DIFF
55028: ST_TO_ADDR
// temp_list = UnitsInside ( i ) ;
55029: LD_ADDR_VAR 0 3
55033: PUSH
55034: LD_VAR 0 1
55038: PPUSH
55039: CALL_OW 313
55043: ST_TO_ADDR
// if temp_list = 0 then
55044: LD_VAR 0 3
55048: PUSH
55049: LD_INT 0
55051: EQUAL
55052: IFFALSE 55223
// begin temp_unit = IsInUnit ( vehicles_drivers [ i ] ) ;
55054: LD_ADDR_VAR 0 4
55058: PUSH
55059: LD_VAR 0 14
55063: PUSH
55064: LD_VAR 0 1
55068: ARRAY
55069: PPUSH
55070: CALL_OW 310
55074: ST_TO_ADDR
// if temp_unit = 0 then
55075: LD_VAR 0 4
55079: PUSH
55080: LD_INT 0
55082: EQUAL
55083: IFFALSE 55107
// ComEnterUnit ( vehicles_drivers [ i ] , i ) else
55085: LD_VAR 0 14
55089: PUSH
55090: LD_VAR 0 1
55094: ARRAY
55095: PPUSH
55096: LD_VAR 0 1
55100: PPUSH
55101: CALL_OW 120
55105: GO 55221
// if temp_unit <> i then
55107: LD_VAR 0 4
55111: PUSH
55112: LD_VAR 0 1
55116: NONEQUAL
55117: IFFALSE 55221
// begin case GetType ( temp_unit ) of unit_building :
55119: LD_VAR 0 4
55123: PPUSH
55124: CALL_OW 247
55128: PUSH
55129: LD_INT 3
55131: DOUBLE
55132: EQUAL
55133: IFTRUE 55137
55135: GO 55155
55137: POP
// ComExitBuilding ( vehicles_drivers [ i ] ) ; unit_vehicle :
55138: LD_VAR 0 14
55142: PUSH
55143: LD_VAR 0 1
55147: ARRAY
55148: PPUSH
55149: CALL_OW 122
55153: GO 55221
55155: LD_INT 2
55157: DOUBLE
55158: EQUAL
55159: IFTRUE 55163
55161: GO 55220
55163: POP
// begin vehicles_drivers = Replace ( vehicles_drivers , temp_unit , vehicles_drivers [ i ] ) ;
55164: LD_ADDR_VAR 0 14
55168: PUSH
55169: LD_VAR 0 14
55173: PPUSH
55174: LD_VAR 0 4
55178: PPUSH
55179: LD_VAR 0 14
55183: PUSH
55184: LD_VAR 0 1
55188: ARRAY
55189: PPUSH
55190: CALL_OW 1
55194: ST_TO_ADDR
// vehicles_drivers = Replace ( vehicles_drivers , i , 0 ) ;
55195: LD_ADDR_VAR 0 14
55199: PUSH
55200: LD_VAR 0 14
55204: PPUSH
55205: LD_VAR 0 1
55209: PPUSH
55210: LD_INT 0
55212: PPUSH
55213: CALL_OW 1
55217: ST_TO_ADDR
// end ; end ;
55218: GO 55221
55220: POP
// end ; end else
55221: GO 55286
// if temp_list [ 1 ] = vehicles_drivers [ i ] then
55223: LD_VAR 0 3
55227: PUSH
55228: LD_INT 1
55230: ARRAY
55231: PUSH
55232: LD_VAR 0 14
55236: PUSH
55237: LD_VAR 0 1
55241: ARRAY
55242: EQUAL
55243: IFFALSE 55263
// units_list = units_list ^ i else
55245: LD_ADDR_VAR 0 2
55249: PUSH
55250: LD_VAR 0 2
55254: PUSH
55255: LD_VAR 0 1
55259: ADD
55260: ST_TO_ADDR
55261: GO 55286
// vehicles_drivers = Replace ( vehicles_drivers , i , 0 ) ;
55263: LD_ADDR_VAR 0 14
55267: PUSH
55268: LD_VAR 0 14
55272: PPUSH
55273: LD_VAR 0 1
55277: PPUSH
55278: LD_INT 0
55280: PPUSH
55281: CALL_OW 1
55285: ST_TO_ADDR
// end ;
55286: GO 54917
55288: POP
55289: POP
// for i in units_list do
55290: LD_ADDR_VAR 0 1
55294: PUSH
55295: LD_VAR 0 2
55299: PUSH
55300: FOR_IN
55301: IFFALSE 56096
// begin if GetType ( i ) = unit_human then
55303: LD_VAR 0 1
55307: PPUSH
55308: CALL_OW 247
55312: PUSH
55313: LD_INT 1
55315: EQUAL
55316: IFFALSE 55568
// begin if IsInUnit ( i ) > 0 then
55318: LD_VAR 0 1
55322: PPUSH
55323: CALL_OW 310
55327: PUSH
55328: LD_INT 0
55330: GREATER
55331: IFFALSE 55364
// if GetType ( IsInUnit ( i ) ) = unit_building then
55333: LD_VAR 0 1
55337: PPUSH
55338: CALL_OW 310
55342: PPUSH
55343: CALL_OW 247
55347: PUSH
55348: LD_INT 3
55350: EQUAL
55351: IFFALSE 55364
// begin ComExitBuilding ( i ) ;
55353: LD_VAR 0 1
55357: PPUSH
55358: CALL_OW 122
// continue ;
55362: GO 55300
// end ; temp_list = EmptyWarVehicles ( i , 10 , true ) ;
55364: LD_ADDR_VAR 0 3
55368: PUSH
55369: LD_VAR 0 1
55373: PPUSH
55374: LD_INT 10
55376: PPUSH
55377: LD_INT 1
55379: PPUSH
55380: CALL 83536 0 3
55384: ST_TO_ADDR
// if temp_list > 0 then
55385: LD_VAR 0 3
55389: PUSH
55390: LD_INT 0
55392: GREATER
55393: IFFALSE 55461
// for k = 1 to vehicles_drivers do
55395: LD_ADDR_VAR 0 7
55399: PUSH
55400: DOUBLE
55401: LD_INT 1
55403: DEC
55404: ST_TO_ADDR
55405: LD_VAR 0 14
55409: PUSH
55410: FOR_TO
55411: IFFALSE 55459
// if vehicles_drivers [ k ] > 0 then
55413: LD_VAR 0 14
55417: PUSH
55418: LD_VAR 0 7
55422: ARRAY
55423: PUSH
55424: LD_INT 0
55426: GREATER
55427: IFFALSE 55457
// begin temp_list = temp_list diff k ;
55429: LD_ADDR_VAR 0 3
55433: PUSH
55434: LD_VAR 0 3
55438: PUSH
55439: LD_VAR 0 7
55443: DIFF
55444: ST_TO_ADDR
// if temp_list = 0 then
55445: LD_VAR 0 3
55449: PUSH
55450: LD_INT 0
55452: EQUAL
55453: IFFALSE 55457
// break ;
55455: GO 55459
// end ;
55457: GO 55410
55459: POP
55460: POP
// if temp_list > 0 then
55461: LD_VAR 0 3
55465: PUSH
55466: LD_INT 0
55468: GREATER
55469: IFFALSE 55568
// begin temp_list_2 = [ ] ;
55471: LD_ADDR_VAR 0 6
55475: PUSH
55476: EMPTY
55477: ST_TO_ADDR
// for k in temp_list do
55478: LD_ADDR_VAR 0 7
55482: PUSH
55483: LD_VAR 0 3
55487: PUSH
55488: FOR_IN
55489: IFFALSE 55519
// temp_list_2 = temp_list_2 ^ GetDistUnits ( k , i ) ;
55491: LD_ADDR_VAR 0 6
55495: PUSH
55496: LD_VAR 0 6
55500: PUSH
55501: LD_VAR 0 7
55505: PPUSH
55506: LD_VAR 0 1
55510: PPUSH
55511: CALL_OW 296
55515: ADD
55516: ST_TO_ADDR
55517: GO 55488
55519: POP
55520: POP
// temp_unit = WorstFromListByList ( temp_list , temp_list_2 ) ;
55521: LD_ADDR_VAR 0 4
55525: PUSH
55526: LD_VAR 0 3
55530: PPUSH
55531: LD_VAR 0 6
55535: PPUSH
55536: CALL_OW 78
55540: ST_TO_ADDR
// vehicles_drivers = Replace ( vehicles_drivers , temp_unit , i ) ;
55541: LD_ADDR_VAR 0 14
55545: PUSH
55546: LD_VAR 0 14
55550: PPUSH
55551: LD_VAR 0 4
55555: PPUSH
55556: LD_VAR 0 1
55560: PPUSH
55561: CALL_OW 1
55565: ST_TO_ADDR
// continue ;
55566: GO 55300
// end ; end ; if not IsInArea ( i , legion_base ) then
55568: LD_VAR 0 1
55572: PPUSH
55573: LD_INT 3
55575: PPUSH
55576: CALL_OW 308
55580: NOT
55581: IFFALSE 55620
// begin ComAgressiveMove ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) ;
55583: LD_VAR 0 1
55587: PPUSH
55588: LD_EXP 59
55592: PUSH
55593: LD_INT 1
55595: ARRAY
55596: PUSH
55597: LD_INT 1
55599: ARRAY
55600: PPUSH
55601: LD_EXP 59
55605: PUSH
55606: LD_INT 1
55608: ARRAY
55609: PUSH
55610: LD_INT 2
55612: ARRAY
55613: PPUSH
55614: CALL_OW 114
// end else
55618: GO 56094
// begin temp_list = FilterAllUnits ( [ [ f_enemy , legion ] , [ f_type , unit_human ] , [ f_dist , i , 14 ] , [ f_see , legion ] , [ f_inarea , big_hill_area ] ] ) ;
55620: LD_ADDR_VAR 0 3
55624: PUSH
55625: LD_INT 81
55627: PUSH
55628: LD_EXP 4
55632: PUSH
55633: EMPTY
55634: LIST
55635: LIST
55636: PUSH
55637: LD_INT 21
55639: PUSH
55640: LD_INT 1
55642: PUSH
55643: EMPTY
55644: LIST
55645: LIST
55646: PUSH
55647: LD_INT 91
55649: PUSH
55650: LD_VAR 0 1
55654: PUSH
55655: LD_INT 14
55657: PUSH
55658: EMPTY
55659: LIST
55660: LIST
55661: LIST
55662: PUSH
55663: LD_INT 101
55665: PUSH
55666: LD_EXP 4
55670: PUSH
55671: EMPTY
55672: LIST
55673: LIST
55674: PUSH
55675: LD_INT 95
55677: PUSH
55678: LD_INT 11
55680: PUSH
55681: EMPTY
55682: LIST
55683: LIST
55684: PUSH
55685: EMPTY
55686: LIST
55687: LIST
55688: LIST
55689: LIST
55690: LIST
55691: PPUSH
55692: CALL_OW 69
55696: ST_TO_ADDR
// if temp_list > 0 then
55697: LD_VAR 0 3
55701: PUSH
55702: LD_INT 0
55704: GREATER
55705: IFFALSE 55841
// begin temp_list_2 = UnitFilter ( temp_list , [ f_not , [ f_lives , 250 ] ] ) ;
55707: LD_ADDR_VAR 0 6
55711: PUSH
55712: LD_VAR 0 3
55716: PPUSH
55717: LD_INT 3
55719: PUSH
55720: LD_INT 24
55722: PUSH
55723: LD_INT 250
55725: PUSH
55726: EMPTY
55727: LIST
55728: LIST
55729: PUSH
55730: EMPTY
55731: LIST
55732: LIST
55733: PPUSH
55734: CALL_OW 72
55738: ST_TO_ADDR
// if temp_list_2 > 0 then
55739: LD_VAR 0 6
55743: PUSH
55744: LD_INT 0
55746: GREATER
55747: IFFALSE 55759
// temp_list = temp_list_2 ;
55749: LD_ADDR_VAR 0 3
55753: PUSH
55754: LD_VAR 0 6
55758: ST_TO_ADDR
// temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
55759: LD_ADDR_VAR 0 4
55763: PUSH
55764: LD_VAR 0 3
55768: PPUSH
55769: LD_VAR 0 1
55773: PPUSH
55774: CALL_OW 75
55778: ST_TO_ADDR
// if GetLives ( temp_unit ) > 250 then
55779: LD_VAR 0 4
55783: PPUSH
55784: CALL_OW 256
55788: PUSH
55789: LD_INT 250
55791: GREATER
55792: IFFALSE 55825
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
55794: LD_VAR 0 1
55798: PPUSH
55799: LD_VAR 0 4
55803: PPUSH
55804: CALL_OW 250
55808: PPUSH
55809: LD_VAR 0 4
55813: PPUSH
55814: CALL_OW 251
55818: PPUSH
55819: CALL_OW 114
55823: GO 55839
// ComAttackUnit ( i , temp_unit ) ;
55825: LD_VAR 0 1
55829: PPUSH
55830: LD_VAR 0 4
55834: PPUSH
55835: CALL_OW 115
// end else
55839: GO 56094
// begin temp_list = UnitFilter ( FindNonhumansNearUnit ( legion , i , 20 , true ) , [ f_inarea , big_hill_area ] ) ;
55841: LD_ADDR_VAR 0 3
55845: PUSH
55846: LD_EXP 4
55850: PPUSH
55851: LD_VAR 0 1
55855: PPUSH
55856: LD_INT 20
55858: PPUSH
55859: LD_INT 1
55861: PPUSH
55862: CALL 83742 0 4
55866: PPUSH
55867: LD_INT 95
55869: PUSH
55870: LD_INT 11
55872: PUSH
55873: EMPTY
55874: LIST
55875: LIST
55876: PPUSH
55877: CALL_OW 72
55881: ST_TO_ADDR
// if temp_list > 0 then
55882: LD_VAR 0 3
55886: PUSH
55887: LD_INT 0
55889: GREATER
55890: IFFALSE 55931
// begin ComAgressiveMove ( i , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
55892: LD_VAR 0 1
55896: PPUSH
55897: LD_VAR 0 3
55901: PUSH
55902: LD_INT 1
55904: ARRAY
55905: PPUSH
55906: CALL_OW 250
55910: PPUSH
55911: LD_VAR 0 3
55915: PUSH
55916: LD_INT 1
55918: ARRAY
55919: PPUSH
55920: CALL_OW 251
55924: PPUSH
55925: CALL_OW 114
// end else
55929: GO 56094
// begin temp_list = UnitFilter ( FindNonhumansNearUnit ( legion , i , 20 , false ) , [ f_inarea , big_hill_area ] ) ;
55931: LD_ADDR_VAR 0 3
55935: PUSH
55936: LD_EXP 4
55940: PPUSH
55941: LD_VAR 0 1
55945: PPUSH
55946: LD_INT 20
55948: PPUSH
55949: LD_INT 0
55951: PPUSH
55952: CALL 83742 0 4
55956: PPUSH
55957: LD_INT 95
55959: PUSH
55960: LD_INT 11
55962: PUSH
55963: EMPTY
55964: LIST
55965: LIST
55966: PPUSH
55967: CALL_OW 72
55971: ST_TO_ADDR
// if temp_list > 0 then
55972: LD_VAR 0 3
55976: PUSH
55977: LD_INT 0
55979: GREATER
55980: IFFALSE 56018
// begin temp_unit = NearestUnitToUnit ( temp_list , i ) ;
55982: LD_ADDR_VAR 0 4
55986: PUSH
55987: LD_VAR 0 3
55991: PPUSH
55992: LD_VAR 0 1
55996: PPUSH
55997: CALL_OW 74
56001: ST_TO_ADDR
// ComAttackUnit ( i , temp_unit ) ;
56002: LD_VAR 0 1
56006: PPUSH
56007: LD_VAR 0 4
56011: PPUSH
56012: CALL_OW 115
// end else
56016: GO 56094
// if GetDistUnitXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) > 5 then
56018: LD_VAR 0 1
56022: PPUSH
56023: LD_EXP 59
56027: PUSH
56028: LD_INT 1
56030: ARRAY
56031: PUSH
56032: LD_INT 1
56034: ARRAY
56035: PPUSH
56036: LD_EXP 59
56040: PUSH
56041: LD_INT 1
56043: ARRAY
56044: PUSH
56045: LD_INT 2
56047: ARRAY
56048: PPUSH
56049: CALL_OW 297
56053: PUSH
56054: LD_INT 5
56056: GREATER
56057: IFFALSE 56094
// ComAgressiveMove ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) ;
56059: LD_VAR 0 1
56063: PPUSH
56064: LD_EXP 59
56068: PUSH
56069: LD_INT 1
56071: ARRAY
56072: PUSH
56073: LD_INT 1
56075: ARRAY
56076: PPUSH
56077: LD_EXP 59
56081: PUSH
56082: LD_INT 1
56084: ARRAY
56085: PUSH
56086: LD_INT 2
56088: ARRAY
56089: PPUSH
56090: CALL_OW 114
// end ; end ; end ; end ;
56094: GO 55300
56096: POP
56097: POP
// end else
56098: GO 56972
// begin normal_prisoners = legion_prisoners diff escaping_prisoners ;
56100: LD_ADDR_VAR 0 13
56104: PUSH
56105: LD_EXP 109
56109: PUSH
56110: LD_VAR 0 19
56114: DIFF
56115: ST_TO_ADDR
// scis_present = UnitFilter ( normal_prisoners , [ [ f_ok ] , [ f_class , class_scientistic ] ] ) ;
56116: LD_ADDR_VAR 0 9
56120: PUSH
56121: LD_VAR 0 13
56125: PPUSH
56126: LD_INT 50
56128: PUSH
56129: EMPTY
56130: LIST
56131: PUSH
56132: LD_INT 25
56134: PUSH
56135: LD_INT 4
56137: PUSH
56138: EMPTY
56139: LIST
56140: LIST
56141: PUSH
56142: EMPTY
56143: LIST
56144: LIST
56145: PPUSH
56146: CALL_OW 72
56150: ST_TO_ADDR
// humans_needing_healing = [ ] ;
56151: LD_ADDR_VAR 0 8
56155: PUSH
56156: EMPTY
56157: ST_TO_ADDR
// if scis_present > 0 then
56158: LD_VAR 0 9
56162: PUSH
56163: LD_INT 0
56165: GREATER
56166: IFFALSE 56271
// begin for i in normal_prisoners do
56168: LD_ADDR_VAR 0 1
56172: PUSH
56173: LD_VAR 0 13
56177: PUSH
56178: FOR_IN
56179: IFFALSE 56214
// if GetLives ( i ) < 1000 then
56181: LD_VAR 0 1
56185: PPUSH
56186: CALL_OW 256
56190: PUSH
56191: LD_INT 1000
56193: LESS
56194: IFFALSE 56212
// humans_needing_healing = humans_needing_healing ^ i ;
56196: LD_ADDR_VAR 0 8
56200: PUSH
56201: LD_VAR 0 8
56205: PUSH
56206: LD_VAR 0 1
56210: ADD
56211: ST_TO_ADDR
56212: GO 56178
56214: POP
56215: POP
// if humans_needing_healing + 0 = 1 and scis_present + 0 = 1 then
56216: LD_VAR 0 8
56220: PUSH
56221: LD_INT 0
56223: PLUS
56224: PUSH
56225: LD_INT 1
56227: EQUAL
56228: PUSH
56229: LD_VAR 0 9
56233: PUSH
56234: LD_INT 0
56236: PLUS
56237: PUSH
56238: LD_INT 1
56240: EQUAL
56241: AND
56242: IFFALSE 56271
// if humans_needing_healing [ 1 ] = scis_present [ 1 ] then
56244: LD_VAR 0 8
56248: PUSH
56249: LD_INT 1
56251: ARRAY
56252: PUSH
56253: LD_VAR 0 9
56257: PUSH
56258: LD_INT 1
56260: ARRAY
56261: EQUAL
56262: IFFALSE 56271
// humans_needing_healing = [ ] ;
56264: LD_ADDR_VAR 0 8
56268: PUSH
56269: EMPTY
56270: ST_TO_ADDR
// end ; if humans_needing_healing > 0 then
56271: LD_VAR 0 8
56275: PUSH
56276: LD_INT 0
56278: GREATER
56279: IFFALSE 56702
// begin temp_list = GetHumansOutOfUnits ( humans_needing_healing ) ;
56281: LD_ADDR_VAR 0 3
56285: PUSH
56286: LD_VAR 0 8
56290: PPUSH
56291: CALL 32829 0 1
56295: ST_TO_ADDR
// for i in temp_list diff scis_present do
56296: LD_ADDR_VAR 0 1
56300: PUSH
56301: LD_VAR 0 3
56305: PUSH
56306: LD_VAR 0 9
56310: DIFF
56311: PUSH
56312: FOR_IN
56313: IFFALSE 56393
// if GetDistUnitXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) > 4 then
56315: LD_VAR 0 1
56319: PPUSH
56320: LD_EXP 59
56324: PUSH
56325: LD_INT 1
56327: ARRAY
56328: PUSH
56329: LD_INT 1
56331: ARRAY
56332: PPUSH
56333: LD_EXP 59
56337: PUSH
56338: LD_INT 1
56340: ARRAY
56341: PUSH
56342: LD_INT 2
56344: ARRAY
56345: PPUSH
56346: CALL_OW 297
56350: PUSH
56351: LD_INT 4
56353: GREATER
56354: IFFALSE 56391
// ComMoveXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) ;
56356: LD_VAR 0 1
56360: PPUSH
56361: LD_EXP 59
56365: PUSH
56366: LD_INT 1
56368: ARRAY
56369: PUSH
56370: LD_INT 1
56372: ARRAY
56373: PPUSH
56374: LD_EXP 59
56378: PUSH
56379: LD_INT 1
56381: ARRAY
56382: PUSH
56383: LD_INT 2
56385: ARRAY
56386: PPUSH
56387: CALL_OW 111
56391: GO 56312
56393: POP
56394: POP
// temp_list_2 = GetHumansOutOfUnits ( scis_present ) ;
56395: LD_ADDR_VAR 0 6
56399: PUSH
56400: LD_VAR 0 9
56404: PPUSH
56405: CALL 32829 0 1
56409: ST_TO_ADDR
// if temp_list > 0 and temp_list_2 > 0 then
56410: LD_VAR 0 3
56414: PUSH
56415: LD_INT 0
56417: GREATER
56418: PUSH
56419: LD_VAR 0 6
56423: PUSH
56424: LD_INT 0
56426: GREATER
56427: AND
56428: IFFALSE 56702
// begin temp_list_3 = [ ] ;
56430: LD_ADDR_VAR 0 11
56434: PUSH
56435: EMPTY
56436: ST_TO_ADDR
// for i in temp_list do
56437: LD_ADDR_VAR 0 1
56441: PUSH
56442: LD_VAR 0 3
56446: PUSH
56447: FOR_IN
56448: IFFALSE 56499
// if GetLives ( i ) <= 250 then
56450: LD_VAR 0 1
56454: PPUSH
56455: CALL_OW 256
56459: PUSH
56460: LD_INT 250
56462: LESSEQUAL
56463: IFFALSE 56497
// begin temp_list_3 = temp_list_3 ^ i ;
56465: LD_ADDR_VAR 0 11
56469: PUSH
56470: LD_VAR 0 11
56474: PUSH
56475: LD_VAR 0 1
56479: ADD
56480: ST_TO_ADDR
// temp_list = temp_list diff i ;
56481: LD_ADDR_VAR 0 3
56485: PUSH
56486: LD_VAR 0 3
56490: PUSH
56491: LD_VAR 0 1
56495: DIFF
56496: ST_TO_ADDR
// end ;
56497: GO 56447
56499: POP
56500: POP
// for i in temp_list_2 do
56501: LD_ADDR_VAR 0 1
56505: PUSH
56506: LD_VAR 0 6
56510: PUSH
56511: FOR_IN
56512: IFFALSE 56700
// begin temp_list_4 = UnitFilter ( temp_list_3 diff i , [ f_inarea , legion_base ] ) ;
56514: LD_ADDR_VAR 0 12
56518: PUSH
56519: LD_VAR 0 11
56523: PUSH
56524: LD_VAR 0 1
56528: DIFF
56529: PPUSH
56530: LD_INT 95
56532: PUSH
56533: LD_INT 3
56535: PUSH
56536: EMPTY
56537: LIST
56538: LIST
56539: PPUSH
56540: CALL_OW 72
56544: ST_TO_ADDR
// if temp_list_4 = 0 then
56545: LD_VAR 0 12
56549: PUSH
56550: LD_INT 0
56552: EQUAL
56553: IFFALSE 56586
// temp_list_4 = UnitFilter ( temp_list diff i , [ f_inarea , legion_base ] ) ;
56555: LD_ADDR_VAR 0 12
56559: PUSH
56560: LD_VAR 0 3
56564: PUSH
56565: LD_VAR 0 1
56569: DIFF
56570: PPUSH
56571: LD_INT 95
56573: PUSH
56574: LD_INT 3
56576: PUSH
56577: EMPTY
56578: LIST
56579: LIST
56580: PPUSH
56581: CALL_OW 72
56585: ST_TO_ADDR
// if temp_list_4 > 0 then
56586: LD_VAR 0 12
56590: PUSH
56591: LD_INT 0
56593: GREATER
56594: IFFALSE 56622
// ComHeal ( i , NearestUnitToUnit ( temp_list_4 , i ) ) else
56596: LD_VAR 0 1
56600: PPUSH
56601: LD_VAR 0 12
56605: PPUSH
56606: LD_VAR 0 1
56610: PPUSH
56611: CALL_OW 74
56615: PPUSH
56616: CALL_OW 128
56620: GO 56698
// if GetDistUnitXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) > 4 then
56622: LD_VAR 0 1
56626: PPUSH
56627: LD_EXP 59
56631: PUSH
56632: LD_INT 1
56634: ARRAY
56635: PUSH
56636: LD_INT 1
56638: ARRAY
56639: PPUSH
56640: LD_EXP 59
56644: PUSH
56645: LD_INT 1
56647: ARRAY
56648: PUSH
56649: LD_INT 2
56651: ARRAY
56652: PPUSH
56653: CALL_OW 297
56657: PUSH
56658: LD_INT 4
56660: GREATER
56661: IFFALSE 56698
// ComMoveXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) ;
56663: LD_VAR 0 1
56667: PPUSH
56668: LD_EXP 59
56672: PUSH
56673: LD_INT 1
56675: ARRAY
56676: PUSH
56677: LD_INT 1
56679: ARRAY
56680: PPUSH
56681: LD_EXP 59
56685: PUSH
56686: LD_INT 1
56688: ARRAY
56689: PUSH
56690: LD_INT 2
56692: ARRAY
56693: PPUSH
56694: CALL_OW 111
// end ;
56698: GO 56511
56700: POP
56701: POP
// end ; end ; for i in normal_prisoners do
56702: LD_ADDR_VAR 0 1
56706: PUSH
56707: LD_VAR 0 13
56711: PUSH
56712: FOR_IN
56713: IFFALSE 56748
// begin if GetSide ( i ) <> you_alt then
56715: LD_VAR 0 1
56719: PPUSH
56720: CALL_OW 255
56724: PUSH
56725: LD_EXP 8
56729: NONEQUAL
56730: IFFALSE 56746
// SetSide ( i , you_alt ) ;
56732: LD_VAR 0 1
56736: PPUSH
56737: LD_EXP 8
56741: PPUSH
56742: CALL_OW 235
// end ;
56746: GO 56712
56748: POP
56749: POP
// temp_list = normal_prisoners ;
56750: LD_ADDR_VAR 0 3
56754: PUSH
56755: LD_VAR 0 13
56759: ST_TO_ADDR
// if humans_needing_healing > 0 then
56760: LD_VAR 0 8
56764: PUSH
56765: LD_INT 0
56767: GREATER
56768: IFFALSE 56792
// temp_list = temp_list diff ( humans_needing_healing ^ scis_present ) ;
56770: LD_ADDR_VAR 0 3
56774: PUSH
56775: LD_VAR 0 3
56779: PUSH
56780: LD_VAR 0 8
56784: PUSH
56785: LD_VAR 0 9
56789: ADD
56790: DIFF
56791: ST_TO_ADDR
// SendToDepot ( temp_list ) ;
56792: LD_VAR 0 3
56796: PPUSH
56797: CALL 56979 0 1
// temp_list = UnitFilter ( escaping_prisoners , [ f_ok ] ) ;
56801: LD_ADDR_VAR 0 3
56805: PUSH
56806: LD_VAR 0 19
56810: PPUSH
56811: LD_INT 50
56813: PUSH
56814: EMPTY
56815: LIST
56816: PPUSH
56817: CALL_OW 72
56821: ST_TO_ADDR
// for i in temp_list do
56822: LD_ADDR_VAR 0 1
56826: PUSH
56827: LD_VAR 0 3
56831: PUSH
56832: FOR_IN
56833: IFFALSE 56868
// if GetSide ( i ) <> you_alt_escaping then
56835: LD_VAR 0 1
56839: PPUSH
56840: CALL_OW 255
56844: PUSH
56845: LD_EXP 9
56849: NONEQUAL
56850: IFFALSE 56866
// SetSide ( i , you_alt_escaping ) ;
56852: LD_VAR 0 1
56856: PPUSH
56857: LD_EXP 9
56861: PPUSH
56862: CALL_OW 235
56866: GO 56832
56868: POP
56869: POP
// temp_list = GetHumansOutOfUnits ( temp_list ) ;
56870: LD_ADDR_VAR 0 3
56874: PUSH
56875: LD_VAR 0 3
56879: PPUSH
56880: CALL 32829 0 1
56884: ST_TO_ADDR
// for i in temp_list do
56885: LD_ADDR_VAR 0 1
56889: PUSH
56890: LD_VAR 0 3
56894: PUSH
56895: FOR_IN
56896: IFFALSE 56970
// begin if not IsInArea ( i , prisoners_escape_area ) then
56898: LD_VAR 0 1
56902: PPUSH
56903: LD_INT 12
56905: PPUSH
56906: CALL_OW 308
56910: NOT
56911: IFFALSE 56927
// ComMoveToArea ( i , prisoners_escape_area ) else
56913: LD_VAR 0 1
56917: PPUSH
56918: LD_INT 12
56920: PPUSH
56921: CALL_OW 113
56925: GO 56968
// begin legion_prisoners = legion_prisoners diff i ;
56927: LD_ADDR_EXP 109
56931: PUSH
56932: LD_EXP 109
56936: PUSH
56937: LD_VAR 0 1
56941: DIFF
56942: ST_TO_ADDR
// escaping_prisoners = escaping_prisoners diff i ;
56943: LD_ADDR_VAR 0 19
56947: PUSH
56948: LD_VAR 0 19
56952: PUSH
56953: LD_VAR 0 1
56957: DIFF
56958: ST_TO_ADDR
// DestroyUnit ( i ) ;
56959: LD_VAR 0 1
56963: PPUSH
56964: CALL_OW 65
// end ; end ;
56968: GO 56895
56970: POP
56971: POP
// end ; until false ;
56972: LD_INT 0
56974: IFFALSE 53626
// end ;
56976: PPOPN 23
56978: END
// function SendToDepot ( unit_list ) ; var temp_list_2 , building , i , task_list , val , inun , count_inside , hex_list ; begin
56979: LD_INT 0
56981: PPUSH
56982: PPUSH
56983: PPUSH
56984: PPUSH
56985: PPUSH
56986: PPUSH
56987: PPUSH
56988: PPUSH
56989: PPUSH
// unit_list = SortListByListAsc ( unit_list , unit_list ) ;
56990: LD_ADDR_VAR 0 1
56994: PUSH
56995: LD_VAR 0 1
56999: PPUSH
57000: LD_VAR 0 1
57004: PPUSH
57005: CALL_OW 76
57009: ST_TO_ADDR
// temp_list_2 = FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , big_hill_area ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) ;
57010: LD_ADDR_VAR 0 3
57014: PUSH
57015: LD_INT 22
57017: PUSH
57018: LD_EXP 2
57022: PUSH
57023: EMPTY
57024: LIST
57025: LIST
57026: PUSH
57027: LD_INT 95
57029: PUSH
57030: LD_INT 11
57032: PUSH
57033: EMPTY
57034: LIST
57035: LIST
57036: PUSH
57037: LD_INT 2
57039: PUSH
57040: LD_INT 30
57042: PUSH
57043: LD_INT 0
57045: PUSH
57046: EMPTY
57047: LIST
57048: LIST
57049: PUSH
57050: LD_INT 30
57052: PUSH
57053: LD_INT 1
57055: PUSH
57056: EMPTY
57057: LIST
57058: LIST
57059: PUSH
57060: EMPTY
57061: LIST
57062: LIST
57063: LIST
57064: PUSH
57065: LD_INT 50
57067: PUSH
57068: EMPTY
57069: LIST
57070: PUSH
57071: LD_INT 3
57073: PUSH
57074: LD_INT 57
57076: PUSH
57077: EMPTY
57078: LIST
57079: PUSH
57080: EMPTY
57081: LIST
57082: LIST
57083: PUSH
57084: EMPTY
57085: LIST
57086: LIST
57087: LIST
57088: LIST
57089: LIST
57090: PPUSH
57091: CALL_OW 69
57095: ST_TO_ADDR
// if temp_list_2 > 0 then
57096: LD_VAR 0 3
57100: PUSH
57101: LD_INT 0
57103: GREATER
57104: IFFALSE 57122
// building = temp_list_2 [ 1 ] else
57106: LD_ADDR_VAR 0 4
57110: PUSH
57111: LD_VAR 0 3
57115: PUSH
57116: LD_INT 1
57118: ARRAY
57119: ST_TO_ADDR
57120: GO 57130
// building = 0 ;
57122: LD_ADDR_VAR 0 4
57126: PUSH
57127: LD_INT 0
57129: ST_TO_ADDR
// if building > 0 then
57130: LD_VAR 0 4
57134: PUSH
57135: LD_INT 0
57137: GREATER
57138: IFFALSE 57279
// begin hex_list = [ ShiftX ( GetX ( building ) , GetDir ( building ) , 3 ) , ShiftY ( GetY ( building ) , GetDir ( building ) , 3 ) ] ;
57140: LD_ADDR_VAR 0 10
57144: PUSH
57145: LD_VAR 0 4
57149: PPUSH
57150: CALL_OW 250
57154: PPUSH
57155: LD_VAR 0 4
57159: PPUSH
57160: CALL_OW 254
57164: PPUSH
57165: LD_INT 3
57167: PPUSH
57168: CALL_OW 272
57172: PUSH
57173: LD_VAR 0 4
57177: PPUSH
57178: CALL_OW 251
57182: PPUSH
57183: LD_VAR 0 4
57187: PPUSH
57188: CALL_OW 254
57192: PPUSH
57193: LD_INT 3
57195: PPUSH
57196: CALL_OW 273
57200: PUSH
57201: EMPTY
57202: LIST
57203: LIST
57204: ST_TO_ADDR
// temp_list_2 = UnitsInside ( building ) isect unit_list ;
57205: LD_ADDR_VAR 0 3
57209: PUSH
57210: LD_VAR 0 4
57214: PPUSH
57215: CALL_OW 313
57219: PUSH
57220: LD_VAR 0 1
57224: ISECT
57225: ST_TO_ADDR
// count_inside = temp_list_2 + 0 ;
57226: LD_ADDR_VAR 0 9
57230: PUSH
57231: LD_VAR 0 3
57235: PUSH
57236: LD_INT 0
57238: PLUS
57239: ST_TO_ADDR
// for i = 6 to count_inside do
57240: LD_ADDR_VAR 0 5
57244: PUSH
57245: DOUBLE
57246: LD_INT 6
57248: DEC
57249: ST_TO_ADDR
57250: LD_VAR 0 9
57254: PUSH
57255: FOR_TO
57256: IFFALSE 57275
// ComExitBuilding ( temp_list_2 [ i ] ) ;
57258: LD_VAR 0 3
57262: PUSH
57263: LD_VAR 0 5
57267: ARRAY
57268: PPUSH
57269: CALL_OW 122
57273: GO 57255
57275: POP
57276: POP
// end else
57277: GO 57287
// count_inside = 0 ;
57279: LD_ADDR_VAR 0 9
57283: PUSH
57284: LD_INT 0
57286: ST_TO_ADDR
// for i in unit_list do
57287: LD_ADDR_VAR 0 5
57291: PUSH
57292: LD_VAR 0 1
57296: PUSH
57297: FOR_IN
57298: IFFALSE 57718
// begin inun = IsInUnit ( i ) ;
57300: LD_ADDR_VAR 0 8
57304: PUSH
57305: LD_VAR 0 5
57309: PPUSH
57310: CALL_OW 310
57314: ST_TO_ADDR
// if inun > 0 then
57315: LD_VAR 0 8
57319: PUSH
57320: LD_INT 0
57322: GREATER
57323: IFFALSE 57390
// begin case GetType ( inun ) of unit_vehicle :
57325: LD_VAR 0 8
57329: PPUSH
57330: CALL_OW 247
57334: PUSH
57335: LD_INT 2
57337: DOUBLE
57338: EQUAL
57339: IFTRUE 57343
57341: GO 57355
57343: POP
// begin ComExitVehicle ( i ) ;
57344: LD_VAR 0 5
57348: PPUSH
57349: CALL_OW 121
// end ; unit_building :
57353: GO 57388
57355: LD_INT 3
57357: DOUBLE
57358: EQUAL
57359: IFTRUE 57363
57361: GO 57387
57363: POP
// begin if inun <> building then
57364: LD_VAR 0 8
57368: PUSH
57369: LD_VAR 0 4
57373: NONEQUAL
57374: IFFALSE 57385
// ComExitBuilding ( i ) ;
57376: LD_VAR 0 5
57380: PPUSH
57381: CALL_OW 122
// end ; end ;
57385: GO 57388
57387: POP
// continue ;
57388: GO 57297
// end ; if building > 0 and count_inside < 5 then
57390: LD_VAR 0 4
57394: PUSH
57395: LD_INT 0
57397: GREATER
57398: PUSH
57399: LD_VAR 0 9
57403: PUSH
57404: LD_INT 5
57406: LESS
57407: AND
57408: IFFALSE 57640
// begin count_inside = count_inside + 1 ;
57410: LD_ADDR_VAR 0 9
57414: PUSH
57415: LD_VAR 0 9
57419: PUSH
57420: LD_INT 1
57422: PLUS
57423: ST_TO_ADDR
// if GetDistUnitXY ( i , hex_list [ 1 ] , hex_list [ 2 ] ) <= 1 then
57424: LD_VAR 0 5
57428: PPUSH
57429: LD_VAR 0 10
57433: PUSH
57434: LD_INT 1
57436: ARRAY
57437: PPUSH
57438: LD_VAR 0 10
57442: PUSH
57443: LD_INT 2
57445: ARRAY
57446: PPUSH
57447: CALL_OW 297
57451: PUSH
57452: LD_INT 1
57454: LESSEQUAL
57455: IFFALSE 57487
// begin SetSide ( i , you ) ;
57457: LD_VAR 0 5
57461: PPUSH
57462: LD_EXP 2
57466: PPUSH
57467: CALL_OW 235
// ComEnterUnit ( i , building ) ;
57471: LD_VAR 0 5
57475: PPUSH
57476: LD_VAR 0 4
57480: PPUSH
57481: CALL_OW 120
// end else
57485: GO 57638
// begin task_list = GetTaskList ( i ) ;
57487: LD_ADDR_VAR 0 6
57491: PUSH
57492: LD_VAR 0 5
57496: PPUSH
57497: CALL_OW 437
57501: ST_TO_ADDR
// val = false ;
57502: LD_ADDR_VAR 0 7
57506: PUSH
57507: LD_INT 0
57509: ST_TO_ADDR
// if task_list = 0 then
57510: LD_VAR 0 6
57514: PUSH
57515: LD_INT 0
57517: EQUAL
57518: IFFALSE 57530
// val = true else
57520: LD_ADDR_VAR 0 7
57524: PUSH
57525: LD_INT 1
57527: ST_TO_ADDR
57528: GO 57605
// if not task_list [ 1 ] [ 1 ] = M or task_list [ 1 ] [ 2 ] <> hex_list [ 1 ] or task_list [ 1 ] [ 3 ] <> hex_list [ 2 ] then
57530: LD_VAR 0 6
57534: PUSH
57535: LD_INT 1
57537: ARRAY
57538: PUSH
57539: LD_INT 1
57541: ARRAY
57542: PUSH
57543: LD_STRING M
57545: EQUAL
57546: NOT
57547: PUSH
57548: LD_VAR 0 6
57552: PUSH
57553: LD_INT 1
57555: ARRAY
57556: PUSH
57557: LD_INT 2
57559: ARRAY
57560: PUSH
57561: LD_VAR 0 10
57565: PUSH
57566: LD_INT 1
57568: ARRAY
57569: NONEQUAL
57570: OR
57571: PUSH
57572: LD_VAR 0 6
57576: PUSH
57577: LD_INT 1
57579: ARRAY
57580: PUSH
57581: LD_INT 3
57583: ARRAY
57584: PUSH
57585: LD_VAR 0 10
57589: PUSH
57590: LD_INT 2
57592: ARRAY
57593: NONEQUAL
57594: OR
57595: IFFALSE 57605
// val = true ;
57597: LD_ADDR_VAR 0 7
57601: PUSH
57602: LD_INT 1
57604: ST_TO_ADDR
// if val then
57605: LD_VAR 0 7
57609: IFFALSE 57638
// ComMoveXY ( i , hex_list [ 1 ] , hex_list [ 2 ] ) ;
57611: LD_VAR 0 5
57615: PPUSH
57616: LD_VAR 0 10
57620: PUSH
57621: LD_INT 1
57623: ARRAY
57624: PPUSH
57625: LD_VAR 0 10
57629: PUSH
57630: LD_INT 2
57632: ARRAY
57633: PPUSH
57634: CALL_OW 111
// end ; end else
57638: GO 57716
// if GetDistUnitXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) > 4 then
57640: LD_VAR 0 5
57644: PPUSH
57645: LD_EXP 59
57649: PUSH
57650: LD_INT 1
57652: ARRAY
57653: PUSH
57654: LD_INT 1
57656: ARRAY
57657: PPUSH
57658: LD_EXP 59
57662: PUSH
57663: LD_INT 1
57665: ARRAY
57666: PUSH
57667: LD_INT 2
57669: ARRAY
57670: PPUSH
57671: CALL_OW 297
57675: PUSH
57676: LD_INT 4
57678: GREATER
57679: IFFALSE 57716
// ComMoveXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) ;
57681: LD_VAR 0 5
57685: PPUSH
57686: LD_EXP 59
57690: PUSH
57691: LD_INT 1
57693: ARRAY
57694: PUSH
57695: LD_INT 1
57697: ARRAY
57698: PPUSH
57699: LD_EXP 59
57703: PUSH
57704: LD_INT 1
57706: ARRAY
57707: PUSH
57708: LD_INT 2
57710: ARRAY
57711: PPUSH
57712: CALL_OW 111
// end ;
57716: GO 57297
57718: POP
57719: POP
// end ;
57720: LD_VAR 0 2
57724: RET
// on UnitGoesToRed ( un ) do begin if un in legion_prisoners then
57725: LD_VAR 0 1
57729: PUSH
57730: LD_EXP 109
57734: IN
57735: IFFALSE 57767
// begin SetSide ( un , you_alt ) ;
57737: LD_VAR 0 1
57741: PPUSH
57742: LD_EXP 8
57746: PPUSH
57747: CALL_OW 235
// legion_prisoners_shot_to_red = legion_prisoners_shot_to_red union un ;
57751: LD_ADDR_EXP 111
57755: PUSH
57756: LD_EXP 111
57760: PUSH
57761: LD_VAR 0 1
57765: UNION
57766: ST_TO_ADDR
// end ; if GetSide ( un ) <> you then
57767: LD_VAR 0 1
57771: PPUSH
57772: CALL_OW 255
57776: PUSH
57777: LD_EXP 2
57781: NONEQUAL
57782: IFFALSE 57841
// begin if un = ai_depot [ 1 ] then
57784: LD_VAR 0 1
57788: PUSH
57789: LD_EXP 36
57793: PUSH
57794: LD_INT 1
57796: ARRAY
57797: EQUAL
57798: IFFALSE 57807
// SetLegionMainDepotResources ( false ) ;
57800: LD_INT 0
57802: PPUSH
57803: CALL 53157 0 1
// if un = leg_dep_smal then
57807: LD_VAR 0 1
57811: PUSH
57812: LD_INT 10
57814: EQUAL
57815: IFFALSE 57824
// SetLegionSecondaryDepotResources ( false ) ;
57817: LD_INT 0
57819: PPUSH
57820: CALL 53270 0 1
// if un = am_dep_2 then
57824: LD_VAR 0 1
57828: PUSH
57829: LD_INT 188
57831: EQUAL
57832: IFFALSE 57841
// SetLoneAmDepotResources ( false ) ;
57834: LD_INT 0
57836: PPUSH
57837: CALL 53373 0 1
// end ; end ;
57841: PPOPN 1
57843: END
// every 0 0$1 + 0 0$0.8 trigger legion_base_captured do var c , temp_list , i , k , temp_list_2 ; var area , query_string , target_area , spawn_directions ; var units_on_the_move , query_timer , time_to_wait , num_units_in_area , excepted_units , time_step ;
57844: LD_EXP 110
57848: IFFALSE 60672
57850: GO 57852
57852: DISABLE
57853: LD_INT 0
57855: PPUSH
57856: PPUSH
57857: PPUSH
57858: PPUSH
57859: PPUSH
57860: PPUSH
57861: PPUSH
57862: PPUSH
57863: PPUSH
57864: PPUSH
57865: PPUSH
57866: PPUSH
57867: PPUSH
57868: PPUSH
57869: PPUSH
// begin SetAreaMapShow ( upper_west_area , 3 ) ;
57870: LD_INT 13
57872: PPUSH
57873: LD_INT 3
57875: PPUSH
57876: CALL_OW 424
// SetAreaMapShow ( lower_west_area , 3 ) ;
57880: LD_INT 14
57882: PPUSH
57883: LD_INT 3
57885: PPUSH
57886: CALL_OW 424
// SetAreaMapShow ( upper_east_area , 5 ) ;
57890: LD_INT 15
57892: PPUSH
57893: LD_INT 5
57895: PPUSH
57896: CALL_OW 424
// SetAreaMapShow ( lower_east_area , 5 ) ;
57900: LD_INT 16
57902: PPUSH
57903: LD_INT 5
57905: PPUSH
57906: CALL_OW 424
// time_step = 0 0$0.5 ;
57910: LD_ADDR_VAR 0 15
57914: PUSH
57915: LD_INT 18
57917: ST_TO_ADDR
// units_on_the_move = [ ] ;
57918: LD_ADDR_VAR 0 10
57922: PUSH
57923: EMPTY
57924: ST_TO_ADDR
// query_timer = [ 0 0$0 , 0 0$0 , 0 0$0 , 0 0$0 ] ;
57925: LD_ADDR_VAR 0 11
57929: PUSH
57930: LD_INT 0
57932: PUSH
57933: LD_INT 0
57935: PUSH
57936: LD_INT 0
57938: PUSH
57939: LD_INT 0
57941: PUSH
57942: EMPTY
57943: LIST
57944: LIST
57945: LIST
57946: LIST
57947: ST_TO_ADDR
// time_to_wait = [ 0 0$2.5 , 0 0$2.5 , 0 0$2.5 , 0 0$2.5 ] ;
57948: LD_ADDR_VAR 0 12
57952: PUSH
57953: LD_INT 88
57955: PUSH
57956: LD_INT 88
57958: PUSH
57959: LD_INT 88
57961: PUSH
57962: LD_INT 88
57964: PUSH
57965: EMPTY
57966: LIST
57967: LIST
57968: LIST
57969: LIST
57970: ST_TO_ADDR
// num_units_in_area = [ 0 , 0 , 0 , 0 ] ;
57971: LD_ADDR_VAR 0 13
57975: PUSH
57976: LD_INT 0
57978: PUSH
57979: LD_INT 0
57981: PUSH
57982: LD_INT 0
57984: PUSH
57985: LD_INT 0
57987: PUSH
57988: EMPTY
57989: LIST
57990: LIST
57991: LIST
57992: LIST
57993: ST_TO_ADDR
// excepted_units = [ ] ;
57994: LD_ADDR_VAR 0 14
57998: PUSH
57999: EMPTY
58000: ST_TO_ADDR
// excepted_units = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_type , unit_human ] , [ f_type , unit_vehicle ] ] ] ) ;
58001: LD_ADDR_VAR 0 14
58005: PUSH
58006: LD_INT 22
58008: PUSH
58009: LD_EXP 2
58013: PUSH
58014: EMPTY
58015: LIST
58016: LIST
58017: PUSH
58018: LD_INT 2
58020: PUSH
58021: LD_INT 21
58023: PUSH
58024: LD_INT 1
58026: PUSH
58027: EMPTY
58028: LIST
58029: LIST
58030: PUSH
58031: LD_INT 21
58033: PUSH
58034: LD_INT 2
58036: PUSH
58037: EMPTY
58038: LIST
58039: LIST
58040: PUSH
58041: EMPTY
58042: LIST
58043: LIST
58044: LIST
58045: PUSH
58046: EMPTY
58047: LIST
58048: LIST
58049: PPUSH
58050: CALL_OW 69
58054: ST_TO_ADDR
// repeat wait ( time_step ) ;
58055: LD_VAR 0 15
58059: PPUSH
58060: CALL_OW 67
// i = 1 ;
58064: LD_ADDR_VAR 0 3
58068: PUSH
58069: LD_INT 1
58071: ST_TO_ADDR
// while i <= units_on_the_move + 0 do
58072: LD_VAR 0 3
58076: PUSH
58077: LD_VAR 0 10
58081: PUSH
58082: LD_INT 0
58084: PLUS
58085: LESSEQUAL
58086: IFFALSE 58778
// begin if tick >= units_on_the_move [ i ] [ 3 ] then
58088: LD_OWVAR 1
58092: PUSH
58093: LD_VAR 0 10
58097: PUSH
58098: LD_VAR 0 3
58102: ARRAY
58103: PUSH
58104: LD_INT 3
58106: ARRAY
58107: GREATEREQUAL
58108: IFFALSE 58762
// begin case units_on_the_move [ i ] [ 2 ] of upper_west_area :
58110: LD_VAR 0 10
58114: PUSH
58115: LD_VAR 0 3
58119: ARRAY
58120: PUSH
58121: LD_INT 2
58123: ARRAY
58124: PUSH
58125: LD_INT 13
58127: DOUBLE
58128: EQUAL
58129: IFTRUE 58133
58131: GO 58193
58133: POP
// begin if DangerousUnits ( FilterAllUnits ( [ [ f_enemy , you ] , [ f_inarea , upper_west_vicinity_area ] ] ) ) > 0 then
58134: LD_INT 81
58136: PUSH
58137: LD_EXP 2
58141: PUSH
58142: EMPTY
58143: LIST
58144: LIST
58145: PUSH
58146: LD_INT 95
58148: PUSH
58149: LD_INT 17
58151: PUSH
58152: EMPTY
58153: LIST
58154: LIST
58155: PUSH
58156: EMPTY
58157: LIST
58158: LIST
58159: PPUSH
58160: CALL_OW 69
58164: PPUSH
58165: CALL 83864 0 1
58169: PUSH
58170: LD_INT 0
58172: GREATER
58173: IFFALSE 58191
// begin i = i + 1 ;
58175: LD_ADDR_VAR 0 3
58179: PUSH
58180: LD_VAR 0 3
58184: PUSH
58185: LD_INT 1
58187: PLUS
58188: ST_TO_ADDR
// continue ;
58189: GO 58072
// end ; end ; lower_west_area :
58191: GO 58398
58193: LD_INT 14
58195: DOUBLE
58196: EQUAL
58197: IFTRUE 58201
58199: GO 58261
58201: POP
// begin if DangerousUnits ( FilterAllUnits ( [ [ f_enemy , you ] , [ f_inarea , lower_west_vicinity_area ] ] ) ) > 0 then
58202: LD_INT 81
58204: PUSH
58205: LD_EXP 2
58209: PUSH
58210: EMPTY
58211: LIST
58212: LIST
58213: PUSH
58214: LD_INT 95
58216: PUSH
58217: LD_INT 18
58219: PUSH
58220: EMPTY
58221: LIST
58222: LIST
58223: PUSH
58224: EMPTY
58225: LIST
58226: LIST
58227: PPUSH
58228: CALL_OW 69
58232: PPUSH
58233: CALL 83864 0 1
58237: PUSH
58238: LD_INT 0
58240: GREATER
58241: IFFALSE 58259
// begin i = i + 1 ;
58243: LD_ADDR_VAR 0 3
58247: PUSH
58248: LD_VAR 0 3
58252: PUSH
58253: LD_INT 1
58255: PLUS
58256: ST_TO_ADDR
// continue ;
58257: GO 58072
// end ; end ; upper_east_area :
58259: GO 58398
58261: LD_INT 15
58263: DOUBLE
58264: EQUAL
58265: IFTRUE 58269
58267: GO 58329
58269: POP
// begin if DangerousUnits ( FilterAllUnits ( [ [ f_enemy , you ] , [ f_inarea , upper_east_vicinity_area ] ] ) ) > 0 then
58270: LD_INT 81
58272: PUSH
58273: LD_EXP 2
58277: PUSH
58278: EMPTY
58279: LIST
58280: LIST
58281: PUSH
58282: LD_INT 95
58284: PUSH
58285: LD_INT 19
58287: PUSH
58288: EMPTY
58289: LIST
58290: LIST
58291: PUSH
58292: EMPTY
58293: LIST
58294: LIST
58295: PPUSH
58296: CALL_OW 69
58300: PPUSH
58301: CALL 83864 0 1
58305: PUSH
58306: LD_INT 0
58308: GREATER
58309: IFFALSE 58327
// begin i = i + 1 ;
58311: LD_ADDR_VAR 0 3
58315: PUSH
58316: LD_VAR 0 3
58320: PUSH
58321: LD_INT 1
58323: PLUS
58324: ST_TO_ADDR
// continue ;
58325: GO 58072
// end ; end ; lower_east_area :
58327: GO 58398
58329: LD_INT 16
58331: DOUBLE
58332: EQUAL
58333: IFTRUE 58337
58335: GO 58397
58337: POP
// begin if DangerousUnits ( FilterAllUnits ( [ [ f_enemy , you ] , [ f_inarea , lower_east_vicinity_area ] ] ) ) > 0 then
58338: LD_INT 81
58340: PUSH
58341: LD_EXP 2
58345: PUSH
58346: EMPTY
58347: LIST
58348: LIST
58349: PUSH
58350: LD_INT 95
58352: PUSH
58353: LD_INT 20
58355: PUSH
58356: EMPTY
58357: LIST
58358: LIST
58359: PUSH
58360: EMPTY
58361: LIST
58362: LIST
58363: PPUSH
58364: CALL_OW 69
58368: PPUSH
58369: CALL 83864 0 1
58373: PUSH
58374: LD_INT 0
58376: GREATER
58377: IFFALSE 58395
// begin i = i + 1 ;
58379: LD_ADDR_VAR 0 3
58383: PUSH
58384: LD_VAR 0 3
58388: PUSH
58389: LD_INT 1
58391: PLUS
58392: ST_TO_ADDR
// continue ;
58393: GO 58072
// end ; end ; end ;
58395: GO 58398
58397: POP
// temp_list = [ ] ;
58398: LD_ADDR_VAR 0 2
58402: PUSH
58403: EMPTY
58404: ST_TO_ADDR
// for k in units_on_the_move [ i ] [ 1 ] do
58405: LD_ADDR_VAR 0 4
58409: PUSH
58410: LD_VAR 0 10
58414: PUSH
58415: LD_VAR 0 3
58419: ARRAY
58420: PUSH
58421: LD_INT 1
58423: ARRAY
58424: PUSH
58425: FOR_IN
58426: IFFALSE 58666
// begin if not PlaceUnitArea ( k [ 1 ] , units_on_the_move [ i ] [ 2 ] , false ) then
58428: LD_VAR 0 4
58432: PUSH
58433: LD_INT 1
58435: ARRAY
58436: PPUSH
58437: LD_VAR 0 10
58441: PUSH
58442: LD_VAR 0 3
58446: ARRAY
58447: PUSH
58448: LD_INT 2
58450: ARRAY
58451: PPUSH
58452: LD_INT 0
58454: PPUSH
58455: CALL_OW 49
58459: NOT
58460: IFFALSE 58483
// temp_list = temp_list ^ [ k ] else
58462: LD_ADDR_VAR 0 2
58466: PUSH
58467: LD_VAR 0 2
58471: PUSH
58472: LD_VAR 0 4
58476: PUSH
58477: EMPTY
58478: LIST
58479: ADD
58480: ST_TO_ADDR
58481: GO 58664
// begin traveling_humans = traveling_humans diff k [ 1 ] ;
58483: LD_ADDR_EXP 122
58487: PUSH
58488: LD_EXP 122
58492: PUSH
58493: LD_VAR 0 4
58497: PUSH
58498: LD_INT 1
58500: ARRAY
58501: DIFF
58502: ST_TO_ADDR
// excepted_units = excepted_units ^ k [ 1 ] ;
58503: LD_ADDR_VAR 0 14
58507: PUSH
58508: LD_VAR 0 14
58512: PUSH
58513: LD_VAR 0 4
58517: PUSH
58518: LD_INT 1
58520: ARRAY
58521: ADD
58522: ST_TO_ADDR
// if k [ 2 ] > 0 then
58523: LD_VAR 0 4
58527: PUSH
58528: LD_INT 2
58530: ARRAY
58531: PUSH
58532: LD_INT 0
58534: GREATER
58535: IFFALSE 58664
// begin case GetControl ( k [ 1 ] ) of control_manual , control_rider :
58537: LD_VAR 0 4
58541: PUSH
58542: LD_INT 1
58544: ARRAY
58545: PPUSH
58546: CALL_OW 263
58550: PUSH
58551: LD_INT 1
58553: DOUBLE
58554: EQUAL
58555: IFTRUE 58565
58557: LD_INT 4
58559: DOUBLE
58560: EQUAL
58561: IFTRUE 58565
58563: GO 58630
58565: POP
// begin PlaceHumanInUnit ( k [ 2 ] , k [ 1 ] ) ;
58566: LD_VAR 0 4
58570: PUSH
58571: LD_INT 2
58573: ARRAY
58574: PPUSH
58575: LD_VAR 0 4
58579: PUSH
58580: LD_INT 1
58582: ARRAY
58583: PPUSH
58584: CALL_OW 52
// traveling_humans = traveling_humans diff k [ 2 ] ;
58588: LD_ADDR_EXP 122
58592: PUSH
58593: LD_EXP 122
58597: PUSH
58598: LD_VAR 0 4
58602: PUSH
58603: LD_INT 2
58605: ARRAY
58606: DIFF
58607: ST_TO_ADDR
// excepted_units = excepted_units ^ k [ 2 ] ;
58608: LD_ADDR_VAR 0 14
58612: PUSH
58613: LD_VAR 0 14
58617: PUSH
58618: LD_VAR 0 4
58622: PUSH
58623: LD_INT 2
58625: ARRAY
58626: ADD
58627: ST_TO_ADDR
// end ; control_remote :
58628: GO 58664
58630: LD_INT 2
58632: DOUBLE
58633: EQUAL
58634: IFTRUE 58638
58636: GO 58663
58638: POP
// ComLinkTo ( k [ 1 ] , k [ 2 ] ) ; end ;
58639: LD_VAR 0 4
58643: PUSH
58644: LD_INT 1
58646: ARRAY
58647: PPUSH
58648: LD_VAR 0 4
58652: PUSH
58653: LD_INT 2
58655: ARRAY
58656: PPUSH
58657: CALL_OW 135
58661: GO 58664
58663: POP
// end ; end ; end ;
58664: GO 58425
58666: POP
58667: POP
// if temp_list > 0 then
58668: LD_VAR 0 2
58672: PUSH
58673: LD_INT 0
58675: GREATER
58676: IFFALSE 58740
// units_on_the_move = Replace ( units_on_the_move , i , [ temp_list , units_on_the_move [ i ] [ 2 ] , units_on_the_move [ i ] [ 3 ] ] ) else
58678: LD_ADDR_VAR 0 10
58682: PUSH
58683: LD_VAR 0 10
58687: PPUSH
58688: LD_VAR 0 3
58692: PPUSH
58693: LD_VAR 0 2
58697: PUSH
58698: LD_VAR 0 10
58702: PUSH
58703: LD_VAR 0 3
58707: ARRAY
58708: PUSH
58709: LD_INT 2
58711: ARRAY
58712: PUSH
58713: LD_VAR 0 10
58717: PUSH
58718: LD_VAR 0 3
58722: ARRAY
58723: PUSH
58724: LD_INT 3
58726: ARRAY
58727: PUSH
58728: EMPTY
58729: LIST
58730: LIST
58731: LIST
58732: PPUSH
58733: CALL_OW 1
58737: ST_TO_ADDR
58738: GO 58762
// begin units_on_the_move = Delete ( units_on_the_move , i ) ;
58740: LD_ADDR_VAR 0 10
58744: PUSH
58745: LD_VAR 0 10
58749: PPUSH
58750: LD_VAR 0 3
58754: PPUSH
58755: CALL_OW 3
58759: ST_TO_ADDR
// continue ;
58760: GO 58072
// end ; end ; i = i + 1 ;
58762: LD_ADDR_VAR 0 3
58766: PUSH
58767: LD_VAR 0 3
58771: PUSH
58772: LD_INT 1
58774: PLUS
58775: ST_TO_ADDR
// end ;
58776: GO 58072
// i = 1 ;
58778: LD_ADDR_VAR 0 3
58782: PUSH
58783: LD_INT 1
58785: ST_TO_ADDR
// while i <= excepted_units do
58786: LD_VAR 0 3
58790: PUSH
58791: LD_VAR 0 14
58795: LESSEQUAL
58796: IFFALSE 58932
// begin if GetDistUnitArea ( excepted_units [ i ] , upper_west_area ) > 1 and GetDistUnitArea ( excepted_units [ i ] , lower_west_area ) > 1 and GetDistUnitArea ( excepted_units [ i ] , upper_east_area ) > 1 and GetDistUnitArea ( excepted_units [ i ] , lower_east_area ) > 1 then
58798: LD_VAR 0 14
58802: PUSH
58803: LD_VAR 0 3
58807: ARRAY
58808: PPUSH
58809: LD_INT 13
58811: PPUSH
58812: CALL_OW 299
58816: PUSH
58817: LD_INT 1
58819: GREATER
58820: PUSH
58821: LD_VAR 0 14
58825: PUSH
58826: LD_VAR 0 3
58830: ARRAY
58831: PPUSH
58832: LD_INT 14
58834: PPUSH
58835: CALL_OW 299
58839: PUSH
58840: LD_INT 1
58842: GREATER
58843: AND
58844: PUSH
58845: LD_VAR 0 14
58849: PUSH
58850: LD_VAR 0 3
58854: ARRAY
58855: PPUSH
58856: LD_INT 15
58858: PPUSH
58859: CALL_OW 299
58863: PUSH
58864: LD_INT 1
58866: GREATER
58867: AND
58868: PUSH
58869: LD_VAR 0 14
58873: PUSH
58874: LD_VAR 0 3
58878: ARRAY
58879: PPUSH
58880: LD_INT 16
58882: PPUSH
58883: CALL_OW 299
58887: PUSH
58888: LD_INT 1
58890: GREATER
58891: AND
58892: IFFALSE 58916
// begin excepted_units = Delete ( excepted_units , i ) ;
58894: LD_ADDR_VAR 0 14
58898: PUSH
58899: LD_VAR 0 14
58903: PPUSH
58904: LD_VAR 0 3
58908: PPUSH
58909: CALL_OW 3
58913: ST_TO_ADDR
// continue ;
58914: GO 58786
// end ; i = i + 1 ;
58916: LD_ADDR_VAR 0 3
58920: PUSH
58921: LD_VAR 0 3
58925: PUSH
58926: LD_INT 1
58928: PLUS
58929: ST_TO_ADDR
// end ;
58930: GO 58786
// for c = 1 to 4 do
58932: LD_ADDR_VAR 0 1
58936: PUSH
58937: DOUBLE
58938: LD_INT 1
58940: DEC
58941: ST_TO_ADDR
58942: LD_INT 4
58944: PUSH
58945: FOR_TO
58946: IFFALSE 60666
// begin case c of 1 :
58948: LD_VAR 0 1
58952: PUSH
58953: LD_INT 1
58955: DOUBLE
58956: EQUAL
58957: IFTRUE 58961
58959: GO 59003
58961: POP
// begin area = upper_west_area ;
58962: LD_ADDR_VAR 0 6
58966: PUSH
58967: LD_INT 13
58969: ST_TO_ADDR
// target_area = lower_west_area ;
58970: LD_ADDR_VAR 0 8
58974: PUSH
58975: LD_INT 14
58977: ST_TO_ADDR
// query_string = QDownWest ;
58978: LD_ADDR_VAR 0 7
58982: PUSH
58983: LD_STRING QDownWest
58985: ST_TO_ADDR
// spawn_directions = [ 0 , 5 ] ;
58986: LD_ADDR_VAR 0 9
58990: PUSH
58991: LD_INT 0
58993: PUSH
58994: LD_INT 5
58996: PUSH
58997: EMPTY
58998: LIST
58999: LIST
59000: ST_TO_ADDR
// end ; 2 :
59001: GO 59154
59003: LD_INT 2
59005: DOUBLE
59006: EQUAL
59007: IFTRUE 59011
59009: GO 59053
59011: POP
// begin area = lower_west_area ;
59012: LD_ADDR_VAR 0 6
59016: PUSH
59017: LD_INT 14
59019: ST_TO_ADDR
// target_area = upper_west_area ;
59020: LD_ADDR_VAR 0 8
59024: PUSH
59025: LD_INT 13
59027: ST_TO_ADDR
// query_string = QUpWest ;
59028: LD_ADDR_VAR 0 7
59032: PUSH
59033: LD_STRING QUpWest
59035: ST_TO_ADDR
// spawn_directions = [ 0 , 5 ] ;
59036: LD_ADDR_VAR 0 9
59040: PUSH
59041: LD_INT 0
59043: PUSH
59044: LD_INT 5
59046: PUSH
59047: EMPTY
59048: LIST
59049: LIST
59050: ST_TO_ADDR
// end ; 3 :
59051: GO 59154
59053: LD_INT 3
59055: DOUBLE
59056: EQUAL
59057: IFTRUE 59061
59059: GO 59103
59061: POP
// begin area = upper_east_area ;
59062: LD_ADDR_VAR 0 6
59066: PUSH
59067: LD_INT 15
59069: ST_TO_ADDR
// target_area = lower_east_area ;
59070: LD_ADDR_VAR 0 8
59074: PUSH
59075: LD_INT 16
59077: ST_TO_ADDR
// query_string = QDownEast ;
59078: LD_ADDR_VAR 0 7
59082: PUSH
59083: LD_STRING QDownEast
59085: ST_TO_ADDR
// spawn_directions = [ 4 , 5 ] ;
59086: LD_ADDR_VAR 0 9
59090: PUSH
59091: LD_INT 4
59093: PUSH
59094: LD_INT 5
59096: PUSH
59097: EMPTY
59098: LIST
59099: LIST
59100: ST_TO_ADDR
// end ; 4 :
59101: GO 59154
59103: LD_INT 4
59105: DOUBLE
59106: EQUAL
59107: IFTRUE 59111
59109: GO 59153
59111: POP
// begin area = lower_east_area ;
59112: LD_ADDR_VAR 0 6
59116: PUSH
59117: LD_INT 16
59119: ST_TO_ADDR
// target_area = upper_east_area ;
59120: LD_ADDR_VAR 0 8
59124: PUSH
59125: LD_INT 15
59127: ST_TO_ADDR
// query_string = QUpEast ;
59128: LD_ADDR_VAR 0 7
59132: PUSH
59133: LD_STRING QUpEast
59135: ST_TO_ADDR
// spawn_directions = [ 3 , 4 ] ;
59136: LD_ADDR_VAR 0 9
59140: PUSH
59141: LD_INT 3
59143: PUSH
59144: LD_INT 4
59146: PUSH
59147: EMPTY
59148: LIST
59149: LIST
59150: ST_TO_ADDR
// end ; end ;
59151: GO 59154
59153: POP
// temp_list = [ ] ;
59154: LD_ADDR_VAR 0 2
59158: PUSH
59159: EMPTY
59160: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_type , unit_human ] , [ f_type , unit_vehicle ] ] , [ f_inarea , area ] , [ f_ok ] ] ) do
59161: LD_ADDR_VAR 0 3
59165: PUSH
59166: LD_INT 22
59168: PUSH
59169: LD_EXP 2
59173: PUSH
59174: EMPTY
59175: LIST
59176: LIST
59177: PUSH
59178: LD_INT 2
59180: PUSH
59181: LD_INT 21
59183: PUSH
59184: LD_INT 1
59186: PUSH
59187: EMPTY
59188: LIST
59189: LIST
59190: PUSH
59191: LD_INT 21
59193: PUSH
59194: LD_INT 2
59196: PUSH
59197: EMPTY
59198: LIST
59199: LIST
59200: PUSH
59201: EMPTY
59202: LIST
59203: LIST
59204: LIST
59205: PUSH
59206: LD_INT 95
59208: PUSH
59209: LD_VAR 0 6
59213: PUSH
59214: EMPTY
59215: LIST
59216: LIST
59217: PUSH
59218: LD_INT 50
59220: PUSH
59221: EMPTY
59222: LIST
59223: PUSH
59224: EMPTY
59225: LIST
59226: LIST
59227: LIST
59228: LIST
59229: PPUSH
59230: CALL_OW 69
59234: PUSH
59235: FOR_IN
59236: IFFALSE 59519
// begin if i in excepted_units then
59238: LD_VAR 0 3
59242: PUSH
59243: LD_VAR 0 14
59247: IN
59248: IFFALSE 59252
// continue ;
59250: GO 59235
// if GetType ( i ) = unit_human then
59252: LD_VAR 0 3
59256: PPUSH
59257: CALL_OW 247
59261: PUSH
59262: LD_INT 1
59264: EQUAL
59265: IFFALSE 59316
// begin if IsInUnit ( i ) > 0 then
59267: LD_VAR 0 3
59271: PPUSH
59272: CALL_OW 310
59276: PUSH
59277: LD_INT 0
59279: GREATER
59280: IFFALSE 59284
// continue ;
59282: GO 59235
// temp_list = Insert ( temp_list , 1 , [ i , 0 ] ) ;
59284: LD_ADDR_VAR 0 2
59288: PUSH
59289: LD_VAR 0 2
59293: PPUSH
59294: LD_INT 1
59296: PPUSH
59297: LD_VAR 0 3
59301: PUSH
59302: LD_INT 0
59304: PUSH
59305: EMPTY
59306: LIST
59307: LIST
59308: PPUSH
59309: CALL_OW 2
59313: ST_TO_ADDR
// end else
59314: GO 59517
// begin case GetControl ( i ) of control_manual , control_rider :
59316: LD_VAR 0 3
59320: PPUSH
59321: CALL_OW 263
59325: PUSH
59326: LD_INT 1
59328: DOUBLE
59329: EQUAL
59330: IFTRUE 59340
59332: LD_INT 4
59334: DOUBLE
59335: EQUAL
59336: IFTRUE 59340
59338: GO 59418
59340: POP
// begin k = UnitsInside ( i ) ;
59341: LD_ADDR_VAR 0 4
59345: PUSH
59346: LD_VAR 0 3
59350: PPUSH
59351: CALL_OW 313
59355: ST_TO_ADDR
// if k > 0 then
59356: LD_VAR 0 4
59360: PUSH
59361: LD_INT 0
59363: GREATER
59364: IFFALSE 59416
// begin if k in excepted_units then
59366: LD_VAR 0 4
59370: PUSH
59371: LD_VAR 0 14
59375: IN
59376: IFFALSE 59380
// continue ;
59378: GO 59235
// temp_list = Insert ( temp_list , 1 , [ i , k [ 1 ] ] ) ;
59380: LD_ADDR_VAR 0 2
59384: PUSH
59385: LD_VAR 0 2
59389: PPUSH
59390: LD_INT 1
59392: PPUSH
59393: LD_VAR 0 3
59397: PUSH
59398: LD_VAR 0 4
59402: PUSH
59403: LD_INT 1
59405: ARRAY
59406: PUSH
59407: EMPTY
59408: LIST
59409: LIST
59410: PPUSH
59411: CALL_OW 2
59415: ST_TO_ADDR
// end ; end ; control_remote :
59416: GO 59517
59418: LD_INT 2
59420: DOUBLE
59421: EQUAL
59422: IFTRUE 59426
59424: GO 59486
59426: POP
// begin k = IsControledBy ( i ) ;
59427: LD_ADDR_VAR 0 4
59431: PUSH
59432: LD_VAR 0 3
59436: PPUSH
59437: CALL_OW 312
59441: ST_TO_ADDR
// if k > 0 then
59442: LD_VAR 0 4
59446: PUSH
59447: LD_INT 0
59449: GREATER
59450: IFFALSE 59484
// temp_list = Insert ( temp_list , 1 , [ i , k ] ) ;
59452: LD_ADDR_VAR 0 2
59456: PUSH
59457: LD_VAR 0 2
59461: PPUSH
59462: LD_INT 1
59464: PPUSH
59465: LD_VAR 0 3
59469: PUSH
59470: LD_VAR 0 4
59474: PUSH
59475: EMPTY
59476: LIST
59477: LIST
59478: PPUSH
59479: CALL_OW 2
59483: ST_TO_ADDR
// end ; else
59484: GO 59517
59486: POP
// begin temp_list = Insert ( temp_list , 1 , [ i , 0 ] ) ;
59487: LD_ADDR_VAR 0 2
59491: PUSH
59492: LD_VAR 0 2
59496: PPUSH
59497: LD_INT 1
59499: PPUSH
59500: LD_VAR 0 3
59504: PUSH
59505: LD_INT 0
59507: PUSH
59508: EMPTY
59509: LIST
59510: LIST
59511: PPUSH
59512: CALL_OW 2
59516: ST_TO_ADDR
// end ; end ; end ; end ;
59517: GO 59235
59519: POP
59520: POP
// if temp_list = 0 then
59521: LD_VAR 0 2
59525: PUSH
59526: LD_INT 0
59528: EQUAL
59529: IFFALSE 59550
// begin Replace ( num_units_in_area , c , 0 ) ;
59531: LD_VAR 0 13
59535: PPUSH
59536: LD_VAR 0 1
59540: PPUSH
59541: LD_INT 0
59543: PPUSH
59544: CALL_OW 1
// continue ;
59548: GO 58945
// end ; if temp_list + 0 <> num_units_in_area [ c ] then
59550: LD_VAR 0 2
59554: PUSH
59555: LD_INT 0
59557: PLUS
59558: PUSH
59559: LD_VAR 0 13
59563: PUSH
59564: LD_VAR 0 1
59568: ARRAY
59569: NONEQUAL
59570: IFFALSE 59626
// begin num_units_in_area = Replace ( num_units_in_area , c , temp_list + 0 ) ;
59572: LD_ADDR_VAR 0 13
59576: PUSH
59577: LD_VAR 0 13
59581: PPUSH
59582: LD_VAR 0 1
59586: PPUSH
59587: LD_VAR 0 2
59591: PUSH
59592: LD_INT 0
59594: PLUS
59595: PPUSH
59596: CALL_OW 1
59600: ST_TO_ADDR
// query_timer = Replace ( query_timer , c , 0 0$0 ) ;
59601: LD_ADDR_VAR 0 11
59605: PUSH
59606: LD_VAR 0 11
59610: PPUSH
59611: LD_VAR 0 1
59615: PPUSH
59616: LD_INT 0
59618: PPUSH
59619: CALL_OW 1
59623: ST_TO_ADDR
// end else
59624: GO 60664
// begin if query_timer [ c ] < time_to_wait [ c ] then
59626: LD_VAR 0 11
59630: PUSH
59631: LD_VAR 0 1
59635: ARRAY
59636: PUSH
59637: LD_VAR 0 12
59641: PUSH
59642: LD_VAR 0 1
59646: ARRAY
59647: LESS
59648: IFFALSE 59689
// query_timer = Replace ( query_timer , c , query_timer [ c ] + time_step ) else
59650: LD_ADDR_VAR 0 11
59654: PUSH
59655: LD_VAR 0 11
59659: PPUSH
59660: LD_VAR 0 1
59664: PPUSH
59665: LD_VAR 0 11
59669: PUSH
59670: LD_VAR 0 1
59674: ARRAY
59675: PUSH
59676: LD_VAR 0 15
59680: PLUS
59681: PPUSH
59682: CALL_OW 1
59686: ST_TO_ADDR
59687: GO 60664
// begin query_timer = Replace ( query_timer , c , 0 0$0 ) ;
59689: LD_ADDR_VAR 0 11
59693: PUSH
59694: LD_VAR 0 11
59698: PPUSH
59699: LD_VAR 0 1
59703: PPUSH
59704: LD_INT 0
59706: PPUSH
59707: CALL_OW 1
59711: ST_TO_ADDR
// if Query ( query_string ) = 1 then
59712: LD_VAR 0 7
59716: PPUSH
59717: CALL_OW 97
59721: PUSH
59722: LD_INT 1
59724: EQUAL
59725: IFFALSE 60641
// begin for i = 1 to temp_list + 0 do
59727: LD_ADDR_VAR 0 3
59731: PUSH
59732: DOUBLE
59733: LD_INT 1
59735: DEC
59736: ST_TO_ADDR
59737: LD_VAR 0 2
59741: PUSH
59742: LD_INT 0
59744: PLUS
59745: PUSH
59746: FOR_TO
59747: IFFALSE 60555
// begin if GetType ( temp_list [ i ] [ 1 ] ) = unit_human then
59749: LD_VAR 0 2
59753: PUSH
59754: LD_VAR 0 3
59758: ARRAY
59759: PUSH
59760: LD_INT 1
59762: ARRAY
59763: PPUSH
59764: CALL_OW 247
59768: PUSH
59769: LD_INT 1
59771: EQUAL
59772: IFFALSE 59821
// begin RemoveUnit ( temp_list [ i ] [ 1 ] ) ;
59774: LD_VAR 0 2
59778: PUSH
59779: LD_VAR 0 3
59783: ARRAY
59784: PUSH
59785: LD_INT 1
59787: ARRAY
59788: PPUSH
59789: CALL_OW 64
// traveling_humans = traveling_humans ^ temp_list [ i ] [ 1 ] ;
59793: LD_ADDR_EXP 122
59797: PUSH
59798: LD_EXP 122
59802: PUSH
59803: LD_VAR 0 2
59807: PUSH
59808: LD_VAR 0 3
59812: ARRAY
59813: PUSH
59814: LD_INT 1
59816: ARRAY
59817: ADD
59818: ST_TO_ADDR
// end else
59819: GO 60553
// begin case GetControl ( temp_list [ i ] [ 1 ] ) of control_manual , control_rider :
59821: LD_VAR 0 2
59825: PUSH
59826: LD_VAR 0 3
59830: ARRAY
59831: PUSH
59832: LD_INT 1
59834: ARRAY
59835: PPUSH
59836: CALL_OW 263
59840: PUSH
59841: LD_INT 1
59843: DOUBLE
59844: EQUAL
59845: IFTRUE 59855
59847: LD_INT 4
59849: DOUBLE
59850: EQUAL
59851: IFTRUE 59855
59853: GO 59903
59855: POP
// begin RemoveUnit ( temp_list [ i ] [ 2 ] ) ;
59856: LD_VAR 0 2
59860: PUSH
59861: LD_VAR 0 3
59865: ARRAY
59866: PUSH
59867: LD_INT 2
59869: ARRAY
59870: PPUSH
59871: CALL_OW 64
// traveling_humans = traveling_humans ^ temp_list [ i ] [ 2 ] ;
59875: LD_ADDR_EXP 122
59879: PUSH
59880: LD_EXP 122
59884: PUSH
59885: LD_VAR 0 2
59889: PUSH
59890: LD_VAR 0 3
59894: ARRAY
59895: PUSH
59896: LD_INT 2
59898: ARRAY
59899: ADD
59900: ST_TO_ADDR
// end ; control_remote :
59901: GO 59934
59903: LD_INT 2
59905: DOUBLE
59906: EQUAL
59907: IFTRUE 59911
59909: GO 59933
59911: POP
// begin ComUnlink ( temp_list [ i ] [ 1 ] ) ;
59912: LD_VAR 0 2
59916: PUSH
59917: LD_VAR 0 3
59921: ARRAY
59922: PUSH
59923: LD_INT 1
59925: ARRAY
59926: PPUSH
59927: CALL_OW 136
// end ; end ;
59931: GO 59934
59933: POP
// InitUc ;
59934: CALL_OW 18
// InitVc ;
59938: CALL_OW 20
// uc_side = you ;
59942: LD_ADDR_OWVAR 20
59946: PUSH
59947: LD_EXP 2
59951: ST_TO_ADDR
// uc_nation = GetNation ( temp_list [ i ] [ 1 ] ) ;
59952: LD_ADDR_OWVAR 21
59956: PUSH
59957: LD_VAR 0 2
59961: PUSH
59962: LD_VAR 0 3
59966: ARRAY
59967: PUSH
59968: LD_INT 1
59970: ARRAY
59971: PPUSH
59972: CALL_OW 248
59976: ST_TO_ADDR
// uc_direction = spawn_directions [ Rand ( 1 , spawn_directions + 0 ) ] ;
59977: LD_ADDR_OWVAR 24
59981: PUSH
59982: LD_VAR 0 9
59986: PUSH
59987: LD_INT 1
59989: PPUSH
59990: LD_VAR 0 9
59994: PUSH
59995: LD_INT 0
59997: PLUS
59998: PPUSH
59999: CALL_OW 12
60003: ARRAY
60004: ST_TO_ADDR
// vc_chassis = GetChassis ( temp_list [ i ] [ 1 ] ) ;
60005: LD_ADDR_OWVAR 37
60009: PUSH
60010: LD_VAR 0 2
60014: PUSH
60015: LD_VAR 0 3
60019: ARRAY
60020: PUSH
60021: LD_INT 1
60023: ARRAY
60024: PPUSH
60025: CALL_OW 265
60029: ST_TO_ADDR
// vc_control = GetControl ( temp_list [ i ] [ 1 ] ) ;
60030: LD_ADDR_OWVAR 38
60034: PUSH
60035: LD_VAR 0 2
60039: PUSH
60040: LD_VAR 0 3
60044: ARRAY
60045: PUSH
60046: LD_INT 1
60048: ARRAY
60049: PPUSH
60050: CALL_OW 263
60054: ST_TO_ADDR
// vc_engine = GetEngine ( temp_list [ i ] [ 1 ] ) ;
60055: LD_ADDR_OWVAR 39
60059: PUSH
60060: LD_VAR 0 2
60064: PUSH
60065: LD_VAR 0 3
60069: ARRAY
60070: PUSH
60071: LD_INT 1
60073: ARRAY
60074: PPUSH
60075: CALL_OW 262
60079: ST_TO_ADDR
// vc_weapon = GetWeapon ( temp_list [ i ] [ 1 ] ) ;
60080: LD_ADDR_OWVAR 40
60084: PUSH
60085: LD_VAR 0 2
60089: PUSH
60090: LD_VAR 0 3
60094: ARRAY
60095: PUSH
60096: LD_INT 1
60098: ARRAY
60099: PPUSH
60100: CALL_OW 264
60104: ST_TO_ADDR
// temp_list_2 = [ GetLives ( temp_list [ i ] [ 1 ] ) , GetFuel ( temp_list [ i ] [ 1 ] ) , GetCargo ( temp_list [ i ] [ 1 ] , mat_artifact ) , GetCargo ( temp_list [ i ] [ 1 ] , mat_cans ) , GetCargo ( temp_list [ i ] [ 1 ] , mat_oil ) , GetCargo ( temp_list [ i ] [ 1 ] , mat_siberit ) ] ;
60105: LD_ADDR_VAR 0 5
60109: PUSH
60110: LD_VAR 0 2
60114: PUSH
60115: LD_VAR 0 3
60119: ARRAY
60120: PUSH
60121: LD_INT 1
60123: ARRAY
60124: PPUSH
60125: CALL_OW 256
60129: PUSH
60130: LD_VAR 0 2
60134: PUSH
60135: LD_VAR 0 3
60139: ARRAY
60140: PUSH
60141: LD_INT 1
60143: ARRAY
60144: PPUSH
60145: CALL_OW 261
60149: PUSH
60150: LD_VAR 0 2
60154: PUSH
60155: LD_VAR 0 3
60159: ARRAY
60160: PUSH
60161: LD_INT 1
60163: ARRAY
60164: PPUSH
60165: LD_INT 4
60167: PPUSH
60168: CALL_OW 289
60172: PUSH
60173: LD_VAR 0 2
60177: PUSH
60178: LD_VAR 0 3
60182: ARRAY
60183: PUSH
60184: LD_INT 1
60186: ARRAY
60187: PPUSH
60188: LD_INT 1
60190: PPUSH
60191: CALL_OW 289
60195: PUSH
60196: LD_VAR 0 2
60200: PUSH
60201: LD_VAR 0 3
60205: ARRAY
60206: PUSH
60207: LD_INT 1
60209: ARRAY
60210: PPUSH
60211: LD_INT 2
60213: PPUSH
60214: CALL_OW 289
60218: PUSH
60219: LD_VAR 0 2
60223: PUSH
60224: LD_VAR 0 3
60228: ARRAY
60229: PUSH
60230: LD_INT 1
60232: ARRAY
60233: PPUSH
60234: LD_INT 3
60236: PPUSH
60237: CALL_OW 289
60241: PUSH
60242: EMPTY
60243: LIST
60244: LIST
60245: LIST
60246: LIST
60247: LIST
60248: LIST
60249: ST_TO_ADDR
// DestroyUnit ( temp_list [ i ] [ 1 ] ) ;
60250: LD_VAR 0 2
60254: PUSH
60255: LD_VAR 0 3
60259: ARRAY
60260: PUSH
60261: LD_INT 1
60263: ARRAY
60264: PPUSH
60265: CALL_OW 65
// if temp_list_2 [ 3 ] > 0 then
60269: LD_VAR 0 5
60273: PUSH
60274: LD_INT 3
60276: ARRAY
60277: PUSH
60278: LD_INT 0
60280: GREATER
60281: IFFALSE 60331
// begin k = FindArtifact ( 4 ) ;
60283: LD_ADDR_VAR 0 4
60287: PUSH
60288: LD_INT 4
60290: PPUSH
60291: CALL_OW 469
60295: ST_TO_ADDR
// if k > 0 then
60296: LD_VAR 0 4
60300: PUSH
60301: LD_INT 0
60303: GREATER
60304: IFFALSE 60331
// ChangeResourceAmountXY ( k [ 1 ] , k [ 2 ] , 0 ) ;
60306: LD_VAR 0 4
60310: PUSH
60311: LD_INT 1
60313: ARRAY
60314: PPUSH
60315: LD_VAR 0 4
60319: PUSH
60320: LD_INT 2
60322: ARRAY
60323: PPUSH
60324: LD_INT 0
60326: PPUSH
60327: CALL_OW 285
// end ; k = CreateVehicle ;
60331: LD_ADDR_VAR 0 4
60335: PUSH
60336: CALL_OW 45
60340: ST_TO_ADDR
// SetLives ( k , temp_list_2 [ 1 ] ) ;
60341: LD_VAR 0 4
60345: PPUSH
60346: LD_VAR 0 5
60350: PUSH
60351: LD_INT 1
60353: ARRAY
60354: PPUSH
60355: CALL_OW 234
// if vc_engine in [ engine_solar , engine_combustion ] then
60359: LD_OWVAR 39
60363: PUSH
60364: LD_INT 2
60366: PUSH
60367: LD_INT 1
60369: PUSH
60370: EMPTY
60371: LIST
60372: LIST
60373: IN
60374: IFFALSE 60394
// SetFuel ( k , temp_list_2 [ 2 ] ) ;
60376: LD_VAR 0 4
60380: PPUSH
60381: LD_VAR 0 5
60385: PUSH
60386: LD_INT 2
60388: ARRAY
60389: PPUSH
60390: CALL_OW 240
// if vc_weapon in [ ar_cargo_bay , ru_cargo_bay , us_cargo_bay ] then
60394: LD_OWVAR 40
60398: PUSH
60399: LD_INT 32
60401: PUSH
60402: LD_INT 51
60404: PUSH
60405: LD_INT 12
60407: PUSH
60408: EMPTY
60409: LIST
60410: LIST
60411: LIST
60412: IN
60413: IFFALSE 60499
// begin SetCargo ( k , mat_artifact , temp_list_2 [ 3 ] ) ;
60415: LD_VAR 0 4
60419: PPUSH
60420: LD_INT 4
60422: PPUSH
60423: LD_VAR 0 5
60427: PUSH
60428: LD_INT 3
60430: ARRAY
60431: PPUSH
60432: CALL_OW 290
// AddCargo ( k , mat_cans , temp_list_2 [ 4 ] ) ;
60436: LD_VAR 0 4
60440: PPUSH
60441: LD_INT 1
60443: PPUSH
60444: LD_VAR 0 5
60448: PUSH
60449: LD_INT 4
60451: ARRAY
60452: PPUSH
60453: CALL_OW 291
// AddCargo ( k , mat_oil , temp_list_2 [ 5 ] ) ;
60457: LD_VAR 0 4
60461: PPUSH
60462: LD_INT 2
60464: PPUSH
60465: LD_VAR 0 5
60469: PUSH
60470: LD_INT 5
60472: ARRAY
60473: PPUSH
60474: CALL_OW 291
// AddCargo ( k , mat_siberit , temp_list_2 [ 6 ] ) ;
60478: LD_VAR 0 4
60482: PPUSH
60483: LD_INT 3
60485: PPUSH
60486: LD_VAR 0 5
60490: PUSH
60491: LD_INT 6
60493: ARRAY
60494: PPUSH
60495: CALL_OW 291
// end ; temp_list_2 = Replace ( temp_list [ i ] , 1 , k ) ;
60499: LD_ADDR_VAR 0 5
60503: PUSH
60504: LD_VAR 0 2
60508: PUSH
60509: LD_VAR 0 3
60513: ARRAY
60514: PPUSH
60515: LD_INT 1
60517: PPUSH
60518: LD_VAR 0 4
60522: PPUSH
60523: CALL_OW 1
60527: ST_TO_ADDR
// temp_list = Replace ( temp_list , i , temp_list_2 ) ;
60528: LD_ADDR_VAR 0 2
60532: PUSH
60533: LD_VAR 0 2
60537: PPUSH
60538: LD_VAR 0 3
60542: PPUSH
60543: LD_VAR 0 5
60547: PPUSH
60548: CALL_OW 1
60552: ST_TO_ADDR
// end ; end ;
60553: GO 59746
60555: POP
60556: POP
// units_on_the_move = Insert ( units_on_the_move , 1 , [ temp_list , target_area , tick + 0 0$30 ] ) ;
60557: LD_ADDR_VAR 0 10
60561: PUSH
60562: LD_VAR 0 10
60566: PPUSH
60567: LD_INT 1
60569: PPUSH
60570: LD_VAR 0 2
60574: PUSH
60575: LD_VAR 0 8
60579: PUSH
60580: LD_OWVAR 1
60584: PUSH
60585: LD_INT 1050
60587: PLUS
60588: PUSH
60589: EMPTY
60590: LIST
60591: LIST
60592: LIST
60593: PPUSH
60594: CALL_OW 2
60598: ST_TO_ADDR
// Replace ( num_units_in_area , c , 0 ) ;
60599: LD_VAR 0 13
60603: PPUSH
60604: LD_VAR 0 1
60608: PPUSH
60609: LD_INT 0
60611: PPUSH
60612: CALL_OW 1
// time_to_wait = Replace ( time_to_wait , c , 0 0$2.5 ) ;
60616: LD_ADDR_VAR 0 12
60620: PUSH
60621: LD_VAR 0 12
60625: PPUSH
60626: LD_VAR 0 1
60630: PPUSH
60631: LD_INT 88
60633: PPUSH
60634: CALL_OW 1
60638: ST_TO_ADDR
// end else
60639: GO 60664
// time_to_wait = Replace ( time_to_wait , c , 0 0$5 ) ;
60641: LD_ADDR_VAR 0 12
60645: PUSH
60646: LD_VAR 0 12
60650: PPUSH
60651: LD_VAR 0 1
60655: PPUSH
60656: LD_INT 175
60658: PPUSH
60659: CALL_OW 1
60663: ST_TO_ADDR
// end ; end ; end ;
60664: GO 58945
60666: POP
60667: POP
// until false ;
60668: LD_INT 0
60670: IFFALSE 58055
// end ;
60672: PPOPN 15
60674: END
// every 0 0$1 + 0 0$0.4 do var temp_list , i , counter ;
60675: GO 60677
60677: DISABLE
60678: LD_INT 0
60680: PPUSH
60681: PPUSH
60682: PPUSH
// begin counter = 0 ;
60683: LD_ADDR_VAR 0 3
60687: PUSH
60688: LD_INT 0
60690: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
60691: LD_INT 35
60693: PPUSH
60694: CALL_OW 67
// if may_attack_americans then
60698: LD_EXP 113
60702: IFFALSE 60706
// exit ;
60704: GO 60864
// if ContactTime ( [ you , americans ] ) <= 0 0$1 then
60706: LD_EXP 2
60710: PUSH
60711: LD_EXP 6
60715: PUSH
60716: EMPTY
60717: LIST
60718: LIST
60719: PPUSH
60720: CALL_OW 462
60724: PUSH
60725: LD_INT 35
60727: LESSEQUAL
60728: IFFALSE 60744
// counter = counter + 1 ;
60730: LD_ADDR_VAR 0 3
60734: PUSH
60735: LD_VAR 0 3
60739: PUSH
60740: LD_INT 1
60742: PLUS
60743: ST_TO_ADDR
// if counter >= 5 then
60744: LD_VAR 0 3
60748: PUSH
60749: LD_INT 5
60751: GREATEREQUAL
60752: IFFALSE 60860
// begin temp_list = FilterAllUnits ( [ f_side , you ] ) ;
60754: LD_ADDR_VAR 0 1
60758: PUSH
60759: LD_INT 22
60761: PUSH
60762: LD_EXP 2
60766: PUSH
60767: EMPTY
60768: LIST
60769: LIST
60770: PPUSH
60771: CALL_OW 69
60775: ST_TO_ADDR
// for i in ai_all_buildings [ 2 ] do
60776: LD_ADDR_VAR 0 2
60780: PUSH
60781: LD_EXP 62
60785: PUSH
60786: LD_INT 2
60788: ARRAY
60789: PUSH
60790: FOR_IN
60791: IFFALSE 60858
// if UnitShoot ( i ) in temp_list then
60793: LD_VAR 0 2
60797: PPUSH
60798: CALL_OW 504
60802: PUSH
60803: LD_VAR 0 1
60807: IN
60808: IFFALSE 60856
// begin DialogueOn ;
60810: CALL_OW 6
// ForceSay ( Makise , D14-Ch-1 ) ;
60814: LD_EXP 21
60818: PPUSH
60819: LD_STRING D14-Ch-1
60821: PPUSH
60822: CALL_OW 91
// DialogueOff ;
60826: CALL_OW 7
// ExclusiveOn ;
60830: CALL_OW 4
// wait ( 0 0$0.2 ) ;
60834: LD_INT 7
60836: PPUSH
60837: CALL_OW 67
// YouLost ( AmericansAttacked ) ;
60841: LD_STRING AmericansAttacked
60843: PPUSH
60844: CALL_OW 104
// ExclusiveOff ;
60848: CALL_OW 5
// exit ;
60852: POP
60853: POP
60854: GO 60864
// end ;
60856: GO 60790
60858: POP
60859: POP
// end ; until false ;
60860: LD_INT 0
60862: IFFALSE 60691
// end ;
60864: PPOPN 3
60866: END
// every 0 0$1 + 0 0$0.5 do var temp_list , temp_list_2 , un , i , temp_list_3 , a ; var max_snipers ;
60867: GO 60869
60869: DISABLE
60870: LD_INT 0
60872: PPUSH
60873: PPUSH
60874: PPUSH
60875: PPUSH
60876: PPUSH
60877: PPUSH
60878: PPUSH
// begin max_snipers = [ 3 , 3 , 3 ] [ difficulty ] ;
60879: LD_ADDR_VAR 0 7
60883: PUSH
60884: LD_INT 3
60886: PUSH
60887: LD_INT 3
60889: PUSH
60890: LD_INT 3
60892: PUSH
60893: EMPTY
60894: LIST
60895: LIST
60896: LIST
60897: PUSH
60898: LD_OWVAR 67
60902: ARRAY
60903: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
60904: LD_INT 35
60906: PPUSH
60907: CALL_OW 67
// if IsDead ( am_bar ) then
60911: LD_INT 27
60913: PPUSH
60914: CALL_OW 301
60918: IFFALSE 60922
// exit ;
60920: GO 61687
// if GetSide ( am_bar ) <> you then
60922: LD_INT 27
60924: PPUSH
60925: CALL_OW 255
60929: PUSH
60930: LD_EXP 2
60934: NONEQUAL
60935: IFFALSE 60939
// continue ;
60937: GO 60904
// temp_list = UnitsInside ( am_bar ) ;
60939: LD_ADDR_VAR 0 1
60943: PUSH
60944: LD_INT 27
60946: PPUSH
60947: CALL_OW 313
60951: ST_TO_ADDR
// if temp_list > 0 then
60952: LD_VAR 0 1
60956: PUSH
60957: LD_INT 0
60959: GREATER
60960: IFFALSE 61238
// begin temp_list_2 = temp_list isect ( [ Oswald , Ralph , Kowalski , Swansson ] diff 0 ) ;
60962: LD_ADDR_VAR 0 2
60966: PUSH
60967: LD_VAR 0 1
60971: PUSH
60972: LD_EXP 12
60976: PUSH
60977: LD_EXP 13
60981: PUSH
60982: LD_EXP 14
60986: PUSH
60987: LD_EXP 19
60991: PUSH
60992: EMPTY
60993: LIST
60994: LIST
60995: LIST
60996: LIST
60997: PUSH
60998: LD_INT 0
61000: DIFF
61001: ISECT
61002: ST_TO_ADDR
// if temp_list_2 > 0 then
61003: LD_VAR 0 2
61007: PUSH
61008: LD_INT 0
61010: GREATER
61011: IFFALSE 61043
// un = temp_list_2 [ Rand ( 1 , temp_list_2 + 0 ) ] else
61013: LD_ADDR_VAR 0 3
61017: PUSH
61018: LD_VAR 0 2
61022: PUSH
61023: LD_INT 1
61025: PPUSH
61026: LD_VAR 0 2
61030: PUSH
61031: LD_INT 0
61033: PLUS
61034: PPUSH
61035: CALL_OW 12
61039: ARRAY
61040: ST_TO_ADDR
61041: GO 61053
// un = Heike ;
61043: LD_ADDR_VAR 0 3
61047: PUSH
61048: LD_EXP 10
61052: ST_TO_ADDR
// DialogueOn ;
61053: CALL_OW 6
// case un of Oswald :
61057: LD_VAR 0 3
61061: PUSH
61062: LD_EXP 12
61066: DOUBLE
61067: EQUAL
61068: IFTRUE 61072
61070: GO 61087
61072: POP
// Say ( un , D4-Os-1 ) ; Ralph :
61073: LD_VAR 0 3
61077: PPUSH
61078: LD_STRING D4-Os-1
61080: PPUSH
61081: CALL_OW 88
61085: GO 61188
61087: LD_EXP 13
61091: DOUBLE
61092: EQUAL
61093: IFTRUE 61097
61095: GO 61112
61097: POP
// Say ( un , D4-Ra-1 ) ; Kowalski :
61098: LD_VAR 0 3
61102: PPUSH
61103: LD_STRING D4-Ra-1
61105: PPUSH
61106: CALL_OW 88
61110: GO 61188
61112: LD_EXP 14
61116: DOUBLE
61117: EQUAL
61118: IFTRUE 61122
61120: GO 61137
61122: POP
// Say ( un , D4-Ko-1 ) ; Swansson :
61123: LD_VAR 0 3
61127: PPUSH
61128: LD_STRING D4-Ko-1
61130: PPUSH
61131: CALL_OW 88
61135: GO 61188
61137: LD_EXP 19
61141: DOUBLE
61142: EQUAL
61143: IFTRUE 61147
61145: GO 61162
61147: POP
// Say ( un , D4-Sw-1 ) ; Heike :
61148: LD_VAR 0 3
61152: PPUSH
61153: LD_STRING D4-Sw-1
61155: PPUSH
61156: CALL_OW 88
61160: GO 61188
61162: LD_EXP 10
61166: DOUBLE
61167: EQUAL
61168: IFTRUE 61172
61170: GO 61187
61172: POP
// Say ( un , D4-H-1a ) ; end ;
61173: LD_VAR 0 3
61177: PPUSH
61178: LD_STRING D4-H-1a
61180: PPUSH
61181: CALL_OW 88
61185: GO 61188
61187: POP
// if un <> Heike then
61188: LD_VAR 0 3
61192: PUSH
61193: LD_EXP 10
61197: NONEQUAL
61198: IFFALSE 61212
// ForceSay ( Heike , D4-H-1b ) ;
61200: LD_EXP 10
61204: PPUSH
61205: LD_STRING D4-H-1b
61207: PPUSH
61208: CALL_OW 91
// DialogueOff ;
61212: CALL_OW 7
// wait ( 0 0$0.2 ) ;
61216: LD_INT 7
61218: PPUSH
61219: CALL_OW 67
// Query ( QSniper & max_snipers ) ;
61223: LD_STRING QSniper
61225: PUSH
61226: LD_VAR 0 7
61230: STR
61231: PPUSH
61232: CALL_OW 97
// break ;
61236: GO 61242
// end ; until false ;
61238: LD_INT 0
61240: IFFALSE 60904
// SetTech ( tech_LasSight , you , state_researched ) ;
61242: LD_INT 12
61244: PPUSH
61245: LD_EXP 2
61249: PPUSH
61250: LD_INT 2
61252: PPUSH
61253: CALL_OW 322
// repeat wait ( 0 0$0.2 ) ;
61257: LD_INT 7
61259: PPUSH
61260: CALL_OW 67
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_class , class_sniper ] ] ) ;
61264: LD_ADDR_VAR 0 1
61268: PUSH
61269: LD_INT 22
61271: PUSH
61272: LD_EXP 2
61276: PUSH
61277: EMPTY
61278: LIST
61279: LIST
61280: PUSH
61281: LD_INT 25
61283: PUSH
61284: LD_INT 5
61286: PUSH
61287: EMPTY
61288: LIST
61289: LIST
61290: PUSH
61291: EMPTY
61292: LIST
61293: LIST
61294: PPUSH
61295: CALL_OW 69
61299: ST_TO_ADDR
// if temp_list > max_snipers then
61300: LD_VAR 0 1
61304: PUSH
61305: LD_VAR 0 7
61309: GREATER
61310: IFFALSE 61577
// begin temp_list_2 = [ ] ;
61312: LD_ADDR_VAR 0 2
61316: PUSH
61317: EMPTY
61318: ST_TO_ADDR
// temp_list_3 = FilterAllUnits ( [ [ f_side , you ] , [ f_btype , b_barracks ] , [ f_nation , nation_american ] ] ) ;
61319: LD_ADDR_VAR 0 5
61323: PUSH
61324: LD_INT 22
61326: PUSH
61327: LD_EXP 2
61331: PUSH
61332: EMPTY
61333: LIST
61334: LIST
61335: PUSH
61336: LD_INT 30
61338: PUSH
61339: LD_INT 5
61341: PUSH
61342: EMPTY
61343: LIST
61344: LIST
61345: PUSH
61346: LD_INT 23
61348: PUSH
61349: LD_INT 1
61351: PUSH
61352: EMPTY
61353: LIST
61354: LIST
61355: PUSH
61356: EMPTY
61357: LIST
61358: LIST
61359: LIST
61360: PPUSH
61361: CALL_OW 69
61365: ST_TO_ADDR
// for un in temp_list do
61366: LD_ADDR_VAR 0 3
61370: PUSH
61371: LD_VAR 0 1
61375: PUSH
61376: FOR_IN
61377: IFFALSE 61505
// begin if IsInUnit ( un ) in temp_list_3 then
61379: LD_VAR 0 3
61383: PPUSH
61384: CALL_OW 310
61388: PUSH
61389: LD_VAR 0 5
61393: IN
61394: IFFALSE 61412
// temp_list_2 = temp_list_2 ^ 2 else
61396: LD_ADDR_VAR 0 2
61400: PUSH
61401: LD_VAR 0 2
61405: PUSH
61406: LD_INT 2
61408: ADD
61409: ST_TO_ADDR
61410: GO 61503
// begin a = false ;
61412: LD_ADDR_VAR 0 6
61416: PUSH
61417: LD_INT 0
61419: ST_TO_ADDR
// for i in temp_list_3 do
61420: LD_ADDR_VAR 0 4
61424: PUSH
61425: LD_VAR 0 5
61429: PUSH
61430: FOR_IN
61431: IFFALSE 61465
// begin if GetDistUnits ( un , i ) <= 6 then
61433: LD_VAR 0 3
61437: PPUSH
61438: LD_VAR 0 4
61442: PPUSH
61443: CALL_OW 296
61447: PUSH
61448: LD_INT 6
61450: LESSEQUAL
61451: IFFALSE 61463
// begin a = true ;
61453: LD_ADDR_VAR 0 6
61457: PUSH
61458: LD_INT 1
61460: ST_TO_ADDR
// break ;
61461: GO 61465
// end ; end ;
61463: GO 61430
61465: POP
61466: POP
// if a then
61467: LD_VAR 0 6
61471: IFFALSE 61489
// temp_list_2 = temp_list_2 ^ 1 else
61473: LD_ADDR_VAR 0 2
61477: PUSH
61478: LD_VAR 0 2
61482: PUSH
61483: LD_INT 1
61485: ADD
61486: ST_TO_ADDR
61487: GO 61503
// temp_list_2 = temp_list_2 ^ 0 ;
61489: LD_ADDR_VAR 0 2
61493: PUSH
61494: LD_VAR 0 2
61498: PUSH
61499: LD_INT 0
61501: ADD
61502: ST_TO_ADDR
// end ; end ;
61503: GO 61376
61505: POP
61506: POP
// temp_list = SortListByListAsc ( temp_list , temp_list_2 ) ;
61507: LD_ADDR_VAR 0 1
61511: PUSH
61512: LD_VAR 0 1
61516: PPUSH
61517: LD_VAR 0 2
61521: PPUSH
61522: CALL_OW 76
61526: ST_TO_ADDR
// for i = temp_list + 0 downto max_snipers + 1 do
61527: LD_ADDR_VAR 0 4
61531: PUSH
61532: DOUBLE
61533: LD_VAR 0 1
61537: PUSH
61538: LD_INT 0
61540: PLUS
61541: INC
61542: ST_TO_ADDR
61543: LD_VAR 0 7
61547: PUSH
61548: LD_INT 1
61550: PLUS
61551: PUSH
61552: FOR_DOWNTO
61553: IFFALSE 61575
// SetClass ( temp_list [ i ] , class_soldier ) ;
61555: LD_VAR 0 1
61559: PUSH
61560: LD_VAR 0 4
61564: ARRAY
61565: PPUSH
61566: LD_INT 1
61568: PPUSH
61569: CALL_OW 336
61573: GO 61552
61575: POP
61576: POP
// end ; if FilterAllUnits ( [ [ f_side , you ] , [ f_class , class_sniper ] ] ) >= max_snipers then
61577: LD_INT 22
61579: PUSH
61580: LD_EXP 2
61584: PUSH
61585: EMPTY
61586: LIST
61587: LIST
61588: PUSH
61589: LD_INT 25
61591: PUSH
61592: LD_INT 5
61594: PUSH
61595: EMPTY
61596: LIST
61597: LIST
61598: PUSH
61599: EMPTY
61600: LIST
61601: LIST
61602: PPUSH
61603: CALL_OW 69
61607: PUSH
61608: LD_VAR 0 7
61612: GREATEREQUAL
61613: IFFALSE 61650
// begin if GetTech ( tech_lassight , you ) = state_researched then
61615: LD_INT 12
61617: PPUSH
61618: LD_EXP 2
61622: PPUSH
61623: CALL_OW 321
61627: PUSH
61628: LD_INT 2
61630: EQUAL
61631: IFFALSE 61648
// SetTech ( tech_lassight , you , state_disabled ) ;
61633: LD_INT 12
61635: PPUSH
61636: LD_EXP 2
61640: PPUSH
61641: LD_INT 0
61643: PPUSH
61644: CALL_OW 322
// end else
61648: GO 61683
// begin if GetTech ( tech_lassight , you ) = state_disabled then
61650: LD_INT 12
61652: PPUSH
61653: LD_EXP 2
61657: PPUSH
61658: CALL_OW 321
61662: PUSH
61663: LD_INT 0
61665: EQUAL
61666: IFFALSE 61683
// SetTech ( tech_lassight , you , state_researched ) ;
61668: LD_INT 12
61670: PPUSH
61671: LD_EXP 2
61675: PPUSH
61676: LD_INT 2
61678: PPUSH
61679: CALL_OW 322
// end ; until false ;
61683: LD_INT 0
61685: IFFALSE 61257
// end ;
61687: PPOPN 7
61689: END
// every 0 0$1 + 0 0$0.6 do var un , first_building ;
61690: GO 61692
61692: DISABLE
61693: LD_INT 0
61695: PPUSH
61696: PPUSH
// begin first_building = 0 ;
61697: LD_ADDR_VAR 0 2
61701: PUSH
61702: LD_INT 0
61704: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
61705: LD_INT 35
61707: PPUSH
61708: CALL_OW 67
// if GetLives ( Ralph ) = 0 or GetLives ( Sonya ) = 0 then
61712: LD_EXP 13
61716: PPUSH
61717: CALL_OW 256
61721: PUSH
61722: LD_INT 0
61724: EQUAL
61725: PUSH
61726: LD_EXP 11
61730: PPUSH
61731: CALL_OW 256
61735: PUSH
61736: LD_INT 0
61738: EQUAL
61739: OR
61740: IFFALSE 61744
// exit ;
61742: GO 61925
// if ContactTime ( you ) <= 0 0$5 then
61744: LD_EXP 2
61748: PPUSH
61749: CALL_OW 462
61753: PUSH
61754: LD_INT 175
61756: LESSEQUAL
61757: IFFALSE 61761
// continue ;
61759: GO 61705
// if GetClass ( Ralph ) <> class_sniper then
61761: LD_EXP 13
61765: PPUSH
61766: CALL_OW 257
61770: PUSH
61771: LD_INT 5
61773: NONEQUAL
61774: IFFALSE 61778
// continue ;
61776: GO 61705
// un = IsInUnit ( Ralph ) ;
61778: LD_ADDR_VAR 0 1
61782: PUSH
61783: LD_EXP 13
61787: PPUSH
61788: CALL_OW 310
61792: ST_TO_ADDR
// if un = 0 or un = first_building then
61793: LD_VAR 0 1
61797: PUSH
61798: LD_INT 0
61800: EQUAL
61801: PUSH
61802: LD_VAR 0 1
61806: PUSH
61807: LD_VAR 0 2
61811: EQUAL
61812: OR
61813: IFFALSE 61817
// continue ;
61815: GO 61705
// if GetType ( un ) <> unit_building then
61817: LD_VAR 0 1
61821: PPUSH
61822: CALL_OW 247
61826: PUSH
61827: LD_INT 3
61829: NONEQUAL
61830: IFFALSE 61834
// continue ;
61832: GO 61705
// if first_building = 0 then
61834: LD_VAR 0 2
61838: PUSH
61839: LD_INT 0
61841: EQUAL
61842: IFFALSE 61856
// begin first_building = un ;
61844: LD_ADDR_VAR 0 2
61848: PUSH
61849: LD_VAR 0 1
61853: ST_TO_ADDR
// continue ;
61854: GO 61705
// end ; DialogueOn ;
61856: CALL_OW 6
// ForceSay ( Ralph , D8-Ra-1 ) ;
61860: LD_EXP 13
61864: PPUSH
61865: LD_STRING D8-Ra-1
61867: PPUSH
61868: CALL_OW 91
// dwait ( 0 0$1.5 ) ;
61872: LD_INT 52
61874: PPUSH
61875: CALL_OW 68
// ForceSay ( Ralph , D8-Ra-2 ) ;
61879: LD_EXP 13
61883: PPUSH
61884: LD_STRING D8-Ra-2
61886: PPUSH
61887: CALL_OW 91
// ForceSay ( Sonya , D8-So-1 ) ;
61891: LD_EXP 11
61895: PPUSH
61896: LD_STRING D8-So-1
61898: PPUSH
61899: CALL_OW 91
// ForceSay ( Ralph , D8-Ra-3 ) ;
61903: LD_EXP 13
61907: PPUSH
61908: LD_STRING D8-Ra-3
61910: PPUSH
61911: CALL_OW 91
// DialogueOff ;
61915: CALL_OW 7
// exit ;
61919: GO 61925
// until false ;
61921: LD_INT 0
61923: IFFALSE 61705
// end ;
61925: PPOPN 2
61927: END
// every 0 0$1 + 0 0$0.7 trigger legion_base_captured do var i , ext_built ;
61928: LD_EXP 110
61932: IFFALSE 62152
61934: GO 61936
61936: DISABLE
61937: LD_INT 0
61939: PPUSH
61940: PPUSH
// begin repeat wait ( 0 0$1 ) ;
61941: LD_INT 35
61943: PPUSH
61944: CALL_OW 67
// ext_built = false ;
61948: LD_ADDR_VAR 0 2
61952: PUSH
61953: LD_INT 0
61955: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_lab_half ] , [ f_btype , b_lab_full ] ] , [ f_not , [ f_constructed ] ] ] ) do
61956: LD_ADDR_VAR 0 1
61960: PUSH
61961: LD_INT 22
61963: PUSH
61964: LD_EXP 2
61968: PUSH
61969: EMPTY
61970: LIST
61971: LIST
61972: PUSH
61973: LD_INT 2
61975: PUSH
61976: LD_INT 30
61978: PUSH
61979: LD_INT 7
61981: PUSH
61982: EMPTY
61983: LIST
61984: LIST
61985: PUSH
61986: LD_INT 30
61988: PUSH
61989: LD_INT 8
61991: PUSH
61992: EMPTY
61993: LIST
61994: LIST
61995: PUSH
61996: EMPTY
61997: LIST
61998: LIST
61999: LIST
62000: PUSH
62001: LD_INT 3
62003: PUSH
62004: LD_INT 57
62006: PUSH
62007: EMPTY
62008: LIST
62009: PUSH
62010: EMPTY
62011: LIST
62012: LIST
62013: PUSH
62014: EMPTY
62015: LIST
62016: LIST
62017: LIST
62018: PPUSH
62019: CALL_OW 69
62023: PUSH
62024: FOR_IN
62025: IFFALSE 62074
// if b_lab_siberium in [ GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) ] then
62027: LD_INT 11
62029: PUSH
62030: LD_VAR 0 1
62034: PPUSH
62035: LD_INT 1
62037: PPUSH
62038: CALL_OW 268
62042: PUSH
62043: LD_VAR 0 1
62047: PPUSH
62048: LD_INT 2
62050: PPUSH
62051: CALL_OW 268
62055: PUSH
62056: EMPTY
62057: LIST
62058: LIST
62059: IN
62060: IFFALSE 62072
// begin ext_built = true ;
62062: LD_ADDR_VAR 0 2
62066: PUSH
62067: LD_INT 1
62069: ST_TO_ADDR
// break ;
62070: GO 62074
// end ;
62072: GO 62024
62074: POP
62075: POP
// until ext_built ;
62076: LD_VAR 0 2
62080: IFFALSE 61941
// DialogueOn ;
62082: CALL_OW 6
// ForceSay ( Makise , D5-Ch-1 ) ;
62086: LD_EXP 21
62090: PPUSH
62091: LD_STRING D5-Ch-1
62093: PPUSH
62094: CALL_OW 91
// ForceSay ( Heike , D5-H-1 ) ;
62098: LD_EXP 10
62102: PPUSH
62103: LD_STRING D5-H-1
62105: PPUSH
62106: CALL_OW 91
// ForceSay ( Makise , D5-Ch-2 ) ;
62110: LD_EXP 21
62114: PPUSH
62115: LD_STRING D5-Ch-2
62117: PPUSH
62118: CALL_OW 91
// ForceSay ( Heike , D5-H-2 ) ;
62122: LD_EXP 10
62126: PPUSH
62127: LD_STRING D5-H-2
62129: PPUSH
62130: CALL_OW 91
// DialogueOff ;
62134: CALL_OW 7
// wait ( 0 0$0.2 ) ;
62138: LD_INT 7
62140: PPUSH
62141: CALL_OW 67
// Query ( QArtifactResearch ) ;
62145: LD_STRING QArtifactResearch
62147: PPUSH
62148: CALL_OW 97
// end ;
62152: PPOPN 2
62154: END
// export function OnArtifactInvestigated ; begin
62155: LD_INT 0
62157: PPUSH
// DialogueOn ;
62158: CALL_OW 6
// ForceSay ( Makise , D15-Ch-1 ) ;
62162: LD_EXP 21
62166: PPUSH
62167: LD_STRING D15-Ch-1
62169: PPUSH
62170: CALL_OW 91
// if GetLives ( Oswald ) > 0 then
62174: LD_EXP 12
62178: PPUSH
62179: CALL_OW 256
62183: PUSH
62184: LD_INT 0
62186: GREATER
62187: IFFALSE 62227
// begin ForceSay ( Heike , D15-H-1b ) ;
62189: LD_EXP 10
62193: PPUSH
62194: LD_STRING D15-H-1b
62196: PPUSH
62197: CALL_OW 91
// ForceSay ( Oswald , D15-Os-1 ) ;
62201: LD_EXP 12
62205: PPUSH
62206: LD_STRING D15-Os-1
62208: PPUSH
62209: CALL_OW 91
// ForceSay ( Heike , D15-H-2b ) ;
62213: LD_EXP 10
62217: PPUSH
62218: LD_STRING D15-H-2b
62220: PPUSH
62221: CALL_OW 91
// end else
62225: GO 62239
// ForceSay ( Heike , D15-H-1a ) ;
62227: LD_EXP 10
62231: PPUSH
62232: LD_STRING D15-H-1a
62234: PPUSH
62235: CALL_OW 91
// DialogueOff ;
62239: CALL_OW 7
// SetTech ( tech_sibcontam , you , state_enabled ) ;
62243: LD_INT 26
62245: PPUSH
62246: LD_EXP 2
62250: PPUSH
62251: LD_INT 1
62253: PPUSH
62254: CALL_OW 322
// end ;
62258: LD_VAR 0 1
62262: RET
// export function OnResearchComplete_SibCon ( tech , lab ) ; begin
62263: LD_INT 0
62265: PPUSH
// if GetSide ( lab ) = you and tech = tech_sibcontam then
62266: LD_VAR 0 2
62270: PPUSH
62271: CALL_OW 255
62275: PUSH
62276: LD_EXP 2
62280: EQUAL
62281: PUSH
62282: LD_VAR 0 1
62286: PUSH
62287: LD_INT 26
62289: EQUAL
62290: AND
62291: IFFALSE 62498
// begin DialogueOn ;
62293: CALL_OW 6
// ForceSay ( Makise , D24-Ch-1 ) ;
62297: LD_EXP 21
62301: PPUSH
62302: LD_STRING D24-Ch-1
62304: PPUSH
62305: CALL_OW 91
// ForceSay ( Heike , D24-H-1 ) ;
62309: LD_EXP 10
62313: PPUSH
62314: LD_STRING D24-H-1
62316: PPUSH
62317: CALL_OW 91
// ForceSay ( Makise , D24-Ch-2 ) ;
62321: LD_EXP 21
62325: PPUSH
62326: LD_STRING D24-Ch-2
62328: PPUSH
62329: CALL_OW 91
// ForceSay ( Heike , D24-H-2 ) ;
62333: LD_EXP 10
62337: PPUSH
62338: LD_STRING D24-H-2
62340: PPUSH
62341: CALL_OW 91
// ForceSay ( Makise , D24-Ch-3 ) ;
62345: LD_EXP 21
62349: PPUSH
62350: LD_STRING D24-Ch-3
62352: PPUSH
62353: CALL_OW 91
// ForceSay ( Heike , D24-H-3 ) ;
62357: LD_EXP 10
62361: PPUSH
62362: LD_STRING D24-H-3
62364: PPUSH
62365: CALL_OW 91
// if GetLives ( Khattam ) > 0 then
62369: LD_EXP 20
62373: PPUSH
62374: CALL_OW 256
62378: PUSH
62379: LD_INT 0
62381: GREATER
62382: IFFALSE 62420
// begin ForceSay ( Khattam , D24-Kh-1 ) ;
62384: LD_EXP 20
62388: PPUSH
62389: LD_STRING D24-Kh-1
62391: PPUSH
62392: CALL_OW 91
// ForceSay ( Heike , D24-H-4 ) ;
62396: LD_EXP 10
62400: PPUSH
62401: LD_STRING D24-H-4
62403: PPUSH
62404: CALL_OW 91
// ForceSay ( Khattam , D24-Kh-2 ) ;
62408: LD_EXP 20
62412: PPUSH
62413: LD_STRING D24-Kh-2
62415: PPUSH
62416: CALL_OW 91
// end ; ForceSay ( Heike , D24-H-5 ) ;
62420: LD_EXP 10
62424: PPUSH
62425: LD_STRING D24-H-5
62427: PPUSH
62428: CALL_OW 91
// ForceSay ( Makise , D24-Ch-4 ) ;
62432: LD_EXP 21
62436: PPUSH
62437: LD_STRING D24-Ch-4
62439: PPUSH
62440: CALL_OW 91
// ForceSay ( Heike , D24-H-6 ) ;
62444: LD_EXP 10
62448: PPUSH
62449: LD_STRING D24-H-6
62451: PPUSH
62452: CALL_OW 91
// ForceSay ( Makise , D24-Ch-5 ) ;
62456: LD_EXP 21
62460: PPUSH
62461: LD_STRING D24-Ch-5
62463: PPUSH
62464: CALL_OW 91
// ForceSay ( Heike , D24-H-7 ) ;
62468: LD_EXP 10
62472: PPUSH
62473: LD_STRING D24-H-7
62475: PPUSH
62476: CALL_OW 91
// DialogueOff ;
62480: CALL_OW 7
// dwait ( 0 0$0.2 ) ;
62484: LD_INT 7
62486: PPUSH
62487: CALL_OW 68
// ChangeMissionObjectives ( MContam ) ;
62491: LD_STRING MContam
62493: PPUSH
62494: CALL_OW 337
// end ; end ;
62498: LD_VAR 0 3
62502: RET
// export function OnCommand_Contaminate ( com ) ; var i , found , task ; begin
62503: LD_INT 0
62505: PPUSH
62506: PPUSH
62507: PPUSH
62508: PPUSH
// if com = 71 then
62509: LD_VAR 0 1
62513: PUSH
62514: LD_INT 71
62516: EQUAL
62517: IFFALSE 62683
// begin for i in [ Heike , Makise ] do
62519: LD_ADDR_VAR 0 3
62523: PUSH
62524: LD_EXP 10
62528: PUSH
62529: LD_EXP 21
62533: PUSH
62534: EMPTY
62535: LIST
62536: LIST
62537: PUSH
62538: FOR_IN
62539: IFFALSE 62681
// if IsSelected ( i ) then
62541: LD_VAR 0 3
62545: PPUSH
62546: CALL_OW 306
62550: IFFALSE 62679
// begin found = false ;
62552: LD_ADDR_VAR 0 4
62556: PUSH
62557: LD_INT 0
62559: ST_TO_ADDR
// for task in GetTaskList ( i ) do
62560: LD_ADDR_VAR 0 5
62564: PUSH
62565: LD_VAR 0 3
62569: PPUSH
62570: CALL_OW 437
62574: PUSH
62575: FOR_IN
62576: IFFALSE 62604
// if task [ 1 ] = G then
62578: LD_VAR 0 5
62582: PUSH
62583: LD_INT 1
62585: ARRAY
62586: PUSH
62587: LD_STRING G
62589: EQUAL
62590: IFFALSE 62602
// begin found = true ;
62592: LD_ADDR_VAR 0 4
62596: PUSH
62597: LD_INT 1
62599: ST_TO_ADDR
// break ;
62600: GO 62604
// end ;
62602: GO 62575
62604: POP
62605: POP
// if found then
62606: LD_VAR 0 4
62610: IFFALSE 62679
// begin ComStop ( i ) ;
62612: LD_VAR 0 3
62616: PPUSH
62617: CALL_OW 141
// async ;
62621: ASYNC
// case i of Heike :
62622: LD_VAR 0 3
62626: PUSH
62627: LD_EXP 10
62631: DOUBLE
62632: EQUAL
62633: IFTRUE 62637
62635: GO 62652
62637: POP
// ForceSay ( i , D18-H-1 ) ; Makise :
62638: LD_VAR 0 3
62642: PPUSH
62643: LD_STRING D18-H-1
62645: PPUSH
62646: CALL_OW 91
62650: GO 62678
62652: LD_EXP 21
62656: DOUBLE
62657: EQUAL
62658: IFTRUE 62662
62660: GO 62677
62662: POP
// ForceSay ( i , D18-Ch-1 ) ; end ;
62663: LD_VAR 0 3
62667: PPUSH
62668: LD_STRING D18-Ch-1
62670: PPUSH
62671: CALL_OW 91
62675: GO 62678
62677: POP
// sync ;
62678: SYNC
// end ; end ;
62679: GO 62538
62681: POP
62682: POP
// end ; end ;
62683: LD_VAR 0 2
62687: RET
// on SibDepositContaminated ( sci , x_of_deposit , y_of_deposit ) do begin contaminating_scientist = sci ;
62688: LD_ADDR_EXP 120
62692: PUSH
62693: LD_VAR 0 1
62697: ST_TO_ADDR
// end ;
62698: PPOPN 3
62700: END
// every 0 0$1 + 0 0$0.3 trigger contaminating_scientist > 0 do var b1 , b2 ;
62701: LD_EXP 120
62705: PUSH
62706: LD_INT 0
62708: GREATER
62709: IFFALSE 63719
62711: GO 62713
62713: DISABLE
62714: LD_INT 0
62716: PPUSH
62717: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
62718: LD_INT 18
62720: PPUSH
62721: CALL_OW 67
// if IsDead ( contaminating_scientist ) then
62725: LD_EXP 120
62729: PPUSH
62730: CALL_OW 301
62734: IFFALSE 62738
// exit ;
62736: GO 63719
// b1 = IsInUnit ( contaminating_scientist ) ;
62738: LD_ADDR_VAR 0 1
62742: PUSH
62743: LD_EXP 120
62747: PPUSH
62748: CALL_OW 310
62752: ST_TO_ADDR
// b2 = IsInUnit ( Makise ) ;
62753: LD_ADDR_VAR 0 2
62757: PUSH
62758: LD_EXP 21
62762: PPUSH
62763: CALL_OW 310
62767: ST_TO_ADDR
// if b1 = 0 or b2 = 0 then
62768: LD_VAR 0 1
62772: PUSH
62773: LD_INT 0
62775: EQUAL
62776: PUSH
62777: LD_VAR 0 2
62781: PUSH
62782: LD_INT 0
62784: EQUAL
62785: OR
62786: IFFALSE 62790
// continue ;
62788: GO 62718
// if GetType ( b1 ) <> unit_building or GetType ( b2 ) <> unit_building then
62790: LD_VAR 0 1
62794: PPUSH
62795: CALL_OW 247
62799: PUSH
62800: LD_INT 3
62802: NONEQUAL
62803: PUSH
62804: LD_VAR 0 2
62808: PPUSH
62809: CALL_OW 247
62813: PUSH
62814: LD_INT 3
62816: NONEQUAL
62817: OR
62818: IFFALSE 62822
// continue ;
62820: GO 62718
// if not GetBType ( b1 ) in [ b_lab , b_lab_half , b_lab_full ] or not GetBType ( b2 ) in [ b_lab , b_lab_half , b_lab_full ] then
62822: LD_VAR 0 1
62826: PPUSH
62827: CALL_OW 266
62831: PUSH
62832: LD_INT 6
62834: PUSH
62835: LD_INT 7
62837: PUSH
62838: LD_INT 8
62840: PUSH
62841: EMPTY
62842: LIST
62843: LIST
62844: LIST
62845: IN
62846: NOT
62847: PUSH
62848: LD_VAR 0 2
62852: PPUSH
62853: CALL_OW 266
62857: PUSH
62858: LD_INT 6
62860: PUSH
62861: LD_INT 7
62863: PUSH
62864: LD_INT 8
62866: PUSH
62867: EMPTY
62868: LIST
62869: LIST
62870: LIST
62871: IN
62872: NOT
62873: OR
62874: IFFALSE 62878
// continue ;
62876: GO 62718
// if b1 <> b2 then
62878: LD_VAR 0 1
62882: PUSH
62883: LD_VAR 0 2
62887: NONEQUAL
62888: IFFALSE 62892
// continue ;
62890: GO 62718
// CenterOnUnits ( b1 ) ;
62892: LD_VAR 0 1
62896: PPUSH
62897: CALL_OW 85
// DialogueOn ;
62901: CALL_OW 6
// ForceSay ( Makise , D16-Ch-1 ) ;
62905: LD_EXP 21
62909: PPUSH
62910: LD_STRING D16-Ch-1
62912: PPUSH
62913: CALL_OW 91
// case contaminating_scientist of Sonya :
62917: LD_EXP 120
62921: PUSH
62922: LD_EXP 11
62926: DOUBLE
62927: EQUAL
62928: IFTRUE 62932
62930: GO 62947
62932: POP
// ForceSay ( contaminating_scientist , D16-So-1 ) ; Oswald :
62933: LD_EXP 120
62937: PPUSH
62938: LD_STRING D16-So-1
62940: PPUSH
62941: CALL_OW 91
62945: GO 63239
62947: LD_EXP 12
62951: DOUBLE
62952: EQUAL
62953: IFTRUE 62957
62955: GO 62972
62957: POP
// ForceSay ( contaminating_scientist , D16-Os-1 ) ; Ralph :
62958: LD_EXP 120
62962: PPUSH
62963: LD_STRING D16-Os-1
62965: PPUSH
62966: CALL_OW 91
62970: GO 63239
62972: LD_EXP 13
62976: DOUBLE
62977: EQUAL
62978: IFTRUE 62982
62980: GO 62997
62982: POP
// ForceSay ( contaminating_scientist , D16-Ra-1 ) ; Kowalski :
62983: LD_EXP 120
62987: PPUSH
62988: LD_STRING D16-Ra-1
62990: PPUSH
62991: CALL_OW 91
62995: GO 63239
62997: LD_EXP 14
63001: DOUBLE
63002: EQUAL
63003: IFTRUE 63007
63005: GO 63022
63007: POP
// ForceSay ( contaminating_scientist , D16-Ko-1 ) ; Evelyn :
63008: LD_EXP 120
63012: PPUSH
63013: LD_STRING D16-Ko-1
63015: PPUSH
63016: CALL_OW 91
63020: GO 63239
63022: LD_EXP 15
63026: DOUBLE
63027: EQUAL
63028: IFTRUE 63032
63030: GO 63047
63032: POP
// ForceSay ( contaminating_scientist , D16-Ev-1 ) ; Olaf :
63033: LD_EXP 120
63037: PPUSH
63038: LD_STRING D16-Ev-1
63040: PPUSH
63041: CALL_OW 91
63045: GO 63239
63047: LD_EXP 16
63051: DOUBLE
63052: EQUAL
63053: IFTRUE 63057
63055: GO 63072
63057: POP
// ForceSay ( contaminating_scientist , D16-Ola-1 ) ; Dwayne :
63058: LD_EXP 120
63062: PPUSH
63063: LD_STRING D16-Ola-1
63065: PPUSH
63066: CALL_OW 91
63070: GO 63239
63072: LD_EXP 17
63076: DOUBLE
63077: EQUAL
63078: IFTRUE 63082
63080: GO 63097
63082: POP
// ForceSay ( contaminating_scientist , D16-Dw-1 ) ; Aviradze :
63083: LD_EXP 120
63087: PPUSH
63088: LD_STRING D16-Dw-1
63090: PPUSH
63091: CALL_OW 91
63095: GO 63239
63097: LD_EXP 18
63101: DOUBLE
63102: EQUAL
63103: IFTRUE 63107
63105: GO 63122
63107: POP
// ForceSay ( contaminating_scientist , D16-Av-1 ) ; Swansson :
63108: LD_EXP 120
63112: PPUSH
63113: LD_STRING D16-Av-1
63115: PPUSH
63116: CALL_OW 91
63120: GO 63239
63122: LD_EXP 19
63126: DOUBLE
63127: EQUAL
63128: IFTRUE 63132
63130: GO 63147
63132: POP
// ForceSay ( contaminating_scientist , D16-Sw-1 ) ; Khattam :
63133: LD_EXP 120
63137: PPUSH
63138: LD_STRING D16-Sw-1
63140: PPUSH
63141: CALL_OW 91
63145: GO 63239
63147: LD_EXP 20
63151: DOUBLE
63152: EQUAL
63153: IFTRUE 63157
63155: GO 63172
63157: POP
// ForceSay ( contaminating_scientist , D16-Kh-1 ) ; Ortlieb :
63158: LD_EXP 120
63162: PPUSH
63163: LD_STRING D16-Kh-1
63165: PPUSH
63166: CALL_OW 91
63170: GO 63239
63172: LD_EXP 25
63176: DOUBLE
63177: EQUAL
63178: IFTRUE 63182
63180: GO 63197
63182: POP
// ForceSay ( contaminating_scientist , D16-Ort-1 ) ; else
63183: LD_EXP 120
63187: PPUSH
63188: LD_STRING D16-Ort-1
63190: PPUSH
63191: CALL_OW 91
63195: GO 63239
63197: POP
// if GetSex ( contaminating_scientist ) = sex_male then
63198: LD_EXP 120
63202: PPUSH
63203: CALL_OW 258
63207: PUSH
63208: LD_INT 1
63210: EQUAL
63211: IFFALSE 63227
// ForceSay ( contaminating_scientist , D16-SomeM-1 ) else
63213: LD_EXP 120
63217: PPUSH
63218: LD_STRING D16-SomeM-1
63220: PPUSH
63221: CALL_OW 91
63225: GO 63239
// ForceSay ( contaminating_scientist , D16-SomeF-1 ) ; end ;
63227: LD_EXP 120
63231: PPUSH
63232: LD_STRING D16-SomeF-1
63234: PPUSH
63235: CALL_OW 91
// ForceSay ( Makise , D16-Ch-2 ) ;
63239: LD_EXP 21
63243: PPUSH
63244: LD_STRING D16-Ch-2
63246: PPUSH
63247: CALL_OW 91
// case contaminating_scientist of Sonya :
63251: LD_EXP 120
63255: PUSH
63256: LD_EXP 11
63260: DOUBLE
63261: EQUAL
63262: IFTRUE 63266
63264: GO 63281
63266: POP
// ForceSay ( contaminating_scientist , D16-So-2 ) ; Oswald :
63267: LD_EXP 120
63271: PPUSH
63272: LD_STRING D16-So-2
63274: PPUSH
63275: CALL_OW 91
63279: GO 63573
63281: LD_EXP 12
63285: DOUBLE
63286: EQUAL
63287: IFTRUE 63291
63289: GO 63306
63291: POP
// ForceSay ( contaminating_scientist , D16-Os-2 ) ; Ralph :
63292: LD_EXP 120
63296: PPUSH
63297: LD_STRING D16-Os-2
63299: PPUSH
63300: CALL_OW 91
63304: GO 63573
63306: LD_EXP 13
63310: DOUBLE
63311: EQUAL
63312: IFTRUE 63316
63314: GO 63331
63316: POP
// ForceSay ( contaminating_scientist , D16-Ra-2 ) ; Kowalski :
63317: LD_EXP 120
63321: PPUSH
63322: LD_STRING D16-Ra-2
63324: PPUSH
63325: CALL_OW 91
63329: GO 63573
63331: LD_EXP 14
63335: DOUBLE
63336: EQUAL
63337: IFTRUE 63341
63339: GO 63356
63341: POP
// ForceSay ( contaminating_scientist , D16-Ko-2 ) ; Evelyn :
63342: LD_EXP 120
63346: PPUSH
63347: LD_STRING D16-Ko-2
63349: PPUSH
63350: CALL_OW 91
63354: GO 63573
63356: LD_EXP 15
63360: DOUBLE
63361: EQUAL
63362: IFTRUE 63366
63364: GO 63381
63366: POP
// ForceSay ( contaminating_scientist , D16-Ev-2 ) ; Olaf :
63367: LD_EXP 120
63371: PPUSH
63372: LD_STRING D16-Ev-2
63374: PPUSH
63375: CALL_OW 91
63379: GO 63573
63381: LD_EXP 16
63385: DOUBLE
63386: EQUAL
63387: IFTRUE 63391
63389: GO 63406
63391: POP
// ForceSay ( contaminating_scientist , D16-Ola-2 ) ; Dwayne :
63392: LD_EXP 120
63396: PPUSH
63397: LD_STRING D16-Ola-2
63399: PPUSH
63400: CALL_OW 91
63404: GO 63573
63406: LD_EXP 17
63410: DOUBLE
63411: EQUAL
63412: IFTRUE 63416
63414: GO 63431
63416: POP
// ForceSay ( contaminating_scientist , D16-Dw-2 ) ; Aviradze :
63417: LD_EXP 120
63421: PPUSH
63422: LD_STRING D16-Dw-2
63424: PPUSH
63425: CALL_OW 91
63429: GO 63573
63431: LD_EXP 18
63435: DOUBLE
63436: EQUAL
63437: IFTRUE 63441
63439: GO 63456
63441: POP
// ForceSay ( contaminating_scientist , D16-Av-2 ) ; Swansson :
63442: LD_EXP 120
63446: PPUSH
63447: LD_STRING D16-Av-2
63449: PPUSH
63450: CALL_OW 91
63454: GO 63573
63456: LD_EXP 19
63460: DOUBLE
63461: EQUAL
63462: IFTRUE 63466
63464: GO 63481
63466: POP
// ForceSay ( contaminating_scientist , D16-Sw-2 ) ; Khattam :
63467: LD_EXP 120
63471: PPUSH
63472: LD_STRING D16-Sw-2
63474: PPUSH
63475: CALL_OW 91
63479: GO 63573
63481: LD_EXP 20
63485: DOUBLE
63486: EQUAL
63487: IFTRUE 63491
63489: GO 63506
63491: POP
// ForceSay ( contaminating_scientist , D16-Kh-2 ) ; Ortlieb :
63492: LD_EXP 120
63496: PPUSH
63497: LD_STRING D16-Kh-2
63499: PPUSH
63500: CALL_OW 91
63504: GO 63573
63506: LD_EXP 25
63510: DOUBLE
63511: EQUAL
63512: IFTRUE 63516
63514: GO 63531
63516: POP
// ForceSay ( contaminating_scientist , D16-Ort-2 ) ; else
63517: LD_EXP 120
63521: PPUSH
63522: LD_STRING D16-Ort-2
63524: PPUSH
63525: CALL_OW 91
63529: GO 63573
63531: POP
// if GetSex ( contaminating_scientist ) = sex_male then
63532: LD_EXP 120
63536: PPUSH
63537: CALL_OW 258
63541: PUSH
63542: LD_INT 1
63544: EQUAL
63545: IFFALSE 63561
// ForceSay ( contaminating_scientist , D16-SomeM-2 ) else
63547: LD_EXP 120
63551: PPUSH
63552: LD_STRING D16-SomeM-2
63554: PPUSH
63555: CALL_OW 91
63559: GO 63573
// ForceSay ( contaminating_scientist , D16-SomeF-2 ) ; end ;
63561: LD_EXP 120
63565: PPUSH
63566: LD_STRING D16-SomeF-2
63568: PPUSH
63569: CALL_OW 91
// ForceSay ( Makise , D16-Ch-3 ) ;
63573: LD_EXP 21
63577: PPUSH
63578: LD_STRING D16-Ch-3
63580: PPUSH
63581: CALL_OW 91
// dwait ( 0 0$2.5 ) ;
63585: LD_INT 88
63587: PPUSH
63588: CALL_OW 68
// ForceSay ( Heike , D16-H-1 ) ;
63592: LD_EXP 10
63596: PPUSH
63597: LD_STRING D16-H-1
63599: PPUSH
63600: CALL_OW 91
// dwait ( 0 0$2 ) ;
63604: LD_INT 70
63606: PPUSH
63607: CALL_OW 68
// if GetSex ( contaminating_scientist ) = sex_male then
63611: LD_EXP 120
63615: PPUSH
63616: CALL_OW 258
63620: PUSH
63621: LD_INT 1
63623: EQUAL
63624: IFFALSE 63640
// ForceSay ( Makise , D16-Ch-4a ) else
63626: LD_EXP 21
63630: PPUSH
63631: LD_STRING D16-Ch-4a
63633: PPUSH
63634: CALL_OW 91
63638: GO 63652
// ForceSay ( Makise , D16-Ch-4b ) ;
63640: LD_EXP 21
63644: PPUSH
63645: LD_STRING D16-Ch-4b
63647: PPUSH
63648: CALL_OW 91
// ForceSay ( Makise , D16-Ch-5 ) ;
63652: LD_EXP 21
63656: PPUSH
63657: LD_STRING D16-Ch-5
63659: PPUSH
63660: CALL_OW 91
// ForceSay ( Heike , D16-H-2 ) ;
63664: LD_EXP 10
63668: PPUSH
63669: LD_STRING D16-H-2
63671: PPUSH
63672: CALL_OW 91
// ForceSay ( Heike , D16-H-3 ) ;
63676: LD_EXP 10
63680: PPUSH
63681: LD_STRING D16-H-3
63683: PPUSH
63684: CALL_OW 91
// DestroyUnit ( contaminating_scientist ) ;
63688: LD_EXP 120
63692: PPUSH
63693: CALL_OW 65
// contaminating_scientist_went_to_lab = true ;
63697: LD_ADDR_EXP 121
63701: PUSH
63702: LD_INT 1
63704: ST_TO_ADDR
// DialogueOff ;
63705: CALL_OW 7
// EndDialogue ;
63709: CALL 63765 0 0
// exit ;
63713: GO 63719
// until false ;
63715: LD_INT 0
63717: IFFALSE 62718
// end ;
63719: PPOPN 2
63721: END
// every 0 0$1 + 0 0$0.4 trigger contaminating_scientist > 0 do
63722: LD_EXP 120
63726: PUSH
63727: LD_INT 0
63729: GREATER
63730: IFFALSE 63764
63732: GO 63734
63734: DISABLE
// begin repeat wait ( 0 0$1 ) ;
63735: LD_INT 35
63737: PPUSH
63738: CALL_OW 67
// until IsDead ( contaminating_scientist ) ;
63742: LD_EXP 120
63746: PPUSH
63747: CALL_OW 301
63751: IFFALSE 63735
// wait ( 0 0$5 ) ;
63753: LD_INT 175
63755: PPUSH
63756: CALL_OW 67
// EndDialogue ;
63760: CALL 63765 0 0
// end ;
63764: END
// function EndDialogue ; begin
63765: LD_INT 0
63767: PPUSH
// InGameOn ;
63768: CALL_OW 8
// DialogueOn ;
63772: CALL_OW 6
// ForceSay ( Heike , D17-H-1 ) ;
63776: LD_EXP 10
63780: PPUSH
63781: LD_STRING D17-H-1
63783: PPUSH
63784: CALL_OW 91
// SayRadio ( Abdul , D17-Ab-1 ) ;
63788: LD_EXP 23
63792: PPUSH
63793: LD_STRING D17-Ab-1
63795: PPUSH
63796: CALL_OW 94
// dwait ( 0 0$0.2 ) ;
63800: LD_INT 7
63802: PPUSH
63803: CALL_OW 68
// EndMission ;
63807: CALL 85803 0 0
// DialogueOff ;
63811: CALL_OW 7
// InGameOff ;
63815: CALL_OW 9
// end ;
63819: LD_VAR 0 1
63823: RET
// export function OnResearchComplete_BioDet ( tech , lab ) ; begin
63824: LD_INT 0
63826: PPUSH
// if GetSide ( lab ) = you and tech = tech_biodet and GetLives ( Aviradze ) > 0 then
63827: LD_VAR 0 2
63831: PPUSH
63832: CALL_OW 255
63836: PUSH
63837: LD_EXP 2
63841: EQUAL
63842: PUSH
63843: LD_VAR 0 1
63847: PUSH
63848: LD_INT 8
63850: EQUAL
63851: AND
63852: PUSH
63853: LD_EXP 18
63857: PPUSH
63858: CALL_OW 256
63862: PUSH
63863: LD_INT 0
63865: GREATER
63866: AND
63867: IFFALSE 63973
// begin DialogueOn ;
63869: CALL_OW 6
// ForceSay ( Aviradze , D6-Av-1 ) ;
63873: LD_EXP 18
63877: PPUSH
63878: LD_STRING D6-Av-1
63880: PPUSH
63881: CALL_OW 91
// ForceSay ( Heike , D6-H-1 ) ;
63885: LD_EXP 10
63889: PPUSH
63890: LD_STRING D6-H-1
63892: PPUSH
63893: CALL_OW 91
// ForceSay ( Aviradze , D6-Av-2 ) ;
63897: LD_EXP 18
63901: PPUSH
63902: LD_STRING D6-Av-2
63904: PPUSH
63905: CALL_OW 91
// ForceSay ( Heike , D6-H-2 ) ;
63909: LD_EXP 10
63913: PPUSH
63914: LD_STRING D6-H-2
63916: PPUSH
63917: CALL_OW 91
// ForceSay ( Aviradze , D6-Av-3 ) ;
63921: LD_EXP 18
63925: PPUSH
63926: LD_STRING D6-Av-3
63928: PPUSH
63929: CALL_OW 91
// ForceSay ( Heike , D6-H-3 ) ;
63933: LD_EXP 10
63937: PPUSH
63938: LD_STRING D6-H-3
63940: PPUSH
63941: CALL_OW 91
// ForceSay ( Aviradze , D6-Av-4 ) ;
63945: LD_EXP 18
63949: PPUSH
63950: LD_STRING D6-Av-4
63952: PPUSH
63953: CALL_OW 91
// ForceSay ( Heike , D6-H-4 ) ;
63957: LD_EXP 10
63961: PPUSH
63962: LD_STRING D6-H-4
63964: PPUSH
63965: CALL_OW 91
// DialogueOff ;
63969: CALL_OW 7
// end ; end ;
63973: LD_VAR 0 3
63977: RET
// every 0 0$1 + 0 0$0.8 do
63978: GO 63980
63980: DISABLE
// begin if GetTech ( tech_biodet , you ) = state_disabled then
63981: LD_INT 8
63983: PPUSH
63984: LD_EXP 2
63988: PPUSH
63989: CALL_OW 321
63993: PUSH
63994: LD_INT 0
63996: EQUAL
63997: IFFALSE 64001
// exit ;
63999: GO 64186
// repeat wait ( 0 0$1 ) ;
64001: LD_INT 35
64003: PPUSH
64004: CALL_OW 67
// until GetTech ( tech_biodet , you ) = state_researched ;
64008: LD_INT 8
64010: PPUSH
64011: LD_EXP 2
64015: PPUSH
64016: CALL_OW 321
64020: PUSH
64021: LD_INT 2
64023: EQUAL
64024: IFFALSE 64001
// wait ( 0 0$30 ) ;
64026: LD_INT 1050
64028: PPUSH
64029: CALL_OW 67
// while ContactTime ( you ) <= 0 0$5 do
64033: LD_EXP 2
64037: PPUSH
64038: CALL_OW 462
64042: PUSH
64043: LD_INT 175
64045: LESSEQUAL
64046: IFFALSE 64057
// wait ( 0 0$1 ) ;
64048: LD_INT 35
64050: PPUSH
64051: CALL_OW 67
64055: GO 64033
// if GetLives ( Ralph ) = 0 or GetLives ( Aviradze ) = 0 then
64057: LD_EXP 13
64061: PPUSH
64062: CALL_OW 256
64066: PUSH
64067: LD_INT 0
64069: EQUAL
64070: PUSH
64071: LD_EXP 18
64075: PPUSH
64076: CALL_OW 256
64080: PUSH
64081: LD_INT 0
64083: EQUAL
64084: OR
64085: IFFALSE 64089
// exit ;
64087: GO 64186
// DialogueOn ;
64089: CALL_OW 6
// ForceSay ( Ralph , D7-Ra-1 ) ;
64093: LD_EXP 13
64097: PPUSH
64098: LD_STRING D7-Ra-1
64100: PPUSH
64101: CALL_OW 91
// ForceSay ( Aviradze , D7-Av-1 ) ;
64105: LD_EXP 18
64109: PPUSH
64110: LD_STRING D7-Av-1
64112: PPUSH
64113: CALL_OW 91
// ForceSay ( Ralph , D7-Ra-2 ) ;
64117: LD_EXP 13
64121: PPUSH
64122: LD_STRING D7-Ra-2
64124: PPUSH
64125: CALL_OW 91
// if GetLives ( Sonya ) > 0 then
64129: LD_EXP 11
64133: PPUSH
64134: CALL_OW 256
64138: PUSH
64139: LD_INT 0
64141: GREATER
64142: IFFALSE 64158
// ForceSay ( Sonya , D7-So-1 ) else
64144: LD_EXP 11
64148: PPUSH
64149: LD_STRING D7-So-1
64151: PPUSH
64152: CALL_OW 91
64156: GO 64170
// ForceSay ( Heike , D7-H-1 ) ;
64158: LD_EXP 10
64162: PPUSH
64163: LD_STRING D7-H-1
64165: PPUSH
64166: CALL_OW 91
// ForceSay ( Ralph , D7-Ra-3 ) ;
64170: LD_EXP 13
64174: PPUSH
64175: LD_STRING D7-Ra-3
64177: PPUSH
64178: CALL_OW 91
// DialogueOff ;
64182: CALL_OW 7
// end ;
64186: END
// every 0 0$1 + 0 0$0.4 trigger current_attack_num = 1 do var temp_list , un ;
64187: LD_EXP 115
64191: PUSH
64192: LD_INT 1
64194: EQUAL
64195: IFFALSE 64993
64197: GO 64199
64199: DISABLE
64200: LD_INT 0
64202: PPUSH
64203: PPUSH
// begin repeat wait ( 0 0$1 ) ;
64204: LD_INT 35
64206: PPUSH
64207: CALL_OW 67
// temp_list = FilterAllUnits ( [ [ f_side , legion ] , [ f_inarea , big_hill_area ] , [ f_see , you ] ] ) ;
64211: LD_ADDR_VAR 0 1
64215: PUSH
64216: LD_INT 22
64218: PUSH
64219: LD_EXP 4
64223: PUSH
64224: EMPTY
64225: LIST
64226: LIST
64227: PUSH
64228: LD_INT 95
64230: PUSH
64231: LD_INT 11
64233: PUSH
64234: EMPTY
64235: LIST
64236: LIST
64237: PUSH
64238: LD_INT 101
64240: PUSH
64241: LD_EXP 2
64245: PUSH
64246: EMPTY
64247: LIST
64248: LIST
64249: PUSH
64250: EMPTY
64251: LIST
64252: LIST
64253: LIST
64254: PPUSH
64255: CALL_OW 69
64259: ST_TO_ADDR
// until temp_list > 0 ;
64260: LD_VAR 0 1
64264: PUSH
64265: LD_INT 0
64267: GREATER
64268: IFFALSE 64204
// DialogueOn ;
64270: CALL_OW 6
// CenterOnUnits ( temp_list ) ;
64274: LD_VAR 0 1
64278: PPUSH
64279: CALL_OW 85
// ForceSay ( Heike , D20-H-1 ) ;
64283: LD_EXP 10
64287: PPUSH
64288: LD_STRING D20-H-1
64290: PPUSH
64291: CALL_OW 91
// DialogueOff ;
64295: CALL_OW 7
// repeat wait ( 0 0$1 ) ;
64299: LD_INT 35
64301: PPUSH
64302: CALL_OW 67
// until DangerousUnits ( FilterAllUnits ( [ [ f_side , legion ] , [ f_inarea , big_hill_area ] ] ) ) = 0 ;
64306: LD_INT 22
64308: PUSH
64309: LD_EXP 4
64313: PUSH
64314: EMPTY
64315: LIST
64316: LIST
64317: PUSH
64318: LD_INT 95
64320: PUSH
64321: LD_INT 11
64323: PUSH
64324: EMPTY
64325: LIST
64326: LIST
64327: PUSH
64328: EMPTY
64329: LIST
64330: LIST
64331: PPUSH
64332: CALL_OW 69
64336: PPUSH
64337: CALL 83864 0 1
64341: PUSH
64342: LD_INT 0
64344: EQUAL
64345: IFFALSE 64299
// wait ( 0 0$8 ) ;
64347: LD_INT 280
64349: PPUSH
64350: CALL_OW 67
// temp_list = UnitFilter ( [ Sonya , Evelyn , Khattam ] diff 0 , [ f_lives , 1 ] ) ;
64354: LD_ADDR_VAR 0 1
64358: PUSH
64359: LD_EXP 11
64363: PUSH
64364: LD_EXP 15
64368: PUSH
64369: LD_EXP 20
64373: PUSH
64374: EMPTY
64375: LIST
64376: LIST
64377: LIST
64378: PUSH
64379: LD_INT 0
64381: DIFF
64382: PPUSH
64383: LD_INT 24
64385: PUSH
64386: LD_INT 1
64388: PUSH
64389: EMPTY
64390: LIST
64391: LIST
64392: PPUSH
64393: CALL_OW 72
64397: ST_TO_ADDR
// if temp_list > 0 then
64398: LD_VAR 0 1
64402: PUSH
64403: LD_INT 0
64405: GREATER
64406: IFFALSE 64438
// un = temp_list [ Rand ( 1 , temp_list + 0 ) ] else
64408: LD_ADDR_VAR 0 2
64412: PUSH
64413: LD_VAR 0 1
64417: PUSH
64418: LD_INT 1
64420: PPUSH
64421: LD_VAR 0 1
64425: PUSH
64426: LD_INT 0
64428: PLUS
64429: PPUSH
64430: CALL_OW 12
64434: ARRAY
64435: ST_TO_ADDR
64436: GO 64448
// un = Makise ;
64438: LD_ADDR_VAR 0 2
64442: PUSH
64443: LD_EXP 21
64447: ST_TO_ADDR
// DialogueOn ;
64448: CALL_OW 6
// case un of Sonya :
64452: LD_VAR 0 2
64456: PUSH
64457: LD_EXP 11
64461: DOUBLE
64462: EQUAL
64463: IFTRUE 64467
64465: GO 64482
64467: POP
// ForceSay ( un , D12-So-1 ) ; Evelyn :
64468: LD_VAR 0 2
64472: PPUSH
64473: LD_STRING D12-So-1
64475: PPUSH
64476: CALL_OW 91
64480: GO 64558
64482: LD_EXP 15
64486: DOUBLE
64487: EQUAL
64488: IFTRUE 64492
64490: GO 64507
64492: POP
// ForceSay ( un , D12-Ev-1 ) ; Khattam :
64493: LD_VAR 0 2
64497: PPUSH
64498: LD_STRING D12-Ev-1
64500: PPUSH
64501: CALL_OW 91
64505: GO 64558
64507: LD_EXP 20
64511: DOUBLE
64512: EQUAL
64513: IFTRUE 64517
64515: GO 64532
64517: POP
// ForceSay ( un , D12-Kh-1 ) ; Makise :
64518: LD_VAR 0 2
64522: PPUSH
64523: LD_STRING D12-Kh-1
64525: PPUSH
64526: CALL_OW 91
64530: GO 64558
64532: LD_EXP 21
64536: DOUBLE
64537: EQUAL
64538: IFTRUE 64542
64540: GO 64557
64542: POP
// ForceSay ( un , D12-Ch-1 ) ; end ;
64543: LD_VAR 0 2
64547: PPUSH
64548: LD_STRING D12-Ch-1
64550: PPUSH
64551: CALL_OW 91
64555: GO 64558
64557: POP
// ForceSay ( Heike , D12-H-1 ) ;
64558: LD_EXP 10
64562: PPUSH
64563: LD_STRING D12-H-1
64565: PPUSH
64566: CALL_OW 91
// case un of Sonya :
64570: LD_VAR 0 2
64574: PUSH
64575: LD_EXP 11
64579: DOUBLE
64580: EQUAL
64581: IFTRUE 64585
64583: GO 64600
64585: POP
// ForceSay ( un , D12-So-2 ) ; Evelyn :
64586: LD_VAR 0 2
64590: PPUSH
64591: LD_STRING D12-So-2
64593: PPUSH
64594: CALL_OW 91
64598: GO 64676
64600: LD_EXP 15
64604: DOUBLE
64605: EQUAL
64606: IFTRUE 64610
64608: GO 64625
64610: POP
// ForceSay ( un , D12-Ev-2 ) ; Khattam :
64611: LD_VAR 0 2
64615: PPUSH
64616: LD_STRING D12-Ev-2
64618: PPUSH
64619: CALL_OW 91
64623: GO 64676
64625: LD_EXP 20
64629: DOUBLE
64630: EQUAL
64631: IFTRUE 64635
64633: GO 64650
64635: POP
// ForceSay ( un , D12-Kh-2 ) ; Makise :
64636: LD_VAR 0 2
64640: PPUSH
64641: LD_STRING D12-Kh-2
64643: PPUSH
64644: CALL_OW 91
64648: GO 64676
64650: LD_EXP 21
64654: DOUBLE
64655: EQUAL
64656: IFTRUE 64660
64658: GO 64675
64660: POP
// ForceSay ( un , D12-Ch-2 ) ; end ;
64661: LD_VAR 0 2
64665: PPUSH
64666: LD_STRING D12-Ch-2
64668: PPUSH
64669: CALL_OW 91
64673: GO 64676
64675: POP
// case un of Sonya :
64676: LD_VAR 0 2
64680: PUSH
64681: LD_EXP 11
64685: DOUBLE
64686: EQUAL
64687: IFTRUE 64691
64689: GO 64706
64691: POP
// ForceSay ( Heike , D12-H-2a ) ; Evelyn :
64692: LD_EXP 10
64696: PPUSH
64697: LD_STRING D12-H-2a
64699: PPUSH
64700: CALL_OW 91
64704: GO 64782
64706: LD_EXP 15
64710: DOUBLE
64711: EQUAL
64712: IFTRUE 64716
64714: GO 64731
64716: POP
// ForceSay ( Heike , D12-H-2b ) ; Khattam :
64717: LD_EXP 10
64721: PPUSH
64722: LD_STRING D12-H-2b
64724: PPUSH
64725: CALL_OW 91
64729: GO 64782
64731: LD_EXP 20
64735: DOUBLE
64736: EQUAL
64737: IFTRUE 64741
64739: GO 64756
64741: POP
// ForceSay ( Heike , D12-H-2c ) ; Makise :
64742: LD_EXP 10
64746: PPUSH
64747: LD_STRING D12-H-2c
64749: PPUSH
64750: CALL_OW 91
64754: GO 64782
64756: LD_EXP 21
64760: DOUBLE
64761: EQUAL
64762: IFTRUE 64766
64764: GO 64781
64766: POP
// ForceSay ( Heike , D12-H-2d ) ; end ;
64767: LD_EXP 10
64771: PPUSH
64772: LD_STRING D12-H-2d
64774: PPUSH
64775: CALL_OW 91
64779: GO 64782
64781: POP
// ForceSay ( Makise , D12-Ch-3 ) ;
64782: LD_EXP 21
64786: PPUSH
64787: LD_STRING D12-Ch-3
64789: PPUSH
64790: CALL_OW 91
// ForceSay ( Heike , D12-H-3 ) ;
64794: LD_EXP 10
64798: PPUSH
64799: LD_STRING D12-H-3
64801: PPUSH
64802: CALL_OW 91
// ForceSay ( Makise , D12-Ch-4 ) ;
64806: LD_EXP 21
64810: PPUSH
64811: LD_STRING D12-Ch-4
64813: PPUSH
64814: CALL_OW 91
// if GetLives ( Ralph ) > 0 then
64818: LD_EXP 13
64822: PPUSH
64823: CALL_OW 256
64827: PUSH
64828: LD_INT 0
64830: GREATER
64831: IFFALSE 64845
// ForceSay ( Ralph , D12-Ra-1 ) ;
64833: LD_EXP 13
64837: PPUSH
64838: LD_STRING D12-Ra-1
64840: PPUSH
64841: CALL_OW 91
// ForceSay ( Makise , D12-Ch-5 ) ;
64845: LD_EXP 21
64849: PPUSH
64850: LD_STRING D12-Ch-5
64852: PPUSH
64853: CALL_OW 91
// DialogueOff ;
64857: CALL_OW 7
// wait ( 0 0$0.2 ) ;
64861: LD_INT 7
64863: PPUSH
64864: CALL_OW 67
// ChangeMissionObjectives ( M_AddImpVeh ) ;
64868: LD_STRING M_AddImpVeh
64870: PPUSH
64871: CALL_OW 337
// wait ( 0 0$0.2 ) ;
64875: LD_INT 7
64877: PPUSH
64878: CALL_OW 67
// Query ( QRemoteTakeover ) ;
64882: LD_STRING QRemoteTakeover
64884: PPUSH
64885: CALL_OW 97
// wait ( 2 2$0 ) ;
64889: LD_INT 4200
64891: PPUSH
64892: CALL_OW 67
// for un in heike_reinforcements_people ^ heike_reinforcements_vehicles do
64896: LD_ADDR_VAR 0 2
64900: PUSH
64901: LD_EXP 118
64905: PUSH
64906: LD_EXP 119
64910: ADD
64911: PUSH
64912: FOR_IN
64913: IFFALSE 64944
// begin SetDir ( un , 4 ) ;
64915: LD_VAR 0 2
64919: PPUSH
64920: LD_INT 4
64922: PPUSH
64923: CALL_OW 233
// PlaceUnitArea ( un , attack_group_4_spawn_area , false ) ;
64927: LD_VAR 0 2
64931: PPUSH
64932: LD_INT 28
64934: PPUSH
64935: LD_INT 0
64937: PPUSH
64938: CALL_OW 49
// end ;
64942: GO 64912
64944: POP
64945: POP
// DialogueOn ;
64946: CALL_OW 6
// CenterOnUnits ( heike_reinforcements_people ^ heike_reinforcements_vehicles ) ;
64950: LD_EXP 118
64954: PUSH
64955: LD_EXP 119
64959: ADD
64960: PPUSH
64961: CALL_OW 85
// Say ( Ortlieb , D21-Ort-1 ) ;
64965: LD_EXP 25
64969: PPUSH
64970: LD_STRING D21-Ort-1
64972: PPUSH
64973: CALL_OW 88
// ForceSay ( Heike , D21-H-1 ) ;
64977: LD_EXP 10
64981: PPUSH
64982: LD_STRING D21-H-1
64984: PPUSH
64985: CALL_OW 91
// DialogueOff ;
64989: CALL_OW 7
// end ;
64993: PPOPN 2
64995: END
// every 0 0$1 + 0 0$0.1 trigger current_attack_num = 2 do var temp_list , un ;
64996: LD_EXP 115
65000: PUSH
65001: LD_INT 2
65003: EQUAL
65004: IFFALSE 65566
65006: GO 65008
65008: DISABLE
65009: LD_INT 0
65011: PPUSH
65012: PPUSH
// begin repeat wait ( 0 0$1 ) ;
65013: LD_INT 35
65015: PPUSH
65016: CALL_OW 67
// until DangerousUnits ( FilterAllUnits ( [ [ f_side , legion ] , [ f_inarea , big_hill_area ] ] ) ) = 0 ;
65020: LD_INT 22
65022: PUSH
65023: LD_EXP 4
65027: PUSH
65028: EMPTY
65029: LIST
65030: LIST
65031: PUSH
65032: LD_INT 95
65034: PUSH
65035: LD_INT 11
65037: PUSH
65038: EMPTY
65039: LIST
65040: LIST
65041: PUSH
65042: EMPTY
65043: LIST
65044: LIST
65045: PPUSH
65046: CALL_OW 69
65050: PPUSH
65051: CALL 83864 0 1
65055: PUSH
65056: LD_INT 0
65058: EQUAL
65059: IFFALSE 65013
// wait ( Rand ( 2 2$30 , 3 3$30 ) ) ;
65061: LD_INT 5250
65063: PPUSH
65064: LD_INT 7350
65066: PPUSH
65067: CALL_OW 12
65071: PPUSH
65072: CALL_OW 67
// temp_list = UnitFilter ( [ Sonya , Oswald , Kowalski , Evelyn , Olaf , Dwayne , Makise ] diff 0 , [ f_lives , 1 ] ) ;
65076: LD_ADDR_VAR 0 1
65080: PUSH
65081: LD_EXP 11
65085: PUSH
65086: LD_EXP 12
65090: PUSH
65091: LD_EXP 14
65095: PUSH
65096: LD_EXP 15
65100: PUSH
65101: LD_EXP 16
65105: PUSH
65106: LD_EXP 17
65110: PUSH
65111: LD_EXP 21
65115: PUSH
65116: EMPTY
65117: LIST
65118: LIST
65119: LIST
65120: LIST
65121: LIST
65122: LIST
65123: LIST
65124: PUSH
65125: LD_INT 0
65127: DIFF
65128: PPUSH
65129: LD_INT 24
65131: PUSH
65132: LD_INT 1
65134: PUSH
65135: EMPTY
65136: LIST
65137: LIST
65138: PPUSH
65139: CALL_OW 72
65143: ST_TO_ADDR
// un = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
65144: LD_ADDR_VAR 0 2
65148: PUSH
65149: LD_VAR 0 1
65153: PUSH
65154: LD_INT 1
65156: PPUSH
65157: LD_VAR 0 1
65161: PUSH
65162: LD_INT 0
65164: PLUS
65165: PPUSH
65166: CALL_OW 12
65170: ARRAY
65171: ST_TO_ADDR
// DialogueOn ;
65172: CALL_OW 6
// case un of Sonya :
65176: LD_VAR 0 2
65180: PUSH
65181: LD_EXP 11
65185: DOUBLE
65186: EQUAL
65187: IFTRUE 65191
65189: GO 65206
65191: POP
// ForceSay ( un , D10-So-1 ) ; Oswald :
65192: LD_VAR 0 2
65196: PPUSH
65197: LD_STRING D10-So-1
65199: PPUSH
65200: CALL_OW 91
65204: GO 65357
65206: LD_EXP 12
65210: DOUBLE
65211: EQUAL
65212: IFTRUE 65216
65214: GO 65231
65216: POP
// ForceSay ( un , D10-Os-1 ) ; Kowalski :
65217: LD_VAR 0 2
65221: PPUSH
65222: LD_STRING D10-Os-1
65224: PPUSH
65225: CALL_OW 91
65229: GO 65357
65231: LD_EXP 14
65235: DOUBLE
65236: EQUAL
65237: IFTRUE 65241
65239: GO 65256
65241: POP
// ForceSay ( un , D10-Ko-1 ) ; Evelyn :
65242: LD_VAR 0 2
65246: PPUSH
65247: LD_STRING D10-Ko-1
65249: PPUSH
65250: CALL_OW 91
65254: GO 65357
65256: LD_EXP 15
65260: DOUBLE
65261: EQUAL
65262: IFTRUE 65266
65264: GO 65281
65266: POP
// ForceSay ( un , D10-Ev-1 ) ; Olaf :
65267: LD_VAR 0 2
65271: PPUSH
65272: LD_STRING D10-Ev-1
65274: PPUSH
65275: CALL_OW 91
65279: GO 65357
65281: LD_EXP 16
65285: DOUBLE
65286: EQUAL
65287: IFTRUE 65291
65289: GO 65306
65291: POP
// ForceSay ( un , D10-Ola-1 ) ; Dwayne :
65292: LD_VAR 0 2
65296: PPUSH
65297: LD_STRING D10-Ola-1
65299: PPUSH
65300: CALL_OW 91
65304: GO 65357
65306: LD_EXP 17
65310: DOUBLE
65311: EQUAL
65312: IFTRUE 65316
65314: GO 65331
65316: POP
// ForceSay ( un , D10-Dw-1 ) ; Makise :
65317: LD_VAR 0 2
65321: PPUSH
65322: LD_STRING D10-Dw-1
65324: PPUSH
65325: CALL_OW 91
65329: GO 65357
65331: LD_EXP 21
65335: DOUBLE
65336: EQUAL
65337: IFTRUE 65341
65339: GO 65356
65341: POP
// ForceSay ( un , D10-Ch-1 ) ; end ;
65342: LD_VAR 0 2
65346: PPUSH
65347: LD_STRING D10-Ch-1
65349: PPUSH
65350: CALL_OW 91
65354: GO 65357
65356: POP
// ForceSay ( Heike , D10-H-1 ) ;
65357: LD_EXP 10
65361: PPUSH
65362: LD_STRING D10-H-1
65364: PPUSH
65365: CALL_OW 91
// case un of Sonya :
65369: LD_VAR 0 2
65373: PUSH
65374: LD_EXP 11
65378: DOUBLE
65379: EQUAL
65380: IFTRUE 65384
65382: GO 65399
65384: POP
// ForceSay ( un , D10-So-2 ) ; Oswald :
65385: LD_VAR 0 2
65389: PPUSH
65390: LD_STRING D10-So-2
65392: PPUSH
65393: CALL_OW 91
65397: GO 65550
65399: LD_EXP 12
65403: DOUBLE
65404: EQUAL
65405: IFTRUE 65409
65407: GO 65424
65409: POP
// ForceSay ( un , D10-Os-2 ) ; Kowalski :
65410: LD_VAR 0 2
65414: PPUSH
65415: LD_STRING D10-Os-2
65417: PPUSH
65418: CALL_OW 91
65422: GO 65550
65424: LD_EXP 14
65428: DOUBLE
65429: EQUAL
65430: IFTRUE 65434
65432: GO 65449
65434: POP
// ForceSay ( un , D10-Ko-2 ) ; Evelyn :
65435: LD_VAR 0 2
65439: PPUSH
65440: LD_STRING D10-Ko-2
65442: PPUSH
65443: CALL_OW 91
65447: GO 65550
65449: LD_EXP 15
65453: DOUBLE
65454: EQUAL
65455: IFTRUE 65459
65457: GO 65474
65459: POP
// ForceSay ( un , D10-Ev-2 ) ; Olaf :
65460: LD_VAR 0 2
65464: PPUSH
65465: LD_STRING D10-Ev-2
65467: PPUSH
65468: CALL_OW 91
65472: GO 65550
65474: LD_EXP 16
65478: DOUBLE
65479: EQUAL
65480: IFTRUE 65484
65482: GO 65499
65484: POP
// ForceSay ( un , D10-Ola-2 ) ; Dwayne :
65485: LD_VAR 0 2
65489: PPUSH
65490: LD_STRING D10-Ola-2
65492: PPUSH
65493: CALL_OW 91
65497: GO 65550
65499: LD_EXP 17
65503: DOUBLE
65504: EQUAL
65505: IFTRUE 65509
65507: GO 65524
65509: POP
// ForceSay ( un , D10-Dw-2 ) ; Makise :
65510: LD_VAR 0 2
65514: PPUSH
65515: LD_STRING D10-Dw-2
65517: PPUSH
65518: CALL_OW 91
65522: GO 65550
65524: LD_EXP 21
65528: DOUBLE
65529: EQUAL
65530: IFTRUE 65534
65532: GO 65549
65534: POP
// ForceSay ( un , D10-Ch-2 ) ; end ;
65535: LD_VAR 0 2
65539: PPUSH
65540: LD_STRING D10-Ch-2
65542: PPUSH
65543: CALL_OW 91
65547: GO 65550
65549: POP
// ForceSay ( Heike , D10-H-2 ) ;
65550: LD_EXP 10
65554: PPUSH
65555: LD_STRING D10-H-2
65557: PPUSH
65558: CALL_OW 91
// DialogueOff ;
65562: CALL_OW 7
// end ;
65566: PPOPN 2
65568: END
// every 0 0$1 + 0 0$0.2 do var temp_list , un ;
65569: GO 65571
65571: DISABLE
65572: LD_INT 0
65574: PPUSH
65575: PPUSH
// begin repeat wait ( 0 0$1 ) ;
65576: LD_INT 35
65578: PPUSH
65579: CALL_OW 67
// temp_list = FilterAllUnits ( [ [ f_side , legion ] , [ f_type , unit_human ] , [ f_class , class_bazooker ] , [ f_see , you ] ] ) ;
65583: LD_ADDR_VAR 0 1
65587: PUSH
65588: LD_INT 22
65590: PUSH
65591: LD_EXP 4
65595: PUSH
65596: EMPTY
65597: LIST
65598: LIST
65599: PUSH
65600: LD_INT 21
65602: PUSH
65603: LD_INT 1
65605: PUSH
65606: EMPTY
65607: LIST
65608: LIST
65609: PUSH
65610: LD_INT 25
65612: PUSH
65613: LD_INT 9
65615: PUSH
65616: EMPTY
65617: LIST
65618: LIST
65619: PUSH
65620: LD_INT 101
65622: PUSH
65623: LD_EXP 2
65627: PUSH
65628: EMPTY
65629: LIST
65630: LIST
65631: PUSH
65632: EMPTY
65633: LIST
65634: LIST
65635: LIST
65636: LIST
65637: PPUSH
65638: CALL_OW 69
65642: ST_TO_ADDR
// until temp_list > 0 ;
65643: LD_VAR 0 1
65647: PUSH
65648: LD_INT 0
65650: GREATER
65651: IFFALSE 65576
// DialogueOn ;
65653: CALL_OW 6
// CenterOnUnits ( temp_list ) ;
65657: LD_VAR 0 1
65661: PPUSH
65662: CALL_OW 85
// temp_list = UnitFilter ( [ Oswald , Ralph , Kowalski , Evelyn , Swansson ] diff 0 , [ f_lives , 1 ] ) ;
65666: LD_ADDR_VAR 0 1
65670: PUSH
65671: LD_EXP 12
65675: PUSH
65676: LD_EXP 13
65680: PUSH
65681: LD_EXP 14
65685: PUSH
65686: LD_EXP 15
65690: PUSH
65691: LD_EXP 19
65695: PUSH
65696: EMPTY
65697: LIST
65698: LIST
65699: LIST
65700: LIST
65701: LIST
65702: PUSH
65703: LD_INT 0
65705: DIFF
65706: PPUSH
65707: LD_INT 24
65709: PUSH
65710: LD_INT 1
65712: PUSH
65713: EMPTY
65714: LIST
65715: LIST
65716: PPUSH
65717: CALL_OW 72
65721: ST_TO_ADDR
// if temp_list > 0 then
65722: LD_VAR 0 1
65726: PUSH
65727: LD_INT 0
65729: GREATER
65730: IFFALSE 65762
// un = temp_list [ Rand ( 1 , temp_list + 0 ) ] else
65732: LD_ADDR_VAR 0 2
65736: PUSH
65737: LD_VAR 0 1
65741: PUSH
65742: LD_INT 1
65744: PPUSH
65745: LD_VAR 0 1
65749: PUSH
65750: LD_INT 0
65752: PLUS
65753: PPUSH
65754: CALL_OW 12
65758: ARRAY
65759: ST_TO_ADDR
65760: GO 65770
// un = 0 ;
65762: LD_ADDR_VAR 0 2
65766: PUSH
65767: LD_INT 0
65769: ST_TO_ADDR
// case un of Oswald :
65770: LD_VAR 0 2
65774: PUSH
65775: LD_EXP 12
65779: DOUBLE
65780: EQUAL
65781: IFTRUE 65785
65783: GO 65800
65785: POP
// ForceSay ( un , D11-Os-1 ) ; Ralph :
65786: LD_VAR 0 2
65790: PPUSH
65791: LD_STRING D11-Os-1
65793: PPUSH
65794: CALL_OW 91
65798: GO 65901
65800: LD_EXP 13
65804: DOUBLE
65805: EQUAL
65806: IFTRUE 65810
65808: GO 65825
65810: POP
// ForceSay ( un , D11-Ra-1 ) ; Kowalski :
65811: LD_VAR 0 2
65815: PPUSH
65816: LD_STRING D11-Ra-1
65818: PPUSH
65819: CALL_OW 91
65823: GO 65901
65825: LD_EXP 14
65829: DOUBLE
65830: EQUAL
65831: IFTRUE 65835
65833: GO 65850
65835: POP
// ForceSay ( un , D11-Ko-1 ) ; Evelyn :
65836: LD_VAR 0 2
65840: PPUSH
65841: LD_STRING D11-Ko-1
65843: PPUSH
65844: CALL_OW 91
65848: GO 65901
65850: LD_EXP 15
65854: DOUBLE
65855: EQUAL
65856: IFTRUE 65860
65858: GO 65875
65860: POP
// ForceSay ( un , D11-Ev-1 ) ; Swansson :
65861: LD_VAR 0 2
65865: PPUSH
65866: LD_STRING D11-Ev-1
65868: PPUSH
65869: CALL_OW 91
65873: GO 65901
65875: LD_EXP 19
65879: DOUBLE
65880: EQUAL
65881: IFTRUE 65885
65883: GO 65900
65885: POP
// ForceSay ( un , D11-Sw-1 ) ; end ;
65886: LD_VAR 0 2
65890: PPUSH
65891: LD_STRING D11-Sw-1
65893: PPUSH
65894: CALL_OW 91
65898: GO 65901
65900: POP
// ForceSay ( Heike , D11-H-1 ) ;
65901: LD_EXP 10
65905: PPUSH
65906: LD_STRING D11-H-1
65908: PPUSH
65909: CALL_OW 91
// temp_list = UnitFilter ( [ Oswald , Ralph , Kowalski , Evelyn , Swansson , Makise ] diff 0 , [ f_lives , 1 ] ) ;
65913: LD_ADDR_VAR 0 1
65917: PUSH
65918: LD_EXP 12
65922: PUSH
65923: LD_EXP 13
65927: PUSH
65928: LD_EXP 14
65932: PUSH
65933: LD_EXP 15
65937: PUSH
65938: LD_EXP 19
65942: PUSH
65943: LD_EXP 21
65947: PUSH
65948: EMPTY
65949: LIST
65950: LIST
65951: LIST
65952: LIST
65953: LIST
65954: LIST
65955: PUSH
65956: LD_INT 0
65958: DIFF
65959: PPUSH
65960: LD_INT 24
65962: PUSH
65963: LD_INT 1
65965: PUSH
65966: EMPTY
65967: LIST
65968: LIST
65969: PPUSH
65970: CALL_OW 72
65974: ST_TO_ADDR
// un = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
65975: LD_ADDR_VAR 0 2
65979: PUSH
65980: LD_VAR 0 1
65984: PUSH
65985: LD_INT 1
65987: PPUSH
65988: LD_VAR 0 1
65992: PUSH
65993: LD_INT 0
65995: PLUS
65996: PPUSH
65997: CALL_OW 12
66001: ARRAY
66002: ST_TO_ADDR
// case un of Oswald :
66003: LD_VAR 0 2
66007: PUSH
66008: LD_EXP 12
66012: DOUBLE
66013: EQUAL
66014: IFTRUE 66018
66016: GO 66033
66018: POP
// ForceSay ( un , D11-Os-2 ) ; Ralph :
66019: LD_VAR 0 2
66023: PPUSH
66024: LD_STRING D11-Os-2
66026: PPUSH
66027: CALL_OW 91
66031: GO 66159
66033: LD_EXP 13
66037: DOUBLE
66038: EQUAL
66039: IFTRUE 66043
66041: GO 66058
66043: POP
// ForceSay ( un , D11-Ra-2 ) ; Kowalski :
66044: LD_VAR 0 2
66048: PPUSH
66049: LD_STRING D11-Ra-2
66051: PPUSH
66052: CALL_OW 91
66056: GO 66159
66058: LD_EXP 14
66062: DOUBLE
66063: EQUAL
66064: IFTRUE 66068
66066: GO 66083
66068: POP
// ForceSay ( un , D11-Ko-2 ) ; Evelyn :
66069: LD_VAR 0 2
66073: PPUSH
66074: LD_STRING D11-Ko-2
66076: PPUSH
66077: CALL_OW 91
66081: GO 66159
66083: LD_EXP 15
66087: DOUBLE
66088: EQUAL
66089: IFTRUE 66093
66091: GO 66108
66093: POP
// ForceSay ( un , D11-Ev-2 ) ; Swansson :
66094: LD_VAR 0 2
66098: PPUSH
66099: LD_STRING D11-Ev-2
66101: PPUSH
66102: CALL_OW 91
66106: GO 66159
66108: LD_EXP 19
66112: DOUBLE
66113: EQUAL
66114: IFTRUE 66118
66116: GO 66133
66118: POP
// ForceSay ( un , D11-Sw-2 ) ; Makise :
66119: LD_VAR 0 2
66123: PPUSH
66124: LD_STRING D11-Sw-2
66126: PPUSH
66127: CALL_OW 91
66131: GO 66159
66133: LD_EXP 21
66137: DOUBLE
66138: EQUAL
66139: IFTRUE 66143
66141: GO 66158
66143: POP
// ForceSay ( un , D11-Ch-1 ) ; end ;
66144: LD_VAR 0 2
66148: PPUSH
66149: LD_STRING D11-Ch-1
66151: PPUSH
66152: CALL_OW 91
66156: GO 66159
66158: POP
// ForceSay ( Heike , D11-H-2 ) ;
66159: LD_EXP 10
66163: PPUSH
66164: LD_STRING D11-H-2
66166: PPUSH
66167: CALL_OW 91
// DialogueOff ;
66171: CALL_OW 7
// end ;
66175: PPOPN 2
66177: END
// every 0 0$1 + 0 0$0.2 trigger current_attack_num = 4 do
66178: LD_EXP 115
66182: PUSH
66183: LD_INT 4
66185: EQUAL
66186: IFFALSE 66296
66188: GO 66190
66190: DISABLE
// begin repeat wait ( 0 0$1 ) ;
66191: LD_INT 35
66193: PPUSH
66194: CALL_OW 67
// until DangerousUnits ( FilterAllUnits ( [ [ f_side , legion ] , [ f_inarea , big_hill_area ] ] ) ) = 0 ;
66198: LD_INT 22
66200: PUSH
66201: LD_EXP 4
66205: PUSH
66206: EMPTY
66207: LIST
66208: LIST
66209: PUSH
66210: LD_INT 95
66212: PUSH
66213: LD_INT 11
66215: PUSH
66216: EMPTY
66217: LIST
66218: LIST
66219: PUSH
66220: EMPTY
66221: LIST
66222: LIST
66223: PPUSH
66224: CALL_OW 69
66228: PPUSH
66229: CALL 83864 0 1
66233: PUSH
66234: LD_INT 0
66236: EQUAL
66237: IFFALSE 66191
// wait ( Rand ( 0 0$30 , 1 1$0 ) ) ;
66239: LD_INT 1050
66241: PPUSH
66242: LD_INT 2100
66244: PPUSH
66245: CALL_OW 12
66249: PPUSH
66250: CALL_OW 67
// DialogueOn ;
66254: CALL_OW 6
// SayRadio ( Abdul , D23-Ab-1 ) ;
66258: LD_EXP 23
66262: PPUSH
66263: LD_STRING D23-Ab-1
66265: PPUSH
66266: CALL_OW 94
// DialogueOff ;
66270: CALL_OW 7
// wait ( 0 0$0.2 ) ;
66274: LD_INT 7
66276: PPUSH
66277: CALL_OW 67
// ChangeMissionObjectives ( MMayAttAm ) ;
66281: LD_STRING MMayAttAm
66283: PPUSH
66284: CALL_OW 337
// may_attack_americans = true ;
66288: LD_ADDR_EXP 113
66292: PUSH
66293: LD_INT 1
66295: ST_TO_ADDR
// end ;
66296: END
// every 0 0$1 + 0 0$0.1 trigger remote_vehicles_impossible do var i ;
66297: LD_EXP 116
66301: IFFALSE 66410
66303: GO 66305
66305: DISABLE
66306: LD_INT 0
66308: PPUSH
// begin repeat wait ( 0 0$1 ) ;
66309: LD_INT 35
66311: PPUSH
66312: CALL_OW 67
// for i in FilterAllUnits ( [ [ f_side , legion ] , [ f_inarea , big_hill_area ] , [ f_type , unit_vehicle ] , [ f_control , control_remote ] , [ f_lives , 1000 ] ] ) do
66316: LD_ADDR_VAR 0 1
66320: PUSH
66321: LD_INT 22
66323: PUSH
66324: LD_EXP 4
66328: PUSH
66329: EMPTY
66330: LIST
66331: LIST
66332: PUSH
66333: LD_INT 95
66335: PUSH
66336: LD_INT 11
66338: PUSH
66339: EMPTY
66340: LIST
66341: LIST
66342: PUSH
66343: LD_INT 21
66345: PUSH
66346: LD_INT 2
66348: PUSH
66349: EMPTY
66350: LIST
66351: LIST
66352: PUSH
66353: LD_INT 33
66355: PUSH
66356: LD_INT 2
66358: PUSH
66359: EMPTY
66360: LIST
66361: LIST
66362: PUSH
66363: LD_INT 24
66365: PUSH
66366: LD_INT 1000
66368: PUSH
66369: EMPTY
66370: LIST
66371: LIST
66372: PUSH
66373: EMPTY
66374: LIST
66375: LIST
66376: LIST
66377: LIST
66378: LIST
66379: PPUSH
66380: CALL_OW 69
66384: PUSH
66385: FOR_IN
66386: IFFALSE 66404
// SetSide ( i , you ) ;
66388: LD_VAR 0 1
66392: PPUSH
66393: LD_EXP 2
66397: PPUSH
66398: CALL_OW 235
66402: GO 66385
66404: POP
66405: POP
// until false ;
66406: LD_INT 0
66408: IFFALSE 66309
// end ;
66410: PPOPN 1
66412: END
// every 0 0$1 + 0 0$0.1 do var vehicle_list , fact_list , coord_list , i , un , temp_list , louis_alive , dismantle_fact , f , temp_list_2 ;
66413: GO 66415
66415: DISABLE
66416: LD_INT 0
66418: PPUSH
66419: PPUSH
66420: PPUSH
66421: PPUSH
66422: PPUSH
66423: PPUSH
66424: PPUSH
66425: PPUSH
66426: PPUSH
66427: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
66428: LD_INT 18
66430: PPUSH
66431: CALL_OW 67
// vehicle_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_vehicle ] , [ f_weapon , ar_selfpropelled_bomb ] ] ) ;
66435: LD_ADDR_VAR 0 1
66439: PUSH
66440: LD_INT 22
66442: PUSH
66443: LD_EXP 2
66447: PUSH
66448: EMPTY
66449: LIST
66450: LIST
66451: PUSH
66452: LD_INT 21
66454: PUSH
66455: LD_INT 2
66457: PUSH
66458: EMPTY
66459: LIST
66460: LIST
66461: PUSH
66462: LD_INT 34
66464: PUSH
66465: LD_INT 29
66467: PUSH
66468: EMPTY
66469: LIST
66470: LIST
66471: PUSH
66472: EMPTY
66473: LIST
66474: LIST
66475: LIST
66476: PPUSH
66477: CALL_OW 69
66481: ST_TO_ADDR
// if vehicle_list = 0 then
66482: LD_VAR 0 1
66486: PUSH
66487: LD_INT 0
66489: EQUAL
66490: IFFALSE 66494
// continue ;
66492: GO 66428
// fact_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] , [ f_or , [ f_btype , b_workshop ] , [ f_btype , b_factory ] ] ] ) ;
66494: LD_ADDR_VAR 0 2
66498: PUSH
66499: LD_INT 22
66501: PUSH
66502: LD_EXP 2
66506: PUSH
66507: EMPTY
66508: LIST
66509: LIST
66510: PUSH
66511: LD_INT 21
66513: PUSH
66514: LD_INT 3
66516: PUSH
66517: EMPTY
66518: LIST
66519: LIST
66520: PUSH
66521: LD_INT 2
66523: PUSH
66524: LD_INT 30
66526: PUSH
66527: LD_INT 2
66529: PUSH
66530: EMPTY
66531: LIST
66532: LIST
66533: PUSH
66534: LD_INT 30
66536: PUSH
66537: LD_INT 3
66539: PUSH
66540: EMPTY
66541: LIST
66542: LIST
66543: PUSH
66544: EMPTY
66545: LIST
66546: LIST
66547: LIST
66548: PUSH
66549: EMPTY
66550: LIST
66551: LIST
66552: LIST
66553: PPUSH
66554: CALL_OW 69
66558: ST_TO_ADDR
// if fact_list = 0 then
66559: LD_VAR 0 2
66563: PUSH
66564: LD_INT 0
66566: EQUAL
66567: IFFALSE 66571
// continue ;
66569: GO 66428
// dismantle_fact = 0 ;
66571: LD_ADDR_VAR 0 8
66575: PUSH
66576: LD_INT 0
66578: ST_TO_ADDR
// un = 0 ;
66579: LD_ADDR_VAR 0 5
66583: PUSH
66584: LD_INT 0
66586: ST_TO_ADDR
// for f in fact_list do
66587: LD_ADDR_VAR 0 9
66591: PUSH
66592: LD_VAR 0 2
66596: PUSH
66597: FOR_IN
66598: IFFALSE 66717
// begin coord_list = GetHexesNearHex ( GetX ( f ) , GetY ( f ) , 1 ) ;
66600: LD_ADDR_VAR 0 3
66604: PUSH
66605: LD_VAR 0 9
66609: PPUSH
66610: CALL_OW 250
66614: PPUSH
66615: LD_VAR 0 9
66619: PPUSH
66620: CALL_OW 251
66624: PPUSH
66625: LD_INT 1
66627: PPUSH
66628: CALL 15078 0 3
66632: ST_TO_ADDR
// for i in vehicle_list do
66633: LD_ADDR_VAR 0 4
66637: PUSH
66638: LD_VAR 0 1
66642: PUSH
66643: FOR_IN
66644: IFFALSE 66701
// begin if [ GetX ( i ) , GetY ( i ) ] in coord_list then
66646: LD_VAR 0 4
66650: PPUSH
66651: CALL_OW 250
66655: PUSH
66656: LD_VAR 0 4
66660: PPUSH
66661: CALL_OW 251
66665: PUSH
66666: EMPTY
66667: LIST
66668: LIST
66669: PUSH
66670: LD_VAR 0 3
66674: IN
66675: IFFALSE 66699
// begin un = i ;
66677: LD_ADDR_VAR 0 5
66681: PUSH
66682: LD_VAR 0 4
66686: ST_TO_ADDR
// dismantle_fact = f ;
66687: LD_ADDR_VAR 0 8
66691: PUSH
66692: LD_VAR 0 9
66696: ST_TO_ADDR
// break ;
66697: GO 66701
// end ; end ;
66699: GO 66643
66701: POP
66702: POP
// if un > 0 then
66703: LD_VAR 0 5
66707: PUSH
66708: LD_INT 0
66710: GREATER
66711: IFFALSE 66715
// break ;
66713: GO 66717
// end ;
66715: GO 66597
66717: POP
66718: POP
// if un = 0 then
66719: LD_VAR 0 5
66723: PUSH
66724: LD_INT 0
66726: EQUAL
66727: IFFALSE 66731
// continue ;
66729: GO 66428
// repeat wait ( 0 0$0.5 ) ;
66731: LD_INT 18
66733: PPUSH
66734: CALL_OW 67
// until IsDead ( un ) ;
66738: LD_VAR 0 5
66742: PPUSH
66743: CALL_OW 301
66747: IFFALSE 66731
// louis_alive := TestCharacters ( Louis_08 ) ;
66749: LD_ADDR_VAR 0 7
66753: PUSH
66754: LD_STRING Louis_08
66756: PPUSH
66757: CALL_OW 28
66761: ST_TO_ADDR
// temp_list = UnitFilter ( [ Olaf , Dwayne ] diff 0 , [ f_lives , 1 ] ) ;
66762: LD_ADDR_VAR 0 6
66766: PUSH
66767: LD_EXP 16
66771: PUSH
66772: LD_EXP 17
66776: PUSH
66777: EMPTY
66778: LIST
66779: LIST
66780: PUSH
66781: LD_INT 0
66783: DIFF
66784: PPUSH
66785: LD_INT 24
66787: PUSH
66788: LD_INT 1
66790: PUSH
66791: EMPTY
66792: LIST
66793: LIST
66794: PPUSH
66795: CALL_OW 72
66799: ST_TO_ADDR
// DialogueOn ;
66800: CALL_OW 6
// if temp_list > 0 then
66804: LD_VAR 0 6
66808: PUSH
66809: LD_INT 0
66811: GREATER
66812: IFFALSE 67079
// begin temp_list_2 = [ ] ;
66814: LD_ADDR_VAR 0 10
66818: PUSH
66819: EMPTY
66820: ST_TO_ADDR
// for i in temp_list do
66821: LD_ADDR_VAR 0 4
66825: PUSH
66826: LD_VAR 0 6
66830: PUSH
66831: FOR_IN
66832: IFFALSE 66869
// if IsInUnit ( i ) = dismantle_fact then
66834: LD_VAR 0 4
66838: PPUSH
66839: CALL_OW 310
66843: PUSH
66844: LD_VAR 0 8
66848: EQUAL
66849: IFFALSE 66867
// temp_list_2 = temp_list_2 ^ i ;
66851: LD_ADDR_VAR 0 10
66855: PUSH
66856: LD_VAR 0 10
66860: PUSH
66861: LD_VAR 0 4
66865: ADD
66866: ST_TO_ADDR
66867: GO 66831
66869: POP
66870: POP
// if temp_list_2 > 0 then
66871: LD_VAR 0 10
66875: PUSH
66876: LD_INT 0
66878: GREATER
66879: IFFALSE 66891
// temp_list = temp_list_2 ;
66881: LD_ADDR_VAR 0 6
66885: PUSH
66886: LD_VAR 0 10
66890: ST_TO_ADDR
// un = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
66891: LD_ADDR_VAR 0 5
66895: PUSH
66896: LD_VAR 0 6
66900: PUSH
66901: LD_INT 1
66903: PPUSH
66904: LD_VAR 0 6
66908: PUSH
66909: LD_INT 0
66911: PLUS
66912: PPUSH
66913: CALL_OW 12
66917: ARRAY
66918: ST_TO_ADDR
// case un of Olaf :
66919: LD_VAR 0 5
66923: PUSH
66924: LD_EXP 16
66928: DOUBLE
66929: EQUAL
66930: IFTRUE 66934
66932: GO 66991
66934: POP
// begin ForceSay ( Olaf , D25-Ola-1 ) ;
66935: LD_EXP 16
66939: PPUSH
66940: LD_STRING D25-Ola-1
66942: PPUSH
66943: CALL_OW 91
// if louis_alive then
66947: LD_VAR 0 7
66951: IFFALSE 66989
// begin ForceSay ( Olaf , D25-Ola-2 ) ;
66953: LD_EXP 16
66957: PPUSH
66958: LD_STRING D25-Ola-2
66960: PPUSH
66961: CALL_OW 91
// ForceSay ( Heike , D25-H-1a ) ;
66965: LD_EXP 10
66969: PPUSH
66970: LD_STRING D25-H-1a
66972: PPUSH
66973: CALL_OW 91
// ForceSay ( Olaf , D25-Ola-3 ) ;
66977: LD_EXP 16
66981: PPUSH
66982: LD_STRING D25-Ola-3
66984: PPUSH
66985: CALL_OW 91
// end ; end ; Dwayne :
66989: GO 67059
66991: LD_EXP 17
66995: DOUBLE
66996: EQUAL
66997: IFTRUE 67001
66999: GO 67058
67001: POP
// begin ForceSay ( Dwayne , D25-Dw-1 ) ;
67002: LD_EXP 17
67006: PPUSH
67007: LD_STRING D25-Dw-1
67009: PPUSH
67010: CALL_OW 91
// if louis_alive then
67014: LD_VAR 0 7
67018: IFFALSE 67056
// begin ForceSay ( Dwayne , D25-Dw-2 ) ;
67020: LD_EXP 17
67024: PPUSH
67025: LD_STRING D25-Dw-2
67027: PPUSH
67028: CALL_OW 91
// ForceSay ( Heike , D25-H-1b ) ;
67032: LD_EXP 10
67036: PPUSH
67037: LD_STRING D25-H-1b
67039: PPUSH
67040: CALL_OW 91
// ForceSay ( Dwayne , D25-Dw-3 ) ;
67044: LD_EXP 17
67048: PPUSH
67049: LD_STRING D25-Dw-3
67051: PPUSH
67052: CALL_OW 91
// end ; end ; end ;
67056: GO 67059
67058: POP
// if louis_alive then
67059: LD_VAR 0 7
67063: IFFALSE 67077
// ForceSay ( Heike , D25-H-2 ) ;
67065: LD_EXP 10
67069: PPUSH
67070: LD_STRING D25-H-2
67072: PPUSH
67073: CALL_OW 91
// end else
67077: GO 67091
// ForceSay ( Makise , D25-Ch-1 ) ;
67079: LD_EXP 21
67083: PPUSH
67084: LD_STRING D25-Ch-1
67086: PPUSH
67087: CALL_OW 91
// DialogueOff ;
67091: CALL_OW 7
// wait ( 0 0$0.2 ) ;
67095: LD_INT 7
67097: PPUSH
67098: CALL_OW 67
// ChangeMissionObjectives ( M_OutImpVeh ) ;
67102: LD_STRING M_OutImpVeh
67104: PPUSH
67105: CALL_OW 337
// sib_imp_veh_dismantled = true ;
67109: LD_ADDR_EXP 117
67113: PUSH
67114: LD_INT 1
67116: ST_TO_ADDR
// SetTech ( 72 , you , state_enabled ) ;
67117: LD_INT 72
67119: PPUSH
67120: LD_EXP 2
67124: PPUSH
67125: LD_INT 1
67127: PPUSH
67128: CALL_OW 322
// until true ;
67132: LD_INT 1
67134: IFFALSE 66428
// end ;
67136: PPOPN 10
67138: END
// every 0 0$1 + 0 0$0.8 trigger See ( you , am_dep_2 ) do var temp_list , un ;
67139: LD_EXP 2
67143: PPUSH
67144: LD_INT 188
67146: PPUSH
67147: CALL_OW 292
67151: IFFALSE 67470
67153: GO 67155
67155: DISABLE
67156: LD_INT 0
67158: PPUSH
67159: PPUSH
// begin temp_list = UnitFilter ( [ Oswald , Kowalski , Swansson ] diff 0 , [ f_lives , 1 ] ) ;
67160: LD_ADDR_VAR 0 1
67164: PUSH
67165: LD_EXP 12
67169: PUSH
67170: LD_EXP 14
67174: PUSH
67175: LD_EXP 19
67179: PUSH
67180: EMPTY
67181: LIST
67182: LIST
67183: LIST
67184: PUSH
67185: LD_INT 0
67187: DIFF
67188: PPUSH
67189: LD_INT 24
67191: PUSH
67192: LD_INT 1
67194: PUSH
67195: EMPTY
67196: LIST
67197: LIST
67198: PPUSH
67199: CALL_OW 72
67203: ST_TO_ADDR
// if temp_list > 0 then
67204: LD_VAR 0 1
67208: PUSH
67209: LD_INT 0
67211: GREATER
67212: IFFALSE 67244
// un = temp_list [ Rand ( 1 , temp_list + 0 ) ] else
67214: LD_ADDR_VAR 0 2
67218: PUSH
67219: LD_VAR 0 1
67223: PUSH
67224: LD_INT 1
67226: PPUSH
67227: LD_VAR 0 1
67231: PUSH
67232: LD_INT 0
67234: PLUS
67235: PPUSH
67236: CALL_OW 12
67240: ARRAY
67241: ST_TO_ADDR
67242: GO 67311
// begin temp_list = UnitFilter ( GetNonmainPlayerCharacters , [ f_lives , 1 ] ) ;
67244: LD_ADDR_VAR 0 1
67248: PUSH
67249: CALL 51744 0 0
67253: PPUSH
67254: LD_INT 24
67256: PUSH
67257: LD_INT 1
67259: PUSH
67260: EMPTY
67261: LIST
67262: LIST
67263: PPUSH
67264: CALL_OW 72
67268: ST_TO_ADDR
// if temp_list > 0 then
67269: LD_VAR 0 1
67273: PUSH
67274: LD_INT 0
67276: GREATER
67277: IFFALSE 67309
// un = temp_list [ Rand ( 1 , temp_list + 0 ) ] else
67279: LD_ADDR_VAR 0 2
67283: PUSH
67284: LD_VAR 0 1
67288: PUSH
67289: LD_INT 1
67291: PPUSH
67292: LD_VAR 0 1
67296: PUSH
67297: LD_INT 0
67299: PLUS
67300: PPUSH
67301: CALL_OW 12
67305: ARRAY
67306: ST_TO_ADDR
67307: GO 67311
// exit ;
67309: GO 67470
// end ; DialogueOn ;
67311: CALL_OW 6
// CenterOnUnits ( am_dep_2 ) ;
67315: LD_INT 188
67317: PPUSH
67318: CALL_OW 85
// case un of Oswald :
67322: LD_VAR 0 2
67326: PUSH
67327: LD_EXP 12
67331: DOUBLE
67332: EQUAL
67333: IFTRUE 67337
67335: GO 67352
67337: POP
// ForceSay ( un , D22-Os-1 ) ; Kowalski :
67338: LD_VAR 0 2
67342: PPUSH
67343: LD_STRING D22-Os-1
67345: PPUSH
67346: CALL_OW 91
67350: GO 67454
67352: LD_EXP 14
67356: DOUBLE
67357: EQUAL
67358: IFTRUE 67362
67360: GO 67377
67362: POP
// ForceSay ( un , D22-Ko-1 ) ; Swansson :
67363: LD_VAR 0 2
67367: PPUSH
67368: LD_STRING D22-Ko-1
67370: PPUSH
67371: CALL_OW 91
67375: GO 67454
67377: LD_EXP 19
67381: DOUBLE
67382: EQUAL
67383: IFTRUE 67387
67385: GO 67402
67387: POP
// ForceSay ( un , D22-Sw-1 ) ; else
67388: LD_VAR 0 2
67392: PPUSH
67393: LD_STRING D22-Sw-1
67395: PPUSH
67396: CALL_OW 91
67400: GO 67454
67402: POP
// if un > 0 then
67403: LD_VAR 0 2
67407: PUSH
67408: LD_INT 0
67410: GREATER
67411: IFFALSE 67454
// if GetSex ( un ) = sex_male then
67413: LD_VAR 0 2
67417: PPUSH
67418: CALL_OW 258
67422: PUSH
67423: LD_INT 1
67425: EQUAL
67426: IFFALSE 67442
// ForceSay ( un , D22-SomeM-1 ) else
67428: LD_VAR 0 2
67432: PPUSH
67433: LD_STRING D22-SomeM-1
67435: PPUSH
67436: CALL_OW 91
67440: GO 67454
// ForceSay ( un , D22-SomeF-1 ) ; end ;
67442: LD_VAR 0 2
67446: PPUSH
67447: LD_STRING D22-SomeF-1
67449: PPUSH
67450: CALL_OW 91
// ForceSay ( Heike , D22-H-1 ) ;
67454: LD_EXP 10
67458: PPUSH
67459: LD_STRING D22-H-1
67461: PPUSH
67462: CALL_OW 91
// DialogueOfF ;
67466: CALL_OW 7
// end ;
67470: PPOPN 2
67472: END
// every 0 0$1.6 trigger current_attack_num = 5 do var i , lab , base , timeout , val ; var sib_lab , research_time , started_tick ;
67473: LD_EXP 115
67477: PUSH
67478: LD_INT 5
67480: EQUAL
67481: IFFALSE 68292
67483: GO 67485
67485: DISABLE
67486: LD_INT 0
67488: PPUSH
67489: PPUSH
67490: PPUSH
67491: PPUSH
67492: PPUSH
67493: PPUSH
67494: PPUSH
67495: PPUSH
// begin sib_lab = [ 0 , 0 , 0 , 0 ] ;
67496: LD_ADDR_VAR 0 6
67500: PUSH
67501: LD_INT 0
67503: PUSH
67504: LD_INT 0
67506: PUSH
67507: LD_INT 0
67509: PUSH
67510: LD_INT 0
67512: PUSH
67513: EMPTY
67514: LIST
67515: LIST
67516: LIST
67517: LIST
67518: ST_TO_ADDR
// for i in [ GetBaseSide ( 2 ) ] do
67519: LD_ADDR_VAR 0 1
67523: PUSH
67524: LD_INT 2
67526: PPUSH
67527: CALL 18937 0 1
67531: PUSH
67532: EMPTY
67533: LIST
67534: PUSH
67535: FOR_IN
67536: IFFALSE 67615
// begin SetTech ( tech_sibdet , i , state_researched ) ;
67538: LD_INT 20
67540: PPUSH
67541: LD_VAR 0 1
67545: PPUSH
67546: LD_INT 2
67548: PPUSH
67549: CALL_OW 322
// SetTech ( tech_sibpow , i , state_researched ) ;
67553: LD_INT 21
67555: PPUSH
67556: LD_VAR 0 1
67560: PPUSH
67561: LD_INT 2
67563: PPUSH
67564: CALL_OW 322
// SetTech ( tech_sibeng , i , state_researched ) ;
67568: LD_INT 22
67570: PPUSH
67571: LD_VAR 0 1
67575: PPUSH
67576: LD_INT 2
67578: PPUSH
67579: CALL_OW 322
// SetTech ( tech_gun , i , state_researched ) ;
67583: LD_INT 39
67585: PPUSH
67586: LD_VAR 0 1
67590: PPUSH
67591: LD_INT 2
67593: PPUSH
67594: CALL_OW 322
// SetTech ( tech_rocket , i , state_researched ) ;
67598: LD_INT 40
67600: PPUSH
67601: LD_VAR 0 1
67605: PPUSH
67606: LD_INT 2
67608: PPUSH
67609: CALL_OW 322
// end ;
67613: GO 67535
67615: POP
67616: POP
// started_tick = tick ;
67617: LD_ADDR_VAR 0 8
67621: PUSH
67622: LD_OWVAR 1
67626: ST_TO_ADDR
// research_time = [ 4 4$30 + 9 9$0 + 11 11$0 , 3 3$0 + 6 6$30 + 8 8$30 , 1 1$30 + 4 4$0 + 6 6$0 ] [ difficulty ] ;
67627: LD_ADDR_VAR 0 7
67631: PUSH
67632: LD_INT 9450
67634: PUSH
67635: LD_INT 18900
67637: PLUS
67638: PUSH
67639: LD_INT 23100
67641: PLUS
67642: PUSH
67643: LD_INT 6300
67645: PUSH
67646: LD_INT 13650
67648: PLUS
67649: PUSH
67650: LD_INT 17850
67652: PLUS
67653: PUSH
67654: LD_INT 3150
67656: PUSH
67657: LD_INT 8400
67659: PLUS
67660: PUSH
67661: LD_INT 12600
67663: PLUS
67664: PUSH
67665: EMPTY
67666: LIST
67667: LIST
67668: LIST
67669: PUSH
67670: LD_OWVAR 67
67674: ARRAY
67675: ST_TO_ADDR
// research_time = research_time - 4 4$0 ;
67676: LD_ADDR_VAR 0 7
67680: PUSH
67681: LD_VAR 0 7
67685: PUSH
67686: LD_INT 8400
67688: MINUS
67689: ST_TO_ADDR
// repeat wait ( 0 0$3 ) ;
67690: LD_INT 105
67692: PPUSH
67693: CALL_OW 67
// if not 2 in ai_bases then
67697: LD_INT 2
67699: PUSH
67700: LD_EXP 26
67704: IN
67705: NOT
67706: IFFALSE 67710
// exit ;
67708: GO 68292
// for base in [ 2 ] do
67710: LD_ADDR_VAR 0 3
67714: PUSH
67715: LD_INT 2
67717: PUSH
67718: EMPTY
67719: LIST
67720: PUSH
67721: FOR_IN
67722: IFFALSE 68286
// begin if not base in ai_bases then
67724: LD_VAR 0 3
67728: PUSH
67729: LD_EXP 26
67733: IN
67734: NOT
67735: IFFALSE 67739
// continue ;
67737: GO 67721
// if not Researched ( GetBaseSide ( base ) , tech_sibfiss ) then
67739: LD_VAR 0 3
67743: PPUSH
67744: CALL 18937 0 1
67748: PPUSH
67749: LD_INT 25
67751: PPUSH
67752: CALL_OW 325
67756: NOT
67757: IFFALSE 68120
// begin if tick < timeout - 25 25$0 then
67759: LD_OWVAR 1
67763: PUSH
67764: LD_VAR 0 4
67768: PUSH
67769: LD_INT 52500
67771: MINUS
67772: LESS
67773: IFFALSE 67777
// continue ;
67775: GO 67721
// if IsDead ( sib_lab [ base ] ) or GetSide ( sib_lab [ base ] ) <> GetBaseSide ( base ) then
67777: LD_VAR 0 6
67781: PUSH
67782: LD_VAR 0 3
67786: ARRAY
67787: PPUSH
67788: CALL_OW 301
67792: PUSH
67793: LD_VAR 0 6
67797: PUSH
67798: LD_VAR 0 3
67802: ARRAY
67803: PPUSH
67804: CALL_OW 255
67808: PUSH
67809: LD_VAR 0 3
67813: PPUSH
67814: CALL 18937 0 1
67818: NONEQUAL
67819: OR
67820: IFFALSE 67845
// sib_lab = Replace ( sib_lab , base , 0 ) ;
67822: LD_ADDR_VAR 0 6
67826: PUSH
67827: LD_VAR 0 6
67831: PPUSH
67832: LD_VAR 0 3
67836: PPUSH
67837: LD_INT 0
67839: PPUSH
67840: CALL_OW 1
67844: ST_TO_ADDR
// if sib_lab [ base ] = 0 then
67845: LD_VAR 0 6
67849: PUSH
67850: LD_VAR 0 3
67854: ARRAY
67855: PUSH
67856: LD_INT 0
67858: EQUAL
67859: IFFALSE 67990
// begin for i in UnitFilter ( ai_all_buildings [ base ] , [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] , [ f_btype , b_lab_full ] ] ) do
67861: LD_ADDR_VAR 0 1
67865: PUSH
67866: LD_EXP 62
67870: PUSH
67871: LD_VAR 0 3
67875: ARRAY
67876: PPUSH
67877: LD_INT 2
67879: PUSH
67880: LD_INT 30
67882: PUSH
67883: LD_INT 6
67885: PUSH
67886: EMPTY
67887: LIST
67888: LIST
67889: PUSH
67890: LD_INT 30
67892: PUSH
67893: LD_INT 7
67895: PUSH
67896: EMPTY
67897: LIST
67898: LIST
67899: PUSH
67900: LD_INT 30
67902: PUSH
67903: LD_INT 8
67905: PUSH
67906: EMPTY
67907: LIST
67908: LIST
67909: PUSH
67910: EMPTY
67911: LIST
67912: LIST
67913: LIST
67914: LIST
67915: PPUSH
67916: CALL_OW 72
67920: PUSH
67921: FOR_IN
67922: IFFALSE 67988
// if b_lab_siberium in [ GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) ] then
67924: LD_INT 11
67926: PUSH
67927: LD_VAR 0 1
67931: PPUSH
67932: LD_INT 1
67934: PPUSH
67935: CALL_OW 268
67939: PUSH
67940: LD_VAR 0 1
67944: PPUSH
67945: LD_INT 2
67947: PPUSH
67948: CALL_OW 268
67952: PUSH
67953: EMPTY
67954: LIST
67955: LIST
67956: IN
67957: IFFALSE 67986
// begin sib_lab = Replace ( sib_lab , base , i ) ;
67959: LD_ADDR_VAR 0 6
67963: PUSH
67964: LD_VAR 0 6
67968: PPUSH
67969: LD_VAR 0 3
67973: PPUSH
67974: LD_VAR 0 1
67978: PPUSH
67979: CALL_OW 1
67983: ST_TO_ADDR
// break ;
67984: GO 67988
// end ;
67986: GO 67921
67988: POP
67989: POP
// end ; if IsOk ( sib_lab [ base ] ) then
67990: LD_VAR 0 6
67994: PUSH
67995: LD_VAR 0 3
67999: ARRAY
68000: PPUSH
68001: CALL_OW 302
68005: IFFALSE 68118
// begin if IsIdle ( sib_lab [ base ] ) then
68007: LD_VAR 0 6
68011: PUSH
68012: LD_VAR 0 3
68016: ARRAY
68017: PPUSH
68018: CALL_OW 316
68022: IFFALSE 68044
// ComResearch ( sib_lab [ base ] , tech_sibfiss ) else
68024: LD_VAR 0 6
68028: PUSH
68029: LD_VAR 0 3
68033: ARRAY
68034: PPUSH
68035: LD_INT 25
68037: PPUSH
68038: CALL_OW 124
68042: GO 68118
// if UnitsInside ( sib_lab [ base ] ) > 0 then
68044: LD_VAR 0 6
68048: PUSH
68049: LD_VAR 0 3
68053: ARRAY
68054: PPUSH
68055: CALL_OW 313
68059: PUSH
68060: LD_INT 0
68062: GREATER
68063: IFFALSE 68118
// begin i = RoundToInteger ( ( ( tick - started_tick ) / research_time ) * 100 ) ;
68065: LD_ADDR_VAR 0 1
68069: PUSH
68070: LD_OWVAR 1
68074: PUSH
68075: LD_VAR 0 8
68079: MINUS
68080: PUSH
68081: LD_VAR 0 7
68085: DIVREAL
68086: PUSH
68087: LD_INT 100
68089: MUL
68090: PPUSH
68091: CALL 68295 0 1
68095: ST_TO_ADDR
// SetTechProgress ( tech_sibfiss , GetBaseSide ( base ) , i ) ;
68096: LD_INT 25
68098: PPUSH
68099: LD_VAR 0 3
68103: PPUSH
68104: CALL 18937 0 1
68108: PPUSH
68109: LD_VAR 0 1
68113: PPUSH
68114: CALL_OW 327
// end ; end ; end else
68118: GO 68284
// begin if ai_sib_bomb_vehicles [ base ] = 0 then
68120: LD_EXP 93
68124: PUSH
68125: LD_VAR 0 3
68129: ARRAY
68130: PUSH
68131: LD_INT 0
68133: EQUAL
68134: IFFALSE 68284
// begin if IsOk ( ai_sib_bomb_fact [ base ] ) and GetBType ( ai_sib_bomb_fact [ base ] ) = b_factory and IsIdle ( ai_sib_bomb_fact [ base ] ) then
68136: LD_EXP 50
68140: PUSH
68141: LD_VAR 0 3
68145: ARRAY
68146: PPUSH
68147: CALL_OW 302
68151: PUSH
68152: LD_EXP 50
68156: PUSH
68157: LD_VAR 0 3
68161: ARRAY
68162: PPUSH
68163: CALL_OW 266
68167: PUSH
68168: LD_INT 3
68170: EQUAL
68171: AND
68172: PUSH
68173: LD_EXP 50
68177: PUSH
68178: LD_VAR 0 3
68182: ARRAY
68183: PPUSH
68184: CALL_OW 316
68188: AND
68189: IFFALSE 68284
// case GetNation ( ai_sib_bomb_fact [ base ] ) of nation_american :
68191: LD_EXP 50
68195: PUSH
68196: LD_VAR 0 3
68200: ARRAY
68201: PPUSH
68202: CALL_OW 248
68206: PUSH
68207: LD_INT 1
68209: DOUBLE
68210: EQUAL
68211: IFTRUE 68215
68213: GO 68245
68215: POP
// ComConstruct ( ai_sib_bomb_fact [ base ] , us_heavy_tracked , engine_siberite , control_manual , us_siberium_rocket ) ; nation_russian :
68216: LD_EXP 50
68220: PUSH
68221: LD_VAR 0 3
68225: ARRAY
68226: PPUSH
68227: LD_INT 4
68229: PPUSH
68230: LD_INT 3
68232: PPUSH
68233: LD_INT 1
68235: PPUSH
68236: LD_INT 8
68238: PPUSH
68239: CALL_OW 125
68243: GO 68284
68245: LD_INT 3
68247: DOUBLE
68248: EQUAL
68249: IFTRUE 68253
68251: GO 68283
68253: POP
// ComConstruct ( ai_sib_bomb_fact [ base ] , ru_heavy_tracked , engine_siberite , control_manual , ru_siberium_rocket ) ; end ;
68254: LD_EXP 50
68258: PUSH
68259: LD_VAR 0 3
68263: ARRAY
68264: PPUSH
68265: LD_INT 24
68267: PPUSH
68268: LD_INT 3
68270: PPUSH
68271: LD_INT 1
68273: PPUSH
68274: LD_INT 48
68276: PPUSH
68277: CALL_OW 125
68281: GO 68284
68283: POP
// end ; end ; end ;
68284: GO 67721
68286: POP
68287: POP
// until false ;
68288: LD_INT 0
68290: IFFALSE 67690
// end ;
68292: PPOPN 8
68294: END
// function RoundToInteger ( num ) ; begin
68295: LD_INT 0
68297: PPUSH
// result = num div 1 ;
68298: LD_ADDR_VAR 0 2
68302: PUSH
68303: LD_VAR 0 1
68307: PUSH
68308: LD_INT 1
68310: DIV
68311: ST_TO_ADDR
// end ; end_of_file
68312: LD_VAR 0 2
68316: RET
// var art_icon_lab , art_research_lab , art_icon_research , art_research_progress , art_research_difficulty ; export function InitArtifactVariables ; begin
68317: LD_INT 0
68319: PPUSH
// art_icon_lab = [ [ ] , - 1 , - 1 , 0 , - 1 ] ;
68320: LD_ADDR_LOC 3
68324: PUSH
68325: EMPTY
68326: PUSH
68327: LD_INT 1
68329: NEG
68330: PUSH
68331: LD_INT 1
68333: NEG
68334: PUSH
68335: LD_INT 0
68337: PUSH
68338: LD_INT 1
68340: NEG
68341: PUSH
68342: EMPTY
68343: LIST
68344: LIST
68345: LIST
68346: LIST
68347: LIST
68348: ST_TO_ADDR
// art_research_lab = [ 0 , - 1 , - 1 , 0 , - 1 ] ;
68349: LD_ADDR_LOC 4
68353: PUSH
68354: LD_INT 0
68356: PUSH
68357: LD_INT 1
68359: NEG
68360: PUSH
68361: LD_INT 1
68363: NEG
68364: PUSH
68365: LD_INT 0
68367: PUSH
68368: LD_INT 1
68370: NEG
68371: PUSH
68372: EMPTY
68373: LIST
68374: LIST
68375: LIST
68376: LIST
68377: LIST
68378: ST_TO_ADDR
// art_icon_research = [ - 1 , - 1 , - 1 , art_exp_mid , - 1 ] ;
68379: LD_ADDR_LOC 5
68383: PUSH
68384: LD_INT 1
68386: NEG
68387: PUSH
68388: LD_INT 1
68390: NEG
68391: PUSH
68392: LD_INT 1
68394: NEG
68395: PUSH
68396: LD_INT 2
68398: PUSH
68399: LD_INT 1
68401: NEG
68402: PUSH
68403: EMPTY
68404: LIST
68405: LIST
68406: LIST
68407: LIST
68408: LIST
68409: ST_TO_ADDR
// art_research_progress = [ - 1 , - 1 , - 1 , 0 , - 1 ] ;
68410: LD_ADDR_LOC 6
68414: PUSH
68415: LD_INT 1
68417: NEG
68418: PUSH
68419: LD_INT 1
68421: NEG
68422: PUSH
68423: LD_INT 1
68425: NEG
68426: PUSH
68427: LD_INT 0
68429: PUSH
68430: LD_INT 1
68432: NEG
68433: PUSH
68434: EMPTY
68435: LIST
68436: LIST
68437: LIST
68438: LIST
68439: LIST
68440: ST_TO_ADDR
// art_research_difficulty = [ - 1 , - 1 , - 1 , 400 , - 1 ] ;
68441: LD_ADDR_LOC 7
68445: PUSH
68446: LD_INT 1
68448: NEG
68449: PUSH
68450: LD_INT 1
68452: NEG
68453: PUSH
68454: LD_INT 1
68456: NEG
68457: PUSH
68458: LD_INT 400
68460: PUSH
68461: LD_INT 1
68463: NEG
68464: PUSH
68465: EMPTY
68466: LIST
68467: LIST
68468: LIST
68469: LIST
68470: LIST
68471: ST_TO_ADDR
// end ;
68472: LD_VAR 0 1
68476: RET
// on ArtifactLoaded ( cargo_bay , artifact ) do var i , temp_list ;
68477: LD_INT 0
68479: PPUSH
68480: PPUSH
// begin if GetTech ( tech_artifact , you ) <> state_researched then
68481: LD_INT 24
68483: PPUSH
68484: LD_EXP 2
68488: PPUSH
68489: CALL_OW 321
68493: PUSH
68494: LD_INT 2
68496: NONEQUAL
68497: IFFALSE 68589
// begin art_icon_lab = Replace ( art_icon_lab , 1 , [ ] ) ;
68499: LD_ADDR_LOC 3
68503: PUSH
68504: LD_LOC 3
68508: PPUSH
68509: LD_INT 1
68511: PPUSH
68512: EMPTY
68513: PPUSH
68514: CALL_OW 1
68518: ST_TO_ADDR
// for i = 3 to 5 do
68519: LD_ADDR_VAR 0 3
68523: PUSH
68524: DOUBLE
68525: LD_INT 3
68527: DEC
68528: ST_TO_ADDR
68529: LD_INT 5
68531: PUSH
68532: FOR_TO
68533: IFFALSE 68546
// ArtifactUnloaded_ArtiFunc ( i ) ;
68535: LD_VAR 0 3
68539: PPUSH
68540: CALL 68756 0 1
68544: GO 68532
68546: POP
68547: POP
// if art_icon_lab [ 1 ] = 0 then
68548: LD_LOC 3
68552: PUSH
68553: LD_INT 1
68555: ARRAY
68556: PUSH
68557: LD_INT 0
68559: EQUAL
68560: IFFALSE 68587
// begin ComCancel ( art_research_lab [ 1 ] ) ;
68562: LD_LOC 4
68566: PUSH
68567: LD_INT 1
68569: ARRAY
68570: PPUSH
68571: CALL_OW 127
// SetArtifactRes ( you , false ) ;
68575: LD_EXP 2
68579: PPUSH
68580: LD_INT 0
68582: PPUSH
68583: CALL_OW 467
// end ; end else
68587: GO 68741
// if art_icon_lab [ artifact ] > 0 or art_research_lab [ artifact ] > 0 then
68589: LD_LOC 3
68593: PUSH
68594: LD_VAR 0 2
68598: ARRAY
68599: PUSH
68600: LD_INT 0
68602: GREATER
68603: PUSH
68604: LD_LOC 4
68608: PUSH
68609: LD_VAR 0 2
68613: ARRAY
68614: PUSH
68615: LD_INT 0
68617: GREATER
68618: OR
68619: IFFALSE 68741
// begin if art_research_progress [ artifact ] < 100 then
68621: LD_LOC 6
68625: PUSH
68626: LD_VAR 0 2
68630: ARRAY
68631: PUSH
68632: LD_INT 100
68634: LESS
68635: IFFALSE 68718
// begin if art_research_lab [ artifact ] > 0 then
68637: LD_LOC 4
68641: PUSH
68642: LD_VAR 0 2
68646: ARRAY
68647: PUSH
68648: LD_INT 0
68650: GREATER
68651: IFFALSE 68668
// ComCancel ( art_research_lab [ artifact ] ) ;
68653: LD_LOC 4
68657: PUSH
68658: LD_VAR 0 2
68662: ARRAY
68663: PPUSH
68664: CALL_OW 127
// if art_icon_lab [ artifact ] > 0 then
68668: LD_LOC 3
68672: PUSH
68673: LD_VAR 0 2
68677: ARRAY
68678: PUSH
68679: LD_INT 0
68681: GREATER
68682: IFFALSE 68718
// SetArtifactUse ( you , art_icon_research [ artifact ] , art_no , art_icon_lab [ artifact ] ) ;
68684: LD_EXP 2
68688: PPUSH
68689: LD_LOC 5
68693: PUSH
68694: LD_VAR 0 2
68698: ARRAY
68699: PPUSH
68700: LD_INT 0
68702: PPUSH
68703: LD_LOC 3
68707: PUSH
68708: LD_VAR 0 2
68712: ARRAY
68713: PPUSH
68714: CALL_OW 468
// end ; art_icon_lab = Replace ( art_icon_lab , artifact , 0 ) ;
68718: LD_ADDR_LOC 3
68722: PUSH
68723: LD_LOC 3
68727: PPUSH
68728: LD_VAR 0 2
68732: PPUSH
68733: LD_INT 0
68735: PPUSH
68736: CALL_OW 1
68740: ST_TO_ADDR
// end ; end ;
68741: PPOPN 4
68743: END
// on ArtifactUnloaded ( cargo_bay , artifact ) do begin ArtifactUnloaded_ArtiFunc ( artifact ) ;
68744: LD_VAR 0 2
68748: PPUSH
68749: CALL 68756 0 1
// end ;
68753: PPOPN 2
68755: END
// function ArtifactUnloaded_ArtiFunc ( artifact ) ; var sib_labs , i , loc , un , temp_list ; begin
68756: LD_INT 0
68758: PPUSH
68759: PPUSH
68760: PPUSH
68761: PPUSH
68762: PPUSH
68763: PPUSH
// loc = FindArtifact ( artifact ) ;
68764: LD_ADDR_VAR 0 5
68768: PUSH
68769: LD_VAR 0 1
68773: PPUSH
68774: CALL_OW 469
68778: ST_TO_ADDR
// if loc > 0 then
68779: LD_VAR 0 5
68783: PUSH
68784: LD_INT 0
68786: GREATER
68787: IFFALSE 69217
// begin sib_labs = [ ] ;
68789: LD_ADDR_VAR 0 3
68793: PUSH
68794: EMPTY
68795: ST_TO_ADDR
// for i in GetHexesNearHex ( loc [ 1 ] , loc [ 2 ] , 3 ) do
68796: LD_ADDR_VAR 0 4
68800: PUSH
68801: LD_VAR 0 5
68805: PUSH
68806: LD_INT 1
68808: ARRAY
68809: PPUSH
68810: LD_VAR 0 5
68814: PUSH
68815: LD_INT 2
68817: ARRAY
68818: PPUSH
68819: LD_INT 3
68821: PPUSH
68822: CALL 15078 0 3
68826: PUSH
68827: FOR_IN
68828: IFFALSE 68972
// begin un = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
68830: LD_ADDR_VAR 0 6
68834: PUSH
68835: LD_VAR 0 4
68839: PUSH
68840: LD_INT 1
68842: ARRAY
68843: PPUSH
68844: LD_VAR 0 4
68848: PUSH
68849: LD_INT 2
68851: ARRAY
68852: PPUSH
68853: CALL_OW 428
68857: ST_TO_ADDR
// if un > 0 then
68858: LD_VAR 0 6
68862: PUSH
68863: LD_INT 0
68865: GREATER
68866: IFFALSE 68970
// begin if GetSide ( un ) = you and GetBType ( un ) in [ b_lab_half , b_lab_full ] and b_lab_siberium in [ GetLabKind ( un , 1 ) , GetLabKind ( un , 2 ) ] and not IsConstructed ( un ) then
68868: LD_VAR 0 6
68872: PPUSH
68873: CALL_OW 255
68877: PUSH
68878: LD_EXP 2
68882: EQUAL
68883: PUSH
68884: LD_VAR 0 6
68888: PPUSH
68889: CALL_OW 266
68893: PUSH
68894: LD_INT 7
68896: PUSH
68897: LD_INT 8
68899: PUSH
68900: EMPTY
68901: LIST
68902: LIST
68903: IN
68904: AND
68905: PUSH
68906: LD_INT 11
68908: PUSH
68909: LD_VAR 0 6
68913: PPUSH
68914: LD_INT 1
68916: PPUSH
68917: CALL_OW 268
68921: PUSH
68922: LD_VAR 0 6
68926: PPUSH
68927: LD_INT 2
68929: PPUSH
68930: CALL_OW 268
68934: PUSH
68935: EMPTY
68936: LIST
68937: LIST
68938: IN
68939: AND
68940: PUSH
68941: LD_VAR 0 6
68945: PPUSH
68946: CALL_OW 304
68950: NOT
68951: AND
68952: IFFALSE 68970
// sib_labs = sib_labs ^ un ;
68954: LD_ADDR_VAR 0 3
68958: PUSH
68959: LD_VAR 0 3
68963: PUSH
68964: LD_VAR 0 6
68968: ADD
68969: ST_TO_ADDR
// end ; end ;
68970: GO 68827
68972: POP
68973: POP
// if sib_labs > 0 then
68974: LD_VAR 0 3
68978: PUSH
68979: LD_INT 0
68981: GREATER
68982: IFFALSE 69217
// begin if GetTech ( tech_artifact , you ) <> state_researched then
68984: LD_INT 24
68986: PPUSH
68987: LD_EXP 2
68991: PPUSH
68992: CALL_OW 321
68996: PUSH
68997: LD_INT 2
68999: NONEQUAL
69000: IFFALSE 69059
// begin SetArtifactRes ( you , true ) ;
69002: LD_EXP 2
69006: PPUSH
69007: LD_INT 1
69009: PPUSH
69010: CALL_OW 467
// temp_list = art_icon_lab [ 1 ] union sib_labs ;
69014: LD_ADDR_VAR 0 7
69018: PUSH
69019: LD_LOC 3
69023: PUSH
69024: LD_INT 1
69026: ARRAY
69027: PUSH
69028: LD_VAR 0 3
69032: UNION
69033: ST_TO_ADDR
// art_icon_lab = Replace ( art_icon_lab , 1 , temp_list ) ;
69034: LD_ADDR_LOC 3
69038: PUSH
69039: LD_LOC 3
69043: PPUSH
69044: LD_INT 1
69046: PPUSH
69047: LD_VAR 0 7
69051: PPUSH
69052: CALL_OW 1
69056: ST_TO_ADDR
// end else
69057: GO 69217
// begin temp_list = sib_labs diff art_research_lab ;
69059: LD_ADDR_VAR 0 7
69063: PUSH
69064: LD_VAR 0 3
69068: PUSH
69069: LD_LOC 4
69073: DIFF
69074: ST_TO_ADDR
// sib_labs = [ ] ;
69075: LD_ADDR_VAR 0 3
69079: PUSH
69080: EMPTY
69081: ST_TO_ADDR
// for i in temp_list do
69082: LD_ADDR_VAR 0 4
69086: PUSH
69087: LD_VAR 0 7
69091: PUSH
69092: FOR_IN
69093: IFFALSE 69128
// if BuildingStatus ( i ) = bs_idle then
69095: LD_VAR 0 4
69099: PPUSH
69100: CALL_OW 461
69104: PUSH
69105: LD_INT 2
69107: EQUAL
69108: IFFALSE 69126
// sib_labs = sib_labs ^ i ;
69110: LD_ADDR_VAR 0 3
69114: PUSH
69115: LD_VAR 0 3
69119: PUSH
69120: LD_VAR 0 4
69124: ADD
69125: ST_TO_ADDR
69126: GO 69092
69128: POP
69129: POP
// if art_research_progress [ artifact ] < 100 then
69130: LD_LOC 6
69134: PUSH
69135: LD_VAR 0 1
69139: ARRAY
69140: PUSH
69141: LD_INT 100
69143: LESS
69144: IFFALSE 69217
// begin if sib_labs > 0 then
69146: LD_VAR 0 3
69150: PUSH
69151: LD_INT 0
69153: GREATER
69154: IFFALSE 69217
// begin SetArtifactUse ( you , art_icon_research [ artifact ] , art_instant , sib_labs [ 1 ] ) ;
69156: LD_EXP 2
69160: PPUSH
69161: LD_LOC 5
69165: PUSH
69166: LD_VAR 0 1
69170: ARRAY
69171: PPUSH
69172: LD_INT 2
69174: PPUSH
69175: LD_VAR 0 3
69179: PUSH
69180: LD_INT 1
69182: ARRAY
69183: PPUSH
69184: CALL_OW 468
// art_icon_lab = Replace ( art_icon_lab , artifact , sib_labs [ 1 ] ) ;
69188: LD_ADDR_LOC 3
69192: PUSH
69193: LD_LOC 3
69197: PPUSH
69198: LD_VAR 0 1
69202: PPUSH
69203: LD_VAR 0 3
69207: PUSH
69208: LD_INT 1
69210: ARRAY
69211: PPUSH
69212: CALL_OW 1
69216: ST_TO_ADDR
// end ; end ; end ; end ; end ; end ;
69217: LD_VAR 0 2
69221: RET
// on ResearchStarted ( tech , lab ) do var i ;
69222: LD_INT 0
69224: PPUSH
// begin if tech = tech_artifact and GetSide ( lab ) = you then
69225: LD_VAR 0 1
69229: PUSH
69230: LD_INT 24
69232: EQUAL
69233: PUSH
69234: LD_VAR 0 2
69238: PPUSH
69239: CALL_OW 255
69243: PUSH
69244: LD_EXP 2
69248: EQUAL
69249: AND
69250: IFFALSE 69275
// begin art_research_lab = Replace ( art_research_lab , 1 , lab ) ;
69252: LD_ADDR_LOC 4
69256: PUSH
69257: LD_LOC 4
69261: PPUSH
69262: LD_INT 1
69264: PPUSH
69265: LD_VAR 0 2
69269: PPUSH
69270: CALL_OW 1
69274: ST_TO_ADDR
// end ; for i = 3 to 5 do
69275: LD_ADDR_VAR 0 3
69279: PUSH
69280: DOUBLE
69281: LD_INT 3
69283: DEC
69284: ST_TO_ADDR
69285: LD_INT 5
69287: PUSH
69288: FOR_TO
69289: IFFALSE 69368
// if art_icon_lab [ i ] = lab then
69291: LD_LOC 3
69295: PUSH
69296: LD_VAR 0 3
69300: ARRAY
69301: PUSH
69302: LD_VAR 0 2
69306: EQUAL
69307: IFFALSE 69366
// begin SetArtifactUse ( you , art_icon_research [ i ] , art_no , art_icon_lab [ i ] ) ;
69309: LD_EXP 2
69313: PPUSH
69314: LD_LOC 5
69318: PUSH
69319: LD_VAR 0 3
69323: ARRAY
69324: PPUSH
69325: LD_INT 0
69327: PPUSH
69328: LD_LOC 3
69332: PUSH
69333: LD_VAR 0 3
69337: ARRAY
69338: PPUSH
69339: CALL_OW 468
// art_icon_lab = Replace ( art_icon_lab , i , 0 ) ;
69343: LD_ADDR_LOC 3
69347: PUSH
69348: LD_LOC 3
69352: PPUSH
69353: LD_VAR 0 3
69357: PPUSH
69358: LD_INT 0
69360: PPUSH
69361: CALL_OW 1
69365: ST_TO_ADDR
// end ;
69366: GO 69288
69368: POP
69369: POP
// end ;
69370: PPOPN 3
69372: END
// on ResearchCancel ( tech , lab ) do var i ;
69373: LD_INT 0
69375: PPUSH
// begin if tech = tech_artifact and GetSide ( lab ) = you then
69376: LD_VAR 0 1
69380: PUSH
69381: LD_INT 24
69383: EQUAL
69384: PUSH
69385: LD_VAR 0 2
69389: PPUSH
69390: CALL_OW 255
69394: PUSH
69395: LD_EXP 2
69399: EQUAL
69400: AND
69401: IFFALSE 69424
// begin art_research_lab = Replace ( art_research_lab , 1 , 0 ) ;
69403: LD_ADDR_LOC 4
69407: PUSH
69408: LD_LOC 4
69412: PPUSH
69413: LD_INT 1
69415: PPUSH
69416: LD_INT 0
69418: PPUSH
69419: CALL_OW 1
69423: ST_TO_ADDR
// end ; if GetSide ( lab ) = you then
69424: LD_VAR 0 2
69428: PPUSH
69429: CALL_OW 255
69433: PUSH
69434: LD_EXP 2
69438: EQUAL
69439: IFFALSE 69477
// begin wait ( 3 ) ;
69441: LD_INT 3
69443: PPUSH
69444: CALL_OW 67
// for i = 3 to 5 do
69448: LD_ADDR_VAR 0 3
69452: PUSH
69453: DOUBLE
69454: LD_INT 3
69456: DEC
69457: ST_TO_ADDR
69458: LD_INT 5
69460: PUSH
69461: FOR_TO
69462: IFFALSE 69475
// ArtifactUnloaded_ArtiFunc ( i ) ;
69464: LD_VAR 0 3
69468: PPUSH
69469: CALL 68756 0 1
69473: GO 69461
69475: POP
69476: POP
// end ; end ;
69477: PPOPN 3
69479: END
// on ResearchComplete ( tech , lab ) do var i , temp_list ;
69480: LD_INT 0
69482: PPUSH
69483: PPUSH
// begin OnResearchComplete_BioDet ( tech , lab ) ;
69484: LD_VAR 0 1
69488: PPUSH
69489: LD_VAR 0 2
69493: PPUSH
69494: CALL 63824 0 2
// OnResearchComplete_SibCon ( tech , lab ) ;
69498: LD_VAR 0 1
69502: PPUSH
69503: LD_VAR 0 2
69507: PPUSH
69508: CALL 62263 0 2
// if GetSide ( lab ) = you then
69512: LD_VAR 0 2
69516: PPUSH
69517: CALL_OW 255
69521: PUSH
69522: LD_EXP 2
69526: EQUAL
69527: IFFALSE 69565
// begin wait ( 3 ) ;
69529: LD_INT 3
69531: PPUSH
69532: CALL_OW 67
// for i = 3 to 5 do
69536: LD_ADDR_VAR 0 3
69540: PUSH
69541: DOUBLE
69542: LD_INT 3
69544: DEC
69545: ST_TO_ADDR
69546: LD_INT 5
69548: PUSH
69549: FOR_TO
69550: IFFALSE 69563
// ArtifactUnloaded_ArtiFunc ( i ) ;
69552: LD_VAR 0 3
69556: PPUSH
69557: CALL 68756 0 1
69561: GO 69549
69563: POP
69564: POP
// end ; end ;
69565: PPOPN 4
69567: END
// on ArtifactUsed ( side , art_icon , p1 , p2 ) do var art_num , i , b , success , lab ;
69568: LD_INT 0
69570: PPUSH
69571: PPUSH
69572: PPUSH
69573: PPUSH
69574: PPUSH
// begin if art_icon in art_icon_research then
69575: LD_VAR 0 2
69579: PUSH
69580: LD_LOC 5
69584: IN
69585: IFFALSE 69814
// begin for art_num = 3 to 5 do
69587: LD_ADDR_VAR 0 5
69591: PUSH
69592: DOUBLE
69593: LD_INT 3
69595: DEC
69596: ST_TO_ADDR
69597: LD_INT 5
69599: PUSH
69600: FOR_TO
69601: IFFALSE 69625
// if art_icon = art_icon_research [ art_num ] then
69603: LD_VAR 0 2
69607: PUSH
69608: LD_LOC 5
69612: PUSH
69613: LD_VAR 0 5
69617: ARRAY
69618: EQUAL
69619: IFFALSE 69623
// break ;
69621: GO 69625
69623: GO 69600
69625: POP
69626: POP
// SetSpecResearch ( art_icon_lab [ art_num ] , art_research_difficulty [ art_num ] , true ) ;
69627: LD_LOC 3
69631: PUSH
69632: LD_VAR 0 5
69636: ARRAY
69637: PPUSH
69638: LD_LOC 7
69642: PUSH
69643: LD_VAR 0 5
69647: ARRAY
69648: PPUSH
69649: LD_INT 1
69651: PPUSH
69652: CALL_OW 486
// SetWorkingProgress ( art_icon_lab [ art_num ] , art_research_progress [ art_num ] ) ;
69656: LD_LOC 3
69660: PUSH
69661: LD_VAR 0 5
69665: ARRAY
69666: PPUSH
69667: LD_LOC 6
69671: PUSH
69672: LD_VAR 0 5
69676: ARRAY
69677: PPUSH
69678: CALL_OW 329
// art_research_lab = Replace ( art_research_lab , art_num , art_icon_lab [ art_num ] ) ;
69682: LD_ADDR_LOC 4
69686: PUSH
69687: LD_LOC 4
69691: PPUSH
69692: LD_VAR 0 5
69696: PPUSH
69697: LD_LOC 3
69701: PUSH
69702: LD_VAR 0 5
69706: ARRAY
69707: PPUSH
69708: CALL_OW 1
69712: ST_TO_ADDR
// for i = 3 to 5 do
69713: LD_ADDR_VAR 0 6
69717: PUSH
69718: DOUBLE
69719: LD_INT 3
69721: DEC
69722: ST_TO_ADDR
69723: LD_INT 5
69725: PUSH
69726: FOR_TO
69727: IFFALSE 69812
// if art_icon_lab [ i ] = art_research_lab [ art_num ] then
69729: LD_LOC 3
69733: PUSH
69734: LD_VAR 0 6
69738: ARRAY
69739: PUSH
69740: LD_LOC 4
69744: PUSH
69745: LD_VAR 0 5
69749: ARRAY
69750: EQUAL
69751: IFFALSE 69810
// begin SetArtifactUse ( you , art_icon_research [ i ] , art_no , art_icon_lab [ i ] ) ;
69753: LD_EXP 2
69757: PPUSH
69758: LD_LOC 5
69762: PUSH
69763: LD_VAR 0 6
69767: ARRAY
69768: PPUSH
69769: LD_INT 0
69771: PPUSH
69772: LD_LOC 3
69776: PUSH
69777: LD_VAR 0 6
69781: ARRAY
69782: PPUSH
69783: CALL_OW 468
// art_icon_lab = Replace ( art_icon_lab , i , 0 ) ;
69787: LD_ADDR_LOC 3
69791: PUSH
69792: LD_LOC 3
69796: PPUSH
69797: LD_VAR 0 6
69801: PPUSH
69802: LD_INT 0
69804: PPUSH
69805: CALL_OW 1
69809: ST_TO_ADDR
// end ;
69810: GO 69726
69812: POP
69813: POP
// end ; end ;
69814: PPOPN 9
69816: END
// on SpecResearchCancel ( lab , percentage_done ) do var art ;
69817: LD_INT 0
69819: PPUSH
// begin for art = 3 to art_research_lab do
69820: LD_ADDR_VAR 0 3
69824: PUSH
69825: DOUBLE
69826: LD_INT 3
69828: DEC
69829: ST_TO_ADDR
69830: LD_LOC 4
69834: PUSH
69835: FOR_TO
69836: IFFALSE 69908
// if art_research_lab [ art ] = lab then
69838: LD_LOC 4
69842: PUSH
69843: LD_VAR 0 3
69847: ARRAY
69848: PUSH
69849: LD_VAR 0 1
69853: EQUAL
69854: IFFALSE 69906
// begin art_research_progress = Replace ( art_research_progress , art , percentage_done ) ;
69856: LD_ADDR_LOC 6
69860: PUSH
69861: LD_LOC 6
69865: PPUSH
69866: LD_VAR 0 3
69870: PPUSH
69871: LD_VAR 0 2
69875: PPUSH
69876: CALL_OW 1
69880: ST_TO_ADDR
// art_research_lab = Replace ( art_research_lab , art , 0 ) ;
69881: LD_ADDR_LOC 4
69885: PUSH
69886: LD_LOC 4
69890: PPUSH
69891: LD_VAR 0 3
69895: PPUSH
69896: LD_INT 0
69898: PPUSH
69899: CALL_OW 1
69903: ST_TO_ADDR
// break ;
69904: GO 69908
// end ;
69906: GO 69835
69908: POP
69909: POP
// wait ( 3 ) ;
69910: LD_INT 3
69912: PPUSH
69913: CALL_OW 67
// for art = 3 to 5 do
69917: LD_ADDR_VAR 0 3
69921: PUSH
69922: DOUBLE
69923: LD_INT 3
69925: DEC
69926: ST_TO_ADDR
69927: LD_INT 5
69929: PUSH
69930: FOR_TO
69931: IFFALSE 69944
// ArtifactUnloaded_ArtiFunc ( art ) ;
69933: LD_VAR 0 3
69937: PPUSH
69938: CALL 68756 0 1
69942: GO 69930
69944: POP
69945: POP
// end ;
69946: PPOPN 3
69948: END
// on SpecResearchComplete ( lab ) do var i , temp_list , art , k ;
69949: LD_INT 0
69951: PPUSH
69952: PPUSH
69953: PPUSH
69954: PPUSH
// begin for art = 3 to art_research_lab do
69955: LD_ADDR_VAR 0 4
69959: PUSH
69960: DOUBLE
69961: LD_INT 3
69963: DEC
69964: ST_TO_ADDR
69965: LD_LOC 4
69969: PUSH
69970: FOR_TO
69971: IFFALSE 70045
// if art_research_lab [ art ] = lab then
69973: LD_LOC 4
69977: PUSH
69978: LD_VAR 0 4
69982: ARRAY
69983: PUSH
69984: LD_VAR 0 1
69988: EQUAL
69989: IFFALSE 70043
// begin art_research_progress = Replace ( art_research_progress , art , 100 ) ;
69991: LD_ADDR_LOC 6
69995: PUSH
69996: LD_LOC 6
70000: PPUSH
70001: LD_VAR 0 4
70005: PPUSH
70006: LD_INT 100
70008: PPUSH
70009: CALL_OW 1
70013: ST_TO_ADDR
// art_research_lab = Replace ( art_research_lab , art , 0 ) ;
70014: LD_ADDR_LOC 4
70018: PUSH
70019: LD_LOC 4
70023: PPUSH
70024: LD_VAR 0 4
70028: PPUSH
70029: LD_INT 0
70031: PPUSH
70032: CALL_OW 1
70036: ST_TO_ADDR
// OnArtifactInvestigated ;
70037: CALL 62155 0 0
// break ;
70041: GO 70045
// end ;
70043: GO 69970
70045: POP
70046: POP
// wait ( 3 ) ;
70047: LD_INT 3
70049: PPUSH
70050: CALL_OW 67
// for art = 3 to 5 do
70054: LD_ADDR_VAR 0 4
70058: PUSH
70059: DOUBLE
70060: LD_INT 3
70062: DEC
70063: ST_TO_ADDR
70064: LD_INT 5
70066: PUSH
70067: FOR_TO
70068: IFFALSE 70081
// ArtifactUnloaded_ArtiFunc ( art ) ;
70070: LD_VAR 0 4
70074: PPUSH
70075: CALL 68756 0 1
70079: GO 70067
70081: POP
70082: POP
// end ; end_of_file
70083: PPOPN 5
70085: END
// var legion_control_tower_mechanics , attacking_soldiers , attacking_scientists , attacking_vehicles , attacking_mechanics ; var attack_base , am_attack_begun ; export function InitAttackModule ; begin
70086: LD_INT 0
70088: PPUSH
// legion_control_tower_mechanics = [ ] ;
70089: LD_ADDR_LOC 8
70093: PUSH
70094: EMPTY
70095: ST_TO_ADDR
// attacking_soldiers = [ [ ] , [ ] , [ ] , [ ] ] ;
70096: LD_ADDR_LOC 9
70100: PUSH
70101: EMPTY
70102: PUSH
70103: EMPTY
70104: PUSH
70105: EMPTY
70106: PUSH
70107: EMPTY
70108: PUSH
70109: EMPTY
70110: LIST
70111: LIST
70112: LIST
70113: LIST
70114: ST_TO_ADDR
// attacking_scientists = [ [ ] , [ ] , [ ] , [ ] ] ;
70115: LD_ADDR_LOC 10
70119: PUSH
70120: EMPTY
70121: PUSH
70122: EMPTY
70123: PUSH
70124: EMPTY
70125: PUSH
70126: EMPTY
70127: PUSH
70128: EMPTY
70129: LIST
70130: LIST
70131: LIST
70132: LIST
70133: ST_TO_ADDR
// attacking_vehicles = [ [ ] , [ ] , [ ] , [ ] ] ;
70134: LD_ADDR_LOC 11
70138: PUSH
70139: EMPTY
70140: PUSH
70141: EMPTY
70142: PUSH
70143: EMPTY
70144: PUSH
70145: EMPTY
70146: PUSH
70147: EMPTY
70148: LIST
70149: LIST
70150: LIST
70151: LIST
70152: ST_TO_ADDR
// attacking_mechanics = [ [ ] , [ ] , [ ] , [ ] ] ;
70153: LD_ADDR_LOC 12
70157: PUSH
70158: EMPTY
70159: PUSH
70160: EMPTY
70161: PUSH
70162: EMPTY
70163: PUSH
70164: EMPTY
70165: PUSH
70166: EMPTY
70167: LIST
70168: LIST
70169: LIST
70170: LIST
70171: ST_TO_ADDR
// attack_base = - 1 ;
70172: LD_ADDR_LOC 13
70176: PUSH
70177: LD_INT 1
70179: NEG
70180: ST_TO_ADDR
// am_attack_begun = false ;
70181: LD_ADDR_LOC 14
70185: PUSH
70186: LD_INT 0
70188: ST_TO_ADDR
// end ;
70189: LD_VAR 0 1
70193: RET
// every 0 0$0.1 do var g , un , i , temp_list , temp_list_2 , heal_list ; var base , group_list , area_list , vehicle_spawn_point , humans_spawn_point , control_tower_vehicle , control_tower_mechanic ; var soldiers , scientists ;
70194: GO 70196
70196: DISABLE
70197: LD_INT 0
70199: PPUSH
70200: PPUSH
70201: PPUSH
70202: PPUSH
70203: PPUSH
70204: PPUSH
70205: PPUSH
70206: PPUSH
70207: PPUSH
70208: PPUSH
70209: PPUSH
70210: PPUSH
70211: PPUSH
70212: PPUSH
70213: PPUSH
// begin base = 3 ;
70214: LD_ADDR_VAR 0 7
70218: PUSH
70219: LD_INT 3
70221: ST_TO_ADDR
// group_list = [ 1 , 2 , 3 ] ;
70222: LD_ADDR_VAR 0 8
70226: PUSH
70227: LD_INT 1
70229: PUSH
70230: LD_INT 2
70232: PUSH
70233: LD_INT 3
70235: PUSH
70236: EMPTY
70237: LIST
70238: LIST
70239: LIST
70240: ST_TO_ADDR
// area_list = [ control_tower_left_area , control_tower_mid_area , control_tower_right_area ] ;
70241: LD_ADDR_VAR 0 9
70245: PUSH
70246: LD_INT 21
70248: PUSH
70249: LD_INT 22
70251: PUSH
70252: LD_INT 23
70254: PUSH
70255: EMPTY
70256: LIST
70257: LIST
70258: LIST
70259: ST_TO_ADDR
// vehicle_spawn_point = [ [ 64 , 4 ] , [ 102 , 8 ] , [ 136 , 33 ] ] ;
70260: LD_ADDR_VAR 0 10
70264: PUSH
70265: LD_INT 64
70267: PUSH
70268: LD_INT 4
70270: PUSH
70271: EMPTY
70272: LIST
70273: LIST
70274: PUSH
70275: LD_INT 102
70277: PUSH
70278: LD_INT 8
70280: PUSH
70281: EMPTY
70282: LIST
70283: LIST
70284: PUSH
70285: LD_INT 136
70287: PUSH
70288: LD_INT 33
70290: PUSH
70291: EMPTY
70292: LIST
70293: LIST
70294: PUSH
70295: EMPTY
70296: LIST
70297: LIST
70298: LIST
70299: ST_TO_ADDR
// humans_spawn_point = [ [ 85 , 7 ] , [ 111 , 13 ] , [ 137 , 36 ] ] ;
70300: LD_ADDR_VAR 0 11
70304: PUSH
70305: LD_INT 85
70307: PUSH
70308: LD_INT 7
70310: PUSH
70311: EMPTY
70312: LIST
70313: LIST
70314: PUSH
70315: LD_INT 111
70317: PUSH
70318: LD_INT 13
70320: PUSH
70321: EMPTY
70322: LIST
70323: LIST
70324: PUSH
70325: LD_INT 137
70327: PUSH
70328: LD_INT 36
70330: PUSH
70331: EMPTY
70332: LIST
70333: LIST
70334: PUSH
70335: EMPTY
70336: LIST
70337: LIST
70338: LIST
70339: ST_TO_ADDR
// control_tower_vehicle = [ 0 , 0 , 0 ] ;
70340: LD_ADDR_VAR 0 12
70344: PUSH
70345: LD_INT 0
70347: PUSH
70348: LD_INT 0
70350: PUSH
70351: LD_INT 0
70353: PUSH
70354: EMPTY
70355: LIST
70356: LIST
70357: LIST
70358: ST_TO_ADDR
// control_tower_mechanic = [ 0 , 0 , 0 ] ;
70359: LD_ADDR_VAR 0 13
70363: PUSH
70364: LD_INT 0
70366: PUSH
70367: LD_INT 0
70369: PUSH
70370: LD_INT 0
70372: PUSH
70373: EMPTY
70374: LIST
70375: LIST
70376: LIST
70377: ST_TO_ADDR
// soldiers = [ [ ] , [ ] , [ ] ] ;
70378: LD_ADDR_VAR 0 14
70382: PUSH
70383: EMPTY
70384: PUSH
70385: EMPTY
70386: PUSH
70387: EMPTY
70388: PUSH
70389: EMPTY
70390: LIST
70391: LIST
70392: LIST
70393: ST_TO_ADDR
// scientists = [ [ ] , [ ] , [ ] ] ;
70394: LD_ADDR_VAR 0 15
70398: PUSH
70399: EMPTY
70400: PUSH
70401: EMPTY
70402: PUSH
70403: EMPTY
70404: PUSH
70405: EMPTY
70406: LIST
70407: LIST
70408: LIST
70409: ST_TO_ADDR
// for g in group_list do
70410: LD_ADDR_VAR 0 1
70414: PUSH
70415: LD_VAR 0 8
70419: PUSH
70420: FOR_IN
70421: IFFALSE 70977
// begin InitUc ;
70423: CALL_OW 18
// InitVc ;
70427: CALL_OW 20
// uc_side = legion ;
70431: LD_ADDR_OWVAR 20
70435: PUSH
70436: LD_EXP 4
70440: ST_TO_ADDR
// uc_nation = nation_arabian ;
70441: LD_ADDR_OWVAR 21
70445: PUSH
70446: LD_INT 2
70448: ST_TO_ADDR
// vc_chassis = ar_half_tracked ;
70449: LD_ADDR_OWVAR 37
70453: PUSH
70454: LD_INT 14
70456: ST_TO_ADDR
// vc_engine = engine_siberite ;
70457: LD_ADDR_OWVAR 39
70461: PUSH
70462: LD_INT 3
70464: ST_TO_ADDR
// vc_control = control_manual ;
70465: LD_ADDR_OWVAR 38
70469: PUSH
70470: LD_INT 1
70472: ST_TO_ADDR
// vc_weapon = ar_control_tower ;
70473: LD_ADDR_OWVAR 40
70477: PUSH
70478: LD_INT 31
70480: ST_TO_ADDR
// un = CreateVehicle ;
70481: LD_ADDR_VAR 0 2
70485: PUSH
70486: CALL_OW 45
70490: ST_TO_ADDR
// SetDir ( un , Rand ( 0 , 5 ) ) ;
70491: LD_VAR 0 2
70495: PPUSH
70496: LD_INT 0
70498: PPUSH
70499: LD_INT 5
70501: PPUSH
70502: CALL_OW 12
70506: PPUSH
70507: CALL_OW 233
// PlaceUnitXY ( un , vehicle_spawn_point [ g ] [ 1 ] , vehicle_spawn_point [ g ] [ 2 ] , false ) ;
70511: LD_VAR 0 2
70515: PPUSH
70516: LD_VAR 0 10
70520: PUSH
70521: LD_VAR 0 1
70525: ARRAY
70526: PUSH
70527: LD_INT 1
70529: ARRAY
70530: PPUSH
70531: LD_VAR 0 10
70535: PUSH
70536: LD_VAR 0 1
70540: ARRAY
70541: PUSH
70542: LD_INT 2
70544: ARRAY
70545: PPUSH
70546: LD_INT 0
70548: PPUSH
70549: CALL_OW 48
// control_tower_vehicle = Replace ( control_tower_vehicle , g , un ) ;
70553: LD_ADDR_VAR 0 12
70557: PUSH
70558: LD_VAR 0 12
70562: PPUSH
70563: LD_VAR 0 1
70567: PPUSH
70568: LD_VAR 0 2
70572: PPUSH
70573: CALL_OW 1
70577: ST_TO_ADDR
// un = CreateUnitsWithClass ( 1 , class_mechanic , base ) [ 1 ] ;
70578: LD_ADDR_VAR 0 2
70582: PUSH
70583: LD_INT 1
70585: PPUSH
70586: LD_INT 3
70588: PPUSH
70589: LD_VAR 0 7
70593: PPUSH
70594: CALL 9948 0 3
70598: PUSH
70599: LD_INT 1
70601: ARRAY
70602: ST_TO_ADDR
// if GetSkill ( un , skill_mechanical ) < 6 then
70603: LD_VAR 0 2
70607: PPUSH
70608: LD_INT 3
70610: PPUSH
70611: CALL_OW 259
70615: PUSH
70616: LD_INT 6
70618: LESS
70619: IFFALSE 70636
// SetSkill ( un , skill_mechanical , 6 ) ;
70621: LD_VAR 0 2
70625: PPUSH
70626: LD_INT 3
70628: PPUSH
70629: LD_INT 6
70631: PPUSH
70632: CALL_OW 237
// PlaceHumanInUnit ( un , control_tower_vehicle [ g ] ) ;
70636: LD_VAR 0 2
70640: PPUSH
70641: LD_VAR 0 12
70645: PUSH
70646: LD_VAR 0 1
70650: ARRAY
70651: PPUSH
70652: CALL_OW 52
// control_tower_mechanic = Replace ( control_tower_mechanic , g , un ) ;
70656: LD_ADDR_VAR 0 13
70660: PUSH
70661: LD_VAR 0 13
70665: PPUSH
70666: LD_VAR 0 1
70670: PPUSH
70671: LD_VAR 0 2
70675: PPUSH
70676: CALL_OW 1
70680: ST_TO_ADDR
// legion_control_tower_mechanics = legion_control_tower_mechanics ^ un ;
70681: LD_ADDR_LOC 8
70685: PUSH
70686: LD_LOC 8
70690: PUSH
70691: LD_VAR 0 2
70695: ADD
70696: ST_TO_ADDR
// temp_list = CreateUnitsWithClass ( [ 1 , 2 , 2 ] [ difficulty ] , class_soldier , base ) ;
70697: LD_ADDR_VAR 0 4
70701: PUSH
70702: LD_INT 1
70704: PUSH
70705: LD_INT 2
70707: PUSH
70708: LD_INT 2
70710: PUSH
70711: EMPTY
70712: LIST
70713: LIST
70714: LIST
70715: PUSH
70716: LD_OWVAR 67
70720: ARRAY
70721: PPUSH
70722: LD_INT 1
70724: PPUSH
70725: LD_VAR 0 7
70729: PPUSH
70730: CALL 9948 0 3
70734: ST_TO_ADDR
// for i in temp_list do
70735: LD_ADDR_VAR 0 3
70739: PUSH
70740: LD_VAR 0 4
70744: PUSH
70745: FOR_IN
70746: IFFALSE 70823
// begin if Rand ( 1 , 2 ) = 1 then
70748: LD_INT 1
70750: PPUSH
70751: LD_INT 2
70753: PPUSH
70754: CALL_OW 12
70758: PUSH
70759: LD_INT 1
70761: EQUAL
70762: IFFALSE 70776
// SetClass ( i , class_mortar ) ;
70764: LD_VAR 0 3
70768: PPUSH
70769: LD_INT 8
70771: PPUSH
70772: CALL_OW 336
// PlaceUnitXYR ( i , humans_spawn_point [ g ] [ 1 ] , humans_spawn_point [ g ] [ 2 ] , 1 , false ) ;
70776: LD_VAR 0 3
70780: PPUSH
70781: LD_VAR 0 11
70785: PUSH
70786: LD_VAR 0 1
70790: ARRAY
70791: PUSH
70792: LD_INT 1
70794: ARRAY
70795: PPUSH
70796: LD_VAR 0 11
70800: PUSH
70801: LD_VAR 0 1
70805: ARRAY
70806: PUSH
70807: LD_INT 2
70809: ARRAY
70810: PPUSH
70811: LD_INT 1
70813: PPUSH
70814: LD_INT 0
70816: PPUSH
70817: CALL_OW 50
// end ;
70821: GO 70745
70823: POP
70824: POP
// soldiers = Replace ( soldiers , g , temp_list ) ;
70825: LD_ADDR_VAR 0 14
70829: PUSH
70830: LD_VAR 0 14
70834: PPUSH
70835: LD_VAR 0 1
70839: PPUSH
70840: LD_VAR 0 4
70844: PPUSH
70845: CALL_OW 1
70849: ST_TO_ADDR
// temp_list = CreateUnitsWithClass ( [ 0 , 0 , 1 ] [ difficulty ] , class_scientistic , base ) ;
70850: LD_ADDR_VAR 0 4
70854: PUSH
70855: LD_INT 0
70857: PUSH
70858: LD_INT 0
70860: PUSH
70861: LD_INT 1
70863: PUSH
70864: EMPTY
70865: LIST
70866: LIST
70867: LIST
70868: PUSH
70869: LD_OWVAR 67
70873: ARRAY
70874: PPUSH
70875: LD_INT 4
70877: PPUSH
70878: LD_VAR 0 7
70882: PPUSH
70883: CALL 9948 0 3
70887: ST_TO_ADDR
// for i in temp_list do
70888: LD_ADDR_VAR 0 3
70892: PUSH
70893: LD_VAR 0 4
70897: PUSH
70898: FOR_IN
70899: IFFALSE 70948
// begin PlaceUnitXYR ( i , humans_spawn_point [ g ] [ 1 ] , humans_spawn_point [ g ] [ 2 ] , 1 , false ) ;
70901: LD_VAR 0 3
70905: PPUSH
70906: LD_VAR 0 11
70910: PUSH
70911: LD_VAR 0 1
70915: ARRAY
70916: PUSH
70917: LD_INT 1
70919: ARRAY
70920: PPUSH
70921: LD_VAR 0 11
70925: PUSH
70926: LD_VAR 0 1
70930: ARRAY
70931: PUSH
70932: LD_INT 2
70934: ARRAY
70935: PPUSH
70936: LD_INT 1
70938: PPUSH
70939: LD_INT 0
70941: PPUSH
70942: CALL_OW 50
// end ;
70946: GO 70898
70948: POP
70949: POP
// scientists = Replace ( scientists , g , temp_list ) ;
70950: LD_ADDR_VAR 0 15
70954: PUSH
70955: LD_VAR 0 15
70959: PPUSH
70960: LD_VAR 0 1
70964: PPUSH
70965: LD_VAR 0 4
70969: PPUSH
70970: CALL_OW 1
70974: ST_TO_ADDR
// end ;
70975: GO 70420
70977: POP
70978: POP
// repeat wait ( 0 0$1 ) ;
70979: LD_INT 35
70981: PPUSH
70982: CALL_OW 67
// for g in group_list do
70986: LD_ADDR_VAR 0 1
70990: PUSH
70991: LD_VAR 0 8
70995: PUSH
70996: FOR_IN
70997: IFFALSE 71197
// begin if control_tower_mechanic [ g ] > 0 then
70999: LD_VAR 0 13
71003: PUSH
71004: LD_VAR 0 1
71008: ARRAY
71009: PUSH
71010: LD_INT 0
71012: GREATER
71013: IFFALSE 71055
// if IsDead ( control_tower_mechanic [ g ] ) then
71015: LD_VAR 0 13
71019: PUSH
71020: LD_VAR 0 1
71024: ARRAY
71025: PPUSH
71026: CALL_OW 301
71030: IFFALSE 71055
// control_tower_mechanic = Replace ( control_tower_mechanic , g , 0 ) ;
71032: LD_ADDR_VAR 0 13
71036: PUSH
71037: LD_VAR 0 13
71041: PPUSH
71042: LD_VAR 0 1
71046: PPUSH
71047: LD_INT 0
71049: PPUSH
71050: CALL_OW 1
71054: ST_TO_ADDR
// if control_tower_vehicle [ g ] > 0 then
71055: LD_VAR 0 12
71059: PUSH
71060: LD_VAR 0 1
71064: ARRAY
71065: PUSH
71066: LD_INT 0
71068: GREATER
71069: IFFALSE 71111
// if IsDead ( control_tower_vehicle [ g ] ) then
71071: LD_VAR 0 12
71075: PUSH
71076: LD_VAR 0 1
71080: ARRAY
71081: PPUSH
71082: CALL_OW 301
71086: IFFALSE 71111
// control_tower_vehicle = Replace ( control_tower_vehicle , g , 0 ) ;
71088: LD_ADDR_VAR 0 12
71092: PUSH
71093: LD_VAR 0 12
71097: PPUSH
71098: LD_VAR 0 1
71102: PPUSH
71103: LD_INT 0
71105: PPUSH
71106: CALL_OW 1
71110: ST_TO_ADDR
// soldiers = Replace ( soldiers , g , UnitFilter ( soldiers [ g ] , [ f_alive ] ) ) ;
71111: LD_ADDR_VAR 0 14
71115: PUSH
71116: LD_VAR 0 14
71120: PPUSH
71121: LD_VAR 0 1
71125: PPUSH
71126: LD_VAR 0 14
71130: PUSH
71131: LD_VAR 0 1
71135: ARRAY
71136: PPUSH
71137: LD_INT 51
71139: PUSH
71140: EMPTY
71141: LIST
71142: PPUSH
71143: CALL_OW 72
71147: PPUSH
71148: CALL_OW 1
71152: ST_TO_ADDR
// scientists = Replace ( scientists , g , UnitFilter ( scientists [ g ] , [ f_alive ] ) ) ;
71153: LD_ADDR_VAR 0 15
71157: PUSH
71158: LD_VAR 0 15
71162: PPUSH
71163: LD_VAR 0 1
71167: PPUSH
71168: LD_VAR 0 15
71172: PUSH
71173: LD_VAR 0 1
71177: ARRAY
71178: PPUSH
71179: LD_INT 51
71181: PUSH
71182: EMPTY
71183: LIST
71184: PPUSH
71185: CALL_OW 72
71189: PPUSH
71190: CALL_OW 1
71194: ST_TO_ADDR
// end ;
71195: GO 70996
71197: POP
71198: POP
// if not remote_vehicles_impossible then
71199: LD_EXP 116
71203: NOT
71204: IFFALSE 71501
// begin g = true ;
71206: LD_ADDR_VAR 0 1
71210: PUSH
71211: LD_INT 1
71213: ST_TO_ADDR
// for i = 1 to control_tower_vehicle + 0 do
71214: LD_ADDR_VAR 0 3
71218: PUSH
71219: DOUBLE
71220: LD_INT 1
71222: DEC
71223: ST_TO_ADDR
71224: LD_VAR 0 12
71228: PUSH
71229: LD_INT 0
71231: PLUS
71232: PUSH
71233: FOR_TO
71234: IFFALSE 71282
// begin if IsOk ( control_tower_vehicle [ i ] ) and IsOk ( control_tower_mechanic [ i ] ) then
71236: LD_VAR 0 12
71240: PUSH
71241: LD_VAR 0 3
71245: ARRAY
71246: PPUSH
71247: CALL_OW 302
71251: PUSH
71252: LD_VAR 0 13
71256: PUSH
71257: LD_VAR 0 3
71261: ARRAY
71262: PPUSH
71263: CALL_OW 302
71267: AND
71268: IFFALSE 71280
// begin g = false ;
71270: LD_ADDR_VAR 0 1
71274: PUSH
71275: LD_INT 0
71277: ST_TO_ADDR
// break ;
71278: GO 71282
// end ; end ;
71280: GO 71233
71282: POP
71283: POP
// if g then
71284: LD_VAR 0 1
71288: IFFALSE 71501
// begin remote_vehicles_impossible = true ;
71290: LD_ADDR_EXP 116
71294: PUSH
71295: LD_INT 1
71297: ST_TO_ADDR
// for i = 1 to attacking_vehicles + 0 do
71298: LD_ADDR_VAR 0 3
71302: PUSH
71303: DOUBLE
71304: LD_INT 1
71306: DEC
71307: ST_TO_ADDR
71308: LD_LOC 11
71312: PUSH
71313: LD_INT 0
71315: PLUS
71316: PUSH
71317: FOR_TO
71318: IFFALSE 71499
// begin g = 1 ;
71320: LD_ADDR_VAR 0 1
71324: PUSH
71325: LD_INT 1
71327: ST_TO_ADDR
// while g <= attacking_vehicles [ i ] + 0 do
71328: LD_VAR 0 1
71332: PUSH
71333: LD_LOC 11
71337: PUSH
71338: LD_VAR 0 3
71342: ARRAY
71343: PUSH
71344: LD_INT 0
71346: PLUS
71347: LESSEQUAL
71348: IFFALSE 71497
// begin if GetControl ( attacking_vehicles [ i ] [ g ] ) = control_remote then
71350: LD_LOC 11
71354: PUSH
71355: LD_VAR 0 3
71359: ARRAY
71360: PUSH
71361: LD_VAR 0 1
71365: ARRAY
71366: PPUSH
71367: CALL_OW 263
71371: PUSH
71372: LD_INT 2
71374: EQUAL
71375: IFFALSE 71481
// begin if GetLives ( attacking_vehicles [ i ] [ g ] ) = 1000 then
71377: LD_LOC 11
71381: PUSH
71382: LD_VAR 0 3
71386: ARRAY
71387: PUSH
71388: LD_VAR 0 1
71392: ARRAY
71393: PPUSH
71394: CALL_OW 256
71398: PUSH
71399: LD_INT 1000
71401: EQUAL
71402: IFFALSE 71428
// SetLives ( attacking_vehicles [ i ] [ g ] , 990 ) ;
71404: LD_LOC 11
71408: PUSH
71409: LD_VAR 0 3
71413: ARRAY
71414: PUSH
71415: LD_VAR 0 1
71419: ARRAY
71420: PPUSH
71421: LD_INT 990
71423: PPUSH
71424: CALL_OW 234
// temp_list = Delete ( attacking_vehicles [ i ] , g ) ;
71428: LD_ADDR_VAR 0 4
71432: PUSH
71433: LD_LOC 11
71437: PUSH
71438: LD_VAR 0 3
71442: ARRAY
71443: PPUSH
71444: LD_VAR 0 1
71448: PPUSH
71449: CALL_OW 3
71453: ST_TO_ADDR
// attacking_vehicles = Replace ( attacking_vehicles , i , temp_list ) ;
71454: LD_ADDR_LOC 11
71458: PUSH
71459: LD_LOC 11
71463: PPUSH
71464: LD_VAR 0 3
71468: PPUSH
71469: LD_VAR 0 4
71473: PPUSH
71474: CALL_OW 1
71478: ST_TO_ADDR
// continue ;
71479: GO 71328
// end ; g = g + 1 ;
71481: LD_ADDR_VAR 0 1
71485: PUSH
71486: LD_VAR 0 1
71490: PUSH
71491: LD_INT 1
71493: PLUS
71494: ST_TO_ADDR
// end ;
71495: GO 71328
// end ;
71497: GO 71317
71499: POP
71500: POP
// end ; end ; i = 1 ;
71501: LD_ADDR_VAR 0 3
71505: PUSH
71506: LD_INT 1
71508: ST_TO_ADDR
// while i <= group_list do
71509: LD_VAR 0 3
71513: PUSH
71514: LD_VAR 0 8
71518: LESSEQUAL
71519: IFFALSE 71621
// begin if ( ( control_tower_mechanic [ group_list [ i ] ] ^ soldiers [ group_list [ i ] ] ^ scientists [ group_list [ i ] ] ) diff 0 ) = 0 then
71521: LD_VAR 0 13
71525: PUSH
71526: LD_VAR 0 8
71530: PUSH
71531: LD_VAR 0 3
71535: ARRAY
71536: ARRAY
71537: PUSH
71538: LD_VAR 0 14
71542: PUSH
71543: LD_VAR 0 8
71547: PUSH
71548: LD_VAR 0 3
71552: ARRAY
71553: ARRAY
71554: ADD
71555: PUSH
71556: LD_VAR 0 15
71560: PUSH
71561: LD_VAR 0 8
71565: PUSH
71566: LD_VAR 0 3
71570: ARRAY
71571: ARRAY
71572: ADD
71573: PUSH
71574: LD_INT 0
71576: DIFF
71577: PUSH
71578: LD_INT 0
71580: EQUAL
71581: IFFALSE 71605
// begin group_list = Delete ( group_list , i ) ;
71583: LD_ADDR_VAR 0 8
71587: PUSH
71588: LD_VAR 0 8
71592: PPUSH
71593: LD_VAR 0 3
71597: PPUSH
71598: CALL_OW 3
71602: ST_TO_ADDR
// continue ;
71603: GO 71509
// end ; i = i + 1 ;
71605: LD_ADDR_VAR 0 3
71609: PUSH
71610: LD_VAR 0 3
71614: PUSH
71615: LD_INT 1
71617: PLUS
71618: ST_TO_ADDR
// end ;
71619: GO 71509
// if group_list = 0 then
71621: LD_VAR 0 8
71625: PUSH
71626: LD_INT 0
71628: EQUAL
71629: IFFALSE 71633
// exit ;
71631: GO 72498
// for g in group_list do
71633: LD_ADDR_VAR 0 1
71637: PUSH
71638: LD_VAR 0 8
71642: PUSH
71643: FOR_IN
71644: IFFALSE 72492
// begin if control_tower_mechanic [ g ] > 0 then
71646: LD_VAR 0 13
71650: PUSH
71651: LD_VAR 0 1
71655: ARRAY
71656: PUSH
71657: LD_INT 0
71659: GREATER
71660: IFFALSE 72064
// begin if GetLives ( control_tower_mechanic [ g ] ) < 300 and UnitFilter ( scientists [ g ] , [ f_ok ] ) > 0 then
71662: LD_VAR 0 13
71666: PUSH
71667: LD_VAR 0 1
71671: ARRAY
71672: PPUSH
71673: CALL_OW 256
71677: PUSH
71678: LD_INT 300
71680: LESS
71681: PUSH
71682: LD_VAR 0 15
71686: PUSH
71687: LD_VAR 0 1
71691: ARRAY
71692: PPUSH
71693: LD_INT 50
71695: PUSH
71696: EMPTY
71697: LIST
71698: PPUSH
71699: CALL_OW 72
71703: PUSH
71704: LD_INT 0
71706: GREATER
71707: AND
71708: IFFALSE 71824
// begin if IsInUnit ( control_tower_mechanic [ g ] ) > 0 then
71710: LD_VAR 0 13
71714: PUSH
71715: LD_VAR 0 1
71719: ARRAY
71720: PPUSH
71721: CALL_OW 310
71725: PUSH
71726: LD_INT 0
71728: GREATER
71729: IFFALSE 71748
// ComExitVehicle ( control_tower_mechanic [ g ] ) else
71731: LD_VAR 0 13
71735: PUSH
71736: LD_VAR 0 1
71740: ARRAY
71741: PPUSH
71742: CALL_OW 121
71746: GO 71822
// if not IsInArea ( control_tower_mechanic [ g ] , area_list [ g ] ) then
71748: LD_VAR 0 13
71752: PUSH
71753: LD_VAR 0 1
71757: ARRAY
71758: PPUSH
71759: LD_VAR 0 9
71763: PUSH
71764: LD_VAR 0 1
71768: ARRAY
71769: PPUSH
71770: CALL_OW 308
71774: NOT
71775: IFFALSE 71822
// ComMoveXY ( control_tower_mechanic [ g ] , humans_spawn_point [ g ] [ 1 ] , humans_spawn_point [ g ] [ 2 ] ) ;
71777: LD_VAR 0 13
71781: PUSH
71782: LD_VAR 0 1
71786: ARRAY
71787: PPUSH
71788: LD_VAR 0 11
71792: PUSH
71793: LD_VAR 0 1
71797: ARRAY
71798: PUSH
71799: LD_INT 1
71801: ARRAY
71802: PPUSH
71803: LD_VAR 0 11
71807: PUSH
71808: LD_VAR 0 1
71812: ARRAY
71813: PUSH
71814: LD_INT 2
71816: ARRAY
71817: PPUSH
71818: CALL_OW 111
// end else
71822: GO 72064
// begin if control_tower_vehicle [ g ] > 0 then
71824: LD_VAR 0 12
71828: PUSH
71829: LD_VAR 0 1
71833: ARRAY
71834: PUSH
71835: LD_INT 0
71837: GREATER
71838: IFFALSE 71990
// begin if not IsOk ( control_tower_vehicle [ g ] ) then
71840: LD_VAR 0 12
71844: PUSH
71845: LD_VAR 0 1
71849: ARRAY
71850: PPUSH
71851: CALL_OW 302
71855: NOT
71856: IFFALSE 71886
// ComRepairVehicle ( control_tower_mechanic [ g ] , control_tower_vehicle [ g ] ) else
71858: LD_VAR 0 13
71862: PUSH
71863: LD_VAR 0 1
71867: ARRAY
71868: PPUSH
71869: LD_VAR 0 12
71873: PUSH
71874: LD_VAR 0 1
71878: ARRAY
71879: PPUSH
71880: CALL_OW 129
71884: GO 71988
// begin un = IsInUnit ( control_tower_mechanic [ g ] ) ;
71886: LD_ADDR_VAR 0 2
71890: PUSH
71891: LD_VAR 0 13
71895: PUSH
71896: LD_VAR 0 1
71900: ARRAY
71901: PPUSH
71902: CALL_OW 310
71906: ST_TO_ADDR
// if un <> control_tower_vehicle [ g ] then
71907: LD_VAR 0 2
71911: PUSH
71912: LD_VAR 0 12
71916: PUSH
71917: LD_VAR 0 1
71921: ARRAY
71922: NONEQUAL
71923: IFFALSE 71988
// begin case GetType ( un ) of unit_vehicle :
71925: LD_VAR 0 2
71929: PPUSH
71930: CALL_OW 247
71934: PUSH
71935: LD_INT 2
71937: DOUBLE
71938: EQUAL
71939: IFTRUE 71943
71941: GO 71961
71943: POP
// ComExitVehicle ( control_tower_mechanic [ g ] ) ; else
71944: LD_VAR 0 13
71948: PUSH
71949: LD_VAR 0 1
71953: ARRAY
71954: PPUSH
71955: CALL_OW 121
71959: GO 71988
71961: POP
// ComEnterUnit ( control_tower_mechanic [ g ] , control_tower_vehicle [ g ] ) ; end ;
71962: LD_VAR 0 13
71966: PUSH
71967: LD_VAR 0 1
71971: ARRAY
71972: PPUSH
71973: LD_VAR 0 12
71977: PUSH
71978: LD_VAR 0 1
71982: ARRAY
71983: PPUSH
71984: CALL_OW 120
// end ; end ; end else
71988: GO 72064
// begin if not IsInArea ( control_tower_mechanic [ g ] , area_list [ g ] ) then
71990: LD_VAR 0 13
71994: PUSH
71995: LD_VAR 0 1
71999: ARRAY
72000: PPUSH
72001: LD_VAR 0 9
72005: PUSH
72006: LD_VAR 0 1
72010: ARRAY
72011: PPUSH
72012: CALL_OW 308
72016: NOT
72017: IFFALSE 72064
// ComMoveXY ( control_tower_mechanic [ g ] , humans_spawn_point [ g ] [ 1 ] , humans_spawn_point [ g ] [ 2 ] ) ;
72019: LD_VAR 0 13
72023: PUSH
72024: LD_VAR 0 1
72028: ARRAY
72029: PPUSH
72030: LD_VAR 0 11
72034: PUSH
72035: LD_VAR 0 1
72039: ARRAY
72040: PUSH
72041: LD_INT 1
72043: ARRAY
72044: PPUSH
72045: LD_VAR 0 11
72049: PUSH
72050: LD_VAR 0 1
72054: ARRAY
72055: PUSH
72056: LD_INT 2
72058: ARRAY
72059: PPUSH
72060: CALL_OW 111
// end ; end ; end ; for i in soldiers [ g ] do
72064: LD_ADDR_VAR 0 3
72068: PUSH
72069: LD_VAR 0 14
72073: PUSH
72074: LD_VAR 0 1
72078: ARRAY
72079: PUSH
72080: FOR_IN
72081: IFFALSE 72147
// begin if not IsInArea ( i , area_list [ g ] ) then
72083: LD_VAR 0 3
72087: PPUSH
72088: LD_VAR 0 9
72092: PUSH
72093: LD_VAR 0 1
72097: ARRAY
72098: PPUSH
72099: CALL_OW 308
72103: NOT
72104: IFFALSE 72145
// ComMoveXY ( i , humans_spawn_point [ g ] [ 1 ] , humans_spawn_point [ g ] [ 2 ] ) ;
72106: LD_VAR 0 3
72110: PPUSH
72111: LD_VAR 0 11
72115: PUSH
72116: LD_VAR 0 1
72120: ARRAY
72121: PUSH
72122: LD_INT 1
72124: ARRAY
72125: PPUSH
72126: LD_VAR 0 11
72130: PUSH
72131: LD_VAR 0 1
72135: ARRAY
72136: PUSH
72137: LD_INT 2
72139: ARRAY
72140: PPUSH
72141: CALL_OW 111
// end ;
72145: GO 72080
72147: POP
72148: POP
// if scientists [ g ] > 0 then
72149: LD_VAR 0 15
72153: PUSH
72154: LD_VAR 0 1
72158: ARRAY
72159: PUSH
72160: LD_INT 0
72162: GREATER
72163: IFFALSE 72490
// begin temp_list = UnitFilter ( soldiers [ g ] ^ scientists [ g ] , [ f_not , [ f_lives , 1000 ] ] ) ;
72165: LD_ADDR_VAR 0 4
72169: PUSH
72170: LD_VAR 0 14
72174: PUSH
72175: LD_VAR 0 1
72179: ARRAY
72180: PUSH
72181: LD_VAR 0 15
72185: PUSH
72186: LD_VAR 0 1
72190: ARRAY
72191: ADD
72192: PPUSH
72193: LD_INT 3
72195: PUSH
72196: LD_INT 24
72198: PUSH
72199: LD_INT 1000
72201: PUSH
72202: EMPTY
72203: LIST
72204: LIST
72205: PUSH
72206: EMPTY
72207: LIST
72208: LIST
72209: PPUSH
72210: CALL_OW 72
72214: ST_TO_ADDR
// if control_tower_mechanic [ g ] > 0 then
72215: LD_VAR 0 13
72219: PUSH
72220: LD_VAR 0 1
72224: ARRAY
72225: PUSH
72226: LD_INT 0
72228: GREATER
72229: IFFALSE 72295
// if GetLives ( control_tower_mechanic [ g ] ) < 1000 and IsInUnit ( control_tower_mechanic [ g ] ) = 0 then
72231: LD_VAR 0 13
72235: PUSH
72236: LD_VAR 0 1
72240: ARRAY
72241: PPUSH
72242: CALL_OW 256
72246: PUSH
72247: LD_INT 1000
72249: LESS
72250: PUSH
72251: LD_VAR 0 13
72255: PUSH
72256: LD_VAR 0 1
72260: ARRAY
72261: PPUSH
72262: CALL_OW 310
72266: PUSH
72267: LD_INT 0
72269: EQUAL
72270: AND
72271: IFFALSE 72295
// temp_list = temp_list ^ control_tower_mechanic [ g ] ;
72273: LD_ADDR_VAR 0 4
72277: PUSH
72278: LD_VAR 0 4
72282: PUSH
72283: LD_VAR 0 13
72287: PUSH
72288: LD_VAR 0 1
72292: ARRAY
72293: ADD
72294: ST_TO_ADDR
// temp_list_2 = UnitFilter ( temp_list , [ f_not , [ f_lives , 251 ] ] ) ;
72295: LD_ADDR_VAR 0 5
72299: PUSH
72300: LD_VAR 0 4
72304: PPUSH
72305: LD_INT 3
72307: PUSH
72308: LD_INT 24
72310: PUSH
72311: LD_INT 251
72313: PUSH
72314: EMPTY
72315: LIST
72316: LIST
72317: PUSH
72318: EMPTY
72319: LIST
72320: LIST
72321: PPUSH
72322: CALL_OW 72
72326: ST_TO_ADDR
// for i in scientists [ g ] do
72327: LD_ADDR_VAR 0 3
72331: PUSH
72332: LD_VAR 0 15
72336: PUSH
72337: LD_VAR 0 1
72341: ARRAY
72342: PUSH
72343: FOR_IN
72344: IFFALSE 72488
// begin heal_list = temp_list_2 diff i ;
72346: LD_ADDR_VAR 0 6
72350: PUSH
72351: LD_VAR 0 5
72355: PUSH
72356: LD_VAR 0 3
72360: DIFF
72361: ST_TO_ADDR
// if heal_list = 0 then
72362: LD_VAR 0 6
72366: PUSH
72367: LD_INT 0
72369: EQUAL
72370: IFFALSE 72388
// heal_list = temp_list diff i ;
72372: LD_ADDR_VAR 0 6
72376: PUSH
72377: LD_VAR 0 4
72381: PUSH
72382: LD_VAR 0 3
72386: DIFF
72387: ST_TO_ADDR
// if heal_list > 0 then
72388: LD_VAR 0 6
72392: PUSH
72393: LD_INT 0
72395: GREATER
72396: IFFALSE 72424
// ComHeal ( i , AllNearestUnitToUnit ( heal_list , i ) ) else
72398: LD_VAR 0 3
72402: PPUSH
72403: LD_VAR 0 6
72407: PPUSH
72408: LD_VAR 0 3
72412: PPUSH
72413: CALL_OW 75
72417: PPUSH
72418: CALL_OW 128
72422: GO 72486
// if not IsInArea ( i , area_list [ g ] ) then
72424: LD_VAR 0 3
72428: PPUSH
72429: LD_VAR 0 9
72433: PUSH
72434: LD_VAR 0 1
72438: ARRAY
72439: PPUSH
72440: CALL_OW 308
72444: NOT
72445: IFFALSE 72486
// ComMoveXY ( i , humans_spawn_point [ g ] [ 1 ] , humans_spawn_point [ g ] [ 2 ] ) ;
72447: LD_VAR 0 3
72451: PPUSH
72452: LD_VAR 0 11
72456: PUSH
72457: LD_VAR 0 1
72461: ARRAY
72462: PUSH
72463: LD_INT 1
72465: ARRAY
72466: PPUSH
72467: LD_VAR 0 11
72471: PUSH
72472: LD_VAR 0 1
72476: ARRAY
72477: PUSH
72478: LD_INT 2
72480: ARRAY
72481: PPUSH
72482: CALL_OW 111
// end ;
72486: GO 72343
72488: POP
72489: POP
// end ; end ;
72490: GO 71643
72492: POP
72493: POP
// until false ;
72494: LD_INT 0
72496: IFFALSE 70979
// end ;
72498: PPOPN 15
72500: END
// every 0 0$1 + 0 0$0.3 trigger legion_base_captured do var i , k , driver , temp_list , area , chosen_strategies , a , temp_list_2 ; var num_sol , num_baz , num_sci , num_imp , num_veh , min_strat_count , max_strat_count ; var soldier_list , scientist_list , vehicle_list , implosion_list ; var base , attack_cooldowns ;
72501: LD_EXP 110
72505: IFFALSE 75709
72507: GO 72509
72509: DISABLE
72510: LD_INT 0
72512: PPUSH
72513: PPUSH
72514: PPUSH
72515: PPUSH
72516: PPUSH
72517: PPUSH
72518: PPUSH
72519: PPUSH
72520: PPUSH
72521: PPUSH
72522: PPUSH
72523: PPUSH
72524: PPUSH
72525: PPUSH
72526: PPUSH
72527: PPUSH
72528: PPUSH
72529: PPUSH
72530: PPUSH
72531: PPUSH
72532: PPUSH
// begin attack_cooldowns = [ [ 2 2$0 , 12 12$0 , 12 12$30 , 8 8$0 , 2 2$0 ] , [ 2 2$0 , 11 11$0 , 10 10$30 , 7 7$0 , 2 2$0 ] , [ 1 1$30 , 8 8$30 , 8 8$0 , 6 6$0 , 2 2$0 ] ] [ difficulty ] ;
72533: LD_ADDR_VAR 0 21
72537: PUSH
72538: LD_INT 4200
72540: PUSH
72541: LD_INT 25200
72543: PUSH
72544: LD_INT 26250
72546: PUSH
72547: LD_INT 16800
72549: PUSH
72550: LD_INT 4200
72552: PUSH
72553: EMPTY
72554: LIST
72555: LIST
72556: LIST
72557: LIST
72558: LIST
72559: PUSH
72560: LD_INT 4200
72562: PUSH
72563: LD_INT 23100
72565: PUSH
72566: LD_INT 22050
72568: PUSH
72569: LD_INT 14700
72571: PUSH
72572: LD_INT 4200
72574: PUSH
72575: EMPTY
72576: LIST
72577: LIST
72578: LIST
72579: LIST
72580: LIST
72581: PUSH
72582: LD_INT 3150
72584: PUSH
72585: LD_INT 17850
72587: PUSH
72588: LD_INT 16800
72590: PUSH
72591: LD_INT 12600
72593: PUSH
72594: LD_INT 4200
72596: PUSH
72597: EMPTY
72598: LIST
72599: LIST
72600: LIST
72601: LIST
72602: LIST
72603: PUSH
72604: EMPTY
72605: LIST
72606: LIST
72607: LIST
72608: PUSH
72609: LD_OWVAR 67
72613: ARRAY
72614: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
72615: LD_INT 35
72617: PPUSH
72618: CALL_OW 67
// if current_attack_num = 5 then
72622: LD_EXP 115
72626: PUSH
72627: LD_INT 5
72629: EQUAL
72630: IFFALSE 72634
// exit ;
72632: GO 75709
// temp_list = [ ] ;
72634: LD_ADDR_VAR 0 4
72638: PUSH
72639: EMPTY
72640: ST_TO_ADDR
// for i in attacking_soldiers ^ attacking_scientists ^ attacking_mechanics do
72641: LD_ADDR_VAR 0 1
72645: PUSH
72646: LD_LOC 9
72650: PUSH
72651: LD_LOC 10
72655: ADD
72656: PUSH
72657: LD_LOC 12
72661: ADD
72662: PUSH
72663: FOR_IN
72664: IFFALSE 72684
// temp_list = temp_list ^ i ;
72666: LD_ADDR_VAR 0 4
72670: PUSH
72671: LD_VAR 0 4
72675: PUSH
72676: LD_VAR 0 1
72680: ADD
72681: ST_TO_ADDR
72682: GO 72663
72684: POP
72685: POP
// for i in attacking_vehicles do
72686: LD_ADDR_VAR 0 1
72690: PUSH
72691: LD_LOC 11
72695: PUSH
72696: FOR_IN
72697: IFFALSE 72739
// temp_list = temp_list ^ UnitFilter ( i , [ f_not , [ f_control , control_manual ] ] ) ;
72699: LD_ADDR_VAR 0 4
72703: PUSH
72704: LD_VAR 0 4
72708: PUSH
72709: LD_VAR 0 1
72713: PPUSH
72714: LD_INT 3
72716: PUSH
72717: LD_INT 33
72719: PUSH
72720: LD_INT 1
72722: PUSH
72723: EMPTY
72724: LIST
72725: LIST
72726: PUSH
72727: EMPTY
72728: LIST
72729: LIST
72730: PPUSH
72731: CALL_OW 72
72735: ADD
72736: ST_TO_ADDR
72737: GO 72696
72739: POP
72740: POP
// if UnitFilter ( temp_list , [ f_ok ] ) > 0 then
72741: LD_VAR 0 4
72745: PPUSH
72746: LD_INT 50
72748: PUSH
72749: EMPTY
72750: LIST
72751: PPUSH
72752: CALL_OW 72
72756: PUSH
72757: LD_INT 0
72759: GREATER
72760: IFFALSE 72764
// continue ;
72762: GO 72615
// attack_cooldowns = Replace ( attack_cooldowns , current_attack_num + 1 , attack_cooldowns [ current_attack_num + 1 ] - 0 0$1 ) ;
72764: LD_ADDR_VAR 0 21
72768: PUSH
72769: LD_VAR 0 21
72773: PPUSH
72774: LD_EXP 115
72778: PUSH
72779: LD_INT 1
72781: PLUS
72782: PPUSH
72783: LD_VAR 0 21
72787: PUSH
72788: LD_EXP 115
72792: PUSH
72793: LD_INT 1
72795: PLUS
72796: ARRAY
72797: PUSH
72798: LD_INT 35
72800: MINUS
72801: PPUSH
72802: CALL_OW 1
72806: ST_TO_ADDR
// if attack_cooldowns [ current_attack_num + 1 ] > 0 0$0 then
72807: LD_VAR 0 21
72811: PUSH
72812: LD_EXP 115
72816: PUSH
72817: LD_INT 1
72819: PLUS
72820: ARRAY
72821: PUSH
72822: LD_INT 0
72824: GREATER
72825: IFFALSE 72829
// continue ;
72827: GO 72615
// current_attack_num = current_attack_num + 1 ;
72829: LD_ADDR_EXP 115
72833: PUSH
72834: LD_EXP 115
72838: PUSH
72839: LD_INT 1
72841: PLUS
72842: ST_TO_ADDR
// if current_attack_num < 5 then
72843: LD_EXP 115
72847: PUSH
72848: LD_INT 5
72850: LESS
72851: IFFALSE 72863
// base = 3 else
72853: LD_ADDR_VAR 0 20
72857: PUSH
72858: LD_INT 3
72860: ST_TO_ADDR
72861: GO 72879
// begin base = 4 ;
72863: LD_ADDR_VAR 0 20
72867: PUSH
72868: LD_INT 4
72870: ST_TO_ADDR
// am_attack_begun = true ;
72871: LD_ADDR_LOC 14
72875: PUSH
72876: LD_INT 1
72878: ST_TO_ADDR
// end ; attack_base = base ;
72879: LD_ADDR_LOC 13
72883: PUSH
72884: LD_VAR 0 20
72888: ST_TO_ADDR
// case current_attack_num of 1 :
72889: LD_EXP 115
72893: PUSH
72894: LD_INT 1
72896: DOUBLE
72897: EQUAL
72898: IFTRUE 72902
72900: GO 73029
72902: POP
// begin num_sol = [ 3 , 2 , 2 ] [ difficulty ] ;
72903: LD_ADDR_VAR 0 9
72907: PUSH
72908: LD_INT 3
72910: PUSH
72911: LD_INT 2
72913: PUSH
72914: LD_INT 2
72916: PUSH
72917: EMPTY
72918: LIST
72919: LIST
72920: LIST
72921: PUSH
72922: LD_OWVAR 67
72926: ARRAY
72927: ST_TO_ADDR
// num_baz = [ 0 , 0 , 0 ] [ difficulty ] ;
72928: LD_ADDR_VAR 0 10
72932: PUSH
72933: LD_INT 0
72935: PUSH
72936: LD_INT 0
72938: PUSH
72939: LD_INT 0
72941: PUSH
72942: EMPTY
72943: LIST
72944: LIST
72945: LIST
72946: PUSH
72947: LD_OWVAR 67
72951: ARRAY
72952: ST_TO_ADDR
// num_sci = [ 0 , 0 , 0 ] [ difficulty ] ;
72953: LD_ADDR_VAR 0 11
72957: PUSH
72958: LD_INT 0
72960: PUSH
72961: LD_INT 0
72963: PUSH
72964: LD_INT 0
72966: PUSH
72967: EMPTY
72968: LIST
72969: LIST
72970: LIST
72971: PUSH
72972: LD_OWVAR 67
72976: ARRAY
72977: ST_TO_ADDR
// num_imp = 1 ;
72978: LD_ADDR_VAR 0 12
72982: PUSH
72983: LD_INT 1
72985: ST_TO_ADDR
// num_veh = [ 0 , 1 , 1 ] [ difficulty ] ;
72986: LD_ADDR_VAR 0 13
72990: PUSH
72991: LD_INT 0
72993: PUSH
72994: LD_INT 1
72996: PUSH
72997: LD_INT 1
72999: PUSH
73000: EMPTY
73001: LIST
73002: LIST
73003: LIST
73004: PUSH
73005: LD_OWVAR 67
73009: ARRAY
73010: ST_TO_ADDR
// min_strat_count = 1 ;
73011: LD_ADDR_VAR 0 14
73015: PUSH
73016: LD_INT 1
73018: ST_TO_ADDR
// max_strat_count = 1 ;
73019: LD_ADDR_VAR 0 15
73023: PUSH
73024: LD_INT 1
73026: ST_TO_ADDR
// end ; 2 :
73027: GO 73638
73029: LD_INT 2
73031: DOUBLE
73032: EQUAL
73033: IFTRUE 73037
73035: GO 73181
73037: POP
// begin num_sol = [ 3 , 5 , 5 ] [ difficulty ] ;
73038: LD_ADDR_VAR 0 9
73042: PUSH
73043: LD_INT 3
73045: PUSH
73046: LD_INT 5
73048: PUSH
73049: LD_INT 5
73051: PUSH
73052: EMPTY
73053: LIST
73054: LIST
73055: LIST
73056: PUSH
73057: LD_OWVAR 67
73061: ARRAY
73062: ST_TO_ADDR
// num_baz = [ 0 , 0 , 0 ] [ difficulty ] ;
73063: LD_ADDR_VAR 0 10
73067: PUSH
73068: LD_INT 0
73070: PUSH
73071: LD_INT 0
73073: PUSH
73074: LD_INT 0
73076: PUSH
73077: EMPTY
73078: LIST
73079: LIST
73080: LIST
73081: PUSH
73082: LD_OWVAR 67
73086: ARRAY
73087: ST_TO_ADDR
// num_sci = [ 0 , 1 , 1 ] [ difficulty ] ;
73088: LD_ADDR_VAR 0 11
73092: PUSH
73093: LD_INT 0
73095: PUSH
73096: LD_INT 1
73098: PUSH
73099: LD_INT 1
73101: PUSH
73102: EMPTY
73103: LIST
73104: LIST
73105: LIST
73106: PUSH
73107: LD_OWVAR 67
73111: ARRAY
73112: ST_TO_ADDR
// num_imp = [ 1 , 1 , 1 ] [ difficulty ] ;
73113: LD_ADDR_VAR 0 12
73117: PUSH
73118: LD_INT 1
73120: PUSH
73121: LD_INT 1
73123: PUSH
73124: LD_INT 1
73126: PUSH
73127: EMPTY
73128: LIST
73129: LIST
73130: LIST
73131: PUSH
73132: LD_OWVAR 67
73136: ARRAY
73137: ST_TO_ADDR
// num_veh = [ 2 , 3 , 3 ] [ difficulty ] ;
73138: LD_ADDR_VAR 0 13
73142: PUSH
73143: LD_INT 2
73145: PUSH
73146: LD_INT 3
73148: PUSH
73149: LD_INT 3
73151: PUSH
73152: EMPTY
73153: LIST
73154: LIST
73155: LIST
73156: PUSH
73157: LD_OWVAR 67
73161: ARRAY
73162: ST_TO_ADDR
// min_strat_count = 1 ;
73163: LD_ADDR_VAR 0 14
73167: PUSH
73168: LD_INT 1
73170: ST_TO_ADDR
// max_strat_count = 2 ;
73171: LD_ADDR_VAR 0 15
73175: PUSH
73176: LD_INT 2
73178: ST_TO_ADDR
// end ; 3 :
73179: GO 73638
73181: LD_INT 3
73183: DOUBLE
73184: EQUAL
73185: IFTRUE 73189
73187: GO 73333
73189: POP
// begin num_sol = [ 1 , 3 , 3 ] [ difficulty ] ;
73190: LD_ADDR_VAR 0 9
73194: PUSH
73195: LD_INT 1
73197: PUSH
73198: LD_INT 3
73200: PUSH
73201: LD_INT 3
73203: PUSH
73204: EMPTY
73205: LIST
73206: LIST
73207: LIST
73208: PUSH
73209: LD_OWVAR 67
73213: ARRAY
73214: ST_TO_ADDR
// num_baz = [ 1 , 2 , 2 ] [ difficulty ] ;
73215: LD_ADDR_VAR 0 10
73219: PUSH
73220: LD_INT 1
73222: PUSH
73223: LD_INT 2
73225: PUSH
73226: LD_INT 2
73228: PUSH
73229: EMPTY
73230: LIST
73231: LIST
73232: LIST
73233: PUSH
73234: LD_OWVAR 67
73238: ARRAY
73239: ST_TO_ADDR
// num_sci = [ 0 , 1 , 1 ] [ difficulty ] ;
73240: LD_ADDR_VAR 0 11
73244: PUSH
73245: LD_INT 0
73247: PUSH
73248: LD_INT 1
73250: PUSH
73251: LD_INT 1
73253: PUSH
73254: EMPTY
73255: LIST
73256: LIST
73257: LIST
73258: PUSH
73259: LD_OWVAR 67
73263: ARRAY
73264: ST_TO_ADDR
// num_imp = [ 1 , 1 , 1 ] [ difficulty ] ;
73265: LD_ADDR_VAR 0 12
73269: PUSH
73270: LD_INT 1
73272: PUSH
73273: LD_INT 1
73275: PUSH
73276: LD_INT 1
73278: PUSH
73279: EMPTY
73280: LIST
73281: LIST
73282: LIST
73283: PUSH
73284: LD_OWVAR 67
73288: ARRAY
73289: ST_TO_ADDR
// num_veh = [ 2 , 3 , 4 ] [ difficulty ] ;
73290: LD_ADDR_VAR 0 13
73294: PUSH
73295: LD_INT 2
73297: PUSH
73298: LD_INT 3
73300: PUSH
73301: LD_INT 4
73303: PUSH
73304: EMPTY
73305: LIST
73306: LIST
73307: LIST
73308: PUSH
73309: LD_OWVAR 67
73313: ARRAY
73314: ST_TO_ADDR
// min_strat_count = 2 ;
73315: LD_ADDR_VAR 0 14
73319: PUSH
73320: LD_INT 2
73322: ST_TO_ADDR
// max_strat_count = 3 ;
73323: LD_ADDR_VAR 0 15
73327: PUSH
73328: LD_INT 3
73330: ST_TO_ADDR
// end ; 4 :
73331: GO 73638
73333: LD_INT 4
73335: DOUBLE
73336: EQUAL
73337: IFTRUE 73341
73339: GO 73485
73341: POP
// begin num_sol = [ 1 , 3 , 3 ] [ difficulty ] ;
73342: LD_ADDR_VAR 0 9
73346: PUSH
73347: LD_INT 1
73349: PUSH
73350: LD_INT 3
73352: PUSH
73353: LD_INT 3
73355: PUSH
73356: EMPTY
73357: LIST
73358: LIST
73359: LIST
73360: PUSH
73361: LD_OWVAR 67
73365: ARRAY
73366: ST_TO_ADDR
// num_baz = [ 2 , 3 , 3 ] [ difficulty ] ;
73367: LD_ADDR_VAR 0 10
73371: PUSH
73372: LD_INT 2
73374: PUSH
73375: LD_INT 3
73377: PUSH
73378: LD_INT 3
73380: PUSH
73381: EMPTY
73382: LIST
73383: LIST
73384: LIST
73385: PUSH
73386: LD_OWVAR 67
73390: ARRAY
73391: ST_TO_ADDR
// num_sci = [ 1 , 2 , 2 ] [ difficulty ] ;
73392: LD_ADDR_VAR 0 11
73396: PUSH
73397: LD_INT 1
73399: PUSH
73400: LD_INT 2
73402: PUSH
73403: LD_INT 2
73405: PUSH
73406: EMPTY
73407: LIST
73408: LIST
73409: LIST
73410: PUSH
73411: LD_OWVAR 67
73415: ARRAY
73416: ST_TO_ADDR
// num_imp = [ 2 , 3 , 3 ] [ difficulty ] ;
73417: LD_ADDR_VAR 0 12
73421: PUSH
73422: LD_INT 2
73424: PUSH
73425: LD_INT 3
73427: PUSH
73428: LD_INT 3
73430: PUSH
73431: EMPTY
73432: LIST
73433: LIST
73434: LIST
73435: PUSH
73436: LD_OWVAR 67
73440: ARRAY
73441: ST_TO_ADDR
// num_veh = [ 0 , 0 , 0 ] [ difficulty ] ;
73442: LD_ADDR_VAR 0 13
73446: PUSH
73447: LD_INT 0
73449: PUSH
73450: LD_INT 0
73452: PUSH
73453: LD_INT 0
73455: PUSH
73456: EMPTY
73457: LIST
73458: LIST
73459: LIST
73460: PUSH
73461: LD_OWVAR 67
73465: ARRAY
73466: ST_TO_ADDR
// min_strat_count = 3 ;
73467: LD_ADDR_VAR 0 14
73471: PUSH
73472: LD_INT 3
73474: ST_TO_ADDR
// max_strat_count = 4 ;
73475: LD_ADDR_VAR 0 15
73479: PUSH
73480: LD_INT 4
73482: ST_TO_ADDR
// end ; 5 :
73483: GO 73638
73485: LD_INT 5
73487: DOUBLE
73488: EQUAL
73489: IFTRUE 73493
73491: GO 73637
73493: POP
// begin num_sol = [ 0 , 0 , 0 ] [ difficulty ] ;
73494: LD_ADDR_VAR 0 9
73498: PUSH
73499: LD_INT 0
73501: PUSH
73502: LD_INT 0
73504: PUSH
73505: LD_INT 0
73507: PUSH
73508: EMPTY
73509: LIST
73510: LIST
73511: LIST
73512: PUSH
73513: LD_OWVAR 67
73517: ARRAY
73518: ST_TO_ADDR
// num_baz = [ 0 , 0 , 0 ] [ difficulty ] ;
73519: LD_ADDR_VAR 0 10
73523: PUSH
73524: LD_INT 0
73526: PUSH
73527: LD_INT 0
73529: PUSH
73530: LD_INT 0
73532: PUSH
73533: EMPTY
73534: LIST
73535: LIST
73536: LIST
73537: PUSH
73538: LD_OWVAR 67
73542: ARRAY
73543: ST_TO_ADDR
// num_sci = [ 0 , 0 , 0 ] [ difficulty ] ;
73544: LD_ADDR_VAR 0 11
73548: PUSH
73549: LD_INT 0
73551: PUSH
73552: LD_INT 0
73554: PUSH
73555: LD_INT 0
73557: PUSH
73558: EMPTY
73559: LIST
73560: LIST
73561: LIST
73562: PUSH
73563: LD_OWVAR 67
73567: ARRAY
73568: ST_TO_ADDR
// num_imp = [ 0 , 0 , 0 ] [ difficulty ] ;
73569: LD_ADDR_VAR 0 12
73573: PUSH
73574: LD_INT 0
73576: PUSH
73577: LD_INT 0
73579: PUSH
73580: LD_INT 0
73582: PUSH
73583: EMPTY
73584: LIST
73585: LIST
73586: LIST
73587: PUSH
73588: LD_OWVAR 67
73592: ARRAY
73593: ST_TO_ADDR
// num_veh = [ 4 , 5 , 5 ] [ difficulty ] ;
73594: LD_ADDR_VAR 0 13
73598: PUSH
73599: LD_INT 4
73601: PUSH
73602: LD_INT 5
73604: PUSH
73605: LD_INT 5
73607: PUSH
73608: EMPTY
73609: LIST
73610: LIST
73611: LIST
73612: PUSH
73613: LD_OWVAR 67
73617: ARRAY
73618: ST_TO_ADDR
// min_strat_count = 2 ;
73619: LD_ADDR_VAR 0 14
73623: PUSH
73624: LD_INT 2
73626: ST_TO_ADDR
// max_strat_count = 4 ;
73627: LD_ADDR_VAR 0 15
73631: PUSH
73632: LD_INT 4
73634: ST_TO_ADDR
// end ; end ;
73635: GO 73638
73637: POP
// InitUc ;
73638: CALL_OW 18
// InitHc ;
73642: CALL_OW 19
// InitVc ;
73646: CALL_OW 20
// uc_side = GetBaseSide ( base ) ;
73650: LD_ADDR_OWVAR 20
73654: PUSH
73655: LD_VAR 0 20
73659: PPUSH
73660: CALL 18937 0 1
73664: ST_TO_ADDR
// uc_nation = GetBaseNation ( base ) ;
73665: LD_ADDR_OWVAR 21
73669: PUSH
73670: LD_VAR 0 20
73674: PPUSH
73675: CALL 19035 0 1
73679: ST_TO_ADDR
// soldier_list = CreateUnitsWithClass ( num_sol , class_soldier , base ) ;
73680: LD_ADDR_VAR 0 16
73684: PUSH
73685: LD_VAR 0 9
73689: PPUSH
73690: LD_INT 1
73692: PPUSH
73693: LD_VAR 0 20
73697: PPUSH
73698: CALL 9948 0 3
73702: ST_TO_ADDR
// if base = 3 then
73703: LD_VAR 0 20
73707: PUSH
73708: LD_INT 3
73710: EQUAL
73711: IFFALSE 73785
// begin k = [ 25 , 50 , 65 ] [ difficulty ] ;
73713: LD_ADDR_VAR 0 2
73717: PUSH
73718: LD_INT 25
73720: PUSH
73721: LD_INT 50
73723: PUSH
73724: LD_INT 65
73726: PUSH
73727: EMPTY
73728: LIST
73729: LIST
73730: LIST
73731: PUSH
73732: LD_OWVAR 67
73736: ARRAY
73737: ST_TO_ADDR
// for i in soldier_list do
73738: LD_ADDR_VAR 0 1
73742: PUSH
73743: LD_VAR 0 16
73747: PUSH
73748: FOR_IN
73749: IFFALSE 73783
// if Rand ( 1 , 100 ) <= k then
73751: LD_INT 1
73753: PPUSH
73754: LD_INT 100
73756: PPUSH
73757: CALL_OW 12
73761: PUSH
73762: LD_VAR 0 2
73766: LESSEQUAL
73767: IFFALSE 73781
// SetClass ( i , class_mortar ) ;
73769: LD_VAR 0 1
73773: PPUSH
73774: LD_INT 8
73776: PPUSH
73777: CALL_OW 336
73781: GO 73748
73783: POP
73784: POP
// end ; soldier_list = soldier_list ^ CreateUnitsWithClass ( num_baz , class_bazooker , base ) ;
73785: LD_ADDR_VAR 0 16
73789: PUSH
73790: LD_VAR 0 16
73794: PUSH
73795: LD_VAR 0 10
73799: PPUSH
73800: LD_INT 9
73802: PPUSH
73803: LD_VAR 0 20
73807: PPUSH
73808: CALL 9948 0 3
73812: ADD
73813: ST_TO_ADDR
// scientist_list = CreateUnitsWithClass ( num_sci , class_scientistic , base ) ;
73814: LD_ADDR_VAR 0 17
73818: PUSH
73819: LD_VAR 0 11
73823: PPUSH
73824: LD_INT 4
73826: PPUSH
73827: LD_VAR 0 20
73831: PPUSH
73832: CALL 9948 0 3
73836: ST_TO_ADDR
// vehicle_list = [ ] ;
73837: LD_ADDR_VAR 0 18
73841: PUSH
73842: EMPTY
73843: ST_TO_ADDR
// implosion_list = [ ] ;
73844: LD_ADDR_VAR 0 19
73848: PUSH
73849: EMPTY
73850: ST_TO_ADDR
// vc_engine = engine_siberite ;
73851: LD_ADDR_OWVAR 39
73855: PUSH
73856: LD_INT 3
73858: ST_TO_ADDR
// for i = 1 to num_imp do
73859: LD_ADDR_VAR 0 1
73863: PUSH
73864: DOUBLE
73865: LD_INT 1
73867: DEC
73868: ST_TO_ADDR
73869: LD_VAR 0 12
73873: PUSH
73874: FOR_TO
73875: IFFALSE 73935
// begin vc_chassis = ar_half_tracked ;
73877: LD_ADDR_OWVAR 37
73881: PUSH
73882: LD_INT 14
73884: ST_TO_ADDR
// vc_weapon = ar_selfpropelled_bomb ;
73885: LD_ADDR_OWVAR 40
73889: PUSH
73890: LD_INT 29
73892: ST_TO_ADDR
// if remote_vehicles_impossible then
73893: LD_EXP 116
73897: IFFALSE 73909
// vc_control = control_apeman else
73899: LD_ADDR_OWVAR 38
73903: PUSH
73904: LD_INT 5
73906: ST_TO_ADDR
73907: GO 73917
// vc_control = control_remote ;
73909: LD_ADDR_OWVAR 38
73913: PUSH
73914: LD_INT 2
73916: ST_TO_ADDR
// implosion_list = implosion_list ^ CreateVehicle ;
73917: LD_ADDR_VAR 0 19
73921: PUSH
73922: LD_VAR 0 19
73926: PUSH
73927: CALL_OW 45
73931: ADD
73932: ST_TO_ADDR
// end ;
73933: GO 73874
73935: POP
73936: POP
// for i = 1 to num_veh do
73937: LD_ADDR_VAR 0 1
73941: PUSH
73942: DOUBLE
73943: LD_INT 1
73945: DEC
73946: ST_TO_ADDR
73947: LD_VAR 0 13
73951: PUSH
73952: FOR_TO
73953: IFFALSE 74450
// begin if base = 3 then
73955: LD_VAR 0 20
73959: PUSH
73960: LD_INT 3
73962: EQUAL
73963: IFFALSE 74155
// begin case difficulty of 1 :
73965: LD_OWVAR 67
73969: PUSH
73970: LD_INT 1
73972: DOUBLE
73973: EQUAL
73974: IFTRUE 73978
73976: GO 74028
73978: POP
// vc_weapon = [ ar_multimissile_ballista , ar_light_gun , ar_double_machine_gun , ar_gatling_gun , ar_flame_thrower , ar_gun , ar_rocket_launcher ] [ Rand ( 1 , 7 ) ] ; 2 :
73979: LD_ADDR_OWVAR 40
73983: PUSH
73984: LD_INT 22
73986: PUSH
73987: LD_INT 23
73989: PUSH
73990: LD_INT 24
73992: PUSH
73993: LD_INT 25
73995: PUSH
73996: LD_INT 26
73998: PUSH
73999: LD_INT 27
74001: PUSH
74002: LD_INT 28
74004: PUSH
74005: EMPTY
74006: LIST
74007: LIST
74008: LIST
74009: LIST
74010: LIST
74011: LIST
74012: LIST
74013: PUSH
74014: LD_INT 1
74016: PPUSH
74017: LD_INT 7
74019: PPUSH
74020: CALL_OW 12
74024: ARRAY
74025: ST_TO_ADDR
74026: GO 74121
74028: LD_INT 2
74030: DOUBLE
74031: EQUAL
74032: IFTRUE 74036
74034: GO 74070
74036: POP
// vc_weapon = [ ar_gatling_gun , ar_gun , ar_rocket_launcher ] [ Rand ( 1 , 3 ) ] ; 3 :
74037: LD_ADDR_OWVAR 40
74041: PUSH
74042: LD_INT 25
74044: PUSH
74045: LD_INT 27
74047: PUSH
74048: LD_INT 28
74050: PUSH
74051: EMPTY
74052: LIST
74053: LIST
74054: LIST
74055: PUSH
74056: LD_INT 1
74058: PPUSH
74059: LD_INT 3
74061: PPUSH
74062: CALL_OW 12
74066: ARRAY
74067: ST_TO_ADDR
74068: GO 74121
74070: LD_INT 3
74072: DOUBLE
74073: EQUAL
74074: IFTRUE 74078
74076: GO 74120
74078: POP
// vc_weapon = [ ar_gatling_gun , ar_gun , ar_rocket_launcher , ar_gun , ar_rocket_launcher ] [ Rand ( 1 , 5 ) ] ; end ;
74079: LD_ADDR_OWVAR 40
74083: PUSH
74084: LD_INT 25
74086: PUSH
74087: LD_INT 27
74089: PUSH
74090: LD_INT 28
74092: PUSH
74093: LD_INT 27
74095: PUSH
74096: LD_INT 28
74098: PUSH
74099: EMPTY
74100: LIST
74101: LIST
74102: LIST
74103: LIST
74104: LIST
74105: PUSH
74106: LD_INT 1
74108: PPUSH
74109: LD_INT 5
74111: PPUSH
74112: CALL_OW 12
74116: ARRAY
74117: ST_TO_ADDR
74118: GO 74121
74120: POP
// vc_chassis = ar_half_tracked ;
74121: LD_ADDR_OWVAR 37
74125: PUSH
74126: LD_INT 14
74128: ST_TO_ADDR
// if remote_vehicles_impossible then
74129: LD_EXP 116
74133: IFFALSE 74145
// vc_control = control_manual else
74135: LD_ADDR_OWVAR 38
74139: PUSH
74140: LD_INT 1
74142: ST_TO_ADDR
74143: GO 74153
// vc_control = control_remote ;
74145: LD_ADDR_OWVAR 38
74149: PUSH
74150: LD_INT 2
74152: ST_TO_ADDR
// end else
74153: GO 74373
// begin case difficulty of 1 :
74155: LD_OWVAR 67
74159: PUSH
74160: LD_INT 1
74162: DOUBLE
74163: EQUAL
74164: IFTRUE 74168
74166: GO 74218
74168: POP
// vc_weapon = [ us_machine_gun , us_light_gun , us_gatling_gun , us_double_gun , us_heavy_gun , us_rocket_launcher , us_laser ] [ Rand ( 1 , 7 ) ] ; 2 :
74169: LD_ADDR_OWVAR 40
74173: PUSH
74174: LD_INT 2
74176: PUSH
74177: LD_INT 3
74179: PUSH
74180: LD_INT 4
74182: PUSH
74183: LD_INT 5
74185: PUSH
74186: LD_INT 6
74188: PUSH
74189: LD_INT 7
74191: PUSH
74192: LD_INT 9
74194: PUSH
74195: EMPTY
74196: LIST
74197: LIST
74198: LIST
74199: LIST
74200: LIST
74201: LIST
74202: LIST
74203: PUSH
74204: LD_INT 1
74206: PPUSH
74207: LD_INT 7
74209: PPUSH
74210: CALL_OW 12
74214: ARRAY
74215: ST_TO_ADDR
74216: GO 74303
74218: LD_INT 2
74220: DOUBLE
74221: EQUAL
74222: IFTRUE 74226
74224: GO 74264
74226: POP
// vc_weapon = [ us_gatling_gun , us_double_gun , us_heavy_gun , us_rocket_launcher ] [ Rand ( 1 , 4 ) ] ; 3 :
74227: LD_ADDR_OWVAR 40
74231: PUSH
74232: LD_INT 4
74234: PUSH
74235: LD_INT 5
74237: PUSH
74238: LD_INT 6
74240: PUSH
74241: LD_INT 7
74243: PUSH
74244: EMPTY
74245: LIST
74246: LIST
74247: LIST
74248: LIST
74249: PUSH
74250: LD_INT 1
74252: PPUSH
74253: LD_INT 4
74255: PPUSH
74256: CALL_OW 12
74260: ARRAY
74261: ST_TO_ADDR
74262: GO 74303
74264: LD_INT 3
74266: DOUBLE
74267: EQUAL
74268: IFTRUE 74272
74270: GO 74302
74272: POP
// vc_weapon = [ us_heavy_gun , us_rocket_launcher ] [ Rand ( 1 , 2 ) ] ; end ;
74273: LD_ADDR_OWVAR 40
74277: PUSH
74278: LD_INT 6
74280: PUSH
74281: LD_INT 7
74283: PUSH
74284: EMPTY
74285: LIST
74286: LIST
74287: PUSH
74288: LD_INT 1
74290: PPUSH
74291: LD_INT 2
74293: PPUSH
74294: CALL_OW 12
74298: ARRAY
74299: ST_TO_ADDR
74300: GO 74303
74302: POP
// if Rand ( 1 , [ 1 , 2 , 3 ] [ difficulty ] ) = 1 and not vc_weapon = us_heavy_gun then
74303: LD_INT 1
74305: PPUSH
74306: LD_INT 1
74308: PUSH
74309: LD_INT 2
74311: PUSH
74312: LD_INT 3
74314: PUSH
74315: EMPTY
74316: LIST
74317: LIST
74318: LIST
74319: PUSH
74320: LD_OWVAR 67
74324: ARRAY
74325: PPUSH
74326: CALL_OW 12
74330: PUSH
74331: LD_INT 1
74333: EQUAL
74334: PUSH
74335: LD_OWVAR 40
74339: PUSH
74340: LD_INT 6
74342: EQUAL
74343: NOT
74344: AND
74345: IFFALSE 74357
// vc_chassis = us_medium_wheeled else
74347: LD_ADDR_OWVAR 37
74351: PUSH
74352: LD_INT 2
74354: ST_TO_ADDR
74355: GO 74365
// vc_chassis = us_morphling ;
74357: LD_ADDR_OWVAR 37
74361: PUSH
74362: LD_INT 5
74364: ST_TO_ADDR
// vc_control = control_manual ;
74365: LD_ADDR_OWVAR 38
74369: PUSH
74370: LD_INT 1
74372: ST_TO_ADDR
// end ; k = CreateVehicle ;
74373: LD_ADDR_VAR 0 2
74377: PUSH
74378: CALL_OW 45
74382: ST_TO_ADDR
// vehicle_list = vehicle_list ^ k ;
74383: LD_ADDR_VAR 0 18
74387: PUSH
74388: LD_VAR 0 18
74392: PUSH
74393: LD_VAR 0 2
74397: ADD
74398: ST_TO_ADDR
// if vc_control = control_manual then
74399: LD_OWVAR 38
74403: PUSH
74404: LD_INT 1
74406: EQUAL
74407: IFFALSE 74448
// begin driver = CreateUnitsWithClass ( 1 , class_mechanic , base ) [ 1 ] ;
74409: LD_ADDR_VAR 0 3
74413: PUSH
74414: LD_INT 1
74416: PPUSH
74417: LD_INT 3
74419: PPUSH
74420: LD_VAR 0 20
74424: PPUSH
74425: CALL 9948 0 3
74429: PUSH
74430: LD_INT 1
74432: ARRAY
74433: ST_TO_ADDR
// PlaceHumanInUnit ( driver , k ) ;
74434: LD_VAR 0 3
74438: PPUSH
74439: LD_VAR 0 2
74443: PPUSH
74444: CALL_OW 52
// end ; end ;
74448: GO 73952
74450: POP
74451: POP
// k = Rand ( min_strat_count , max_strat_count ) ;
74452: LD_ADDR_VAR 0 2
74456: PUSH
74457: LD_VAR 0 14
74461: PPUSH
74462: LD_VAR 0 15
74466: PPUSH
74467: CALL_OW 12
74471: ST_TO_ADDR
// temp_list = [ 1 , 2 , 3 , 4 ] ;
74472: LD_ADDR_VAR 0 4
74476: PUSH
74477: LD_INT 1
74479: PUSH
74480: LD_INT 2
74482: PUSH
74483: LD_INT 3
74485: PUSH
74486: LD_INT 4
74488: PUSH
74489: EMPTY
74490: LIST
74491: LIST
74492: LIST
74493: LIST
74494: ST_TO_ADDR
// chosen_strategies = [ ] ;
74495: LD_ADDR_VAR 0 6
74499: PUSH
74500: EMPTY
74501: ST_TO_ADDR
// for i = 1 to k do
74502: LD_ADDR_VAR 0 1
74506: PUSH
74507: DOUBLE
74508: LD_INT 1
74510: DEC
74511: ST_TO_ADDR
74512: LD_VAR 0 2
74516: PUSH
74517: FOR_TO
74518: IFFALSE 74586
// begin a = Rand ( 1 , temp_list + 0 ) ;
74520: LD_ADDR_VAR 0 7
74524: PUSH
74525: LD_INT 1
74527: PPUSH
74528: LD_VAR 0 4
74532: PUSH
74533: LD_INT 0
74535: PLUS
74536: PPUSH
74537: CALL_OW 12
74541: ST_TO_ADDR
// chosen_strategies = chosen_strategies ^ temp_list [ a ] ;
74542: LD_ADDR_VAR 0 6
74546: PUSH
74547: LD_VAR 0 6
74551: PUSH
74552: LD_VAR 0 4
74556: PUSH
74557: LD_VAR 0 7
74561: ARRAY
74562: ADD
74563: ST_TO_ADDR
// temp_list = Delete ( temp_list , a ) ;
74564: LD_ADDR_VAR 0 4
74568: PUSH
74569: LD_VAR 0 4
74573: PPUSH
74574: LD_VAR 0 7
74578: PPUSH
74579: CALL_OW 3
74583: ST_TO_ADDR
// end ;
74584: GO 74517
74586: POP
74587: POP
// if chosen_strategies = 1 then
74588: LD_VAR 0 6
74592: PUSH
74593: LD_INT 1
74595: EQUAL
74596: IFFALSE 74695
// begin k = chosen_strategies [ 1 ] ;
74598: LD_ADDR_VAR 0 2
74602: PUSH
74603: LD_VAR 0 6
74607: PUSH
74608: LD_INT 1
74610: ARRAY
74611: ST_TO_ADDR
// attacking_soldiers = Replace ( attacking_soldiers , k , soldier_list ) ;
74612: LD_ADDR_LOC 9
74616: PUSH
74617: LD_LOC 9
74621: PPUSH
74622: LD_VAR 0 2
74626: PPUSH
74627: LD_VAR 0 16
74631: PPUSH
74632: CALL_OW 1
74636: ST_TO_ADDR
// attacking_scientists = Replace ( attacking_scientists , k , scientist_list ) ;
74637: LD_ADDR_LOC 10
74641: PUSH
74642: LD_LOC 10
74646: PPUSH
74647: LD_VAR 0 2
74651: PPUSH
74652: LD_VAR 0 17
74656: PPUSH
74657: CALL_OW 1
74661: ST_TO_ADDR
// attacking_vehicles = Replace ( attacking_vehicles , k , vehicle_list ^ implosion_list ) ;
74662: LD_ADDR_LOC 11
74666: PUSH
74667: LD_LOC 11
74671: PPUSH
74672: LD_VAR 0 2
74676: PPUSH
74677: LD_VAR 0 18
74681: PUSH
74682: LD_VAR 0 19
74686: ADD
74687: PPUSH
74688: CALL_OW 1
74692: ST_TO_ADDR
// end else
74693: GO 75325
// begin if Rand ( 1 , 2 ) = 1 then
74695: LD_INT 1
74697: PPUSH
74698: LD_INT 2
74700: PPUSH
74701: CALL_OW 12
74705: PUSH
74706: LD_INT 1
74708: EQUAL
74709: IFFALSE 74807
// begin k = chosen_strategies [ 1 ] ;
74711: LD_ADDR_VAR 0 2
74715: PUSH
74716: LD_VAR 0 6
74720: PUSH
74721: LD_INT 1
74723: ARRAY
74724: ST_TO_ADDR
// chosen_strategies = Delete ( chosen_strategies , 1 ) ;
74725: LD_ADDR_VAR 0 6
74729: PUSH
74730: LD_VAR 0 6
74734: PPUSH
74735: LD_INT 1
74737: PPUSH
74738: CALL_OW 3
74742: ST_TO_ADDR
// attacking_soldiers = Replace ( attacking_soldiers , k , soldier_list ) ;
74743: LD_ADDR_LOC 9
74747: PUSH
74748: LD_LOC 9
74752: PPUSH
74753: LD_VAR 0 2
74757: PPUSH
74758: LD_VAR 0 16
74762: PPUSH
74763: CALL_OW 1
74767: ST_TO_ADDR
// attacking_scientists = Replace ( attacking_scientists , k , scientist_list ) ;
74768: LD_ADDR_LOC 10
74772: PUSH
74773: LD_LOC 10
74777: PPUSH
74778: LD_VAR 0 2
74782: PPUSH
74783: LD_VAR 0 17
74787: PPUSH
74788: CALL_OW 1
74792: ST_TO_ADDR
// soldier_list = [ ] ;
74793: LD_ADDR_VAR 0 16
74797: PUSH
74798: EMPTY
74799: ST_TO_ADDR
// scientist_list = [ ] ;
74800: LD_ADDR_VAR 0 17
74804: PUSH
74805: EMPTY
74806: ST_TO_ADDR
// end ; while chosen_strategies + 0 > 0 do
74807: LD_VAR 0 6
74811: PUSH
74812: LD_INT 0
74814: PLUS
74815: PUSH
74816: LD_INT 0
74818: GREATER
74819: IFFALSE 75325
// begin k = chosen_strategies [ 1 ] ;
74821: LD_ADDR_VAR 0 2
74825: PUSH
74826: LD_VAR 0 6
74830: PUSH
74831: LD_INT 1
74833: ARRAY
74834: ST_TO_ADDR
// temp_list_2 = [ ] ;
74835: LD_ADDR_VAR 0 8
74839: PUSH
74840: EMPTY
74841: ST_TO_ADDR
// a = soldier_list div ( chosen_strategies + 0 ) ;
74842: LD_ADDR_VAR 0 7
74846: PUSH
74847: LD_VAR 0 16
74851: PUSH
74852: LD_VAR 0 6
74856: PUSH
74857: LD_INT 0
74859: PLUS
74860: DIV
74861: ST_TO_ADDR
// for i = 1 to a do
74862: LD_ADDR_VAR 0 1
74866: PUSH
74867: DOUBLE
74868: LD_INT 1
74870: DEC
74871: ST_TO_ADDR
74872: LD_VAR 0 7
74876: PUSH
74877: FOR_TO
74878: IFFALSE 74920
// begin temp_list_2 = temp_list_2 ^ soldier_list [ 1 ] ;
74880: LD_ADDR_VAR 0 8
74884: PUSH
74885: LD_VAR 0 8
74889: PUSH
74890: LD_VAR 0 16
74894: PUSH
74895: LD_INT 1
74897: ARRAY
74898: ADD
74899: ST_TO_ADDR
// soldier_list = Delete ( soldier_list , 1 ) ;
74900: LD_ADDR_VAR 0 16
74904: PUSH
74905: LD_VAR 0 16
74909: PPUSH
74910: LD_INT 1
74912: PPUSH
74913: CALL_OW 3
74917: ST_TO_ADDR
// end ;
74918: GO 74877
74920: POP
74921: POP
// attacking_soldiers = Replace ( attacking_soldiers , k , temp_list_2 ) ;
74922: LD_ADDR_LOC 9
74926: PUSH
74927: LD_LOC 9
74931: PPUSH
74932: LD_VAR 0 2
74936: PPUSH
74937: LD_VAR 0 8
74941: PPUSH
74942: CALL_OW 1
74946: ST_TO_ADDR
// a = scientist_list div ( chosen_strategies + 0 ) ;
74947: LD_ADDR_VAR 0 7
74951: PUSH
74952: LD_VAR 0 17
74956: PUSH
74957: LD_VAR 0 6
74961: PUSH
74962: LD_INT 0
74964: PLUS
74965: DIV
74966: ST_TO_ADDR
// temp_list_2 = [ ] ;
74967: LD_ADDR_VAR 0 8
74971: PUSH
74972: EMPTY
74973: ST_TO_ADDR
// for i = 1 to a do
74974: LD_ADDR_VAR 0 1
74978: PUSH
74979: DOUBLE
74980: LD_INT 1
74982: DEC
74983: ST_TO_ADDR
74984: LD_VAR 0 7
74988: PUSH
74989: FOR_TO
74990: IFFALSE 75032
// begin temp_list_2 = temp_list_2 ^ scientist_list [ 1 ] ;
74992: LD_ADDR_VAR 0 8
74996: PUSH
74997: LD_VAR 0 8
75001: PUSH
75002: LD_VAR 0 17
75006: PUSH
75007: LD_INT 1
75009: ARRAY
75010: ADD
75011: ST_TO_ADDR
// scientist_list = Delete ( scientist_list , 1 ) ;
75012: LD_ADDR_VAR 0 17
75016: PUSH
75017: LD_VAR 0 17
75021: PPUSH
75022: LD_INT 1
75024: PPUSH
75025: CALL_OW 3
75029: ST_TO_ADDR
// end ;
75030: GO 74989
75032: POP
75033: POP
// attacking_scientists = Replace ( attacking_scientists , k , temp_list_2 ) ;
75034: LD_ADDR_LOC 10
75038: PUSH
75039: LD_LOC 10
75043: PPUSH
75044: LD_VAR 0 2
75048: PPUSH
75049: LD_VAR 0 8
75053: PPUSH
75054: CALL_OW 1
75058: ST_TO_ADDR
// a = vehicle_list div ( chosen_strategies + 0 ) ;
75059: LD_ADDR_VAR 0 7
75063: PUSH
75064: LD_VAR 0 18
75068: PUSH
75069: LD_VAR 0 6
75073: PUSH
75074: LD_INT 0
75076: PLUS
75077: DIV
75078: ST_TO_ADDR
// temp_list_2 = [ ] ;
75079: LD_ADDR_VAR 0 8
75083: PUSH
75084: EMPTY
75085: ST_TO_ADDR
// for i = 1 to a do
75086: LD_ADDR_VAR 0 1
75090: PUSH
75091: DOUBLE
75092: LD_INT 1
75094: DEC
75095: ST_TO_ADDR
75096: LD_VAR 0 7
75100: PUSH
75101: FOR_TO
75102: IFFALSE 75144
// begin temp_list_2 = temp_list_2 ^ vehicle_list [ 1 ] ;
75104: LD_ADDR_VAR 0 8
75108: PUSH
75109: LD_VAR 0 8
75113: PUSH
75114: LD_VAR 0 18
75118: PUSH
75119: LD_INT 1
75121: ARRAY
75122: ADD
75123: ST_TO_ADDR
// vehicle_list = Delete ( vehicle_list , 1 ) ;
75124: LD_ADDR_VAR 0 18
75128: PUSH
75129: LD_VAR 0 18
75133: PPUSH
75134: LD_INT 1
75136: PPUSH
75137: CALL_OW 3
75141: ST_TO_ADDR
// end ;
75142: GO 75101
75144: POP
75145: POP
// attacking_vehicles = Replace ( attacking_vehicles , k , temp_list_2 ) ;
75146: LD_ADDR_LOC 11
75150: PUSH
75151: LD_LOC 11
75155: PPUSH
75156: LD_VAR 0 2
75160: PPUSH
75161: LD_VAR 0 8
75165: PPUSH
75166: CALL_OW 1
75170: ST_TO_ADDR
// a = implosion_list div ( chosen_strategies + 0 ) ;
75171: LD_ADDR_VAR 0 7
75175: PUSH
75176: LD_VAR 0 19
75180: PUSH
75181: LD_VAR 0 6
75185: PUSH
75186: LD_INT 0
75188: PLUS
75189: DIV
75190: ST_TO_ADDR
// temp_list_2 = [ ] ;
75191: LD_ADDR_VAR 0 8
75195: PUSH
75196: EMPTY
75197: ST_TO_ADDR
// for i = 1 to a do
75198: LD_ADDR_VAR 0 1
75202: PUSH
75203: DOUBLE
75204: LD_INT 1
75206: DEC
75207: ST_TO_ADDR
75208: LD_VAR 0 7
75212: PUSH
75213: FOR_TO
75214: IFFALSE 75256
// begin temp_list_2 = temp_list_2 ^ implosion_list [ 1 ] ;
75216: LD_ADDR_VAR 0 8
75220: PUSH
75221: LD_VAR 0 8
75225: PUSH
75226: LD_VAR 0 19
75230: PUSH
75231: LD_INT 1
75233: ARRAY
75234: ADD
75235: ST_TO_ADDR
// implosion_list = Delete ( implosion_list , 1 ) ;
75236: LD_ADDR_VAR 0 19
75240: PUSH
75241: LD_VAR 0 19
75245: PPUSH
75246: LD_INT 1
75248: PPUSH
75249: CALL_OW 3
75253: ST_TO_ADDR
// end ;
75254: GO 75213
75256: POP
75257: POP
// temp_list = attacking_vehicles [ k ] ^ temp_list_2 ;
75258: LD_ADDR_VAR 0 4
75262: PUSH
75263: LD_LOC 11
75267: PUSH
75268: LD_VAR 0 2
75272: ARRAY
75273: PUSH
75274: LD_VAR 0 8
75278: ADD
75279: ST_TO_ADDR
// attacking_vehicles = Replace ( attacking_vehicles , k , temp_list ) ;
75280: LD_ADDR_LOC 11
75284: PUSH
75285: LD_LOC 11
75289: PPUSH
75290: LD_VAR 0 2
75294: PPUSH
75295: LD_VAR 0 4
75299: PPUSH
75300: CALL_OW 1
75304: ST_TO_ADDR
// chosen_strategies = Delete ( chosen_strategies , 1 ) ;
75305: LD_ADDR_VAR 0 6
75309: PUSH
75310: LD_VAR 0 6
75314: PPUSH
75315: LD_INT 1
75317: PPUSH
75318: CALL_OW 3
75322: ST_TO_ADDR
// end ;
75323: GO 74807
// end ; for i = 1 to attacking_vehicles + 0 do
75325: LD_ADDR_VAR 0 1
75329: PUSH
75330: DOUBLE
75331: LD_INT 1
75333: DEC
75334: ST_TO_ADDR
75335: LD_LOC 11
75339: PUSH
75340: LD_INT 0
75342: PLUS
75343: PUSH
75344: FOR_TO
75345: IFFALSE 75439
// begin temp_list_2 = [ ] ;
75347: LD_ADDR_VAR 0 8
75351: PUSH
75352: EMPTY
75353: ST_TO_ADDR
// for k in attacking_vehicles [ i ] do
75354: LD_ADDR_VAR 0 2
75358: PUSH
75359: LD_LOC 11
75363: PUSH
75364: LD_VAR 0 1
75368: ARRAY
75369: PUSH
75370: FOR_IN
75371: IFFALSE 75396
// temp_list_2 = temp_list_2 ^ IsDrivenBy ( k ) ;
75373: LD_ADDR_VAR 0 8
75377: PUSH
75378: LD_VAR 0 8
75382: PUSH
75383: LD_VAR 0 2
75387: PPUSH
75388: CALL_OW 311
75392: ADD
75393: ST_TO_ADDR
75394: GO 75370
75396: POP
75397: POP
// temp_list_2 = temp_list_2 diff 0 ;
75398: LD_ADDR_VAR 0 8
75402: PUSH
75403: LD_VAR 0 8
75407: PUSH
75408: LD_INT 0
75410: DIFF
75411: ST_TO_ADDR
// attacking_mechanics = Replace ( attacking_mechanics , i , temp_list_2 ) ;
75412: LD_ADDR_LOC 12
75416: PUSH
75417: LD_LOC 12
75421: PPUSH
75422: LD_VAR 0 1
75426: PPUSH
75427: LD_VAR 0 8
75431: PPUSH
75432: CALL_OW 1
75436: ST_TO_ADDR
// end ;
75437: GO 75344
75439: POP
75440: POP
// if base = 3 then
75441: LD_VAR 0 20
75445: PUSH
75446: LD_INT 3
75448: EQUAL
75449: IFFALSE 75455
// LinkRemoteAttackVehiclesToMechanics ;
75451: CALL 75751 0 0
// for i in attacking_soldiers ^ attacking_scientists ^ attacking_vehicles ^ attacking_mechanics do
75455: LD_ADDR_VAR 0 1
75459: PUSH
75460: LD_LOC 9
75464: PUSH
75465: LD_LOC 10
75469: ADD
75470: PUSH
75471: LD_LOC 11
75475: ADD
75476: PUSH
75477: LD_LOC 12
75481: ADD
75482: PUSH
75483: FOR_IN
75484: IFFALSE 75528
// for k in i do
75486: LD_ADDR_VAR 0 2
75490: PUSH
75491: LD_VAR 0 1
75495: PUSH
75496: FOR_IN
75497: IFFALSE 75524
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , k , 1 ) ;
75499: LD_ADDR_EXP 79
75503: PUSH
75504: LD_EXP 79
75508: PPUSH
75509: LD_VAR 0 2
75513: PPUSH
75514: LD_INT 1
75516: PPUSH
75517: CALL_OW 1
75521: ST_TO_ADDR
75522: GO 75496
75524: POP
75525: POP
75526: GO 75483
75528: POP
75529: POP
// for i = 1 to attacking_vehicles + 0 do
75530: LD_ADDR_VAR 0 1
75534: PUSH
75535: DOUBLE
75536: LD_INT 1
75538: DEC
75539: ST_TO_ADDR
75540: LD_LOC 11
75544: PUSH
75545: LD_INT 0
75547: PLUS
75548: PUSH
75549: FOR_TO
75550: IFFALSE 75703
// begin area = [ attack_group_1_spawn_area , attack_group_2_spawn_area , attack_group_3_spawn_area , attack_group_4_spawn_area ] [ i ] ;
75552: LD_ADDR_VAR 0 5
75556: PUSH
75557: LD_INT 25
75559: PUSH
75560: LD_INT 26
75562: PUSH
75563: LD_INT 27
75565: PUSH
75566: LD_INT 28
75568: PUSH
75569: EMPTY
75570: LIST
75571: LIST
75572: LIST
75573: LIST
75574: PUSH
75575: LD_VAR 0 1
75579: ARRAY
75580: ST_TO_ADDR
// for k in attacking_vehicles [ i ] do
75581: LD_ADDR_VAR 0 2
75585: PUSH
75586: LD_LOC 11
75590: PUSH
75591: LD_VAR 0 1
75595: ARRAY
75596: PUSH
75597: FOR_IN
75598: IFFALSE 75619
// PlaceUnitArea ( k , area , false ) ;
75600: LD_VAR 0 2
75604: PPUSH
75605: LD_VAR 0 5
75609: PPUSH
75610: LD_INT 0
75612: PPUSH
75613: CALL_OW 49
75617: GO 75597
75619: POP
75620: POP
// for k in attacking_soldiers [ i ] do
75621: LD_ADDR_VAR 0 2
75625: PUSH
75626: LD_LOC 9
75630: PUSH
75631: LD_VAR 0 1
75635: ARRAY
75636: PUSH
75637: FOR_IN
75638: IFFALSE 75659
// PlaceUnitArea ( k , area , false ) ;
75640: LD_VAR 0 2
75644: PPUSH
75645: LD_VAR 0 5
75649: PPUSH
75650: LD_INT 0
75652: PPUSH
75653: CALL_OW 49
75657: GO 75637
75659: POP
75660: POP
// for k in attacking_scientists [ i ] do
75661: LD_ADDR_VAR 0 2
75665: PUSH
75666: LD_LOC 10
75670: PUSH
75671: LD_VAR 0 1
75675: ARRAY
75676: PUSH
75677: FOR_IN
75678: IFFALSE 75699
// PlaceUnitArea ( k , area , false ) ;
75680: LD_VAR 0 2
75684: PPUSH
75685: LD_VAR 0 5
75689: PPUSH
75690: LD_INT 0
75692: PPUSH
75693: CALL_OW 49
75697: GO 75677
75699: POP
75700: POP
// end ;
75701: GO 75549
75703: POP
75704: POP
// until false ;
75705: LD_INT 0
75707: IFFALSE 72615
// end ;
75709: PPOPN 21
75711: END
// every 0 0$1 + 0 0$0.2 do
75712: GO 75714
75714: DISABLE
// begin repeat wait ( 0 0$1 ) ;
75715: LD_INT 35
75717: PPUSH
75718: CALL_OW 67
// if remote_vehicles_impossible then
75722: LD_EXP 116
75726: IFFALSE 75730
// exit ;
75728: GO 75750
// if current_attack_num = 5 then
75730: LD_EXP 115
75734: PUSH
75735: LD_INT 5
75737: EQUAL
75738: IFFALSE 75742
// exit ;
75740: GO 75750
// LinkRemoteAttackVehiclesToMechanics ;
75742: CALL 75751 0 0
// until false ;
75746: LD_INT 0
75748: IFFALSE 75715
// end ;
75750: END
// function LinkRemoteAttackVehiclesToMechanics ; var k , i , vehicle_list , temp_list , controllers , dict ; begin
75751: LD_INT 0
75753: PPUSH
75754: PPUSH
75755: PPUSH
75756: PPUSH
75757: PPUSH
75758: PPUSH
75759: PPUSH
// legion_control_tower_mechanics = UnitFilter ( legion_control_tower_mechanics , [ f_alive ] ) ;
75760: LD_ADDR_LOC 8
75764: PUSH
75765: LD_LOC 8
75769: PPUSH
75770: LD_INT 51
75772: PUSH
75773: EMPTY
75774: LIST
75775: PPUSH
75776: CALL_OW 72
75780: ST_TO_ADDR
// if legion_control_tower_mechanics = 0 then
75781: LD_LOC 8
75785: PUSH
75786: LD_INT 0
75788: EQUAL
75789: IFFALSE 75793
// exit ;
75791: GO 76347
// vehicle_list = [ ] ;
75793: LD_ADDR_VAR 0 4
75797: PUSH
75798: EMPTY
75799: ST_TO_ADDR
// for i in attacking_vehicles do
75800: LD_ADDR_VAR 0 3
75804: PUSH
75805: LD_LOC 11
75809: PUSH
75810: FOR_IN
75811: IFFALSE 75911
// begin for k in i do
75813: LD_ADDR_VAR 0 2
75817: PUSH
75818: LD_VAR 0 3
75822: PUSH
75823: FOR_IN
75824: IFFALSE 75907
// begin if IsOk ( k ) then
75826: LD_VAR 0 2
75830: PPUSH
75831: CALL_OW 302
75835: IFFALSE 75885
// begin if GetControl ( k ) = control_remote and IsControledBy ( k ) = 0 then
75837: LD_VAR 0 2
75841: PPUSH
75842: CALL_OW 263
75846: PUSH
75847: LD_INT 2
75849: EQUAL
75850: PUSH
75851: LD_VAR 0 2
75855: PPUSH
75856: CALL_OW 312
75860: PUSH
75861: LD_INT 0
75863: EQUAL
75864: AND
75865: IFFALSE 75883
// vehicle_list = vehicle_list ^ k ;
75867: LD_ADDR_VAR 0 4
75871: PUSH
75872: LD_VAR 0 4
75876: PUSH
75877: LD_VAR 0 2
75881: ADD
75882: ST_TO_ADDR
// end else
75883: GO 75905
// if IsLive ( k ) then
75885: LD_VAR 0 2
75889: PPUSH
75890: CALL_OW 300
75894: IFFALSE 75905
// ComUnlink ( k ) ;
75896: LD_VAR 0 2
75900: PPUSH
75901: CALL_OW 136
// end ;
75905: GO 75823
75907: POP
75908: POP
// end ;
75909: GO 75810
75911: POP
75912: POP
// if vehicle_list = 0 then
75913: LD_VAR 0 4
75917: PUSH
75918: LD_INT 0
75920: EQUAL
75921: IFFALSE 75925
// exit ;
75923: GO 76347
// controllers = [ ] ;
75925: LD_ADDR_VAR 0 6
75929: PUSH
75930: EMPTY
75931: ST_TO_ADDR
// for i in legion_control_tower_mechanics do
75932: LD_ADDR_VAR 0 3
75936: PUSH
75937: LD_LOC 8
75941: PUSH
75942: FOR_IN
75943: IFFALSE 76018
// begin k = IsInUnit ( i ) ;
75945: LD_ADDR_VAR 0 2
75949: PUSH
75950: LD_VAR 0 3
75954: PPUSH
75955: CALL_OW 310
75959: ST_TO_ADDR
// if k > 0 then
75960: LD_VAR 0 2
75964: PUSH
75965: LD_INT 0
75967: GREATER
75968: IFFALSE 76016
// if GetType ( k ) = unit_vehicle and GetWeapon ( k ) = ar_control_tower then
75970: LD_VAR 0 2
75974: PPUSH
75975: CALL_OW 247
75979: PUSH
75980: LD_INT 2
75982: EQUAL
75983: PUSH
75984: LD_VAR 0 2
75988: PPUSH
75989: CALL_OW 264
75993: PUSH
75994: LD_INT 31
75996: EQUAL
75997: AND
75998: IFFALSE 76016
// controllers = controllers ^ i ;
76000: LD_ADDR_VAR 0 6
76004: PUSH
76005: LD_VAR 0 6
76009: PUSH
76010: LD_VAR 0 3
76014: ADD
76015: ST_TO_ADDR
// end ;
76016: GO 75942
76018: POP
76019: POP
// if controllers = 0 then
76020: LD_VAR 0 6
76024: PUSH
76025: LD_INT 0
76027: EQUAL
76028: IFFALSE 76032
// exit ;
76030: GO 76347
// dict = [ ] ;
76032: LD_ADDR_VAR 0 7
76036: PUSH
76037: EMPTY
76038: ST_TO_ADDR
// for i in controllers do
76039: LD_ADDR_VAR 0 3
76043: PUSH
76044: LD_VAR 0 6
76048: PUSH
76049: FOR_IN
76050: IFFALSE 76084
// dict = Replace ( dict , i , UnitsLinked ( i ) ) ;
76052: LD_ADDR_VAR 0 7
76056: PUSH
76057: LD_VAR 0 7
76061: PPUSH
76062: LD_VAR 0 3
76066: PPUSH
76067: LD_VAR 0 3
76071: PPUSH
76072: CALL_OW 432
76076: PPUSH
76077: CALL_OW 1
76081: ST_TO_ADDR
76082: GO 76049
76084: POP
76085: POP
// for i in vehicle_list do
76086: LD_ADDR_VAR 0 3
76090: PUSH
76091: LD_VAR 0 4
76095: PUSH
76096: FOR_IN
76097: IFFALSE 76345
// begin k = 1 ;
76099: LD_ADDR_VAR 0 2
76103: PUSH
76104: LD_INT 1
76106: ST_TO_ADDR
// while k <= controllers + 0 do
76107: LD_VAR 0 2
76111: PUSH
76112: LD_VAR 0 6
76116: PUSH
76117: LD_INT 0
76119: PLUS
76120: LESSEQUAL
76121: IFFALSE 76199
// begin if dict [ controllers [ k ] ] = GetSkill ( controllers [ k ] , skill_mechanical ) then
76123: LD_VAR 0 7
76127: PUSH
76128: LD_VAR 0 6
76132: PUSH
76133: LD_VAR 0 2
76137: ARRAY
76138: ARRAY
76139: PUSH
76140: LD_VAR 0 6
76144: PUSH
76145: LD_VAR 0 2
76149: ARRAY
76150: PPUSH
76151: LD_INT 3
76153: PPUSH
76154: CALL_OW 259
76158: EQUAL
76159: IFFALSE 76183
// begin controllers = Delete ( controllers , k ) ;
76161: LD_ADDR_VAR 0 6
76165: PUSH
76166: LD_VAR 0 6
76170: PPUSH
76171: LD_VAR 0 2
76175: PPUSH
76176: CALL_OW 3
76180: ST_TO_ADDR
// continue ;
76181: GO 76107
// end ; k = k + 1 ;
76183: LD_ADDR_VAR 0 2
76187: PUSH
76188: LD_VAR 0 2
76192: PUSH
76193: LD_INT 1
76195: PLUS
76196: ST_TO_ADDR
// end ;
76197: GO 76107
// if controllers = 0 then
76199: LD_VAR 0 6
76203: PUSH
76204: LD_INT 0
76206: EQUAL
76207: IFFALSE 76213
// exit ;
76209: POP
76210: POP
76211: GO 76347
// temp_list = [ ] ;
76213: LD_ADDR_VAR 0 5
76217: PUSH
76218: EMPTY
76219: ST_TO_ADDR
// for k = 1 to controllers + 0 do
76220: LD_ADDR_VAR 0 2
76224: PUSH
76225: DOUBLE
76226: LD_INT 1
76228: DEC
76229: ST_TO_ADDR
76230: LD_VAR 0 6
76234: PUSH
76235: LD_INT 0
76237: PLUS
76238: PUSH
76239: FOR_TO
76240: IFFALSE 76272
// temp_list = temp_list ^ dict [ controllers [ k ] ] ;
76242: LD_ADDR_VAR 0 5
76246: PUSH
76247: LD_VAR 0 5
76251: PUSH
76252: LD_VAR 0 7
76256: PUSH
76257: LD_VAR 0 6
76261: PUSH
76262: LD_VAR 0 2
76266: ARRAY
76267: ARRAY
76268: ADD
76269: ST_TO_ADDR
76270: GO 76239
76272: POP
76273: POP
// k = WorstFromListByList ( controllers , temp_list ) ;
76274: LD_ADDR_VAR 0 2
76278: PUSH
76279: LD_VAR 0 6
76283: PPUSH
76284: LD_VAR 0 5
76288: PPUSH
76289: CALL_OW 78
76293: ST_TO_ADDR
// ComLinkTo ( i , k ) ;
76294: LD_VAR 0 3
76298: PPUSH
76299: LD_VAR 0 2
76303: PPUSH
76304: CALL_OW 135
// dict = Replace ( dict , k , dict [ k ] + 1 ) ;
76308: LD_ADDR_VAR 0 7
76312: PUSH
76313: LD_VAR 0 7
76317: PPUSH
76318: LD_VAR 0 2
76322: PPUSH
76323: LD_VAR 0 7
76327: PUSH
76328: LD_VAR 0 2
76332: ARRAY
76333: PUSH
76334: LD_INT 1
76336: PLUS
76337: PPUSH
76338: CALL_OW 1
76342: ST_TO_ADDR
// end ;
76343: GO 76096
76345: POP
76346: POP
// end ;
76347: LD_VAR 0 1
76351: RET
// every 0 0$1 + 0 0$0.4 trigger am_attack_begun do var base , i , k , driver , g , mechanics_on_foot , temp_list , temp_list_2 , temp_unit ; var vehicle_list , mechanic_list , init_attack_hexes , normal_attack_hexes , move_dist ;
76352: LD_LOC 14
76356: IFFALSE 78603
76358: GO 76360
76360: DISABLE
76361: LD_INT 0
76363: PPUSH
76364: PPUSH
76365: PPUSH
76366: PPUSH
76367: PPUSH
76368: PPUSH
76369: PPUSH
76370: PPUSH
76371: PPUSH
76372: PPUSH
76373: PPUSH
76374: PPUSH
76375: PPUSH
76376: PPUSH
// begin base = 4 ;
76377: LD_ADDR_VAR 0 1
76381: PUSH
76382: LD_INT 4
76384: ST_TO_ADDR
// move_dist = 6 ;
76385: LD_ADDR_VAR 0 14
76389: PUSH
76390: LD_INT 6
76392: ST_TO_ADDR
// init_attack_hexes = [ [ 111 , 162 ] , [ 111 , 149 ] , [ 105 , 133 ] , [ 95 , 117 ] , [ 85 , 98 ] ] ;
76393: LD_ADDR_VAR 0 12
76397: PUSH
76398: LD_INT 111
76400: PUSH
76401: LD_INT 162
76403: PUSH
76404: EMPTY
76405: LIST
76406: LIST
76407: PUSH
76408: LD_INT 111
76410: PUSH
76411: LD_INT 149
76413: PUSH
76414: EMPTY
76415: LIST
76416: LIST
76417: PUSH
76418: LD_INT 105
76420: PUSH
76421: LD_INT 133
76423: PUSH
76424: EMPTY
76425: LIST
76426: LIST
76427: PUSH
76428: LD_INT 95
76430: PUSH
76431: LD_INT 117
76433: PUSH
76434: EMPTY
76435: LIST
76436: LIST
76437: PUSH
76438: LD_INT 85
76440: PUSH
76441: LD_INT 98
76443: PUSH
76444: EMPTY
76445: LIST
76446: LIST
76447: PUSH
76448: EMPTY
76449: LIST
76450: LIST
76451: LIST
76452: LIST
76453: LIST
76454: ST_TO_ADDR
// normal_attack_hexes = [ [ 111 , 162 ] , [ 111 , 149 ] , [ 105 , 133 ] , [ 95 , 117 ] , [ 85 , 98 ] , [ 73 , 78 ] , [ 64 , 63 ] ] ;
76455: LD_ADDR_VAR 0 13
76459: PUSH
76460: LD_INT 111
76462: PUSH
76463: LD_INT 162
76465: PUSH
76466: EMPTY
76467: LIST
76468: LIST
76469: PUSH
76470: LD_INT 111
76472: PUSH
76473: LD_INT 149
76475: PUSH
76476: EMPTY
76477: LIST
76478: LIST
76479: PUSH
76480: LD_INT 105
76482: PUSH
76483: LD_INT 133
76485: PUSH
76486: EMPTY
76487: LIST
76488: LIST
76489: PUSH
76490: LD_INT 95
76492: PUSH
76493: LD_INT 117
76495: PUSH
76496: EMPTY
76497: LIST
76498: LIST
76499: PUSH
76500: LD_INT 85
76502: PUSH
76503: LD_INT 98
76505: PUSH
76506: EMPTY
76507: LIST
76508: LIST
76509: PUSH
76510: LD_INT 73
76512: PUSH
76513: LD_INT 78
76515: PUSH
76516: EMPTY
76517: LIST
76518: LIST
76519: PUSH
76520: LD_INT 64
76522: PUSH
76523: LD_INT 63
76525: PUSH
76526: EMPTY
76527: LIST
76528: LIST
76529: PUSH
76530: EMPTY
76531: LIST
76532: LIST
76533: LIST
76534: LIST
76535: LIST
76536: LIST
76537: LIST
76538: ST_TO_ADDR
// while not PlayerBaseUnderAttackByPseudoBase ( base ) do
76539: LD_VAR 0 1
76543: PPUSH
76544: CALL 78606 0 1
76548: NOT
76549: IFFALSE 76560
// wait ( 0 0$1 ) ;
76551: LD_INT 35
76553: PPUSH
76554: CALL_OW 67
76558: GO 76539
// wait ( 0 0$10 ) ;
76560: LD_INT 350
76562: PPUSH
76563: CALL_OW 67
// vehicle_list = [ ] ;
76567: LD_ADDR_VAR 0 10
76571: PUSH
76572: EMPTY
76573: ST_TO_ADDR
// mechanic_list = [ ] ;
76574: LD_ADDR_VAR 0 11
76578: PUSH
76579: EMPTY
76580: ST_TO_ADDR
// InitUc ;
76581: CALL_OW 18
// InitHc ;
76585: CALL_OW 19
// InitVc ;
76589: CALL_OW 20
// uc_side = GetBaseSide ( base ) ;
76593: LD_ADDR_OWVAR 20
76597: PUSH
76598: LD_VAR 0 1
76602: PPUSH
76603: CALL 18937 0 1
76607: ST_TO_ADDR
// uc_nation = GetBaseNation ( base ) ;
76608: LD_ADDR_OWVAR 21
76612: PUSH
76613: LD_VAR 0 1
76617: PPUSH
76618: CALL 19035 0 1
76622: ST_TO_ADDR
// vc_engine = engine_siberite ;
76623: LD_ADDR_OWVAR 39
76627: PUSH
76628: LD_INT 3
76630: ST_TO_ADDR
// for i = 1 to [ 2 , 3 , 4 ] [ difficulty ] do
76631: LD_ADDR_VAR 0 2
76635: PUSH
76636: DOUBLE
76637: LD_INT 1
76639: DEC
76640: ST_TO_ADDR
76641: LD_INT 2
76643: PUSH
76644: LD_INT 3
76646: PUSH
76647: LD_INT 4
76649: PUSH
76650: EMPTY
76651: LIST
76652: LIST
76653: LIST
76654: PUSH
76655: LD_OWVAR 67
76659: ARRAY
76660: PUSH
76661: FOR_TO
76662: IFFALSE 76969
// begin case difficulty of 1 :
76664: LD_OWVAR 67
76668: PUSH
76669: LD_INT 1
76671: DOUBLE
76672: EQUAL
76673: IFTRUE 76677
76675: GO 76727
76677: POP
// vc_weapon = [ us_machine_gun , us_light_gun , us_gatling_gun , us_double_gun , us_heavy_gun , us_rocket_launcher , us_laser ] [ Rand ( 1 , 7 ) ] ; 2 :
76678: LD_ADDR_OWVAR 40
76682: PUSH
76683: LD_INT 2
76685: PUSH
76686: LD_INT 3
76688: PUSH
76689: LD_INT 4
76691: PUSH
76692: LD_INT 5
76694: PUSH
76695: LD_INT 6
76697: PUSH
76698: LD_INT 7
76700: PUSH
76701: LD_INT 9
76703: PUSH
76704: EMPTY
76705: LIST
76706: LIST
76707: LIST
76708: LIST
76709: LIST
76710: LIST
76711: LIST
76712: PUSH
76713: LD_INT 1
76715: PPUSH
76716: LD_INT 7
76718: PPUSH
76719: CALL_OW 12
76723: ARRAY
76724: ST_TO_ADDR
76725: GO 76816
76727: LD_INT 2
76729: DOUBLE
76730: EQUAL
76731: IFTRUE 76735
76733: GO 76773
76735: POP
// vc_weapon = [ us_gatling_gun , us_double_gun , us_heavy_gun , us_rocket_launcher ] [ Rand ( 1 , 4 ) ] ; 3 :
76736: LD_ADDR_OWVAR 40
76740: PUSH
76741: LD_INT 4
76743: PUSH
76744: LD_INT 5
76746: PUSH
76747: LD_INT 6
76749: PUSH
76750: LD_INT 7
76752: PUSH
76753: EMPTY
76754: LIST
76755: LIST
76756: LIST
76757: LIST
76758: PUSH
76759: LD_INT 1
76761: PPUSH
76762: LD_INT 4
76764: PPUSH
76765: CALL_OW 12
76769: ARRAY
76770: ST_TO_ADDR
76771: GO 76816
76773: LD_INT 3
76775: DOUBLE
76776: EQUAL
76777: IFTRUE 76781
76779: GO 76815
76781: POP
// vc_weapon = [ us_gatling_gun , us_heavy_gun , us_rocket_launcher ] [ Rand ( 1 , 3 ) ] ; end ;
76782: LD_ADDR_OWVAR 40
76786: PUSH
76787: LD_INT 4
76789: PUSH
76790: LD_INT 6
76792: PUSH
76793: LD_INT 7
76795: PUSH
76796: EMPTY
76797: LIST
76798: LIST
76799: LIST
76800: PUSH
76801: LD_INT 1
76803: PPUSH
76804: LD_INT 3
76806: PPUSH
76807: CALL_OW 12
76811: ARRAY
76812: ST_TO_ADDR
76813: GO 76816
76815: POP
// if Rand ( 1 , [ 1 , 2 , 3 ] [ difficulty ] ) = 1 and not vc_weapon = us_heavy_gun then
76816: LD_INT 1
76818: PPUSH
76819: LD_INT 1
76821: PUSH
76822: LD_INT 2
76824: PUSH
76825: LD_INT 3
76827: PUSH
76828: EMPTY
76829: LIST
76830: LIST
76831: LIST
76832: PUSH
76833: LD_OWVAR 67
76837: ARRAY
76838: PPUSH
76839: CALL_OW 12
76843: PUSH
76844: LD_INT 1
76846: EQUAL
76847: PUSH
76848: LD_OWVAR 40
76852: PUSH
76853: LD_INT 6
76855: EQUAL
76856: NOT
76857: AND
76858: IFFALSE 76870
// vc_chassis = us_medium_wheeled else
76860: LD_ADDR_OWVAR 37
76864: PUSH
76865: LD_INT 2
76867: ST_TO_ADDR
76868: GO 76878
// vc_chassis = us_morphling ;
76870: LD_ADDR_OWVAR 37
76874: PUSH
76875: LD_INT 5
76877: ST_TO_ADDR
// vc_control = control_manual ;
76878: LD_ADDR_OWVAR 38
76882: PUSH
76883: LD_INT 1
76885: ST_TO_ADDR
// k = CreateVehicle ;
76886: LD_ADDR_VAR 0 3
76890: PUSH
76891: CALL_OW 45
76895: ST_TO_ADDR
// vehicle_list = vehicle_list ^ k ;
76896: LD_ADDR_VAR 0 10
76900: PUSH
76901: LD_VAR 0 10
76905: PUSH
76906: LD_VAR 0 3
76910: ADD
76911: ST_TO_ADDR
// driver = CreateUnitsWithClass ( 1 , class_mechanic , base ) [ 1 ] ;
76912: LD_ADDR_VAR 0 4
76916: PUSH
76917: LD_INT 1
76919: PPUSH
76920: LD_INT 3
76922: PPUSH
76923: LD_VAR 0 1
76927: PPUSH
76928: CALL 9948 0 3
76932: PUSH
76933: LD_INT 1
76935: ARRAY
76936: ST_TO_ADDR
// mechanic_list = mechanic_list ^ driver ;
76937: LD_ADDR_VAR 0 11
76941: PUSH
76942: LD_VAR 0 11
76946: PUSH
76947: LD_VAR 0 4
76951: ADD
76952: ST_TO_ADDR
// PlaceHumanInUnit ( driver , k ) ;
76953: LD_VAR 0 4
76957: PPUSH
76958: LD_VAR 0 3
76962: PPUSH
76963: CALL_OW 52
// end ;
76967: GO 76661
76969: POP
76970: POP
// for i in vehicle_list ^ mechanic_list do
76971: LD_ADDR_VAR 0 2
76975: PUSH
76976: LD_VAR 0 10
76980: PUSH
76981: LD_VAR 0 11
76985: ADD
76986: PUSH
76987: FOR_IN
76988: IFFALSE 77015
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , i , 1 ) ;
76990: LD_ADDR_EXP 79
76994: PUSH
76995: LD_EXP 79
76999: PPUSH
77000: LD_VAR 0 2
77004: PPUSH
77005: LD_INT 1
77007: PPUSH
77008: CALL_OW 1
77012: ST_TO_ADDR
77013: GO 76987
77015: POP
77016: POP
// repeat wait ( 0 0$1 ) ;
77017: LD_INT 35
77019: PPUSH
77020: CALL_OW 67
// i = 1 ;
77024: LD_ADDR_VAR 0 2
77028: PUSH
77029: LD_INT 1
77031: ST_TO_ADDR
// while i <= vehicle_list do
77032: LD_VAR 0 2
77036: PUSH
77037: LD_VAR 0 10
77041: LESSEQUAL
77042: IFFALSE 77099
// begin if IsDead ( vehicle_list [ i ] ) then
77044: LD_VAR 0 10
77048: PUSH
77049: LD_VAR 0 2
77053: ARRAY
77054: PPUSH
77055: CALL_OW 301
77059: IFFALSE 77083
// begin vehicle_list = Delete ( vehicle_list , i ) ;
77061: LD_ADDR_VAR 0 10
77065: PUSH
77066: LD_VAR 0 10
77070: PPUSH
77071: LD_VAR 0 2
77075: PPUSH
77076: CALL_OW 3
77080: ST_TO_ADDR
// continue ;
77081: GO 77032
// end ; i = i + 1 ;
77083: LD_ADDR_VAR 0 2
77087: PUSH
77088: LD_VAR 0 2
77092: PUSH
77093: LD_INT 1
77095: PLUS
77096: ST_TO_ADDR
// end ;
77097: GO 77032
// i = 1 ;
77099: LD_ADDR_VAR 0 2
77103: PUSH
77104: LD_INT 1
77106: ST_TO_ADDR
// while i <= mechanic_list do
77107: LD_VAR 0 2
77111: PUSH
77112: LD_VAR 0 11
77116: LESSEQUAL
77117: IFFALSE 77174
// begin if IsDead ( mechanic_list [ i ] ) then
77119: LD_VAR 0 11
77123: PUSH
77124: LD_VAR 0 2
77128: ARRAY
77129: PPUSH
77130: CALL_OW 301
77134: IFFALSE 77158
// begin mechanic_list = Delete ( mechanic_list , i ) ;
77136: LD_ADDR_VAR 0 11
77140: PUSH
77141: LD_VAR 0 11
77145: PPUSH
77146: LD_VAR 0 2
77150: PPUSH
77151: CALL_OW 3
77155: ST_TO_ADDR
// continue ;
77156: GO 77107
// end ; i = i + 1 ;
77158: LD_ADDR_VAR 0 2
77162: PUSH
77163: LD_VAR 0 2
77167: PUSH
77168: LD_INT 1
77170: PLUS
77171: ST_TO_ADDR
// end ;
77172: GO 77107
// if mechanic_list = 0 and UnitFilter ( vehicle_list , [ f_not , [ f_control , control_manual ] ] ) = 0 then
77174: LD_VAR 0 11
77178: PUSH
77179: LD_INT 0
77181: EQUAL
77182: PUSH
77183: LD_VAR 0 10
77187: PPUSH
77188: LD_INT 3
77190: PUSH
77191: LD_INT 33
77193: PUSH
77194: LD_INT 1
77196: PUSH
77197: EMPTY
77198: LIST
77199: LIST
77200: PUSH
77201: EMPTY
77202: LIST
77203: LIST
77204: PPUSH
77205: CALL_OW 72
77209: PUSH
77210: LD_INT 0
77212: EQUAL
77213: AND
77214: IFFALSE 77218
// exit ;
77216: GO 78603
// for i in vehicle_list do
77218: LD_ADDR_VAR 0 2
77222: PUSH
77223: LD_VAR 0 10
77227: PUSH
77228: FOR_IN
77229: IFFALSE 77260
// if not IsPlaced ( i ) then
77231: LD_VAR 0 2
77235: PPUSH
77236: CALL_OW 305
77240: NOT
77241: IFFALSE 77258
// PlaceUnitArea ( i , am_lower_attack_spawn_area , false ) ;
77243: LD_VAR 0 2
77247: PPUSH
77248: LD_INT 24
77250: PPUSH
77251: LD_INT 0
77253: PPUSH
77254: CALL_OW 49
77258: GO 77228
77260: POP
77261: POP
// for i in mechanic_list do
77262: LD_ADDR_VAR 0 2
77266: PUSH
77267: LD_VAR 0 11
77271: PUSH
77272: FOR_IN
77273: IFFALSE 77377
// begin k = IsInUnit ( i ) ;
77275: LD_ADDR_VAR 0 3
77279: PUSH
77280: LD_VAR 0 2
77284: PPUSH
77285: CALL_OW 310
77289: ST_TO_ADDR
// if k > 0 then
77290: LD_VAR 0 3
77294: PUSH
77295: LD_INT 0
77297: GREATER
77298: IFFALSE 77375
// if GetType ( k ) = unit_vehicle then
77300: LD_VAR 0 3
77304: PPUSH
77305: CALL_OW 247
77309: PUSH
77310: LD_INT 2
77312: EQUAL
77313: IFFALSE 77375
// if not k in vehicle_list then
77315: LD_VAR 0 3
77319: PUSH
77320: LD_VAR 0 10
77324: IN
77325: NOT
77326: IFFALSE 77375
// begin vehicle_list = vehicle_list ^ k ;
77328: LD_ADDR_VAR 0 10
77332: PUSH
77333: LD_VAR 0 10
77337: PUSH
77338: LD_VAR 0 3
77342: ADD
77343: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , k , ai_attacking_unit_hex_index [ i ] ) ;
77344: LD_ADDR_EXP 79
77348: PUSH
77349: LD_EXP 79
77353: PPUSH
77354: LD_VAR 0 3
77358: PPUSH
77359: LD_EXP 79
77363: PUSH
77364: LD_VAR 0 2
77368: ARRAY
77369: PPUSH
77370: CALL_OW 1
77374: ST_TO_ADDR
// end ; end ;
77375: GO 77272
77377: POP
77378: POP
// mechanics_on_foot = [ ] ;
77379: LD_ADDR_VAR 0 6
77383: PUSH
77384: EMPTY
77385: ST_TO_ADDR
// for i in mechanic_list do
77386: LD_ADDR_VAR 0 2
77390: PUSH
77391: LD_VAR 0 11
77395: PUSH
77396: FOR_IN
77397: IFFALSE 77566
// begin if IsInUnit ( i ) = 0 then
77399: LD_VAR 0 2
77403: PPUSH
77404: CALL_OW 310
77408: PUSH
77409: LD_INT 0
77411: EQUAL
77412: IFFALSE 77564
// begin temp_list = EmptyWarVehicles ( i , 10 , true ) ;
77414: LD_ADDR_VAR 0 7
77418: PUSH
77419: LD_VAR 0 2
77423: PPUSH
77424: LD_INT 10
77426: PPUSH
77427: LD_INT 1
77429: PPUSH
77430: CALL 83536 0 3
77434: ST_TO_ADDR
// if temp_list > 0 then
77435: LD_VAR 0 7
77439: PUSH
77440: LD_INT 0
77442: GREATER
77443: IFFALSE 77481
// begin k = NearestUnitToUnit ( temp_list , i ) ;
77445: LD_ADDR_VAR 0 3
77449: PUSH
77450: LD_VAR 0 7
77454: PPUSH
77455: LD_VAR 0 2
77459: PPUSH
77460: CALL_OW 74
77464: ST_TO_ADDR
// ComEnterUnit ( i , k ) ;
77465: LD_VAR 0 2
77469: PPUSH
77470: LD_VAR 0 3
77474: PPUSH
77475: CALL_OW 120
// end else
77479: GO 77564
// begin temp_list = EmptyWarVehicles ( i , 10 , false ) ;
77481: LD_ADDR_VAR 0 7
77485: PUSH
77486: LD_VAR 0 2
77490: PPUSH
77491: LD_INT 10
77493: PPUSH
77494: LD_INT 0
77496: PPUSH
77497: CALL 83536 0 3
77501: ST_TO_ADDR
// if temp_list > 0 then
77502: LD_VAR 0 7
77506: PUSH
77507: LD_INT 0
77509: GREATER
77510: IFFALSE 77548
// begin k = NearestUnitToUnit ( temp_list , i ) ;
77512: LD_ADDR_VAR 0 3
77516: PUSH
77517: LD_VAR 0 7
77521: PPUSH
77522: LD_VAR 0 2
77526: PPUSH
77527: CALL_OW 74
77531: ST_TO_ADDR
// ComRepairVehicle ( i , k ) ;
77532: LD_VAR 0 2
77536: PPUSH
77537: LD_VAR 0 3
77541: PPUSH
77542: CALL_OW 129
// end else
77546: GO 77564
// mechanics_on_foot = mechanics_on_foot ^ i ;
77548: LD_ADDR_VAR 0 6
77552: PUSH
77553: LD_VAR 0 6
77557: PUSH
77558: LD_VAR 0 2
77562: ADD
77563: ST_TO_ADDR
// end ; end ; end ;
77564: GO 77396
77566: POP
77567: POP
// for i in vehicle_list ^ mechanics_on_foot do
77568: LD_ADDR_VAR 0 2
77572: PUSH
77573: LD_VAR 0 10
77577: PUSH
77578: LD_VAR 0 6
77582: ADD
77583: PUSH
77584: FOR_IN
77585: IFFALSE 77946
// begin if ai_attacking_unit_hex_index [ i ] >= normal_attack_hexes + 0 then
77587: LD_EXP 79
77591: PUSH
77592: LD_VAR 0 2
77596: ARRAY
77597: PUSH
77598: LD_VAR 0 13
77602: PUSH
77603: LD_INT 0
77605: PLUS
77606: GREATEREQUAL
77607: IFFALSE 77779
// begin driver = i ;
77609: LD_ADDR_VAR 0 4
77613: PUSH
77614: LD_VAR 0 2
77618: ST_TO_ADDR
// if GetType ( i ) = unit_vehicle then
77619: LD_VAR 0 2
77623: PPUSH
77624: CALL_OW 247
77628: PUSH
77629: LD_INT 2
77631: EQUAL
77632: IFFALSE 77692
// begin temp_list = ai_vehicles_defend [ 2 ] ^ i ;
77634: LD_ADDR_VAR 0 7
77638: PUSH
77639: LD_EXP 53
77643: PUSH
77644: LD_INT 2
77646: ARRAY
77647: PUSH
77648: LD_VAR 0 2
77652: ADD
77653: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , 2 , temp_list ) ;
77654: LD_ADDR_EXP 53
77658: PUSH
77659: LD_EXP 53
77663: PPUSH
77664: LD_INT 2
77666: PPUSH
77667: LD_VAR 0 7
77671: PPUSH
77672: CALL_OW 1
77676: ST_TO_ADDR
// driver = IsDrivenBy ( i ) ;
77677: LD_ADDR_VAR 0 4
77681: PUSH
77682: LD_VAR 0 2
77686: PPUSH
77687: CALL_OW 311
77691: ST_TO_ADDR
// end ; if driver > 0 then
77692: LD_VAR 0 4
77696: PUSH
77697: LD_INT 0
77699: GREATER
77700: IFFALSE 77745
// begin temp_list = ai_mechanics_defend [ 2 ] ^ driver ;
77702: LD_ADDR_VAR 0 7
77706: PUSH
77707: LD_EXP 30
77711: PUSH
77712: LD_INT 2
77714: ARRAY
77715: PUSH
77716: LD_VAR 0 4
77720: ADD
77721: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , 2 , temp_list ) ;
77722: LD_ADDR_EXP 30
77726: PUSH
77727: LD_EXP 30
77731: PPUSH
77732: LD_INT 2
77734: PPUSH
77735: LD_VAR 0 7
77739: PPUSH
77740: CALL_OW 1
77744: ST_TO_ADDR
// end ; vehicle_list = vehicle_list diff i ;
77745: LD_ADDR_VAR 0 10
77749: PUSH
77750: LD_VAR 0 10
77754: PUSH
77755: LD_VAR 0 2
77759: DIFF
77760: ST_TO_ADDR
// mechanic_list = mechanic_list diff driver ;
77761: LD_ADDR_VAR 0 11
77765: PUSH
77766: LD_VAR 0 11
77770: PUSH
77771: LD_VAR 0 4
77775: DIFF
77776: ST_TO_ADDR
// end else
77777: GO 77944
// begin if GetDistUnitXY ( i , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) <= move_dist then
77779: LD_VAR 0 2
77783: PPUSH
77784: LD_VAR 0 13
77788: PUSH
77789: LD_EXP 79
77793: PUSH
77794: LD_VAR 0 2
77798: ARRAY
77799: ARRAY
77800: PUSH
77801: LD_INT 1
77803: ARRAY
77804: PPUSH
77805: LD_VAR 0 13
77809: PUSH
77810: LD_EXP 79
77814: PUSH
77815: LD_VAR 0 2
77819: ARRAY
77820: ARRAY
77821: PUSH
77822: LD_INT 2
77824: ARRAY
77825: PPUSH
77826: CALL_OW 297
77830: PUSH
77831: LD_VAR 0 14
77835: LESSEQUAL
77836: IFFALSE 77944
// begin ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , i , ai_attacking_unit_hex_index [ i ] + 1 ) ;
77838: LD_ADDR_EXP 79
77842: PUSH
77843: LD_EXP 79
77847: PPUSH
77848: LD_VAR 0 2
77852: PPUSH
77853: LD_EXP 79
77857: PUSH
77858: LD_VAR 0 2
77862: ARRAY
77863: PUSH
77864: LD_INT 1
77866: PLUS
77867: PPUSH
77868: CALL_OW 1
77872: ST_TO_ADDR
// if GetType ( i ) = unit_vehicle then
77873: LD_VAR 0 2
77877: PPUSH
77878: CALL_OW 247
77882: PUSH
77883: LD_INT 2
77885: EQUAL
77886: IFFALSE 77944
// begin k = IsDrivenBy ( i ) ;
77888: LD_ADDR_VAR 0 3
77892: PUSH
77893: LD_VAR 0 2
77897: PPUSH
77898: CALL_OW 311
77902: ST_TO_ADDR
// if k > 0 then
77903: LD_VAR 0 3
77907: PUSH
77908: LD_INT 0
77910: GREATER
77911: IFFALSE 77944
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , k , ai_attacking_unit_hex_index [ i ] ) ;
77913: LD_ADDR_EXP 79
77917: PUSH
77918: LD_EXP 79
77922: PPUSH
77923: LD_VAR 0 3
77927: PPUSH
77928: LD_EXP 79
77932: PUSH
77933: LD_VAR 0 2
77937: ARRAY
77938: PPUSH
77939: CALL_OW 1
77943: ST_TO_ADDR
// end ; end ; end ; end ;
77944: GO 77584
77946: POP
77947: POP
// for i in vehicle_list ^ mechanics_on_foot do
77948: LD_ADDR_VAR 0 2
77952: PUSH
77953: LD_VAR 0 10
77957: PUSH
77958: LD_VAR 0 6
77962: ADD
77963: PUSH
77964: FOR_IN
77965: IFFALSE 78597
// begin k := not normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in init_attack_hexes ;
77967: LD_ADDR_VAR 0 3
77971: PUSH
77972: LD_VAR 0 13
77976: PUSH
77977: LD_EXP 79
77981: PUSH
77982: LD_VAR 0 2
77986: ARRAY
77987: ARRAY
77988: PUSH
77989: LD_VAR 0 12
77993: IN
77994: NOT
77995: ST_TO_ADDR
// if k then
77996: LD_VAR 0 3
78000: IFFALSE 78407
// begin temp_list = FilterAllUnits ( [ [ f_enemy , GetBaseSide ( base ) ] , [ f_type , unit_human ] , [ f_dist , i , 20 ] , [ f_see , GetBaseSide ( base ) ] ] ) ;
78002: LD_ADDR_VAR 0 7
78006: PUSH
78007: LD_INT 81
78009: PUSH
78010: LD_VAR 0 1
78014: PPUSH
78015: CALL 18937 0 1
78019: PUSH
78020: EMPTY
78021: LIST
78022: LIST
78023: PUSH
78024: LD_INT 21
78026: PUSH
78027: LD_INT 1
78029: PUSH
78030: EMPTY
78031: LIST
78032: LIST
78033: PUSH
78034: LD_INT 91
78036: PUSH
78037: LD_VAR 0 2
78041: PUSH
78042: LD_INT 20
78044: PUSH
78045: EMPTY
78046: LIST
78047: LIST
78048: LIST
78049: PUSH
78050: LD_INT 101
78052: PUSH
78053: LD_VAR 0 1
78057: PPUSH
78058: CALL 18937 0 1
78062: PUSH
78063: EMPTY
78064: LIST
78065: LIST
78066: PUSH
78067: EMPTY
78068: LIST
78069: LIST
78070: LIST
78071: LIST
78072: PPUSH
78073: CALL_OW 69
78077: ST_TO_ADDR
// if temp_list > 0 then
78078: LD_VAR 0 7
78082: PUSH
78083: LD_INT 0
78085: GREATER
78086: IFFALSE 78222
// begin temp_list_2 = UnitFilter ( temp_list , [ f_not , [ f_lives , 250 ] ] ) ;
78088: LD_ADDR_VAR 0 8
78092: PUSH
78093: LD_VAR 0 7
78097: PPUSH
78098: LD_INT 3
78100: PUSH
78101: LD_INT 24
78103: PUSH
78104: LD_INT 250
78106: PUSH
78107: EMPTY
78108: LIST
78109: LIST
78110: PUSH
78111: EMPTY
78112: LIST
78113: LIST
78114: PPUSH
78115: CALL_OW 72
78119: ST_TO_ADDR
// if temp_list_2 > 0 then
78120: LD_VAR 0 8
78124: PUSH
78125: LD_INT 0
78127: GREATER
78128: IFFALSE 78140
// temp_list = temp_list_2 ;
78130: LD_ADDR_VAR 0 7
78134: PUSH
78135: LD_VAR 0 8
78139: ST_TO_ADDR
// temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
78140: LD_ADDR_VAR 0 9
78144: PUSH
78145: LD_VAR 0 7
78149: PPUSH
78150: LD_VAR 0 2
78154: PPUSH
78155: CALL_OW 75
78159: ST_TO_ADDR
// if GetLives ( temp_unit ) > 250 then
78160: LD_VAR 0 9
78164: PPUSH
78165: CALL_OW 256
78169: PUSH
78170: LD_INT 250
78172: GREATER
78173: IFFALSE 78206
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
78175: LD_VAR 0 2
78179: PPUSH
78180: LD_VAR 0 9
78184: PPUSH
78185: CALL_OW 250
78189: PPUSH
78190: LD_VAR 0 9
78194: PPUSH
78195: CALL_OW 251
78199: PPUSH
78200: CALL_OW 114
78204: GO 78220
// ComAttackUnit ( i , temp_unit ) ;
78206: LD_VAR 0 2
78210: PPUSH
78211: LD_VAR 0 9
78215: PPUSH
78216: CALL_OW 115
// end else
78220: GO 78399
// begin temp_list = FindNonhumansNearUnit ( GetBaseSide ( base ) , i , 20 , true ) ;
78222: LD_ADDR_VAR 0 7
78226: PUSH
78227: LD_VAR 0 1
78231: PPUSH
78232: CALL 18937 0 1
78236: PPUSH
78237: LD_VAR 0 2
78241: PPUSH
78242: LD_INT 20
78244: PPUSH
78245: LD_INT 1
78247: PPUSH
78248: CALL 83742 0 4
78252: ST_TO_ADDR
// if temp_list > 0 then
78253: LD_VAR 0 7
78257: PUSH
78258: LD_INT 0
78260: GREATER
78261: IFFALSE 78314
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
78263: LD_ADDR_VAR 0 9
78267: PUSH
78268: LD_VAR 0 7
78272: PPUSH
78273: LD_VAR 0 2
78277: PPUSH
78278: CALL_OW 75
78282: ST_TO_ADDR
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
78283: LD_VAR 0 2
78287: PPUSH
78288: LD_VAR 0 9
78292: PPUSH
78293: CALL_OW 250
78297: PPUSH
78298: LD_VAR 0 9
78302: PPUSH
78303: CALL_OW 251
78307: PPUSH
78308: CALL_OW 114
// end else
78312: GO 78399
// begin temp_list = FindNonhumansNearUnit ( GetBaseSide ( base ) , i , 20 , false ) ;
78314: LD_ADDR_VAR 0 7
78318: PUSH
78319: LD_VAR 0 1
78323: PPUSH
78324: CALL 18937 0 1
78328: PPUSH
78329: LD_VAR 0 2
78333: PPUSH
78334: LD_INT 20
78336: PPUSH
78337: LD_INT 0
78339: PPUSH
78340: CALL 83742 0 4
78344: ST_TO_ADDR
// if temp_list > 0 then
78345: LD_VAR 0 7
78349: PUSH
78350: LD_INT 0
78352: GREATER
78353: IFFALSE 78391
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
78355: LD_ADDR_VAR 0 9
78359: PUSH
78360: LD_VAR 0 7
78364: PPUSH
78365: LD_VAR 0 2
78369: PPUSH
78370: CALL_OW 75
78374: ST_TO_ADDR
// ComAttackUnit ( i , temp_unit ) ;
78375: LD_VAR 0 2
78379: PPUSH
78380: LD_VAR 0 9
78384: PPUSH
78385: CALL_OW 115
// end else
78389: GO 78399
// k = false ;
78391: LD_ADDR_VAR 0 3
78395: PUSH
78396: LD_INT 0
78398: ST_TO_ADDR
// end ; end ; if k then
78399: LD_VAR 0 3
78403: IFFALSE 78407
// continue ;
78405: GO 77964
// end ; if GetDistUnitXY ( i , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) > move_dist then
78407: LD_VAR 0 2
78411: PPUSH
78412: LD_VAR 0 13
78416: PUSH
78417: LD_EXP 79
78421: PUSH
78422: LD_VAR 0 2
78426: ARRAY
78427: ARRAY
78428: PUSH
78429: LD_INT 1
78431: ARRAY
78432: PPUSH
78433: LD_VAR 0 13
78437: PUSH
78438: LD_EXP 79
78442: PUSH
78443: LD_VAR 0 2
78447: ARRAY
78448: ARRAY
78449: PUSH
78450: LD_INT 2
78452: ARRAY
78453: PPUSH
78454: CALL_OW 297
78458: PUSH
78459: LD_VAR 0 14
78463: GREATER
78464: IFFALSE 78595
// if not normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in init_attack_hexes then
78466: LD_VAR 0 13
78470: PUSH
78471: LD_EXP 79
78475: PUSH
78476: LD_VAR 0 2
78480: ARRAY
78481: ARRAY
78482: PUSH
78483: LD_VAR 0 12
78487: IN
78488: NOT
78489: IFFALSE 78544
// ComAgressiveMove ( i , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) else
78491: LD_VAR 0 2
78495: PPUSH
78496: LD_VAR 0 13
78500: PUSH
78501: LD_EXP 79
78505: PUSH
78506: LD_VAR 0 2
78510: ARRAY
78511: ARRAY
78512: PUSH
78513: LD_INT 1
78515: ARRAY
78516: PPUSH
78517: LD_VAR 0 13
78521: PUSH
78522: LD_EXP 79
78526: PUSH
78527: LD_VAR 0 2
78531: ARRAY
78532: ARRAY
78533: PUSH
78534: LD_INT 2
78536: ARRAY
78537: PPUSH
78538: CALL_OW 114
78542: GO 78595
// ComMoveXY ( i , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) ;
78544: LD_VAR 0 2
78548: PPUSH
78549: LD_VAR 0 13
78553: PUSH
78554: LD_EXP 79
78558: PUSH
78559: LD_VAR 0 2
78563: ARRAY
78564: ARRAY
78565: PUSH
78566: LD_INT 1
78568: ARRAY
78569: PPUSH
78570: LD_VAR 0 13
78574: PUSH
78575: LD_EXP 79
78579: PUSH
78580: LD_VAR 0 2
78584: ARRAY
78585: ARRAY
78586: PUSH
78587: LD_INT 2
78589: ARRAY
78590: PPUSH
78591: CALL_OW 111
// end ;
78595: GO 77964
78597: POP
78598: POP
// until false ;
78599: LD_INT 0
78601: IFFALSE 77017
// end ;
78603: PPOPN 14
78605: END
// export function PlayerBaseUnderAttackByPseudoBase ( base ) ; var i ; begin
78606: LD_INT 0
78608: PPUSH
78609: PPUSH
// result = false ;
78610: LD_ADDR_VAR 0 2
78614: PUSH
78615: LD_INT 0
78617: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , GetBaseSide ( base ) ] , [ f_inarea , big_hill_area ] ] ) do
78618: LD_ADDR_VAR 0 3
78622: PUSH
78623: LD_INT 22
78625: PUSH
78626: LD_VAR 0 1
78630: PPUSH
78631: CALL 18937 0 1
78635: PUSH
78636: EMPTY
78637: LIST
78638: LIST
78639: PUSH
78640: LD_INT 95
78642: PUSH
78643: LD_INT 11
78645: PUSH
78646: EMPTY
78647: LIST
78648: LIST
78649: PUSH
78650: EMPTY
78651: LIST
78652: LIST
78653: PPUSH
78654: CALL_OW 69
78658: PUSH
78659: FOR_IN
78660: IFFALSE 78691
// if Attacks ( i ) > 0 then
78662: LD_VAR 0 3
78666: PPUSH
78667: CALL_OW 320
78671: PUSH
78672: LD_INT 0
78674: GREATER
78675: IFFALSE 78689
// begin result = true ;
78677: LD_ADDR_VAR 0 2
78681: PUSH
78682: LD_INT 1
78684: ST_TO_ADDR
// exit ;
78685: POP
78686: POP
78687: GO 78693
// end ;
78689: GO 78659
78691: POP
78692: POP
// end ;
78693: LD_VAR 0 2
78697: RET
// every 0 0$1 do var group , base , init_attack_hexes , normal_attack_hexes , k , i , g , temp_list_3 , x , y ; var temp_unit , temp_list , temp_list_2 , dist , temp_value , group_in_position ; var soldiers , scientists , vehicles , mechanics ; var move_dist , all_in_position , local_current_attack_num ;
78698: GO 78700
78700: DISABLE
78701: LD_INT 0
78703: PPUSH
78704: PPUSH
78705: PPUSH
78706: PPUSH
78707: PPUSH
78708: PPUSH
78709: PPUSH
78710: PPUSH
78711: PPUSH
78712: PPUSH
78713: PPUSH
78714: PPUSH
78715: PPUSH
78716: PPUSH
78717: PPUSH
78718: PPUSH
78719: PPUSH
78720: PPUSH
78721: PPUSH
78722: PPUSH
78723: PPUSH
78724: PPUSH
78725: PPUSH
// begin move_dist = 6 ;
78726: LD_ADDR_VAR 0 21
78730: PUSH
78731: LD_INT 6
78733: ST_TO_ADDR
// all_in_position = [ false , false , false , false ] ;
78734: LD_ADDR_VAR 0 22
78738: PUSH
78739: LD_INT 0
78741: PUSH
78742: LD_INT 0
78744: PUSH
78745: LD_INT 0
78747: PUSH
78748: LD_INT 0
78750: PUSH
78751: EMPTY
78752: LIST
78753: LIST
78754: LIST
78755: LIST
78756: ST_TO_ADDR
// local_current_attack_num = current_attack_num ;
78757: LD_ADDR_VAR 0 23
78761: PUSH
78762: LD_EXP 115
78766: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
78767: LD_INT 35
78769: PPUSH
78770: CALL_OW 67
// if local_current_attack_num < current_attack_num then
78774: LD_VAR 0 23
78778: PUSH
78779: LD_EXP 115
78783: LESS
78784: IFFALSE 78819
// begin all_in_position = [ false , false , false , false ] ;
78786: LD_ADDR_VAR 0 22
78790: PUSH
78791: LD_INT 0
78793: PUSH
78794: LD_INT 0
78796: PUSH
78797: LD_INT 0
78799: PUSH
78800: LD_INT 0
78802: PUSH
78803: EMPTY
78804: LIST
78805: LIST
78806: LIST
78807: LIST
78808: ST_TO_ADDR
// local_current_attack_num = current_attack_num ;
78809: LD_ADDR_VAR 0 23
78813: PUSH
78814: LD_EXP 115
78818: ST_TO_ADDR
// end ; base = attack_base ;
78819: LD_ADDR_VAR 0 2
78823: PUSH
78824: LD_LOC 13
78828: ST_TO_ADDR
// for group = 1 to attacking_vehicles + 0 do
78829: LD_ADDR_VAR 0 1
78833: PUSH
78834: DOUBLE
78835: LD_INT 1
78837: DEC
78838: ST_TO_ADDR
78839: LD_LOC 11
78843: PUSH
78844: LD_INT 0
78846: PLUS
78847: PUSH
78848: FOR_TO
78849: IFFALSE 83527
// begin attacking_soldiers = Replace ( attacking_soldiers , group , UnitFilter ( attacking_soldiers [ group ] , [ f_alive ] ) ) ;
78851: LD_ADDR_LOC 9
78855: PUSH
78856: LD_LOC 9
78860: PPUSH
78861: LD_VAR 0 1
78865: PPUSH
78866: LD_LOC 9
78870: PUSH
78871: LD_VAR 0 1
78875: ARRAY
78876: PPUSH
78877: LD_INT 51
78879: PUSH
78880: EMPTY
78881: LIST
78882: PPUSH
78883: CALL_OW 72
78887: PPUSH
78888: CALL_OW 1
78892: ST_TO_ADDR
// attacking_scientists = Replace ( attacking_scientists , group , UnitFilter ( attacking_scientists [ group ] , [ f_alive ] ) ) ;
78893: LD_ADDR_LOC 10
78897: PUSH
78898: LD_LOC 10
78902: PPUSH
78903: LD_VAR 0 1
78907: PPUSH
78908: LD_LOC 10
78912: PUSH
78913: LD_VAR 0 1
78917: ARRAY
78918: PPUSH
78919: LD_INT 51
78921: PUSH
78922: EMPTY
78923: LIST
78924: PPUSH
78925: CALL_OW 72
78929: PPUSH
78930: CALL_OW 1
78934: ST_TO_ADDR
// attacking_vehicles = Replace ( attacking_vehicles , group , UnitFilter ( attacking_vehicles [ group ] , [ [ f_alive ] , [ f_side , GetBaseSide ( base ) ] ] ) ) ;
78935: LD_ADDR_LOC 11
78939: PUSH
78940: LD_LOC 11
78944: PPUSH
78945: LD_VAR 0 1
78949: PPUSH
78950: LD_LOC 11
78954: PUSH
78955: LD_VAR 0 1
78959: ARRAY
78960: PPUSH
78961: LD_INT 51
78963: PUSH
78964: EMPTY
78965: LIST
78966: PUSH
78967: LD_INT 22
78969: PUSH
78970: LD_VAR 0 2
78974: PPUSH
78975: CALL 18937 0 1
78979: PUSH
78980: EMPTY
78981: LIST
78982: LIST
78983: PUSH
78984: EMPTY
78985: LIST
78986: LIST
78987: PPUSH
78988: CALL_OW 72
78992: PPUSH
78993: CALL_OW 1
78997: ST_TO_ADDR
// attacking_mechanics = Replace ( attacking_mechanics , group , UnitFilter ( attacking_mechanics [ group ] , [ f_alive ] ) ) ;
78998: LD_ADDR_LOC 12
79002: PUSH
79003: LD_LOC 12
79007: PPUSH
79008: LD_VAR 0 1
79012: PPUSH
79013: LD_LOC 12
79017: PUSH
79018: LD_VAR 0 1
79022: ARRAY
79023: PPUSH
79024: LD_INT 51
79026: PUSH
79027: EMPTY
79028: LIST
79029: PPUSH
79030: CALL_OW 72
79034: PPUSH
79035: CALL_OW 1
79039: ST_TO_ADDR
// soldiers = attacking_soldiers [ group ] ;
79040: LD_ADDR_VAR 0 17
79044: PUSH
79045: LD_LOC 9
79049: PUSH
79050: LD_VAR 0 1
79054: ARRAY
79055: ST_TO_ADDR
// scientists = attacking_scientists [ group ] ;
79056: LD_ADDR_VAR 0 18
79060: PUSH
79061: LD_LOC 10
79065: PUSH
79066: LD_VAR 0 1
79070: ARRAY
79071: ST_TO_ADDR
// vehicles = attacking_vehicles [ group ] ;
79072: LD_ADDR_VAR 0 19
79076: PUSH
79077: LD_LOC 11
79081: PUSH
79082: LD_VAR 0 1
79086: ARRAY
79087: ST_TO_ADDR
// mechanics = attacking_mechanics [ group ] ;
79088: LD_ADDR_VAR 0 20
79092: PUSH
79093: LD_LOC 12
79097: PUSH
79098: LD_VAR 0 1
79102: ARRAY
79103: ST_TO_ADDR
// for i in mechanics do
79104: LD_ADDR_VAR 0 6
79108: PUSH
79109: LD_VAR 0 20
79113: PUSH
79114: FOR_IN
79115: IFFALSE 79339
// begin k = IsInUnit ( i ) ;
79117: LD_ADDR_VAR 0 5
79121: PUSH
79122: LD_VAR 0 6
79126: PPUSH
79127: CALL_OW 310
79131: ST_TO_ADDR
// if k > 0 then
79132: LD_VAR 0 5
79136: PUSH
79137: LD_INT 0
79139: GREATER
79140: IFFALSE 79337
// if GetType ( k ) = unit_vehicle then
79142: LD_VAR 0 5
79146: PPUSH
79147: CALL_OW 247
79151: PUSH
79152: LD_INT 2
79154: EQUAL
79155: IFFALSE 79337
// if not k in vehicles then
79157: LD_VAR 0 5
79161: PUSH
79162: LD_VAR 0 19
79166: IN
79167: NOT
79168: IFFALSE 79337
// begin for g = 1 to attacking_vehicles + 0 do
79170: LD_ADDR_VAR 0 7
79174: PUSH
79175: DOUBLE
79176: LD_INT 1
79178: DEC
79179: ST_TO_ADDR
79180: LD_LOC 11
79184: PUSH
79185: LD_INT 0
79187: PLUS
79188: PUSH
79189: FOR_TO
79190: IFFALSE 79241
// begin temp_list = attacking_vehicles [ g ] diff k ;
79192: LD_ADDR_VAR 0 12
79196: PUSH
79197: LD_LOC 11
79201: PUSH
79202: LD_VAR 0 7
79206: ARRAY
79207: PUSH
79208: LD_VAR 0 5
79212: DIFF
79213: ST_TO_ADDR
// attacking_vehicles = Replace ( attacking_vehicles , g , temp_list ) ;
79214: LD_ADDR_LOC 11
79218: PUSH
79219: LD_LOC 11
79223: PPUSH
79224: LD_VAR 0 7
79228: PPUSH
79229: LD_VAR 0 12
79233: PPUSH
79234: CALL_OW 1
79238: ST_TO_ADDR
// end ;
79239: GO 79189
79241: POP
79242: POP
// temp_list = attacking_vehicles [ group ] ^ k ;
79243: LD_ADDR_VAR 0 12
79247: PUSH
79248: LD_LOC 11
79252: PUSH
79253: LD_VAR 0 1
79257: ARRAY
79258: PUSH
79259: LD_VAR 0 5
79263: ADD
79264: ST_TO_ADDR
// attacking_vehicles = Replace ( attacking_vehicles , group , temp_list ) ;
79265: LD_ADDR_LOC 11
79269: PUSH
79270: LD_LOC 11
79274: PPUSH
79275: LD_VAR 0 1
79279: PPUSH
79280: LD_VAR 0 12
79284: PPUSH
79285: CALL_OW 1
79289: ST_TO_ADDR
// vehicles = attacking_vehicles [ group ] ;
79290: LD_ADDR_VAR 0 19
79294: PUSH
79295: LD_LOC 11
79299: PUSH
79300: LD_VAR 0 1
79304: ARRAY
79305: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , k , ai_attacking_unit_hex_index [ i ] ) ;
79306: LD_ADDR_EXP 79
79310: PUSH
79311: LD_EXP 79
79315: PPUSH
79316: LD_VAR 0 5
79320: PPUSH
79321: LD_EXP 79
79325: PUSH
79326: LD_VAR 0 6
79330: ARRAY
79331: PPUSH
79332: CALL_OW 1
79336: ST_TO_ADDR
// end ; end ;
79337: GO 79114
79339: POP
79340: POP
// if soldiers = 0 and scientists = 0 and vehicles = 0 and mechanics = 0 then
79341: LD_VAR 0 17
79345: PUSH
79346: LD_INT 0
79348: EQUAL
79349: PUSH
79350: LD_VAR 0 18
79354: PUSH
79355: LD_INT 0
79357: EQUAL
79358: AND
79359: PUSH
79360: LD_VAR 0 19
79364: PUSH
79365: LD_INT 0
79367: EQUAL
79368: AND
79369: PUSH
79370: LD_VAR 0 20
79374: PUSH
79375: LD_INT 0
79377: EQUAL
79378: AND
79379: IFFALSE 79406
// begin all_in_position = Replace ( all_in_position , group , true ) ;
79381: LD_ADDR_VAR 0 22
79385: PUSH
79386: LD_VAR 0 22
79390: PPUSH
79391: LD_VAR 0 1
79395: PPUSH
79396: LD_INT 1
79398: PPUSH
79399: CALL_OW 1
79403: ST_TO_ADDR
// continue ;
79404: GO 78848
// end ; case group of 1 :
79406: LD_VAR 0 1
79410: PUSH
79411: LD_INT 1
79413: DOUBLE
79414: EQUAL
79415: IFTRUE 79419
79417: GO 79535
79419: POP
// begin init_attack_hexes = [ [ 155 , 173 ] ] ;
79420: LD_ADDR_VAR 0 3
79424: PUSH
79425: LD_INT 155
79427: PUSH
79428: LD_INT 173
79430: PUSH
79431: EMPTY
79432: LIST
79433: LIST
79434: PUSH
79435: EMPTY
79436: LIST
79437: ST_TO_ADDR
// normal_attack_hexes = [ [ 155 , 173 ] , [ 150 , 168 ] , [ 140 , 156 ] , [ 145 , 162 ] , [ 128 , 139 ] , [ 134 , 127 ] , [ 135 , 108 ] , [ 151 , 120 ] ] ;
79438: LD_ADDR_VAR 0 4
79442: PUSH
79443: LD_INT 155
79445: PUSH
79446: LD_INT 173
79448: PUSH
79449: EMPTY
79450: LIST
79451: LIST
79452: PUSH
79453: LD_INT 150
79455: PUSH
79456: LD_INT 168
79458: PUSH
79459: EMPTY
79460: LIST
79461: LIST
79462: PUSH
79463: LD_INT 140
79465: PUSH
79466: LD_INT 156
79468: PUSH
79469: EMPTY
79470: LIST
79471: LIST
79472: PUSH
79473: LD_INT 145
79475: PUSH
79476: LD_INT 162
79478: PUSH
79479: EMPTY
79480: LIST
79481: LIST
79482: PUSH
79483: LD_INT 128
79485: PUSH
79486: LD_INT 139
79488: PUSH
79489: EMPTY
79490: LIST
79491: LIST
79492: PUSH
79493: LD_INT 134
79495: PUSH
79496: LD_INT 127
79498: PUSH
79499: EMPTY
79500: LIST
79501: LIST
79502: PUSH
79503: LD_INT 135
79505: PUSH
79506: LD_INT 108
79508: PUSH
79509: EMPTY
79510: LIST
79511: LIST
79512: PUSH
79513: LD_INT 151
79515: PUSH
79516: LD_INT 120
79518: PUSH
79519: EMPTY
79520: LIST
79521: LIST
79522: PUSH
79523: EMPTY
79524: LIST
79525: LIST
79526: LIST
79527: LIST
79528: LIST
79529: LIST
79530: LIST
79531: LIST
79532: ST_TO_ADDR
// end ; 2 :
79533: GO 79952
79535: LD_INT 2
79537: DOUBLE
79538: EQUAL
79539: IFTRUE 79543
79541: GO 79659
79543: POP
// begin init_attack_hexes = [ [ 168 , 158 ] ] ;
79544: LD_ADDR_VAR 0 3
79548: PUSH
79549: LD_INT 168
79551: PUSH
79552: LD_INT 158
79554: PUSH
79555: EMPTY
79556: LIST
79557: LIST
79558: PUSH
79559: EMPTY
79560: LIST
79561: ST_TO_ADDR
// normal_attack_hexes = [ [ 168 , 158 ] , [ 161 , 151 ] , [ 153 , 144 ] , [ 145 , 137 ] , [ 128 , 139 ] , [ 134 , 127 ] , [ 135 , 108 ] , [ 151 , 120 ] ] ;
79562: LD_ADDR_VAR 0 4
79566: PUSH
79567: LD_INT 168
79569: PUSH
79570: LD_INT 158
79572: PUSH
79573: EMPTY
79574: LIST
79575: LIST
79576: PUSH
79577: LD_INT 161
79579: PUSH
79580: LD_INT 151
79582: PUSH
79583: EMPTY
79584: LIST
79585: LIST
79586: PUSH
79587: LD_INT 153
79589: PUSH
79590: LD_INT 144
79592: PUSH
79593: EMPTY
79594: LIST
79595: LIST
79596: PUSH
79597: LD_INT 145
79599: PUSH
79600: LD_INT 137
79602: PUSH
79603: EMPTY
79604: LIST
79605: LIST
79606: PUSH
79607: LD_INT 128
79609: PUSH
79610: LD_INT 139
79612: PUSH
79613: EMPTY
79614: LIST
79615: LIST
79616: PUSH
79617: LD_INT 134
79619: PUSH
79620: LD_INT 127
79622: PUSH
79623: EMPTY
79624: LIST
79625: LIST
79626: PUSH
79627: LD_INT 135
79629: PUSH
79630: LD_INT 108
79632: PUSH
79633: EMPTY
79634: LIST
79635: LIST
79636: PUSH
79637: LD_INT 151
79639: PUSH
79640: LD_INT 120
79642: PUSH
79643: EMPTY
79644: LIST
79645: LIST
79646: PUSH
79647: EMPTY
79648: LIST
79649: LIST
79650: LIST
79651: LIST
79652: LIST
79653: LIST
79654: LIST
79655: LIST
79656: ST_TO_ADDR
// end ; 3 :
79657: GO 79952
79659: LD_INT 3
79661: DOUBLE
79662: EQUAL
79663: IFTRUE 79667
79665: GO 79805
79667: POP
// begin init_attack_hexes = [ [ 195 , 163 ] , [ 182 , 152 ] ] ;
79668: LD_ADDR_VAR 0 3
79672: PUSH
79673: LD_INT 195
79675: PUSH
79676: LD_INT 163
79678: PUSH
79679: EMPTY
79680: LIST
79681: LIST
79682: PUSH
79683: LD_INT 182
79685: PUSH
79686: LD_INT 152
79688: PUSH
79689: EMPTY
79690: LIST
79691: LIST
79692: PUSH
79693: EMPTY
79694: LIST
79695: LIST
79696: ST_TO_ADDR
// normal_attack_hexes = [ [ 195 , 163 ] , [ 182 , 152 ] , [ 175 , 146 ] , [ 168 , 139 ] , [ 160 , 131 ] , [ 151 , 120 ] , [ 135 , 108 ] , [ 134 , 127 ] , [ 128 , 139 ] ] ;
79697: LD_ADDR_VAR 0 4
79701: PUSH
79702: LD_INT 195
79704: PUSH
79705: LD_INT 163
79707: PUSH
79708: EMPTY
79709: LIST
79710: LIST
79711: PUSH
79712: LD_INT 182
79714: PUSH
79715: LD_INT 152
79717: PUSH
79718: EMPTY
79719: LIST
79720: LIST
79721: PUSH
79722: LD_INT 175
79724: PUSH
79725: LD_INT 146
79727: PUSH
79728: EMPTY
79729: LIST
79730: LIST
79731: PUSH
79732: LD_INT 168
79734: PUSH
79735: LD_INT 139
79737: PUSH
79738: EMPTY
79739: LIST
79740: LIST
79741: PUSH
79742: LD_INT 160
79744: PUSH
79745: LD_INT 131
79747: PUSH
79748: EMPTY
79749: LIST
79750: LIST
79751: PUSH
79752: LD_INT 151
79754: PUSH
79755: LD_INT 120
79757: PUSH
79758: EMPTY
79759: LIST
79760: LIST
79761: PUSH
79762: LD_INT 135
79764: PUSH
79765: LD_INT 108
79767: PUSH
79768: EMPTY
79769: LIST
79770: LIST
79771: PUSH
79772: LD_INT 134
79774: PUSH
79775: LD_INT 127
79777: PUSH
79778: EMPTY
79779: LIST
79780: LIST
79781: PUSH
79782: LD_INT 128
79784: PUSH
79785: LD_INT 139
79787: PUSH
79788: EMPTY
79789: LIST
79790: LIST
79791: PUSH
79792: EMPTY
79793: LIST
79794: LIST
79795: LIST
79796: LIST
79797: LIST
79798: LIST
79799: LIST
79800: LIST
79801: LIST
79802: ST_TO_ADDR
// end ; 4 :
79803: GO 79952
79805: LD_INT 4
79807: DOUBLE
79808: EQUAL
79809: IFTRUE 79813
79811: GO 79951
79813: POP
// begin init_attack_hexes = [ [ 195 , 145 ] , [ 182 , 131 ] ] ;
79814: LD_ADDR_VAR 0 3
79818: PUSH
79819: LD_INT 195
79821: PUSH
79822: LD_INT 145
79824: PUSH
79825: EMPTY
79826: LIST
79827: LIST
79828: PUSH
79829: LD_INT 182
79831: PUSH
79832: LD_INT 131
79834: PUSH
79835: EMPTY
79836: LIST
79837: LIST
79838: PUSH
79839: EMPTY
79840: LIST
79841: LIST
79842: ST_TO_ADDR
// normal_attack_hexes = [ [ 195 , 145 ] , [ 182 , 131 ] , [ 175 , 129 ] , [ 168 , 125 ] , [ 161 , 121 ] , [ 151 , 120 ] , [ 135 , 108 ] , [ 134 , 127 ] , [ 128 , 139 ] ] ;
79843: LD_ADDR_VAR 0 4
79847: PUSH
79848: LD_INT 195
79850: PUSH
79851: LD_INT 145
79853: PUSH
79854: EMPTY
79855: LIST
79856: LIST
79857: PUSH
79858: LD_INT 182
79860: PUSH
79861: LD_INT 131
79863: PUSH
79864: EMPTY
79865: LIST
79866: LIST
79867: PUSH
79868: LD_INT 175
79870: PUSH
79871: LD_INT 129
79873: PUSH
79874: EMPTY
79875: LIST
79876: LIST
79877: PUSH
79878: LD_INT 168
79880: PUSH
79881: LD_INT 125
79883: PUSH
79884: EMPTY
79885: LIST
79886: LIST
79887: PUSH
79888: LD_INT 161
79890: PUSH
79891: LD_INT 121
79893: PUSH
79894: EMPTY
79895: LIST
79896: LIST
79897: PUSH
79898: LD_INT 151
79900: PUSH
79901: LD_INT 120
79903: PUSH
79904: EMPTY
79905: LIST
79906: LIST
79907: PUSH
79908: LD_INT 135
79910: PUSH
79911: LD_INT 108
79913: PUSH
79914: EMPTY
79915: LIST
79916: LIST
79917: PUSH
79918: LD_INT 134
79920: PUSH
79921: LD_INT 127
79923: PUSH
79924: EMPTY
79925: LIST
79926: LIST
79927: PUSH
79928: LD_INT 128
79930: PUSH
79931: LD_INT 139
79933: PUSH
79934: EMPTY
79935: LIST
79936: LIST
79937: PUSH
79938: EMPTY
79939: LIST
79940: LIST
79941: LIST
79942: LIST
79943: LIST
79944: LIST
79945: LIST
79946: LIST
79947: LIST
79948: ST_TO_ADDR
// end ; end ;
79949: GO 79952
79951: POP
// for i in mechanics do
79952: LD_ADDR_VAR 0 6
79956: PUSH
79957: LD_VAR 0 20
79961: PUSH
79962: FOR_IN
79963: IFFALSE 80132
// begin if IsInUnit ( i ) = 0 then
79965: LD_VAR 0 6
79969: PPUSH
79970: CALL_OW 310
79974: PUSH
79975: LD_INT 0
79977: EQUAL
79978: IFFALSE 80130
// begin temp_list = EmptyWarVehicles ( i , 10 , true ) ;
79980: LD_ADDR_VAR 0 12
79984: PUSH
79985: LD_VAR 0 6
79989: PPUSH
79990: LD_INT 10
79992: PPUSH
79993: LD_INT 1
79995: PPUSH
79996: CALL 83536 0 3
80000: ST_TO_ADDR
// if temp_list > 0 then
80001: LD_VAR 0 12
80005: PUSH
80006: LD_INT 0
80008: GREATER
80009: IFFALSE 80047
// begin k = NearestUnitToUnit ( temp_list , i ) ;
80011: LD_ADDR_VAR 0 5
80015: PUSH
80016: LD_VAR 0 12
80020: PPUSH
80021: LD_VAR 0 6
80025: PPUSH
80026: CALL_OW 74
80030: ST_TO_ADDR
// ComEnterUnit ( i , k ) ;
80031: LD_VAR 0 6
80035: PPUSH
80036: LD_VAR 0 5
80040: PPUSH
80041: CALL_OW 120
// end else
80045: GO 80130
// begin temp_list = EmptyWarVehicles ( i , 10 , false ) ;
80047: LD_ADDR_VAR 0 12
80051: PUSH
80052: LD_VAR 0 6
80056: PPUSH
80057: LD_INT 10
80059: PPUSH
80060: LD_INT 0
80062: PPUSH
80063: CALL 83536 0 3
80067: ST_TO_ADDR
// if temp_list > 0 then
80068: LD_VAR 0 12
80072: PUSH
80073: LD_INT 0
80075: GREATER
80076: IFFALSE 80114
// begin k = NearestUnitToUnit ( temp_list , i ) ;
80078: LD_ADDR_VAR 0 5
80082: PUSH
80083: LD_VAR 0 12
80087: PPUSH
80088: LD_VAR 0 6
80092: PPUSH
80093: CALL_OW 74
80097: ST_TO_ADDR
// ComRepairVehicle ( i , k ) ;
80098: LD_VAR 0 6
80102: PPUSH
80103: LD_VAR 0 5
80107: PPUSH
80108: CALL_OW 129
// end else
80112: GO 80130
// soldiers = soldiers ^ i ;
80114: LD_ADDR_VAR 0 17
80118: PUSH
80119: LD_VAR 0 17
80123: PUSH
80124: LD_VAR 0 6
80128: ADD
80129: ST_TO_ADDR
// end ; end ; end ;
80130: GO 79962
80132: POP
80133: POP
// if scientists > 0 then
80134: LD_VAR 0 18
80138: PUSH
80139: LD_INT 0
80141: GREATER
80142: IFFALSE 80464
// if soldiers = 0 then
80144: LD_VAR 0 17
80148: PUSH
80149: LD_INT 0
80151: EQUAL
80152: IFFALSE 80166
// begin soldiers = scientists ;
80154: LD_ADDR_VAR 0 17
80158: PUSH
80159: LD_VAR 0 18
80163: ST_TO_ADDR
// end else
80164: GO 80464
// begin x = 0 ;
80166: LD_ADDR_VAR 0 9
80170: PUSH
80171: LD_INT 0
80173: ST_TO_ADDR
// y = 0 ;
80174: LD_ADDR_VAR 0 10
80178: PUSH
80179: LD_INT 0
80181: ST_TO_ADDR
// for i in soldiers do
80182: LD_ADDR_VAR 0 6
80186: PUSH
80187: LD_VAR 0 17
80191: PUSH
80192: FOR_IN
80193: IFFALSE 80239
// begin x = x + GetX ( i ) ;
80195: LD_ADDR_VAR 0 9
80199: PUSH
80200: LD_VAR 0 9
80204: PUSH
80205: LD_VAR 0 6
80209: PPUSH
80210: CALL_OW 250
80214: PLUS
80215: ST_TO_ADDR
// y = y + GetY ( i ) ;
80216: LD_ADDR_VAR 0 10
80220: PUSH
80221: LD_VAR 0 10
80225: PUSH
80226: LD_VAR 0 6
80230: PPUSH
80231: CALL_OW 251
80235: PLUS
80236: ST_TO_ADDR
// end ;
80237: GO 80192
80239: POP
80240: POP
// x = x div soldiers ;
80241: LD_ADDR_VAR 0 9
80245: PUSH
80246: LD_VAR 0 9
80250: PUSH
80251: LD_VAR 0 17
80255: DIV
80256: ST_TO_ADDR
// y = y div soldiers ;
80257: LD_ADDR_VAR 0 10
80261: PUSH
80262: LD_VAR 0 10
80266: PUSH
80267: LD_VAR 0 17
80271: DIV
80272: ST_TO_ADDR
// temp_value = 0 ;
80273: LD_ADDR_VAR 0 15
80277: PUSH
80278: LD_INT 0
80280: ST_TO_ADDR
// for i in soldiers do
80281: LD_ADDR_VAR 0 6
80285: PUSH
80286: LD_VAR 0 17
80290: PUSH
80291: FOR_IN
80292: IFFALSE 80343
// begin k = GetDistUnitXY ( i , x , y ) ;
80294: LD_ADDR_VAR 0 5
80298: PUSH
80299: LD_VAR 0 6
80303: PPUSH
80304: LD_VAR 0 9
80308: PPUSH
80309: LD_VAR 0 10
80313: PPUSH
80314: CALL_OW 297
80318: ST_TO_ADDR
// if k > temp_value then
80319: LD_VAR 0 5
80323: PUSH
80324: LD_VAR 0 15
80328: GREATER
80329: IFFALSE 80341
// temp_value = k ;
80331: LD_ADDR_VAR 0 15
80335: PUSH
80336: LD_VAR 0 5
80340: ST_TO_ADDR
// end ;
80341: GO 80291
80343: POP
80344: POP
// for i in scientists do
80345: LD_ADDR_VAR 0 6
80349: PUSH
80350: LD_VAR 0 18
80354: PUSH
80355: FOR_IN
80356: IFFALSE 80462
// if GetDistUnitXY ( i , x , y ) > temp_value then
80358: LD_VAR 0 6
80362: PPUSH
80363: LD_VAR 0 9
80367: PPUSH
80368: LD_VAR 0 10
80372: PPUSH
80373: CALL_OW 297
80377: PUSH
80378: LD_VAR 0 15
80382: GREATER
80383: IFFALSE 80460
// case GetType ( IsInUnit ( i ) ) of unit_building :
80385: LD_VAR 0 6
80389: PPUSH
80390: CALL_OW 310
80394: PPUSH
80395: CALL_OW 247
80399: PUSH
80400: LD_INT 3
80402: DOUBLE
80403: EQUAL
80404: IFTRUE 80408
80406: GO 80420
80408: POP
// ComExitBuilding ( i ) ; unit_vehicle :
80409: LD_VAR 0 6
80413: PPUSH
80414: CALL_OW 122
80418: GO 80460
80420: LD_INT 2
80422: DOUBLE
80423: EQUAL
80424: IFTRUE 80428
80426: GO 80440
80428: POP
// ComExitVehicle ( i ) ; else
80429: LD_VAR 0 6
80433: PPUSH
80434: CALL_OW 121
80438: GO 80460
80440: POP
// ComMoveXY ( i , x , y ) ; end ;
80441: LD_VAR 0 6
80445: PPUSH
80446: LD_VAR 0 9
80450: PPUSH
80451: LD_VAR 0 10
80455: PPUSH
80456: CALL_OW 111
80460: GO 80355
80462: POP
80463: POP
// end ; temp_list_2 = [ 9999999 , 9999999 ] ;
80464: LD_ADDR_VAR 0 13
80468: PUSH
80469: LD_INT 9999999
80471: PUSH
80472: LD_INT 9999999
80474: PUSH
80475: EMPTY
80476: LIST
80477: LIST
80478: ST_TO_ADDR
// for i in UnitFilter ( vehicles , [ [ f_not , [ f_weapon , ru_time_lapser ] ] , [ f_not , [ f_weapon , ar_selfpropelled_bomb ] , [ f_not , [ f_weapon , ru_rocket ] ] ] , [ f_ok ] ] ) ^ UnitFilter ( soldiers , [ f_ok ] ) do
80479: LD_ADDR_VAR 0 6
80483: PUSH
80484: LD_VAR 0 19
80488: PPUSH
80489: LD_INT 3
80491: PUSH
80492: LD_INT 34
80494: PUSH
80495: LD_INT 49
80497: PUSH
80498: EMPTY
80499: LIST
80500: LIST
80501: PUSH
80502: EMPTY
80503: LIST
80504: LIST
80505: PUSH
80506: LD_INT 3
80508: PUSH
80509: LD_INT 34
80511: PUSH
80512: LD_INT 29
80514: PUSH
80515: EMPTY
80516: LIST
80517: LIST
80518: PUSH
80519: LD_INT 3
80521: PUSH
80522: LD_INT 34
80524: PUSH
80525: LD_INT 47
80527: PUSH
80528: EMPTY
80529: LIST
80530: LIST
80531: PUSH
80532: EMPTY
80533: LIST
80534: LIST
80535: PUSH
80536: EMPTY
80537: LIST
80538: LIST
80539: LIST
80540: PUSH
80541: LD_INT 50
80543: PUSH
80544: EMPTY
80545: LIST
80546: PUSH
80547: EMPTY
80548: LIST
80549: LIST
80550: LIST
80551: PPUSH
80552: CALL_OW 72
80556: PUSH
80557: LD_VAR 0 17
80561: PPUSH
80562: LD_INT 50
80564: PUSH
80565: EMPTY
80566: LIST
80567: PPUSH
80568: CALL_OW 72
80572: ADD
80573: PUSH
80574: FOR_IN
80575: IFFALSE 80630
// if ai_attacking_unit_hex_index [ i ] < temp_list_2 [ 1 ] then
80577: LD_EXP 79
80581: PUSH
80582: LD_VAR 0 6
80586: ARRAY
80587: PUSH
80588: LD_VAR 0 13
80592: PUSH
80593: LD_INT 1
80595: ARRAY
80596: LESS
80597: IFFALSE 80628
// temp_list_2 = Replace ( temp_list_2 , 1 , ai_attacking_unit_hex_index [ i ] ) ;
80599: LD_ADDR_VAR 0 13
80603: PUSH
80604: LD_VAR 0 13
80608: PPUSH
80609: LD_INT 1
80611: PPUSH
80612: LD_EXP 79
80616: PUSH
80617: LD_VAR 0 6
80621: ARRAY
80622: PPUSH
80623: CALL_OW 1
80627: ST_TO_ADDR
80628: GO 80574
80630: POP
80631: POP
// for i in UnitFilter ( vehicles , [ [ f_or , [ f_weapon , ru_time_lapser ] , [ f_weapon , ar_selfpropelled_bomb ] ] , [ f_ok ] ] ) do
80632: LD_ADDR_VAR 0 6
80636: PUSH
80637: LD_VAR 0 19
80641: PPUSH
80642: LD_INT 2
80644: PUSH
80645: LD_INT 34
80647: PUSH
80648: LD_INT 49
80650: PUSH
80651: EMPTY
80652: LIST
80653: LIST
80654: PUSH
80655: LD_INT 34
80657: PUSH
80658: LD_INT 29
80660: PUSH
80661: EMPTY
80662: LIST
80663: LIST
80664: PUSH
80665: EMPTY
80666: LIST
80667: LIST
80668: LIST
80669: PUSH
80670: LD_INT 50
80672: PUSH
80673: EMPTY
80674: LIST
80675: PUSH
80676: EMPTY
80677: LIST
80678: LIST
80679: PPUSH
80680: CALL_OW 72
80684: PUSH
80685: FOR_IN
80686: IFFALSE 80741
// if ai_attacking_unit_hex_index [ i ] < temp_list_2 [ 2 ] then
80688: LD_EXP 79
80692: PUSH
80693: LD_VAR 0 6
80697: ARRAY
80698: PUSH
80699: LD_VAR 0 13
80703: PUSH
80704: LD_INT 2
80706: ARRAY
80707: LESS
80708: IFFALSE 80739
// temp_list_2 = Replace ( temp_list_2 , 2 , ai_attacking_unit_hex_index [ i ] ) ;
80710: LD_ADDR_VAR 0 13
80714: PUSH
80715: LD_VAR 0 13
80719: PPUSH
80720: LD_INT 2
80722: PPUSH
80723: LD_EXP 79
80727: PUSH
80728: LD_VAR 0 6
80732: ARRAY
80733: PPUSH
80734: CALL_OW 1
80738: ST_TO_ADDR
80739: GO 80685
80741: POP
80742: POP
// if temp_list_2 [ 2 ] <= normal_attack_hexes and temp_list_2 [ 2 ] > 1 then
80743: LD_VAR 0 13
80747: PUSH
80748: LD_INT 2
80750: ARRAY
80751: PUSH
80752: LD_VAR 0 4
80756: LESSEQUAL
80757: PUSH
80758: LD_VAR 0 13
80762: PUSH
80763: LD_INT 2
80765: ARRAY
80766: PUSH
80767: LD_INT 1
80769: GREATER
80770: AND
80771: IFFALSE 81040
// begin temp_list = [ normal_attack_hexes [ temp_list_2 [ 2 ] - 1 ] , normal_attack_hexes [ temp_list_2 [ 2 ] ] ] ;
80773: LD_ADDR_VAR 0 12
80777: PUSH
80778: LD_VAR 0 4
80782: PUSH
80783: LD_VAR 0 13
80787: PUSH
80788: LD_INT 2
80790: ARRAY
80791: PUSH
80792: LD_INT 1
80794: MINUS
80795: ARRAY
80796: PUSH
80797: LD_VAR 0 4
80801: PUSH
80802: LD_VAR 0 13
80806: PUSH
80807: LD_INT 2
80809: ARRAY
80810: ARRAY
80811: PUSH
80812: EMPTY
80813: LIST
80814: LIST
80815: ST_TO_ADDR
// k = AI_GetTurnDirection ( temp_list [ 1 ] [ 1 ] , temp_list [ 1 ] [ 2 ] , temp_list [ 2 ] [ 1 ] , temp_list [ 2 ] [ 2 ] ) ;
80816: LD_ADDR_VAR 0 5
80820: PUSH
80821: LD_VAR 0 12
80825: PUSH
80826: LD_INT 1
80828: ARRAY
80829: PUSH
80830: LD_INT 1
80832: ARRAY
80833: PPUSH
80834: LD_VAR 0 12
80838: PUSH
80839: LD_INT 1
80841: ARRAY
80842: PUSH
80843: LD_INT 2
80845: ARRAY
80846: PPUSH
80847: LD_VAR 0 12
80851: PUSH
80852: LD_INT 2
80854: ARRAY
80855: PUSH
80856: LD_INT 1
80858: ARRAY
80859: PPUSH
80860: LD_VAR 0 12
80864: PUSH
80865: LD_INT 2
80867: ARRAY
80868: PUSH
80869: LD_INT 2
80871: ARRAY
80872: PPUSH
80873: CALL 14258 0 4
80877: ST_TO_ADDR
// dist = 9999999 ;
80878: LD_ADDR_VAR 0 14
80882: PUSH
80883: LD_INT 9999999
80885: ST_TO_ADDR
// for i in UnitFilter ( vehicles , [ [ f_or , [ f_weapon , ru_time_lapser ] , [ f_weapon , ar_selfpropelled_bomb ] ] , [ f_ok ] ] ) do
80886: LD_ADDR_VAR 0 6
80890: PUSH
80891: LD_VAR 0 19
80895: PPUSH
80896: LD_INT 2
80898: PUSH
80899: LD_INT 34
80901: PUSH
80902: LD_INT 49
80904: PUSH
80905: EMPTY
80906: LIST
80907: LIST
80908: PUSH
80909: LD_INT 34
80911: PUSH
80912: LD_INT 29
80914: PUSH
80915: EMPTY
80916: LIST
80917: LIST
80918: PUSH
80919: EMPTY
80920: LIST
80921: LIST
80922: LIST
80923: PUSH
80924: LD_INT 50
80926: PUSH
80927: EMPTY
80928: LIST
80929: PUSH
80930: EMPTY
80931: LIST
80932: LIST
80933: PPUSH
80934: CALL_OW 72
80938: PUSH
80939: FOR_IN
80940: IFFALSE 81036
// begin g = GetDistUnitXY ( i , temp_list [ 1 ] [ 1 ] , temp_list [ 1 ] [ 2 ] ) ;
80942: LD_ADDR_VAR 0 7
80946: PUSH
80947: LD_VAR 0 6
80951: PPUSH
80952: LD_VAR 0 12
80956: PUSH
80957: LD_INT 1
80959: ARRAY
80960: PUSH
80961: LD_INT 1
80963: ARRAY
80964: PPUSH
80965: LD_VAR 0 12
80969: PUSH
80970: LD_INT 1
80972: ARRAY
80973: PUSH
80974: LD_INT 2
80976: ARRAY
80977: PPUSH
80978: CALL_OW 297
80982: ST_TO_ADDR
// if g < dist then
80983: LD_VAR 0 7
80987: PUSH
80988: LD_VAR 0 14
80992: LESS
80993: IFFALSE 81034
// begin dist = g ;
80995: LD_ADDR_VAR 0 14
80999: PUSH
81000: LD_VAR 0 7
81004: ST_TO_ADDR
// temp_list_3 = [ GetX ( i ) , GetY ( i ) ] ;
81005: LD_ADDR_VAR 0 8
81009: PUSH
81010: LD_VAR 0 6
81014: PPUSH
81015: CALL_OW 250
81019: PUSH
81020: LD_VAR 0 6
81024: PPUSH
81025: CALL_OW 251
81029: PUSH
81030: EMPTY
81031: LIST
81032: LIST
81033: ST_TO_ADDR
// end ; end ;
81034: GO 80939
81036: POP
81037: POP
// end else
81038: GO 81049
// k = - 1 ;
81040: LD_ADDR_VAR 0 5
81044: PUSH
81045: LD_INT 1
81047: NEG
81048: ST_TO_ADDR
// group_in_position = true ;
81049: LD_ADDR_VAR 0 16
81053: PUSH
81054: LD_INT 1
81056: ST_TO_ADDR
// for i in vehicles ^ soldiers do
81057: LD_ADDR_VAR 0 6
81061: PUSH
81062: LD_VAR 0 19
81066: PUSH
81067: LD_VAR 0 17
81071: ADD
81072: PUSH
81073: FOR_IN
81074: IFFALSE 81662
// if ai_attacking_unit_hex_index [ i ] + 1 <= normal_attack_hexes then
81076: LD_EXP 79
81080: PUSH
81081: LD_VAR 0 6
81085: ARRAY
81086: PUSH
81087: LD_INT 1
81089: PLUS
81090: PUSH
81091: LD_VAR 0 4
81095: LESSEQUAL
81096: IFFALSE 81660
// begin temp_value = false ;
81098: LD_ADDR_VAR 0 15
81102: PUSH
81103: LD_INT 0
81105: ST_TO_ADDR
// if normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] + 1 ] in init_attack_hexes then
81106: LD_VAR 0 4
81110: PUSH
81111: LD_EXP 79
81115: PUSH
81116: LD_VAR 0 6
81120: ARRAY
81121: PUSH
81122: LD_INT 1
81124: PLUS
81125: ARRAY
81126: PUSH
81127: LD_VAR 0 3
81131: IN
81132: IFFALSE 81142
// temp_value = true ;
81134: LD_ADDR_VAR 0 15
81138: PUSH
81139: LD_INT 1
81141: ST_TO_ADDR
// if not temp_value and not false in all_in_position then
81142: LD_VAR 0 15
81146: NOT
81147: PUSH
81148: LD_INT 0
81150: PUSH
81151: LD_VAR 0 22
81155: IN
81156: NOT
81157: AND
81158: IFFALSE 81398
// if not GetWeapon ( i ) in [ ru_time_lapser , ar_selfpropelled_bomb ] then
81160: LD_VAR 0 6
81164: PPUSH
81165: CALL_OW 264
81169: PUSH
81170: LD_INT 49
81172: PUSH
81173: LD_INT 29
81175: PUSH
81176: EMPTY
81177: LIST
81178: LIST
81179: IN
81180: NOT
81181: IFFALSE 81334
// 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 ] ;
81183: LD_ADDR_VAR 0 15
81187: PUSH
81188: LD_EXP 79
81192: PUSH
81193: LD_VAR 0 6
81197: ARRAY
81198: PUSH
81199: LD_INT 1
81201: PLUS
81202: PUSH
81203: LD_VAR 0 13
81207: PUSH
81208: LD_INT 1
81210: ARRAY
81211: PUSH
81212: LD_INT 1
81214: PLUS
81215: LESSEQUAL
81216: PUSH
81217: LD_EXP 79
81221: PUSH
81222: LD_VAR 0 6
81226: ARRAY
81227: PUSH
81228: LD_INT 1
81230: PLUS
81231: PUSH
81232: LD_VAR 0 13
81236: PUSH
81237: LD_INT 2
81239: ARRAY
81240: LESSEQUAL
81241: AND
81242: ST_TO_ADDR
// if temp_value and ai_attacking_unit_hex_index [ i ] + 1 = temp_list_2 [ 2 ] and k <> - 1 then
81243: LD_VAR 0 15
81247: PUSH
81248: LD_EXP 79
81252: PUSH
81253: LD_VAR 0 6
81257: ARRAY
81258: PUSH
81259: LD_INT 1
81261: PLUS
81262: PUSH
81263: LD_VAR 0 13
81267: PUSH
81268: LD_INT 2
81270: ARRAY
81271: EQUAL
81272: AND
81273: PUSH
81274: LD_VAR 0 5
81278: PUSH
81279: LD_INT 1
81281: NEG
81282: NONEQUAL
81283: AND
81284: IFFALSE 81332
// begin if not BehindLine ( i , temp_list_3 [ 1 ] , temp_list_3 [ 2 ] , k , 4 ) then
81286: LD_VAR 0 6
81290: PPUSH
81291: LD_VAR 0 8
81295: PUSH
81296: LD_INT 1
81298: ARRAY
81299: PPUSH
81300: LD_VAR 0 8
81304: PUSH
81305: LD_INT 2
81307: ARRAY
81308: PPUSH
81309: LD_VAR 0 5
81313: PPUSH
81314: LD_INT 4
81316: PPUSH
81317: CALL 14533 0 5
81321: NOT
81322: IFFALSE 81332
// temp_value = false ;
81324: LD_ADDR_VAR 0 15
81328: PUSH
81329: LD_INT 0
81331: ST_TO_ADDR
// end ; end else
81332: GO 81398
// 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 ;
81334: LD_ADDR_VAR 0 15
81338: PUSH
81339: LD_EXP 79
81343: PUSH
81344: LD_VAR 0 6
81348: ARRAY
81349: PUSH
81350: LD_INT 1
81352: PLUS
81353: PUSH
81354: LD_VAR 0 13
81358: PUSH
81359: LD_INT 1
81361: ARRAY
81362: PUSH
81363: LD_INT 2
81365: PLUS
81366: LESSEQUAL
81367: PUSH
81368: LD_EXP 79
81372: PUSH
81373: LD_VAR 0 6
81377: ARRAY
81378: PUSH
81379: LD_INT 1
81381: PLUS
81382: PUSH
81383: LD_VAR 0 13
81387: PUSH
81388: LD_INT 2
81390: ARRAY
81391: PUSH
81392: LD_INT 1
81394: PLUS
81395: LESSEQUAL
81396: AND
81397: 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 ] ) <= move_dist and temp_value then
81398: LD_VAR 0 6
81402: PPUSH
81403: LD_VAR 0 4
81407: PUSH
81408: LD_EXP 79
81412: PUSH
81413: LD_VAR 0 6
81417: ARRAY
81418: ARRAY
81419: PUSH
81420: LD_INT 1
81422: ARRAY
81423: PPUSH
81424: LD_VAR 0 4
81428: PUSH
81429: LD_EXP 79
81433: PUSH
81434: LD_VAR 0 6
81438: ARRAY
81439: ARRAY
81440: PUSH
81441: LD_INT 2
81443: ARRAY
81444: PPUSH
81445: CALL_OW 297
81449: PUSH
81450: LD_VAR 0 21
81454: LESSEQUAL
81455: PUSH
81456: LD_VAR 0 15
81460: AND
81461: IFFALSE 81569
// begin ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , i , ai_attacking_unit_hex_index [ i ] + 1 ) ;
81463: LD_ADDR_EXP 79
81467: PUSH
81468: LD_EXP 79
81472: PPUSH
81473: LD_VAR 0 6
81477: PPUSH
81478: LD_EXP 79
81482: PUSH
81483: LD_VAR 0 6
81487: ARRAY
81488: PUSH
81489: LD_INT 1
81491: PLUS
81492: PPUSH
81493: CALL_OW 1
81497: ST_TO_ADDR
// if GetType ( i ) = unit_vehicle then
81498: LD_VAR 0 6
81502: PPUSH
81503: CALL_OW 247
81507: PUSH
81508: LD_INT 2
81510: EQUAL
81511: IFFALSE 81569
// begin k = IsDrivenBy ( i ) ;
81513: LD_ADDR_VAR 0 5
81517: PUSH
81518: LD_VAR 0 6
81522: PPUSH
81523: CALL_OW 311
81527: ST_TO_ADDR
// if k > 0 then
81528: LD_VAR 0 5
81532: PUSH
81533: LD_INT 0
81535: GREATER
81536: IFFALSE 81569
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , k , ai_attacking_unit_hex_index [ i ] ) ;
81538: LD_ADDR_EXP 79
81542: PUSH
81543: LD_EXP 79
81547: PPUSH
81548: LD_VAR 0 5
81552: PPUSH
81553: LD_EXP 79
81557: PUSH
81558: LD_VAR 0 6
81562: ARRAY
81563: PPUSH
81564: CALL_OW 1
81568: ST_TO_ADDR
// end ; end ; if normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in init_attack_hexes and GetDistUnitXY ( i , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) > move_dist then
81569: LD_VAR 0 4
81573: PUSH
81574: LD_EXP 79
81578: PUSH
81579: LD_VAR 0 6
81583: ARRAY
81584: ARRAY
81585: PUSH
81586: LD_VAR 0 3
81590: IN
81591: PUSH
81592: LD_VAR 0 6
81596: PPUSH
81597: LD_VAR 0 4
81601: PUSH
81602: LD_EXP 79
81606: PUSH
81607: LD_VAR 0 6
81611: ARRAY
81612: ARRAY
81613: PUSH
81614: LD_INT 1
81616: ARRAY
81617: PPUSH
81618: LD_VAR 0 4
81622: PUSH
81623: LD_EXP 79
81627: PUSH
81628: LD_VAR 0 6
81632: ARRAY
81633: ARRAY
81634: PUSH
81635: LD_INT 2
81637: ARRAY
81638: PPUSH
81639: CALL_OW 297
81643: PUSH
81644: LD_VAR 0 21
81648: GREATER
81649: AND
81650: IFFALSE 81660
// group_in_position = false ;
81652: LD_ADDR_VAR 0 16
81656: PUSH
81657: LD_INT 0
81659: ST_TO_ADDR
// end ;
81660: GO 81073
81662: POP
81663: POP
// if not all_in_position [ group ] then
81664: LD_VAR 0 22
81668: PUSH
81669: LD_VAR 0 1
81673: ARRAY
81674: NOT
81675: IFFALSE 81807
// if group_in_position then
81677: LD_VAR 0 16
81681: IFFALSE 81708
// all_in_position = Replace ( all_in_position , group , true ) else
81683: LD_ADDR_VAR 0 22
81687: PUSH
81688: LD_VAR 0 22
81692: PPUSH
81693: LD_VAR 0 1
81697: PPUSH
81698: LD_INT 1
81700: PPUSH
81701: CALL_OW 1
81705: ST_TO_ADDR
81706: GO 81807
// begin if UnitFilter ( soldiers ^ scientists ^ vehicles ^ mechanics , [ f_not , [ f_lives , 1000 ] ] ) > 0 then
81708: LD_VAR 0 17
81712: PUSH
81713: LD_VAR 0 18
81717: ADD
81718: PUSH
81719: LD_VAR 0 19
81723: ADD
81724: PUSH
81725: LD_VAR 0 20
81729: ADD
81730: PPUSH
81731: LD_INT 3
81733: PUSH
81734: LD_INT 24
81736: PUSH
81737: LD_INT 1000
81739: PUSH
81740: EMPTY
81741: LIST
81742: LIST
81743: PUSH
81744: EMPTY
81745: LIST
81746: LIST
81747: PPUSH
81748: CALL_OW 72
81752: PUSH
81753: LD_INT 0
81755: GREATER
81756: IFFALSE 81807
// begin for i = 1 to attacking_vehicles + 0 do
81758: LD_ADDR_VAR 0 6
81762: PUSH
81763: DOUBLE
81764: LD_INT 1
81766: DEC
81767: ST_TO_ADDR
81768: LD_LOC 11
81772: PUSH
81773: LD_INT 0
81775: PLUS
81776: PUSH
81777: FOR_TO
81778: IFFALSE 81805
// all_in_position = Replace ( all_in_position , i , true ) ;
81780: LD_ADDR_VAR 0 22
81784: PUSH
81785: LD_VAR 0 22
81789: PPUSH
81790: LD_VAR 0 6
81794: PPUSH
81795: LD_INT 1
81797: PPUSH
81798: CALL_OW 1
81802: ST_TO_ADDR
81803: GO 81777
81805: POP
81806: POP
// end ; end ; for i in vehicles ^ soldiers do
81807: LD_ADDR_VAR 0 6
81811: PUSH
81812: LD_VAR 0 19
81816: PUSH
81817: LD_VAR 0 17
81821: ADD
81822: PUSH
81823: FOR_IN
81824: IFFALSE 83523
// begin if GetWeapon ( i ) = ru_rocket and not normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in init_attack_hexes then
81826: LD_VAR 0 6
81830: PPUSH
81831: CALL_OW 264
81835: PUSH
81836: LD_INT 47
81838: EQUAL
81839: PUSH
81840: LD_VAR 0 4
81844: PUSH
81845: LD_EXP 79
81849: PUSH
81850: LD_VAR 0 6
81854: ARRAY
81855: ARRAY
81856: PUSH
81857: LD_VAR 0 3
81861: IN
81862: NOT
81863: AND
81864: IFFALSE 81996
// begin temp_list = FilterAllUnits ( [ [ f_enemy , GetBaseSide ( base ) ] , [ f_type , unit_building ] , [ f_dist , i , 30 ] , [ f_inarea , big_hill_area ] ] ) ;
81866: LD_ADDR_VAR 0 12
81870: PUSH
81871: LD_INT 81
81873: PUSH
81874: LD_VAR 0 2
81878: PPUSH
81879: CALL 18937 0 1
81883: PUSH
81884: EMPTY
81885: LIST
81886: LIST
81887: PUSH
81888: LD_INT 21
81890: PUSH
81891: LD_INT 3
81893: PUSH
81894: EMPTY
81895: LIST
81896: LIST
81897: PUSH
81898: LD_INT 91
81900: PUSH
81901: LD_VAR 0 6
81905: PUSH
81906: LD_INT 30
81908: PUSH
81909: EMPTY
81910: LIST
81911: LIST
81912: LIST
81913: PUSH
81914: LD_INT 95
81916: PUSH
81917: LD_INT 11
81919: PUSH
81920: EMPTY
81921: LIST
81922: LIST
81923: PUSH
81924: EMPTY
81925: LIST
81926: LIST
81927: LIST
81928: LIST
81929: PPUSH
81930: CALL_OW 69
81934: ST_TO_ADDR
// if temp_list > 0 then
81935: LD_VAR 0 12
81939: PUSH
81940: LD_INT 0
81942: GREATER
81943: IFFALSE 81996
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
81945: LD_ADDR_VAR 0 11
81949: PUSH
81950: LD_VAR 0 12
81954: PPUSH
81955: LD_VAR 0 6
81959: PPUSH
81960: CALL_OW 75
81964: ST_TO_ADDR
// ComAttackPlace ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
81965: LD_VAR 0 6
81969: PPUSH
81970: LD_VAR 0 11
81974: PPUSH
81975: CALL_OW 250
81979: PPUSH
81980: LD_VAR 0 11
81984: PPUSH
81985: CALL_OW 251
81989: PPUSH
81990: CALL_OW 116
// continue ;
81994: GO 81823
// end ; end ; if GetClass ( i ) = class_bazooker then
81996: LD_VAR 0 6
82000: PPUSH
82001: CALL_OW 257
82005: PUSH
82006: LD_INT 9
82008: EQUAL
82009: IFFALSE 82381
// begin temp_list = GetTaskList ( i ) ;
82011: LD_ADDR_VAR 0 12
82015: PUSH
82016: LD_VAR 0 6
82020: PPUSH
82021: CALL_OW 437
82025: ST_TO_ADDR
// if temp_list > 0 then
82026: LD_VAR 0 12
82030: PUSH
82031: LD_INT 0
82033: GREATER
82034: IFFALSE 82074
// if temp_list [ 1 ] [ 1 ] = & or temp_list [ 1 ] [ 1 ] = % then
82036: LD_VAR 0 12
82040: PUSH
82041: LD_INT 1
82043: ARRAY
82044: PUSH
82045: LD_INT 1
82047: ARRAY
82048: PUSH
82049: LD_STRING &
82051: EQUAL
82052: PUSH
82053: LD_VAR 0 12
82057: PUSH
82058: LD_INT 1
82060: ARRAY
82061: PUSH
82062: LD_INT 1
82064: ARRAY
82065: PUSH
82066: LD_STRING %
82068: EQUAL
82069: OR
82070: IFFALSE 82074
// continue ;
82072: GO 81823
// temp_unit = Attacks ( i ) ;
82074: LD_ADDR_VAR 0 11
82078: PUSH
82079: LD_VAR 0 6
82083: PPUSH
82084: CALL_OW 320
82088: ST_TO_ADDR
// if temp_unit > 0 and DangerousUnits ( [ temp_unit ] ) > 0 then
82089: LD_VAR 0 11
82093: PUSH
82094: LD_INT 0
82096: GREATER
82097: PUSH
82098: LD_VAR 0 11
82102: PUSH
82103: EMPTY
82104: LIST
82105: PPUSH
82106: CALL 83864 0 1
82110: PUSH
82111: LD_INT 0
82113: GREATER
82114: AND
82115: IFFALSE 82381
// begin temp_list_2 = [ GetX ( temp_unit ) , GetY ( temp_unit ) ] ;
82117: LD_ADDR_VAR 0 13
82121: PUSH
82122: LD_VAR 0 11
82126: PPUSH
82127: CALL_OW 250
82131: PUSH
82132: LD_VAR 0 11
82136: PPUSH
82137: CALL_OW 251
82141: PUSH
82142: EMPTY
82143: LIST
82144: LIST
82145: ST_TO_ADDR
// temp_value = false ;
82146: LD_ADDR_VAR 0 15
82150: PUSH
82151: LD_INT 0
82153: ST_TO_ADDR
// for k in ai_time_shift_hexes [ base ] ^ ai_time_shift_hexes_underway [ base ] do
82154: LD_ADDR_VAR 0 5
82158: PUSH
82159: LD_EXP 96
82163: PUSH
82164: LD_VAR 0 2
82168: ARRAY
82169: PUSH
82170: LD_EXP 97
82174: PUSH
82175: LD_VAR 0 2
82179: ARRAY
82180: ADD
82181: PUSH
82182: FOR_IN
82183: IFFALSE 82260
// if GetDistXY ( temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , k [ 1 ] , k [ 2 ] ) <= ai_time_shift_data [ GetBaseSide ( base ) ] [ 2 ] then
82185: LD_VAR 0 13
82189: PUSH
82190: LD_INT 1
82192: ARRAY
82193: PPUSH
82194: LD_VAR 0 13
82198: PUSH
82199: LD_INT 2
82201: ARRAY
82202: PPUSH
82203: LD_VAR 0 5
82207: PUSH
82208: LD_INT 1
82210: ARRAY
82211: PPUSH
82212: LD_VAR 0 5
82216: PUSH
82217: LD_INT 2
82219: ARRAY
82220: PPUSH
82221: CALL_OW 298
82225: PUSH
82226: LD_EXP 95
82230: PUSH
82231: LD_VAR 0 2
82235: PPUSH
82236: CALL 18937 0 1
82240: ARRAY
82241: PUSH
82242: LD_INT 2
82244: ARRAY
82245: LESSEQUAL
82246: IFFALSE 82258
// begin temp_value = true ;
82248: LD_ADDR_VAR 0 15
82252: PUSH
82253: LD_INT 1
82255: ST_TO_ADDR
// break ;
82256: GO 82260
// end ;
82258: GO 82182
82260: POP
82261: POP
// if not temp_value then
82262: LD_VAR 0 15
82266: NOT
82267: IFFALSE 82381
// begin ComTimeShift ( i , temp_list_2 [ 1 ] , temp_list_2 [ 2 ] ) ;
82269: LD_VAR 0 6
82273: PPUSH
82274: LD_VAR 0 13
82278: PUSH
82279: LD_INT 1
82281: ARRAY
82282: PPUSH
82283: LD_VAR 0 13
82287: PUSH
82288: LD_INT 2
82290: ARRAY
82291: PPUSH
82292: CALL_OW 154
// temp_list = Insert ( ai_time_shift_hexes_underway [ base ] , 1 , [ temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , i , tick ] ) ;
82296: LD_ADDR_VAR 0 12
82300: PUSH
82301: LD_EXP 97
82305: PUSH
82306: LD_VAR 0 2
82310: ARRAY
82311: PPUSH
82312: LD_INT 1
82314: PPUSH
82315: LD_VAR 0 13
82319: PUSH
82320: LD_INT 1
82322: ARRAY
82323: PUSH
82324: LD_VAR 0 13
82328: PUSH
82329: LD_INT 2
82331: ARRAY
82332: PUSH
82333: LD_VAR 0 6
82337: PUSH
82338: LD_OWVAR 1
82342: PUSH
82343: EMPTY
82344: LIST
82345: LIST
82346: LIST
82347: LIST
82348: PPUSH
82349: CALL_OW 2
82353: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
82354: LD_ADDR_EXP 97
82358: PUSH
82359: LD_EXP 97
82363: PPUSH
82364: LD_VAR 0 2
82368: PPUSH
82369: LD_VAR 0 12
82373: PPUSH
82374: CALL_OW 1
82378: ST_TO_ADDR
// continue ;
82379: GO 81823
// end ; end ; end ; k := not ( normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in init_attack_hexes and false in all_in_position ) ;
82381: LD_ADDR_VAR 0 5
82385: PUSH
82386: LD_VAR 0 4
82390: PUSH
82391: LD_EXP 79
82395: PUSH
82396: LD_VAR 0 6
82400: ARRAY
82401: ARRAY
82402: PUSH
82403: LD_VAR 0 3
82407: IN
82408: PUSH
82409: LD_INT 0
82411: PUSH
82412: LD_VAR 0 22
82416: IN
82417: AND
82418: NOT
82419: ST_TO_ADDR
// if k then
82420: LD_VAR 0 5
82424: IFFALSE 83323
// begin temp_list = FilterAllUnits ( [ [ f_enemy , GetBaseSide ( base ) ] , [ f_type , unit_human ] , [ f_dist , i , 20 ] , [ f_see , GetBaseSide ( base ) ] , [ f_inarea , big_hill_area ] ] ) ;
82426: LD_ADDR_VAR 0 12
82430: PUSH
82431: LD_INT 81
82433: PUSH
82434: LD_VAR 0 2
82438: PPUSH
82439: CALL 18937 0 1
82443: PUSH
82444: EMPTY
82445: LIST
82446: LIST
82447: PUSH
82448: LD_INT 21
82450: PUSH
82451: LD_INT 1
82453: PUSH
82454: EMPTY
82455: LIST
82456: LIST
82457: PUSH
82458: LD_INT 91
82460: PUSH
82461: LD_VAR 0 6
82465: PUSH
82466: LD_INT 20
82468: PUSH
82469: EMPTY
82470: LIST
82471: LIST
82472: LIST
82473: PUSH
82474: LD_INT 101
82476: PUSH
82477: LD_VAR 0 2
82481: PPUSH
82482: CALL 18937 0 1
82486: PUSH
82487: EMPTY
82488: LIST
82489: LIST
82490: PUSH
82491: LD_INT 95
82493: PUSH
82494: LD_INT 11
82496: PUSH
82497: EMPTY
82498: LIST
82499: LIST
82500: PUSH
82501: EMPTY
82502: LIST
82503: LIST
82504: LIST
82505: LIST
82506: LIST
82507: PPUSH
82508: CALL_OW 69
82512: ST_TO_ADDR
// if temp_list > 0 then
82513: LD_VAR 0 12
82517: PUSH
82518: LD_INT 0
82520: GREATER
82521: IFFALSE 82811
// begin temp_list_2 = UnitFilter ( temp_list , [ f_not , [ f_lives , 250 ] ] ) ;
82523: LD_ADDR_VAR 0 13
82527: PUSH
82528: LD_VAR 0 12
82532: PPUSH
82533: LD_INT 3
82535: PUSH
82536: LD_INT 24
82538: PUSH
82539: LD_INT 250
82541: PUSH
82542: EMPTY
82543: LIST
82544: LIST
82545: PUSH
82546: EMPTY
82547: LIST
82548: LIST
82549: PPUSH
82550: CALL_OW 72
82554: ST_TO_ADDR
// if temp_list_2 > 0 then
82555: LD_VAR 0 13
82559: PUSH
82560: LD_INT 0
82562: GREATER
82563: IFFALSE 82575
// temp_list = temp_list_2 ;
82565: LD_ADDR_VAR 0 12
82569: PUSH
82570: LD_VAR 0 13
82574: ST_TO_ADDR
// temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
82575: LD_ADDR_VAR 0 11
82579: PUSH
82580: LD_VAR 0 12
82584: PPUSH
82585: LD_VAR 0 6
82589: PPUSH
82590: CALL_OW 75
82594: ST_TO_ADDR
// if GetWeapon ( i ) = ar_selfpropelled_bomb then
82595: LD_VAR 0 6
82599: PPUSH
82600: CALL_OW 264
82604: PUSH
82605: LD_INT 29
82607: EQUAL
82608: IFFALSE 82626
// ComAttackUnit ( i , temp_unit ) else
82610: LD_VAR 0 6
82614: PPUSH
82615: LD_VAR 0 11
82619: PPUSH
82620: CALL_OW 115
82624: GO 82809
// if GetWeapon ( i ) = ru_time_lapser then
82626: LD_VAR 0 6
82630: PPUSH
82631: CALL_OW 264
82635: PUSH
82636: LD_INT 49
82638: EQUAL
82639: IFFALSE 82749
// begin dist = GetDistUnits ( i , temp_unit ) ;
82641: LD_ADDR_VAR 0 14
82645: PUSH
82646: LD_VAR 0 6
82650: PPUSH
82651: LD_VAR 0 11
82655: PPUSH
82656: CALL_OW 296
82660: ST_TO_ADDR
// if dist > 8 then
82661: LD_VAR 0 14
82665: PUSH
82666: LD_INT 8
82668: GREATER
82669: IFFALSE 82702
// ComMoveXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
82671: LD_VAR 0 6
82675: PPUSH
82676: LD_VAR 0 11
82680: PPUSH
82681: CALL_OW 250
82685: PPUSH
82686: LD_VAR 0 11
82690: PPUSH
82691: CALL_OW 251
82695: PPUSH
82696: CALL_OW 111
82700: GO 82747
// if dist < 6 then
82702: LD_VAR 0 14
82706: PUSH
82707: LD_INT 6
82709: LESS
82710: IFFALSE 82747
// AI_GetAwayFromXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) , 6 , false ) ;
82712: LD_VAR 0 6
82716: PPUSH
82717: LD_VAR 0 11
82721: PPUSH
82722: CALL_OW 250
82726: PPUSH
82727: LD_VAR 0 11
82731: PPUSH
82732: CALL_OW 251
82736: PPUSH
82737: LD_INT 6
82739: PPUSH
82740: LD_INT 0
82742: PPUSH
82743: CALL 12596 0 5
// end else
82747: GO 82809
// if GetLives ( temp_unit ) > 250 then
82749: LD_VAR 0 11
82753: PPUSH
82754: CALL_OW 256
82758: PUSH
82759: LD_INT 250
82761: GREATER
82762: IFFALSE 82795
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
82764: LD_VAR 0 6
82768: PPUSH
82769: LD_VAR 0 11
82773: PPUSH
82774: CALL_OW 250
82778: PPUSH
82779: LD_VAR 0 11
82783: PPUSH
82784: CALL_OW 251
82788: PPUSH
82789: CALL_OW 114
82793: GO 82809
// ComAttackUnit ( i , temp_unit ) ;
82795: LD_VAR 0 6
82799: PPUSH
82800: LD_VAR 0 11
82804: PPUSH
82805: CALL_OW 115
// end else
82809: GO 83315
// begin temp_list = FindNonhumansNearUnit ( GetBaseSide ( base ) , i , 20 , true ) ;
82811: LD_ADDR_VAR 0 12
82815: PUSH
82816: LD_VAR 0 2
82820: PPUSH
82821: CALL 18937 0 1
82825: PPUSH
82826: LD_VAR 0 6
82830: PPUSH
82831: LD_INT 20
82833: PPUSH
82834: LD_INT 1
82836: PPUSH
82837: CALL 83742 0 4
82841: ST_TO_ADDR
// temp_list = UnitFilter ( temp_list , [ f_inarea , big_hill_area ] ) ;
82842: LD_ADDR_VAR 0 12
82846: PUSH
82847: LD_VAR 0 12
82851: PPUSH
82852: LD_INT 95
82854: PUSH
82855: LD_INT 11
82857: PUSH
82858: EMPTY
82859: LIST
82860: LIST
82861: PPUSH
82862: CALL_OW 72
82866: ST_TO_ADDR
// if temp_list > 0 then
82867: LD_VAR 0 12
82871: PUSH
82872: LD_INT 0
82874: GREATER
82875: IFFALSE 83082
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
82877: LD_ADDR_VAR 0 11
82881: PUSH
82882: LD_VAR 0 12
82886: PPUSH
82887: LD_VAR 0 6
82891: PPUSH
82892: CALL_OW 75
82896: ST_TO_ADDR
// if GetWeapon ( i ) = ar_selfpropelled_bomb then
82897: LD_VAR 0 6
82901: PPUSH
82902: CALL_OW 264
82906: PUSH
82907: LD_INT 29
82909: EQUAL
82910: IFFALSE 82928
// ComAttackUnit ( i , temp_unit ) else
82912: LD_VAR 0 6
82916: PPUSH
82917: LD_VAR 0 11
82921: PPUSH
82922: CALL_OW 115
82926: GO 83080
// if GetWeapon ( i ) = ru_time_lapser then
82928: LD_VAR 0 6
82932: PPUSH
82933: CALL_OW 264
82937: PUSH
82938: LD_INT 49
82940: EQUAL
82941: IFFALSE 83051
// begin dist = GetDistUnits ( i , temp_unit ) ;
82943: LD_ADDR_VAR 0 14
82947: PUSH
82948: LD_VAR 0 6
82952: PPUSH
82953: LD_VAR 0 11
82957: PPUSH
82958: CALL_OW 296
82962: ST_TO_ADDR
// if dist > 8 then
82963: LD_VAR 0 14
82967: PUSH
82968: LD_INT 8
82970: GREATER
82971: IFFALSE 83004
// ComMoveXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
82973: LD_VAR 0 6
82977: PPUSH
82978: LD_VAR 0 11
82982: PPUSH
82983: CALL_OW 250
82987: PPUSH
82988: LD_VAR 0 11
82992: PPUSH
82993: CALL_OW 251
82997: PPUSH
82998: CALL_OW 111
83002: GO 83049
// if dist < 6 then
83004: LD_VAR 0 14
83008: PUSH
83009: LD_INT 6
83011: LESS
83012: IFFALSE 83049
// AI_GetAwayFromXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) , 6 , false ) ;
83014: LD_VAR 0 6
83018: PPUSH
83019: LD_VAR 0 11
83023: PPUSH
83024: CALL_OW 250
83028: PPUSH
83029: LD_VAR 0 11
83033: PPUSH
83034: CALL_OW 251
83038: PPUSH
83039: LD_INT 6
83041: PPUSH
83042: LD_INT 0
83044: PPUSH
83045: CALL 12596 0 5
// end else
83049: GO 83080
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
83051: LD_VAR 0 6
83055: PPUSH
83056: LD_VAR 0 11
83060: PPUSH
83061: CALL_OW 250
83065: PPUSH
83066: LD_VAR 0 11
83070: PPUSH
83071: CALL_OW 251
83075: PPUSH
83076: CALL_OW 114
// end else
83080: GO 83315
// begin temp_list = FindNonhumansNearUnit ( GetBaseSide ( base ) , i , 20 , false ) ;
83082: LD_ADDR_VAR 0 12
83086: PUSH
83087: LD_VAR 0 2
83091: PPUSH
83092: CALL 18937 0 1
83096: PPUSH
83097: LD_VAR 0 6
83101: PPUSH
83102: LD_INT 20
83104: PPUSH
83105: LD_INT 0
83107: PPUSH
83108: CALL 83742 0 4
83112: ST_TO_ADDR
// temp_list = UnitFilter ( temp_list , [ f_inarea , big_hill_area ] ) ;
83113: LD_ADDR_VAR 0 12
83117: PUSH
83118: LD_VAR 0 12
83122: PPUSH
83123: LD_INT 95
83125: PUSH
83126: LD_INT 11
83128: PUSH
83129: EMPTY
83130: LIST
83131: LIST
83132: PPUSH
83133: CALL_OW 72
83137: ST_TO_ADDR
// if temp_list > 0 then
83138: LD_VAR 0 12
83142: PUSH
83143: LD_INT 0
83145: GREATER
83146: IFFALSE 83307
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
83148: LD_ADDR_VAR 0 11
83152: PUSH
83153: LD_VAR 0 12
83157: PPUSH
83158: LD_VAR 0 6
83162: PPUSH
83163: CALL_OW 75
83167: ST_TO_ADDR
// if GetWeapon ( i ) = ru_time_lapser then
83168: LD_VAR 0 6
83172: PPUSH
83173: CALL_OW 264
83177: PUSH
83178: LD_INT 49
83180: EQUAL
83181: IFFALSE 83291
// begin dist = GetDistUnits ( i , temp_unit ) ;
83183: LD_ADDR_VAR 0 14
83187: PUSH
83188: LD_VAR 0 6
83192: PPUSH
83193: LD_VAR 0 11
83197: PPUSH
83198: CALL_OW 296
83202: ST_TO_ADDR
// if dist > 8 then
83203: LD_VAR 0 14
83207: PUSH
83208: LD_INT 8
83210: GREATER
83211: IFFALSE 83244
// ComMoveXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
83213: LD_VAR 0 6
83217: PPUSH
83218: LD_VAR 0 11
83222: PPUSH
83223: CALL_OW 250
83227: PPUSH
83228: LD_VAR 0 11
83232: PPUSH
83233: CALL_OW 251
83237: PPUSH
83238: CALL_OW 111
83242: GO 83289
// if dist < 6 then
83244: LD_VAR 0 14
83248: PUSH
83249: LD_INT 6
83251: LESS
83252: IFFALSE 83289
// AI_GetAwayFromXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) , 6 , false ) ;
83254: LD_VAR 0 6
83258: PPUSH
83259: LD_VAR 0 11
83263: PPUSH
83264: CALL_OW 250
83268: PPUSH
83269: LD_VAR 0 11
83273: PPUSH
83274: CALL_OW 251
83278: PPUSH
83279: LD_INT 6
83281: PPUSH
83282: LD_INT 0
83284: PPUSH
83285: CALL 12596 0 5
// end else
83289: GO 83305
// begin ComAttackUnit ( i , temp_unit ) ;
83291: LD_VAR 0 6
83295: PPUSH
83296: LD_VAR 0 11
83300: PPUSH
83301: CALL_OW 115
// end ; end else
83305: GO 83315
// k = false ;
83307: LD_ADDR_VAR 0 5
83311: PUSH
83312: LD_INT 0
83314: ST_TO_ADDR
// end ; end ; if k then
83315: LD_VAR 0 5
83319: IFFALSE 83323
// continue ;
83321: GO 81823
// end ; if GetDistUnitXY ( i , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) > move_dist then
83323: LD_VAR 0 6
83327: PPUSH
83328: LD_VAR 0 4
83332: PUSH
83333: LD_EXP 79
83337: PUSH
83338: LD_VAR 0 6
83342: ARRAY
83343: ARRAY
83344: PUSH
83345: LD_INT 1
83347: ARRAY
83348: PPUSH
83349: LD_VAR 0 4
83353: PUSH
83354: LD_EXP 79
83358: PUSH
83359: LD_VAR 0 6
83363: ARRAY
83364: ARRAY
83365: PUSH
83366: LD_INT 2
83368: ARRAY
83369: PPUSH
83370: CALL_OW 297
83374: PUSH
83375: LD_VAR 0 21
83379: GREATER
83380: IFFALSE 83521
// if not ( normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in init_attack_hexes and false in all_in_position ) then
83382: LD_VAR 0 4
83386: PUSH
83387: LD_EXP 79
83391: PUSH
83392: LD_VAR 0 6
83396: ARRAY
83397: ARRAY
83398: PUSH
83399: LD_VAR 0 3
83403: IN
83404: PUSH
83405: LD_INT 0
83407: PUSH
83408: LD_VAR 0 22
83412: IN
83413: AND
83414: NOT
83415: IFFALSE 83470
// ComAgressiveMove ( i , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) else
83417: LD_VAR 0 6
83421: PPUSH
83422: LD_VAR 0 4
83426: PUSH
83427: LD_EXP 79
83431: PUSH
83432: LD_VAR 0 6
83436: ARRAY
83437: ARRAY
83438: PUSH
83439: LD_INT 1
83441: ARRAY
83442: PPUSH
83443: LD_VAR 0 4
83447: PUSH
83448: LD_EXP 79
83452: PUSH
83453: LD_VAR 0 6
83457: ARRAY
83458: ARRAY
83459: PUSH
83460: LD_INT 2
83462: ARRAY
83463: PPUSH
83464: CALL_OW 114
83468: GO 83521
// ComMoveXY ( i , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , normal_attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) ;
83470: LD_VAR 0 6
83474: PPUSH
83475: LD_VAR 0 4
83479: PUSH
83480: LD_EXP 79
83484: PUSH
83485: LD_VAR 0 6
83489: ARRAY
83490: ARRAY
83491: PUSH
83492: LD_INT 1
83494: ARRAY
83495: PPUSH
83496: LD_VAR 0 4
83500: PUSH
83501: LD_EXP 79
83505: PUSH
83506: LD_VAR 0 6
83510: ARRAY
83511: ARRAY
83512: PUSH
83513: LD_INT 2
83515: ARRAY
83516: PPUSH
83517: CALL_OW 111
// end ;
83521: GO 81823
83523: POP
83524: POP
// end ;
83525: GO 78848
83527: POP
83528: POP
// until false ;
83529: LD_INT 0
83531: IFFALSE 78767
// end ;
83533: PPOPN 23
83535: END
// export function EmptyWarVehicles ( un , within_dist , ok_vehicle ) ; var k ; begin
83536: LD_INT 0
83538: PPUSH
83539: PPUSH
// result = FilterAllUnits ( [ [ f_type , unit_vehicle ] , [ f_empty ] , [ f_control , control_manual ] , [ f_dist , un , within_dist ] ] ) ;
83540: LD_ADDR_VAR 0 4
83544: PUSH
83545: LD_INT 21
83547: PUSH
83548: LD_INT 2
83550: PUSH
83551: EMPTY
83552: LIST
83553: LIST
83554: PUSH
83555: LD_INT 58
83557: PUSH
83558: EMPTY
83559: LIST
83560: PUSH
83561: LD_INT 33
83563: PUSH
83564: LD_INT 1
83566: PUSH
83567: EMPTY
83568: LIST
83569: LIST
83570: PUSH
83571: LD_INT 91
83573: PUSH
83574: LD_VAR 0 1
83578: PUSH
83579: LD_VAR 0 2
83583: PUSH
83584: EMPTY
83585: LIST
83586: LIST
83587: LIST
83588: PUSH
83589: EMPTY
83590: LIST
83591: LIST
83592: LIST
83593: LIST
83594: PPUSH
83595: CALL_OW 69
83599: ST_TO_ADDR
// if ok_vehicle then
83600: LD_VAR 0 3
83604: IFFALSE 83627
// result = UnitFilter ( result , [ f_ok ] ) ;
83606: LD_ADDR_VAR 0 4
83610: PUSH
83611: LD_VAR 0 4
83615: PPUSH
83616: LD_INT 50
83618: PUSH
83619: EMPTY
83620: LIST
83621: PPUSH
83622: CALL_OW 72
83626: ST_TO_ADDR
// k = 1 ;
83627: LD_ADDR_VAR 0 5
83631: PUSH
83632: LD_INT 1
83634: ST_TO_ADDR
// while k <= result do
83635: LD_VAR 0 5
83639: PUSH
83640: LD_VAR 0 4
83644: LESSEQUAL
83645: IFFALSE 83737
// begin if GetWeapon ( result [ k ] ) in [ ar_cargo_bay , ar_control_tower , ar_radar , ru_cargo_bay , ru_crane , ru_bulldozer , us_cargo_bay , us_crane ] then
83647: LD_VAR 0 4
83651: PUSH
83652: LD_VAR 0 5
83656: ARRAY
83657: PPUSH
83658: CALL_OW 264
83662: PUSH
83663: LD_INT 32
83665: PUSH
83666: LD_INT 31
83668: PUSH
83669: LD_INT 30
83671: PUSH
83672: LD_INT 51
83674: PUSH
83675: LD_INT 52
83677: PUSH
83678: LD_INT 53
83680: PUSH
83681: LD_INT 12
83683: PUSH
83684: LD_INT 13
83686: PUSH
83687: EMPTY
83688: LIST
83689: LIST
83690: LIST
83691: LIST
83692: LIST
83693: LIST
83694: LIST
83695: LIST
83696: IN
83697: IFFALSE 83721
// begin result = Delete ( result , k ) ;
83699: LD_ADDR_VAR 0 4
83703: PUSH
83704: LD_VAR 0 4
83708: PPUSH
83709: LD_VAR 0 5
83713: PPUSH
83714: CALL_OW 3
83718: ST_TO_ADDR
// continue ;
83719: GO 83635
// end ; k = k + 1 ;
83721: LD_ADDR_VAR 0 5
83725: PUSH
83726: LD_VAR 0 5
83730: PUSH
83731: LD_INT 1
83733: PLUS
83734: ST_TO_ADDR
// end ;
83735: GO 83635
// end ;
83737: LD_VAR 0 4
83741: RET
// export function FindNonhumansNearUnit ( side , un , dist , only_dangerous ) ; var weapon_list , temp_list , i , btype , b , val ; begin
83742: LD_INT 0
83744: PPUSH
83745: PPUSH
83746: PPUSH
83747: PPUSH
83748: PPUSH
83749: PPUSH
83750: PPUSH
// temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_not , [ f_type , unit_human ] ] , [ f_dist , un , dist ] , [ f_see , side ] ] ) ;
83751: LD_ADDR_VAR 0 7
83755: PUSH
83756: LD_INT 81
83758: PUSH
83759: LD_VAR 0 1
83763: PUSH
83764: EMPTY
83765: LIST
83766: LIST
83767: PUSH
83768: LD_INT 3
83770: PUSH
83771: LD_INT 21
83773: PUSH
83774: LD_INT 1
83776: PUSH
83777: EMPTY
83778: LIST
83779: LIST
83780: PUSH
83781: EMPTY
83782: LIST
83783: LIST
83784: PUSH
83785: LD_INT 91
83787: PUSH
83788: LD_VAR 0 2
83792: PUSH
83793: LD_VAR 0 3
83797: PUSH
83798: EMPTY
83799: LIST
83800: LIST
83801: LIST
83802: PUSH
83803: LD_INT 101
83805: PUSH
83806: LD_VAR 0 1
83810: PUSH
83811: EMPTY
83812: LIST
83813: LIST
83814: PUSH
83815: EMPTY
83816: LIST
83817: LIST
83818: LIST
83819: LIST
83820: PPUSH
83821: CALL_OW 69
83825: ST_TO_ADDR
// if only_dangerous then
83826: LD_VAR 0 4
83830: IFFALSE 83849
// begin result = DangerousUnits ( temp_list ) ;
83832: LD_ADDR_VAR 0 5
83836: PUSH
83837: LD_VAR 0 7
83841: PPUSH
83842: CALL 83864 0 1
83846: ST_TO_ADDR
// end else
83847: GO 83859
// result = temp_list end ;
83849: LD_ADDR_VAR 0 5
83853: PUSH
83854: LD_VAR 0 7
83858: ST_TO_ADDR
83859: LD_VAR 0 5
83863: RET
// export function DangerousUnits ( list ) ; var weapon_list , i , btype , b , val ; begin
83864: LD_INT 0
83866: PPUSH
83867: PPUSH
83868: PPUSH
83869: PPUSH
83870: PPUSH
83871: 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 ] ;
83872: LD_ADDR_VAR 0 3
83876: PUSH
83877: LD_INT 2
83879: PUSH
83880: LD_INT 3
83882: PUSH
83883: LD_INT 4
83885: PUSH
83886: LD_INT 5
83888: PUSH
83889: LD_INT 6
83891: PUSH
83892: LD_INT 7
83894: PUSH
83895: LD_INT 8
83897: PUSH
83898: LD_INT 9
83900: PUSH
83901: LD_INT 10
83903: PUSH
83904: LD_INT 22
83906: PUSH
83907: LD_INT 23
83909: PUSH
83910: LD_INT 24
83912: PUSH
83913: LD_INT 25
83915: PUSH
83916: LD_INT 26
83918: PUSH
83919: LD_INT 27
83921: PUSH
83922: LD_INT 28
83924: PUSH
83925: LD_INT 29
83927: PUSH
83928: LD_INT 42
83930: PUSH
83931: LD_INT 43
83933: PUSH
83934: LD_INT 44
83936: PUSH
83937: LD_INT 45
83939: PUSH
83940: LD_INT 46
83942: PUSH
83943: LD_INT 47
83945: PUSH
83946: LD_INT 48
83948: PUSH
83949: LD_INT 49
83951: PUSH
83952: EMPTY
83953: LIST
83954: LIST
83955: LIST
83956: LIST
83957: LIST
83958: LIST
83959: LIST
83960: LIST
83961: LIST
83962: LIST
83963: LIST
83964: LIST
83965: LIST
83966: LIST
83967: LIST
83968: LIST
83969: LIST
83970: LIST
83971: LIST
83972: LIST
83973: LIST
83974: LIST
83975: LIST
83976: LIST
83977: LIST
83978: ST_TO_ADDR
// result = [ ] ;
83979: LD_ADDR_VAR 0 2
83983: PUSH
83984: EMPTY
83985: ST_TO_ADDR
// for i in list do
83986: LD_ADDR_VAR 0 4
83990: PUSH
83991: LD_VAR 0 1
83995: PUSH
83996: FOR_IN
83997: IFFALSE 84445
// case GetType ( i ) of unit_human :
83999: LD_VAR 0 4
84003: PPUSH
84004: CALL_OW 247
84008: PUSH
84009: LD_INT 1
84011: DOUBLE
84012: EQUAL
84013: IFTRUE 84017
84015: GO 84050
84017: POP
// begin if not IsOk ( i ) then
84018: LD_VAR 0 4
84022: PPUSH
84023: CALL_OW 302
84027: NOT
84028: IFFALSE 84032
// continue ;
84030: GO 83996
// result = result ^ i ;
84032: LD_ADDR_VAR 0 2
84036: PUSH
84037: LD_VAR 0 2
84041: PUSH
84042: LD_VAR 0 4
84046: ADD
84047: ST_TO_ADDR
// end ; unit_vehicle :
84048: GO 84443
84050: LD_INT 2
84052: DOUBLE
84053: EQUAL
84054: IFTRUE 84058
84056: GO 84198
84058: POP
// begin if not IsOk ( i ) then
84059: LD_VAR 0 4
84063: PPUSH
84064: CALL_OW 302
84068: NOT
84069: IFFALSE 84073
// continue ;
84071: GO 83996
// case GetControl ( i ) of control_manual , control_rider :
84073: LD_VAR 0 4
84077: PPUSH
84078: CALL_OW 263
84082: PUSH
84083: LD_INT 1
84085: DOUBLE
84086: EQUAL
84087: IFTRUE 84097
84089: LD_INT 4
84091: DOUBLE
84092: EQUAL
84093: IFTRUE 84097
84095: GO 84117
84097: POP
// begin if UnitsInside ( i ) = 0 then
84098: LD_VAR 0 4
84102: PPUSH
84103: CALL_OW 313
84107: PUSH
84108: LD_INT 0
84110: EQUAL
84111: IFFALSE 84115
// continue ;
84113: GO 83996
// end ; control_remote :
84115: GO 84163
84117: LD_INT 2
84119: DOUBLE
84120: EQUAL
84121: IFTRUE 84125
84123: GO 84145
84125: POP
// begin if IsControledBy ( i ) = 0 then
84126: LD_VAR 0 4
84130: PPUSH
84131: CALL_OW 312
84135: PUSH
84136: LD_INT 0
84138: EQUAL
84139: IFFALSE 84143
// continue ;
84141: GO 83996
// end ; control_computer , control_apeman :
84143: GO 84163
84145: LD_INT 3
84147: DOUBLE
84148: EQUAL
84149: IFTRUE 84159
84151: LD_INT 5
84153: DOUBLE
84154: EQUAL
84155: IFTRUE 84159
84157: GO 84162
84159: POP
// begin end ; end ;
84160: GO 84163
84162: POP
// if GetWeapon ( i ) in weapon_list then
84163: LD_VAR 0 4
84167: PPUSH
84168: CALL_OW 264
84172: PUSH
84173: LD_VAR 0 3
84177: IN
84178: IFFALSE 84196
// result = result ^ i ;
84180: LD_ADDR_VAR 0 2
84184: PUSH
84185: LD_VAR 0 2
84189: PUSH
84190: LD_VAR 0 4
84194: ADD
84195: ST_TO_ADDR
// end ; unit_building :
84196: GO 84443
84198: LD_INT 3
84200: DOUBLE
84201: EQUAL
84202: IFTRUE 84206
84204: GO 84442
84206: POP
// begin if not IsOk ( i ) then
84207: LD_VAR 0 4
84211: PPUSH
84212: CALL_OW 302
84216: NOT
84217: IFFALSE 84221
// continue ;
84219: GO 83996
// btype = GetBType ( i ) ;
84221: LD_ADDR_VAR 0 5
84225: PUSH
84226: LD_VAR 0 4
84230: PPUSH
84231: CALL_OW 266
84235: ST_TO_ADDR
// case btype of b_turret :
84236: LD_VAR 0 5
84240: PUSH
84241: LD_INT 33
84243: DOUBLE
84244: EQUAL
84245: IFTRUE 84249
84247: GO 84252
84249: POP
// begin end ; b_bunker , b_breastwork , b_armoury , b_barracks , b_fort :
84250: GO 84307
84252: LD_INT 32
84254: DOUBLE
84255: EQUAL
84256: IFTRUE 84284
84258: LD_INT 31
84260: DOUBLE
84261: EQUAL
84262: IFTRUE 84284
84264: LD_INT 4
84266: DOUBLE
84267: EQUAL
84268: IFTRUE 84284
84270: LD_INT 5
84272: DOUBLE
84273: EQUAL
84274: IFTRUE 84284
84276: LD_INT 35
84278: DOUBLE
84279: EQUAL
84280: IFTRUE 84284
84282: GO 84304
84284: POP
// begin if UnitsInside ( i ) = 0 then
84285: LD_VAR 0 4
84289: PPUSH
84290: CALL_OW 313
84294: PUSH
84295: LD_INT 0
84297: EQUAL
84298: IFFALSE 84302
// continue ;
84300: GO 83996
// end ; else
84302: GO 84307
84304: POP
// continue ; end ;
84305: GO 83996
// if btype in [ b_bunker , b_turret ] then
84307: LD_VAR 0 5
84311: PUSH
84312: LD_INT 32
84314: PUSH
84315: LD_INT 33
84317: PUSH
84318: EMPTY
84319: LIST
84320: LIST
84321: IN
84322: IFFALSE 84424
// if not GetBWeapon ( i ) in weapon_list then
84324: LD_VAR 0 4
84328: PPUSH
84329: CALL_OW 269
84333: PUSH
84334: LD_VAR 0 3
84338: IN
84339: NOT
84340: IFFALSE 84346
// continue else
84342: GO 83996
84344: GO 84424
// begin b = GetBase ( i ) ;
84346: LD_ADDR_VAR 0 6
84350: PUSH
84351: LD_VAR 0 4
84355: PPUSH
84356: CALL_OW 274
84360: ST_TO_ADDR
// val = false ;
84361: LD_ADDR_VAR 0 7
84365: PUSH
84366: LD_INT 0
84368: ST_TO_ADDR
// if b = 0 then
84369: LD_VAR 0 6
84373: PUSH
84374: LD_INT 0
84376: EQUAL
84377: IFFALSE 84389
// val = true else
84379: LD_ADDR_VAR 0 7
84383: PUSH
84384: LD_INT 1
84386: ST_TO_ADDR
84387: GO 84416
// if GetEnergy ( b ) [ 4 ] = 0 then
84389: LD_VAR 0 6
84393: PPUSH
84394: CALL_OW 278
84398: PUSH
84399: LD_INT 4
84401: ARRAY
84402: PUSH
84403: LD_INT 0
84405: EQUAL
84406: IFFALSE 84416
// val = true ;
84408: LD_ADDR_VAR 0 7
84412: PUSH
84413: LD_INT 1
84415: ST_TO_ADDR
// if val then
84416: LD_VAR 0 7
84420: IFFALSE 84424
// continue ;
84422: GO 83996
// end ; result = result ^ i ;
84424: LD_ADDR_VAR 0 2
84428: PUSH
84429: LD_VAR 0 2
84433: PUSH
84434: LD_VAR 0 4
84438: ADD
84439: ST_TO_ADDR
// end ; end ;
84440: GO 84443
84442: POP
84443: GO 83996
84445: POP
84446: POP
// end ;
84447: LD_VAR 0 2
84451: RET
// every 0 0$1 + 0 0$0.8 do var temp_list , un ; var last_attack_num , impostor , waypoints , hex_index ; var waypoints_east , waypoints_west , waypoints_mountains , dialogue_spoken ;
84452: GO 84454
84454: DISABLE
84455: LD_INT 0
84457: PPUSH
84458: PPUSH
84459: PPUSH
84460: PPUSH
84461: PPUSH
84462: PPUSH
84463: PPUSH
84464: PPUSH
84465: PPUSH
84466: PPUSH
// begin if difficulty = 1 then
84467: LD_OWVAR 67
84471: PUSH
84472: LD_INT 1
84474: EQUAL
84475: IFFALSE 84479
// exit ;
84477: GO 85800
// last_attack_num = [ - 1 , 3 , 2 ] [ difficulty ] ;
84479: LD_ADDR_VAR 0 3
84483: PUSH
84484: LD_INT 1
84486: NEG
84487: PUSH
84488: LD_INT 3
84490: PUSH
84491: LD_INT 2
84493: PUSH
84494: EMPTY
84495: LIST
84496: LIST
84497: LIST
84498: PUSH
84499: LD_OWVAR 67
84503: ARRAY
84504: ST_TO_ADDR
// waypoints_east = [ [ 104 , 166 ] , [ 106 , 156 ] , [ 108 , 147 ] , [ 104 , 137 ] , [ 99 , 127 ] , [ 92 , 119 ] , [ 90 , 110 ] , [ 83 , 98 ] , [ 74 , 82 ] , [ 66 , 69 ] , [ 49 , 31 ] ] ;
84505: LD_ADDR_VAR 0 7
84509: PUSH
84510: LD_INT 104
84512: PUSH
84513: LD_INT 166
84515: PUSH
84516: EMPTY
84517: LIST
84518: LIST
84519: PUSH
84520: LD_INT 106
84522: PUSH
84523: LD_INT 156
84525: PUSH
84526: EMPTY
84527: LIST
84528: LIST
84529: PUSH
84530: LD_INT 108
84532: PUSH
84533: LD_INT 147
84535: PUSH
84536: EMPTY
84537: LIST
84538: LIST
84539: PUSH
84540: LD_INT 104
84542: PUSH
84543: LD_INT 137
84545: PUSH
84546: EMPTY
84547: LIST
84548: LIST
84549: PUSH
84550: LD_INT 99
84552: PUSH
84553: LD_INT 127
84555: PUSH
84556: EMPTY
84557: LIST
84558: LIST
84559: PUSH
84560: LD_INT 92
84562: PUSH
84563: LD_INT 119
84565: PUSH
84566: EMPTY
84567: LIST
84568: LIST
84569: PUSH
84570: LD_INT 90
84572: PUSH
84573: LD_INT 110
84575: PUSH
84576: EMPTY
84577: LIST
84578: LIST
84579: PUSH
84580: LD_INT 83
84582: PUSH
84583: LD_INT 98
84585: PUSH
84586: EMPTY
84587: LIST
84588: LIST
84589: PUSH
84590: LD_INT 74
84592: PUSH
84593: LD_INT 82
84595: PUSH
84596: EMPTY
84597: LIST
84598: LIST
84599: PUSH
84600: LD_INT 66
84602: PUSH
84603: LD_INT 69
84605: PUSH
84606: EMPTY
84607: LIST
84608: LIST
84609: PUSH
84610: LD_INT 49
84612: PUSH
84613: LD_INT 31
84615: PUSH
84616: EMPTY
84617: LIST
84618: LIST
84619: PUSH
84620: EMPTY
84621: LIST
84622: LIST
84623: LIST
84624: LIST
84625: LIST
84626: LIST
84627: LIST
84628: LIST
84629: LIST
84630: LIST
84631: LIST
84632: ST_TO_ADDR
// waypoints_west = [ [ 160 , 87 ] , [ 151 , 89 ] , [ 141 , 85 ] , [ 132 , 84 ] , [ 122 , 83 ] , [ 112 , 78 ] , [ 100 , 68 ] , [ 87 , 61 ] , [ 75 , 53 ] , [ 49 , 31 ] ] ;
84633: LD_ADDR_VAR 0 8
84637: PUSH
84638: LD_INT 160
84640: PUSH
84641: LD_INT 87
84643: PUSH
84644: EMPTY
84645: LIST
84646: LIST
84647: PUSH
84648: LD_INT 151
84650: PUSH
84651: LD_INT 89
84653: PUSH
84654: EMPTY
84655: LIST
84656: LIST
84657: PUSH
84658: LD_INT 141
84660: PUSH
84661: LD_INT 85
84663: PUSH
84664: EMPTY
84665: LIST
84666: LIST
84667: PUSH
84668: LD_INT 132
84670: PUSH
84671: LD_INT 84
84673: PUSH
84674: EMPTY
84675: LIST
84676: LIST
84677: PUSH
84678: LD_INT 122
84680: PUSH
84681: LD_INT 83
84683: PUSH
84684: EMPTY
84685: LIST
84686: LIST
84687: PUSH
84688: LD_INT 112
84690: PUSH
84691: LD_INT 78
84693: PUSH
84694: EMPTY
84695: LIST
84696: LIST
84697: PUSH
84698: LD_INT 100
84700: PUSH
84701: LD_INT 68
84703: PUSH
84704: EMPTY
84705: LIST
84706: LIST
84707: PUSH
84708: LD_INT 87
84710: PUSH
84711: LD_INT 61
84713: PUSH
84714: EMPTY
84715: LIST
84716: LIST
84717: PUSH
84718: LD_INT 75
84720: PUSH
84721: LD_INT 53
84723: PUSH
84724: EMPTY
84725: LIST
84726: LIST
84727: PUSH
84728: LD_INT 49
84730: PUSH
84731: LD_INT 31
84733: PUSH
84734: EMPTY
84735: LIST
84736: LIST
84737: PUSH
84738: EMPTY
84739: LIST
84740: LIST
84741: LIST
84742: LIST
84743: LIST
84744: LIST
84745: LIST
84746: LIST
84747: LIST
84748: LIST
84749: ST_TO_ADDR
// waypoints_mountains = [ [ 149 , 58 ] , [ 137 , 55 ] , [ 125 , 51 ] , [ 114 , 45 ] , [ 104 , 34 ] , [ 100 , 37 ] , [ 95 , 43 ] , [ 84 , 35 ] , [ 74 , 35 ] , [ 49 , 31 ] ] ;
84750: LD_ADDR_VAR 0 9
84754: PUSH
84755: LD_INT 149
84757: PUSH
84758: LD_INT 58
84760: PUSH
84761: EMPTY
84762: LIST
84763: LIST
84764: PUSH
84765: LD_INT 137
84767: PUSH
84768: LD_INT 55
84770: PUSH
84771: EMPTY
84772: LIST
84773: LIST
84774: PUSH
84775: LD_INT 125
84777: PUSH
84778: LD_INT 51
84780: PUSH
84781: EMPTY
84782: LIST
84783: LIST
84784: PUSH
84785: LD_INT 114
84787: PUSH
84788: LD_INT 45
84790: PUSH
84791: EMPTY
84792: LIST
84793: LIST
84794: PUSH
84795: LD_INT 104
84797: PUSH
84798: LD_INT 34
84800: PUSH
84801: EMPTY
84802: LIST
84803: LIST
84804: PUSH
84805: LD_INT 100
84807: PUSH
84808: LD_INT 37
84810: PUSH
84811: EMPTY
84812: LIST
84813: LIST
84814: PUSH
84815: LD_INT 95
84817: PUSH
84818: LD_INT 43
84820: PUSH
84821: EMPTY
84822: LIST
84823: LIST
84824: PUSH
84825: LD_INT 84
84827: PUSH
84828: LD_INT 35
84830: PUSH
84831: EMPTY
84832: LIST
84833: LIST
84834: PUSH
84835: LD_INT 74
84837: PUSH
84838: LD_INT 35
84840: PUSH
84841: EMPTY
84842: LIST
84843: LIST
84844: PUSH
84845: LD_INT 49
84847: PUSH
84848: LD_INT 31
84850: PUSH
84851: EMPTY
84852: LIST
84853: LIST
84854: PUSH
84855: EMPTY
84856: LIST
84857: LIST
84858: LIST
84859: LIST
84860: LIST
84861: LIST
84862: LIST
84863: LIST
84864: LIST
84865: LIST
84866: ST_TO_ADDR
// dialogue_spoken = false ;
84867: LD_ADDR_VAR 0 10
84871: PUSH
84872: LD_INT 0
84874: ST_TO_ADDR
// repeat if last_attack_num >= 4 then
84875: LD_VAR 0 3
84879: PUSH
84880: LD_INT 4
84882: GREATEREQUAL
84883: IFFALSE 84887
// exit ;
84885: GO 85800
// repeat wait ( 0 0$1 ) ;
84887: LD_INT 35
84889: PPUSH
84890: CALL_OW 67
// until current_attack_num > last_attack_num ;
84894: LD_EXP 115
84898: PUSH
84899: LD_VAR 0 3
84903: GREATER
84904: IFFALSE 84887
// while not PlayerBaseUnderAttackByPseudoBase ( 3 ) do
84906: LD_INT 3
84908: PPUSH
84909: CALL 78606 0 1
84913: NOT
84914: IFFALSE 84925
// wait ( 0 0$1 ) ;
84916: LD_INT 35
84918: PPUSH
84919: CALL_OW 67
84923: GO 84906
// wait ( 0 0$2 ) ;
84925: LD_INT 70
84927: PPUSH
84928: CALL_OW 67
// InitUc ;
84932: CALL_OW 18
// InitHc ;
84936: CALL_OW 19
// uc_nation = nation_american ;
84940: LD_ADDR_OWVAR 21
84944: PUSH
84945: LD_INT 1
84947: ST_TO_ADDR
// uc_side = legion_alt ;
84948: LD_ADDR_OWVAR 20
84952: PUSH
84953: LD_EXP 5
84957: ST_TO_ADDR
// PrepareHuman ( sex_male , [ class_mechanic , class_mechanic , class_soldier ] [ difficulty ] , 7 ) ;
84958: LD_INT 1
84960: PPUSH
84961: LD_INT 3
84963: PUSH
84964: LD_INT 3
84966: PUSH
84967: LD_INT 1
84969: PUSH
84970: EMPTY
84971: LIST
84972: LIST
84973: LIST
84974: PUSH
84975: LD_OWVAR 67
84979: ARRAY
84980: PPUSH
84981: LD_INT 7
84983: PPUSH
84984: CALL_OW 380
// impostor = CreateHuman ;
84988: LD_ADDR_VAR 0 4
84992: PUSH
84993: CALL_OW 44
84997: ST_TO_ADDR
// temp_list = [ 1 , 2 ] ;
84998: LD_ADDR_VAR 0 1
85002: PUSH
85003: LD_INT 1
85005: PUSH
85006: LD_INT 2
85008: PUSH
85009: EMPTY
85010: LIST
85011: LIST
85012: ST_TO_ADDR
// if difficulty = 3 and current_attack_num = 4 then
85013: LD_OWVAR 67
85017: PUSH
85018: LD_INT 3
85020: EQUAL
85021: PUSH
85022: LD_EXP 115
85026: PUSH
85027: LD_INT 4
85029: EQUAL
85030: AND
85031: IFFALSE 85058
// temp_list = temp_list ^ [ 3 , 3 , 3 ] ;
85033: LD_ADDR_VAR 0 1
85037: PUSH
85038: LD_VAR 0 1
85042: PUSH
85043: LD_INT 3
85045: PUSH
85046: LD_INT 3
85048: PUSH
85049: LD_INT 3
85051: PUSH
85052: EMPTY
85053: LIST
85054: LIST
85055: LIST
85056: ADD
85057: ST_TO_ADDR
// case temp_list [ Rand ( 1 , temp_list + 0 ) ] of 1 :
85058: LD_VAR 0 1
85062: PUSH
85063: LD_INT 1
85065: PPUSH
85066: LD_VAR 0 1
85070: PUSH
85071: LD_INT 0
85073: PLUS
85074: PPUSH
85075: CALL_OW 12
85079: ARRAY
85080: PUSH
85081: LD_INT 1
85083: DOUBLE
85084: EQUAL
85085: IFTRUE 85089
85087: GO 85117
85089: POP
// begin temp_list = [ 106 , 177 ] ;
85090: LD_ADDR_VAR 0 1
85094: PUSH
85095: LD_INT 106
85097: PUSH
85098: LD_INT 177
85100: PUSH
85101: EMPTY
85102: LIST
85103: LIST
85104: ST_TO_ADDR
// waypoints = waypoints_east ;
85105: LD_ADDR_VAR 0 5
85109: PUSH
85110: LD_VAR 0 7
85114: ST_TO_ADDR
// end ; 2 :
85115: GO 85190
85117: LD_INT 2
85119: DOUBLE
85120: EQUAL
85121: IFTRUE 85125
85123: GO 85153
85125: POP
// begin temp_list = [ 171 , 85 ] ;
85126: LD_ADDR_VAR 0 1
85130: PUSH
85131: LD_INT 171
85133: PUSH
85134: LD_INT 85
85136: PUSH
85137: EMPTY
85138: LIST
85139: LIST
85140: ST_TO_ADDR
// waypoints = waypoints_west ;
85141: LD_ADDR_VAR 0 5
85145: PUSH
85146: LD_VAR 0 8
85150: ST_TO_ADDR
// end ; 3 :
85151: GO 85190
85153: LD_INT 3
85155: DOUBLE
85156: EQUAL
85157: IFTRUE 85161
85159: GO 85189
85161: POP
// begin temp_list = [ 157 , 58 ] ;
85162: LD_ADDR_VAR 0 1
85166: PUSH
85167: LD_INT 157
85169: PUSH
85170: LD_INT 58
85172: PUSH
85173: EMPTY
85174: LIST
85175: LIST
85176: ST_TO_ADDR
// waypoints = waypoints_mountains ;
85177: LD_ADDR_VAR 0 5
85181: PUSH
85182: LD_VAR 0 9
85186: ST_TO_ADDR
// end ; end ;
85187: GO 85190
85189: POP
// PlaceUnitXYR ( impostor , temp_list [ 1 ] , temp_list [ 2 ] , 1 , false ) ;
85190: LD_VAR 0 4
85194: PPUSH
85195: LD_VAR 0 1
85199: PUSH
85200: LD_INT 1
85202: ARRAY
85203: PPUSH
85204: LD_VAR 0 1
85208: PUSH
85209: LD_INT 2
85211: ARRAY
85212: PPUSH
85213: LD_INT 1
85215: PPUSH
85216: LD_INT 0
85218: PPUSH
85219: CALL_OW 50
// hex_index = 1 ;
85223: LD_ADDR_VAR 0 6
85227: PUSH
85228: LD_INT 1
85230: ST_TO_ADDR
// ComMoveXY ( impostor , waypoints [ 1 ] [ 1 ] , waypoints [ 1 ] [ 2 ] ) ;
85231: LD_VAR 0 4
85235: PPUSH
85236: LD_VAR 0 5
85240: PUSH
85241: LD_INT 1
85243: ARRAY
85244: PUSH
85245: LD_INT 1
85247: ARRAY
85248: PPUSH
85249: LD_VAR 0 5
85253: PUSH
85254: LD_INT 1
85256: ARRAY
85257: PUSH
85258: LD_INT 2
85260: ARRAY
85261: PPUSH
85262: CALL_OW 111
// repeat wait ( 0 0$1 ) ;
85266: LD_INT 35
85268: PPUSH
85269: CALL_OW 67
// if IsDead ( impostor ) then
85273: LD_VAR 0 4
85277: PPUSH
85278: CALL_OW 301
85282: IFFALSE 85286
// break ;
85284: GO 85786
// if not dialogue_spoken then
85286: LD_VAR 0 10
85290: NOT
85291: IFFALSE 85580
// begin if See ( you , impostor ) then
85293: LD_EXP 2
85297: PPUSH
85298: LD_VAR 0 4
85302: PPUSH
85303: CALL_OW 292
85307: IFFALSE 85580
// begin dialogue_spoken = true ;
85309: LD_ADDR_VAR 0 10
85313: PUSH
85314: LD_INT 1
85316: ST_TO_ADDR
// temp_list = UnitFilter ( [ Oswald , Ralph , Kowalski , Dwayne ] diff 0 , [ f_lives , 1 ] ) ;
85317: LD_ADDR_VAR 0 1
85321: PUSH
85322: LD_EXP 12
85326: PUSH
85327: LD_EXP 13
85331: PUSH
85332: LD_EXP 14
85336: PUSH
85337: LD_EXP 17
85341: PUSH
85342: EMPTY
85343: LIST
85344: LIST
85345: LIST
85346: LIST
85347: PUSH
85348: LD_INT 0
85350: DIFF
85351: PPUSH
85352: LD_INT 24
85354: PUSH
85355: LD_INT 1
85357: PUSH
85358: EMPTY
85359: LIST
85360: LIST
85361: PPUSH
85362: CALL_OW 72
85366: ST_TO_ADDR
// if temp_list > 0 then
85367: LD_VAR 0 1
85371: PUSH
85372: LD_INT 0
85374: GREATER
85375: IFFALSE 85407
// un = temp_list [ Rand ( 1 , temp_list + 0 ) ] else
85377: LD_ADDR_VAR 0 2
85381: PUSH
85382: LD_VAR 0 1
85386: PUSH
85387: LD_INT 1
85389: PPUSH
85390: LD_VAR 0 1
85394: PUSH
85395: LD_INT 0
85397: PLUS
85398: PPUSH
85399: CALL_OW 12
85403: ARRAY
85404: ST_TO_ADDR
85405: GO 85415
// un = 0 ;
85407: LD_ADDR_VAR 0 2
85411: PUSH
85412: LD_INT 0
85414: ST_TO_ADDR
// DialogueOn ;
85415: CALL_OW 6
// CenterOnUnits ( impostor ) ;
85419: LD_VAR 0 4
85423: PPUSH
85424: CALL_OW 85
// if un > 0 then
85428: LD_VAR 0 2
85432: PUSH
85433: LD_INT 0
85435: GREATER
85436: IFFALSE 85544
// case un of Oswald :
85438: LD_VAR 0 2
85442: PUSH
85443: LD_EXP 12
85447: DOUBLE
85448: EQUAL
85449: IFTRUE 85453
85451: GO 85468
85453: POP
// ForceSay ( un , D19-Os-1 ) ; Ralph :
85454: LD_VAR 0 2
85458: PPUSH
85459: LD_STRING D19-Os-1
85461: PPUSH
85462: CALL_OW 91
85466: GO 85544
85468: LD_EXP 13
85472: DOUBLE
85473: EQUAL
85474: IFTRUE 85478
85476: GO 85493
85478: POP
// ForceSay ( un , D19-Ra-1 ) ; Kowalski :
85479: LD_VAR 0 2
85483: PPUSH
85484: LD_STRING D19-Ra-1
85486: PPUSH
85487: CALL_OW 91
85491: GO 85544
85493: LD_EXP 14
85497: DOUBLE
85498: EQUAL
85499: IFTRUE 85503
85501: GO 85518
85503: POP
// ForceSay ( un , D19-Ko-1 ) ; Dwayne :
85504: LD_VAR 0 2
85508: PPUSH
85509: LD_STRING D19-Ko-1
85511: PPUSH
85512: CALL_OW 91
85516: GO 85544
85518: LD_EXP 17
85522: DOUBLE
85523: EQUAL
85524: IFTRUE 85528
85526: GO 85543
85528: POP
// ForceSay ( un , D19-Dw-1 ) ; end ;
85529: LD_VAR 0 2
85533: PPUSH
85534: LD_STRING D19-Dw-1
85536: PPUSH
85537: CALL_OW 91
85541: GO 85544
85543: POP
// ForceSay ( Heike , D19-H-1 ) ;
85544: LD_EXP 10
85548: PPUSH
85549: LD_STRING D19-H-1
85551: PPUSH
85552: CALL_OW 91
// DialogueOff ;
85556: CALL_OW 7
// SetAttitude ( you , legion_alt , att_enemy , true ) ;
85560: LD_EXP 2
85564: PPUSH
85565: LD_EXP 5
85569: PPUSH
85570: LD_INT 2
85572: PPUSH
85573: LD_INT 1
85575: PPUSH
85576: CALL_OW 80
// end ; end ; if GetDistUnitXY ( impostor , waypoints [ hex_index ] [ 1 ] , waypoints [ hex_index ] [ 2 ] ) <= 2 then
85580: LD_VAR 0 4
85584: PPUSH
85585: LD_VAR 0 5
85589: PUSH
85590: LD_VAR 0 6
85594: ARRAY
85595: PUSH
85596: LD_INT 1
85598: ARRAY
85599: PPUSH
85600: LD_VAR 0 5
85604: PUSH
85605: LD_VAR 0 6
85609: ARRAY
85610: PUSH
85611: LD_INT 2
85613: ARRAY
85614: PPUSH
85615: CALL_OW 297
85619: PUSH
85620: LD_INT 2
85622: LESSEQUAL
85623: IFFALSE 85743
// if hex_index >= waypoints then
85625: LD_VAR 0 6
85629: PUSH
85630: LD_VAR 0 5
85634: GREATEREQUAL
85635: IFFALSE 85729
// begin DialogueOn ;
85637: CALL_OW 6
// ForceSay ( Makise , D9-Ch-1 ) ;
85641: LD_EXP 21
85645: PPUSH
85646: LD_STRING D9-Ch-1
85648: PPUSH
85649: CALL_OW 91
// if dialogue_spoken then
85653: LD_VAR 0 10
85657: IFFALSE 85673
// begin ForceSay ( Heike , D9-H-1a ) ;
85659: LD_EXP 10
85663: PPUSH
85664: LD_STRING D9-H-1a
85666: PPUSH
85667: CALL_OW 91
// end else
85671: GO 85709
// begin ForceSay ( Heike , D9-H-1b ) ;
85673: LD_EXP 10
85677: PPUSH
85678: LD_STRING D9-H-1b
85680: PPUSH
85681: CALL_OW 91
// ForceSay ( Makise , D9-Ch-2b ) ;
85685: LD_EXP 21
85689: PPUSH
85690: LD_STRING D9-Ch-2b
85692: PPUSH
85693: CALL_OW 91
// ForceSay ( Heike , D9-H-2b ) ;
85697: LD_EXP 10
85701: PPUSH
85702: LD_STRING D9-H-2b
85704: PPUSH
85705: CALL_OW 91
// end ; dwait ( 0 0$0.2 ) ;
85709: LD_INT 7
85711: PPUSH
85712: CALL_OW 68
// YouLost ( BombData ) ;
85716: LD_STRING BombData
85718: PPUSH
85719: CALL_OW 104
// DialogueOff ;
85723: CALL_OW 7
// end else
85727: GO 85743
// hex_index = hex_index + 1 ;
85729: LD_ADDR_VAR 0 6
85733: PUSH
85734: LD_VAR 0 6
85738: PUSH
85739: LD_INT 1
85741: PLUS
85742: ST_TO_ADDR
// ComMoveXY ( impostor , waypoints [ hex_index ] [ 1 ] , waypoints [ hex_index ] [ 2 ] ) ;
85743: LD_VAR 0 4
85747: PPUSH
85748: LD_VAR 0 5
85752: PUSH
85753: LD_VAR 0 6
85757: ARRAY
85758: PUSH
85759: LD_INT 1
85761: ARRAY
85762: PPUSH
85763: LD_VAR 0 5
85767: PUSH
85768: LD_VAR 0 6
85772: ARRAY
85773: PUSH
85774: LD_INT 2
85776: ARRAY
85777: PPUSH
85778: CALL_OW 111
// until false ;
85782: LD_INT 0
85784: IFFALSE 85266
// last_attack_num = current_attack_num ;
85786: LD_ADDR_VAR 0 3
85790: PUSH
85791: LD_EXP 115
85795: ST_TO_ADDR
// until false ;
85796: LD_INT 0
85798: IFFALSE 84875
// end ; end_of_file
85800: PPOPN 10
85802: END
// export function EndMission ; var val , all_list , un_list , name_list ; begin
85803: LD_INT 0
85805: PPUSH
85806: PPUSH
85807: PPUSH
85808: PPUSH
85809: PPUSH
// if sib_imp_veh_dismantled then
85810: LD_EXP 117
85814: IFFALSE 85826
// val = 1 else
85816: LD_ADDR_VAR 0 2
85820: PUSH
85821: LD_INT 1
85823: ST_TO_ADDR
85824: GO 85835
// val = - 1 ;
85826: LD_ADDR_VAR 0 2
85830: PUSH
85831: LD_INT 1
85833: NEG
85834: ST_TO_ADDR
// AddMedal ( ImpVeh , val ) ;
85835: LD_STRING ImpVeh
85837: PPUSH
85838: LD_VAR 0 2
85842: PPUSH
85843: CALL_OW 101
// if contaminating_scientist_went_to_lab then
85847: LD_EXP 121
85851: IFFALSE 85863
// val = 1 else
85853: LD_ADDR_VAR 0 2
85857: PUSH
85858: LD_INT 1
85860: ST_TO_ADDR
85861: GO 85872
// val = - 1 ;
85863: LD_ADDR_VAR 0 2
85867: PUSH
85868: LD_INT 1
85870: NEG
85871: ST_TO_ADDR
// AddMedal ( ContSci , val ) ;
85872: LD_STRING ContSci
85874: PPUSH
85875: LD_VAR 0 2
85879: PPUSH
85880: CALL_OW 101
// if legion_prisoners + 0 = num_legion_prisoners then
85884: LD_EXP 109
85888: PUSH
85889: LD_INT 0
85891: PLUS
85892: PUSH
85893: LD_EXP 114
85897: EQUAL
85898: IFFALSE 85910
// val = 1 else
85900: LD_ADDR_VAR 0 2
85904: PUSH
85905: LD_INT 1
85907: ST_TO_ADDR
85908: GO 85919
// val = - 1 ;
85910: LD_ADDR_VAR 0 2
85914: PUSH
85915: LD_INT 1
85917: NEG
85918: ST_TO_ADDR
// AddMedal ( LegPri , val ) ;
85919: LD_STRING LegPri
85921: PPUSH
85922: LD_VAR 0 2
85926: PPUSH
85927: CALL_OW 101
// GiveMedals ( Medals ) ;
85931: LD_STRING Medals
85933: PPUSH
85934: CALL_OW 102
// SaveVariable ( sib_imp_veh_dismantled , Implosion_vehicle_dismantled_12_cont2 ) ;
85938: LD_EXP 117
85942: PPUSH
85943: LD_STRING Implosion_vehicle_dismantled_12_cont2
85945: PPUSH
85946: CALL_OW 39
// SaveVariable ( contaminating_scientist_went_to_lab , Contaminating_sci_brought_to_lab_12_cont2 ) ;
85950: LD_EXP 121
85954: PPUSH
85955: LD_STRING Contaminating_sci_brought_to_lab_12_cont2
85957: PPUSH
85958: CALL_OW 39
// all_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) diff GetApes ( you ) ;
85962: LD_ADDR_VAR 0 3
85966: PUSH
85967: LD_INT 22
85969: PUSH
85970: LD_EXP 2
85974: PUSH
85975: EMPTY
85976: LIST
85977: LIST
85978: PUSH
85979: LD_INT 21
85981: PUSH
85982: LD_INT 1
85984: PUSH
85985: EMPTY
85986: LIST
85987: LIST
85988: PUSH
85989: EMPTY
85990: LIST
85991: LIST
85992: PPUSH
85993: CALL_OW 69
85997: PUSH
85998: LD_EXP 2
86002: PPUSH
86003: CALL 51573 0 1
86007: DIFF
86008: ST_TO_ADDR
// if GetLives ( Gonzo ) > 0 then
86009: LD_EXP 22
86013: PPUSH
86014: CALL_OW 256
86018: PUSH
86019: LD_INT 0
86021: GREATER
86022: IFFALSE 86040
// all_list = all_list ^ Gonzo ;
86024: LD_ADDR_VAR 0 3
86028: PUSH
86029: LD_VAR 0 3
86033: PUSH
86034: LD_EXP 22
86038: ADD
86039: ST_TO_ADDR
// all_list = all_list ^ UnitFilter ( traveling_humans , [ f_not , [ f_or , [ f_class , class_apeman ] , [ f_class , class_apeman_soldier ] , [ f_class , class_apeman_engineer ] , [ f_class , class_apeman_kamikaze ] ] ] ) ;
86040: LD_ADDR_VAR 0 3
86044: PUSH
86045: LD_VAR 0 3
86049: PUSH
86050: LD_EXP 122
86054: PPUSH
86055: LD_INT 3
86057: PUSH
86058: LD_INT 2
86060: PUSH
86061: LD_INT 25
86063: PUSH
86064: LD_INT 12
86066: PUSH
86067: EMPTY
86068: LIST
86069: LIST
86070: PUSH
86071: LD_INT 25
86073: PUSH
86074: LD_INT 15
86076: PUSH
86077: EMPTY
86078: LIST
86079: LIST
86080: PUSH
86081: LD_INT 25
86083: PUSH
86084: LD_INT 16
86086: PUSH
86087: EMPTY
86088: LIST
86089: LIST
86090: PUSH
86091: LD_INT 25
86093: PUSH
86094: LD_INT 17
86096: PUSH
86097: EMPTY
86098: LIST
86099: LIST
86100: PUSH
86101: EMPTY
86102: LIST
86103: LIST
86104: LIST
86105: LIST
86106: LIST
86107: PUSH
86108: EMPTY
86109: LIST
86110: LIST
86111: PPUSH
86112: CALL_OW 72
86116: ADD
86117: ST_TO_ADDR
// RewardPeople ( all_list ) ;
86118: LD_VAR 0 3
86122: PPUSH
86123: CALL_OW 43
// SaveCharacters ( Heike , Heike_12_cont2 ) ;
86127: LD_EXP 10
86131: PPUSH
86132: LD_STRING Heike_12_cont2
86134: PPUSH
86135: CALL_OW 38
// un_list = [ Sonya , Oswald , Ralph , Kowalski , Evelyn , Olaf , Dwayne , Aviradze , Swansson , Khattam , Makise , Gonzo ] ;
86139: LD_ADDR_VAR 0 4
86143: PUSH
86144: LD_EXP 11
86148: PUSH
86149: LD_EXP 12
86153: PUSH
86154: LD_EXP 13
86158: PUSH
86159: LD_EXP 14
86163: PUSH
86164: LD_EXP 15
86168: PUSH
86169: LD_EXP 16
86173: PUSH
86174: LD_EXP 17
86178: PUSH
86179: LD_EXP 18
86183: PUSH
86184: LD_EXP 19
86188: PUSH
86189: LD_EXP 20
86193: PUSH
86194: LD_EXP 21
86198: PUSH
86199: LD_EXP 22
86203: PUSH
86204: EMPTY
86205: LIST
86206: LIST
86207: LIST
86208: LIST
86209: LIST
86210: LIST
86211: LIST
86212: LIST
86213: LIST
86214: LIST
86215: LIST
86216: LIST
86217: ST_TO_ADDR
// name_list = [ Sonya , Oswald , Ralph , Kowalski , Evelyn , Olaf , Dwayne , Aviradze , Swansson , Khattam , Makise , Gonzo ] ;
86218: LD_ADDR_VAR 0 5
86222: PUSH
86223: LD_STRING Sonya
86225: PUSH
86226: LD_STRING Oswald
86228: PUSH
86229: LD_STRING Ralph
86231: PUSH
86232: LD_STRING Kowalski
86234: PUSH
86235: LD_STRING Evelyn
86237: PUSH
86238: LD_STRING Olaf
86240: PUSH
86241: LD_STRING Dwayne
86243: PUSH
86244: LD_STRING Aviradze
86246: PUSH
86247: LD_STRING Swansson
86249: PUSH
86250: LD_STRING Khattam
86252: PUSH
86253: LD_STRING Makise
86255: PUSH
86256: LD_STRING Gonzo
86258: PUSH
86259: EMPTY
86260: LIST
86261: LIST
86262: LIST
86263: LIST
86264: LIST
86265: LIST
86266: LIST
86267: LIST
86268: LIST
86269: LIST
86270: LIST
86271: LIST
86272: ST_TO_ADDR
// for val = 1 to un_list do
86273: LD_ADDR_VAR 0 2
86277: PUSH
86278: DOUBLE
86279: LD_INT 1
86281: DEC
86282: ST_TO_ADDR
86283: LD_VAR 0 4
86287: PUSH
86288: FOR_TO
86289: IFFALSE 86341
// if un_list [ val ] in all_list then
86291: LD_VAR 0 4
86295: PUSH
86296: LD_VAR 0 2
86300: ARRAY
86301: PUSH
86302: LD_VAR 0 3
86306: IN
86307: IFFALSE 86339
// SaveCharacters ( un_list [ val ] , name_list [ val ] & _12_cont2 ) ;
86309: LD_VAR 0 4
86313: PUSH
86314: LD_VAR 0 2
86318: ARRAY
86319: PPUSH
86320: LD_VAR 0 5
86324: PUSH
86325: LD_VAR 0 2
86329: ARRAY
86330: PUSH
86331: LD_STRING _12_cont2
86333: STR
86334: PPUSH
86335: CALL_OW 38
86339: GO 86288
86341: POP
86342: POP
// SaveCharacters ( all_list diff ( un_list ^ Heike ) , Others_12_cont2 ) ;
86343: LD_VAR 0 3
86347: PUSH
86348: LD_VAR 0 4
86352: PUSH
86353: LD_EXP 10
86357: ADD
86358: DIFF
86359: PPUSH
86360: LD_STRING Others_12_cont2
86362: PPUSH
86363: CALL_OW 38
// SaveCharacters ( legion_prisoners , Prisoners_12_cont2 ) ;
86367: LD_EXP 109
86371: PPUSH
86372: LD_STRING Prisoners_12_cont2
86374: PPUSH
86375: CALL_OW 38
// YouWin ;
86379: CALL_OW 103
// end ;
86383: LD_VAR 0 1
86387: RET
