// export testing ; export you , russians , nature , alliance , arabians , americans , russians_alt , mines_side ; export Heike , Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis , Khattam ; export Kozlov , player_scout , Kyouma ; export Platonov , Roth , Gossudarov , Joan , Omar , Gensher , Powell , Hugh , Rolf ; export Aviradze , Evelyn , Swansson , Dwayne , Gonzo ; 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 , ai_spawn_people ; 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 russians_dont_attack_player , american_arabian_alliance , contaminate_scis_ready , am_going_to_destroy_alli ; export am_ar_attack_alli_together , ar_attack_commenced , american_deal_status , american_deal_reward , player_attacked_alliance ; export alliance_deal_status , attacked_times , num_attacks_ar_on_alli , alli_sib_needed , alli_sib_usage , player_sib_bomb_prod_fact ; export player_sib_bomb_res_lab , alli_destroy_am_objective_status , alli_destroy_ru_objective_status , last_dialogue_leaders ; export rus_enforce_vehicle_prod , going_to_steal_engineers , base_in_area_map , player_alliance_uns_red , player_alliance_uns_destroy ; export elimination_order , player_starting_units , all_artifacts_researched , player_fired_siberite_bomb , rus_extra_def_locs ; export player_has_built_sib_bomb ; export init_dialogue_start , powell_call_start , intermediate_dialogue_start , alliance_call_start ; starting begin RandomizeAll ;
   0: CALL_OW 11
// ResetFog ;
   4: CALL_OW 335
// testing = false ;
   8: LD_ADDR_EXP 1
  12: PUSH
  13: LD_INT 0
  15: ST_TO_ADDR
// ai_bases = [ 1 , 2 , 3 , 4 ] ;
  16: LD_ADDR_EXP 39
  20: PUSH
  21: LD_INT 1
  23: PUSH
  24: LD_INT 2
  26: PUSH
  27: LD_INT 3
  29: PUSH
  30: LD_INT 4
  32: PUSH
  33: EMPTY
  34: LIST
  35: LIST
  36: LIST
  37: LIST
  38: ST_TO_ADDR
// ai_soldiers = [ [ ] , [ ] , [ ] , [ ] ] ;
  39: LD_ADDR_EXP 40
  43: PUSH
  44: EMPTY
  45: PUSH
  46: EMPTY
  47: PUSH
  48: EMPTY
  49: PUSH
  50: EMPTY
  51: PUSH
  52: EMPTY
  53: LIST
  54: LIST
  55: LIST
  56: LIST
  57: ST_TO_ADDR
// ai_attacking_soldiers = [ [ ] , [ ] , [ ] , [ ] ] ;
  58: LD_ADDR_EXP 41
  62: PUSH
  63: EMPTY
  64: PUSH
  65: EMPTY
  66: PUSH
  67: EMPTY
  68: PUSH
  69: EMPTY
  70: PUSH
  71: EMPTY
  72: LIST
  73: LIST
  74: LIST
  75: LIST
  76: ST_TO_ADDR
// ai_excepted_soldiers = [ [ ] , [ ] , [ ] , [ ] ] ;
  77: LD_ADDR_EXP 48
  81: PUSH
  82: EMPTY
  83: PUSH
  84: EMPTY
  85: PUSH
  86: EMPTY
  87: PUSH
  88: EMPTY
  89: PUSH
  90: EMPTY
  91: LIST
  92: LIST
  93: LIST
  94: LIST
  95: ST_TO_ADDR
// ai_engineers = [ [ ] , [ ] , [ ] , [ ] ] ;
  96: LD_ADDR_EXP 42
 100: PUSH
 101: EMPTY
 102: PUSH
 103: EMPTY
 104: PUSH
 105: EMPTY
 106: PUSH
 107: EMPTY
 108: PUSH
 109: EMPTY
 110: LIST
 111: LIST
 112: LIST
 113: LIST
 114: ST_TO_ADDR
// ai_mechanics_defend = [ [ ] , [ ] , [ ] , [ ] ] ;
 115: LD_ADDR_EXP 43
 119: PUSH
 120: EMPTY
 121: PUSH
 122: EMPTY
 123: PUSH
 124: EMPTY
 125: PUSH
 126: EMPTY
 127: PUSH
 128: EMPTY
 129: LIST
 130: LIST
 131: LIST
 132: LIST
 133: ST_TO_ADDR
// ai_mechanics_attack = [ [ ] , [ ] , [ ] , [ ] ] ;
 134: LD_ADDR_EXP 44
 138: PUSH
 139: EMPTY
 140: PUSH
 141: EMPTY
 142: PUSH
 143: EMPTY
 144: PUSH
 145: EMPTY
 146: PUSH
 147: EMPTY
 148: LIST
 149: LIST
 150: LIST
 151: LIST
 152: ST_TO_ADDR
// ai_scientists = [ [ ] , [ ] , [ ] , [ ] ] ;
 153: LD_ADDR_EXP 45
 157: PUSH
 158: EMPTY
 159: PUSH
 160: EMPTY
 161: PUSH
 162: EMPTY
 163: PUSH
 164: EMPTY
 165: PUSH
 166: EMPTY
 167: LIST
 168: LIST
 169: LIST
 170: LIST
 171: ST_TO_ADDR
// ai_attacking_scientists = [ [ ] , [ ] , [ ] , [ ] ] ;
 172: LD_ADDR_EXP 46
 176: PUSH
 177: EMPTY
 178: PUSH
 179: EMPTY
 180: PUSH
 181: EMPTY
 182: PUSH
 183: EMPTY
 184: PUSH
 185: EMPTY
 186: LIST
 187: LIST
 188: LIST
 189: LIST
 190: ST_TO_ADDR
// ai_apemen_engineers = [ [ ] , [ ] , [ ] , [ ] ] ;
 191: LD_ADDR_EXP 47
 195: PUSH
 196: EMPTY
 197: PUSH
 198: EMPTY
 199: PUSH
 200: EMPTY
 201: PUSH
 202: EMPTY
 203: PUSH
 204: EMPTY
 205: LIST
 206: LIST
 207: LIST
 208: LIST
 209: ST_TO_ADDR
// ai_sib_bomb_mechanics = [ [ ] , [ ] , [ ] , [ ] ] ;
 210: LD_ADDR_EXP 65
 214: PUSH
 215: EMPTY
 216: PUSH
 217: EMPTY
 218: PUSH
 219: EMPTY
 220: PUSH
 221: EMPTY
 222: PUSH
 223: EMPTY
 224: LIST
 225: LIST
 226: LIST
 227: LIST
 228: ST_TO_ADDR
// ai_depot = [ 0 , 0 , 0 , 0 ] ;
 229: LD_ADDR_EXP 49
 233: PUSH
 234: LD_INT 0
 236: PUSH
 237: LD_INT 0
 239: PUSH
 240: LD_INT 0
 242: PUSH
 243: LD_INT 0
 245: PUSH
 246: EMPTY
 247: LIST
 248: LIST
 249: LIST
 250: LIST
 251: ST_TO_ADDR
// ai_labs = [ [ ] , [ ] , [ ] , [ ] ] ;
 252: LD_ADDR_EXP 50
 256: PUSH
 257: EMPTY
 258: PUSH
 259: EMPTY
 260: PUSH
 261: EMPTY
 262: PUSH
 263: EMPTY
 264: PUSH
 265: EMPTY
 266: LIST
 267: LIST
 268: LIST
 269: LIST
 270: ST_TO_ADDR
// ai_facts = [ [ ] , [ ] , [ ] , [ ] ] ;
 271: LD_ADDR_EXP 51
 275: PUSH
 276: EMPTY
 277: PUSH
 278: EMPTY
 279: PUSH
 280: EMPTY
 281: PUSH
 282: EMPTY
 283: PUSH
 284: EMPTY
 285: LIST
 286: LIST
 287: LIST
 288: LIST
 289: ST_TO_ADDR
// ai_armouries = [ [ ] , [ ] , [ ] , [ ] ] ;
 290: LD_ADDR_EXP 52
 294: PUSH
 295: EMPTY
 296: PUSH
 297: EMPTY
 298: PUSH
 299: EMPTY
 300: PUSH
 301: EMPTY
 302: PUSH
 303: EMPTY
 304: LIST
 305: LIST
 306: LIST
 307: LIST
 308: ST_TO_ADDR
// ai_bunkers = [ [ ] , [ ] , [ ] , [ ] ] ;
 309: LD_ADDR_EXP 53
 313: PUSH
 314: EMPTY
 315: PUSH
 316: EMPTY
 317: PUSH
 318: EMPTY
 319: PUSH
 320: EMPTY
 321: PUSH
 322: EMPTY
 323: LIST
 324: LIST
 325: LIST
 326: LIST
 327: ST_TO_ADDR
// ai_turrets = [ [ ] , [ ] , [ ] , [ ] ] ;
 328: LD_ADDR_EXP 54
 332: PUSH
 333: EMPTY
 334: PUSH
 335: EMPTY
 336: PUSH
 337: EMPTY
 338: PUSH
 339: EMPTY
 340: PUSH
 341: EMPTY
 342: LIST
 343: LIST
 344: LIST
 345: LIST
 346: ST_TO_ADDR
// ai_oil_mine = [ 0 , 0 , 0 , 0 ] ;
 347: LD_ADDR_EXP 55
 351: PUSH
 352: LD_INT 0
 354: PUSH
 355: LD_INT 0
 357: PUSH
 358: LD_INT 0
 360: PUSH
 361: LD_INT 0
 363: PUSH
 364: EMPTY
 365: LIST
 366: LIST
 367: LIST
 368: LIST
 369: ST_TO_ADDR
// ai_siberite_mines = [ [ ] , [ ] , [ ] , [ ] ] ;
 370: LD_ADDR_EXP 56
 374: PUSH
 375: EMPTY
 376: PUSH
 377: EMPTY
 378: PUSH
 379: EMPTY
 380: PUSH
 381: EMPTY
 382: PUSH
 383: EMPTY
 384: LIST
 385: LIST
 386: LIST
 387: LIST
 388: ST_TO_ADDR
// ai_fact_extensions = [ [ ] , [ ] , [ ] , [ ] ] ;
 389: LD_ADDR_EXP 57
 393: PUSH
 394: EMPTY
 395: PUSH
 396: EMPTY
 397: PUSH
 398: EMPTY
 399: PUSH
 400: EMPTY
 401: PUSH
 402: EMPTY
 403: LIST
 404: LIST
 405: LIST
 406: LIST
 407: ST_TO_ADDR
// ai_power_plants = [ [ ] , [ ] , [ ] , [ ] ] ;
 408: LD_ADDR_EXP 58
 412: PUSH
 413: EMPTY
 414: PUSH
 415: EMPTY
 416: PUSH
 417: EMPTY
 418: PUSH
 419: EMPTY
 420: PUSH
 421: EMPTY
 422: LIST
 423: LIST
 424: LIST
 425: LIST
 426: ST_TO_ADDR
// ai_control_tower = [ 0 , 0 , 0 , 0 ] ;
 427: LD_ADDR_EXP 59
 431: PUSH
 432: LD_INT 0
 434: PUSH
 435: LD_INT 0
 437: PUSH
 438: LD_INT 0
 440: PUSH
 441: LD_INT 0
 443: PUSH
 444: EMPTY
 445: LIST
 446: LIST
 447: LIST
 448: LIST
 449: ST_TO_ADDR
// ai_teleporter = [ 0 , 0 , 0 , 0 ] ;
 450: LD_ADDR_EXP 60
 454: PUSH
 455: LD_INT 0
 457: PUSH
 458: LD_INT 0
 460: PUSH
 461: LD_INT 0
 463: PUSH
 464: LD_INT 0
 466: PUSH
 467: EMPTY
 468: LIST
 469: LIST
 470: LIST
 471: LIST
 472: ST_TO_ADDR
// ai_buildings_locations = [ [ ] , [ ] , [ ] , [ ] ] ;
 473: LD_ADDR_EXP 61
 477: PUSH
 478: EMPTY
 479: PUSH
 480: EMPTY
 481: PUSH
 482: EMPTY
 483: PUSH
 484: EMPTY
 485: PUSH
 486: EMPTY
 487: LIST
 488: LIST
 489: LIST
 490: LIST
 491: ST_TO_ADDR
// ai_captured_buildings = [ [ ] , [ ] , [ ] , [ ] ] ;
 492: LD_ADDR_EXP 62
 496: PUSH
 497: EMPTY
 498: PUSH
 499: EMPTY
 500: PUSH
 501: EMPTY
 502: PUSH
 503: EMPTY
 504: PUSH
 505: EMPTY
 506: LIST
 507: LIST
 508: LIST
 509: LIST
 510: ST_TO_ADDR
// ai_sib_bomb_fact = [ ru_sib_fact , 0 , 0 , am_sib_fact ] ;
 511: LD_ADDR_EXP 63
 515: PUSH
 516: LD_INT 462
 518: PUSH
 519: LD_INT 0
 521: PUSH
 522: LD_INT 0
 524: PUSH
 525: LD_INT 459
 527: PUSH
 528: EMPTY
 529: LIST
 530: LIST
 531: LIST
 532: LIST
 533: ST_TO_ADDR
// ai_sib_bomb_fact_location = [ [ GetX ( ru_sib_fact ) , GetY ( ru_sib_fact ) ] , [ ] , [ ] , [ GetX ( am_sib_fact ) , GetY ( am_sib_fact ) ] ] ;
 534: LD_ADDR_EXP 64
 538: PUSH
 539: LD_INT 462
 541: PPUSH
 542: CALL_OW 250
 546: PUSH
 547: LD_INT 462
 549: PPUSH
 550: CALL_OW 251
 554: PUSH
 555: EMPTY
 556: LIST
 557: LIST
 558: PUSH
 559: EMPTY
 560: PUSH
 561: EMPTY
 562: PUSH
 563: LD_INT 459
 565: PPUSH
 566: CALL_OW 250
 570: PUSH
 571: LD_INT 459
 573: PPUSH
 574: CALL_OW 251
 578: PUSH
 579: EMPTY
 580: LIST
 581: LIST
 582: PUSH
 583: EMPTY
 584: LIST
 585: LIST
 586: LIST
 587: LIST
 588: ST_TO_ADDR
// ai_vehicles_defend = [ [ ] , [ ] , [ ] , [ ] ] ;
 589: LD_ADDR_EXP 67
 593: PUSH
 594: EMPTY
 595: PUSH
 596: EMPTY
 597: PUSH
 598: EMPTY
 599: PUSH
 600: EMPTY
 601: PUSH
 602: EMPTY
 603: LIST
 604: LIST
 605: LIST
 606: LIST
 607: ST_TO_ADDR
// ai_vehicles_attack = [ [ ] , [ ] , [ ] , [ ] ] ;
 608: LD_ADDR_EXP 68
 612: PUSH
 613: EMPTY
 614: PUSH
 615: EMPTY
 616: PUSH
 617: EMPTY
 618: PUSH
 619: EMPTY
 620: PUSH
 621: EMPTY
 622: LIST
 623: LIST
 624: LIST
 625: LIST
 626: ST_TO_ADDR
// ai_retreating_vehicles_defend = [ [ ] , [ ] , [ ] , [ ] ] ;
 627: LD_ADDR_EXP 69
 631: PUSH
 632: EMPTY
 633: PUSH
 634: EMPTY
 635: PUSH
 636: EMPTY
 637: PUSH
 638: EMPTY
 639: PUSH
 640: EMPTY
 641: LIST
 642: LIST
 643: LIST
 644: LIST
 645: ST_TO_ADDR
// ai_vehicles_being_repaired = [ [ ] , [ ] , [ ] , [ ] ] ;
 646: LD_ADDR_EXP 70
 650: PUSH
 651: EMPTY
 652: PUSH
 653: EMPTY
 654: PUSH
 655: EMPTY
 656: PUSH
 657: EMPTY
 658: PUSH
 659: EMPTY
 660: LIST
 661: LIST
 662: LIST
 663: LIST
 664: ST_TO_ADDR
// ai_refuel_vehicles_list = [ [ ] , [ ] , [ ] , [ ] ] ;
 665: LD_ADDR_EXP 71
 669: PUSH
 670: EMPTY
 671: PUSH
 672: EMPTY
 673: PUSH
 674: EMPTY
 675: PUSH
 676: EMPTY
 677: PUSH
 678: EMPTY
 679: LIST
 680: LIST
 681: LIST
 682: LIST
 683: ST_TO_ADDR
// ai_vehicle_pullback_hexes = [ [ ] , [ ] , [ [ 177 , 169 ] , [ 183 , 175 ] , [ 183 , 171 ] ] , [ [ 127 , 180 ] , [ 119 , 178 ] , [ 119 , 186 ] , [ 111 , 178 ] , [ 106 , 178 ] , [ 100 , 181 ] ] ] ;
 684: LD_ADDR_EXP 72
 688: PUSH
 689: EMPTY
 690: PUSH
 691: EMPTY
 692: PUSH
 693: LD_INT 177
 695: PUSH
 696: LD_INT 169
 698: PUSH
 699: EMPTY
 700: LIST
 701: LIST
 702: PUSH
 703: LD_INT 183
 705: PUSH
 706: LD_INT 175
 708: PUSH
 709: EMPTY
 710: LIST
 711: LIST
 712: PUSH
 713: LD_INT 183
 715: PUSH
 716: LD_INT 171
 718: PUSH
 719: EMPTY
 720: LIST
 721: LIST
 722: PUSH
 723: EMPTY
 724: LIST
 725: LIST
 726: LIST
 727: PUSH
 728: LD_INT 127
 730: PUSH
 731: LD_INT 180
 733: PUSH
 734: EMPTY
 735: LIST
 736: LIST
 737: PUSH
 738: LD_INT 119
 740: PUSH
 741: LD_INT 178
 743: PUSH
 744: EMPTY
 745: LIST
 746: LIST
 747: PUSH
 748: LD_INT 119
 750: PUSH
 751: LD_INT 186
 753: PUSH
 754: EMPTY
 755: LIST
 756: LIST
 757: PUSH
 758: LD_INT 111
 760: PUSH
 761: LD_INT 178
 763: PUSH
 764: EMPTY
 765: LIST
 766: LIST
 767: PUSH
 768: LD_INT 106
 770: PUSH
 771: LD_INT 178
 773: PUSH
 774: EMPTY
 775: LIST
 776: LIST
 777: PUSH
 778: LD_INT 100
 780: PUSH
 781: LD_INT 181
 783: PUSH
 784: EMPTY
 785: LIST
 786: LIST
 787: PUSH
 788: EMPTY
 789: LIST
 790: LIST
 791: LIST
 792: LIST
 793: LIST
 794: LIST
 795: PUSH
 796: EMPTY
 797: LIST
 798: LIST
 799: LIST
 800: LIST
 801: ST_TO_ADDR
// ai_human_pullback_hex = [ [ 39 , 14 ] , [ 83 , 117 ] , [ 170 , 156 ] , [ 127 , 186 ] ] ;
 802: LD_ADDR_EXP 73
 806: PUSH
 807: LD_INT 39
 809: PUSH
 810: LD_INT 14
 812: PUSH
 813: EMPTY
 814: LIST
 815: LIST
 816: PUSH
 817: LD_INT 83
 819: PUSH
 820: LD_INT 117
 822: PUSH
 823: EMPTY
 824: LIST
 825: LIST
 826: PUSH
 827: LD_INT 170
 829: PUSH
 830: LD_INT 156
 832: PUSH
 833: EMPTY
 834: LIST
 835: LIST
 836: PUSH
 837: LD_INT 127
 839: PUSH
 840: LD_INT 186
 842: PUSH
 843: EMPTY
 844: LIST
 845: LIST
 846: PUSH
 847: EMPTY
 848: LIST
 849: LIST
 850: LIST
 851: LIST
 852: ST_TO_ADDR
// ai_spawn_people = [ [ ] , [ ] , [ ] , [ ] ] ;
 853: LD_ADDR_EXP 66
 857: PUSH
 858: EMPTY
 859: PUSH
 860: EMPTY
 861: PUSH
 862: EMPTY
 863: PUSH
 864: EMPTY
 865: PUSH
 866: EMPTY
 867: LIST
 868: LIST
 869: LIST
 870: LIST
 871: ST_TO_ADDR
// ai_building_under_construction = [ 0 , 0 , 0 , 0 ] ;
 872: LD_ADDR_EXP 74
 876: PUSH
 877: LD_INT 0
 879: PUSH
 880: LD_INT 0
 882: PUSH
 883: LD_INT 0
 885: PUSH
 886: LD_INT 0
 888: PUSH
 889: EMPTY
 890: LIST
 891: LIST
 892: LIST
 893: LIST
 894: ST_TO_ADDR
// ai_heal_these_humans = [ [ ] , [ ] , [ ] , [ ] ] ;
 895: LD_ADDR_EXP 75
 899: PUSH
 900: EMPTY
 901: PUSH
 902: EMPTY
 903: PUSH
 904: EMPTY
 905: PUSH
 906: EMPTY
 907: PUSH
 908: EMPTY
 909: LIST
 910: LIST
 911: LIST
 912: LIST
 913: ST_TO_ADDR
// ai_all_buildings = [ [ ] , [ ] , [ ] , [ ] ] ;
 914: LD_ADDR_EXP 76
 918: PUSH
 919: EMPTY
 920: PUSH
 921: EMPTY
 922: PUSH
 923: EMPTY
 924: PUSH
 925: EMPTY
 926: PUSH
 927: EMPTY
 928: LIST
 929: LIST
 930: LIST
 931: LIST
 932: ST_TO_ADDR
// ai_building_constructor = [ 0 , 0 , 0 , 0 ] ;
 933: LD_ADDR_EXP 77
 937: PUSH
 938: LD_INT 0
 940: PUSH
 941: LD_INT 0
 943: PUSH
 944: LD_INT 0
 946: PUSH
 947: LD_INT 0
 949: PUSH
 950: EMPTY
 951: LIST
 952: LIST
 953: LIST
 954: LIST
 955: ST_TO_ADDR
// ai_vehicle_being_moved = [ 0 , 0 , 0 , 0 ] ;
 956: LD_ADDR_EXP 78
 960: PUSH
 961: LD_INT 0
 963: PUSH
 964: LD_INT 0
 966: PUSH
 967: LD_INT 0
 969: PUSH
 970: LD_INT 0
 972: PUSH
 973: EMPTY
 974: LIST
 975: LIST
 976: LIST
 977: LIST
 978: ST_TO_ADDR
// ai_vehicles_having_been_moved = [ [ ] , [ ] , [ ] , [ ] ] ;
 979: LD_ADDR_EXP 79
 983: PUSH
 984: EMPTY
 985: PUSH
 986: EMPTY
 987: PUSH
 988: EMPTY
 989: PUSH
 990: EMPTY
 991: PUSH
 992: EMPTY
 993: LIST
 994: LIST
 995: LIST
 996: LIST
 997: ST_TO_ADDR
// ai_upcoming_building_data = [ [ ] , [ ] , [ ] , [ ] ] ;
 998: LD_ADDR_EXP 80
1002: PUSH
1003: EMPTY
1004: PUSH
1005: EMPTY
1006: PUSH
1007: EMPTY
1008: PUSH
1009: EMPTY
1010: PUSH
1011: EMPTY
1012: LIST
1013: LIST
1014: LIST
1015: LIST
1016: ST_TO_ADDR
// ai_cannot_rebuild_these_buildings = [ [ ] , [ ] , [ ] , [ ] ] ;
1017: LD_ADDR_EXP 81
1021: PUSH
1022: EMPTY
1023: PUSH
1024: EMPTY
1025: PUSH
1026: EMPTY
1027: PUSH
1028: EMPTY
1029: PUSH
1030: EMPTY
1031: LIST
1032: LIST
1033: LIST
1034: LIST
1035: ST_TO_ADDR
// ai_near_base_dist = 18 ;
1036: LD_ADDR_EXP 82
1040: PUSH
1041: LD_INT 18
1043: ST_TO_ADDR
// ai_vehicle_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 , 0 0$0 ] ;
1044: LD_ADDR_EXP 83
1048: PUSH
1049: LD_INT 0
1051: PUSH
1052: LD_INT 0
1054: PUSH
1055: LD_INT 0
1057: PUSH
1058: LD_INT 0
1060: PUSH
1061: EMPTY
1062: LIST
1063: LIST
1064: LIST
1065: LIST
1066: ST_TO_ADDR
// ai_human_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 , 0 0$0 ] ;
1067: LD_ADDR_EXP 84
1071: PUSH
1072: LD_INT 0
1074: PUSH
1075: LD_INT 0
1077: PUSH
1078: LD_INT 0
1080: PUSH
1081: LD_INT 0
1083: PUSH
1084: EMPTY
1085: LIST
1086: LIST
1087: LIST
1088: LIST
1089: ST_TO_ADDR
// ai_attack_strategy = [ 0 , 0 , 0 , 0 ] ;
1090: LD_ADDR_EXP 102
1094: PUSH
1095: LD_INT 0
1097: PUSH
1098: LD_INT 0
1100: PUSH
1101: LD_INT 0
1103: PUSH
1104: LD_INT 0
1106: PUSH
1107: EMPTY
1108: LIST
1109: LIST
1110: LIST
1111: LIST
1112: ST_TO_ADDR
// ai_cargo_bay = [ 0 , 0 , 0 , 0 ] ;
1113: LD_ADDR_EXP 85
1117: PUSH
1118: LD_INT 0
1120: PUSH
1121: LD_INT 0
1123: PUSH
1124: LD_INT 0
1126: PUSH
1127: LD_INT 0
1129: PUSH
1130: EMPTY
1131: LIST
1132: LIST
1133: LIST
1134: LIST
1135: ST_TO_ADDR
// ai_cargo_bay_under_construction = [ false , false , false , false ] ;
1136: LD_ADDR_EXP 86
1140: PUSH
1141: LD_INT 0
1143: PUSH
1144: LD_INT 0
1146: PUSH
1147: LD_INT 0
1149: PUSH
1150: LD_INT 0
1152: PUSH
1153: EMPTY
1154: LIST
1155: LIST
1156: LIST
1157: LIST
1158: ST_TO_ADDR
// ai_cargo_bay_destroy_tick = [ tick , tick , tick , tick ] ;
1159: LD_ADDR_EXP 87
1163: PUSH
1164: LD_OWVAR 1
1168: PUSH
1169: LD_OWVAR 1
1173: PUSH
1174: LD_OWVAR 1
1178: PUSH
1179: LD_OWVAR 1
1183: PUSH
1184: EMPTY
1185: LIST
1186: LIST
1187: LIST
1188: LIST
1189: ST_TO_ADDR
// ai_crane = [ 0 , 0 , 0 , 0 ] ;
1190: LD_ADDR_EXP 88
1194: PUSH
1195: LD_INT 0
1197: PUSH
1198: LD_INT 0
1200: PUSH
1201: LD_INT 0
1203: PUSH
1204: LD_INT 0
1206: PUSH
1207: EMPTY
1208: LIST
1209: LIST
1210: LIST
1211: LIST
1212: ST_TO_ADDR
// ai_crane_under_construction = [ false , false , false , false ] ;
1213: LD_ADDR_EXP 89
1217: PUSH
1218: LD_INT 0
1220: PUSH
1221: LD_INT 0
1223: PUSH
1224: LD_INT 0
1226: PUSH
1227: LD_INT 0
1229: PUSH
1230: EMPTY
1231: LIST
1232: LIST
1233: LIST
1234: LIST
1235: ST_TO_ADDR
// ai_crane_destroy_tick = [ tick , tick , tick , tick ] ;
1236: LD_ADDR_EXP 90
1240: PUSH
1241: LD_OWVAR 1
1245: PUSH
1246: LD_OWVAR 1
1250: PUSH
1251: LD_OWVAR 1
1255: PUSH
1256: LD_OWVAR 1
1260: PUSH
1261: EMPTY
1262: LIST
1263: LIST
1264: LIST
1265: LIST
1266: ST_TO_ADDR
// ai_crane_is_being_repaired = [ false , false , false , false ] ;
1267: LD_ADDR_EXP 91
1271: PUSH
1272: LD_INT 0
1274: PUSH
1275: LD_INT 0
1277: PUSH
1278: LD_INT 0
1280: PUSH
1281: LD_INT 0
1283: PUSH
1284: EMPTY
1285: LIST
1286: LIST
1287: LIST
1288: LIST
1289: ST_TO_ADDR
// ai_crane_driver = [ 0 , 0 , 0 , 0 ] ;
1290: LD_ADDR_EXP 92
1294: PUSH
1295: LD_INT 0
1297: PUSH
1298: LD_INT 0
1300: PUSH
1301: LD_INT 0
1303: PUSH
1304: LD_INT 0
1306: PUSH
1307: EMPTY
1308: LIST
1309: LIST
1310: LIST
1311: LIST
1312: ST_TO_ADDR
// ai_attacking_unit_hex_index = [ ] ;
1313: LD_ADDR_EXP 93
1317: PUSH
1318: EMPTY
1319: ST_TO_ADDR
// ai_retreating_attacking_humans = [ [ ] , [ ] , [ ] , [ ] ] ;
1320: LD_ADDR_EXP 94
1324: PUSH
1325: EMPTY
1326: PUSH
1327: EMPTY
1328: PUSH
1329: EMPTY
1330: PUSH
1331: EMPTY
1332: PUSH
1333: EMPTY
1334: LIST
1335: LIST
1336: LIST
1337: LIST
1338: ST_TO_ADDR
// ai_control_tower_vehicles = [ [ ] , [ ] , [ ] , [ ] ] ;
1339: LD_ADDR_EXP 95
1343: PUSH
1344: EMPTY
1345: PUSH
1346: EMPTY
1347: PUSH
1348: EMPTY
1349: PUSH
1350: EMPTY
1351: PUSH
1352: EMPTY
1353: LIST
1354: LIST
1355: LIST
1356: LIST
1357: ST_TO_ADDR
// ai_teleporter_exit_placed = [ false , false , false , false ] ;
1358: LD_ADDR_EXP 96
1362: PUSH
1363: LD_INT 0
1365: PUSH
1366: LD_INT 0
1368: PUSH
1369: LD_INT 0
1371: PUSH
1372: LD_INT 0
1374: PUSH
1375: EMPTY
1376: LIST
1377: LIST
1378: LIST
1379: LIST
1380: ST_TO_ADDR
// ai_excepted_buildings = [ [ ] , [ ] , [ ] , [ ] ] ;
1381: LD_ADDR_EXP 97
1385: PUSH
1386: EMPTY
1387: PUSH
1388: EMPTY
1389: PUSH
1390: EMPTY
1391: PUSH
1392: EMPTY
1393: PUSH
1394: EMPTY
1395: LIST
1396: LIST
1397: LIST
1398: LIST
1399: ST_TO_ADDR
// ai_fact_extension_replace_locations = [ [ ] , [ ] , [ ] , [ ] ] ;
1400: LD_ADDR_EXP 98
1404: PUSH
1405: EMPTY
1406: PUSH
1407: EMPTY
1408: PUSH
1409: EMPTY
1410: PUSH
1411: EMPTY
1412: PUSH
1413: EMPTY
1414: LIST
1415: LIST
1416: LIST
1417: LIST
1418: ST_TO_ADDR
// ai_facts_with_ext_rebuild_map = [ ] ;
1419: LD_ADDR_EXP 108
1423: PUSH
1424: EMPTY
1425: ST_TO_ADDR
// ai_dismantle_these_buildings = [ [ ] , [ ] , [ ] , [ ] ] ;
1426: LD_ADDR_EXP 99
1430: PUSH
1431: EMPTY
1432: PUSH
1433: EMPTY
1434: PUSH
1435: EMPTY
1436: PUSH
1437: EMPTY
1438: PUSH
1439: EMPTY
1440: LIST
1441: LIST
1442: LIST
1443: LIST
1444: ST_TO_ADDR
// ai_taufield_vehicles = [ [ ] , [ ] , [ ] , [ ] ] ;
1445: LD_ADDR_EXP 100
1449: PUSH
1450: EMPTY
1451: PUSH
1452: EMPTY
1453: PUSH
1454: EMPTY
1455: PUSH
1456: EMPTY
1457: PUSH
1458: EMPTY
1459: LIST
1460: LIST
1461: LIST
1462: LIST
1463: ST_TO_ADDR
// ai_implosion_vehicles = [ [ ] , [ ] , [ ] , [ ] ] ;
1464: LD_ADDR_EXP 101
1468: PUSH
1469: EMPTY
1470: PUSH
1471: EMPTY
1472: PUSH
1473: EMPTY
1474: PUSH
1475: EMPTY
1476: PUSH
1477: EMPTY
1478: LIST
1479: LIST
1480: LIST
1481: LIST
1482: ST_TO_ADDR
// ai_sib_bomb_vehicles = [ [ ] , [ ] , [ ] , [ ] ] ;
1483: LD_ADDR_EXP 107
1487: PUSH
1488: EMPTY
1489: PUSH
1490: EMPTY
1491: PUSH
1492: EMPTY
1493: PUSH
1494: EMPTY
1495: PUSH
1496: EMPTY
1497: LIST
1498: LIST
1499: LIST
1500: LIST
1501: ST_TO_ADDR
// ai_behemoths = [ [ ] , [ ] , [ ] , [ ] ] ;
1502: LD_ADDR_EXP 103
1506: PUSH
1507: EMPTY
1508: PUSH
1509: EMPTY
1510: PUSH
1511: EMPTY
1512: PUSH
1513: EMPTY
1514: PUSH
1515: EMPTY
1516: LIST
1517: LIST
1518: LIST
1519: LIST
1520: ST_TO_ADDR
// ai_behemoth_parking_hexes = [ [ [ 65 , 7 ] , [ 69 , 22 ] , [ 66 , 31 ] ] , [ ] , [ ] , [ ] ] ;
1521: LD_ADDR_EXP 104
1525: PUSH
1526: LD_INT 65
1528: PUSH
1529: LD_INT 7
1531: PUSH
1532: EMPTY
1533: LIST
1534: LIST
1535: PUSH
1536: LD_INT 69
1538: PUSH
1539: LD_INT 22
1541: PUSH
1542: EMPTY
1543: LIST
1544: LIST
1545: PUSH
1546: LD_INT 66
1548: PUSH
1549: LD_INT 31
1551: PUSH
1552: EMPTY
1553: LIST
1554: LIST
1555: PUSH
1556: EMPTY
1557: LIST
1558: LIST
1559: LIST
1560: PUSH
1561: EMPTY
1562: PUSH
1563: EMPTY
1564: PUSH
1565: EMPTY
1566: PUSH
1567: EMPTY
1568: LIST
1569: LIST
1570: LIST
1571: LIST
1572: ST_TO_ADDR
// ai_behemoth_construction_hex = [ [ 66 , 14 ] , [ ] , [ ] , [ ] ] ;
1573: LD_ADDR_EXP 105
1577: PUSH
1578: LD_INT 66
1580: PUSH
1581: LD_INT 14
1583: PUSH
1584: EMPTY
1585: LIST
1586: LIST
1587: PUSH
1588: EMPTY
1589: PUSH
1590: EMPTY
1591: PUSH
1592: EMPTY
1593: PUSH
1594: EMPTY
1595: LIST
1596: LIST
1597: LIST
1598: LIST
1599: ST_TO_ADDR
// ai_new_attack_commencing = [ false , false , false , false ] ;
1600: LD_ADDR_EXP 106
1604: PUSH
1605: LD_INT 0
1607: PUSH
1608: LD_INT 0
1610: PUSH
1611: LD_INT 0
1613: PUSH
1614: LD_INT 0
1616: PUSH
1617: EMPTY
1618: LIST
1619: LIST
1620: LIST
1621: LIST
1622: ST_TO_ADDR
// ai_time_shift_data = [ [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] ] ;
1623: LD_ADDR_EXP 109
1627: PUSH
1628: EMPTY
1629: PUSH
1630: EMPTY
1631: PUSH
1632: EMPTY
1633: PUSH
1634: EMPTY
1635: PUSH
1636: EMPTY
1637: PUSH
1638: EMPTY
1639: PUSH
1640: EMPTY
1641: PUSH
1642: EMPTY
1643: PUSH
1644: EMPTY
1645: LIST
1646: LIST
1647: LIST
1648: LIST
1649: LIST
1650: LIST
1651: LIST
1652: LIST
1653: ST_TO_ADDR
// ai_time_shift_hexes = [ [ ] , [ ] , [ ] , [ ] ] ;
1654: LD_ADDR_EXP 110
1658: PUSH
1659: EMPTY
1660: PUSH
1661: EMPTY
1662: PUSH
1663: EMPTY
1664: PUSH
1665: EMPTY
1666: PUSH
1667: EMPTY
1668: LIST
1669: LIST
1670: LIST
1671: LIST
1672: ST_TO_ADDR
// ai_time_shift_hexes_underway = [ [ ] , [ ] , [ ] , [ ] ] ;
1673: LD_ADDR_EXP 111
1677: PUSH
1678: EMPTY
1679: PUSH
1680: EMPTY
1681: PUSH
1682: EMPTY
1683: PUSH
1684: EMPTY
1685: PUSH
1686: EMPTY
1687: LIST
1688: LIST
1689: LIST
1690: LIST
1691: ST_TO_ADDR
// Initiate_ai_contact_time ;
1692: CALL 2174 0 0
// ai_attack_ground_info_initial = [ ] ;
1696: LD_ADDR_EXP 113
1700: PUSH
1701: EMPTY
1702: ST_TO_ADDR
// ai_attack_ground_info_sustain = [ ] ;
1703: LD_ADDR_EXP 114
1707: PUSH
1708: EMPTY
1709: ST_TO_ADDR
// Initiate_ai_sib_bomb_used_time_matrix ;
1710: CALL 2258 0 0
// ai_sib_bomb_contamination_duration = 175 * 35 ;
1714: LD_ADDR_EXP 116
1718: PUSH
1719: LD_INT 175
1721: PUSH
1722: LD_INT 35
1724: MUL
1725: ST_TO_ADDR
// ai_defence_replace_mines_centerhexes = [ [ ] , [ ] , [ ] , [ ] ] ;
1726: LD_ADDR_EXP 117
1730: PUSH
1731: EMPTY
1732: PUSH
1733: EMPTY
1734: PUSH
1735: EMPTY
1736: PUSH
1737: EMPTY
1738: PUSH
1739: EMPTY
1740: LIST
1741: LIST
1742: LIST
1743: LIST
1744: ST_TO_ADDR
// ai_defence_max_num_replace_mines = [ - 1 , - 1 , - 1 , - 1 ] ;
1745: LD_ADDR_EXP 119
1749: PUSH
1750: LD_INT 1
1752: NEG
1753: PUSH
1754: LD_INT 1
1756: NEG
1757: PUSH
1758: LD_INT 1
1760: NEG
1761: PUSH
1762: LD_INT 1
1764: NEG
1765: PUSH
1766: EMPTY
1767: LIST
1768: LIST
1769: LIST
1770: LIST
1771: ST_TO_ADDR
// ai_mine_guys = [ [ ] , [ ] , [ ] , [ ] ] ;
1772: LD_ADDR_EXP 120
1776: PUSH
1777: EMPTY
1778: PUSH
1779: EMPTY
1780: PUSH
1781: EMPTY
1782: PUSH
1783: EMPTY
1784: PUSH
1785: EMPTY
1786: LIST
1787: LIST
1788: LIST
1789: LIST
1790: ST_TO_ADDR
// ai_defence_mines_hexes = [ [ ] , [ ] , [ ] , [ ] ] ;
1791: LD_ADDR_EXP 118
1795: PUSH
1796: EMPTY
1797: PUSH
1798: EMPTY
1799: PUSH
1800: EMPTY
1801: PUSH
1802: EMPTY
1803: PUSH
1804: EMPTY
1805: LIST
1806: LIST
1807: LIST
1808: LIST
1809: ST_TO_ADDR
// ai_defence_replace_mines_hexes = [ [ ] , [ ] , [ ] , [ ] ] ;
1810: LD_ADDR_EXP 121
1814: PUSH
1815: EMPTY
1816: PUSH
1817: EMPTY
1818: PUSH
1819: EMPTY
1820: PUSH
1821: EMPTY
1822: PUSH
1823: EMPTY
1824: LIST
1825: LIST
1826: LIST
1827: LIST
1828: ST_TO_ADDR
// InitCrateModule ;
1829: CALL 15976 0 0
// russians_dont_attack_player = false ;
1833: LD_ADDR_EXP 122
1837: PUSH
1838: LD_INT 0
1840: ST_TO_ADDR
// american_arabian_alliance = false ;
1841: LD_ADDR_EXP 123
1845: PUSH
1846: LD_INT 0
1848: ST_TO_ADDR
// am_ar_attack_alli_together = false ;
1849: LD_ADDR_EXP 126
1853: PUSH
1854: LD_INT 0
1856: ST_TO_ADDR
// contaminate_scis_ready = true ;
1857: LD_ADDR_EXP 124
1861: PUSH
1862: LD_INT 1
1864: ST_TO_ADDR
// am_going_to_destroy_alli = false ;
1865: LD_ADDR_EXP 125
1869: PUSH
1870: LD_INT 0
1872: ST_TO_ADDR
// ar_attack_commenced = false ;
1873: LD_ADDR_EXP 127
1877: PUSH
1878: LD_INT 0
1880: ST_TO_ADDR
// american_deal_status = 0 ;
1881: LD_ADDR_EXP 128
1885: PUSH
1886: LD_INT 0
1888: ST_TO_ADDR
// american_deal_reward = [ 0 , 0 , 0 ] ;
1889: LD_ADDR_EXP 129
1893: PUSH
1894: LD_INT 0
1896: PUSH
1897: LD_INT 0
1899: PUSH
1900: LD_INT 0
1902: PUSH
1903: EMPTY
1904: LIST
1905: LIST
1906: LIST
1907: ST_TO_ADDR
// player_attacked_alliance = false ;
1908: LD_ADDR_EXP 130
1912: PUSH
1913: LD_INT 0
1915: ST_TO_ADDR
// alliance_deal_status = 0 ;
1916: LD_ADDR_EXP 131
1920: PUSH
1921: LD_INT 0
1923: ST_TO_ADDR
// attacked_times = [ [ ] , [ ] , [ ] , [ ] ] ;
1924: LD_ADDR_EXP 132
1928: PUSH
1929: EMPTY
1930: PUSH
1931: EMPTY
1932: PUSH
1933: EMPTY
1934: PUSH
1935: EMPTY
1936: PUSH
1937: EMPTY
1938: LIST
1939: LIST
1940: LIST
1941: LIST
1942: ST_TO_ADDR
// num_attacks_ar_on_alli = 0 ;
1943: LD_ADDR_EXP 133
1947: PUSH
1948: LD_INT 0
1950: ST_TO_ADDR
// alli_sib_needed = 0 ;
1951: LD_ADDR_EXP 134
1955: PUSH
1956: LD_INT 0
1958: ST_TO_ADDR
// alli_sib_usage = 0 ;
1959: LD_ADDR_EXP 135
1963: PUSH
1964: LD_INT 0
1966: ST_TO_ADDR
// player_sib_bomb_prod_fact = 0 ;
1967: LD_ADDR_EXP 136
1971: PUSH
1972: LD_INT 0
1974: ST_TO_ADDR
// player_sib_bomb_res_lab = 0 ;
1975: LD_ADDR_EXP 137
1979: PUSH
1980: LD_INT 0
1982: ST_TO_ADDR
// alli_destroy_am_objective_status = 0 ;
1983: LD_ADDR_EXP 138
1987: PUSH
1988: LD_INT 0
1990: ST_TO_ADDR
// alli_destroy_ru_objective_status = 0 ;
1991: LD_ADDR_EXP 139
1995: PUSH
1996: LD_INT 0
1998: ST_TO_ADDR
// last_dialogue_leaders = [ ] ;
1999: LD_ADDR_EXP 140
2003: PUSH
2004: EMPTY
2005: ST_TO_ADDR
// rus_enforce_vehicle_prod = false ;
2006: LD_ADDR_EXP 141
2010: PUSH
2011: LD_INT 0
2013: ST_TO_ADDR
// going_to_steal_engineers = [ ] ;
2014: LD_ADDR_EXP 142
2018: PUSH
2019: EMPTY
2020: ST_TO_ADDR
// base_in_area_map = [ [ ] , [ ] , [ ] , [ ] ] ;
2021: LD_ADDR_EXP 143
2025: PUSH
2026: EMPTY
2027: PUSH
2028: EMPTY
2029: PUSH
2030: EMPTY
2031: PUSH
2032: EMPTY
2033: PUSH
2034: EMPTY
2035: LIST
2036: LIST
2037: LIST
2038: LIST
2039: ST_TO_ADDR
// player_alliance_uns_red = [ ] ;
2040: LD_ADDR_EXP 144
2044: PUSH
2045: EMPTY
2046: ST_TO_ADDR
// player_alliance_uns_destroy = [ [ ] , [ ] ] ;
2047: LD_ADDR_EXP 145
2051: PUSH
2052: EMPTY
2053: PUSH
2054: EMPTY
2055: PUSH
2056: EMPTY
2057: LIST
2058: LIST
2059: ST_TO_ADDR
// elimination_order = [ ] ;
2060: LD_ADDR_EXP 146
2064: PUSH
2065: EMPTY
2066: ST_TO_ADDR
// player_starting_units = [ ] ;
2067: LD_ADDR_EXP 147
2071: PUSH
2072: EMPTY
2073: ST_TO_ADDR
// all_artifacts_researched = false ;
2074: LD_ADDR_EXP 148
2078: PUSH
2079: LD_INT 0
2081: ST_TO_ADDR
// player_fired_siberite_bomb = false ;
2082: LD_ADDR_EXP 149
2086: PUSH
2087: LD_INT 0
2089: ST_TO_ADDR
// rus_extra_def_locs = [ ] ;
2090: LD_ADDR_EXP 150
2094: PUSH
2095: EMPTY
2096: ST_TO_ADDR
// player_has_built_sib_bomb = false ;
2097: LD_ADDR_EXP 151
2101: PUSH
2102: LD_INT 0
2104: ST_TO_ADDR
// init_dialogue_start = false ;
2105: LD_ADDR_EXP 152
2109: PUSH
2110: LD_INT 0
2112: ST_TO_ADDR
// powell_call_start = false ;
2113: LD_ADDR_EXP 153
2117: PUSH
2118: LD_INT 0
2120: ST_TO_ADDR
// intermediate_dialogue_start = false ;
2121: LD_ADDR_EXP 154
2125: PUSH
2126: LD_INT 0
2128: ST_TO_ADDR
// alliance_call_start = false ;
2129: LD_ADDR_EXP 155
2133: PUSH
2134: LD_INT 0
2136: ST_TO_ADDR
// InitArtifactVariables ;
2137: CALL 102872 0 0
// PrepareSides ;
2141: CALL 2544 0 0
// PrepareNature ;
2145: CALL 2916 0 0
// PreparePlayer ;
2149: CALL 3565 0 0
// ScanBuildings ;
2153: CALL 5606 0 0
// PrepareComputerSides ;
2157: CALL 8961 0 0
// PrepareMines ;
2161: CALL 14001 0 0
// InitiateTimeShiftData ;
2165: CALL 2347 0 0
// Action ;
2169: CALL 15620 0 0
// end ;
2173: END
// function Initiate_ai_contact_time ; var i ; begin
2174: LD_INT 0
2176: PPUSH
2177: PPUSH
// ai_contact_time = [ ] ;
2178: LD_ADDR_EXP 112
2182: PUSH
2183: EMPTY
2184: ST_TO_ADDR
// for i = 1 to 8 do
2185: LD_ADDR_VAR 0 2
2189: PUSH
2190: DOUBLE
2191: LD_INT 1
2193: DEC
2194: ST_TO_ADDR
2195: LD_INT 8
2197: PUSH
2198: FOR_TO
2199: IFFALSE 2251
// ai_contact_time = ai_contact_time ^ [ [ 100000 , 100000 , 100000 , 100000 , 100000 , 100000 , 100000 , 100000 ] ] ;
2201: LD_ADDR_EXP 112
2205: PUSH
2206: LD_EXP 112
2210: PUSH
2211: LD_INT 100000
2213: PUSH
2214: LD_INT 100000
2216: PUSH
2217: LD_INT 100000
2219: PUSH
2220: LD_INT 100000
2222: PUSH
2223: LD_INT 100000
2225: PUSH
2226: LD_INT 100000
2228: PUSH
2229: LD_INT 100000
2231: PUSH
2232: LD_INT 100000
2234: PUSH
2235: EMPTY
2236: LIST
2237: LIST
2238: LIST
2239: LIST
2240: LIST
2241: LIST
2242: LIST
2243: LIST
2244: PUSH
2245: EMPTY
2246: LIST
2247: ADD
2248: ST_TO_ADDR
2249: GO 2198
2251: POP
2252: POP
// end ;
2253: LD_VAR 0 1
2257: RET
// function Initiate_ai_sib_bomb_used_time_matrix ; var base ; begin
2258: LD_INT 0
2260: PPUSH
2261: PPUSH
// ai_sib_bomb_used_time_matrix = [ ] ;
2262: LD_ADDR_EXP 115
2266: PUSH
2267: EMPTY
2268: ST_TO_ADDR
// for base in ai_bases do
2269: LD_ADDR_VAR 0 2
2273: PUSH
2274: LD_EXP 39
2278: PUSH
2279: FOR_IN
2280: IFFALSE 2340
// ai_sib_bomb_used_time_matrix = ai_sib_bomb_used_time_matrix ^ [ [ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ] ] ;
2282: LD_ADDR_EXP 115
2286: PUSH
2287: LD_EXP 115
2291: PUSH
2292: LD_INT 1
2294: NEG
2295: PUSH
2296: LD_INT 1
2298: NEG
2299: PUSH
2300: LD_INT 1
2302: NEG
2303: PUSH
2304: LD_INT 1
2306: NEG
2307: PUSH
2308: LD_INT 1
2310: NEG
2311: PUSH
2312: LD_INT 1
2314: NEG
2315: PUSH
2316: LD_INT 1
2318: NEG
2319: PUSH
2320: LD_INT 1
2322: NEG
2323: PUSH
2324: EMPTY
2325: LIST
2326: LIST
2327: LIST
2328: LIST
2329: LIST
2330: LIST
2331: LIST
2332: LIST
2333: PUSH
2334: EMPTY
2335: LIST
2336: ADD
2337: ST_TO_ADDR
2338: GO 2279
2340: POP
2341: POP
// end ;
2342: LD_VAR 0 1
2346: RET
// function InitiateTimeShiftData ; var side ; begin
2347: LD_INT 0
2349: PPUSH
2350: PPUSH
// for side = 1 to 8 do
2351: LD_ADDR_VAR 0 2
2355: PUSH
2356: DOUBLE
2357: LD_INT 1
2359: DEC
2360: ST_TO_ADDR
2361: LD_INT 8
2363: PUSH
2364: FOR_TO
2365: IFFALSE 2537
// if Researched ( side , tech_st3 ) then
2367: LD_VAR 0 2
2371: PPUSH
2372: LD_INT 65
2374: PPUSH
2375: CALL_OW 325
2379: IFFALSE 2413
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 420 , 10 ] ) else
2381: LD_ADDR_EXP 109
2385: PUSH
2386: LD_EXP 109
2390: PPUSH
2391: LD_VAR 0 2
2395: PPUSH
2396: LD_INT 420
2398: PUSH
2399: LD_INT 10
2401: PUSH
2402: EMPTY
2403: LIST
2404: LIST
2405: PPUSH
2406: CALL_OW 1
2410: ST_TO_ADDR
2411: GO 2535
// if Researched ( side , tech_st2 ) then
2413: LD_VAR 0 2
2417: PPUSH
2418: LD_INT 64
2420: PPUSH
2421: CALL_OW 325
2425: IFFALSE 2459
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 420 , 10 ] ) else
2427: LD_ADDR_EXP 109
2431: PUSH
2432: LD_EXP 109
2436: PPUSH
2437: LD_VAR 0 2
2441: PPUSH
2442: LD_INT 420
2444: PUSH
2445: LD_INT 10
2447: PUSH
2448: EMPTY
2449: LIST
2450: LIST
2451: PPUSH
2452: CALL_OW 1
2456: ST_TO_ADDR
2457: GO 2535
// if Researched ( side , tech_st1 ) then
2459: LD_VAR 0 2
2463: PPUSH
2464: LD_INT 63
2466: PPUSH
2467: CALL_OW 325
2471: IFFALSE 2505
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 320 , 7 ] ) else
2473: LD_ADDR_EXP 109
2477: PUSH
2478: LD_EXP 109
2482: PPUSH
2483: LD_VAR 0 2
2487: PPUSH
2488: LD_INT 320
2490: PUSH
2491: LD_INT 7
2493: PUSH
2494: EMPTY
2495: LIST
2496: LIST
2497: PPUSH
2498: CALL_OW 1
2502: ST_TO_ADDR
2503: GO 2535
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 215 , 4 ] ) ;
2505: LD_ADDR_EXP 109
2509: PUSH
2510: LD_EXP 109
2514: PPUSH
2515: LD_VAR 0 2
2519: PPUSH
2520: LD_INT 215
2522: PUSH
2523: LD_INT 4
2525: PUSH
2526: EMPTY
2527: LIST
2528: LIST
2529: PPUSH
2530: CALL_OW 1
2534: ST_TO_ADDR
2535: GO 2364
2537: POP
2538: POP
// end ;
2539: LD_VAR 0 1
2543: RET
// function PrepareSides ; begin
2544: LD_INT 0
2546: PPUSH
// nature = 0 ;
2547: LD_ADDR_EXP 4
2551: PUSH
2552: LD_INT 0
2554: ST_TO_ADDR
// americans = 1 ;
2555: LD_ADDR_EXP 7
2559: PUSH
2560: LD_INT 1
2562: ST_TO_ADDR
// arabians = 2 ;
2563: LD_ADDR_EXP 6
2567: PUSH
2568: LD_INT 2
2570: ST_TO_ADDR
// russians = 3 ;
2571: LD_ADDR_EXP 3
2575: PUSH
2576: LD_INT 3
2578: ST_TO_ADDR
// russians_alt = 6 ;
2579: LD_ADDR_EXP 8
2583: PUSH
2584: LD_INT 6
2586: ST_TO_ADDR
// alliance = 7 ;
2587: LD_ADDR_EXP 5
2591: PUSH
2592: LD_INT 7
2594: ST_TO_ADDR
// you = 8 ;
2595: LD_ADDR_EXP 2
2599: PUSH
2600: LD_INT 8
2602: ST_TO_ADDR
// mines_side = 0 ;
2603: LD_ADDR_EXP 9
2607: PUSH
2608: LD_INT 0
2610: ST_TO_ADDR
// SetAttitude ( americans , arabians , att_enemy , true ) ;
2611: LD_EXP 7
2615: PPUSH
2616: LD_EXP 6
2620: PPUSH
2621: LD_INT 2
2623: PPUSH
2624: LD_INT 1
2626: PPUSH
2627: CALL_OW 80
// SetAttitude ( americans , russians , att_enemy , true ) ;
2631: LD_EXP 7
2635: PPUSH
2636: LD_EXP 3
2640: PPUSH
2641: LD_INT 2
2643: PPUSH
2644: LD_INT 1
2646: PPUSH
2647: CALL_OW 80
// SetAttitude ( americans , russians_alt , att_friend , true ) ;
2651: LD_EXP 7
2655: PPUSH
2656: LD_EXP 8
2660: PPUSH
2661: LD_INT 1
2663: PPUSH
2664: LD_INT 1
2666: PPUSH
2667: CALL_OW 80
// SetAttitude ( americans , alliance , att_enemy , true ) ;
2671: LD_EXP 7
2675: PPUSH
2676: LD_EXP 5
2680: PPUSH
2681: LD_INT 2
2683: PPUSH
2684: LD_INT 1
2686: PPUSH
2687: CALL_OW 80
// SetAttitude ( americans , you , att_enemy , true ) ;
2691: LD_EXP 7
2695: PPUSH
2696: LD_EXP 2
2700: PPUSH
2701: LD_INT 2
2703: PPUSH
2704: LD_INT 1
2706: PPUSH
2707: CALL_OW 80
// SetAttitude ( arabians , russians , att_enemy , true ) ;
2711: LD_EXP 6
2715: PPUSH
2716: LD_EXP 3
2720: PPUSH
2721: LD_INT 2
2723: PPUSH
2724: LD_INT 1
2726: PPUSH
2727: CALL_OW 80
// SetAttitude ( arabians , russians_alt , att_friend , true ) ;
2731: LD_EXP 6
2735: PPUSH
2736: LD_EXP 8
2740: PPUSH
2741: LD_INT 1
2743: PPUSH
2744: LD_INT 1
2746: PPUSH
2747: CALL_OW 80
// SetAttitude ( arabians , alliance , att_enemy , true ) ;
2751: LD_EXP 6
2755: PPUSH
2756: LD_EXP 5
2760: PPUSH
2761: LD_INT 2
2763: PPUSH
2764: LD_INT 1
2766: PPUSH
2767: CALL_OW 80
// SetAttitude ( arabians , you , att_enemy , true ) ;
2771: LD_EXP 6
2775: PPUSH
2776: LD_EXP 2
2780: PPUSH
2781: LD_INT 2
2783: PPUSH
2784: LD_INT 1
2786: PPUSH
2787: CALL_OW 80
// SetAttitude ( russians , russians_alt , att_friend , true ) ;
2791: LD_EXP 3
2795: PPUSH
2796: LD_EXP 8
2800: PPUSH
2801: LD_INT 1
2803: PPUSH
2804: LD_INT 1
2806: PPUSH
2807: CALL_OW 80
// SetAttitude ( russians , alliance , att_enemy , true ) ;
2811: LD_EXP 3
2815: PPUSH
2816: LD_EXP 5
2820: PPUSH
2821: LD_INT 2
2823: PPUSH
2824: LD_INT 1
2826: PPUSH
2827: CALL_OW 80
// SetAttitude ( russians , you , att_enemy , true ) ;
2831: LD_EXP 3
2835: PPUSH
2836: LD_EXP 2
2840: PPUSH
2841: LD_INT 2
2843: PPUSH
2844: LD_INT 1
2846: PPUSH
2847: CALL_OW 80
// SetAttitude ( russians_alt , alliance , att_friend , true ) ;
2851: LD_EXP 8
2855: PPUSH
2856: LD_EXP 5
2860: PPUSH
2861: LD_INT 1
2863: PPUSH
2864: LD_INT 1
2866: PPUSH
2867: CALL_OW 80
// SetAttitude ( russians_alt , you , att_friend , true ) ;
2871: LD_EXP 8
2875: PPUSH
2876: LD_EXP 2
2880: PPUSH
2881: LD_INT 1
2883: PPUSH
2884: LD_INT 1
2886: PPUSH
2887: CALL_OW 80
// SetAttitude ( alliance , you , att_enemy , true ) ;
2891: LD_EXP 5
2895: PPUSH
2896: LD_EXP 2
2900: PPUSH
2901: LD_INT 2
2903: PPUSH
2904: LD_INT 1
2906: PPUSH
2907: CALL_OW 80
// end ;
2911: LD_VAR 0 1
2915: RET
// function PrepareNature ; var i , spots , num , agres , count ; begin
2916: LD_INT 0
2918: PPUSH
2919: PPUSH
2920: PPUSH
2921: PPUSH
2922: PPUSH
2923: PPUSH
// spots = [ [ 70 , 62 ] , [ 102 , 110 ] , [ 80 , 147 ] , [ 82 , 155 ] , [ 171 , 195 ] , [ 183 , 187 ] , [ 122 , 118 ] ] ;
2924: LD_ADDR_VAR 0 3
2928: PUSH
2929: LD_INT 70
2931: PUSH
2932: LD_INT 62
2934: PUSH
2935: EMPTY
2936: LIST
2937: LIST
2938: PUSH
2939: LD_INT 102
2941: PUSH
2942: LD_INT 110
2944: PUSH
2945: EMPTY
2946: LIST
2947: LIST
2948: PUSH
2949: LD_INT 80
2951: PUSH
2952: LD_INT 147
2954: PUSH
2955: EMPTY
2956: LIST
2957: LIST
2958: PUSH
2959: LD_INT 82
2961: PUSH
2962: LD_INT 155
2964: PUSH
2965: EMPTY
2966: LIST
2967: LIST
2968: PUSH
2969: LD_INT 171
2971: PUSH
2972: LD_INT 195
2974: PUSH
2975: EMPTY
2976: LIST
2977: LIST
2978: PUSH
2979: LD_INT 183
2981: PUSH
2982: LD_INT 187
2984: PUSH
2985: EMPTY
2986: LIST
2987: LIST
2988: PUSH
2989: LD_INT 122
2991: PUSH
2992: LD_INT 118
2994: PUSH
2995: EMPTY
2996: LIST
2997: LIST
2998: PUSH
2999: EMPTY
3000: LIST
3001: LIST
3002: LIST
3003: LIST
3004: LIST
3005: LIST
3006: LIST
3007: ST_TO_ADDR
// InitUc ;
3008: CALL_OW 18
// InitHc ;
3012: CALL_OW 19
// uc_side = nature ;
3016: LD_ADDR_OWVAR 20
3020: PUSH
3021: LD_EXP 4
3025: ST_TO_ADDR
// uc_nation = nation_nature ;
3026: LD_ADDR_OWVAR 21
3030: PUSH
3031: LD_INT 0
3033: ST_TO_ADDR
// agres = - 10 + difficulty * 20 ;
3034: LD_ADDR_VAR 0 5
3038: PUSH
3039: LD_INT 10
3041: NEG
3042: PUSH
3043: LD_OWVAR 67
3047: PUSH
3048: LD_INT 20
3050: MUL
3051: PLUS
3052: ST_TO_ADDR
// count = [ 3 , 2 , 1 ] [ difficulty ] ;
3053: LD_ADDR_VAR 0 6
3057: PUSH
3058: LD_INT 3
3060: PUSH
3061: LD_INT 2
3063: PUSH
3064: LD_INT 1
3066: PUSH
3067: EMPTY
3068: LIST
3069: LIST
3070: LIST
3071: PUSH
3072: LD_OWVAR 67
3076: ARRAY
3077: ST_TO_ADDR
// hc_class = class_apeman ;
3078: LD_ADDR_OWVAR 28
3082: PUSH
3083: LD_INT 12
3085: ST_TO_ADDR
// for i = 1 to count do
3086: LD_ADDR_VAR 0 2
3090: PUSH
3091: DOUBLE
3092: LD_INT 1
3094: DEC
3095: ST_TO_ADDR
3096: LD_VAR 0 6
3100: PUSH
3101: FOR_TO
3102: IFFALSE 3330
// begin if spots = 0 then
3104: LD_VAR 0 3
3108: PUSH
3109: LD_INT 0
3111: EQUAL
3112: IFFALSE 3118
// exit ;
3114: POP
3115: POP
3116: GO 3560
// uc_direction = Rand ( 0 , 5 ) ;
3118: LD_ADDR_OWVAR 24
3122: PUSH
3123: LD_INT 0
3125: PPUSH
3126: LD_INT 5
3128: PPUSH
3129: CALL_OW 12
3133: ST_TO_ADDR
// hc_agressivity = Rand ( - 1 * agres , agres ) ;
3134: LD_ADDR_OWVAR 35
3138: PUSH
3139: LD_INT 1
3141: NEG
3142: PUSH
3143: LD_VAR 0 5
3147: MUL
3148: PPUSH
3149: LD_VAR 0 5
3153: PPUSH
3154: CALL_OW 12
3158: ST_TO_ADDR
// hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
3159: LD_ADDR_OWVAR 29
3163: PUSH
3164: LD_INT 11
3166: PPUSH
3167: LD_INT 13
3169: PPUSH
3170: CALL_OW 12
3174: PUSH
3175: LD_INT 10
3177: PPUSH
3178: LD_INT 11
3180: PPUSH
3181: CALL_OW 12
3185: PUSH
3186: EMPTY
3187: LIST
3188: LIST
3189: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
3190: LD_ADDR_OWVAR 27
3194: PUSH
3195: LD_INT 1
3197: PPUSH
3198: LD_INT 2
3200: PPUSH
3201: CALL_OW 12
3205: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 1 ) , Rand ( 0 , 1 ) , 0 , 0 ] ;
3206: LD_ADDR_OWVAR 31
3210: PUSH
3211: LD_INT 0
3213: PPUSH
3214: LD_INT 1
3216: PPUSH
3217: CALL_OW 12
3221: PUSH
3222: LD_INT 0
3224: PPUSH
3225: LD_INT 1
3227: PPUSH
3228: CALL_OW 12
3232: PUSH
3233: LD_INT 0
3235: PUSH
3236: LD_INT 0
3238: PUSH
3239: EMPTY
3240: LIST
3241: LIST
3242: LIST
3243: LIST
3244: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
3245: LD_ADDR_VAR 0 4
3249: PUSH
3250: LD_INT 1
3252: PPUSH
3253: LD_VAR 0 3
3257: PPUSH
3258: CALL_OW 12
3262: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
3263: CALL_OW 44
3267: PPUSH
3268: LD_VAR 0 3
3272: PUSH
3273: LD_VAR 0 4
3277: ARRAY
3278: PUSH
3279: LD_INT 1
3281: ARRAY
3282: PPUSH
3283: LD_VAR 0 3
3287: PUSH
3288: LD_VAR 0 4
3292: ARRAY
3293: PUSH
3294: LD_INT 2
3296: ARRAY
3297: PPUSH
3298: LD_INT 5
3300: PPUSH
3301: LD_INT 0
3303: PPUSH
3304: CALL_OW 50
// spots = Delete ( spots , num ) ;
3308: LD_ADDR_VAR 0 3
3312: PUSH
3313: LD_VAR 0 3
3317: PPUSH
3318: LD_VAR 0 4
3322: PPUSH
3323: CALL_OW 3
3327: ST_TO_ADDR
// end ;
3328: GO 3101
3330: POP
3331: POP
// hc_class = class_phororhacos ;
3332: LD_ADDR_OWVAR 28
3336: PUSH
3337: LD_INT 18
3339: ST_TO_ADDR
// hc_gallery = nature_foreg ;
3340: LD_ADDR_OWVAR 33
3344: PUSH
3345: LD_STRING nature_foreg
3347: ST_TO_ADDR
// hc_face_number = 1 ;
3348: LD_ADDR_OWVAR 34
3352: PUSH
3353: LD_INT 1
3355: ST_TO_ADDR
// hc_skills = [ 0 , 0 , 0 , 0 ] ;
3356: LD_ADDR_OWVAR 31
3360: PUSH
3361: LD_INT 0
3363: PUSH
3364: LD_INT 0
3366: PUSH
3367: LD_INT 0
3369: PUSH
3370: LD_INT 0
3372: PUSH
3373: EMPTY
3374: LIST
3375: LIST
3376: LIST
3377: LIST
3378: ST_TO_ADDR
// for i = 1 to 2 do
3379: LD_ADDR_VAR 0 2
3383: PUSH
3384: DOUBLE
3385: LD_INT 1
3387: DEC
3388: ST_TO_ADDR
3389: LD_INT 2
3391: PUSH
3392: FOR_TO
3393: IFFALSE 3558
// begin if spots = 0 then
3395: LD_VAR 0 3
3399: PUSH
3400: LD_INT 0
3402: EQUAL
3403: IFFALSE 3409
// exit ;
3405: POP
3406: POP
3407: GO 3560
// uc_direction = Rand ( 0 , 5 ) ;
3409: LD_ADDR_OWVAR 24
3413: PUSH
3414: LD_INT 0
3416: PPUSH
3417: LD_INT 5
3419: PPUSH
3420: CALL_OW 12
3424: ST_TO_ADDR
// hc_agressivity = Rand ( - 30 , 0 ) ;
3425: LD_ADDR_OWVAR 35
3429: PUSH
3430: LD_INT 30
3432: NEG
3433: PPUSH
3434: LD_INT 0
3436: PPUSH
3437: CALL_OW 12
3441: ST_TO_ADDR
// hc_attr = [ Rand ( 9 , 10 ) , Rand ( 11 , 12 ) ] ;
3442: LD_ADDR_OWVAR 29
3446: PUSH
3447: LD_INT 9
3449: PPUSH
3450: LD_INT 10
3452: PPUSH
3453: CALL_OW 12
3457: PUSH
3458: LD_INT 11
3460: PPUSH
3461: LD_INT 12
3463: PPUSH
3464: CALL_OW 12
3468: PUSH
3469: EMPTY
3470: LIST
3471: LIST
3472: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
3473: LD_ADDR_VAR 0 4
3477: PUSH
3478: LD_INT 1
3480: PPUSH
3481: LD_VAR 0 3
3485: PPUSH
3486: CALL_OW 12
3490: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
3491: CALL_OW 44
3495: PPUSH
3496: LD_VAR 0 3
3500: PUSH
3501: LD_VAR 0 4
3505: ARRAY
3506: PUSH
3507: LD_INT 1
3509: ARRAY
3510: PPUSH
3511: LD_VAR 0 3
3515: PUSH
3516: LD_VAR 0 4
3520: ARRAY
3521: PUSH
3522: LD_INT 2
3524: ARRAY
3525: PPUSH
3526: LD_INT 5
3528: PPUSH
3529: LD_INT 0
3531: PPUSH
3532: CALL_OW 50
// spots = Delete ( spots , num ) ;
3536: LD_ADDR_VAR 0 3
3540: PUSH
3541: LD_VAR 0 3
3545: PPUSH
3546: LD_VAR 0 4
3550: PPUSH
3551: CALL_OW 3
3555: ST_TO_ADDR
// end ;
3556: GO 3392
3558: POP
3559: POP
// end ;
3560: LD_VAR 0 1
3564: RET
// function PreparePlayer ; var others , i , player_uns , base_ok , val , un , k , temp_list ; begin
3565: LD_INT 0
3567: PPUSH
3568: PPUSH
3569: PPUSH
3570: PPUSH
3571: PPUSH
3572: PPUSH
3573: PPUSH
3574: PPUSH
3575: PPUSH
// InitHc ;
3576: CALL_OW 19
// InitUc ;
3580: CALL_OW 18
// uc_side = you ;
3584: LD_ADDR_OWVAR 20
3588: PUSH
3589: LD_EXP 2
3593: ST_TO_ADDR
// uc_nation = nation_arabian ;
3594: LD_ADDR_OWVAR 21
3598: PUSH
3599: LD_INT 2
3601: ST_TO_ADDR
// if not testing then
3602: LD_EXP 1
3606: NOT
3607: IFFALSE 3797
// begin Heike = LoadPlayerChar ( Heike ) ;
3609: LD_ADDR_EXP 10
3613: PUSH
3614: LD_STRING Heike
3616: PPUSH
3617: CALL 5554 0 1
3621: ST_TO_ADDR
// Olaf = LoadPlayerChar ( Olaf ) ;
3622: LD_ADDR_EXP 11
3626: PUSH
3627: LD_STRING Olaf
3629: PPUSH
3630: CALL 5554 0 1
3634: ST_TO_ADDR
// Sonya = LoadPlayerChar ( Sonya ) ;
3635: LD_ADDR_EXP 12
3639: PUSH
3640: LD_STRING Sonya
3642: PPUSH
3643: CALL 5554 0 1
3647: ST_TO_ADDR
// Oswald = LoadPlayerChar ( Oswald ) ;
3648: LD_ADDR_EXP 13
3652: PUSH
3653: LD_STRING Oswald
3655: PPUSH
3656: CALL 5554 0 1
3660: ST_TO_ADDR
// Ralph = LoadPlayerChar ( Ralph ) ;
3661: LD_ADDR_EXP 14
3665: PUSH
3666: LD_STRING Ralph
3668: PPUSH
3669: CALL 5554 0 1
3673: ST_TO_ADDR
// Kowalski = LoadPlayerChar ( Kowalski ) ;
3674: LD_ADDR_EXP 15
3678: PUSH
3679: LD_STRING Kowalski
3681: PPUSH
3682: CALL 5554 0 1
3686: ST_TO_ADDR
// Suze = LoadPlayerChar ( Suze ) ;
3687: LD_ADDR_EXP 16
3691: PUSH
3692: LD_STRING Suze
3694: PPUSH
3695: CALL 5554 0 1
3699: ST_TO_ADDR
// MarkB = LoadPlayerChar ( MarkB ) ;
3700: LD_ADDR_EXP 17
3704: PUSH
3705: LD_STRING MarkB
3707: PPUSH
3708: CALL 5554 0 1
3712: ST_TO_ADDR
// Kurt = LoadPlayerChar ( Kurt ) ;
3713: LD_ADDR_EXP 18
3717: PUSH
3718: LD_STRING Kurt
3720: PPUSH
3721: CALL 5554 0 1
3725: ST_TO_ADDR
// Martin = LoadPlayerChar ( Martin ) ;
3726: LD_ADDR_EXP 19
3730: PUSH
3731: LD_STRING Martin
3733: PPUSH
3734: CALL 5554 0 1
3738: ST_TO_ADDR
// Louis = LoadPlayerChar ( Louis ) ;
3739: LD_ADDR_EXP 20
3743: PUSH
3744: LD_STRING Louis
3746: PPUSH
3747: CALL 5554 0 1
3751: ST_TO_ADDR
// Khattam = LoadPlayerChar ( Khattam ) ;
3752: LD_ADDR_EXP 21
3756: PUSH
3757: LD_STRING Khattam
3759: PPUSH
3760: CALL 5554 0 1
3764: ST_TO_ADDR
// Kozlov = LoadPlayerChar ( Kozlov ) ;
3765: LD_ADDR_EXP 22
3769: PUSH
3770: LD_STRING Kozlov
3772: PPUSH
3773: CALL 5554 0 1
3777: ST_TO_ADDR
// others = CreateCharacterSet ( Others_15a ) diff 0 ;
3778: LD_ADDR_VAR 0 2
3782: PUSH
3783: LD_STRING Others_15a
3785: PPUSH
3786: CALL_OW 31
3790: PUSH
3791: LD_INT 0
3793: DIFF
3794: ST_TO_ADDR
// end else
3795: GO 4297
// begin InitHc ;
3797: CALL_OW 19
// PrepareSoldier ( sex_female , 10 ) ;
3801: LD_INT 2
3803: PPUSH
3804: LD_INT 10
3806: PPUSH
3807: CALL_OW 381
// hc_name = Heike ;
3811: LD_ADDR_OWVAR 26
3815: PUSH
3816: LD_STRING Heike
3818: ST_TO_ADDR
// Heike = CreateHuman ;
3819: LD_ADDR_EXP 10
3823: PUSH
3824: CALL_OW 44
3828: ST_TO_ADDR
// PrepareMechanic ( sex_male , 10 ) ;
3829: LD_INT 1
3831: PPUSH
3832: LD_INT 10
3834: PPUSH
3835: CALL_OW 383
// hc_name = Olaf ;
3839: LD_ADDR_OWVAR 26
3843: PUSH
3844: LD_STRING Olaf
3846: ST_TO_ADDR
// Olaf = CreateHuman ;
3847: LD_ADDR_EXP 11
3851: PUSH
3852: CALL_OW 44
3856: ST_TO_ADDR
// PrepareScientist ( sex_female , 10 ) ;
3857: LD_INT 2
3859: PPUSH
3860: LD_INT 10
3862: PPUSH
3863: CALL_OW 384
// hc_name = Sonya ;
3867: LD_ADDR_OWVAR 26
3871: PUSH
3872: LD_STRING Sonya
3874: ST_TO_ADDR
// Sonya = CreateHuman ;
3875: LD_ADDR_EXP 12
3879: PUSH
3880: CALL_OW 44
3884: ST_TO_ADDR
// PrepareSoldier ( sex_male , 10 ) ;
3885: LD_INT 1
3887: PPUSH
3888: LD_INT 10
3890: PPUSH
3891: CALL_OW 381
// hc_name = Oswald ;
3895: LD_ADDR_OWVAR 26
3899: PUSH
3900: LD_STRING Oswald
3902: ST_TO_ADDR
// Oswald = CreateHuman ;
3903: LD_ADDR_EXP 13
3907: PUSH
3908: CALL_OW 44
3912: ST_TO_ADDR
// PrepareSoldier ( sex_male , 10 ) ;
3913: LD_INT 1
3915: PPUSH
3916: LD_INT 10
3918: PPUSH
3919: CALL_OW 381
// hc_name = Ralph ;
3923: LD_ADDR_OWVAR 26
3927: PUSH
3928: LD_STRING Ralph
3930: ST_TO_ADDR
// Ralph = CreateHuman ;
3931: LD_ADDR_EXP 14
3935: PUSH
3936: CALL_OW 44
3940: ST_TO_ADDR
// PrepareSoldier ( sex_male , 10 ) ;
3941: LD_INT 1
3943: PPUSH
3944: LD_INT 10
3946: PPUSH
3947: CALL_OW 381
// hc_name = Kowalski ;
3951: LD_ADDR_OWVAR 26
3955: PUSH
3956: LD_STRING Kowalski
3958: ST_TO_ADDR
// Kowalski = CreateHuman ;
3959: LD_ADDR_EXP 15
3963: PUSH
3964: CALL_OW 44
3968: ST_TO_ADDR
// PrepareSoldier ( sex_female , 10 ) ;
3969: LD_INT 2
3971: PPUSH
3972: LD_INT 10
3974: PPUSH
3975: CALL_OW 381
// hc_name = Suze ;
3979: LD_ADDR_OWVAR 26
3983: PUSH
3984: LD_STRING Suze
3986: ST_TO_ADDR
// Suze = CreateHuman ;
3987: LD_ADDR_EXP 16
3991: PUSH
3992: CALL_OW 44
3996: ST_TO_ADDR
// PrepareScientist ( sex_male , 10 ) ;
3997: LD_INT 1
3999: PPUSH
4000: LD_INT 10
4002: PPUSH
4003: CALL_OW 384
// hc_name = Mark ;
4007: LD_ADDR_OWVAR 26
4011: PUSH
4012: LD_STRING Mark
4014: ST_TO_ADDR
// MarkB = CreateHuman ;
4015: LD_ADDR_EXP 17
4019: PUSH
4020: CALL_OW 44
4024: ST_TO_ADDR
// PrepareSoldier ( sex_male , 10 ) ;
4025: LD_INT 1
4027: PPUSH
4028: LD_INT 10
4030: PPUSH
4031: CALL_OW 381
// hc_name = Kurt ;
4035: LD_ADDR_OWVAR 26
4039: PUSH
4040: LD_STRING Kurt
4042: ST_TO_ADDR
// Kurt = CreateHuman ;
4043: LD_ADDR_EXP 18
4047: PUSH
4048: CALL_OW 44
4052: ST_TO_ADDR
// PrepareMechanic ( sex_male , 10 ) ;
4053: LD_INT 1
4055: PPUSH
4056: LD_INT 10
4058: PPUSH
4059: CALL_OW 383
// hc_name = Martin ;
4063: LD_ADDR_OWVAR 26
4067: PUSH
4068: LD_STRING Martin
4070: ST_TO_ADDR
// Martin = CreateHuman ;
4071: LD_ADDR_EXP 19
4075: PUSH
4076: CALL_OW 44
4080: ST_TO_ADDR
// PrepareEngineer ( sex_male , 10 ) ;
4081: LD_INT 1
4083: PPUSH
4084: LD_INT 10
4086: PPUSH
4087: CALL_OW 382
// hc_name = Louis ;
4091: LD_ADDR_OWVAR 26
4095: PUSH
4096: LD_STRING Louis
4098: ST_TO_ADDR
// Louis = CreateHuman ;
4099: LD_ADDR_EXP 20
4103: PUSH
4104: CALL_OW 44
4108: ST_TO_ADDR
// SetClass ( Louis , class_mortar ) ;
4109: LD_EXP 20
4113: PPUSH
4114: LD_INT 8
4116: PPUSH
4117: CALL_OW 336
// PrepareScientist ( sex_male , 10 ) ;
4121: LD_INT 1
4123: PPUSH
4124: LD_INT 10
4126: PPUSH
4127: CALL_OW 384
// hc_name = Khattam ;
4131: LD_ADDR_OWVAR 26
4135: PUSH
4136: LD_STRING Khattam
4138: ST_TO_ADDR
// Khattam = CreateHuman ;
4139: LD_ADDR_EXP 21
4143: PUSH
4144: CALL_OW 44
4148: ST_TO_ADDR
// uc_nation = nation_russian ;
4149: LD_ADDR_OWVAR 21
4153: PUSH
4154: LD_INT 3
4156: ST_TO_ADDR
// PrepareScientist ( sex_male , 10 ) ;
4157: LD_INT 1
4159: PPUSH
4160: LD_INT 10
4162: PPUSH
4163: CALL_OW 384
// hc_name = Kozlov ;
4167: LD_ADDR_OWVAR 26
4171: PUSH
4172: LD_STRING Kozlov
4174: ST_TO_ADDR
// Kozlov = CreateHuman ;
4175: LD_ADDR_EXP 22
4179: PUSH
4180: CALL_OW 44
4184: ST_TO_ADDR
// others = [ ] ;
4185: LD_ADDR_VAR 0 2
4189: PUSH
4190: EMPTY
4191: ST_TO_ADDR
// uc_nation = nation_arabian ;
4192: LD_ADDR_OWVAR 21
4196: PUSH
4197: LD_INT 2
4199: ST_TO_ADDR
// InitHc ;
4200: CALL_OW 19
// for i = 1 to [ 5 , 3 , 1 ] [ difficulty ] do
4204: LD_ADDR_VAR 0 3
4208: PUSH
4209: DOUBLE
4210: LD_INT 1
4212: DEC
4213: ST_TO_ADDR
4214: LD_INT 5
4216: PUSH
4217: LD_INT 3
4219: PUSH
4220: LD_INT 1
4222: PUSH
4223: EMPTY
4224: LIST
4225: LIST
4226: LIST
4227: PUSH
4228: LD_OWVAR 67
4232: ARRAY
4233: PUSH
4234: FOR_TO
4235: IFFALSE 4295
// begin PrepareHuman ( false , [ class_soldier , class_engineer , class_mechanic , class_scientistic ] [ Rand ( 1 , 4 ) ] , 9 ) ;
4237: LD_INT 0
4239: PPUSH
4240: LD_INT 1
4242: PUSH
4243: LD_INT 2
4245: PUSH
4246: LD_INT 3
4248: PUSH
4249: LD_INT 4
4251: PUSH
4252: EMPTY
4253: LIST
4254: LIST
4255: LIST
4256: LIST
4257: PUSH
4258: LD_INT 1
4260: PPUSH
4261: LD_INT 4
4263: PPUSH
4264: CALL_OW 12
4268: ARRAY
4269: PPUSH
4270: LD_INT 9
4272: PPUSH
4273: CALL_OW 380
// others = others ^ CreateHuman ;
4277: LD_ADDR_VAR 0 2
4281: PUSH
4282: LD_VAR 0 2
4286: PUSH
4287: CALL_OW 44
4291: ADD
4292: ST_TO_ADDR
// end ;
4293: GO 4234
4295: POP
4296: POP
// end ; if Kozlov > 0 then
4297: LD_EXP 22
4301: PUSH
4302: LD_INT 0
4304: GREATER
4305: IFFALSE 4322
// SetTech ( tech_sibfiss , you , state_enabled ) ;
4307: LD_INT 25
4309: PPUSH
4310: LD_EXP 2
4314: PPUSH
4315: LD_INT 1
4317: PPUSH
4318: CALL_OW 322
// player_uns = ( ( [ Heike , Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis , Khattam , Kozlov ] ) diff 0 ) ^ others ;
4322: LD_ADDR_VAR 0 4
4326: PUSH
4327: LD_EXP 10
4331: PUSH
4332: LD_EXP 11
4336: PUSH
4337: LD_EXP 12
4341: PUSH
4342: LD_EXP 13
4346: PUSH
4347: LD_EXP 14
4351: PUSH
4352: LD_EXP 15
4356: PUSH
4357: LD_EXP 16
4361: PUSH
4362: LD_EXP 17
4366: PUSH
4367: LD_EXP 18
4371: PUSH
4372: LD_EXP 19
4376: PUSH
4377: LD_EXP 20
4381: PUSH
4382: LD_EXP 21
4386: PUSH
4387: LD_EXP 22
4391: PUSH
4392: EMPTY
4393: LIST
4394: LIST
4395: LIST
4396: LIST
4397: LIST
4398: LIST
4399: LIST
4400: LIST
4401: LIST
4402: LIST
4403: LIST
4404: LIST
4405: LIST
4406: PUSH
4407: LD_INT 0
4409: DIFF
4410: PUSH
4411: LD_VAR 0 2
4415: ADD
4416: ST_TO_ADDR
// for i in player_uns do
4417: LD_ADDR_VAR 0 3
4421: PUSH
4422: LD_VAR 0 4
4426: PUSH
4427: FOR_IN
4428: IFFALSE 4470
// if GetClass ( i ) in [ class_bazooker , class_sniper , class_mortar ] then
4430: LD_VAR 0 3
4434: PPUSH
4435: CALL_OW 257
4439: PUSH
4440: LD_INT 9
4442: PUSH
4443: LD_INT 5
4445: PUSH
4446: LD_INT 8
4448: PUSH
4449: EMPTY
4450: LIST
4451: LIST
4452: LIST
4453: IN
4454: IFFALSE 4468
// SetClass ( i , class_soldier ) ;
4456: LD_VAR 0 3
4460: PPUSH
4461: LD_INT 1
4463: PPUSH
4464: CALL_OW 336
4468: GO 4427
4470: POP
4471: POP
// if UnitFilter ( player_uns , [ f_class , class_engineer ] ) = 0 then
4472: LD_VAR 0 4
4476: PPUSH
4477: LD_INT 25
4479: PUSH
4480: LD_INT 2
4482: PUSH
4483: EMPTY
4484: LIST
4485: LIST
4486: PPUSH
4487: CALL_OW 72
4491: PUSH
4492: LD_INT 0
4494: EQUAL
4495: IFFALSE 4537
// begin i = Rand ( 1 , player_uns + 0 ) ;
4497: LD_ADDR_VAR 0 3
4501: PUSH
4502: LD_INT 1
4504: PPUSH
4505: LD_VAR 0 4
4509: PUSH
4510: LD_INT 0
4512: PLUS
4513: PPUSH
4514: CALL_OW 12
4518: ST_TO_ADDR
// SetClass ( player_uns [ i ] , class_engineer ) ;
4519: LD_VAR 0 4
4523: PUSH
4524: LD_VAR 0 3
4528: ARRAY
4529: PPUSH
4530: LD_INT 2
4532: PPUSH
4533: CALL_OW 336
// end ; InitHc ;
4537: CALL_OW 19
// InitUc ;
4541: CALL_OW 18
// uc_side = you ;
4545: LD_ADDR_OWVAR 20
4549: PUSH
4550: LD_EXP 2
4554: ST_TO_ADDR
// uc_nation = nation_arabian ;
4555: LD_ADDR_OWVAR 21
4559: PUSH
4560: LD_INT 2
4562: ST_TO_ADDR
// PrepareSoldier ( sex_male , 10 ) ;
4563: LD_INT 1
4565: PPUSH
4566: LD_INT 10
4568: PPUSH
4569: CALL_OW 381
// player_scout = CreateHuman ;
4573: LD_ADDR_EXP 23
4577: PUSH
4578: CALL_OW 44
4582: ST_TO_ADDR
// Kyouma = NewCharacter ( Kyouma ) ;
4583: LD_ADDR_EXP 24
4587: PUSH
4588: LD_STRING Kyouma
4590: PPUSH
4591: CALL_OW 25
4595: ST_TO_ADDR
// player_uns = player_uns ^ Kyouma ;
4596: LD_ADDR_VAR 0 4
4600: PUSH
4601: LD_VAR 0 4
4605: PUSH
4606: LD_EXP 24
4610: ADD
4611: ST_TO_ADDR
// base_ok = LoadVariable ( Base_OK_14a_cont2 , true ) ;
4612: LD_ADDR_VAR 0 5
4616: PUSH
4617: LD_STRING Base_OK_14a_cont2
4619: PPUSH
4620: LD_INT 1
4622: PPUSH
4623: CALL_OW 30
4627: ST_TO_ADDR
// temp_list = [ ] ;
4628: LD_ADDR_VAR 0 9
4632: PUSH
4633: EMPTY
4634: ST_TO_ADDR
// temp_list = [ [ 320 , 80 ] , [ 260 , 20 ] , [ 200 , 0 ] ] [ difficulty ] ;
4635: LD_ADDR_VAR 0 9
4639: PUSH
4640: LD_INT 320
4642: PUSH
4643: LD_INT 80
4645: PUSH
4646: EMPTY
4647: LIST
4648: LIST
4649: PUSH
4650: LD_INT 260
4652: PUSH
4653: LD_INT 20
4655: PUSH
4656: EMPTY
4657: LIST
4658: LIST
4659: PUSH
4660: LD_INT 200
4662: PUSH
4663: LD_INT 0
4665: PUSH
4666: EMPTY
4667: LIST
4668: LIST
4669: PUSH
4670: EMPTY
4671: LIST
4672: LIST
4673: LIST
4674: PUSH
4675: LD_OWVAR 67
4679: ARRAY
4680: ST_TO_ADDR
// if not base_ok then
4681: LD_VAR 0 5
4685: NOT
4686: IFFALSE 4719
// temp_list = Replace ( temp_list , 1 , temp_list [ 1 ] - 100 ) ;
4688: LD_ADDR_VAR 0 9
4692: PUSH
4693: LD_VAR 0 9
4697: PPUSH
4698: LD_INT 1
4700: PPUSH
4701: LD_VAR 0 9
4705: PUSH
4706: LD_INT 1
4708: ARRAY
4709: PUSH
4710: LD_INT 100
4712: MINUS
4713: PPUSH
4714: CALL_OW 1
4718: ST_TO_ADDR
// InitVc ;
4719: CALL_OW 20
// vc_control = control_manual ;
4723: LD_ADDR_OWVAR 38
4727: PUSH
4728: LD_INT 1
4730: ST_TO_ADDR
// vc_chassis = ar_half_tracked ;
4731: LD_ADDR_OWVAR 37
4735: PUSH
4736: LD_INT 14
4738: ST_TO_ADDR
// vc_weapon = ar_cargo_bay ;
4739: LD_ADDR_OWVAR 40
4743: PUSH
4744: LD_INT 32
4746: ST_TO_ADDR
// vc_engine = engine_combustion ;
4747: LD_ADDR_OWVAR 39
4751: PUSH
4752: LD_INT 1
4754: ST_TO_ADDR
// vc_fuel_battery = 76 ;
4755: LD_ADDR_OWVAR 41
4759: PUSH
4760: LD_INT 76
4762: ST_TO_ADDR
// while temp_list [ 1 ] > 0 or temp_list [ 2 ] > 0 do
4763: LD_VAR 0 9
4767: PUSH
4768: LD_INT 1
4770: ARRAY
4771: PUSH
4772: LD_INT 0
4774: GREATER
4775: PUSH
4776: LD_VAR 0 9
4780: PUSH
4781: LD_INT 2
4783: ARRAY
4784: PUSH
4785: LD_INT 0
4787: GREATER
4788: OR
4789: IFFALSE 5221
// begin un = CreateVehicle ;
4791: LD_ADDR_VAR 0 7
4795: PUSH
4796: CALL_OW 45
4800: ST_TO_ADDR
// SetDir ( un , 4 ) ;
4801: LD_VAR 0 7
4805: PPUSH
4806: LD_INT 4
4808: PPUSH
4809: CALL_OW 233
// k = temp_list [ 1 ] ;
4813: LD_ADDR_VAR 0 8
4817: PUSH
4818: LD_VAR 0 9
4822: PUSH
4823: LD_INT 1
4825: ARRAY
4826: ST_TO_ADDR
// if k > 100 then
4827: LD_VAR 0 8
4831: PUSH
4832: LD_INT 100
4834: GREATER
4835: IFFALSE 4845
// k = 100 ;
4837: LD_ADDR_VAR 0 8
4841: PUSH
4842: LD_INT 100
4844: ST_TO_ADDR
// if k > 0 then
4845: LD_VAR 0 8
4849: PUSH
4850: LD_INT 0
4852: GREATER
4853: IFFALSE 4905
// begin SetCargo ( un , mat_cans , k ) ;
4855: LD_VAR 0 7
4859: PPUSH
4860: LD_INT 1
4862: PPUSH
4863: LD_VAR 0 8
4867: PPUSH
4868: CALL_OW 290
// temp_list = Replace ( temp_list , 1 , temp_list [ 1 ] - k ) ;
4872: LD_ADDR_VAR 0 9
4876: PUSH
4877: LD_VAR 0 9
4881: PPUSH
4882: LD_INT 1
4884: PPUSH
4885: LD_VAR 0 9
4889: PUSH
4890: LD_INT 1
4892: ARRAY
4893: PUSH
4894: LD_VAR 0 8
4898: MINUS
4899: PPUSH
4900: CALL_OW 1
4904: ST_TO_ADDR
// end ; val = 100 - k ;
4905: LD_ADDR_VAR 0 6
4909: PUSH
4910: LD_INT 100
4912: PUSH
4913: LD_VAR 0 8
4917: MINUS
4918: ST_TO_ADDR
// if val > 0 then
4919: LD_VAR 0 6
4923: PUSH
4924: LD_INT 0
4926: GREATER
4927: IFFALSE 5025
// begin k = temp_list [ 2 ] ;
4929: LD_ADDR_VAR 0 8
4933: PUSH
4934: LD_VAR 0 9
4938: PUSH
4939: LD_INT 2
4941: ARRAY
4942: ST_TO_ADDR
// if k > val then
4943: LD_VAR 0 8
4947: PUSH
4948: LD_VAR 0 6
4952: GREATER
4953: IFFALSE 4965
// k = val ;
4955: LD_ADDR_VAR 0 8
4959: PUSH
4960: LD_VAR 0 6
4964: ST_TO_ADDR
// if k > 0 then
4965: LD_VAR 0 8
4969: PUSH
4970: LD_INT 0
4972: GREATER
4973: IFFALSE 5025
// begin AddCargo ( un , mat_siberit , k ) ;
4975: LD_VAR 0 7
4979: PPUSH
4980: LD_INT 3
4982: PPUSH
4983: LD_VAR 0 8
4987: PPUSH
4988: CALL_OW 291
// temp_list = Replace ( temp_list , 2 , temp_list [ 2 ] - k ) ;
4992: LD_ADDR_VAR 0 9
4996: PUSH
4997: LD_VAR 0 9
5001: PPUSH
5002: LD_INT 2
5004: PPUSH
5005: LD_VAR 0 9
5009: PUSH
5010: LD_INT 2
5012: ARRAY
5013: PUSH
5014: LD_VAR 0 8
5018: MINUS
5019: PPUSH
5020: CALL_OW 1
5024: ST_TO_ADDR
// end ; end ; k = GetCargo ( un , mat_multi ) ;
5025: LD_ADDR_VAR 0 8
5029: PUSH
5030: LD_VAR 0 7
5034: PPUSH
5035: LD_INT 5
5037: PPUSH
5038: CALL_OW 289
5042: ST_TO_ADDR
// if k < 100 then
5043: LD_VAR 0 8
5047: PUSH
5048: LD_INT 100
5050: LESS
5051: IFFALSE 5074
// begin AddCargo ( un , mat_oil , 100 - k ) ;
5053: LD_VAR 0 7
5057: PPUSH
5058: LD_INT 2
5060: PPUSH
5061: LD_INT 100
5063: PUSH
5064: LD_VAR 0 8
5068: MINUS
5069: PPUSH
5070: CALL_OW 291
// end ; val = 0 ;
5074: LD_ADDR_VAR 0 6
5078: PUSH
5079: LD_INT 0
5081: ST_TO_ADDR
// for k in player_uns do
5082: LD_ADDR_VAR 0 8
5086: PUSH
5087: LD_VAR 0 4
5091: PUSH
5092: FOR_IN
5093: IFFALSE 5124
// if GetClass ( k ) = class_mechanic then
5095: LD_VAR 0 8
5099: PPUSH
5100: CALL_OW 257
5104: PUSH
5105: LD_INT 3
5107: EQUAL
5108: IFFALSE 5122
// begin val = k ;
5110: LD_ADDR_VAR 0 6
5114: PUSH
5115: LD_VAR 0 8
5119: ST_TO_ADDR
// break ;
5120: GO 5124
// end ;
5122: GO 5092
5124: POP
5125: POP
// if val = 0 then
5126: LD_VAR 0 6
5130: PUSH
5131: LD_INT 0
5133: EQUAL
5134: IFFALSE 5174
// begin val = Rand ( 1 , player_uns + 0 ) ;
5136: LD_ADDR_VAR 0 6
5140: PUSH
5141: LD_INT 1
5143: PPUSH
5144: LD_VAR 0 4
5148: PUSH
5149: LD_INT 0
5151: PLUS
5152: PPUSH
5153: CALL_OW 12
5157: ST_TO_ADDR
// val = player_uns [ val ] ;
5158: LD_ADDR_VAR 0 6
5162: PUSH
5163: LD_VAR 0 4
5167: PUSH
5168: LD_VAR 0 6
5172: ARRAY
5173: ST_TO_ADDR
// end ; PlaceHumanInUnit ( val , un ) ;
5174: LD_VAR 0 6
5178: PPUSH
5179: LD_VAR 0 7
5183: PPUSH
5184: CALL_OW 52
// player_uns = player_uns diff val ;
5188: LD_ADDR_VAR 0 4
5192: PUSH
5193: LD_VAR 0 4
5197: PUSH
5198: LD_VAR 0 6
5202: DIFF
5203: ST_TO_ADDR
// PlaceUnitArea ( un , player_enter_area , false ) ;
5204: LD_VAR 0 7
5208: PPUSH
5209: LD_INT 1
5211: PPUSH
5212: LD_INT 0
5214: PPUSH
5215: CALL_OW 49
// end ;
5219: GO 4763
// if base_ok then
5221: LD_VAR 0 5
5225: IFFALSE 5428
// begin InitHc ;
5227: CALL_OW 19
// InitUc ;
5231: CALL_OW 18
// uc_side = you ;
5235: LD_ADDR_OWVAR 20
5239: PUSH
5240: LD_EXP 2
5244: ST_TO_ADDR
// uc_nation = nation_nature ;
5245: LD_ADDR_OWVAR 21
5249: PUSH
5250: LD_INT 0
5252: ST_TO_ADDR
// hc_class = class_apeman_soldier ;
5253: LD_ADDR_OWVAR 28
5257: PUSH
5258: LD_INT 15
5260: ST_TO_ADDR
// for i = 1 to [ 2 , 1 , 0 ] [ difficulty ] do
5261: LD_ADDR_VAR 0 3
5265: PUSH
5266: DOUBLE
5267: LD_INT 1
5269: DEC
5270: ST_TO_ADDR
5271: LD_INT 2
5273: PUSH
5274: LD_INT 1
5276: PUSH
5277: LD_INT 0
5279: PUSH
5280: EMPTY
5281: LIST
5282: LIST
5283: LIST
5284: PUSH
5285: LD_OWVAR 67
5289: ARRAY
5290: PUSH
5291: FOR_TO
5292: IFFALSE 5426
// begin hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
5294: LD_ADDR_OWVAR 29
5298: PUSH
5299: LD_INT 11
5301: PPUSH
5302: LD_INT 13
5304: PPUSH
5305: CALL_OW 12
5309: PUSH
5310: LD_INT 10
5312: PPUSH
5313: LD_INT 11
5315: PPUSH
5316: CALL_OW 12
5320: PUSH
5321: EMPTY
5322: LIST
5323: LIST
5324: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
5325: LD_ADDR_OWVAR 27
5329: PUSH
5330: LD_INT 1
5332: PPUSH
5333: LD_INT 2
5335: PPUSH
5336: CALL_OW 12
5340: ST_TO_ADDR
// hc_skills = [ Rand ( 2 , 3 ) , Rand ( 0 , 1 ) , 0 , 0 ] ;
5341: LD_ADDR_OWVAR 31
5345: PUSH
5346: LD_INT 2
5348: PPUSH
5349: LD_INT 3
5351: PPUSH
5352: CALL_OW 12
5356: PUSH
5357: LD_INT 0
5359: PPUSH
5360: LD_INT 1
5362: PPUSH
5363: CALL_OW 12
5367: PUSH
5368: LD_INT 0
5370: PUSH
5371: LD_INT 0
5373: PUSH
5374: EMPTY
5375: LIST
5376: LIST
5377: LIST
5378: LIST
5379: ST_TO_ADDR
// if i = 1 then
5380: LD_VAR 0 3
5384: PUSH
5385: LD_INT 1
5387: EQUAL
5388: IFFALSE 5400
// hc_name = Mike else
5390: LD_ADDR_OWVAR 26
5394: PUSH
5395: LD_STRING Mike
5397: ST_TO_ADDR
5398: GO 5408
// hc_name =  ;
5400: LD_ADDR_OWVAR 26
5404: PUSH
5405: LD_STRING 
5407: ST_TO_ADDR
// player_uns = player_uns ^ CreateHuman ;
5408: LD_ADDR_VAR 0 4
5412: PUSH
5413: LD_VAR 0 4
5417: PUSH
5418: CALL_OW 44
5422: ADD
5423: ST_TO_ADDR
// end ;
5424: GO 5291
5426: POP
5427: POP
// end ; for i in player_uns do
5428: LD_ADDR_VAR 0 3
5432: PUSH
5433: LD_VAR 0 4
5437: PUSH
5438: FOR_IN
5439: IFFALSE 5470
// begin SetDir ( i , 4 ) ;
5441: LD_VAR 0 3
5445: PPUSH
5446: LD_INT 4
5448: PPUSH
5449: CALL_OW 233
// PlaceUnitArea ( i , player_enter_area , false ) ;
5453: LD_VAR 0 3
5457: PPUSH
5458: LD_INT 1
5460: PPUSH
5461: LD_INT 0
5463: PPUSH
5464: CALL_OW 49
// end ;
5468: GO 5438
5470: POP
5471: POP
// SetDir ( player_scout , 1 ) ;
5472: LD_EXP 23
5476: PPUSH
5477: LD_INT 1
5479: PPUSH
5480: CALL_OW 233
// PlaceUnitXY ( player_scout , 130 , 70 , false ) ;
5484: LD_EXP 23
5488: PPUSH
5489: LD_INT 130
5491: PPUSH
5492: LD_INT 70
5494: PPUSH
5495: LD_INT 0
5497: PPUSH
5498: CALL_OW 48
// player_starting_units = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) diff GetApes ( you ) ;
5502: LD_ADDR_EXP 147
5506: PUSH
5507: LD_INT 22
5509: PUSH
5510: LD_EXP 2
5514: PUSH
5515: EMPTY
5516: LIST
5517: LIST
5518: PUSH
5519: LD_INT 21
5521: PUSH
5522: LD_INT 1
5524: PUSH
5525: EMPTY
5526: LIST
5527: LIST
5528: PUSH
5529: EMPTY
5530: LIST
5531: LIST
5532: PPUSH
5533: CALL_OW 69
5537: PUSH
5538: LD_EXP 2
5542: PPUSH
5543: CALL 85747 0 1
5547: DIFF
5548: ST_TO_ADDR
// end ;
5549: LD_VAR 0 1
5553: RET
// function LoadPlayerChar ( c_name ) ; begin
5554: LD_INT 0
5556: PPUSH
// if TestCharacters ( c_name & _15a ) then
5557: LD_VAR 0 1
5561: PUSH
5562: LD_STRING _15a
5564: STR
5565: PPUSH
5566: CALL_OW 28
5570: IFFALSE 5593
// result = CreateCharacter ( c_name & _15a ) else
5572: LD_ADDR_VAR 0 2
5576: PUSH
5577: LD_VAR 0 1
5581: PUSH
5582: LD_STRING _15a
5584: STR
5585: PPUSH
5586: CALL_OW 34
5590: ST_TO_ADDR
5591: GO 5601
// result = 0 ;
5593: LD_ADDR_VAR 0 2
5597: PUSH
5598: LD_INT 0
5600: ST_TO_ADDR
// end ;
5601: LD_VAR 0 2
5605: RET
// function ScanBuildings ; var side , i , temp_list , base , area , temp_list_2 , k ; var rubun7_new , rubun3_new ; begin
5606: LD_INT 0
5608: PPUSH
5609: PPUSH
5610: PPUSH
5611: PPUSH
5612: PPUSH
5613: PPUSH
5614: PPUSH
5615: PPUSH
5616: PPUSH
5617: PPUSH
// if difficulty <= 2 then
5618: LD_OWVAR 67
5622: PUSH
5623: LD_INT 2
5625: LESSEQUAL
5626: IFFALSE 5682
// begin DestroyUnit ( rubun13 ) ;
5628: LD_INT 167
5630: PPUSH
5631: CALL_OW 65
// rubun7_new = ReplaceBunkerWithTurret ( rubun7 ) ;
5635: LD_ADDR_VAR 0 9
5639: PUSH
5640: LD_INT 160
5642: PPUSH
5643: CALL 7107 0 1
5647: ST_TO_ADDR
// rubun3_new = ReplaceBunkerWithTurret ( rubun3 ) ;
5648: LD_ADDR_VAR 0 10
5652: PUSH
5653: LD_INT 151
5655: PPUSH
5656: CALL 7107 0 1
5660: ST_TO_ADDR
// DestroyUnit ( arbun2 ) ;
5661: LD_INT 234
5663: PPUSH
5664: CALL_OW 65
// DestroyUnit ( ambun5 ) ;
5668: LD_INT 217
5670: PPUSH
5671: CALL_OW 65
// ReplaceBunkerWithTurret ( ambun11 ) ;
5675: LD_INT 186
5677: PPUSH
5678: CALL 7107 0 1
// end ; if difficulty = 1 then
5682: LD_OWVAR 67
5686: PUSH
5687: LD_INT 1
5689: EQUAL
5690: IFFALSE 5752
// begin DestroyUnit ( rubun15 ) ;
5692: LD_INT 274
5694: PPUSH
5695: CALL_OW 65
// DestroyUnit ( rubun18 ) ;
5699: LD_INT 133
5701: PPUSH
5702: CALL_OW 65
// DestroyUnit ( rubun7_new ) ;
5706: LD_VAR 0 9
5710: PPUSH
5711: CALL_OW 65
// DestroyUnit ( rubun3_new ) ;
5715: LD_VAR 0 10
5719: PPUSH
5720: CALL_OW 65
// DestroyUnit ( arbun5 ) ;
5724: LD_INT 275
5726: PPUSH
5727: CALL_OW 65
// ReplaceBunkerWithTurret ( ambun6 ) ;
5731: LD_INT 211
5733: PPUSH
5734: CALL 7107 0 1
// DestroyUnit ( ambun2 ) ;
5738: LD_INT 207
5740: PPUSH
5741: CALL_OW 65
// DestroyUnit ( ambun4 ) ;
5745: LD_INT 219
5747: PPUSH
5748: CALL_OW 65
// end ; for base in ai_bases do
5752: LD_ADDR_VAR 0 5
5756: PUSH
5757: LD_EXP 39
5761: PUSH
5762: FOR_IN
5763: IFFALSE 6915
// begin area = GetBaseArea ( base ) ;
5765: LD_ADDR_VAR 0 6
5769: PUSH
5770: LD_VAR 0 5
5774: PPUSH
5775: CALL 24795 0 1
5779: ST_TO_ADDR
// side = GetBaseSide ( base ) ;
5780: LD_ADDR_VAR 0 2
5784: PUSH
5785: LD_VAR 0 5
5789: PPUSH
5790: CALL 24885 0 1
5794: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_building ] , [ f_inarea , area ] ] ) diff alien_tower ) ;
5795: LD_ADDR_EXP 76
5799: PUSH
5800: LD_EXP 76
5804: PPUSH
5805: LD_VAR 0 5
5809: PPUSH
5810: LD_INT 22
5812: PUSH
5813: LD_VAR 0 2
5817: PUSH
5818: EMPTY
5819: LIST
5820: LIST
5821: PUSH
5822: LD_INT 21
5824: PUSH
5825: LD_INT 3
5827: PUSH
5828: EMPTY
5829: LIST
5830: LIST
5831: PUSH
5832: LD_INT 95
5834: PUSH
5835: LD_VAR 0 6
5839: PUSH
5840: EMPTY
5841: LIST
5842: LIST
5843: PUSH
5844: EMPTY
5845: LIST
5846: LIST
5847: LIST
5848: PPUSH
5849: CALL_OW 69
5853: PUSH
5854: LD_INT 1
5856: DIFF
5857: PPUSH
5858: CALL_OW 1
5862: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
5863: LD_ADDR_VAR 0 3
5867: PUSH
5868: LD_EXP 76
5872: PUSH
5873: LD_VAR 0 5
5877: ARRAY
5878: PUSH
5879: FOR_IN
5880: IFFALSE 5901
// UpdateBuildingBasicVariables ( base , i , true ) ;
5882: LD_VAR 0 5
5886: PPUSH
5887: LD_VAR 0 3
5891: PPUSH
5892: LD_INT 1
5894: PPUSH
5895: CALL 7288 0 3
5899: GO 5879
5901: POP
5902: POP
// temp_list = [ ] ;
5903: LD_ADDR_VAR 0 4
5907: PUSH
5908: EMPTY
5909: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
5910: LD_ADDR_VAR 0 3
5914: PUSH
5915: LD_EXP 76
5919: PUSH
5920: LD_VAR 0 5
5924: ARRAY
5925: PUSH
5926: FOR_IN
5927: IFFALSE 6813
// begin if i = allibun4 then
5929: LD_VAR 0 3
5933: PUSH
5934: LD_INT 17
5936: EQUAL
5937: IFFALSE 6033
// begin temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , us_double_gun ] ] ;
5939: LD_ADDR_VAR 0 4
5943: PUSH
5944: LD_VAR 0 4
5948: PUSH
5949: LD_VAR 0 3
5953: PPUSH
5954: CALL_OW 250
5958: PUSH
5959: LD_VAR 0 3
5963: PPUSH
5964: CALL_OW 251
5968: PUSH
5969: LD_VAR 0 3
5973: PPUSH
5974: CALL_OW 254
5978: PUSH
5979: LD_VAR 0 3
5983: PPUSH
5984: CALL_OW 266
5988: PUSH
5989: LD_VAR 0 3
5993: PPUSH
5994: LD_INT 1
5996: PPUSH
5997: CALL_OW 268
6001: PUSH
6002: LD_VAR 0 3
6006: PPUSH
6007: LD_INT 2
6009: PPUSH
6010: CALL_OW 268
6014: PUSH
6015: LD_INT 5
6017: PUSH
6018: EMPTY
6019: LIST
6020: LIST
6021: LIST
6022: LIST
6023: LIST
6024: LIST
6025: LIST
6026: PUSH
6027: EMPTY
6028: LIST
6029: ADD
6030: ST_TO_ADDR
// continue ;
6031: GO 5926
// end ; if base = 2 and GetNation ( i ) = nation_russian then
6033: LD_VAR 0 5
6037: PUSH
6038: LD_INT 2
6040: EQUAL
6041: PUSH
6042: LD_VAR 0 3
6046: PPUSH
6047: CALL_OW 248
6051: PUSH
6052: LD_INT 3
6054: EQUAL
6055: AND
6056: IFFALSE 6712
// begin case GetBType ( i ) of b_lab , b_lab_half , b_lab_full :
6058: LD_VAR 0 3
6062: PPUSH
6063: CALL_OW 266
6067: PUSH
6068: LD_INT 6
6070: DOUBLE
6071: EQUAL
6072: IFTRUE 6088
6074: LD_INT 7
6076: DOUBLE
6077: EQUAL
6078: IFTRUE 6088
6080: LD_INT 8
6082: DOUBLE
6083: EQUAL
6084: IFTRUE 6088
6086: GO 6170
6088: POP
// temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , b_lab_siberium , b_lab_weapon , GetBWeapon ( i ) ] ] ; b_bunker , b_turret :
6089: LD_ADDR_VAR 0 4
6093: PUSH
6094: LD_VAR 0 4
6098: PUSH
6099: LD_VAR 0 3
6103: PPUSH
6104: CALL_OW 250
6108: PUSH
6109: LD_VAR 0 3
6113: PPUSH
6114: CALL_OW 251
6118: PUSH
6119: LD_VAR 0 3
6123: PPUSH
6124: CALL_OW 254
6128: PUSH
6129: LD_VAR 0 3
6133: PPUSH
6134: CALL_OW 266
6138: PUSH
6139: LD_INT 11
6141: PUSH
6142: LD_INT 10
6144: PUSH
6145: LD_VAR 0 3
6149: PPUSH
6150: CALL_OW 269
6154: PUSH
6155: EMPTY
6156: LIST
6157: LIST
6158: LIST
6159: LIST
6160: LIST
6161: LIST
6162: LIST
6163: PUSH
6164: EMPTY
6165: LIST
6166: ADD
6167: ST_TO_ADDR
6168: GO 6710
6170: LD_INT 32
6172: DOUBLE
6173: EQUAL
6174: IFTRUE 6184
6176: LD_INT 33
6178: DOUBLE
6179: EQUAL
6180: IFTRUE 6184
6182: GO 6610
6184: POP
// begin case GetBWeapon ( i ) of ru_gun :
6185: LD_VAR 0 3
6189: PPUSH
6190: CALL_OW 269
6194: PUSH
6195: LD_INT 44
6197: DOUBLE
6198: EQUAL
6199: IFTRUE 6203
6201: GO 6298
6203: POP
// temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , us_double_gun ] ] ; ru_heavy_gun :
6204: LD_ADDR_VAR 0 4
6208: PUSH
6209: LD_VAR 0 4
6213: PUSH
6214: LD_VAR 0 3
6218: PPUSH
6219: CALL_OW 250
6223: PUSH
6224: LD_VAR 0 3
6228: PPUSH
6229: CALL_OW 251
6233: PUSH
6234: LD_VAR 0 3
6238: PPUSH
6239: CALL_OW 254
6243: PUSH
6244: LD_VAR 0 3
6248: PPUSH
6249: CALL_OW 266
6253: PUSH
6254: LD_VAR 0 3
6258: PPUSH
6259: LD_INT 1
6261: PPUSH
6262: CALL_OW 268
6266: PUSH
6267: LD_VAR 0 3
6271: PPUSH
6272: LD_INT 2
6274: PPUSH
6275: CALL_OW 268
6279: PUSH
6280: LD_INT 5
6282: PUSH
6283: EMPTY
6284: LIST
6285: LIST
6286: LIST
6287: LIST
6288: LIST
6289: LIST
6290: LIST
6291: PUSH
6292: EMPTY
6293: LIST
6294: ADD
6295: ST_TO_ADDR
6296: GO 6608
6298: LD_INT 46
6300: DOUBLE
6301: EQUAL
6302: IFTRUE 6306
6304: GO 6401
6306: POP
// temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , us_heavy_gun ] ] ; ru_gatling_gun :
6307: LD_ADDR_VAR 0 4
6311: PUSH
6312: LD_VAR 0 4
6316: PUSH
6317: LD_VAR 0 3
6321: PPUSH
6322: CALL_OW 250
6326: PUSH
6327: LD_VAR 0 3
6331: PPUSH
6332: CALL_OW 251
6336: PUSH
6337: LD_VAR 0 3
6341: PPUSH
6342: CALL_OW 254
6346: PUSH
6347: LD_VAR 0 3
6351: PPUSH
6352: CALL_OW 266
6356: PUSH
6357: LD_VAR 0 3
6361: PPUSH
6362: LD_INT 1
6364: PPUSH
6365: CALL_OW 268
6369: PUSH
6370: LD_VAR 0 3
6374: PPUSH
6375: LD_INT 2
6377: PPUSH
6378: CALL_OW 268
6382: PUSH
6383: LD_INT 6
6385: PUSH
6386: EMPTY
6387: LIST
6388: LIST
6389: LIST
6390: LIST
6391: LIST
6392: LIST
6393: LIST
6394: PUSH
6395: EMPTY
6396: LIST
6397: ADD
6398: ST_TO_ADDR
6399: GO 6608
6401: LD_INT 43
6403: DOUBLE
6404: EQUAL
6405: IFTRUE 6409
6407: GO 6504
6409: POP
// temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , us_gatling_gun ] ] ; ru_rocket :
6410: LD_ADDR_VAR 0 4
6414: PUSH
6415: LD_VAR 0 4
6419: PUSH
6420: LD_VAR 0 3
6424: PPUSH
6425: CALL_OW 250
6429: PUSH
6430: LD_VAR 0 3
6434: PPUSH
6435: CALL_OW 251
6439: PUSH
6440: LD_VAR 0 3
6444: PPUSH
6445: CALL_OW 254
6449: PUSH
6450: LD_VAR 0 3
6454: PPUSH
6455: CALL_OW 266
6459: PUSH
6460: LD_VAR 0 3
6464: PPUSH
6465: LD_INT 1
6467: PPUSH
6468: CALL_OW 268
6472: PUSH
6473: LD_VAR 0 3
6477: PPUSH
6478: LD_INT 2
6480: PPUSH
6481: CALL_OW 268
6485: PUSH
6486: LD_INT 4
6488: PUSH
6489: EMPTY
6490: LIST
6491: LIST
6492: LIST
6493: LIST
6494: LIST
6495: LIST
6496: LIST
6497: PUSH
6498: EMPTY
6499: LIST
6500: ADD
6501: ST_TO_ADDR
6502: GO 6608
6504: LD_INT 47
6506: DOUBLE
6507: EQUAL
6508: IFTRUE 6512
6510: GO 6607
6512: POP
// temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , us_rocket_launcher ] ] ; end ;
6513: LD_ADDR_VAR 0 4
6517: PUSH
6518: LD_VAR 0 4
6522: PUSH
6523: LD_VAR 0 3
6527: PPUSH
6528: CALL_OW 250
6532: PUSH
6533: LD_VAR 0 3
6537: PPUSH
6538: CALL_OW 251
6542: PUSH
6543: LD_VAR 0 3
6547: PPUSH
6548: CALL_OW 254
6552: PUSH
6553: LD_VAR 0 3
6557: PPUSH
6558: CALL_OW 266
6562: PUSH
6563: LD_VAR 0 3
6567: PPUSH
6568: LD_INT 1
6570: PPUSH
6571: CALL_OW 268
6575: PUSH
6576: LD_VAR 0 3
6580: PPUSH
6581: LD_INT 2
6583: PPUSH
6584: CALL_OW 268
6588: PUSH
6589: LD_INT 7
6591: PUSH
6592: EMPTY
6593: LIST
6594: LIST
6595: LIST
6596: LIST
6597: LIST
6598: LIST
6599: LIST
6600: PUSH
6601: EMPTY
6602: LIST
6603: ADD
6604: ST_TO_ADDR
6605: GO 6608
6607: POP
// end ; else
6608: GO 6710
6610: POP
// temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , GetBWeapon ( i ) ] ] ; end ;
6611: LD_ADDR_VAR 0 4
6615: PUSH
6616: LD_VAR 0 4
6620: PUSH
6621: LD_VAR 0 3
6625: PPUSH
6626: CALL_OW 250
6630: PUSH
6631: LD_VAR 0 3
6635: PPUSH
6636: CALL_OW 251
6640: PUSH
6641: LD_VAR 0 3
6645: PPUSH
6646: CALL_OW 254
6650: PUSH
6651: LD_VAR 0 3
6655: PPUSH
6656: CALL_OW 266
6660: PUSH
6661: LD_VAR 0 3
6665: PPUSH
6666: LD_INT 1
6668: PPUSH
6669: CALL_OW 268
6673: PUSH
6674: LD_VAR 0 3
6678: PPUSH
6679: LD_INT 2
6681: PPUSH
6682: CALL_OW 268
6686: PUSH
6687: LD_VAR 0 3
6691: PPUSH
6692: CALL_OW 269
6696: PUSH
6697: EMPTY
6698: LIST
6699: LIST
6700: LIST
6701: LIST
6702: LIST
6703: LIST
6704: LIST
6705: PUSH
6706: EMPTY
6707: LIST
6708: ADD
6709: ST_TO_ADDR
// end else
6710: GO 6811
// temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , GetBWeapon ( i ) ] ] ;
6712: LD_ADDR_VAR 0 4
6716: PUSH
6717: LD_VAR 0 4
6721: PUSH
6722: LD_VAR 0 3
6726: PPUSH
6727: CALL_OW 250
6731: PUSH
6732: LD_VAR 0 3
6736: PPUSH
6737: CALL_OW 251
6741: PUSH
6742: LD_VAR 0 3
6746: PPUSH
6747: CALL_OW 254
6751: PUSH
6752: LD_VAR 0 3
6756: PPUSH
6757: CALL_OW 266
6761: PUSH
6762: LD_VAR 0 3
6766: PPUSH
6767: LD_INT 1
6769: PPUSH
6770: CALL_OW 268
6774: PUSH
6775: LD_VAR 0 3
6779: PPUSH
6780: LD_INT 2
6782: PPUSH
6783: CALL_OW 268
6787: PUSH
6788: LD_VAR 0 3
6792: PPUSH
6793: CALL_OW 269
6797: PUSH
6798: EMPTY
6799: LIST
6800: LIST
6801: LIST
6802: LIST
6803: LIST
6804: LIST
6805: LIST
6806: PUSH
6807: EMPTY
6808: LIST
6809: ADD
6810: ST_TO_ADDR
// end ;
6811: GO 5926
6813: POP
6814: POP
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
6815: LD_ADDR_EXP 61
6819: PUSH
6820: LD_EXP 61
6824: PPUSH
6825: LD_VAR 0 5
6829: PPUSH
6830: LD_VAR 0 4
6834: PPUSH
6835: CALL_OW 1
6839: ST_TO_ADDR
// SortBuildingLocationsListInCorrectOrder ( base ) ;
6840: LD_VAR 0 5
6844: PPUSH
6845: CALL 8500 0 1
// for i in ai_siberite_mines [ base ] ^ ai_oil_mine [ base ] do
6849: LD_ADDR_VAR 0 3
6853: PUSH
6854: LD_EXP 56
6858: PUSH
6859: LD_VAR 0 5
6863: ARRAY
6864: PUSH
6865: LD_EXP 55
6869: PUSH
6870: LD_VAR 0 5
6874: ARRAY
6875: ADD
6876: PUSH
6877: FOR_IN
6878: IFFALSE 6911
// SetResourceVisibility ( GetX ( i ) , GetY ( i ) , side ) ;
6880: LD_VAR 0 3
6884: PPUSH
6885: CALL_OW 250
6889: PPUSH
6890: LD_VAR 0 3
6894: PPUSH
6895: CALL_OW 251
6899: PPUSH
6900: LD_VAR 0 2
6904: PPUSH
6905: CALL_OW 441
6909: GO 6877
6911: POP
6912: POP
// end ;
6913: GO 5762
6915: POP
6916: POP
// ai_fact_extension_replace_locations = Replace ( ai_fact_extension_replace_locations , 1 , [ [ GetX ( ru_ext_rep ) , GetY ( ru_ext_rep ) ] ] ) ;
6917: LD_ADDR_EXP 98
6921: PUSH
6922: LD_EXP 98
6926: PPUSH
6927: LD_INT 1
6929: PPUSH
6930: LD_INT 97
6932: PPUSH
6933: CALL_OW 250
6937: PUSH
6938: LD_INT 97
6940: PPUSH
6941: CALL_OW 251
6945: PUSH
6946: EMPTY
6947: LIST
6948: LIST
6949: PUSH
6950: EMPTY
6951: LIST
6952: PPUSH
6953: CALL_OW 1
6957: ST_TO_ADDR
// ai_fact_extension_replace_locations = Replace ( ai_fact_extension_replace_locations , 2 , [ [ GetX ( alli_ext_rep ) , GetY ( alli_ext_rep ) ] ] ) ;
6958: LD_ADDR_EXP 98
6962: PUSH
6963: LD_EXP 98
6967: PPUSH
6968: LD_INT 2
6970: PPUSH
6971: LD_INT 73
6973: PPUSH
6974: CALL_OW 250
6978: PUSH
6979: LD_INT 73
6981: PPUSH
6982: CALL_OW 251
6986: PUSH
6987: EMPTY
6988: LIST
6989: LIST
6990: PUSH
6991: EMPTY
6992: LIST
6993: PPUSH
6994: CALL_OW 1
6998: ST_TO_ADDR
// ai_fact_extension_replace_locations = Replace ( ai_fact_extension_replace_locations , 3 , [ [ GetX ( ar_ext_rep ) , GetY ( ar_ext_rep ) ] ] ) ;
6999: LD_ADDR_EXP 98
7003: PUSH
7004: LD_EXP 98
7008: PPUSH
7009: LD_INT 3
7011: PPUSH
7012: LD_INT 249
7014: PPUSH
7015: CALL_OW 250
7019: PUSH
7020: LD_INT 249
7022: PPUSH
7023: CALL_OW 251
7027: PUSH
7028: EMPTY
7029: LIST
7030: LIST
7031: PUSH
7032: EMPTY
7033: LIST
7034: PPUSH
7035: CALL_OW 1
7039: ST_TO_ADDR
// ai_fact_extension_replace_locations = Replace ( ai_fact_extension_replace_locations , 4 , [ [ GetX ( am_ext_rep1 ) , GetY ( am_ext_rep1 ) ] , [ GetX ( am_ext_rep2 ) , GetY ( am_ext_rep2 ) ] ] ) ;
7040: LD_ADDR_EXP 98
7044: PUSH
7045: LD_EXP 98
7049: PPUSH
7050: LD_INT 4
7052: PPUSH
7053: LD_INT 177
7055: PPUSH
7056: CALL_OW 250
7060: PUSH
7061: LD_INT 177
7063: PPUSH
7064: CALL_OW 251
7068: PUSH
7069: EMPTY
7070: LIST
7071: LIST
7072: PUSH
7073: LD_INT 451
7075: PPUSH
7076: CALL_OW 250
7080: PUSH
7081: LD_INT 451
7083: PPUSH
7084: CALL_OW 251
7088: PUSH
7089: EMPTY
7090: LIST
7091: LIST
7092: PUSH
7093: EMPTY
7094: LIST
7095: LIST
7096: PPUSH
7097: CALL_OW 1
7101: ST_TO_ADDR
// end ;
7102: LD_VAR 0 1
7106: RET
// function ReplaceBunkerWithTurret ( id ) ; var un , temp_list ; begin
7107: LD_INT 0
7109: PPUSH
7110: PPUSH
7111: PPUSH
// InitUc ;
7112: CALL_OW 18
// InitBc ;
7116: CALL_OW 21
// uc_nation = GetNation ( id ) ;
7120: LD_ADDR_OWVAR 21
7124: PUSH
7125: LD_VAR 0 1
7129: PPUSH
7130: CALL_OW 248
7134: ST_TO_ADDR
// uc_side = GetSide ( id ) ;
7135: LD_ADDR_OWVAR 20
7139: PUSH
7140: LD_VAR 0 1
7144: PPUSH
7145: CALL_OW 255
7149: ST_TO_ADDR
// temp_list = [ GetX ( id ) , GetY ( id ) , GetDir ( id ) , GetBWeapon ( id ) ] ;
7150: LD_ADDR_VAR 0 4
7154: PUSH
7155: LD_VAR 0 1
7159: PPUSH
7160: CALL_OW 250
7164: PUSH
7165: LD_VAR 0 1
7169: PPUSH
7170: CALL_OW 251
7174: PUSH
7175: LD_VAR 0 1
7179: PPUSH
7180: CALL_OW 254
7184: PUSH
7185: LD_VAR 0 1
7189: PPUSH
7190: CALL_OW 269
7194: PUSH
7195: EMPTY
7196: LIST
7197: LIST
7198: LIST
7199: LIST
7200: ST_TO_ADDR
// DestroyUnit ( id ) ;
7201: LD_VAR 0 1
7205: PPUSH
7206: CALL_OW 65
// bc_type = b_turret ;
7210: LD_ADDR_OWVAR 42
7214: PUSH
7215: LD_INT 33
7217: ST_TO_ADDR
// un = CreateAndPlaceBuildingXYD ( temp_list [ 1 ] , temp_list [ 2 ] , temp_list [ 3 ] ) ;
7218: LD_ADDR_VAR 0 3
7222: PUSH
7223: LD_VAR 0 4
7227: PUSH
7228: LD_INT 1
7230: ARRAY
7231: PPUSH
7232: LD_VAR 0 4
7236: PUSH
7237: LD_INT 2
7239: ARRAY
7240: PPUSH
7241: LD_VAR 0 4
7245: PUSH
7246: LD_INT 3
7248: ARRAY
7249: PPUSH
7250: CALL_OW 47
7254: ST_TO_ADDR
// PlaceWeaponTurret ( un , temp_list [ 4 ] ) ;
7255: LD_VAR 0 3
7259: PPUSH
7260: LD_VAR 0 4
7264: PUSH
7265: LD_INT 4
7267: ARRAY
7268: PPUSH
7269: CALL_OW 431
// result = un ;
7273: LD_ADDR_VAR 0 2
7277: PUSH
7278: LD_VAR 0 3
7282: ST_TO_ADDR
// end ;
7283: LD_VAR 0 2
7287: RET
// export function UpdateBuildingBasicVariables ( base , un , add ) ; var temp_list ; begin
7288: LD_INT 0
7290: PPUSH
7291: PPUSH
// case GetBType ( un ) of b_depot , b_warehouse :
7292: LD_VAR 0 2
7296: PPUSH
7297: CALL_OW 266
7301: PUSH
7302: LD_INT 0
7304: DOUBLE
7305: EQUAL
7306: IFTRUE 7316
7308: LD_INT 1
7310: DOUBLE
7311: EQUAL
7312: IFTRUE 7316
7314: GO 7393
7316: POP
// if add then
7317: LD_VAR 0 3
7321: IFFALSE 7350
// ai_depot = Replace ( ai_depot , base , un ) else
7323: LD_ADDR_EXP 49
7327: PUSH
7328: LD_EXP 49
7332: PPUSH
7333: LD_VAR 0 1
7337: PPUSH
7338: LD_VAR 0 2
7342: PPUSH
7343: CALL_OW 1
7347: ST_TO_ADDR
7348: GO 7391
// if un = ai_depot [ base ] then
7350: LD_VAR 0 2
7354: PUSH
7355: LD_EXP 49
7359: PUSH
7360: LD_VAR 0 1
7364: ARRAY
7365: EQUAL
7366: IFFALSE 7391
// ai_depot = Replace ( ai_depot , base , 0 ) ; b_lab , b_lab_half , b_lab_full :
7368: LD_ADDR_EXP 49
7372: PUSH
7373: LD_EXP 49
7377: PPUSH
7378: LD_VAR 0 1
7382: PPUSH
7383: LD_INT 0
7385: PPUSH
7386: CALL_OW 1
7390: ST_TO_ADDR
7391: GO 8495
7393: LD_INT 6
7395: DOUBLE
7396: EQUAL
7397: IFTRUE 7413
7399: LD_INT 7
7401: DOUBLE
7402: EQUAL
7403: IFTRUE 7413
7405: LD_INT 8
7407: DOUBLE
7408: EQUAL
7409: IFTRUE 7413
7411: GO 7493
7413: POP
// begin if add then
7414: LD_VAR 0 3
7418: IFFALSE 7444
// temp_list = ai_labs [ base ] ^ un else
7420: LD_ADDR_VAR 0 5
7424: PUSH
7425: LD_EXP 50
7429: PUSH
7430: LD_VAR 0 1
7434: ARRAY
7435: PUSH
7436: LD_VAR 0 2
7440: ADD
7441: ST_TO_ADDR
7442: GO 7466
// temp_list = ai_labs [ base ] diff un ;
7444: LD_ADDR_VAR 0 5
7448: PUSH
7449: LD_EXP 50
7453: PUSH
7454: LD_VAR 0 1
7458: ARRAY
7459: PUSH
7460: LD_VAR 0 2
7464: DIFF
7465: ST_TO_ADDR
// ai_labs = Replace ( ai_labs , base , temp_list ) ;
7466: LD_ADDR_EXP 50
7470: PUSH
7471: LD_EXP 50
7475: PPUSH
7476: LD_VAR 0 1
7480: PPUSH
7481: LD_VAR 0 5
7485: PPUSH
7486: CALL_OW 1
7490: ST_TO_ADDR
// end ; b_factory , b_workshop :
7491: GO 8495
7493: LD_INT 3
7495: DOUBLE
7496: EQUAL
7497: IFTRUE 7507
7499: LD_INT 2
7501: DOUBLE
7502: EQUAL
7503: IFTRUE 7507
7505: GO 7587
7507: POP
// begin if add then
7508: LD_VAR 0 3
7512: IFFALSE 7538
// temp_list = ai_facts [ base ] ^ un else
7514: LD_ADDR_VAR 0 5
7518: PUSH
7519: LD_EXP 51
7523: PUSH
7524: LD_VAR 0 1
7528: ARRAY
7529: PUSH
7530: LD_VAR 0 2
7534: ADD
7535: ST_TO_ADDR
7536: GO 7560
// temp_list = ai_facts [ base ] diff un ;
7538: LD_ADDR_VAR 0 5
7542: PUSH
7543: LD_EXP 51
7547: PUSH
7548: LD_VAR 0 1
7552: ARRAY
7553: PUSH
7554: LD_VAR 0 2
7558: DIFF
7559: ST_TO_ADDR
// ai_facts = Replace ( ai_facts , base , temp_list ) ;
7560: LD_ADDR_EXP 51
7564: PUSH
7565: LD_EXP 51
7569: PPUSH
7570: LD_VAR 0 1
7574: PPUSH
7575: LD_VAR 0 5
7579: PPUSH
7580: CALL_OW 1
7584: ST_TO_ADDR
// end ; b_armoury , b_barracks , b_fort :
7585: GO 8495
7587: LD_INT 4
7589: DOUBLE
7590: EQUAL
7591: IFTRUE 7607
7593: LD_INT 5
7595: DOUBLE
7596: EQUAL
7597: IFTRUE 7607
7599: LD_INT 35
7601: DOUBLE
7602: EQUAL
7603: IFTRUE 7607
7605: GO 7687
7607: POP
// begin if add then
7608: LD_VAR 0 3
7612: IFFALSE 7638
// temp_list = ai_armouries [ base ] ^ un else
7614: LD_ADDR_VAR 0 5
7618: PUSH
7619: LD_EXP 52
7623: PUSH
7624: LD_VAR 0 1
7628: ARRAY
7629: PUSH
7630: LD_VAR 0 2
7634: ADD
7635: ST_TO_ADDR
7636: GO 7660
// temp_list = ai_armouries [ base ] diff un ;
7638: LD_ADDR_VAR 0 5
7642: PUSH
7643: LD_EXP 52
7647: PUSH
7648: LD_VAR 0 1
7652: ARRAY
7653: PUSH
7654: LD_VAR 0 2
7658: DIFF
7659: ST_TO_ADDR
// ai_armouries = Replace ( ai_armouries , base , temp_list ) ;
7660: LD_ADDR_EXP 52
7664: PUSH
7665: LD_EXP 52
7669: PPUSH
7670: LD_VAR 0 1
7674: PPUSH
7675: LD_VAR 0 5
7679: PPUSH
7680: CALL_OW 1
7684: ST_TO_ADDR
// end ; b_breastwork , b_bunker :
7685: GO 8495
7687: LD_INT 31
7689: DOUBLE
7690: EQUAL
7691: IFTRUE 7701
7693: LD_INT 32
7695: DOUBLE
7696: EQUAL
7697: IFTRUE 7701
7699: GO 7781
7701: POP
// begin if add then
7702: LD_VAR 0 3
7706: IFFALSE 7732
// temp_list = ai_bunkers [ base ] ^ un else
7708: LD_ADDR_VAR 0 5
7712: PUSH
7713: LD_EXP 53
7717: PUSH
7718: LD_VAR 0 1
7722: ARRAY
7723: PUSH
7724: LD_VAR 0 2
7728: ADD
7729: ST_TO_ADDR
7730: GO 7754
// temp_list = ai_bunkers [ base ] diff un ;
7732: LD_ADDR_VAR 0 5
7736: PUSH
7737: LD_EXP 53
7741: PUSH
7742: LD_VAR 0 1
7746: ARRAY
7747: PUSH
7748: LD_VAR 0 2
7752: DIFF
7753: ST_TO_ADDR
// ai_bunkers = Replace ( ai_bunkers , base , temp_list ) ;
7754: LD_ADDR_EXP 53
7758: PUSH
7759: LD_EXP 53
7763: PPUSH
7764: LD_VAR 0 1
7768: PPUSH
7769: LD_VAR 0 5
7773: PPUSH
7774: CALL_OW 1
7778: ST_TO_ADDR
// end ; b_turret :
7779: GO 8495
7781: LD_INT 33
7783: DOUBLE
7784: EQUAL
7785: IFTRUE 7789
7787: GO 7869
7789: POP
// begin if add then
7790: LD_VAR 0 3
7794: IFFALSE 7820
// temp_list = ai_turrets [ base ] ^ un else
7796: LD_ADDR_VAR 0 5
7800: PUSH
7801: LD_EXP 54
7805: PUSH
7806: LD_VAR 0 1
7810: ARRAY
7811: PUSH
7812: LD_VAR 0 2
7816: ADD
7817: ST_TO_ADDR
7818: GO 7842
// temp_list = ai_turrets [ base ] diff un ;
7820: LD_ADDR_VAR 0 5
7824: PUSH
7825: LD_EXP 54
7829: PUSH
7830: LD_VAR 0 1
7834: ARRAY
7835: PUSH
7836: LD_VAR 0 2
7840: DIFF
7841: ST_TO_ADDR
// ai_turrets = Replace ( ai_turrets , base , temp_list ) ;
7842: LD_ADDR_EXP 54
7846: PUSH
7847: LD_EXP 54
7851: PPUSH
7852: LD_VAR 0 1
7856: PPUSH
7857: LD_VAR 0 5
7861: PPUSH
7862: CALL_OW 1
7866: ST_TO_ADDR
// end ; b_oil_mine :
7867: GO 8495
7869: LD_INT 29
7871: DOUBLE
7872: EQUAL
7873: IFTRUE 7877
7875: GO 7954
7877: POP
// if add then
7878: LD_VAR 0 3
7882: IFFALSE 7911
// ai_oil_mine = Replace ( ai_oil_mine , base , un ) else
7884: LD_ADDR_EXP 55
7888: PUSH
7889: LD_EXP 55
7893: PPUSH
7894: LD_VAR 0 1
7898: PPUSH
7899: LD_VAR 0 2
7903: PPUSH
7904: CALL_OW 1
7908: ST_TO_ADDR
7909: GO 7952
// if un = ai_oil_mine [ base ] then
7911: LD_VAR 0 2
7915: PUSH
7916: LD_EXP 55
7920: PUSH
7921: LD_VAR 0 1
7925: ARRAY
7926: EQUAL
7927: IFFALSE 7952
// ai_oil_mine = Replace ( ai_oil_mine , base , 0 ) ; b_siberite_mine :
7929: LD_ADDR_EXP 55
7933: PUSH
7934: LD_EXP 55
7938: PPUSH
7939: LD_VAR 0 1
7943: PPUSH
7944: LD_INT 0
7946: PPUSH
7947: CALL_OW 1
7951: ST_TO_ADDR
7952: GO 8495
7954: LD_INT 30
7956: DOUBLE
7957: EQUAL
7958: IFTRUE 7962
7960: GO 8042
7962: POP
// begin if add then
7963: LD_VAR 0 3
7967: IFFALSE 7993
// temp_list = ai_siberite_mines [ base ] ^ un else
7969: LD_ADDR_VAR 0 5
7973: PUSH
7974: LD_EXP 56
7978: PUSH
7979: LD_VAR 0 1
7983: ARRAY
7984: PUSH
7985: LD_VAR 0 2
7989: ADD
7990: ST_TO_ADDR
7991: GO 8015
// temp_list = ai_siberite_mines [ base ] diff un ;
7993: LD_ADDR_VAR 0 5
7997: PUSH
7998: LD_EXP 56
8002: PUSH
8003: LD_VAR 0 1
8007: ARRAY
8008: PUSH
8009: LD_VAR 0 2
8013: DIFF
8014: ST_TO_ADDR
// ai_siberite_mines = Replace ( ai_siberite_mines , base , temp_list ) ;
8015: LD_ADDR_EXP 56
8019: PUSH
8020: LD_EXP 56
8024: PPUSH
8025: LD_VAR 0 1
8029: PPUSH
8030: LD_VAR 0 5
8034: PPUSH
8035: CALL_OW 1
8039: 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 :
8040: GO 8495
8042: LD_INT 17
8044: DOUBLE
8045: EQUAL
8046: IFTRUE 8098
8048: LD_INT 19
8050: DOUBLE
8051: EQUAL
8052: IFTRUE 8098
8054: LD_INT 25
8056: DOUBLE
8057: EQUAL
8058: IFTRUE 8098
8060: LD_INT 24
8062: DOUBLE
8063: EQUAL
8064: IFTRUE 8098
8066: LD_INT 20
8068: DOUBLE
8069: EQUAL
8070: IFTRUE 8098
8072: LD_INT 18
8074: DOUBLE
8075: EQUAL
8076: IFTRUE 8098
8078: LD_INT 21
8080: DOUBLE
8081: EQUAL
8082: IFTRUE 8098
8084: LD_INT 16
8086: DOUBLE
8087: EQUAL
8088: IFTRUE 8098
8090: LD_INT 23
8092: DOUBLE
8093: EQUAL
8094: IFTRUE 8098
8096: GO 8178
8098: POP
// begin if add then
8099: LD_VAR 0 3
8103: IFFALSE 8129
// temp_list = ai_fact_extensions [ base ] ^ un else
8105: LD_ADDR_VAR 0 5
8109: PUSH
8110: LD_EXP 57
8114: PUSH
8115: LD_VAR 0 1
8119: ARRAY
8120: PUSH
8121: LD_VAR 0 2
8125: ADD
8126: ST_TO_ADDR
8127: GO 8151
// temp_list = ai_fact_extensions [ base ] diff un ;
8129: LD_ADDR_VAR 0 5
8133: PUSH
8134: LD_EXP 57
8138: PUSH
8139: LD_VAR 0 1
8143: ARRAY
8144: PUSH
8145: LD_VAR 0 2
8149: DIFF
8150: ST_TO_ADDR
// ai_fact_extensions = Replace ( ai_fact_extensions , base , temp_list ) ;
8151: LD_ADDR_EXP 57
8155: PUSH
8156: LD_EXP 57
8160: PPUSH
8161: LD_VAR 0 1
8165: PPUSH
8166: LD_VAR 0 5
8170: PPUSH
8171: CALL_OW 1
8175: ST_TO_ADDR
// end ; b_solar_power , b_oil_power , b_siberite_power :
8176: GO 8495
8178: LD_INT 27
8180: DOUBLE
8181: EQUAL
8182: IFTRUE 8198
8184: LD_INT 26
8186: DOUBLE
8187: EQUAL
8188: IFTRUE 8198
8190: LD_INT 28
8192: DOUBLE
8193: EQUAL
8194: IFTRUE 8198
8196: GO 8278
8198: POP
// begin if add then
8199: LD_VAR 0 3
8203: IFFALSE 8229
// temp_list = ai_power_plants [ base ] ^ un else
8205: LD_ADDR_VAR 0 5
8209: PUSH
8210: LD_EXP 58
8214: PUSH
8215: LD_VAR 0 1
8219: ARRAY
8220: PUSH
8221: LD_VAR 0 2
8225: ADD
8226: ST_TO_ADDR
8227: GO 8251
// temp_list = ai_power_plants [ base ] diff un ;
8229: LD_ADDR_VAR 0 5
8233: PUSH
8234: LD_EXP 58
8238: PUSH
8239: LD_VAR 0 1
8243: ARRAY
8244: PUSH
8245: LD_VAR 0 2
8249: DIFF
8250: ST_TO_ADDR
// ai_power_plants = Replace ( ai_power_plants , base , temp_list ) ;
8251: LD_ADDR_EXP 58
8255: PUSH
8256: LD_EXP 58
8260: PPUSH
8261: LD_VAR 0 1
8265: PPUSH
8266: LD_VAR 0 5
8270: PPUSH
8271: CALL_OW 1
8275: ST_TO_ADDR
// end ; b_control_tower :
8276: GO 8495
8278: LD_INT 36
8280: DOUBLE
8281: EQUAL
8282: IFTRUE 8286
8284: GO 8363
8286: POP
// begin if add then
8287: LD_VAR 0 3
8291: IFFALSE 8320
// ai_control_tower = Replace ( ai_control_tower , base , un ) else
8293: LD_ADDR_EXP 59
8297: PUSH
8298: LD_EXP 59
8302: PPUSH
8303: LD_VAR 0 1
8307: PPUSH
8308: LD_VAR 0 2
8312: PPUSH
8313: CALL_OW 1
8317: ST_TO_ADDR
8318: GO 8361
// if un = ai_control_tower [ base ] then
8320: LD_VAR 0 2
8324: PUSH
8325: LD_EXP 59
8329: PUSH
8330: LD_VAR 0 1
8334: ARRAY
8335: EQUAL
8336: IFFALSE 8361
// ai_control_tower = Replace ( ai_control_tower , base , 0 ) ;
8338: LD_ADDR_EXP 59
8342: PUSH
8343: LD_EXP 59
8347: PPUSH
8348: LD_VAR 0 1
8352: PPUSH
8353: LD_INT 0
8355: PPUSH
8356: CALL_OW 1
8360: ST_TO_ADDR
// end ; b_teleport :
8361: GO 8495
8363: LD_INT 34
8365: DOUBLE
8366: EQUAL
8367: IFTRUE 8371
8369: GO 8494
8371: POP
// begin if add then
8372: LD_VAR 0 3
8376: IFFALSE 8428
// begin ai_teleporter = Replace ( ai_teleporter , base , un ) ;
8378: LD_ADDR_EXP 60
8382: PUSH
8383: LD_EXP 60
8387: PPUSH
8388: LD_VAR 0 1
8392: PPUSH
8393: LD_VAR 0 2
8397: PPUSH
8398: CALL_OW 1
8402: ST_TO_ADDR
// ai_teleporter_exit_placed = Replace ( ai_teleporter_exit_placed , base , false ) ;
8403: LD_ADDR_EXP 96
8407: PUSH
8408: LD_EXP 96
8412: PPUSH
8413: LD_VAR 0 1
8417: PPUSH
8418: LD_INT 0
8420: PPUSH
8421: CALL_OW 1
8425: ST_TO_ADDR
// end else
8426: GO 8492
// if un = ai_teleporter [ base ] then
8428: LD_VAR 0 2
8432: PUSH
8433: LD_EXP 60
8437: PUSH
8438: LD_VAR 0 1
8442: ARRAY
8443: EQUAL
8444: IFFALSE 8492
// begin ai_teleporter = Replace ( ai_teleporter , base , 0 ) ;
8446: LD_ADDR_EXP 60
8450: PUSH
8451: LD_EXP 60
8455: PPUSH
8456: LD_VAR 0 1
8460: PPUSH
8461: LD_INT 0
8463: PPUSH
8464: CALL_OW 1
8468: ST_TO_ADDR
// ai_teleporter_exit_placed = Replace ( ai_teleporter_exit_placed , base , false ) ;
8469: LD_ADDR_EXP 96
8473: PUSH
8474: LD_EXP 96
8478: PPUSH
8479: LD_VAR 0 1
8483: PPUSH
8484: LD_INT 0
8486: PPUSH
8487: CALL_OW 1
8491: ST_TO_ADDR
// end ; end ; end ;
8492: GO 8495
8494: POP
// end ;
8495: LD_VAR 0 4
8499: RET
// export function SortBuildingLocationsListInCorrectOrder ( base ) ; var i , temp_list , p ; begin
8500: LD_INT 0
8502: PPUSH
8503: PPUSH
8504: PPUSH
8505: PPUSH
// temp_list = [ ] ;
8506: LD_ADDR_VAR 0 4
8510: PUSH
8511: EMPTY
8512: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
8513: LD_ADDR_VAR 0 3
8517: PUSH
8518: LD_EXP 61
8522: PUSH
8523: LD_VAR 0 1
8527: ARRAY
8528: PUSH
8529: FOR_IN
8530: IFFALSE 8903
// begin case i [ 4 ] of b_depot , b_warehouse :
8532: LD_VAR 0 3
8536: PUSH
8537: LD_INT 4
8539: ARRAY
8540: PUSH
8541: LD_INT 0
8543: DOUBLE
8544: EQUAL
8545: IFTRUE 8555
8547: LD_INT 1
8549: DOUBLE
8550: EQUAL
8551: IFTRUE 8555
8553: GO 8566
8555: POP
// p = 100 ; b_armoury , b_barracks , b_fort :
8556: LD_ADDR_VAR 0 5
8560: PUSH
8561: LD_INT 100
8563: ST_TO_ADDR
8564: GO 8885
8566: LD_INT 4
8568: DOUBLE
8569: EQUAL
8570: IFTRUE 8586
8572: LD_INT 5
8574: DOUBLE
8575: EQUAL
8576: IFTRUE 8586
8578: LD_INT 35
8580: DOUBLE
8581: EQUAL
8582: IFTRUE 8586
8584: GO 8597
8586: POP
// p = 99 ; b_solar_power , b_oil_power , b_siberite_power :
8587: LD_ADDR_VAR 0 5
8591: PUSH
8592: LD_INT 99
8594: ST_TO_ADDR
8595: GO 8885
8597: LD_INT 27
8599: DOUBLE
8600: EQUAL
8601: IFTRUE 8617
8603: LD_INT 26
8605: DOUBLE
8606: EQUAL
8607: IFTRUE 8617
8609: LD_INT 28
8611: DOUBLE
8612: EQUAL
8613: IFTRUE 8617
8615: GO 8628
8617: POP
// p = 98 ; b_breastwork :
8618: LD_ADDR_VAR 0 5
8622: PUSH
8623: LD_INT 98
8625: ST_TO_ADDR
8626: GO 8885
8628: LD_INT 31
8630: DOUBLE
8631: EQUAL
8632: IFTRUE 8636
8634: GO 8647
8636: POP
// p = 97 ; b_factory , b_workshop :
8637: LD_ADDR_VAR 0 5
8641: PUSH
8642: LD_INT 97
8644: ST_TO_ADDR
8645: GO 8885
8647: LD_INT 3
8649: DOUBLE
8650: EQUAL
8651: IFTRUE 8661
8653: LD_INT 2
8655: DOUBLE
8656: EQUAL
8657: IFTRUE 8661
8659: GO 8672
8661: 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 :
8662: LD_ADDR_VAR 0 5
8666: PUSH
8667: LD_INT 96
8669: ST_TO_ADDR
8670: GO 8885
8672: LD_INT 17
8674: DOUBLE
8675: EQUAL
8676: IFTRUE 8728
8678: LD_INT 19
8680: DOUBLE
8681: EQUAL
8682: IFTRUE 8728
8684: LD_INT 25
8686: DOUBLE
8687: EQUAL
8688: IFTRUE 8728
8690: LD_INT 24
8692: DOUBLE
8693: EQUAL
8694: IFTRUE 8728
8696: LD_INT 20
8698: DOUBLE
8699: EQUAL
8700: IFTRUE 8728
8702: LD_INT 18
8704: DOUBLE
8705: EQUAL
8706: IFTRUE 8728
8708: LD_INT 21
8710: DOUBLE
8711: EQUAL
8712: IFTRUE 8728
8714: LD_INT 16
8716: DOUBLE
8717: EQUAL
8718: IFTRUE 8728
8720: LD_INT 23
8722: DOUBLE
8723: EQUAL
8724: IFTRUE 8728
8726: GO 8739
8728: POP
// p = 95 ; b_bunker :
8729: LD_ADDR_VAR 0 5
8733: PUSH
8734: LD_INT 95
8736: ST_TO_ADDR
8737: GO 8885
8739: LD_INT 32
8741: DOUBLE
8742: EQUAL
8743: IFTRUE 8747
8745: GO 8758
8747: POP
// p = 94 ; b_control_tower :
8748: LD_ADDR_VAR 0 5
8752: PUSH
8753: LD_INT 94
8755: ST_TO_ADDR
8756: GO 8885
8758: LD_INT 36
8760: DOUBLE
8761: EQUAL
8762: IFTRUE 8766
8764: GO 8777
8766: POP
// p = 93 ; b_turret :
8767: LD_ADDR_VAR 0 5
8771: PUSH
8772: LD_INT 93
8774: ST_TO_ADDR
8775: GO 8885
8777: LD_INT 33
8779: DOUBLE
8780: EQUAL
8781: IFTRUE 8785
8783: GO 8796
8785: POP
// p = 92 ; b_lab , b_lab_half , b_lab_full :
8786: LD_ADDR_VAR 0 5
8790: PUSH
8791: LD_INT 92
8793: ST_TO_ADDR
8794: GO 8885
8796: LD_INT 6
8798: DOUBLE
8799: EQUAL
8800: IFTRUE 8816
8802: LD_INT 7
8804: DOUBLE
8805: EQUAL
8806: IFTRUE 8816
8808: LD_INT 8
8810: DOUBLE
8811: EQUAL
8812: IFTRUE 8816
8814: GO 8827
8816: POP
// p = 91 ; b_teleport :
8817: LD_ADDR_VAR 0 5
8821: PUSH
8822: LD_INT 91
8824: ST_TO_ADDR
8825: GO 8885
8827: LD_INT 34
8829: DOUBLE
8830: EQUAL
8831: IFTRUE 8835
8833: GO 8846
8835: POP
// p = 90 ; b_siberite_mine :
8836: LD_ADDR_VAR 0 5
8840: PUSH
8841: LD_INT 90
8843: ST_TO_ADDR
8844: GO 8885
8846: LD_INT 30
8848: DOUBLE
8849: EQUAL
8850: IFTRUE 8854
8852: GO 8865
8854: POP
// p = 89 ; b_oil_mine :
8855: LD_ADDR_VAR 0 5
8859: PUSH
8860: LD_INT 89
8862: ST_TO_ADDR
8863: GO 8885
8865: LD_INT 29
8867: DOUBLE
8868: EQUAL
8869: IFTRUE 8873
8871: GO 8884
8873: POP
// p = 88 ; end ;
8874: LD_ADDR_VAR 0 5
8878: PUSH
8879: LD_INT 88
8881: ST_TO_ADDR
8882: GO 8885
8884: POP
// temp_list = temp_list ^ p ;
8885: LD_ADDR_VAR 0 4
8889: PUSH
8890: LD_VAR 0 4
8894: PUSH
8895: LD_VAR 0 5
8899: ADD
8900: ST_TO_ADDR
// end ;
8901: GO 8529
8903: POP
8904: POP
// temp_list = SortListByListDesc ( ai_buildings_locations [ base ] , temp_list ) ;
8905: LD_ADDR_VAR 0 4
8909: PUSH
8910: LD_EXP 61
8914: PUSH
8915: LD_VAR 0 1
8919: ARRAY
8920: PPUSH
8921: LD_VAR 0 4
8925: PPUSH
8926: CALL_OW 77
8930: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
8931: LD_ADDR_EXP 61
8935: PUSH
8936: LD_EXP 61
8940: PPUSH
8941: LD_VAR 0 1
8945: PPUSH
8946: LD_VAR 0 4
8950: PPUSH
8951: CALL_OW 1
8955: ST_TO_ADDR
// end ;
8956: LD_VAR 0 2
8960: RET
// function PrepareComputerSides ; var i , temp_list , side , base , num , nation ; begin
8961: LD_INT 0
8963: PPUSH
8964: PPUSH
8965: PPUSH
8966: PPUSH
8967: PPUSH
8968: PPUSH
8969: PPUSH
// for base in ai_bases do
8970: LD_ADDR_VAR 0 5
8974: PUSH
8975: LD_EXP 39
8979: PUSH
8980: FOR_IN
8981: IFFALSE 10493
// begin side = GetBaseSide ( base ) ;
8983: LD_ADDR_VAR 0 4
8987: PUSH
8988: LD_VAR 0 5
8992: PPUSH
8993: CALL 24885 0 1
8997: ST_TO_ADDR
// nation = GetBaseNation ( base ) ;
8998: LD_ADDR_VAR 0 7
9002: PUSH
9003: LD_VAR 0 5
9007: PPUSH
9008: CALL 24983 0 1
9012: ST_TO_ADDR
// InitUc ;
9013: CALL_OW 18
// InitHc ;
9017: CALL_OW 19
// uc_side = side ;
9021: LD_ADDR_OWVAR 20
9025: PUSH
9026: LD_VAR 0 4
9030: ST_TO_ADDR
// uc_nation = nation ;
9031: LD_ADDR_OWVAR 21
9035: PUSH
9036: LD_VAR 0 7
9040: ST_TO_ADDR
// case base of 1 :
9041: LD_VAR 0 5
9045: PUSH
9046: LD_INT 1
9048: DOUBLE
9049: EQUAL
9050: IFTRUE 9054
9052: GO 9142
9054: POP
// begin temp_list = CreateUnitsWithClass ( ai_bunkers [ base ] , class_soldier , base ) ;
9055: LD_ADDR_VAR 0 3
9059: PUSH
9060: LD_EXP 53
9064: PUSH
9065: LD_VAR 0 5
9069: ARRAY
9070: PPUSH
9071: LD_INT 1
9073: PPUSH
9074: LD_VAR 0 5
9078: PPUSH
9079: CALL 13445 0 3
9083: ST_TO_ADDR
// temp_list = CreateUnitsWithClass ( [ 4 , 5 , 6 ] [ difficulty ] * ai_armouries [ base ] , class_bazooker , base ) ^ temp_list ;
9084: LD_ADDR_VAR 0 3
9088: PUSH
9089: LD_INT 4
9091: PUSH
9092: LD_INT 5
9094: PUSH
9095: LD_INT 6
9097: PUSH
9098: EMPTY
9099: LIST
9100: LIST
9101: LIST
9102: PUSH
9103: LD_OWVAR 67
9107: ARRAY
9108: PUSH
9109: LD_EXP 52
9113: PUSH
9114: LD_VAR 0 5
9118: ARRAY
9119: MUL
9120: PPUSH
9121: LD_INT 9
9123: PPUSH
9124: LD_VAR 0 5
9128: PPUSH
9129: CALL 13445 0 3
9133: PUSH
9134: LD_VAR 0 3
9138: ADD
9139: ST_TO_ADDR
// end ; 2 :
9140: GO 9440
9142: LD_INT 2
9144: DOUBLE
9145: EQUAL
9146: IFTRUE 9150
9148: GO 9247
9150: POP
// begin temp_list = CreateUnitsWithClass ( ai_bunkers [ base ] + [ 2 , 1 , 0 ] [ difficulty ] , class_soldier , base ) ;
9151: LD_ADDR_VAR 0 3
9155: PUSH
9156: LD_EXP 53
9160: PUSH
9161: LD_VAR 0 5
9165: ARRAY
9166: PUSH
9167: LD_INT 2
9169: PUSH
9170: LD_INT 1
9172: PUSH
9173: LD_INT 0
9175: PUSH
9176: EMPTY
9177: LIST
9178: LIST
9179: LIST
9180: PUSH
9181: LD_OWVAR 67
9185: ARRAY
9186: PLUS
9187: PPUSH
9188: LD_INT 1
9190: PPUSH
9191: LD_VAR 0 5
9195: PPUSH
9196: CALL 13445 0 3
9200: ST_TO_ADDR
// temp_list = CreateUnitsWithClass ( [ 0 , 1 , 2 ] [ difficulty ] , class_sniper , base ) ^ temp_list ;
9201: LD_ADDR_VAR 0 3
9205: PUSH
9206: LD_INT 0
9208: PUSH
9209: LD_INT 1
9211: PUSH
9212: LD_INT 2
9214: PUSH
9215: EMPTY
9216: LIST
9217: LIST
9218: LIST
9219: PUSH
9220: LD_OWVAR 67
9224: ARRAY
9225: PPUSH
9226: LD_INT 5
9228: PPUSH
9229: LD_VAR 0 5
9233: PPUSH
9234: CALL 13445 0 3
9238: PUSH
9239: LD_VAR 0 3
9243: ADD
9244: ST_TO_ADDR
// end ; 3 :
9245: GO 9440
9247: LD_INT 3
9249: DOUBLE
9250: EQUAL
9251: IFTRUE 9255
9253: GO 9343
9255: POP
// begin temp_list = CreateUnitsWithClass ( ai_bunkers [ base ] , class_soldier , base ) ;
9256: LD_ADDR_VAR 0 3
9260: PUSH
9261: LD_EXP 53
9265: PUSH
9266: LD_VAR 0 5
9270: ARRAY
9271: PPUSH
9272: LD_INT 1
9274: PPUSH
9275: LD_VAR 0 5
9279: PPUSH
9280: CALL 13445 0 3
9284: ST_TO_ADDR
// temp_list = CreateUnitsWithClass ( [ 4 , 5 , 6 ] [ difficulty ] * ai_armouries [ base ] , class_mortar , base ) ^ temp_list ;
9285: LD_ADDR_VAR 0 3
9289: PUSH
9290: LD_INT 4
9292: PUSH
9293: LD_INT 5
9295: PUSH
9296: LD_INT 6
9298: PUSH
9299: EMPTY
9300: LIST
9301: LIST
9302: LIST
9303: PUSH
9304: LD_OWVAR 67
9308: ARRAY
9309: PUSH
9310: LD_EXP 52
9314: PUSH
9315: LD_VAR 0 5
9319: ARRAY
9320: MUL
9321: PPUSH
9322: LD_INT 8
9324: PPUSH
9325: LD_VAR 0 5
9329: PPUSH
9330: CALL 13445 0 3
9334: PUSH
9335: LD_VAR 0 3
9339: ADD
9340: ST_TO_ADDR
// end ; 4 :
9341: GO 9440
9343: LD_INT 4
9345: DOUBLE
9346: EQUAL
9347: IFTRUE 9351
9349: GO 9439
9351: POP
// begin temp_list = CreateUnitsWithClass ( ai_bunkers [ base ] , class_soldier , base ) ;
9352: LD_ADDR_VAR 0 3
9356: PUSH
9357: LD_EXP 53
9361: PUSH
9362: LD_VAR 0 5
9366: ARRAY
9367: PPUSH
9368: LD_INT 1
9370: PPUSH
9371: LD_VAR 0 5
9375: PPUSH
9376: CALL 13445 0 3
9380: ST_TO_ADDR
// temp_list = CreateUnitsWithClass ( [ 4 , 5 , 6 ] [ difficulty ] * ai_armouries [ base ] , class_sniper , base ) ^ temp_list ;
9381: LD_ADDR_VAR 0 3
9385: PUSH
9386: LD_INT 4
9388: PUSH
9389: LD_INT 5
9391: PUSH
9392: LD_INT 6
9394: PUSH
9395: EMPTY
9396: LIST
9397: LIST
9398: LIST
9399: PUSH
9400: LD_OWVAR 67
9404: ARRAY
9405: PUSH
9406: LD_EXP 52
9410: PUSH
9411: LD_VAR 0 5
9415: ARRAY
9416: MUL
9417: PPUSH
9418: LD_INT 5
9420: PPUSH
9421: LD_VAR 0 5
9425: PPUSH
9426: CALL 13445 0 3
9430: PUSH
9431: LD_VAR 0 3
9435: ADD
9436: ST_TO_ADDR
// end ; end ;
9437: GO 9440
9439: POP
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
9440: LD_ADDR_EXP 40
9444: PUSH
9445: LD_EXP 40
9449: PPUSH
9450: LD_VAR 0 5
9454: PPUSH
9455: LD_VAR 0 3
9459: PPUSH
9460: CALL_OW 1
9464: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_soldiers [ base ] , ai_armouries [ base ] ) ;
9465: LD_VAR 0 5
9469: PPUSH
9470: LD_EXP 40
9474: PUSH
9475: LD_VAR 0 5
9479: ARRAY
9480: PPUSH
9481: LD_EXP 52
9485: PUSH
9486: LD_VAR 0 5
9490: ARRAY
9491: PPUSH
9492: CALL 13797 0 3
// ai_engineers = Replace ( ai_engineers , base , CreateUnitsWithClass ( [ [ 4 , 5 , 6 ] [ difficulty ] , 3 , [ 2 , 3 , 4 ] [ difficulty ] , [ 4 , 5 , 6 ] [ difficulty ] ] [ base ] , class_engineer , base ) ) ;
9496: LD_ADDR_EXP 42
9500: PUSH
9501: LD_EXP 42
9505: PPUSH
9506: LD_VAR 0 5
9510: PPUSH
9511: LD_INT 4
9513: PUSH
9514: LD_INT 5
9516: PUSH
9517: LD_INT 6
9519: PUSH
9520: EMPTY
9521: LIST
9522: LIST
9523: LIST
9524: PUSH
9525: LD_OWVAR 67
9529: ARRAY
9530: PUSH
9531: LD_INT 3
9533: PUSH
9534: LD_INT 2
9536: PUSH
9537: LD_INT 3
9539: PUSH
9540: LD_INT 4
9542: PUSH
9543: EMPTY
9544: LIST
9545: LIST
9546: LIST
9547: PUSH
9548: LD_OWVAR 67
9552: ARRAY
9553: PUSH
9554: LD_INT 4
9556: PUSH
9557: LD_INT 5
9559: PUSH
9560: LD_INT 6
9562: PUSH
9563: EMPTY
9564: LIST
9565: LIST
9566: LIST
9567: PUSH
9568: LD_OWVAR 67
9572: ARRAY
9573: PUSH
9574: EMPTY
9575: LIST
9576: LIST
9577: LIST
9578: LIST
9579: PUSH
9580: LD_VAR 0 5
9584: ARRAY
9585: PPUSH
9586: LD_INT 2
9588: PPUSH
9589: LD_VAR 0 5
9593: PPUSH
9594: CALL 13445 0 3
9598: PPUSH
9599: CALL_OW 1
9603: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_engineers [ base ] , [ ai_depot [ base ] ] ) ;
9604: LD_VAR 0 5
9608: PPUSH
9609: LD_EXP 42
9613: PUSH
9614: LD_VAR 0 5
9618: ARRAY
9619: PPUSH
9620: LD_EXP 49
9624: PUSH
9625: LD_VAR 0 5
9629: ARRAY
9630: PUSH
9631: EMPTY
9632: LIST
9633: PPUSH
9634: CALL 13797 0 3
// temp_list = [ ] ;
9638: LD_ADDR_VAR 0 3
9642: PUSH
9643: EMPTY
9644: ST_TO_ADDR
// for i in ai_engineers [ base ] do
9645: LD_ADDR_VAR 0 2
9649: PUSH
9650: LD_EXP 42
9654: PUSH
9655: LD_VAR 0 5
9659: ARRAY
9660: PUSH
9661: FOR_IN
9662: IFFALSE 9690
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
9664: LD_ADDR_VAR 0 3
9668: PUSH
9669: LD_VAR 0 3
9673: PUSH
9674: LD_VAR 0 2
9678: PPUSH
9679: LD_INT 2
9681: PPUSH
9682: CALL_OW 259
9686: ADD
9687: ST_TO_ADDR
9688: GO 9661
9690: POP
9691: POP
// num = BestFromListByList ( temp_list , temp_list ) ;
9692: LD_ADDR_VAR 0 6
9696: PUSH
9697: LD_VAR 0 3
9701: PPUSH
9702: LD_VAR 0 3
9706: PPUSH
9707: CALL_OW 79
9711: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
9712: LD_ADDR_VAR 0 2
9716: PUSH
9717: LD_EXP 76
9721: PUSH
9722: LD_VAR 0 5
9726: ARRAY
9727: PUSH
9728: FOR_IN
9729: IFFALSE 9747
// SetBLevel ( i , num ) ;
9731: LD_VAR 0 2
9735: PPUSH
9736: LD_VAR 0 6
9740: PPUSH
9741: CALL_OW 241
9745: GO 9728
9747: POP
9748: POP
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , CreateApemenWithClass ( [ [ 0 , 1 , 2 ] [ difficulty ] , 1 , 0 , [ 0 , 1 , 2 ] [ difficulty ] ] [ base ] , class_apeman_engineer , base ) ) ;
9749: LD_ADDR_EXP 47
9753: PUSH
9754: LD_EXP 47
9758: PPUSH
9759: LD_VAR 0 5
9763: PPUSH
9764: LD_INT 0
9766: PUSH
9767: LD_INT 1
9769: PUSH
9770: LD_INT 2
9772: PUSH
9773: EMPTY
9774: LIST
9775: LIST
9776: LIST
9777: PUSH
9778: LD_OWVAR 67
9782: ARRAY
9783: PUSH
9784: LD_INT 1
9786: PUSH
9787: LD_INT 0
9789: PUSH
9790: LD_INT 0
9792: PUSH
9793: LD_INT 1
9795: PUSH
9796: LD_INT 2
9798: PUSH
9799: EMPTY
9800: LIST
9801: LIST
9802: LIST
9803: PUSH
9804: LD_OWVAR 67
9808: ARRAY
9809: PUSH
9810: EMPTY
9811: LIST
9812: LIST
9813: LIST
9814: LIST
9815: PUSH
9816: LD_VAR 0 5
9820: ARRAY
9821: PPUSH
9822: LD_INT 16
9824: PPUSH
9825: LD_VAR 0 5
9829: PPUSH
9830: CALL 13616 0 3
9834: PPUSH
9835: CALL_OW 1
9839: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_apemen_engineers [ base ] , [ ai_depot [ base ] ] ) ;
9840: LD_VAR 0 5
9844: PPUSH
9845: LD_EXP 47
9849: PUSH
9850: LD_VAR 0 5
9854: ARRAY
9855: PPUSH
9856: LD_EXP 49
9860: PUSH
9861: LD_VAR 0 5
9865: ARRAY
9866: PUSH
9867: EMPTY
9868: LIST
9869: PPUSH
9870: CALL 13797 0 3
// if base = 2 then
9874: LD_VAR 0 5
9878: PUSH
9879: LD_INT 2
9881: EQUAL
9882: IFFALSE 9894
// num = 3 else
9884: LD_ADDR_VAR 0 6
9888: PUSH
9889: LD_INT 3
9891: ST_TO_ADDR
9892: GO 9902
// num = 6 ;
9894: LD_ADDR_VAR 0 6
9898: PUSH
9899: LD_INT 6
9901: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , CreateUnitsWithClass ( num , class_mechanic , base ) ) ;
9902: LD_ADDR_EXP 43
9906: PUSH
9907: LD_EXP 43
9911: PPUSH
9912: LD_VAR 0 5
9916: PPUSH
9917: LD_VAR 0 6
9921: PPUSH
9922: LD_INT 3
9924: PPUSH
9925: LD_VAR 0 5
9929: PPUSH
9930: CALL 13445 0 3
9934: PPUSH
9935: CALL_OW 1
9939: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_mechanics_defend [ base ] , ai_facts [ base ] diff ai_sib_bomb_fact [ base ] ) ;
9940: LD_VAR 0 5
9944: PPUSH
9945: LD_EXP 43
9949: PUSH
9950: LD_VAR 0 5
9954: ARRAY
9955: PPUSH
9956: LD_EXP 51
9960: PUSH
9961: LD_VAR 0 5
9965: ARRAY
9966: PUSH
9967: LD_EXP 63
9971: PUSH
9972: LD_VAR 0 5
9976: ARRAY
9977: DIFF
9978: PPUSH
9979: CALL 13797 0 3
// ai_sib_bomb_mechanics = Replace ( ai_sib_bomb_mechanics , base , CreateUnitsWithClass ( [ 3 , 0 , 0 , 3 ] [ base ] , class_mechanic , base ) ) ;
9983: LD_ADDR_EXP 65
9987: PUSH
9988: LD_EXP 65
9992: PPUSH
9993: LD_VAR 0 5
9997: PPUSH
9998: LD_INT 3
10000: PUSH
10001: LD_INT 0
10003: PUSH
10004: LD_INT 0
10006: PUSH
10007: LD_INT 3
10009: PUSH
10010: EMPTY
10011: LIST
10012: LIST
10013: LIST
10014: LIST
10015: PUSH
10016: LD_VAR 0 5
10020: ARRAY
10021: PPUSH
10022: LD_INT 3
10024: PPUSH
10025: LD_VAR 0 5
10029: PPUSH
10030: CALL 13445 0 3
10034: PPUSH
10035: CALL_OW 1
10039: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_sib_bomb_mechanics [ base ] , ai_sib_bomb_fact [ base ] ) ;
10040: LD_VAR 0 5
10044: PPUSH
10045: LD_EXP 65
10049: PUSH
10050: LD_VAR 0 5
10054: ARRAY
10055: PPUSH
10056: LD_EXP 63
10060: PUSH
10061: LD_VAR 0 5
10065: ARRAY
10066: PPUSH
10067: CALL 13797 0 3
// for i in ai_sib_bomb_mechanics [ base ] do
10071: LD_ADDR_VAR 0 2
10075: PUSH
10076: LD_EXP 65
10080: PUSH
10081: LD_VAR 0 5
10085: ARRAY
10086: PUSH
10087: FOR_IN
10088: IFFALSE 10107
// SetSkill ( i , skill_mechanical , 10 ) ;
10090: LD_VAR 0 2
10094: PPUSH
10095: LD_INT 3
10097: PPUSH
10098: LD_INT 10
10100: PPUSH
10101: CALL_OW 237
10105: GO 10087
10107: POP
10108: POP
// num = [ [ 6 , 7 , 8 ] [ difficulty ] , 8 , [ 3 , 4 , 5 ] [ difficulty ] , [ 6 , 7 , 8 ] [ difficulty ] ] [ base ] ;
10109: LD_ADDR_VAR 0 6
10113: PUSH
10114: LD_INT 6
10116: PUSH
10117: LD_INT 7
10119: PUSH
10120: LD_INT 8
10122: PUSH
10123: EMPTY
10124: LIST
10125: LIST
10126: LIST
10127: PUSH
10128: LD_OWVAR 67
10132: ARRAY
10133: PUSH
10134: LD_INT 8
10136: PUSH
10137: LD_INT 3
10139: PUSH
10140: LD_INT 4
10142: PUSH
10143: LD_INT 5
10145: PUSH
10146: EMPTY
10147: LIST
10148: LIST
10149: LIST
10150: PUSH
10151: LD_OWVAR 67
10155: ARRAY
10156: PUSH
10157: LD_INT 6
10159: PUSH
10160: LD_INT 7
10162: PUSH
10163: LD_INT 8
10165: PUSH
10166: EMPTY
10167: LIST
10168: LIST
10169: LIST
10170: PUSH
10171: LD_OWVAR 67
10175: ARRAY
10176: PUSH
10177: EMPTY
10178: LIST
10179: LIST
10180: LIST
10181: LIST
10182: PUSH
10183: LD_VAR 0 5
10187: ARRAY
10188: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , CreateUnitsWithClass ( num , class_scientistic , base ) ) ;
10189: LD_ADDR_EXP 45
10193: PUSH
10194: LD_EXP 45
10198: PPUSH
10199: LD_VAR 0 5
10203: PPUSH
10204: LD_VAR 0 6
10208: PPUSH
10209: LD_INT 4
10211: PPUSH
10212: LD_VAR 0 5
10216: PPUSH
10217: CALL 13445 0 3
10221: PPUSH
10222: CALL_OW 1
10226: ST_TO_ADDR
// PlaceComputerUnits ( base , ai_scientists [ base ] , ai_labs [ base ] ) ;
10227: LD_VAR 0 5
10231: PPUSH
10232: LD_EXP 45
10236: PUSH
10237: LD_VAR 0 5
10241: ARRAY
10242: PPUSH
10243: LD_EXP 50
10247: PUSH
10248: LD_VAR 0 5
10252: ARRAY
10253: PPUSH
10254: CALL 13797 0 3
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_cans , 300 ) ;
10258: LD_EXP 49
10262: PUSH
10263: LD_VAR 0 5
10267: ARRAY
10268: PPUSH
10269: CALL_OW 274
10273: PPUSH
10274: LD_INT 1
10276: PPUSH
10277: LD_INT 300
10279: PPUSH
10280: CALL_OW 277
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_oil , 300 ) ;
10284: LD_EXP 49
10288: PUSH
10289: LD_VAR 0 5
10293: ARRAY
10294: PPUSH
10295: CALL_OW 274
10299: PPUSH
10300: LD_INT 2
10302: PPUSH
10303: LD_INT 300
10305: PPUSH
10306: CALL_OW 277
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_siberit , 300 ) ;
10310: LD_EXP 49
10314: PUSH
10315: LD_VAR 0 5
10319: ARRAY
10320: PPUSH
10321: CALL_OW 274
10325: PPUSH
10326: LD_INT 3
10328: PPUSH
10329: LD_INT 300
10331: PPUSH
10332: CALL_OW 277
// ResetVehicleAttackDelay ( base ) ;
10336: LD_VAR 0 5
10340: PPUSH
10341: CALL 69736 0 1
// if base = 1 then
10345: LD_VAR 0 5
10349: PUSH
10350: LD_INT 1
10352: EQUAL
10353: IFFALSE 10395
// ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , base , [ 8 8$0 , 6 6$30 , 5 5$0 ] [ difficulty ] ) ;
10355: LD_ADDR_EXP 83
10359: PUSH
10360: LD_EXP 83
10364: PPUSH
10365: LD_VAR 0 5
10369: PPUSH
10370: LD_INT 16800
10372: PUSH
10373: LD_INT 13650
10375: PUSH
10376: LD_INT 10500
10378: PUSH
10379: EMPTY
10380: LIST
10381: LIST
10382: LIST
10383: PUSH
10384: LD_OWVAR 67
10388: ARRAY
10389: PPUSH
10390: CALL_OW 1
10394: ST_TO_ADDR
// if base = 3 then
10395: LD_VAR 0 5
10399: PUSH
10400: LD_INT 3
10402: EQUAL
10403: IFFALSE 10491
// ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , base , [ 8 8$0 , 6 6$30 , 5 5$0 ] [ difficulty ] + ( 0 0$40 + ai_vehicle_attack_delay [ base ] ) * ( difficulty = 1 ) + 0 0$40 + ai_vehicle_attack_delay [ base ] div 2 ) ;
10405: LD_ADDR_EXP 83
10409: PUSH
10410: LD_EXP 83
10414: PPUSH
10415: LD_VAR 0 5
10419: PPUSH
10420: LD_INT 16800
10422: PUSH
10423: LD_INT 13650
10425: PUSH
10426: LD_INT 10500
10428: PUSH
10429: EMPTY
10430: LIST
10431: LIST
10432: LIST
10433: PUSH
10434: LD_OWVAR 67
10438: ARRAY
10439: PUSH
10440: LD_INT 1400
10442: PUSH
10443: LD_EXP 83
10447: PUSH
10448: LD_VAR 0 5
10452: ARRAY
10453: PLUS
10454: PUSH
10455: LD_OWVAR 67
10459: PUSH
10460: LD_INT 1
10462: EQUAL
10463: MUL
10464: PLUS
10465: PUSH
10466: LD_INT 1400
10468: PLUS
10469: PUSH
10470: LD_EXP 83
10474: PUSH
10475: LD_VAR 0 5
10479: ARRAY
10480: PUSH
10481: LD_INT 2
10483: DIV
10484: PLUS
10485: PPUSH
10486: CALL_OW 1
10490: ST_TO_ADDR
// end ;
10491: GO 8980
10493: POP
10494: POP
// SetBLevel ( alien_tower , 10 ) ;
10495: LD_INT 1
10497: PPUSH
10498: LD_INT 10
10500: PPUSH
10501: CALL_OW 241
// uc_side = russians ;
10505: LD_ADDR_OWVAR 20
10509: PUSH
10510: LD_EXP 3
10514: ST_TO_ADDR
// Platonov = NewCharacter ( Platonov ) ;
10515: LD_ADDR_EXP 25
10519: PUSH
10520: LD_STRING Platonov
10522: PPUSH
10523: CALL_OW 25
10527: ST_TO_ADDR
// SetSkill ( Platonov , skill_combat , 10 ) ;
10528: LD_EXP 25
10532: PPUSH
10533: LD_INT 1
10535: PPUSH
10536: LD_INT 10
10538: PPUSH
10539: CALL_OW 237
// SetSkill ( Platonov , skill_engineering , 6 ) ;
10543: LD_EXP 25
10547: PPUSH
10548: LD_INT 2
10550: PPUSH
10551: LD_INT 6
10553: PPUSH
10554: CALL_OW 237
// SetSkill ( Platonov , skill_mechanical , 7 ) ;
10558: LD_EXP 25
10562: PPUSH
10563: LD_INT 3
10565: PPUSH
10566: LD_INT 7
10568: PPUSH
10569: CALL_OW 237
// SetSkill ( Platonov , skill_scientistic , 5 ) ;
10573: LD_EXP 25
10577: PPUSH
10578: LD_INT 4
10580: PPUSH
10581: LD_INT 5
10583: PPUSH
10584: CALL_OW 237
// SetClass ( Platonov , class_soldier ) ;
10588: LD_EXP 25
10592: PPUSH
10593: LD_INT 1
10595: PPUSH
10596: CALL_OW 336
// temp_list = ai_soldiers [ 1 ] ^ Platonov ;
10600: LD_ADDR_VAR 0 3
10604: PUSH
10605: LD_EXP 40
10609: PUSH
10610: LD_INT 1
10612: ARRAY
10613: PUSH
10614: LD_EXP 25
10618: ADD
10619: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , 1 , temp_list ) ;
10620: LD_ADDR_EXP 40
10624: PUSH
10625: LD_EXP 40
10629: PPUSH
10630: LD_INT 1
10632: PPUSH
10633: LD_VAR 0 3
10637: PPUSH
10638: CALL_OW 1
10642: ST_TO_ADDR
// PlaceComputerUnits ( 1 , [ Platonov ] , [ ] ) ;
10643: LD_INT 1
10645: PPUSH
10646: LD_EXP 25
10650: PUSH
10651: EMPTY
10652: LIST
10653: PPUSH
10654: EMPTY
10655: PPUSH
10656: CALL 13797 0 3
// uc_side = alliance ;
10660: LD_ADDR_OWVAR 20
10664: PUSH
10665: LD_EXP 5
10669: ST_TO_ADDR
// Roth = NewCharacter ( Roth ) ;
10670: LD_ADDR_EXP 26
10674: PUSH
10675: LD_STRING Roth
10677: PPUSH
10678: CALL_OW 25
10682: ST_TO_ADDR
// SetClass ( Roth , class_scientistic ) ;
10683: LD_EXP 26
10687: PPUSH
10688: LD_INT 4
10690: PPUSH
10691: CALL_OW 336
// if not testing then
10695: LD_EXP 1
10699: NOT
10700: IFFALSE 10748
// begin if TestCharacters ( Gossudarov_10 ) then
10702: LD_STRING Gossudarov_10
10704: PPUSH
10705: CALL_OW 28
10709: IFFALSE 10738
// begin Gossudarov = CreateCharacter ( Gossudarov_10 ) ;
10711: LD_ADDR_EXP 27
10715: PUSH
10716: LD_STRING Gossudarov_10
10718: PPUSH
10719: CALL_OW 34
10723: ST_TO_ADDR
// SetClass ( Gossudarov , class_scientistic ) ;
10724: LD_EXP 27
10728: PPUSH
10729: LD_INT 4
10731: PPUSH
10732: CALL_OW 336
// end else
10736: GO 10746
// Gossudarov = 0 ;
10738: LD_ADDR_EXP 27
10742: PUSH
10743: LD_INT 0
10745: ST_TO_ADDR
// end else
10746: GO 10788
// begin uc_nation = nation_russian ;
10748: LD_ADDR_OWVAR 21
10752: PUSH
10753: LD_INT 3
10755: ST_TO_ADDR
// InitHc ;
10756: CALL_OW 19
// PrepareScientist ( sex_male , 10 ) ;
10760: LD_INT 1
10762: PPUSH
10763: LD_INT 10
10765: PPUSH
10766: CALL_OW 384
// hc_name = Gossudarov ;
10770: LD_ADDR_OWVAR 26
10774: PUSH
10775: LD_STRING Gossudarov
10777: ST_TO_ADDR
// Gossudarov = CreateHuman ;
10778: LD_ADDR_EXP 27
10782: PUSH
10783: CALL_OW 44
10787: ST_TO_ADDR
// end ; Joan = NewCharacter ( Joan ) ;
10788: LD_ADDR_EXP 28
10792: PUSH
10793: LD_STRING Joan
10795: PPUSH
10796: CALL_OW 25
10800: ST_TO_ADDR
// SetClass ( Joan , class_scientistic ) ;
10801: LD_EXP 28
10805: PPUSH
10806: LD_INT 4
10808: PPUSH
10809: CALL_OW 336
// temp_list = ai_scientists [ 2 ] ^ ( [ Roth , Gossudarov , Joan ] diff 0 ) ;
10813: LD_ADDR_VAR 0 3
10817: PUSH
10818: LD_EXP 45
10822: PUSH
10823: LD_INT 2
10825: ARRAY
10826: PUSH
10827: LD_EXP 26
10831: PUSH
10832: LD_EXP 27
10836: PUSH
10837: LD_EXP 28
10841: PUSH
10842: EMPTY
10843: LIST
10844: LIST
10845: LIST
10846: PUSH
10847: LD_INT 0
10849: DIFF
10850: ADD
10851: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , 2 , temp_list ) ;
10852: LD_ADDR_EXP 45
10856: PUSH
10857: LD_EXP 45
10861: PPUSH
10862: LD_INT 2
10864: PPUSH
10865: LD_VAR 0 3
10869: PPUSH
10870: CALL_OW 1
10874: ST_TO_ADDR
// PlaceComputerUnits ( 2 , [ Roth , Gossudarov , Joan ] diff 0 , [ ] ) ;
10875: LD_INT 2
10877: PPUSH
10878: LD_EXP 26
10882: PUSH
10883: LD_EXP 27
10887: PUSH
10888: LD_EXP 28
10892: PUSH
10893: EMPTY
10894: LIST
10895: LIST
10896: LIST
10897: PUSH
10898: LD_INT 0
10900: DIFF
10901: PPUSH
10902: EMPTY
10903: PPUSH
10904: CALL 13797 0 3
// uc_side = arabians ;
10908: LD_ADDR_OWVAR 20
10912: PUSH
10913: LD_EXP 6
10917: ST_TO_ADDR
// Omar = NewCharacter ( Omar ) ;
10918: LD_ADDR_EXP 29
10922: PUSH
10923: LD_STRING Omar
10925: PPUSH
10926: CALL_OW 25
10930: ST_TO_ADDR
// SetSkill ( Omar , skill_combat , 10 ) ;
10931: LD_EXP 29
10935: PPUSH
10936: LD_INT 1
10938: PPUSH
10939: LD_INT 10
10941: PPUSH
10942: CALL_OW 237
// SetSkill ( Omar , skill_engineering , 5 ) ;
10946: LD_EXP 29
10950: PPUSH
10951: LD_INT 2
10953: PPUSH
10954: LD_INT 5
10956: PPUSH
10957: CALL_OW 237
// SetSkill ( Omar , skill_mechanical , 4 ) ;
10961: LD_EXP 29
10965: PPUSH
10966: LD_INT 3
10968: PPUSH
10969: LD_INT 4
10971: PPUSH
10972: CALL_OW 237
// SetSkill ( Omar , skill_scientistic , 8 ) ;
10976: LD_EXP 29
10980: PPUSH
10981: LD_INT 4
10983: PPUSH
10984: LD_INT 8
10986: PPUSH
10987: CALL_OW 237
// SetClass ( Omar , class_desert_warior ) ;
10991: LD_EXP 29
10995: PPUSH
10996: LD_INT 11
10998: PPUSH
10999: CALL_OW 336
// temp_list = ai_soldiers [ 3 ] ^ Omar ;
11003: LD_ADDR_VAR 0 3
11007: PUSH
11008: LD_EXP 40
11012: PUSH
11013: LD_INT 3
11015: ARRAY
11016: PUSH
11017: LD_EXP 29
11021: ADD
11022: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , 3 , temp_list ) ;
11023: LD_ADDR_EXP 40
11027: PUSH
11028: LD_EXP 40
11032: PPUSH
11033: LD_INT 3
11035: PPUSH
11036: LD_VAR 0 3
11040: PPUSH
11041: CALL_OW 1
11045: ST_TO_ADDR
// if not testing then
11046: LD_EXP 1
11050: NOT
11051: IFFALSE 11099
// begin if TestCharacters ( Gensher_13a_cont ) then
11053: LD_STRING Gensher_13a_cont
11055: PPUSH
11056: CALL_OW 28
11060: IFFALSE 11089
// begin Gensher = CreateCharacter ( Gensher_13a_cont ) ;
11062: LD_ADDR_EXP 30
11066: PUSH
11067: LD_STRING Gensher_13a_cont
11069: PPUSH
11070: CALL_OW 34
11074: ST_TO_ADDR
// SetClass ( Gensher , class_soldier ) ;
11075: LD_EXP 30
11079: PPUSH
11080: LD_INT 1
11082: PPUSH
11083: CALL_OW 336
// end else
11087: GO 11097
// Gensher = 0 ;
11089: LD_ADDR_EXP 30
11093: PUSH
11094: LD_INT 0
11096: ST_TO_ADDR
// end else
11097: GO 11139
// begin uc_nation = nation_arabian ;
11099: LD_ADDR_OWVAR 21
11103: PUSH
11104: LD_INT 2
11106: ST_TO_ADDR
// InitHc ;
11107: CALL_OW 19
// PrepareSoldier ( sex_male , 10 ) ;
11111: LD_INT 1
11113: PPUSH
11114: LD_INT 10
11116: PPUSH
11117: CALL_OW 381
// hc_name = Dietrich ;
11121: LD_ADDR_OWVAR 26
11125: PUSH
11126: LD_STRING Dietrich
11128: ST_TO_ADDR
// Gensher = CreateHuman ;
11129: LD_ADDR_EXP 30
11133: PUSH
11134: CALL_OW 44
11138: ST_TO_ADDR
// end ; PlaceHumanInUnit ( Omar , ar_mast ) ;
11139: LD_EXP 29
11143: PPUSH
11144: LD_INT 276
11146: PPUSH
11147: CALL_OW 52
// if TestCharacters ( Aviradze_11_cont ) then
11151: LD_STRING Aviradze_11_cont
11153: PPUSH
11154: CALL_OW 28
11158: IFFALSE 11175
// Aviradze = CreateCharacter ( Aviradze_11_cont ) else
11160: LD_ADDR_EXP 34
11164: PUSH
11165: LD_STRING Aviradze_11_cont
11167: PPUSH
11168: CALL_OW 34
11172: ST_TO_ADDR
11173: GO 11256
// if TestCharacters ( Aviradze_11_not_sel ) then
11175: LD_STRING Aviradze_11_not_sel
11177: PPUSH
11178: CALL_OW 28
11182: IFFALSE 11199
// Aviradze = CreateCharacter ( Aviradze_11_not_sel ) else
11184: LD_ADDR_EXP 34
11188: PUSH
11189: LD_STRING Aviradze_11_not_sel
11191: PPUSH
11192: CALL_OW 34
11196: ST_TO_ADDR
11197: GO 11256
// if not testing then
11199: LD_EXP 1
11203: NOT
11204: IFFALSE 11216
// Aviradze = 0 else
11206: LD_ADDR_EXP 34
11210: PUSH
11211: LD_INT 0
11213: ST_TO_ADDR
11214: GO 11256
// begin uc_nation = nation_arabian ;
11216: LD_ADDR_OWVAR 21
11220: PUSH
11221: LD_INT 2
11223: ST_TO_ADDR
// InitHc ;
11224: CALL_OW 19
// PrepareScientist ( sex_male , 10 ) ;
11228: LD_INT 1
11230: PPUSH
11231: LD_INT 10
11233: PPUSH
11234: CALL_OW 384
// hc_name = Aviradze ;
11238: LD_ADDR_OWVAR 26
11242: PUSH
11243: LD_STRING Aviradze
11245: ST_TO_ADDR
// Aviradze = CreateHuman ;
11246: LD_ADDR_EXP 34
11250: PUSH
11251: CALL_OW 44
11255: ST_TO_ADDR
// end ; if Aviradze > 0 then
11256: LD_EXP 34
11260: PUSH
11261: LD_INT 0
11263: GREATER
11264: IFFALSE 11387
// begin SetClass ( Aviradze , class_scientistic ) ;
11266: LD_EXP 34
11270: PPUSH
11271: LD_INT 4
11273: PPUSH
11274: CALL_OW 336
// DestroyUnit ( ai_scientists [ 3 ] [ 1 ] ) ;
11278: LD_EXP 45
11282: PUSH
11283: LD_INT 3
11285: ARRAY
11286: PUSH
11287: LD_INT 1
11289: ARRAY
11290: PPUSH
11291: CALL_OW 65
// temp_list = Delete ( ai_scientists [ 3 ] , 1 ) ^ Aviradze ;
11295: LD_ADDR_VAR 0 3
11299: PUSH
11300: LD_EXP 45
11304: PUSH
11305: LD_INT 3
11307: ARRAY
11308: PPUSH
11309: LD_INT 1
11311: PPUSH
11312: CALL_OW 3
11316: PUSH
11317: LD_EXP 34
11321: ADD
11322: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , 3 , temp_list ) ;
11323: LD_ADDR_EXP 45
11327: PUSH
11328: LD_EXP 45
11332: PPUSH
11333: LD_INT 3
11335: PPUSH
11336: LD_VAR 0 3
11340: PPUSH
11341: CALL_OW 1
11345: ST_TO_ADDR
// PlaceUnitXYR ( Aviradze , ai_human_pullback_hex [ 3 ] [ 1 ] , ai_human_pullback_hex [ 3 ] [ 2 ] , 7 , false ) ;
11346: LD_EXP 34
11350: PPUSH
11351: LD_EXP 73
11355: PUSH
11356: LD_INT 3
11358: ARRAY
11359: PUSH
11360: LD_INT 1
11362: ARRAY
11363: PPUSH
11364: LD_EXP 73
11368: PUSH
11369: LD_INT 3
11371: ARRAY
11372: PUSH
11373: LD_INT 2
11375: ARRAY
11376: PPUSH
11377: LD_INT 7
11379: PPUSH
11380: LD_INT 0
11382: PPUSH
11383: CALL_OW 50
// end ; if TestCharacters ( Evelyn_11_cont ) then
11387: LD_STRING Evelyn_11_cont
11389: PPUSH
11390: CALL_OW 28
11394: IFFALSE 11411
// Evelyn = CreateCharacter ( Evelyn_11_cont ) else
11396: LD_ADDR_EXP 35
11400: PUSH
11401: LD_STRING Evelyn_11_cont
11403: PPUSH
11404: CALL_OW 34
11408: ST_TO_ADDR
11409: GO 11492
// if TestCharacters ( Evelyn_11_not_sel ) then
11411: LD_STRING Evelyn_11_not_sel
11413: PPUSH
11414: CALL_OW 28
11418: IFFALSE 11435
// Evelyn = CreateCharacter ( Evelyn_11_not_sel ) else
11420: LD_ADDR_EXP 35
11424: PUSH
11425: LD_STRING Evelyn_11_not_sel
11427: PPUSH
11428: CALL_OW 34
11432: ST_TO_ADDR
11433: GO 11492
// if not testing then
11435: LD_EXP 1
11439: NOT
11440: IFFALSE 11452
// Evelyn = 0 else
11442: LD_ADDR_EXP 35
11446: PUSH
11447: LD_INT 0
11449: ST_TO_ADDR
11450: GO 11492
// begin uc_nation = nation_arabian ;
11452: LD_ADDR_OWVAR 21
11456: PUSH
11457: LD_INT 2
11459: ST_TO_ADDR
// InitHc ;
11460: CALL_OW 19
// PrepareEngineer ( sex_female , 10 ) ;
11464: LD_INT 2
11466: PPUSH
11467: LD_INT 10
11469: PPUSH
11470: CALL_OW 382
// hc_name = Evelyn ;
11474: LD_ADDR_OWVAR 26
11478: PUSH
11479: LD_STRING Evelyn
11481: ST_TO_ADDR
// Evelyn = CreateHuman ;
11482: LD_ADDR_EXP 35
11486: PUSH
11487: CALL_OW 44
11491: ST_TO_ADDR
// end ; if Evelyn > 0 then
11492: LD_EXP 35
11496: PUSH
11497: LD_INT 0
11499: GREATER
11500: IFFALSE 11623
// begin SetClass ( Evelyn , class_engineer ) ;
11502: LD_EXP 35
11506: PPUSH
11507: LD_INT 2
11509: PPUSH
11510: CALL_OW 336
// DestroyUnit ( ai_engineers [ 3 ] [ 1 ] ) ;
11514: LD_EXP 42
11518: PUSH
11519: LD_INT 3
11521: ARRAY
11522: PUSH
11523: LD_INT 1
11525: ARRAY
11526: PPUSH
11527: CALL_OW 65
// temp_list = Delete ( ai_engineers [ 3 ] , 1 ) ^ Evelyn ;
11531: LD_ADDR_VAR 0 3
11535: PUSH
11536: LD_EXP 42
11540: PUSH
11541: LD_INT 3
11543: ARRAY
11544: PPUSH
11545: LD_INT 1
11547: PPUSH
11548: CALL_OW 3
11552: PUSH
11553: LD_EXP 35
11557: ADD
11558: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , 3 , temp_list ) ;
11559: LD_ADDR_EXP 42
11563: PUSH
11564: LD_EXP 42
11568: PPUSH
11569: LD_INT 3
11571: PPUSH
11572: LD_VAR 0 3
11576: PPUSH
11577: CALL_OW 1
11581: ST_TO_ADDR
// PlaceUnitXYR ( Evelyn , ai_human_pullback_hex [ 3 ] [ 1 ] , ai_human_pullback_hex [ 3 ] [ 2 ] , 7 , false ) ;
11582: LD_EXP 35
11586: PPUSH
11587: LD_EXP 73
11591: PUSH
11592: LD_INT 3
11594: ARRAY
11595: PUSH
11596: LD_INT 1
11598: ARRAY
11599: PPUSH
11600: LD_EXP 73
11604: PUSH
11605: LD_INT 3
11607: ARRAY
11608: PUSH
11609: LD_INT 2
11611: ARRAY
11612: PPUSH
11613: LD_INT 7
11615: PPUSH
11616: LD_INT 0
11618: PPUSH
11619: CALL_OW 50
// end ; if TestCharacters ( Swansson_11_cont ) then
11623: LD_STRING Swansson_11_cont
11625: PPUSH
11626: CALL_OW 28
11630: IFFALSE 11647
// Swansson = CreateCharacter ( Swansson_11_cont ) else
11632: LD_ADDR_EXP 36
11636: PUSH
11637: LD_STRING Swansson_11_cont
11639: PPUSH
11640: CALL_OW 34
11644: ST_TO_ADDR
11645: GO 11728
// if TestCharacters ( Swansson_11_not_sel ) then
11647: LD_STRING Swansson_11_not_sel
11649: PPUSH
11650: CALL_OW 28
11654: IFFALSE 11671
// Swansson = CreateCharacter ( Swansson_11_not_sel ) else
11656: LD_ADDR_EXP 36
11660: PUSH
11661: LD_STRING Swansson_11_not_sel
11663: PPUSH
11664: CALL_OW 34
11668: ST_TO_ADDR
11669: GO 11728
// if not testing then
11671: LD_EXP 1
11675: NOT
11676: IFFALSE 11688
// Swansson = 0 else
11678: LD_ADDR_EXP 36
11682: PUSH
11683: LD_INT 0
11685: ST_TO_ADDR
11686: GO 11728
// begin uc_nation = nation_arabian ;
11688: LD_ADDR_OWVAR 21
11692: PUSH
11693: LD_INT 2
11695: ST_TO_ADDR
// InitHc ;
11696: CALL_OW 19
// PrepareMechanic ( sex_male , 10 ) ;
11700: LD_INT 1
11702: PPUSH
11703: LD_INT 10
11705: PPUSH
11706: CALL_OW 383
// hc_name = Swansson ;
11710: LD_ADDR_OWVAR 26
11714: PUSH
11715: LD_STRING Swansson
11717: ST_TO_ADDR
// Swansson = CreateHuman ;
11718: LD_ADDR_EXP 36
11722: PUSH
11723: CALL_OW 44
11727: ST_TO_ADDR
// end ; if Swansson > 0 then
11728: LD_EXP 36
11732: PUSH
11733: LD_INT 0
11735: GREATER
11736: IFFALSE 11859
// begin SetClass ( Swansson , class_mechanic ) ;
11738: LD_EXP 36
11742: PPUSH
11743: LD_INT 3
11745: PPUSH
11746: CALL_OW 336
// DestroyUnit ( ai_mechanics_defend [ 3 ] [ 1 ] ) ;
11750: LD_EXP 43
11754: PUSH
11755: LD_INT 3
11757: ARRAY
11758: PUSH
11759: LD_INT 1
11761: ARRAY
11762: PPUSH
11763: CALL_OW 65
// temp_list = Delete ( ai_mechanics_defend [ 3 ] , 1 ) ^ Swansson ;
11767: LD_ADDR_VAR 0 3
11771: PUSH
11772: LD_EXP 43
11776: PUSH
11777: LD_INT 3
11779: ARRAY
11780: PPUSH
11781: LD_INT 1
11783: PPUSH
11784: CALL_OW 3
11788: PUSH
11789: LD_EXP 36
11793: ADD
11794: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , 3 , temp_list ) ;
11795: LD_ADDR_EXP 43
11799: PUSH
11800: LD_EXP 43
11804: PPUSH
11805: LD_INT 3
11807: PPUSH
11808: LD_VAR 0 3
11812: PPUSH
11813: CALL_OW 1
11817: ST_TO_ADDR
// PlaceUnitXYR ( Swansson , ai_human_pullback_hex [ 3 ] [ 1 ] , ai_human_pullback_hex [ 3 ] [ 2 ] , 7 , false ) ;
11818: LD_EXP 36
11822: PPUSH
11823: LD_EXP 73
11827: PUSH
11828: LD_INT 3
11830: ARRAY
11831: PUSH
11832: LD_INT 1
11834: ARRAY
11835: PPUSH
11836: LD_EXP 73
11840: PUSH
11841: LD_INT 3
11843: ARRAY
11844: PUSH
11845: LD_INT 2
11847: ARRAY
11848: PPUSH
11849: LD_INT 7
11851: PPUSH
11852: LD_INT 0
11854: PPUSH
11855: CALL_OW 50
// end ; if TestCharacters ( Dwayne_11_cont ) then
11859: LD_STRING Dwayne_11_cont
11861: PPUSH
11862: CALL_OW 28
11866: IFFALSE 11883
// Dwayne = CreateCharacter ( Dwayne_11_cont ) else
11868: LD_ADDR_EXP 37
11872: PUSH
11873: LD_STRING Dwayne_11_cont
11875: PPUSH
11876: CALL_OW 34
11880: ST_TO_ADDR
11881: GO 11964
// if TestCharacters ( Dwayne_11_not_sel ) then
11883: LD_STRING Dwayne_11_not_sel
11885: PPUSH
11886: CALL_OW 28
11890: IFFALSE 11907
// Dwayne = CreateCharacter ( Dwayne_11_not_sel ) else
11892: LD_ADDR_EXP 37
11896: PUSH
11897: LD_STRING Dwayne_11_not_sel
11899: PPUSH
11900: CALL_OW 34
11904: ST_TO_ADDR
11905: GO 11964
// if not testing then
11907: LD_EXP 1
11911: NOT
11912: IFFALSE 11924
// Dwayne = 0 else
11914: LD_ADDR_EXP 37
11918: PUSH
11919: LD_INT 0
11921: ST_TO_ADDR
11922: GO 11964
// begin uc_nation = nation_arabian ;
11924: LD_ADDR_OWVAR 21
11928: PUSH
11929: LD_INT 2
11931: ST_TO_ADDR
// InitHc ;
11932: CALL_OW 19
// PrepareMechanic ( sex_male , 10 ) ;
11936: LD_INT 1
11938: PPUSH
11939: LD_INT 10
11941: PPUSH
11942: CALL_OW 383
// hc_name = Dwayne ;
11946: LD_ADDR_OWVAR 26
11950: PUSH
11951: LD_STRING Dwayne
11953: ST_TO_ADDR
// Dwayne = CreateHuman ;
11954: LD_ADDR_EXP 37
11958: PUSH
11959: CALL_OW 44
11963: ST_TO_ADDR
// end ; if Dwayne > 0 then
11964: LD_EXP 37
11968: PUSH
11969: LD_INT 0
11971: GREATER
11972: IFFALSE 12095
// begin SetClass ( Dwayne , class_mechanic ) ;
11974: LD_EXP 37
11978: PPUSH
11979: LD_INT 3
11981: PPUSH
11982: CALL_OW 336
// DestroyUnit ( ai_mechanics_defend [ 3 ] [ 1 ] ) ;
11986: LD_EXP 43
11990: PUSH
11991: LD_INT 3
11993: ARRAY
11994: PUSH
11995: LD_INT 1
11997: ARRAY
11998: PPUSH
11999: CALL_OW 65
// temp_list = Delete ( ai_mechanics_defend [ 3 ] , 1 ) ^ Dwayne ;
12003: LD_ADDR_VAR 0 3
12007: PUSH
12008: LD_EXP 43
12012: PUSH
12013: LD_INT 3
12015: ARRAY
12016: PPUSH
12017: LD_INT 1
12019: PPUSH
12020: CALL_OW 3
12024: PUSH
12025: LD_EXP 37
12029: ADD
12030: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , 3 , temp_list ) ;
12031: LD_ADDR_EXP 43
12035: PUSH
12036: LD_EXP 43
12040: PPUSH
12041: LD_INT 3
12043: PPUSH
12044: LD_VAR 0 3
12048: PPUSH
12049: CALL_OW 1
12053: ST_TO_ADDR
// PlaceUnitXYR ( Dwayne , ai_human_pullback_hex [ 3 ] [ 1 ] , ai_human_pullback_hex [ 3 ] [ 2 ] , 7 , false ) ;
12054: LD_EXP 37
12058: PPUSH
12059: LD_EXP 73
12063: PUSH
12064: LD_INT 3
12066: ARRAY
12067: PUSH
12068: LD_INT 1
12070: ARRAY
12071: PPUSH
12072: LD_EXP 73
12076: PUSH
12077: LD_INT 3
12079: ARRAY
12080: PUSH
12081: LD_INT 2
12083: ARRAY
12084: PPUSH
12085: LD_INT 7
12087: PPUSH
12088: LD_INT 0
12090: PPUSH
12091: CALL_OW 50
// end ; if TestCharacters ( Gonzo_11_cont ) then
12095: LD_STRING Gonzo_11_cont
12097: PPUSH
12098: CALL_OW 28
12102: IFFALSE 12119
// Gonzo = CreateCharacter ( Gonzo_11_cont ) else
12104: LD_ADDR_EXP 38
12108: PUSH
12109: LD_STRING Gonzo_11_cont
12111: PPUSH
12112: CALL_OW 34
12116: ST_TO_ADDR
12117: GO 12174
// if not testing then
12119: LD_EXP 1
12123: NOT
12124: IFFALSE 12136
// Gonzo = 0 else
12126: LD_ADDR_EXP 38
12130: PUSH
12131: LD_INT 0
12133: ST_TO_ADDR
12134: GO 12174
// begin uc_nation = nation_nature ;
12136: LD_ADDR_OWVAR 21
12140: PUSH
12141: LD_INT 0
12143: ST_TO_ADDR
// InitHc ;
12144: CALL_OW 19
// hc_class = class_apeman_engineer ;
12148: LD_ADDR_OWVAR 28
12152: PUSH
12153: LD_INT 16
12155: ST_TO_ADDR
// hc_name = Gonzo ;
12156: LD_ADDR_OWVAR 26
12160: PUSH
12161: LD_STRING Gonzo
12163: ST_TO_ADDR
// Gonzo = CreateHuman ;
12164: LD_ADDR_EXP 38
12168: PUSH
12169: CALL_OW 44
12173: ST_TO_ADDR
// end ; if Gonzo > 0 then
12174: LD_EXP 38
12178: PUSH
12179: LD_INT 0
12181: GREATER
12182: IFFALSE 12280
// begin SetClass ( Gonzo , class_apeman_engineer ) ;
12184: LD_EXP 38
12188: PPUSH
12189: LD_INT 16
12191: PPUSH
12192: CALL_OW 336
// temp_list = ai_apemen_engineers [ 3 ] ^ Gonzo ;
12196: LD_ADDR_VAR 0 3
12200: PUSH
12201: LD_EXP 47
12205: PUSH
12206: LD_INT 3
12208: ARRAY
12209: PUSH
12210: LD_EXP 38
12214: ADD
12215: ST_TO_ADDR
// ai_apemen_engineers = Replace ( ai_apemen_engineers , 3 , temp_list ) ;
12216: LD_ADDR_EXP 47
12220: PUSH
12221: LD_EXP 47
12225: PPUSH
12226: LD_INT 3
12228: PPUSH
12229: LD_VAR 0 3
12233: PPUSH
12234: CALL_OW 1
12238: ST_TO_ADDR
// PlaceUnitXYR ( Gonzo , ai_human_pullback_hex [ 3 ] [ 1 ] , ai_human_pullback_hex [ 3 ] [ 2 ] , 7 , false ) ;
12239: LD_EXP 38
12243: PPUSH
12244: LD_EXP 73
12248: PUSH
12249: LD_INT 3
12251: ARRAY
12252: PUSH
12253: LD_INT 1
12255: ARRAY
12256: PPUSH
12257: LD_EXP 73
12261: PUSH
12262: LD_INT 3
12264: ARRAY
12265: PUSH
12266: LD_INT 2
12268: ARRAY
12269: PPUSH
12270: LD_INT 7
12272: PPUSH
12273: LD_INT 0
12275: PPUSH
12276: CALL_OW 50
// end ; uc_side = americans ;
12280: LD_ADDR_OWVAR 20
12284: PUSH
12285: LD_EXP 7
12289: ST_TO_ADDR
// Powell = NewCharacter ( Powell ) ;
12290: LD_ADDR_EXP 31
12294: PUSH
12295: LD_STRING Powell
12297: PPUSH
12298: CALL_OW 25
12302: ST_TO_ADDR
// SetSkill ( Powell , skill_combat , 10 ) ;
12303: LD_EXP 31
12307: PPUSH
12308: LD_INT 1
12310: PPUSH
12311: LD_INT 10
12313: PPUSH
12314: CALL_OW 237
// SetSkill ( Powell , skill_engineering , 6 ) ;
12318: LD_EXP 31
12322: PPUSH
12323: LD_INT 2
12325: PPUSH
12326: LD_INT 6
12328: PPUSH
12329: CALL_OW 237
// SetSkill ( Powell , skill_mechanical , 9 ) ;
12333: LD_EXP 31
12337: PPUSH
12338: LD_INT 3
12340: PPUSH
12341: LD_INT 9
12343: PPUSH
12344: CALL_OW 237
// SetSkill ( Powell , skill_scientistic , 3 ) ;
12348: LD_EXP 31
12352: PPUSH
12353: LD_INT 4
12355: PPUSH
12356: LD_INT 3
12358: PPUSH
12359: CALL_OW 237
// SetClass ( Powell , class_soldier ) ;
12363: LD_EXP 31
12367: PPUSH
12368: LD_INT 1
12370: PPUSH
12371: CALL_OW 336
// temp_list = ai_soldiers [ 4 ] ^ Powell ;
12375: LD_ADDR_VAR 0 3
12379: PUSH
12380: LD_EXP 40
12384: PUSH
12385: LD_INT 4
12387: ARRAY
12388: PUSH
12389: LD_EXP 31
12393: ADD
12394: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , 4 , temp_list ) ;
12395: LD_ADDR_EXP 40
12399: PUSH
12400: LD_EXP 40
12404: PPUSH
12405: LD_INT 4
12407: PPUSH
12408: LD_VAR 0 3
12412: PPUSH
12413: CALL_OW 1
12417: ST_TO_ADDR
// if not testing then
12418: LD_EXP 1
12422: NOT
12423: IFFALSE 12515
// begin if TestCharacters ( Hugh_13a_cont ) then
12425: LD_STRING Hugh_13a_cont
12427: PPUSH
12428: CALL_OW 28
12432: IFFALSE 12461
// begin Hugh = CreateCharacter ( Hugh_13a_cont ) ;
12434: LD_ADDR_EXP 32
12438: PUSH
12439: LD_STRING Hugh_13a_cont
12441: PPUSH
12442: CALL_OW 34
12446: ST_TO_ADDR
// SetClass ( Hugh , class_scientistic ) ;
12447: LD_EXP 32
12451: PPUSH
12452: LD_INT 4
12454: PPUSH
12455: CALL_OW 336
// end else
12459: GO 12469
// Hugh = 0 ;
12461: LD_ADDR_EXP 32
12465: PUSH
12466: LD_INT 0
12468: ST_TO_ADDR
// if TestCharacters ( upf_deserter_13a_cont ) then
12469: LD_STRING upf_deserter_13a_cont
12471: PPUSH
12472: CALL_OW 28
12476: IFFALSE 12505
// begin Rolf = CreateCharacter ( upf_deserter_13a_cont ) ;
12478: LD_ADDR_EXP 33
12482: PUSH
12483: LD_STRING upf_deserter_13a_cont
12485: PPUSH
12486: CALL_OW 34
12490: ST_TO_ADDR
// SetClass ( Rolf , class_soldier ) ;
12491: LD_EXP 33
12495: PPUSH
12496: LD_INT 1
12498: PPUSH
12499: CALL_OW 336
// end else
12503: GO 12513
// Rolf = 0 ;
12505: LD_ADDR_EXP 33
12509: PUSH
12510: LD_INT 0
12512: ST_TO_ADDR
// end else
12513: GO 12591
// begin uc_nation = nation_american ;
12515: LD_ADDR_OWVAR 21
12519: PUSH
12520: LD_INT 1
12522: ST_TO_ADDR
// InitHc ;
12523: CALL_OW 19
// PrepareScientist ( sex_male , 10 ) ;
12527: LD_INT 1
12529: PPUSH
12530: LD_INT 10
12532: PPUSH
12533: CALL_OW 384
// hc_name = Stevens ;
12537: LD_ADDR_OWVAR 26
12541: PUSH
12542: LD_STRING Stevens
12544: ST_TO_ADDR
// Hugh = CreateHuman ;
12545: LD_ADDR_EXP 32
12549: PUSH
12550: CALL_OW 44
12554: ST_TO_ADDR
// uc_nation = nation_arabian ;
12555: LD_ADDR_OWVAR 21
12559: PUSH
12560: LD_INT 2
12562: ST_TO_ADDR
// PrepareSoldier ( sex_male , 10 ) ;
12563: LD_INT 1
12565: PPUSH
12566: LD_INT 10
12568: PPUSH
12569: CALL_OW 381
// hc_name = Bergkamp ;
12573: LD_ADDR_OWVAR 26
12577: PUSH
12578: LD_STRING Bergkamp
12580: ST_TO_ADDR
// Rolf = CreateHuman ;
12581: LD_ADDR_EXP 33
12585: PUSH
12586: CALL_OW 44
12590: ST_TO_ADDR
// end ; if Hugh > 0 then
12591: LD_EXP 32
12595: PUSH
12596: LD_INT 0
12598: GREATER
12599: IFFALSE 12644
// begin temp_list = ai_scientists [ 4 ] ^ Hugh ;
12601: LD_ADDR_VAR 0 3
12605: PUSH
12606: LD_EXP 45
12610: PUSH
12611: LD_INT 4
12613: ARRAY
12614: PUSH
12615: LD_EXP 32
12619: ADD
12620: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , 4 , temp_list ) ;
12621: LD_ADDR_EXP 45
12625: PUSH
12626: LD_EXP 45
12630: PPUSH
12631: LD_INT 4
12633: PPUSH
12634: LD_VAR 0 3
12638: PPUSH
12639: CALL_OW 1
12643: ST_TO_ADDR
// end ; if Rolf > 0 then
12644: LD_EXP 33
12648: PUSH
12649: LD_INT 0
12651: GREATER
12652: IFFALSE 12722
// begin DestroyUnit ( ai_soldiers [ 4 ] [ 1 ] ) ;
12654: LD_EXP 40
12658: PUSH
12659: LD_INT 4
12661: ARRAY
12662: PUSH
12663: LD_INT 1
12665: ARRAY
12666: PPUSH
12667: CALL_OW 65
// temp_list = Delete ( ai_soldiers [ 4 ] , 1 ) ^ Rolf ;
12671: LD_ADDR_VAR 0 3
12675: PUSH
12676: LD_EXP 40
12680: PUSH
12681: LD_INT 4
12683: ARRAY
12684: PPUSH
12685: LD_INT 1
12687: PPUSH
12688: CALL_OW 3
12692: PUSH
12693: LD_EXP 33
12697: ADD
12698: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , 4 , temp_list ) ;
12699: LD_ADDR_EXP 40
12703: PUSH
12704: LD_EXP 40
12708: PPUSH
12709: LD_INT 4
12711: PPUSH
12712: LD_VAR 0 3
12716: PPUSH
12717: CALL_OW 1
12721: ST_TO_ADDR
// end ; PlaceComputerUnits ( 4 , [ Powell , Hugh , Rolf ] diff 0 , [ ] ) ;
12722: LD_INT 4
12724: PPUSH
12725: LD_EXP 31
12729: PUSH
12730: LD_EXP 32
12734: PUSH
12735: LD_EXP 33
12739: PUSH
12740: EMPTY
12741: LIST
12742: LIST
12743: LIST
12744: PUSH
12745: LD_INT 0
12747: DIFF
12748: PPUSH
12749: EMPTY
12750: PPUSH
12751: CALL 13797 0 3
// for side in [ russians , alliance , arabians , americans ] do
12755: LD_ADDR_VAR 0 4
12759: PUSH
12760: LD_EXP 3
12764: PUSH
12765: LD_EXP 5
12769: PUSH
12770: LD_EXP 6
12774: PUSH
12775: LD_EXP 7
12779: PUSH
12780: EMPTY
12781: LIST
12782: LIST
12783: LIST
12784: LIST
12785: PUSH
12786: FOR_IN
12787: IFFALSE 13438
// begin if side in [ arabians ] then
12789: LD_VAR 0 4
12793: PUSH
12794: LD_EXP 6
12798: PUSH
12799: EMPTY
12800: LIST
12801: IN
12802: IFFALSE 12819
// SetTech ( tech_stimdrugs , side , state_researched ) ;
12804: LD_INT 5
12806: PPUSH
12807: LD_VAR 0 4
12811: PPUSH
12812: LD_INT 2
12814: PPUSH
12815: CALL_OW 322
// if side in [ russians , alliance ] then
12819: LD_VAR 0 4
12823: PUSH
12824: LD_EXP 3
12828: PUSH
12829: LD_EXP 5
12833: PUSH
12834: EMPTY
12835: LIST
12836: LIST
12837: IN
12838: IFFALSE 12855
// SetTech ( tech_taufield , side , state_researched ) ;
12840: LD_INT 30
12842: PPUSH
12843: LD_VAR 0 4
12847: PPUSH
12848: LD_INT 2
12850: PPUSH
12851: CALL_OW 322
// if side in [ russians , alliance ] then
12855: LD_VAR 0 4
12859: PUSH
12860: LD_EXP 3
12864: PUSH
12865: LD_EXP 5
12869: PUSH
12870: EMPTY
12871: LIST
12872: LIST
12873: IN
12874: IFFALSE 12891
// SetTech ( tech_limteleport , side , state_researched ) ;
12876: LD_INT 37
12878: PPUSH
12879: LD_VAR 0 4
12883: PPUSH
12884: LD_INT 2
12886: PPUSH
12887: CALL_OW 322
// if side in [ russians , alliance ] then
12891: LD_VAR 0 4
12895: PUSH
12896: LD_EXP 3
12900: PUSH
12901: LD_EXP 5
12905: PUSH
12906: EMPTY
12907: LIST
12908: LIST
12909: IN
12910: IFFALSE 12927
// SetTech ( 31 , side , state_researched ) ;
12912: LD_INT 31
12914: PPUSH
12915: LD_VAR 0 4
12919: PPUSH
12920: LD_INT 2
12922: PPUSH
12923: CALL_OW 322
// if side in [ russians , alliance ] then
12927: LD_VAR 0 4
12931: PUSH
12932: LD_EXP 3
12936: PUSH
12937: LD_EXP 5
12941: PUSH
12942: EMPTY
12943: LIST
12944: LIST
12945: IN
12946: IFFALSE 12963
// SetTech ( tech_spacanom , side , state_researched ) ;
12948: LD_INT 29
12950: PPUSH
12951: LD_VAR 0 4
12955: PPUSH
12956: LD_INT 2
12958: PPUSH
12959: CALL_OW 322
// if side in [ russians , alliance ] then
12963: LD_VAR 0 4
12967: PUSH
12968: LD_EXP 3
12972: PUSH
12973: LD_EXP 5
12977: PUSH
12978: EMPTY
12979: LIST
12980: LIST
12981: IN
12982: IFFALSE 12999
// SetTech ( tech_taurad , side , state_researched ) ;
12984: LD_INT 28
12986: PPUSH
12987: LD_VAR 0 4
12991: PPUSH
12992: LD_INT 2
12994: PPUSH
12995: CALL_OW 322
// if side in [ russians , alliance ] then
12999: LD_VAR 0 4
13003: PUSH
13004: LD_EXP 3
13008: PUSH
13009: LD_EXP 5
13013: PUSH
13014: EMPTY
13015: LIST
13016: LIST
13017: IN
13018: IFFALSE 13035
// SetTech ( tech_bazooka , side , state_researched ) ;
13020: LD_INT 44
13022: PPUSH
13023: LD_VAR 0 4
13027: PPUSH
13028: LD_INT 2
13030: PPUSH
13031: CALL_OW 322
// if side in [ arabians ] then
13035: LD_VAR 0 4
13039: PUSH
13040: LD_EXP 6
13044: PUSH
13045: EMPTY
13046: LIST
13047: IN
13048: IFFALSE 13065
// SetTech ( tech_mortar , side , state_researched ) ;
13050: LD_INT 41
13052: PPUSH
13053: LD_VAR 0 4
13057: PPUSH
13058: LD_INT 2
13060: PPUSH
13061: CALL_OW 322
// if side in [ alliance , americans ] then
13065: LD_VAR 0 4
13069: PUSH
13070: LD_EXP 5
13074: PUSH
13075: LD_EXP 7
13079: PUSH
13080: EMPTY
13081: LIST
13082: LIST
13083: IN
13084: IFFALSE 13101
// SetTech ( tech_lassight , side , state_researched ) ;
13086: LD_INT 12
13088: PPUSH
13089: LD_VAR 0 4
13093: PPUSH
13094: LD_INT 2
13096: PPUSH
13097: CALL_OW 322
// SetTech ( tech_tech1 , side , state_researched ) ;
13101: LD_INT 48
13103: PPUSH
13104: LD_VAR 0 4
13108: PPUSH
13109: LD_INT 2
13111: PPUSH
13112: CALL_OW 322
// SetTech ( tech_tech2 , side , state_researched ) ;
13116: LD_INT 49
13118: PPUSH
13119: LD_VAR 0 4
13123: PPUSH
13124: LD_INT 2
13126: PPUSH
13127: CALL_OW 322
// SetTech ( tech_weap1 , side , state_researched ) ;
13131: LD_INT 51
13133: PPUSH
13134: LD_VAR 0 4
13138: PPUSH
13139: LD_INT 2
13141: PPUSH
13142: CALL_OW 322
// SetTech ( tech_sib1 , side , state_researched ) ;
13146: LD_INT 54
13148: PPUSH
13149: LD_VAR 0 4
13153: PPUSH
13154: LD_INT 2
13156: PPUSH
13157: CALL_OW 322
// SetTech ( tech_comp1 , side , state_researched ) ;
13161: LD_INT 57
13163: PPUSH
13164: LD_VAR 0 4
13168: PPUSH
13169: LD_INT 2
13171: PPUSH
13172: CALL_OW 322
// if difficulty >= 2 then
13176: LD_OWVAR 67
13180: PUSH
13181: LD_INT 2
13183: GREATEREQUAL
13184: IFFALSE 13351
// begin SetTech ( tech_tech3 , side , state_researched ) ;
13186: LD_INT 50
13188: PPUSH
13189: LD_VAR 0 4
13193: PPUSH
13194: LD_INT 2
13196: PPUSH
13197: CALL_OW 322
// SetTech ( tech_weap2 , side , state_researched ) ;
13201: LD_INT 52
13203: PPUSH
13204: LD_VAR 0 4
13208: PPUSH
13209: LD_INT 2
13211: PPUSH
13212: CALL_OW 322
// SetTech ( tech_sib2 , side , state_researched ) ;
13216: LD_INT 55
13218: PPUSH
13219: LD_VAR 0 4
13223: PPUSH
13224: LD_INT 2
13226: PPUSH
13227: CALL_OW 322
// SetTech ( tech_st1 , side , state_researched ) ;
13231: LD_INT 63
13233: PPUSH
13234: LD_VAR 0 4
13238: PPUSH
13239: LD_INT 2
13241: PPUSH
13242: CALL_OW 322
// SetTech ( tech_st2 , side , state_researched ) ;
13246: LD_INT 64
13248: PPUSH
13249: LD_VAR 0 4
13253: PPUSH
13254: LD_INT 2
13256: PPUSH
13257: CALL_OW 322
// SetTech ( tech_comp2 , side , state_researched ) ;
13261: LD_INT 58
13263: PPUSH
13264: LD_VAR 0 4
13268: PPUSH
13269: LD_INT 2
13271: PPUSH
13272: CALL_OW 322
// SetTech ( tech_comp3 , side , state_researched ) ;
13276: LD_INT 59
13278: PPUSH
13279: LD_VAR 0 4
13283: PPUSH
13284: LD_INT 2
13286: PPUSH
13287: CALL_OW 322
// SetTech ( tech_opto1 , side , state_researched ) ;
13291: LD_INT 60
13293: PPUSH
13294: LD_VAR 0 4
13298: PPUSH
13299: LD_INT 2
13301: PPUSH
13302: CALL_OW 322
// SetTech ( tech_opto2 , side , state_researched ) ;
13306: LD_INT 61
13308: PPUSH
13309: LD_VAR 0 4
13313: PPUSH
13314: LD_INT 2
13316: PPUSH
13317: CALL_OW 322
// SetTech ( tech_bio1 , side , state_researched ) ;
13321: LD_INT 66
13323: PPUSH
13324: LD_VAR 0 4
13328: PPUSH
13329: LD_INT 2
13331: PPUSH
13332: CALL_OW 322
// SetTech ( tech_bio2 , side , state_researched ) ;
13336: LD_INT 67
13338: PPUSH
13339: LD_VAR 0 4
13343: PPUSH
13344: LD_INT 2
13346: PPUSH
13347: CALL_OW 322
// end ; if difficulty = 3 then
13351: LD_OWVAR 67
13355: PUSH
13356: LD_INT 3
13358: EQUAL
13359: IFFALSE 13436
// begin SetTech ( tech_weap3 , side , state_researched ) ;
13361: LD_INT 53
13363: PPUSH
13364: LD_VAR 0 4
13368: PPUSH
13369: LD_INT 2
13371: PPUSH
13372: CALL_OW 322
// SetTech ( tech_sib3 , side , state_researched ) ;
13376: LD_INT 56
13378: PPUSH
13379: LD_VAR 0 4
13383: PPUSH
13384: LD_INT 2
13386: PPUSH
13387: CALL_OW 322
// SetTech ( tech_st3 , side , state_researched ) ;
13391: LD_INT 65
13393: PPUSH
13394: LD_VAR 0 4
13398: PPUSH
13399: LD_INT 2
13401: PPUSH
13402: CALL_OW 322
// SetTech ( tech_opto3 , side , state_researched ) ;
13406: LD_INT 62
13408: PPUSH
13409: LD_VAR 0 4
13413: PPUSH
13414: LD_INT 2
13416: PPUSH
13417: CALL_OW 322
// SetTech ( tech_bio3 , side , state_researched ) ;
13421: LD_INT 68
13423: PPUSH
13424: LD_VAR 0 4
13428: PPUSH
13429: LD_INT 2
13431: PPUSH
13432: CALL_OW 322
// end ; end ;
13436: GO 12786
13438: POP
13439: POP
// end ;
13440: LD_VAR 0 1
13444: RET
// export function CreateUnitsWithClass ( num_units , un_class , base ) ; var i , overskill ; begin
13445: LD_INT 0
13447: PPUSH
13448: PPUSH
13449: PPUSH
// result = [ ] ;
13450: LD_ADDR_VAR 0 4
13454: PUSH
13455: EMPTY
13456: ST_TO_ADDR
// InitUc ;
13457: CALL_OW 18
// InitHc ;
13461: CALL_OW 19
// uc_side = GetBaseSide ( base ) ;
13465: LD_ADDR_OWVAR 20
13469: PUSH
13470: LD_VAR 0 3
13474: PPUSH
13475: CALL 24885 0 1
13479: ST_TO_ADDR
// uc_nation = GetBaseNation ( base ) ;
13480: LD_ADDR_OWVAR 21
13484: PUSH
13485: LD_VAR 0 3
13489: PPUSH
13490: CALL 24983 0 1
13494: ST_TO_ADDR
// overskill = difficulty + 7 ;
13495: LD_ADDR_VAR 0 6
13499: PUSH
13500: LD_OWVAR 67
13504: PUSH
13505: LD_INT 7
13507: PLUS
13508: ST_TO_ADDR
// for i = 1 to num_units do
13509: LD_ADDR_VAR 0 5
13513: PUSH
13514: DOUBLE
13515: LD_INT 1
13517: DEC
13518: ST_TO_ADDR
13519: LD_VAR 0 1
13523: PUSH
13524: FOR_TO
13525: IFFALSE 13609
// begin if base = 2 and un_class <> class_engineer then
13527: LD_VAR 0 3
13531: PUSH
13532: LD_INT 2
13534: EQUAL
13535: PUSH
13536: LD_VAR 0 2
13540: PUSH
13541: LD_INT 2
13543: NONEQUAL
13544: AND
13545: IFFALSE 13574
// uc_nation = [ nation_american , nation_russian ] [ Rand ( 1 , 2 ) ] ;
13547: LD_ADDR_OWVAR 21
13551: PUSH
13552: LD_INT 1
13554: PUSH
13555: LD_INT 3
13557: PUSH
13558: EMPTY
13559: LIST
13560: LIST
13561: PUSH
13562: LD_INT 1
13564: PPUSH
13565: LD_INT 2
13567: PPUSH
13568: CALL_OW 12
13572: ARRAY
13573: ST_TO_ADDR
// PrepareHuman ( false , un_class , overskill ) ;
13574: LD_INT 0
13576: PPUSH
13577: LD_VAR 0 2
13581: PPUSH
13582: LD_VAR 0 6
13586: PPUSH
13587: CALL_OW 380
// result = result ^ CreateHuman ;
13591: LD_ADDR_VAR 0 4
13595: PUSH
13596: LD_VAR 0 4
13600: PUSH
13601: CALL_OW 44
13605: ADD
13606: ST_TO_ADDR
// end ;
13607: GO 13524
13609: POP
13610: POP
// end ;
13611: LD_VAR 0 4
13615: RET
// export function CreateApemenWithClass ( num_units , un_class , base ) ; var i ; begin
13616: LD_INT 0
13618: PPUSH
13619: PPUSH
// result = [ ] ;
13620: LD_ADDR_VAR 0 4
13624: PUSH
13625: EMPTY
13626: ST_TO_ADDR
// InitUc ;
13627: CALL_OW 18
// InitHc ;
13631: CALL_OW 19
// uc_side = GetBaseSide ( base ) ;
13635: LD_ADDR_OWVAR 20
13639: PUSH
13640: LD_VAR 0 3
13644: PPUSH
13645: CALL 24885 0 1
13649: ST_TO_ADDR
// uc_nation = nation_nature ;
13650: LD_ADDR_OWVAR 21
13654: PUSH
13655: LD_INT 0
13657: ST_TO_ADDR
// hc_class = un_class ;
13658: LD_ADDR_OWVAR 28
13662: PUSH
13663: LD_VAR 0 2
13667: ST_TO_ADDR
// for i = 1 to num_units do
13668: LD_ADDR_VAR 0 5
13672: PUSH
13673: DOUBLE
13674: LD_INT 1
13676: DEC
13677: ST_TO_ADDR
13678: LD_VAR 0 1
13682: PUSH
13683: FOR_TO
13684: IFFALSE 13790
// begin hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
13686: LD_ADDR_OWVAR 29
13690: PUSH
13691: LD_INT 11
13693: PPUSH
13694: LD_INT 13
13696: PPUSH
13697: CALL_OW 12
13701: PUSH
13702: LD_INT 10
13704: PPUSH
13705: LD_INT 11
13707: PPUSH
13708: CALL_OW 12
13712: PUSH
13713: EMPTY
13714: LIST
13715: LIST
13716: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
13717: LD_ADDR_OWVAR 27
13721: PUSH
13722: LD_INT 1
13724: PPUSH
13725: LD_INT 2
13727: PPUSH
13728: CALL_OW 12
13732: ST_TO_ADDR
// hc_skills = [ Rand ( 1 , 3 ) , Rand ( 1 , 3 ) , 0 , 0 ] ;
13733: LD_ADDR_OWVAR 31
13737: PUSH
13738: LD_INT 1
13740: PPUSH
13741: LD_INT 3
13743: PPUSH
13744: CALL_OW 12
13748: PUSH
13749: LD_INT 1
13751: PPUSH
13752: LD_INT 3
13754: PPUSH
13755: CALL_OW 12
13759: PUSH
13760: LD_INT 0
13762: PUSH
13763: LD_INT 0
13765: PUSH
13766: EMPTY
13767: LIST
13768: LIST
13769: LIST
13770: LIST
13771: ST_TO_ADDR
// result = result ^ CreateHuman ;
13772: LD_ADDR_VAR 0 4
13776: PUSH
13777: LD_VAR 0 4
13781: PUSH
13782: CALL_OW 44
13786: ADD
13787: ST_TO_ADDR
// end ;
13788: GO 13683
13790: POP
13791: POP
// end ;
13792: LD_VAR 0 4
13796: RET
// function PlaceComputerUnits ( base , un_list , buildings_list ) ; var num , i , b ; begin
13797: LD_INT 0
13799: PPUSH
13800: PPUSH
13801: PPUSH
13802: PPUSH
// num = 1 ;
13803: LD_ADDR_VAR 0 5
13807: PUSH
13808: LD_INT 1
13810: ST_TO_ADDR
// for b in buildings_list do
13811: LD_ADDR_VAR 0 7
13815: PUSH
13816: LD_VAR 0 3
13820: PUSH
13821: FOR_IN
13822: IFFALSE 13919
// begin if num > un_list then
13824: LD_VAR 0 5
13828: PUSH
13829: LD_VAR 0 2
13833: GREATER
13834: IFFALSE 13838
// break ;
13836: GO 13919
// for i = UnitsInside ( b ) + 1 to 6 do
13838: LD_ADDR_VAR 0 6
13842: PUSH
13843: DOUBLE
13844: LD_VAR 0 7
13848: PPUSH
13849: CALL_OW 313
13853: PUSH
13854: LD_INT 1
13856: PLUS
13857: DEC
13858: ST_TO_ADDR
13859: LD_INT 6
13861: PUSH
13862: FOR_TO
13863: IFFALSE 13915
// begin if num > un_list then
13865: LD_VAR 0 5
13869: PUSH
13870: LD_VAR 0 2
13874: GREATER
13875: IFFALSE 13879
// break ;
13877: GO 13915
// PlaceHumanInUnit ( un_list [ num ] , b ) ;
13879: LD_VAR 0 2
13883: PUSH
13884: LD_VAR 0 5
13888: ARRAY
13889: PPUSH
13890: LD_VAR 0 7
13894: PPUSH
13895: CALL_OW 52
// num = num + 1 ;
13899: LD_ADDR_VAR 0 5
13903: PUSH
13904: LD_VAR 0 5
13908: PUSH
13909: LD_INT 1
13911: PLUS
13912: ST_TO_ADDR
// end ;
13913: GO 13862
13915: POP
13916: POP
// end ;
13917: GO 13821
13919: POP
13920: POP
// for i = num to un_list do
13921: LD_ADDR_VAR 0 6
13925: PUSH
13926: DOUBLE
13927: LD_VAR 0 5
13931: DEC
13932: ST_TO_ADDR
13933: LD_VAR 0 2
13937: PUSH
13938: FOR_TO
13939: IFFALSE 13994
// PlaceUnitXYR ( un_list [ i ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] , 7 , false ) ;
13941: LD_VAR 0 2
13945: PUSH
13946: LD_VAR 0 6
13950: ARRAY
13951: PPUSH
13952: LD_EXP 73
13956: PUSH
13957: LD_VAR 0 1
13961: ARRAY
13962: PUSH
13963: LD_INT 1
13965: ARRAY
13966: PPUSH
13967: LD_EXP 73
13971: PUSH
13972: LD_VAR 0 1
13976: ARRAY
13977: PUSH
13978: LD_INT 2
13980: ARRAY
13981: PPUSH
13982: LD_INT 7
13984: PPUSH
13985: LD_INT 0
13987: PPUSH
13988: CALL_OW 50
13992: GO 13938
13994: POP
13995: POP
// end ;
13996: LD_VAR 0 4
14000: RET
// function PrepareMines ; var hex , temp_list , i , k , temp_list_2 , temp_list_3 , y ; begin
14001: LD_INT 0
14003: PPUSH
14004: PPUSH
14005: PPUSH
14006: PPUSH
14007: PPUSH
14008: PPUSH
14009: PPUSH
14010: PPUSH
// ai_defence_replace_mines_centerhexes = Replace ( ai_defence_replace_mines_centerhexes , 3 , [ [ 148 , 124 ] , [ 150 , 124 ] , [ 152 , 124 ] , [ 154 , 124 ] , [ 156 , 124 ] , [ 158 , 124 ] , [ 160 , 124 ] , [ 162 , 124 ] , [ 164 , 124 ] , [ 166 , 124 ] , [ 168 , 124 ] , [ 169 , 124 ] , [ 148 , 127 ] , [ 150 , 127 ] , [ 152 , 127 ] , [ 154 , 127 ] , [ 156 , 127 ] , [ 158 , 127 ] , [ 160 , 127 ] , [ 162 , 127 ] , [ 164 , 127 ] , [ 166 , 127 ] , [ 168 , 127 ] , [ 170 , 127 ] , [ 148 , 130 ] , [ 151 , 130 ] , [ 153 , 130 ] , [ 155 , 130 ] , [ 157 , 130 ] , [ 159 , 130 ] , [ 161 , 130 ] , [ 163 , 130 ] , [ 165 , 130 ] , [ 167 , 130 ] , [ 169 , 130 ] , [ 171 , 130 ] , [ 172 , 130 ] ] ) ;
14011: LD_ADDR_EXP 117
14015: PUSH
14016: LD_EXP 117
14020: PPUSH
14021: LD_INT 3
14023: PPUSH
14024: LD_INT 148
14026: PUSH
14027: LD_INT 124
14029: PUSH
14030: EMPTY
14031: LIST
14032: LIST
14033: PUSH
14034: LD_INT 150
14036: PUSH
14037: LD_INT 124
14039: PUSH
14040: EMPTY
14041: LIST
14042: LIST
14043: PUSH
14044: LD_INT 152
14046: PUSH
14047: LD_INT 124
14049: PUSH
14050: EMPTY
14051: LIST
14052: LIST
14053: PUSH
14054: LD_INT 154
14056: PUSH
14057: LD_INT 124
14059: PUSH
14060: EMPTY
14061: LIST
14062: LIST
14063: PUSH
14064: LD_INT 156
14066: PUSH
14067: LD_INT 124
14069: PUSH
14070: EMPTY
14071: LIST
14072: LIST
14073: PUSH
14074: LD_INT 158
14076: PUSH
14077: LD_INT 124
14079: PUSH
14080: EMPTY
14081: LIST
14082: LIST
14083: PUSH
14084: LD_INT 160
14086: PUSH
14087: LD_INT 124
14089: PUSH
14090: EMPTY
14091: LIST
14092: LIST
14093: PUSH
14094: LD_INT 162
14096: PUSH
14097: LD_INT 124
14099: PUSH
14100: EMPTY
14101: LIST
14102: LIST
14103: PUSH
14104: LD_INT 164
14106: PUSH
14107: LD_INT 124
14109: PUSH
14110: EMPTY
14111: LIST
14112: LIST
14113: PUSH
14114: LD_INT 166
14116: PUSH
14117: LD_INT 124
14119: PUSH
14120: EMPTY
14121: LIST
14122: LIST
14123: PUSH
14124: LD_INT 168
14126: PUSH
14127: LD_INT 124
14129: PUSH
14130: EMPTY
14131: LIST
14132: LIST
14133: PUSH
14134: LD_INT 169
14136: PUSH
14137: LD_INT 124
14139: PUSH
14140: EMPTY
14141: LIST
14142: LIST
14143: PUSH
14144: LD_INT 148
14146: PUSH
14147: LD_INT 127
14149: PUSH
14150: EMPTY
14151: LIST
14152: LIST
14153: PUSH
14154: LD_INT 150
14156: PUSH
14157: LD_INT 127
14159: PUSH
14160: EMPTY
14161: LIST
14162: LIST
14163: PUSH
14164: LD_INT 152
14166: PUSH
14167: LD_INT 127
14169: PUSH
14170: EMPTY
14171: LIST
14172: LIST
14173: PUSH
14174: LD_INT 154
14176: PUSH
14177: LD_INT 127
14179: PUSH
14180: EMPTY
14181: LIST
14182: LIST
14183: PUSH
14184: LD_INT 156
14186: PUSH
14187: LD_INT 127
14189: PUSH
14190: EMPTY
14191: LIST
14192: LIST
14193: PUSH
14194: LD_INT 158
14196: PUSH
14197: LD_INT 127
14199: PUSH
14200: EMPTY
14201: LIST
14202: LIST
14203: PUSH
14204: LD_INT 160
14206: PUSH
14207: LD_INT 127
14209: PUSH
14210: EMPTY
14211: LIST
14212: LIST
14213: PUSH
14214: LD_INT 162
14216: PUSH
14217: LD_INT 127
14219: PUSH
14220: EMPTY
14221: LIST
14222: LIST
14223: PUSH
14224: LD_INT 164
14226: PUSH
14227: LD_INT 127
14229: PUSH
14230: EMPTY
14231: LIST
14232: LIST
14233: PUSH
14234: LD_INT 166
14236: PUSH
14237: LD_INT 127
14239: PUSH
14240: EMPTY
14241: LIST
14242: LIST
14243: PUSH
14244: LD_INT 168
14246: PUSH
14247: LD_INT 127
14249: PUSH
14250: EMPTY
14251: LIST
14252: LIST
14253: PUSH
14254: LD_INT 170
14256: PUSH
14257: LD_INT 127
14259: PUSH
14260: EMPTY
14261: LIST
14262: LIST
14263: PUSH
14264: LD_INT 148
14266: PUSH
14267: LD_INT 130
14269: PUSH
14270: EMPTY
14271: LIST
14272: LIST
14273: PUSH
14274: LD_INT 151
14276: PUSH
14277: LD_INT 130
14279: PUSH
14280: EMPTY
14281: LIST
14282: LIST
14283: PUSH
14284: LD_INT 153
14286: PUSH
14287: LD_INT 130
14289: PUSH
14290: EMPTY
14291: LIST
14292: LIST
14293: PUSH
14294: LD_INT 155
14296: PUSH
14297: LD_INT 130
14299: PUSH
14300: EMPTY
14301: LIST
14302: LIST
14303: PUSH
14304: LD_INT 157
14306: PUSH
14307: LD_INT 130
14309: PUSH
14310: EMPTY
14311: LIST
14312: LIST
14313: PUSH
14314: LD_INT 159
14316: PUSH
14317: LD_INT 130
14319: PUSH
14320: EMPTY
14321: LIST
14322: LIST
14323: PUSH
14324: LD_INT 161
14326: PUSH
14327: LD_INT 130
14329: PUSH
14330: EMPTY
14331: LIST
14332: LIST
14333: PUSH
14334: LD_INT 163
14336: PUSH
14337: LD_INT 130
14339: PUSH
14340: EMPTY
14341: LIST
14342: LIST
14343: PUSH
14344: LD_INT 165
14346: PUSH
14347: LD_INT 130
14349: PUSH
14350: EMPTY
14351: LIST
14352: LIST
14353: PUSH
14354: LD_INT 167
14356: PUSH
14357: LD_INT 130
14359: PUSH
14360: EMPTY
14361: LIST
14362: LIST
14363: PUSH
14364: LD_INT 169
14366: PUSH
14367: LD_INT 130
14369: PUSH
14370: EMPTY
14371: LIST
14372: LIST
14373: PUSH
14374: LD_INT 171
14376: PUSH
14377: LD_INT 130
14379: PUSH
14380: EMPTY
14381: LIST
14382: LIST
14383: PUSH
14384: LD_INT 172
14386: PUSH
14387: LD_INT 130
14389: PUSH
14390: EMPTY
14391: LIST
14392: LIST
14393: PUSH
14394: EMPTY
14395: LIST
14396: LIST
14397: LIST
14398: LIST
14399: LIST
14400: LIST
14401: LIST
14402: LIST
14403: LIST
14404: LIST
14405: LIST
14406: LIST
14407: LIST
14408: LIST
14409: LIST
14410: LIST
14411: LIST
14412: LIST
14413: LIST
14414: LIST
14415: LIST
14416: LIST
14417: LIST
14418: LIST
14419: LIST
14420: LIST
14421: LIST
14422: LIST
14423: LIST
14424: LIST
14425: LIST
14426: LIST
14427: LIST
14428: LIST
14429: LIST
14430: LIST
14431: LIST
14432: PPUSH
14433: CALL_OW 1
14437: ST_TO_ADDR
// ai_defence_max_num_replace_mines = Replace ( ai_defence_max_num_replace_mines , 3 , RoundDouble ( ( ai_defence_replace_mines_centerhexes [ 3 ] + 0 ) * [ 0.4 , 0.7 , 1 ] [ difficulty ] ) ) ;
14438: LD_ADDR_EXP 119
14442: PUSH
14443: LD_EXP 119
14447: PPUSH
14448: LD_INT 3
14450: PPUSH
14451: LD_EXP 117
14455: PUSH
14456: LD_INT 3
14458: ARRAY
14459: PUSH
14460: LD_INT 0
14462: PLUS
14463: PUSH
14464: LD_REAL  4.00000000000000E-0001
14467: PUSH
14468: LD_REAL  7.00000000000000E-0001
14471: PUSH
14472: LD_INT 1
14474: PUSH
14475: EMPTY
14476: LIST
14477: LIST
14478: LIST
14479: PUSH
14480: LD_OWVAR 67
14484: ARRAY
14485: MUL
14486: PPUSH
14487: CALL 20363 0 1
14491: PPUSH
14492: CALL_OW 1
14496: ST_TO_ADDR
// temp_list = ai_soldiers [ 3 ] diff [ Omar , Gensher ] ;
14497: LD_ADDR_VAR 0 3
14501: PUSH
14502: LD_EXP 40
14506: PUSH
14507: LD_INT 3
14509: ARRAY
14510: PUSH
14511: LD_EXP 29
14515: PUSH
14516: LD_EXP 30
14520: PUSH
14521: EMPTY
14522: LIST
14523: LIST
14524: DIFF
14525: ST_TO_ADDR
// temp_list_2 = [ ] ;
14526: LD_ADDR_VAR 0 6
14530: PUSH
14531: EMPTY
14532: ST_TO_ADDR
// for i = 1 to [ 1 , 1 , 1 ] [ difficulty ] do
14533: LD_ADDR_VAR 0 4
14537: PUSH
14538: DOUBLE
14539: LD_INT 1
14541: DEC
14542: ST_TO_ADDR
14543: LD_INT 1
14545: PUSH
14546: LD_INT 1
14548: PUSH
14549: LD_INT 1
14551: PUSH
14552: EMPTY
14553: LIST
14554: LIST
14555: LIST
14556: PUSH
14557: LD_OWVAR 67
14561: ARRAY
14562: PUSH
14563: FOR_TO
14564: IFFALSE 14644
// begin if temp_list = 0 then
14566: LD_VAR 0 3
14570: PUSH
14571: LD_INT 0
14573: EQUAL
14574: IFFALSE 14578
// break ;
14576: GO 14644
// k = Rand ( 1 , temp_list + 0 ) ;
14578: LD_ADDR_VAR 0 5
14582: PUSH
14583: LD_INT 1
14585: PPUSH
14586: LD_VAR 0 3
14590: PUSH
14591: LD_INT 0
14593: PLUS
14594: PPUSH
14595: CALL_OW 12
14599: ST_TO_ADDR
// temp_list_2 = temp_list_2 ^ temp_list [ k ] ;
14600: LD_ADDR_VAR 0 6
14604: PUSH
14605: LD_VAR 0 6
14609: PUSH
14610: LD_VAR 0 3
14614: PUSH
14615: LD_VAR 0 5
14619: ARRAY
14620: ADD
14621: ST_TO_ADDR
// temp_list = Delete ( temp_list , k ) ;
14622: LD_ADDR_VAR 0 3
14626: PUSH
14627: LD_VAR 0 3
14631: PPUSH
14632: LD_VAR 0 5
14636: PPUSH
14637: CALL_OW 3
14641: ST_TO_ADDR
// end ;
14642: GO 14563
14644: POP
14645: POP
// ai_mine_guys = Replace ( ai_mine_guys , 3 , temp_list_2 ) ;
14646: LD_ADDR_EXP 120
14650: PUSH
14651: LD_EXP 120
14655: PPUSH
14656: LD_INT 3
14658: PPUSH
14659: LD_VAR 0 6
14663: PPUSH
14664: CALL_OW 1
14668: ST_TO_ADDR
// temp_list = ai_defence_replace_mines_centerhexes [ 3 ] ;
14669: LD_ADDR_VAR 0 3
14673: PUSH
14674: LD_EXP 117
14678: PUSH
14679: LD_INT 3
14681: ARRAY
14682: ST_TO_ADDR
// for i = 1 to ai_defence_max_num_replace_mines [ 3 ] do
14683: LD_ADDR_VAR 0 4
14687: PUSH
14688: DOUBLE
14689: LD_INT 1
14691: DEC
14692: ST_TO_ADDR
14693: LD_EXP 119
14697: PUSH
14698: LD_INT 3
14700: ARRAY
14701: PUSH
14702: FOR_TO
14703: IFFALSE 15033
// begin k = Rand ( 1 , temp_list ) ;
14705: LD_ADDR_VAR 0 5
14709: PUSH
14710: LD_INT 1
14712: PPUSH
14713: LD_VAR 0 3
14717: PPUSH
14718: CALL_OW 12
14722: ST_TO_ADDR
// hex = temp_list [ k ] ;
14723: LD_ADDR_VAR 0 2
14727: PUSH
14728: LD_VAR 0 3
14732: PUSH
14733: LD_VAR 0 5
14737: ARRAY
14738: ST_TO_ADDR
// temp_list = Delete ( temp_list , k ) ;
14739: LD_ADDR_VAR 0 3
14743: PUSH
14744: LD_VAR 0 3
14748: PPUSH
14749: LD_VAR 0 5
14753: PPUSH
14754: CALL_OW 3
14758: ST_TO_ADDR
// temp_list_2 = GetHexesNearHex ( hex [ 1 ] , hex [ 2 ] , 1 ) ;
14759: LD_ADDR_VAR 0 6
14763: PUSH
14764: LD_VAR 0 2
14768: PUSH
14769: LD_INT 1
14771: ARRAY
14772: PPUSH
14773: LD_VAR 0 2
14777: PUSH
14778: LD_INT 2
14780: ARRAY
14781: PPUSH
14782: LD_INT 1
14784: PPUSH
14785: CALL 19717 0 3
14789: ST_TO_ADDR
// repeat k = Rand ( 1 , temp_list_2 + 0 ) ;
14790: LD_ADDR_VAR 0 5
14794: PUSH
14795: LD_INT 1
14797: PPUSH
14798: LD_VAR 0 6
14802: PUSH
14803: LD_INT 0
14805: PLUS
14806: PPUSH
14807: CALL_OW 12
14811: ST_TO_ADDR
// if not temp_list_2 [ k ] in ai_defence_mines_hexes [ 3 ] then
14812: LD_VAR 0 6
14816: PUSH
14817: LD_VAR 0 5
14821: ARRAY
14822: PUSH
14823: LD_EXP 118
14827: PUSH
14828: LD_INT 3
14830: ARRAY
14831: IN
14832: NOT
14833: IFFALSE 14837
// break ;
14835: GO 14867
// temp_list_2 = Delete ( temp_list_2 , k ) ;
14837: LD_ADDR_VAR 0 6
14841: PUSH
14842: LD_VAR 0 6
14846: PPUSH
14847: LD_VAR 0 5
14851: PPUSH
14852: CALL_OW 3
14856: ST_TO_ADDR
// until temp_list_2 = 0 ;
14857: LD_VAR 0 6
14861: PUSH
14862: LD_INT 0
14864: EQUAL
14865: IFFALSE 14790
// if temp_list_2 > 0 then
14867: LD_VAR 0 6
14871: PUSH
14872: LD_INT 0
14874: GREATER
14875: IFFALSE 15031
// begin PlaceMine ( temp_list_2 [ k ] [ 1 ] , temp_list_2 [ k ] [ 2 ] , mines_side , 0 ) ;
14877: LD_VAR 0 6
14881: PUSH
14882: LD_VAR 0 5
14886: ARRAY
14887: PUSH
14888: LD_INT 1
14890: ARRAY
14891: PPUSH
14892: LD_VAR 0 6
14896: PUSH
14897: LD_VAR 0 5
14901: ARRAY
14902: PUSH
14903: LD_INT 2
14905: ARRAY
14906: PPUSH
14907: LD_EXP 9
14911: PPUSH
14912: LD_INT 0
14914: PPUSH
14915: CALL_OW 454
// temp_list_3 = Insert ( ai_defence_mines_hexes [ 3 ] , 1 , temp_list_2 [ k ] ) ;
14919: LD_ADDR_VAR 0 7
14923: PUSH
14924: LD_EXP 118
14928: PUSH
14929: LD_INT 3
14931: ARRAY
14932: PPUSH
14933: LD_INT 1
14935: PPUSH
14936: LD_VAR 0 6
14940: PUSH
14941: LD_VAR 0 5
14945: ARRAY
14946: PPUSH
14947: CALL_OW 2
14951: ST_TO_ADDR
// ai_defence_mines_hexes = Replace ( ai_defence_mines_hexes , 3 , temp_list_3 ) ;
14952: LD_ADDR_EXP 118
14956: PUSH
14957: LD_EXP 118
14961: PPUSH
14962: LD_INT 3
14964: PPUSH
14965: LD_VAR 0 7
14969: PPUSH
14970: CALL_OW 1
14974: ST_TO_ADDR
// temp_list_3 = Insert ( ai_defence_replace_mines_hexes [ 3 ] , 1 , temp_list_2 [ k ] ) ;
14975: LD_ADDR_VAR 0 7
14979: PUSH
14980: LD_EXP 121
14984: PUSH
14985: LD_INT 3
14987: ARRAY
14988: PPUSH
14989: LD_INT 1
14991: PPUSH
14992: LD_VAR 0 6
14996: PUSH
14997: LD_VAR 0 5
15001: ARRAY
15002: PPUSH
15003: CALL_OW 2
15007: ST_TO_ADDR
// ai_defence_replace_mines_hexes = Replace ( ai_defence_replace_mines_hexes , 3 , temp_list_3 ) ;
15008: LD_ADDR_EXP 121
15012: PUSH
15013: LD_EXP 121
15017: PPUSH
15018: LD_INT 3
15020: PPUSH
15021: LD_VAR 0 7
15025: PPUSH
15026: CALL_OW 1
15030: ST_TO_ADDR
// end ; end ;
15031: GO 14702
15033: POP
15034: POP
// temp_list = [ [ 133 , 139 ] , [ 134 , 139 ] , [ 136 , 139 ] , [ 138 , 140 ] , [ 139 , 142 ] , [ 140 , 144 ] , [ 142 , 146 ] , [ 144 , 147 ] , [ 146 , 149 ] ] ;
15035: LD_ADDR_VAR 0 3
15039: PUSH
15040: LD_INT 133
15042: PUSH
15043: LD_INT 139
15045: PUSH
15046: EMPTY
15047: LIST
15048: LIST
15049: PUSH
15050: LD_INT 134
15052: PUSH
15053: LD_INT 139
15055: PUSH
15056: EMPTY
15057: LIST
15058: LIST
15059: PUSH
15060: LD_INT 136
15062: PUSH
15063: LD_INT 139
15065: PUSH
15066: EMPTY
15067: LIST
15068: LIST
15069: PUSH
15070: LD_INT 138
15072: PUSH
15073: LD_INT 140
15075: PUSH
15076: EMPTY
15077: LIST
15078: LIST
15079: PUSH
15080: LD_INT 139
15082: PUSH
15083: LD_INT 142
15085: PUSH
15086: EMPTY
15087: LIST
15088: LIST
15089: PUSH
15090: LD_INT 140
15092: PUSH
15093: LD_INT 144
15095: PUSH
15096: EMPTY
15097: LIST
15098: LIST
15099: PUSH
15100: LD_INT 142
15102: PUSH
15103: LD_INT 146
15105: PUSH
15106: EMPTY
15107: LIST
15108: LIST
15109: PUSH
15110: LD_INT 144
15112: PUSH
15113: LD_INT 147
15115: PUSH
15116: EMPTY
15117: LIST
15118: LIST
15119: PUSH
15120: LD_INT 146
15122: PUSH
15123: LD_INT 149
15125: PUSH
15126: EMPTY
15127: LIST
15128: LIST
15129: PUSH
15130: EMPTY
15131: LIST
15132: LIST
15133: LIST
15134: LIST
15135: LIST
15136: LIST
15137: LIST
15138: LIST
15139: LIST
15140: ST_TO_ADDR
// temp_list_2 = [ ] ;
15141: LD_ADDR_VAR 0 6
15145: PUSH
15146: EMPTY
15147: ST_TO_ADDR
// y = 144 ;
15148: LD_ADDR_VAR 0 8
15152: PUSH
15153: LD_INT 144
15155: ST_TO_ADDR
// for i in temp_list do
15156: LD_ADDR_VAR 0 4
15160: PUSH
15161: LD_VAR 0 3
15165: PUSH
15166: FOR_IN
15167: IFFALSE 15271
// begin for k = i [ 1 ] to i [ 2 ] do
15169: LD_ADDR_VAR 0 5
15173: PUSH
15174: DOUBLE
15175: LD_VAR 0 4
15179: PUSH
15180: LD_INT 1
15182: ARRAY
15183: DEC
15184: ST_TO_ADDR
15185: LD_VAR 0 4
15189: PUSH
15190: LD_INT 2
15192: ARRAY
15193: PUSH
15194: FOR_TO
15195: IFFALSE 15253
// begin PlaceMine ( k , y , mines_side , 0 ) ;
15197: LD_VAR 0 5
15201: PPUSH
15202: LD_VAR 0 8
15206: PPUSH
15207: LD_EXP 9
15211: PPUSH
15212: LD_INT 0
15214: PPUSH
15215: CALL_OW 454
// temp_list_2 = Insert ( temp_list_2 , 1 , [ k , y ] ) ;
15219: LD_ADDR_VAR 0 6
15223: PUSH
15224: LD_VAR 0 6
15228: PPUSH
15229: LD_INT 1
15231: PPUSH
15232: LD_VAR 0 5
15236: PUSH
15237: LD_VAR 0 8
15241: PUSH
15242: EMPTY
15243: LIST
15244: LIST
15245: PPUSH
15246: CALL_OW 2
15250: ST_TO_ADDR
// end ;
15251: GO 15194
15253: POP
15254: POP
// y = y + 2 ;
15255: LD_ADDR_VAR 0 8
15259: PUSH
15260: LD_VAR 0 8
15264: PUSH
15265: LD_INT 2
15267: PLUS
15268: ST_TO_ADDR
// end ;
15269: GO 15166
15271: POP
15272: POP
// temp_list = ai_defence_mines_hexes [ 3 ] ^ temp_list_2 ;
15273: LD_ADDR_VAR 0 3
15277: PUSH
15278: LD_EXP 118
15282: PUSH
15283: LD_INT 3
15285: ARRAY
15286: PUSH
15287: LD_VAR 0 6
15291: ADD
15292: ST_TO_ADDR
// ai_defence_mines_hexes = Replace ( ai_defence_mines_hexes , 3 , temp_list ) ;
15293: LD_ADDR_EXP 118
15297: PUSH
15298: LD_EXP 118
15302: PPUSH
15303: LD_INT 3
15305: PPUSH
15306: LD_VAR 0 3
15310: PPUSH
15311: CALL_OW 1
15315: ST_TO_ADDR
// if IsOk ( Rolf ) then
15316: LD_EXP 33
15320: PPUSH
15321: CALL_OW 302
15325: IFFALSE 15615
// begin temp_list_2 = [ [ 95 , 166 ] , [ 123 , 167 ] , [ 125 , 167 ] ] ;
15327: LD_ADDR_VAR 0 6
15331: PUSH
15332: LD_INT 95
15334: PUSH
15335: LD_INT 166
15337: PUSH
15338: EMPTY
15339: LIST
15340: LIST
15341: PUSH
15342: LD_INT 123
15344: PUSH
15345: LD_INT 167
15347: PUSH
15348: EMPTY
15349: LIST
15350: LIST
15351: PUSH
15352: LD_INT 125
15354: PUSH
15355: LD_INT 167
15357: PUSH
15358: EMPTY
15359: LIST
15360: LIST
15361: PUSH
15362: EMPTY
15363: LIST
15364: LIST
15365: LIST
15366: ST_TO_ADDR
// temp_list = [ [ 97 , 169 ] , [ 99 , 171 ] , [ 126 , 170 ] , [ 128 , 173 ] , [ 130 , 173 ] ] ;
15367: LD_ADDR_VAR 0 3
15371: PUSH
15372: LD_INT 97
15374: PUSH
15375: LD_INT 169
15377: PUSH
15378: EMPTY
15379: LIST
15380: LIST
15381: PUSH
15382: LD_INT 99
15384: PUSH
15385: LD_INT 171
15387: PUSH
15388: EMPTY
15389: LIST
15390: LIST
15391: PUSH
15392: LD_INT 126
15394: PUSH
15395: LD_INT 170
15397: PUSH
15398: EMPTY
15399: LIST
15400: LIST
15401: PUSH
15402: LD_INT 128
15404: PUSH
15405: LD_INT 173
15407: PUSH
15408: EMPTY
15409: LIST
15410: LIST
15411: PUSH
15412: LD_INT 130
15414: PUSH
15415: LD_INT 173
15417: PUSH
15418: EMPTY
15419: LIST
15420: LIST
15421: PUSH
15422: EMPTY
15423: LIST
15424: LIST
15425: LIST
15426: LIST
15427: LIST
15428: ST_TO_ADDR
// for i = 1 to temp_list + 0 do
15429: LD_ADDR_VAR 0 4
15433: PUSH
15434: DOUBLE
15435: LD_INT 1
15437: DEC
15438: ST_TO_ADDR
15439: LD_VAR 0 3
15443: PUSH
15444: LD_INT 0
15446: PLUS
15447: PUSH
15448: FOR_TO
15449: IFFALSE 15543
// begin temp_list_3 = GetHexesNearHex ( temp_list [ i ] [ 1 ] , temp_list [ i ] [ 2 ] , 1 ) ;
15451: LD_ADDR_VAR 0 7
15455: PUSH
15456: LD_VAR 0 3
15460: PUSH
15461: LD_VAR 0 4
15465: ARRAY
15466: PUSH
15467: LD_INT 1
15469: ARRAY
15470: PPUSH
15471: LD_VAR 0 3
15475: PUSH
15476: LD_VAR 0 4
15480: ARRAY
15481: PUSH
15482: LD_INT 2
15484: ARRAY
15485: PPUSH
15486: LD_INT 1
15488: PPUSH
15489: CALL 19717 0 3
15493: ST_TO_ADDR
// k = Rand ( 1 , temp_list_3 + 0 ) ;
15494: LD_ADDR_VAR 0 5
15498: PUSH
15499: LD_INT 1
15501: PPUSH
15502: LD_VAR 0 7
15506: PUSH
15507: LD_INT 0
15509: PLUS
15510: PPUSH
15511: CALL_OW 12
15515: ST_TO_ADDR
// temp_list_2 = temp_list_2 ^ [ temp_list_3 [ k ] ] ;
15516: LD_ADDR_VAR 0 6
15520: PUSH
15521: LD_VAR 0 6
15525: PUSH
15526: LD_VAR 0 7
15530: PUSH
15531: LD_VAR 0 5
15535: ARRAY
15536: PUSH
15537: EMPTY
15538: LIST
15539: ADD
15540: ST_TO_ADDR
// end ;
15541: GO 15448
15543: POP
15544: POP
// for i in temp_list_2 do
15545: LD_ADDR_VAR 0 4
15549: PUSH
15550: LD_VAR 0 6
15554: PUSH
15555: FOR_IN
15556: IFFALSE 15590
// PlaceMine ( i [ 1 ] , i [ 2 ] , mines_side , 0 ) ;
15558: LD_VAR 0 4
15562: PUSH
15563: LD_INT 1
15565: ARRAY
15566: PPUSH
15567: LD_VAR 0 4
15571: PUSH
15572: LD_INT 2
15574: ARRAY
15575: PPUSH
15576: LD_EXP 9
15580: PPUSH
15581: LD_INT 0
15583: PPUSH
15584: CALL_OW 454
15588: GO 15555
15590: POP
15591: POP
// ai_defence_mines_hexes = Replace ( ai_defence_mines_hexes , 4 , temp_list_2 ) ;
15592: LD_ADDR_EXP 118
15596: PUSH
15597: LD_EXP 118
15601: PPUSH
15602: LD_INT 4
15604: PPUSH
15605: LD_VAR 0 6
15609: PPUSH
15610: CALL_OW 1
15614: ST_TO_ADDR
// end ; end ;
15615: LD_VAR 0 1
15619: RET
// function Action ; var i ; begin
15620: LD_INT 0
15622: PPUSH
15623: PPUSH
// InGameOn ;
15624: CALL_OW 8
// wait ( 2 ) ;
15628: LD_INT 2
15630: PPUSH
15631: CALL_OW 67
// ComTurnUnit ( FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) diff player_scout , player_scout ) ;
15635: LD_INT 22
15637: PUSH
15638: LD_EXP 2
15642: PUSH
15643: EMPTY
15644: LIST
15645: LIST
15646: PUSH
15647: LD_INT 21
15649: PUSH
15650: LD_INT 1
15652: PUSH
15653: EMPTY
15654: LIST
15655: LIST
15656: PUSH
15657: EMPTY
15658: LIST
15659: LIST
15660: PPUSH
15661: CALL_OW 69
15665: PUSH
15666: LD_EXP 23
15670: DIFF
15671: PPUSH
15672: LD_EXP 23
15676: PPUSH
15677: CALL_OW 119
// CenterNowOnXY ( 126 , 68 ) ;
15681: LD_INT 126
15683: PPUSH
15684: LD_INT 68
15686: PPUSH
15687: CALL_OW 86
// ComMoveUnit ( player_scout , Heike ) ;
15691: LD_EXP 23
15695: PPUSH
15696: LD_EXP 10
15700: PPUSH
15701: CALL_OW 112
// AddComTurnUnit ( player_scout , Heike ) ;
15705: LD_EXP 23
15709: PPUSH
15710: LD_EXP 10
15714: PPUSH
15715: CALL_OW 179
// ComMoveUnit ( Heike , player_scout ) ;
15719: LD_EXP 10
15723: PPUSH
15724: LD_EXP 23
15728: PPUSH
15729: CALL_OW 112
// AddComTurnUnit ( Heike , player_scout ) ;
15733: LD_EXP 10
15737: PPUSH
15738: LD_EXP 23
15742: PPUSH
15743: CALL_OW 179
// i = tick ;
15747: LD_ADDR_VAR 0 2
15751: PUSH
15752: LD_OWVAR 1
15756: ST_TO_ADDR
// repeat wait ( 0 0$0.2 ) ;
15757: LD_INT 7
15759: PPUSH
15760: CALL_OW 67
// until GetDistUnits ( Heike , player_scout ) <= 4 or tick > i + 0 0$5 ;
15764: LD_EXP 10
15768: PPUSH
15769: LD_EXP 23
15773: PPUSH
15774: CALL_OW 296
15778: PUSH
15779: LD_INT 4
15781: LESSEQUAL
15782: PUSH
15783: LD_OWVAR 1
15787: PUSH
15788: LD_VAR 0 2
15792: PUSH
15793: LD_INT 175
15795: PLUS
15796: GREATER
15797: OR
15798: IFFALSE 15757
// Say ( Heike , D2-H-1 ) ;
15800: LD_EXP 10
15804: PPUSH
15805: LD_STRING D2-H-1
15807: PPUSH
15808: CALL_OW 88
// Say ( player_scout , D2-ScoutM-1 ) ;
15812: LD_EXP 23
15816: PPUSH
15817: LD_STRING D2-ScoutM-1
15819: PPUSH
15820: CALL_OW 88
// Say ( player_scout , D2-ScoutM-2 ) ;
15824: LD_EXP 23
15828: PPUSH
15829: LD_STRING D2-ScoutM-2
15831: PPUSH
15832: CALL_OW 88
// Say ( player_scout , D2-ScoutM-3 ) ;
15836: LD_EXP 23
15840: PPUSH
15841: LD_STRING D2-ScoutM-3
15843: PPUSH
15844: CALL_OW 88
// Say ( player_scout , D2-ScoutM-4 ) ;
15848: LD_EXP 23
15852: PPUSH
15853: LD_STRING D2-ScoutM-4
15855: PPUSH
15856: CALL_OW 88
// Say ( player_scout , D2-ScoutM-5 ) ;
15860: LD_EXP 23
15864: PPUSH
15865: LD_STRING D2-ScoutM-5
15867: PPUSH
15868: CALL_OW 88
// if IsOk ( Suze ) then
15872: LD_EXP 16
15876: PPUSH
15877: CALL_OW 302
15881: IFFALSE 15895
// Say ( Suze , D2-Su-1 ) ;
15883: LD_EXP 16
15887: PPUSH
15888: LD_STRING D2-Su-1
15890: PPUSH
15891: CALL_OW 88
// Say ( Heike , D2-H-2 ) ;
15895: LD_EXP 10
15899: PPUSH
15900: LD_STRING D2-H-2
15902: PPUSH
15903: CALL_OW 88
// InGameOff ;
15907: CALL_OW 9
// ComFree ( FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) ) ;
15911: LD_INT 22
15913: PUSH
15914: LD_EXP 2
15918: PUSH
15919: EMPTY
15920: LIST
15921: LIST
15922: PUSH
15923: LD_INT 21
15925: PUSH
15926: LD_INT 1
15928: PUSH
15929: EMPTY
15930: LIST
15931: LIST
15932: PUSH
15933: EMPTY
15934: LIST
15935: LIST
15936: PPUSH
15937: CALL_OW 69
15941: PPUSH
15942: CALL_OW 139
// wait ( 0 0$0.2 ) ;
15946: LD_INT 7
15948: PPUSH
15949: CALL_OW 67
// ChangeMissionObjectives ( M1 ) ;
15953: LD_STRING M1
15955: PPUSH
15956: CALL_OW 337
// wait ( 0 0$0.2 ) ;
15960: LD_INT 7
15962: PPUSH
15963: CALL_OW 67
// SaveForQuickRestart ;
15967: CALL_OW 22
// end ; end_of_file
15971: LD_VAR 0 1
15975: RET
// var dont_gather_crates , going_to_drop_material_units ; export function InitCrateModule ; begin
15976: LD_INT 0
15978: PPUSH
// dont_gather_crates = [ ] ;
15979: LD_ADDR_LOC 1
15983: PUSH
15984: EMPTY
15985: ST_TO_ADDR
// going_to_drop_material_units = [ ] ;
15986: LD_ADDR_LOC 2
15990: PUSH
15991: EMPTY
15992: ST_TO_ADDR
// end ;
15993: LD_VAR 0 1
15997: RET
// every 0 0$1 + 0 0$0.4 do
15998: GO 16000
16000: DISABLE
// begin repeat wait ( Rand ( 1 1$10 , 2 2$40 ) ) ;
16001: LD_INT 2450
16003: PPUSH
16004: LD_INT 5600
16006: PPUSH
16007: CALL_OW 12
16011: PPUSH
16012: CALL_OW 67
// CreateCratesAnywhere ( Rand ( 3 , 5 ) , true ) ;
16016: LD_INT 3
16018: PPUSH
16019: LD_INT 5
16021: PPUSH
16022: CALL_OW 12
16026: PPUSH
16027: LD_INT 1
16029: PPUSH
16030: CALL_OW 57
// if Rand ( 1 , 4 ) = 1 then
16034: LD_INT 1
16036: PPUSH
16037: LD_INT 4
16039: PPUSH
16040: CALL_OW 12
16044: PUSH
16045: LD_INT 1
16047: EQUAL
16048: IFFALSE 16083
// begin wait ( Rand ( 0 0$5 , 0 0$20 ) ) ;
16050: LD_INT 175
16052: PPUSH
16053: LD_INT 700
16055: PPUSH
16056: CALL_OW 12
16060: PPUSH
16061: CALL_OW 67
// CreateCratesAnywhere ( Rand ( 2 , 4 ) , true ) ;
16065: LD_INT 2
16067: PPUSH
16068: LD_INT 4
16070: PPUSH
16071: CALL_OW 12
16075: PPUSH
16076: LD_INT 1
16078: PPUSH
16079: CALL_OW 57
// end ; until false ;
16083: LD_INT 0
16085: IFFALSE 16001
// end ;
16087: END
// every 0 0$1 + 0 0$0.5 do var time ;
16088: GO 16090
16090: DISABLE
16091: LD_INT 0
16093: PPUSH
// begin repeat time = [ 1 1$40 , 1 1$55 , 2 2$10 ] [ difficulty ] ;
16094: LD_ADDR_VAR 0 1
16098: PUSH
16099: LD_INT 3500
16101: PUSH
16102: LD_INT 4025
16104: PUSH
16105: LD_INT 4550
16107: PUSH
16108: EMPTY
16109: LIST
16110: LIST
16111: LIST
16112: PUSH
16113: LD_OWVAR 67
16117: ARRAY
16118: ST_TO_ADDR
// wait ( Rand ( time , time + 0 0$30 ) ) ;
16119: LD_VAR 0 1
16123: PPUSH
16124: LD_VAR 0 1
16128: PUSH
16129: LD_INT 1050
16131: PLUS
16132: PPUSH
16133: CALL_OW 12
16137: PPUSH
16138: CALL_OW 67
// CreateCratesArea ( Rand ( 3 , 5 ) , player_crate_area , true ) ;
16142: LD_INT 3
16144: PPUSH
16145: LD_INT 5
16147: PPUSH
16148: CALL_OW 12
16152: PPUSH
16153: LD_INT 26
16155: PPUSH
16156: LD_INT 1
16158: PPUSH
16159: CALL_OW 55
// until false ;
16163: LD_INT 0
16165: IFFALSE 16094
// end ;
16167: PPOPN 1
16169: END
// every 0 0$1 + 0 0$0.8 do var crates_list , temp_list , c ;
16170: GO 16172
16172: DISABLE
16173: LD_INT 0
16175: PPUSH
16176: PPUSH
16177: PPUSH
// begin repeat wait ( 0 0$5 ) ;
16178: LD_INT 175
16180: PPUSH
16181: CALL_OW 67
// temp_list = GetListOfCratesInArea ( ar_crossing_area ) ;
16185: LD_ADDR_VAR 0 2
16189: PUSH
16190: LD_INT 15
16192: PPUSH
16193: CALL_OW 435
16197: ST_TO_ADDR
// if temp_list = 0 then
16198: LD_VAR 0 2
16202: PUSH
16203: LD_INT 0
16205: EQUAL
16206: IFFALSE 16210
// continue ;
16208: GO 16178
// c = 1 ;
16210: LD_ADDR_VAR 0 3
16214: PUSH
16215: LD_INT 1
16217: ST_TO_ADDR
// crates_list = [ ] ;
16218: LD_ADDR_VAR 0 1
16222: PUSH
16223: EMPTY
16224: ST_TO_ADDR
// repeat crates_list = crates_list ^ [ [ temp_list [ c ] , temp_list [ c + 1 ] ] ] ;
16225: LD_ADDR_VAR 0 1
16229: PUSH
16230: LD_VAR 0 1
16234: PUSH
16235: LD_VAR 0 2
16239: PUSH
16240: LD_VAR 0 3
16244: ARRAY
16245: PUSH
16246: LD_VAR 0 2
16250: PUSH
16251: LD_VAR 0 3
16255: PUSH
16256: LD_INT 1
16258: PLUS
16259: ARRAY
16260: PUSH
16261: EMPTY
16262: LIST
16263: LIST
16264: PUSH
16265: EMPTY
16266: LIST
16267: ADD
16268: ST_TO_ADDR
// c = c + 2 ;
16269: LD_ADDR_VAR 0 3
16273: PUSH
16274: LD_VAR 0 3
16278: PUSH
16279: LD_INT 2
16281: PLUS
16282: ST_TO_ADDR
// until c > temp_list ;
16283: LD_VAR 0 3
16287: PUSH
16288: LD_VAR 0 2
16292: GREATER
16293: IFFALSE 16225
// for c in crates_list do
16295: LD_ADDR_VAR 0 3
16299: PUSH
16300: LD_VAR 0 1
16304: PUSH
16305: FOR_IN
16306: IFFALSE 16365
// if not SeeXY ( you , c [ 1 ] , c [ 2 ] ) then
16308: LD_EXP 2
16312: PPUSH
16313: LD_VAR 0 3
16317: PUSH
16318: LD_INT 1
16320: ARRAY
16321: PPUSH
16322: LD_VAR 0 3
16326: PUSH
16327: LD_INT 2
16329: ARRAY
16330: PPUSH
16331: CALL_OW 293
16335: NOT
16336: IFFALSE 16363
// ChangeResourceAmountXY ( c [ 1 ] , c [ 2 ] , 0 ) ;
16338: LD_VAR 0 3
16342: PUSH
16343: LD_INT 1
16345: ARRAY
16346: PPUSH
16347: LD_VAR 0 3
16351: PUSH
16352: LD_INT 2
16354: ARRAY
16355: PPUSH
16356: LD_INT 0
16358: PPUSH
16359: CALL_OW 285
16363: GO 16305
16365: POP
16366: POP
// until false ;
16367: LD_INT 0
16369: IFFALSE 16178
// end ;
16371: PPOPN 3
16373: END
// export function OnCommand_CrateDropDetection ( com ) ; var b , temp_list , t ; begin
16374: LD_INT 0
16376: PPUSH
16377: PPUSH
16378: PPUSH
16379: PPUSH
// if com <> 74 then
16380: LD_VAR 0 1
16384: PUSH
16385: LD_INT 74
16387: NONEQUAL
16388: IFFALSE 16392
// exit ;
16390: GO 16564
// 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
16392: LD_ADDR_VAR 0 3
16396: PUSH
16397: LD_INT 22
16399: PUSH
16400: LD_EXP 2
16404: PUSH
16405: EMPTY
16406: LIST
16407: LIST
16408: PUSH
16409: LD_INT 2
16411: PUSH
16412: LD_INT 25
16414: PUSH
16415: LD_INT 2
16417: PUSH
16418: EMPTY
16419: LIST
16420: LIST
16421: PUSH
16422: LD_INT 25
16424: PUSH
16425: LD_INT 16
16427: PUSH
16428: EMPTY
16429: LIST
16430: LIST
16431: PUSH
16432: LD_INT 34
16434: PUSH
16435: LD_INT 12
16437: PUSH
16438: EMPTY
16439: LIST
16440: LIST
16441: PUSH
16442: LD_INT 34
16444: PUSH
16445: LD_INT 51
16447: PUSH
16448: EMPTY
16449: LIST
16450: LIST
16451: PUSH
16452: EMPTY
16453: LIST
16454: LIST
16455: LIST
16456: LIST
16457: LIST
16458: PUSH
16459: EMPTY
16460: LIST
16461: LIST
16462: PPUSH
16463: CALL_OW 69
16467: PUSH
16468: FOR_IN
16469: IFFALSE 16562
// if IsSelected ( b ) and not b in going_to_drop_material_units then
16471: LD_VAR 0 3
16475: PPUSH
16476: CALL_OW 306
16480: PUSH
16481: LD_VAR 0 3
16485: PUSH
16486: LD_LOC 2
16490: IN
16491: NOT
16492: AND
16493: IFFALSE 16560
// if HasTask ( b ) then
16495: LD_VAR 0 3
16499: PPUSH
16500: CALL_OW 314
16504: IFFALSE 16560
// begin for t in GetTaskList ( b ) do
16506: LD_ADDR_VAR 0 5
16510: PUSH
16511: LD_VAR 0 3
16515: PPUSH
16516: CALL_OW 437
16520: PUSH
16521: FOR_IN
16522: IFFALSE 16558
// begin if t [ 1 ] = m then
16524: LD_VAR 0 5
16528: PUSH
16529: LD_INT 1
16531: ARRAY
16532: PUSH
16533: LD_STRING m
16535: EQUAL
16536: IFFALSE 16556
// begin going_to_drop_material_units = going_to_drop_material_units ^ b ;
16538: LD_ADDR_LOC 2
16542: PUSH
16543: LD_LOC 2
16547: PUSH
16548: LD_VAR 0 3
16552: ADD
16553: ST_TO_ADDR
// break ;
16554: GO 16558
// end ; end ;
16556: GO 16521
16558: POP
16559: POP
// end ;
16560: GO 16468
16562: POP
16563: POP
// end ;
16564: LD_VAR 0 2
16568: RET
// every 0 0$1 + 0 0$0.1 do var un , temp_list , t , dist , hex ;
16569: GO 16571
16571: DISABLE
16572: LD_INT 0
16574: PPUSH
16575: PPUSH
16576: PPUSH
16577: PPUSH
16578: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
16579: LD_INT 18
16581: PPUSH
16582: CALL_OW 67
// if going_to_drop_material_units = 0 then
16586: LD_LOC 2
16590: PUSH
16591: LD_INT 0
16593: EQUAL
16594: IFFALSE 16598
// continue ;
16596: GO 16579
// for un in going_to_drop_material_units do
16598: LD_ADDR_VAR 0 1
16602: PUSH
16603: LD_LOC 2
16607: PUSH
16608: FOR_IN
16609: IFFALSE 16751
// if not Carry ( un ) then
16611: LD_VAR 0 1
16615: PPUSH
16616: CALL_OW 281
16620: NOT
16621: IFFALSE 16749
// begin if GetType ( un ) = unit_human then
16623: LD_VAR 0 1
16627: PPUSH
16628: CALL_OW 247
16632: PUSH
16633: LD_INT 1
16635: EQUAL
16636: IFFALSE 16648
// dist = 2 else
16638: LD_ADDR_VAR 0 4
16642: PUSH
16643: LD_INT 2
16645: ST_TO_ADDR
16646: GO 16656
// dist = 4 ;
16648: LD_ADDR_VAR 0 4
16652: PUSH
16653: LD_INT 4
16655: ST_TO_ADDR
// for hex in GetHexesNearHex ( GetX ( un ) , GetY ( un ) , dist ) do
16656: LD_ADDR_VAR 0 5
16660: PUSH
16661: LD_VAR 0 1
16665: PPUSH
16666: CALL_OW 250
16670: PPUSH
16671: LD_VAR 0 1
16675: PPUSH
16676: CALL_OW 251
16680: PPUSH
16681: LD_VAR 0 4
16685: PPUSH
16686: CALL 19717 0 3
16690: PUSH
16691: FOR_IN
16692: IFFALSE 16747
// if GetResourceAmountXY ( hex [ 1 ] , hex [ 2 ] ) > 0 then
16694: LD_VAR 0 5
16698: PUSH
16699: LD_INT 1
16701: ARRAY
16702: PPUSH
16703: LD_VAR 0 5
16707: PUSH
16708: LD_INT 2
16710: ARRAY
16711: PPUSH
16712: CALL_OW 284
16716: PUSH
16717: LD_INT 0
16719: GREATER
16720: IFFALSE 16745
// dont_gather_crates = Insert ( dont_gather_crates , 1 , hex ) ;
16722: LD_ADDR_LOC 1
16726: PUSH
16727: LD_LOC 1
16731: PPUSH
16732: LD_INT 1
16734: PPUSH
16735: LD_VAR 0 5
16739: PPUSH
16740: CALL_OW 2
16744: ST_TO_ADDR
16745: GO 16691
16747: POP
16748: POP
// end ;
16749: GO 16608
16751: POP
16752: POP
// going_to_drop_material_units = UnitFilter ( going_to_drop_material_units , [ f_hastask ] ) ;
16753: LD_ADDR_LOC 2
16757: PUSH
16758: LD_LOC 2
16762: PPUSH
16763: LD_INT 60
16765: PUSH
16766: EMPTY
16767: LIST
16768: PPUSH
16769: CALL_OW 72
16773: ST_TO_ADDR
// temp_list = [ ] ;
16774: LD_ADDR_VAR 0 2
16778: PUSH
16779: EMPTY
16780: ST_TO_ADDR
// for un in going_to_drop_material_units do
16781: LD_ADDR_VAR 0 1
16785: PUSH
16786: LD_LOC 2
16790: PUSH
16791: FOR_IN
16792: IFFALSE 16850
// begin for t in GetTaskList ( un ) do
16794: LD_ADDR_VAR 0 3
16798: PUSH
16799: LD_VAR 0 1
16803: PPUSH
16804: CALL_OW 437
16808: PUSH
16809: FOR_IN
16810: IFFALSE 16846
// if t [ 1 ] = m then
16812: LD_VAR 0 3
16816: PUSH
16817: LD_INT 1
16819: ARRAY
16820: PUSH
16821: LD_STRING m
16823: EQUAL
16824: IFFALSE 16844
// begin temp_list = temp_list ^ un ;
16826: LD_ADDR_VAR 0 2
16830: PUSH
16831: LD_VAR 0 2
16835: PUSH
16836: LD_VAR 0 1
16840: ADD
16841: ST_TO_ADDR
// break ;
16842: GO 16846
// end ;
16844: GO 16809
16846: POP
16847: POP
// end ;
16848: GO 16791
16850: POP
16851: POP
// going_to_drop_material_units = temp_list ;
16852: LD_ADDR_LOC 2
16856: PUSH
16857: LD_VAR 0 2
16861: ST_TO_ADDR
// until false ;
16862: LD_INT 0
16864: IFFALSE 16579
// end ;
16866: PPOPN 5
16868: END
// every 0 0$1 do var i ;
16869: GO 16871
16871: DISABLE
16872: LD_INT 0
16874: PPUSH
// begin repeat wait ( 0 0$1 ) ;
16875: LD_INT 35
16877: PPUSH
16878: CALL_OW 67
// if dont_gather_crates = 0 then
16882: LD_LOC 1
16886: PUSH
16887: LD_INT 0
16889: EQUAL
16890: IFFALSE 16894
// continue ;
16892: GO 16875
// i = 1 ;
16894: LD_ADDR_VAR 0 1
16898: PUSH
16899: LD_INT 1
16901: ST_TO_ADDR
// while i <= dont_gather_crates do
16902: LD_VAR 0 1
16906: PUSH
16907: LD_LOC 1
16911: LESSEQUAL
16912: IFFALSE 16992
// begin if GetResourceAmountXY ( dont_gather_crates [ i ] [ 1 ] , dont_gather_crates [ i ] [ 2 ] ) = 0 then
16914: LD_LOC 1
16918: PUSH
16919: LD_VAR 0 1
16923: ARRAY
16924: PUSH
16925: LD_INT 1
16927: ARRAY
16928: PPUSH
16929: LD_LOC 1
16933: PUSH
16934: LD_VAR 0 1
16938: ARRAY
16939: PUSH
16940: LD_INT 2
16942: ARRAY
16943: PPUSH
16944: CALL_OW 284
16948: PUSH
16949: LD_INT 0
16951: EQUAL
16952: IFFALSE 16976
// begin dont_gather_crates = Delete ( dont_gather_crates , i ) ;
16954: LD_ADDR_LOC 1
16958: PUSH
16959: LD_LOC 1
16963: PPUSH
16964: LD_VAR 0 1
16968: PPUSH
16969: CALL_OW 3
16973: ST_TO_ADDR
// continue ;
16974: GO 16902
// end ; i = i + 1 ;
16976: LD_ADDR_VAR 0 1
16980: PUSH
16981: LD_VAR 0 1
16985: PUSH
16986: LD_INT 1
16988: PLUS
16989: ST_TO_ADDR
// end ;
16990: GO 16902
// until false ;
16992: LD_INT 0
16994: IFFALSE 16875
// end ;
16996: PPOPN 1
16998: END
// export function GetListOfCratesInArea_ForGathering ( base , area ) ; var temp_list , c ; begin
16999: LD_INT 0
17001: PPUSH
17002: PPUSH
17003: PPUSH
// temp_list = GetListOfCratesInArea ( area ) ;
17004: LD_ADDR_VAR 0 4
17008: PUSH
17009: LD_VAR 0 2
17013: PPUSH
17014: CALL_OW 435
17018: ST_TO_ADDR
// result = [ ] ;
17019: LD_ADDR_VAR 0 3
17023: PUSH
17024: EMPTY
17025: ST_TO_ADDR
// if temp_list > 0 then
17026: LD_VAR 0 4
17030: PUSH
17031: LD_INT 0
17033: GREATER
17034: IFFALSE 17230
// begin c = 1 ;
17036: LD_ADDR_VAR 0 5
17040: PUSH
17041: LD_INT 1
17043: 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
17044: LD_VAR 0 4
17048: PUSH
17049: LD_VAR 0 5
17053: ARRAY
17054: PPUSH
17055: LD_VAR 0 4
17059: PUSH
17060: LD_VAR 0 5
17064: PUSH
17065: LD_INT 1
17067: PLUS
17068: ARRAY
17069: PPUSH
17070: CALL_OW 283
17074: PUSH
17075: LD_INT 4
17077: NONEQUAL
17078: PUSH
17079: LD_VAR 0 4
17083: PUSH
17084: LD_VAR 0 5
17088: ARRAY
17089: PPUSH
17090: LD_VAR 0 4
17094: PUSH
17095: LD_VAR 0 5
17099: PUSH
17100: LD_INT 1
17102: PLUS
17103: ARRAY
17104: PPUSH
17105: LD_VAR 0 1
17109: PPUSH
17110: CALL 24795 0 1
17114: PPUSH
17115: CALL_OW 309
17119: PUSH
17120: LD_VAR 0 4
17124: PUSH
17125: LD_VAR 0 5
17129: ARRAY
17130: PUSH
17131: LD_VAR 0 4
17135: PUSH
17136: LD_VAR 0 5
17140: PUSH
17141: LD_INT 1
17143: PLUS
17144: ARRAY
17145: PUSH
17146: EMPTY
17147: LIST
17148: LIST
17149: PUSH
17150: LD_LOC 1
17154: IN
17155: NOT
17156: OR
17157: AND
17158: IFFALSE 17204
// result = result ^ [ [ temp_list [ c ] , temp_list [ c + 1 ] ] ] ;
17160: LD_ADDR_VAR 0 3
17164: PUSH
17165: LD_VAR 0 3
17169: PUSH
17170: LD_VAR 0 4
17174: PUSH
17175: LD_VAR 0 5
17179: ARRAY
17180: PUSH
17181: LD_VAR 0 4
17185: PUSH
17186: LD_VAR 0 5
17190: PUSH
17191: LD_INT 1
17193: PLUS
17194: ARRAY
17195: PUSH
17196: EMPTY
17197: LIST
17198: LIST
17199: PUSH
17200: EMPTY
17201: LIST
17202: ADD
17203: ST_TO_ADDR
// c = c + 2 ;
17204: LD_ADDR_VAR 0 5
17208: PUSH
17209: LD_VAR 0 5
17213: PUSH
17214: LD_INT 2
17216: PLUS
17217: ST_TO_ADDR
// until c > temp_list ;
17218: LD_VAR 0 5
17222: PUSH
17223: LD_VAR 0 4
17227: GREATER
17228: IFFALSE 17044
// end ; end ; end_of_file
17230: LD_VAR 0 3
17234: 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
17235: LD_INT 0
17237: PPUSH
17238: PPUSH
17239: PPUSH
17240: PPUSH
17241: PPUSH
17242: PPUSH
17243: PPUSH
17244: PPUSH
17245: PPUSH
17246: PPUSH
17247: PPUSH
17248: 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
17249: LD_VAR 0 1
17253: PPUSH
17254: CALL_OW 302
17258: NOT
17259: PUSH
17260: LD_VAR 0 4
17264: PUSH
17265: LD_INT 1
17267: EQUAL
17268: OR
17269: PUSH
17270: LD_VAR 0 2
17274: PPUSH
17275: LD_VAR 0 3
17279: PPUSH
17280: CALL_OW 488
17284: NOT
17285: OR
17286: PUSH
17287: LD_VAR 0 1
17291: PPUSH
17292: LD_VAR 0 2
17296: PPUSH
17297: LD_VAR 0 3
17301: PPUSH
17302: CALL_OW 297
17306: PUSH
17307: LD_VAR 0 4
17311: GREATEREQUAL
17312: OR
17313: PUSH
17314: LD_VAR 0 5
17318: PUSH
17319: LD_INT 1
17321: PUSH
17322: LD_INT 0
17324: PUSH
17325: EMPTY
17326: LIST
17327: LIST
17328: IN
17329: NOT
17330: OR
17331: IFFALSE 17335
// exit ;
17333: GO 18892
// attempts = 0 ;
17335: LD_ADDR_VAR 0 17
17339: PUSH
17340: LD_INT 0
17342: ST_TO_ADDR
// repeat list_nearest = [ ] ;
17343: LD_ADDR_VAR 0 7
17347: PUSH
17348: EMPTY
17349: ST_TO_ADDR
// list_coords = [ ] ;
17350: LD_ADDR_VAR 0 8
17354: PUSH
17355: EMPTY
17356: ST_TO_ADDR
// temp_dir = AI_GetTurnDirection ( x , y , GetX ( unit1 ) , GetY ( unit1 ) ) ;
17357: LD_ADDR_VAR 0 9
17361: PUSH
17362: LD_VAR 0 2
17366: PPUSH
17367: LD_VAR 0 3
17371: PPUSH
17372: LD_VAR 0 1
17376: PPUSH
17377: CALL_OW 250
17381: PPUSH
17382: LD_VAR 0 1
17386: PPUSH
17387: CALL_OW 251
17391: PPUSH
17392: CALL 18897 0 4
17396: ST_TO_ADDR
// if attempts = 0 then
17397: LD_VAR 0 17
17401: PUSH
17402: LD_INT 0
17404: EQUAL
17405: IFFALSE 17513
// begin dir_list = [ temp_dir , temp_dir + 1 , temp_dir - 1 ] ;
17407: LD_ADDR_VAR 0 10
17411: PUSH
17412: LD_VAR 0 9
17416: PUSH
17417: LD_VAR 0 9
17421: PUSH
17422: LD_INT 1
17424: PLUS
17425: PUSH
17426: LD_VAR 0 9
17430: PUSH
17431: LD_INT 1
17433: MINUS
17434: PUSH
17435: EMPTY
17436: LIST
17437: LIST
17438: LIST
17439: ST_TO_ADDR
// if dir_list [ 2 ] = 6 then
17440: LD_VAR 0 10
17444: PUSH
17445: LD_INT 2
17447: ARRAY
17448: PUSH
17449: LD_INT 6
17451: EQUAL
17452: IFFALSE 17475
// dir_list = Replace ( dir_list , 2 , 0 ) ;
17454: LD_ADDR_VAR 0 10
17458: PUSH
17459: LD_VAR 0 10
17463: PPUSH
17464: LD_INT 2
17466: PPUSH
17467: LD_INT 0
17469: PPUSH
17470: CALL_OW 1
17474: ST_TO_ADDR
// if dir_list [ 3 ] = - 1 then
17475: LD_VAR 0 10
17479: PUSH
17480: LD_INT 3
17482: ARRAY
17483: PUSH
17484: LD_INT 1
17486: NEG
17487: EQUAL
17488: IFFALSE 17511
// dir_list = Replace ( dir_list , 3 , 5 ) ;
17490: LD_ADDR_VAR 0 10
17494: PUSH
17495: LD_VAR 0 10
17499: PPUSH
17500: LD_INT 3
17502: PPUSH
17503: LD_INT 5
17505: PPUSH
17506: CALL_OW 1
17510: ST_TO_ADDR
// end else
17511: GO 17550
// dir_list = [ 0 , 1 , 2 , 3 , 4 , 5 ] diff temp_dir ;
17513: LD_ADDR_VAR 0 10
17517: PUSH
17518: LD_INT 0
17520: PUSH
17521: LD_INT 1
17523: PUSH
17524: LD_INT 2
17526: PUSH
17527: LD_INT 3
17529: PUSH
17530: LD_INT 4
17532: PUSH
17533: LD_INT 5
17535: PUSH
17536: EMPTY
17537: LIST
17538: LIST
17539: LIST
17540: LIST
17541: LIST
17542: LIST
17543: PUSH
17544: LD_VAR 0 9
17548: DIFF
17549: ST_TO_ADDR
// for c = 1 to ( dir_list + 0 ) do
17550: LD_ADDR_VAR 0 14
17554: PUSH
17555: DOUBLE
17556: LD_INT 1
17558: DEC
17559: ST_TO_ADDR
17560: LD_VAR 0 10
17564: PUSH
17565: LD_INT 0
17567: PLUS
17568: PUSH
17569: FOR_TO
17570: IFFALSE 17892
// case dir_list [ c ] of 0 :
17572: LD_VAR 0 10
17576: PUSH
17577: LD_VAR 0 14
17581: ARRAY
17582: PUSH
17583: LD_INT 0
17585: DOUBLE
17586: EQUAL
17587: IFTRUE 17591
17589: GO 17632
17591: POP
// list_coords = Insert ( list_coords , 1 , [ x , y - dist ] ) ; 1 :
17592: LD_ADDR_VAR 0 8
17596: PUSH
17597: LD_VAR 0 8
17601: PPUSH
17602: LD_INT 1
17604: PPUSH
17605: LD_VAR 0 2
17609: PUSH
17610: LD_VAR 0 3
17614: PUSH
17615: LD_VAR 0 4
17619: MINUS
17620: PUSH
17621: EMPTY
17622: LIST
17623: LIST
17624: PPUSH
17625: CALL_OW 2
17629: ST_TO_ADDR
17630: GO 17890
17632: LD_INT 1
17634: DOUBLE
17635: EQUAL
17636: IFTRUE 17640
17638: GO 17681
17640: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y ] ) ; 2 :
17641: LD_ADDR_VAR 0 8
17645: PUSH
17646: LD_VAR 0 8
17650: PPUSH
17651: LD_INT 1
17653: PPUSH
17654: LD_VAR 0 2
17658: PUSH
17659: LD_VAR 0 4
17663: PLUS
17664: PUSH
17665: LD_VAR 0 3
17669: PUSH
17670: EMPTY
17671: LIST
17672: LIST
17673: PPUSH
17674: CALL_OW 2
17678: ST_TO_ADDR
17679: GO 17890
17681: LD_INT 2
17683: DOUBLE
17684: EQUAL
17685: IFTRUE 17689
17687: GO 17736
17689: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + dist ] ) ; 3 :
17690: LD_ADDR_VAR 0 8
17694: PUSH
17695: LD_VAR 0 8
17699: PPUSH
17700: LD_INT 1
17702: PPUSH
17703: LD_VAR 0 2
17707: PUSH
17708: LD_VAR 0 4
17712: PLUS
17713: PUSH
17714: LD_VAR 0 3
17718: PUSH
17719: LD_VAR 0 4
17723: PLUS
17724: PUSH
17725: EMPTY
17726: LIST
17727: LIST
17728: PPUSH
17729: CALL_OW 2
17733: ST_TO_ADDR
17734: GO 17890
17736: LD_INT 3
17738: DOUBLE
17739: EQUAL
17740: IFTRUE 17744
17742: GO 17785
17744: POP
// list_coords = Insert ( list_coords , 1 , [ x , y + dist ] ) ; 4 :
17745: LD_ADDR_VAR 0 8
17749: PUSH
17750: LD_VAR 0 8
17754: PPUSH
17755: LD_INT 1
17757: PPUSH
17758: LD_VAR 0 2
17762: PUSH
17763: LD_VAR 0 3
17767: PUSH
17768: LD_VAR 0 4
17772: PLUS
17773: PUSH
17774: EMPTY
17775: LIST
17776: LIST
17777: PPUSH
17778: CALL_OW 2
17782: ST_TO_ADDR
17783: GO 17890
17785: LD_INT 4
17787: DOUBLE
17788: EQUAL
17789: IFTRUE 17793
17791: GO 17834
17793: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y ] ) ; 5 :
17794: LD_ADDR_VAR 0 8
17798: PUSH
17799: LD_VAR 0 8
17803: PPUSH
17804: LD_INT 1
17806: PPUSH
17807: LD_VAR 0 2
17811: PUSH
17812: LD_VAR 0 4
17816: MINUS
17817: PUSH
17818: LD_VAR 0 3
17822: PUSH
17823: EMPTY
17824: LIST
17825: LIST
17826: PPUSH
17827: CALL_OW 2
17831: ST_TO_ADDR
17832: GO 17890
17834: LD_INT 5
17836: DOUBLE
17837: EQUAL
17838: IFTRUE 17842
17840: GO 17889
17842: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - dist ] ) ; end ;
17843: LD_ADDR_VAR 0 8
17847: PUSH
17848: LD_VAR 0 8
17852: PPUSH
17853: LD_INT 1
17855: PPUSH
17856: LD_VAR 0 2
17860: PUSH
17861: LD_VAR 0 4
17865: MINUS
17866: PUSH
17867: LD_VAR 0 3
17871: PUSH
17872: LD_VAR 0 4
17876: MINUS
17877: PUSH
17878: EMPTY
17879: LIST
17880: LIST
17881: PPUSH
17882: CALL_OW 2
17886: ST_TO_ADDR
17887: GO 17890
17889: POP
17890: GO 17569
17892: POP
17893: POP
// if dist < 30 then
17894: LD_VAR 0 4
17898: PUSH
17899: LD_INT 30
17901: LESS
17902: IFFALSE 17914
// c = 1 else
17904: LD_ADDR_VAR 0 14
17908: PUSH
17909: LD_INT 1
17911: ST_TO_ADDR
17912: GO 17922
// c = 2 ;
17914: LD_ADDR_VAR 0 14
17918: PUSH
17919: LD_INT 2
17921: ST_TO_ADDR
// b = 1 ;
17922: LD_ADDR_VAR 0 11
17926: PUSH
17927: LD_INT 1
17929: ST_TO_ADDR
// while b <= ( dist - 1 ) do
17930: LD_VAR 0 11
17934: PUSH
17935: LD_VAR 0 4
17939: PUSH
17940: LD_INT 1
17942: MINUS
17943: LESSEQUAL
17944: IFFALSE 18372
// begin if 0 in dir_list and 1 in dir_list then
17946: LD_INT 0
17948: PUSH
17949: LD_VAR 0 10
17953: IN
17954: PUSH
17955: LD_INT 1
17957: PUSH
17958: LD_VAR 0 10
17962: IN
17963: AND
17964: IFFALSE 18016
// list_coords = Insert ( list_coords , 1 , [ x + b , y - dist + b ] ) ;
17966: LD_ADDR_VAR 0 8
17970: PUSH
17971: LD_VAR 0 8
17975: PPUSH
17976: LD_INT 1
17978: PPUSH
17979: LD_VAR 0 2
17983: PUSH
17984: LD_VAR 0 11
17988: PLUS
17989: PUSH
17990: LD_VAR 0 3
17994: PUSH
17995: LD_VAR 0 4
17999: MINUS
18000: PUSH
18001: LD_VAR 0 11
18005: PLUS
18006: PUSH
18007: EMPTY
18008: LIST
18009: LIST
18010: PPUSH
18011: CALL_OW 2
18015: ST_TO_ADDR
// if 1 in dir_list and 2 in dir_list then
18016: LD_INT 1
18018: PUSH
18019: LD_VAR 0 10
18023: IN
18024: PUSH
18025: LD_INT 2
18027: PUSH
18028: LD_VAR 0 10
18032: IN
18033: AND
18034: IFFALSE 18080
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + b ] ) ;
18036: LD_ADDR_VAR 0 8
18040: PUSH
18041: LD_VAR 0 8
18045: PPUSH
18046: LD_INT 1
18048: PPUSH
18049: LD_VAR 0 2
18053: PUSH
18054: LD_VAR 0 4
18058: PLUS
18059: PUSH
18060: LD_VAR 0 3
18064: PUSH
18065: LD_VAR 0 11
18069: PLUS
18070: PUSH
18071: EMPTY
18072: LIST
18073: LIST
18074: PPUSH
18075: CALL_OW 2
18079: ST_TO_ADDR
// if 2 in dir_list and 3 in dir_list then
18080: LD_INT 2
18082: PUSH
18083: LD_VAR 0 10
18087: IN
18088: PUSH
18089: LD_INT 3
18091: PUSH
18092: LD_VAR 0 10
18096: IN
18097: AND
18098: IFFALSE 18150
// list_coords = Insert ( list_coords , 1 , [ x + dist - b , y + dist ] ) ;
18100: LD_ADDR_VAR 0 8
18104: PUSH
18105: LD_VAR 0 8
18109: PPUSH
18110: LD_INT 1
18112: PPUSH
18113: LD_VAR 0 2
18117: PUSH
18118: LD_VAR 0 4
18122: PLUS
18123: PUSH
18124: LD_VAR 0 11
18128: MINUS
18129: PUSH
18130: LD_VAR 0 3
18134: PUSH
18135: LD_VAR 0 4
18139: PLUS
18140: PUSH
18141: EMPTY
18142: LIST
18143: LIST
18144: PPUSH
18145: CALL_OW 2
18149: ST_TO_ADDR
// if 3 in dir_list and 4 in dir_list then
18150: LD_INT 3
18152: PUSH
18153: LD_VAR 0 10
18157: IN
18158: PUSH
18159: LD_INT 4
18161: PUSH
18162: LD_VAR 0 10
18166: IN
18167: AND
18168: IFFALSE 18220
// list_coords = Insert ( list_coords , 1 , [ x - b , y + dist - b ] ) ;
18170: LD_ADDR_VAR 0 8
18174: PUSH
18175: LD_VAR 0 8
18179: PPUSH
18180: LD_INT 1
18182: PPUSH
18183: LD_VAR 0 2
18187: PUSH
18188: LD_VAR 0 11
18192: MINUS
18193: PUSH
18194: LD_VAR 0 3
18198: PUSH
18199: LD_VAR 0 4
18203: PLUS
18204: PUSH
18205: LD_VAR 0 11
18209: MINUS
18210: PUSH
18211: EMPTY
18212: LIST
18213: LIST
18214: PPUSH
18215: CALL_OW 2
18219: ST_TO_ADDR
// if 4 in dir_list and 5 in dir_list then
18220: LD_INT 4
18222: PUSH
18223: LD_VAR 0 10
18227: IN
18228: PUSH
18229: LD_INT 5
18231: PUSH
18232: LD_VAR 0 10
18236: IN
18237: AND
18238: IFFALSE 18284
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - b ] ) ;
18240: LD_ADDR_VAR 0 8
18244: PUSH
18245: LD_VAR 0 8
18249: PPUSH
18250: LD_INT 1
18252: PPUSH
18253: LD_VAR 0 2
18257: PUSH
18258: LD_VAR 0 4
18262: MINUS
18263: PUSH
18264: LD_VAR 0 3
18268: PUSH
18269: LD_VAR 0 11
18273: MINUS
18274: PUSH
18275: EMPTY
18276: LIST
18277: LIST
18278: PPUSH
18279: CALL_OW 2
18283: ST_TO_ADDR
// if 5 in dir_list and 0 in dir_list then
18284: LD_INT 5
18286: PUSH
18287: LD_VAR 0 10
18291: IN
18292: PUSH
18293: LD_INT 0
18295: PUSH
18296: LD_VAR 0 10
18300: IN
18301: AND
18302: IFFALSE 18354
// list_coords = Insert ( list_coords , 1 , [ x - dist + b , y - dist ] ) ;
18304: LD_ADDR_VAR 0 8
18308: PUSH
18309: LD_VAR 0 8
18313: PPUSH
18314: LD_INT 1
18316: PPUSH
18317: LD_VAR 0 2
18321: PUSH
18322: LD_VAR 0 4
18326: MINUS
18327: PUSH
18328: LD_VAR 0 11
18332: PLUS
18333: PUSH
18334: LD_VAR 0 3
18338: PUSH
18339: LD_VAR 0 4
18343: MINUS
18344: PUSH
18345: EMPTY
18346: LIST
18347: LIST
18348: PPUSH
18349: CALL_OW 2
18353: ST_TO_ADDR
// b = b + c end ;
18354: LD_ADDR_VAR 0 11
18358: PUSH
18359: LD_VAR 0 11
18363: PUSH
18364: LD_VAR 0 14
18368: PLUS
18369: ST_TO_ADDR
18370: GO 17930
// if list_coords = 0 then
18372: LD_VAR 0 8
18376: PUSH
18377: LD_INT 0
18379: EQUAL
18380: IFFALSE 18384
// exit ;
18382: GO 18892
// repeat min_dist = 5000 ;
18384: LD_ADDR_VAR 0 12
18388: PUSH
18389: LD_INT 5000
18391: ST_TO_ADDR
// for b in list_coords do
18392: LD_ADDR_VAR 0 11
18396: PUSH
18397: LD_VAR 0 8
18401: PUSH
18402: FOR_IN
18403: IFFALSE 18462
// begin temp_dist = GetDistUnitXY ( unit1 , b [ 1 ] , b [ 2 ] ) ;
18405: LD_ADDR_VAR 0 13
18409: PUSH
18410: LD_VAR 0 1
18414: PPUSH
18415: LD_VAR 0 11
18419: PUSH
18420: LD_INT 1
18422: ARRAY
18423: PPUSH
18424: LD_VAR 0 11
18428: PUSH
18429: LD_INT 2
18431: ARRAY
18432: PPUSH
18433: CALL_OW 297
18437: ST_TO_ADDR
// if temp_dist < min_dist then
18438: LD_VAR 0 13
18442: PUSH
18443: LD_VAR 0 12
18447: LESS
18448: IFFALSE 18460
// min_dist = temp_dist ;
18450: LD_ADDR_VAR 0 12
18454: PUSH
18455: LD_VAR 0 13
18459: ST_TO_ADDR
// end ;
18460: GO 18402
18462: POP
18463: POP
// c = 0 ;
18464: LD_ADDR_VAR 0 14
18468: PUSH
18469: LD_INT 0
18471: ST_TO_ADDR
// repeat c = c + 1 ;
18472: LD_ADDR_VAR 0 14
18476: PUSH
18477: LD_VAR 0 14
18481: PUSH
18482: LD_INT 1
18484: PLUS
18485: ST_TO_ADDR
// if GetDistUnitXY ( unit1 , list_coords [ c ] [ 1 ] , list_coords [ c ] [ 2 ] ) = min_dist then
18486: LD_VAR 0 1
18490: PPUSH
18491: LD_VAR 0 8
18495: PUSH
18496: LD_VAR 0 14
18500: ARRAY
18501: PUSH
18502: LD_INT 1
18504: ARRAY
18505: PPUSH
18506: LD_VAR 0 8
18510: PUSH
18511: LD_VAR 0 14
18515: ARRAY
18516: PUSH
18517: LD_INT 2
18519: ARRAY
18520: PPUSH
18521: CALL_OW 297
18525: PUSH
18526: LD_VAR 0 12
18530: EQUAL
18531: IFFALSE 18596
// begin list_nearest = Insert ( list_nearest , 1 , list_coords [ c ] ) ;
18533: LD_ADDR_VAR 0 7
18537: PUSH
18538: LD_VAR 0 7
18542: PPUSH
18543: LD_INT 1
18545: PPUSH
18546: LD_VAR 0 8
18550: PUSH
18551: LD_VAR 0 14
18555: ARRAY
18556: PPUSH
18557: CALL_OW 2
18561: ST_TO_ADDR
// list_coords = Delete ( list_coords , c ) ;
18562: LD_ADDR_VAR 0 8
18566: PUSH
18567: LD_VAR 0 8
18571: PPUSH
18572: LD_VAR 0 14
18576: PPUSH
18577: CALL_OW 3
18581: ST_TO_ADDR
// c = c - 1 ;
18582: LD_ADDR_VAR 0 14
18586: PUSH
18587: LD_VAR 0 14
18591: PUSH
18592: LD_INT 1
18594: MINUS
18595: ST_TO_ADDR
// end ; until c = list_coords ;
18596: LD_VAR 0 14
18600: PUSH
18601: LD_VAR 0 8
18605: EQUAL
18606: IFFALSE 18472
// c = 0 ;
18608: LD_ADDR_VAR 0 14
18612: PUSH
18613: LD_INT 0
18615: ST_TO_ADDR
// if list_nearest > 0 then
18616: LD_VAR 0 7
18620: PUSH
18621: LD_INT 0
18623: GREATER
18624: IFFALSE 18766
// begin repeat rand_num = Rand ( 1 , list_nearest ) ;
18626: LD_ADDR_VAR 0 15
18630: PUSH
18631: LD_INT 1
18633: PPUSH
18634: LD_VAR 0 7
18638: PPUSH
18639: CALL_OW 12
18643: ST_TO_ADDR
// rand_near_hex = list_nearest [ rand_num ] ;
18644: LD_ADDR_VAR 0 16
18648: PUSH
18649: LD_VAR 0 7
18653: PUSH
18654: LD_VAR 0 15
18658: ARRAY
18659: 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
18660: LD_VAR 0 16
18664: PUSH
18665: LD_INT 1
18667: ARRAY
18668: PPUSH
18669: LD_VAR 0 16
18673: PUSH
18674: LD_INT 2
18676: ARRAY
18677: PPUSH
18678: CALL_OW 488
18682: PUSH
18683: LD_INT 0
18685: GREATER
18686: PUSH
18687: LD_VAR 0 16
18691: PUSH
18692: LD_INT 1
18694: ARRAY
18695: PPUSH
18696: LD_VAR 0 16
18700: PUSH
18701: LD_INT 2
18703: ARRAY
18704: PPUSH
18705: CALL_OW 428
18709: PUSH
18710: LD_INT 0
18712: EQUAL
18713: AND
18714: IFFALSE 18726
// c = 1 else
18716: LD_ADDR_VAR 0 14
18720: PUSH
18721: LD_INT 1
18723: ST_TO_ADDR
18724: GO 18746
// list_nearest = Delete ( list_nearest , rand_num ) ;
18726: LD_ADDR_VAR 0 7
18730: PUSH
18731: LD_VAR 0 7
18735: PPUSH
18736: LD_VAR 0 15
18740: PPUSH
18741: CALL_OW 3
18745: ST_TO_ADDR
// until c = 1 or list_nearest = 0 ;
18746: LD_VAR 0 14
18750: PUSH
18751: LD_INT 1
18753: EQUAL
18754: PUSH
18755: LD_VAR 0 7
18759: PUSH
18760: LD_INT 0
18762: EQUAL
18763: OR
18764: IFFALSE 18626
// end ; until c = 1 or list_coords = 0 ;
18766: LD_VAR 0 14
18770: PUSH
18771: LD_INT 1
18773: EQUAL
18774: PUSH
18775: LD_VAR 0 8
18779: PUSH
18780: LD_INT 0
18782: EQUAL
18783: OR
18784: IFFALSE 18384
// attempts = attempts + 1 ;
18786: LD_ADDR_VAR 0 17
18790: PUSH
18791: LD_VAR 0 17
18795: PUSH
18796: LD_INT 1
18798: PLUS
18799: ST_TO_ADDR
// until c = 1 or attempts > 1 ;
18800: LD_VAR 0 14
18804: PUSH
18805: LD_INT 1
18807: EQUAL
18808: PUSH
18809: LD_VAR 0 17
18813: PUSH
18814: LD_INT 1
18816: GREATER
18817: OR
18818: IFFALSE 17343
// if c = 1 then
18820: LD_VAR 0 14
18824: PUSH
18825: LD_INT 1
18827: EQUAL
18828: IFFALSE 18892
// if add then
18830: LD_VAR 0 5
18834: IFFALSE 18865
// AddComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) else
18836: LD_VAR 0 1
18840: PPUSH
18841: LD_VAR 0 16
18845: PUSH
18846: LD_INT 1
18848: ARRAY
18849: PPUSH
18850: LD_VAR 0 16
18854: PUSH
18855: LD_INT 2
18857: ARRAY
18858: PPUSH
18859: CALL_OW 171
18863: GO 18892
// ComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) ;
18865: LD_VAR 0 1
18869: PPUSH
18870: LD_VAR 0 16
18874: PUSH
18875: LD_INT 1
18877: ARRAY
18878: PPUSH
18879: LD_VAR 0 16
18883: PUSH
18884: LD_INT 2
18886: ARRAY
18887: PPUSH
18888: CALL_OW 111
// end ;
18892: LD_VAR 0 6
18896: RET
// export function AI_GetTurnDirection ( x1 , y1 , x , y ) ; var dist_1 , dist_2 , b , temp_dist , dir ; begin
18897: LD_INT 0
18899: PPUSH
18900: PPUSH
18901: PPUSH
18902: PPUSH
18903: PPUSH
18904: PPUSH
// if not ValidHex ( x1 , y1 ) or not ValidHex ( x , y ) then
18905: LD_VAR 0 1
18909: PPUSH
18910: LD_VAR 0 2
18914: PPUSH
18915: CALL_OW 488
18919: NOT
18920: PUSH
18921: LD_VAR 0 3
18925: PPUSH
18926: LD_VAR 0 4
18930: PPUSH
18931: CALL_OW 488
18935: NOT
18936: OR
18937: IFFALSE 18950
// begin result = - 1 ;
18939: LD_ADDR_VAR 0 5
18943: PUSH
18944: LD_INT 1
18946: NEG
18947: ST_TO_ADDR
// exit ;
18948: GO 19110
// end ; dist_1 = GetDistXY ( x1 , y1 , x , y ) ;
18950: LD_ADDR_VAR 0 6
18954: PUSH
18955: LD_VAR 0 1
18959: PPUSH
18960: LD_VAR 0 2
18964: PPUSH
18965: LD_VAR 0 3
18969: PPUSH
18970: LD_VAR 0 4
18974: PPUSH
18975: CALL_OW 298
18979: ST_TO_ADDR
// dist_2 = 99999 ;
18980: LD_ADDR_VAR 0 7
18984: PUSH
18985: LD_INT 99999
18987: ST_TO_ADDR
// for b = 0 to 5 do
18988: LD_ADDR_VAR 0 8
18992: PUSH
18993: DOUBLE
18994: LD_INT 0
18996: DEC
18997: ST_TO_ADDR
18998: LD_INT 5
19000: PUSH
19001: FOR_TO
19002: IFFALSE 19098
// begin temp_dist = GetDistXY ( ShiftX ( x1 , b , dist_1 ) , ShiftY ( y1 , b , dist_1 ) , x , y ) ;
19004: LD_ADDR_VAR 0 9
19008: PUSH
19009: LD_VAR 0 1
19013: PPUSH
19014: LD_VAR 0 8
19018: PPUSH
19019: LD_VAR 0 6
19023: PPUSH
19024: CALL_OW 272
19028: PPUSH
19029: LD_VAR 0 2
19033: PPUSH
19034: LD_VAR 0 8
19038: PPUSH
19039: LD_VAR 0 6
19043: PPUSH
19044: CALL_OW 273
19048: PPUSH
19049: LD_VAR 0 3
19053: PPUSH
19054: LD_VAR 0 4
19058: PPUSH
19059: CALL_OW 298
19063: ST_TO_ADDR
// if temp_dist < dist_2 then
19064: LD_VAR 0 9
19068: PUSH
19069: LD_VAR 0 7
19073: LESS
19074: IFFALSE 19096
// begin dist_2 = temp_dist ;
19076: LD_ADDR_VAR 0 7
19080: PUSH
19081: LD_VAR 0 9
19085: ST_TO_ADDR
// dir = b ;
19086: LD_ADDR_VAR 0 10
19090: PUSH
19091: LD_VAR 0 8
19095: ST_TO_ADDR
// end ; end ;
19096: GO 19001
19098: POP
19099: POP
// result = dir ;
19100: LD_ADDR_VAR 0 5
19104: PUSH
19105: LD_VAR 0 10
19109: ST_TO_ADDR
// end ;
19110: LD_VAR 0 5
19114: RET
// export function AI_InvertDirection ( direction ) ; var dir ; begin
19115: LD_INT 0
19117: PPUSH
19118: PPUSH
// dir = direction - 3 ;
19119: LD_ADDR_VAR 0 3
19123: PUSH
19124: LD_VAR 0 1
19128: PUSH
19129: LD_INT 3
19131: MINUS
19132: ST_TO_ADDR
// if dir < 0 then
19133: LD_VAR 0 3
19137: PUSH
19138: LD_INT 0
19140: LESS
19141: IFFALSE 19157
// dir = dir + 6 ;
19143: LD_ADDR_VAR 0 3
19147: PUSH
19148: LD_VAR 0 3
19152: PUSH
19153: LD_INT 6
19155: PLUS
19156: ST_TO_ADDR
// result = dir ;
19157: LD_ADDR_VAR 0 2
19161: PUSH
19162: LD_VAR 0 3
19166: ST_TO_ADDR
// end ;
19167: LD_VAR 0 2
19171: RET
// export function BehindLine ( un , x , y , dir , dist ) ; var c ; begin
19172: LD_INT 0
19174: PPUSH
19175: PPUSH
// case dir of 0 :
19176: LD_VAR 0 4
19180: PUSH
19181: LD_INT 0
19183: DOUBLE
19184: EQUAL
19185: IFTRUE 19189
19187: GO 19284
19189: POP
// begin c = GetX ( un ) - x ;
19190: LD_ADDR_VAR 0 7
19194: PUSH
19195: LD_VAR 0 1
19199: PPUSH
19200: CALL_OW 250
19204: PUSH
19205: LD_VAR 0 2
19209: MINUS
19210: ST_TO_ADDR
// if c > 0 then
19211: LD_VAR 0 7
19215: PUSH
19216: LD_INT 0
19218: GREATER
19219: IFFALSE 19235
// c = c + 1 ;
19221: LD_ADDR_VAR 0 7
19225: PUSH
19226: LD_VAR 0 7
19230: PUSH
19231: LD_INT 1
19233: PLUS
19234: ST_TO_ADDR
// y = y + ( c div 2 ) ;
19235: LD_ADDR_VAR 0 3
19239: PUSH
19240: LD_VAR 0 3
19244: PUSH
19245: LD_VAR 0 7
19249: PUSH
19250: LD_INT 2
19252: DIV
19253: PLUS
19254: ST_TO_ADDR
// result := GetY ( un ) >= y + dist ;
19255: LD_ADDR_VAR 0 6
19259: PUSH
19260: LD_VAR 0 1
19264: PPUSH
19265: CALL_OW 251
19269: PUSH
19270: LD_VAR 0 3
19274: PUSH
19275: LD_VAR 0 5
19279: PLUS
19280: GREATEREQUAL
19281: ST_TO_ADDR
// end ; 1 :
19282: GO 19712
19284: LD_INT 1
19286: DOUBLE
19287: EQUAL
19288: IFTRUE 19292
19290: GO 19387
19292: POP
// begin c = GetY ( un ) - y ;
19293: LD_ADDR_VAR 0 7
19297: PUSH
19298: LD_VAR 0 1
19302: PPUSH
19303: CALL_OW 251
19307: PUSH
19308: LD_VAR 0 3
19312: MINUS
19313: ST_TO_ADDR
// if c < 0 then
19314: LD_VAR 0 7
19318: PUSH
19319: LD_INT 0
19321: LESS
19322: IFFALSE 19338
// c = c - 1 ;
19324: LD_ADDR_VAR 0 7
19328: PUSH
19329: LD_VAR 0 7
19333: PUSH
19334: LD_INT 1
19336: MINUS
19337: ST_TO_ADDR
// x = x + ( c div 2 ) ;
19338: LD_ADDR_VAR 0 2
19342: PUSH
19343: LD_VAR 0 2
19347: PUSH
19348: LD_VAR 0 7
19352: PUSH
19353: LD_INT 2
19355: DIV
19356: PLUS
19357: ST_TO_ADDR
// result := GetX ( un ) <= x - dist ;
19358: LD_ADDR_VAR 0 6
19362: PUSH
19363: LD_VAR 0 1
19367: PPUSH
19368: CALL_OW 250
19372: PUSH
19373: LD_VAR 0 2
19377: PUSH
19378: LD_VAR 0 5
19382: MINUS
19383: LESSEQUAL
19384: ST_TO_ADDR
// end ; 2 :
19385: GO 19712
19387: LD_INT 2
19389: DOUBLE
19390: EQUAL
19391: IFTRUE 19395
19393: GO 19446
19395: POP
// begin result := GetX ( un ) + GetY ( un ) <= x + y - 2 * dist ;
19396: LD_ADDR_VAR 0 6
19400: PUSH
19401: LD_VAR 0 1
19405: PPUSH
19406: CALL_OW 250
19410: PUSH
19411: LD_VAR 0 1
19415: PPUSH
19416: CALL_OW 251
19420: PLUS
19421: PUSH
19422: LD_VAR 0 2
19426: PUSH
19427: LD_VAR 0 3
19431: PLUS
19432: PUSH
19433: LD_INT 2
19435: PUSH
19436: LD_VAR 0 5
19440: MUL
19441: MINUS
19442: LESSEQUAL
19443: ST_TO_ADDR
// end ; 3 :
19444: GO 19712
19446: LD_INT 3
19448: DOUBLE
19449: EQUAL
19450: IFTRUE 19454
19452: GO 19549
19454: POP
// begin c = GetX ( un ) - x ;
19455: LD_ADDR_VAR 0 7
19459: PUSH
19460: LD_VAR 0 1
19464: PPUSH
19465: CALL_OW 250
19469: PUSH
19470: LD_VAR 0 2
19474: MINUS
19475: ST_TO_ADDR
// if c < 0 then
19476: LD_VAR 0 7
19480: PUSH
19481: LD_INT 0
19483: LESS
19484: IFFALSE 19500
// c = c - 1 ;
19486: LD_ADDR_VAR 0 7
19490: PUSH
19491: LD_VAR 0 7
19495: PUSH
19496: LD_INT 1
19498: MINUS
19499: ST_TO_ADDR
// y = y + ( c div 2 ) ;
19500: LD_ADDR_VAR 0 3
19504: PUSH
19505: LD_VAR 0 3
19509: PUSH
19510: LD_VAR 0 7
19514: PUSH
19515: LD_INT 2
19517: DIV
19518: PLUS
19519: ST_TO_ADDR
// result := GetY ( un ) <= y - dist ;
19520: LD_ADDR_VAR 0 6
19524: PUSH
19525: LD_VAR 0 1
19529: PPUSH
19530: CALL_OW 251
19534: PUSH
19535: LD_VAR 0 3
19539: PUSH
19540: LD_VAR 0 5
19544: MINUS
19545: LESSEQUAL
19546: ST_TO_ADDR
// end ; 4 :
19547: GO 19712
19549: LD_INT 4
19551: DOUBLE
19552: EQUAL
19553: IFTRUE 19557
19555: GO 19652
19557: POP
// begin c = GetY ( un ) - y ;
19558: LD_ADDR_VAR 0 7
19562: PUSH
19563: LD_VAR 0 1
19567: PPUSH
19568: CALL_OW 251
19572: PUSH
19573: LD_VAR 0 3
19577: MINUS
19578: ST_TO_ADDR
// if c > 0 then
19579: LD_VAR 0 7
19583: PUSH
19584: LD_INT 0
19586: GREATER
19587: IFFALSE 19603
// c = c + 1 ;
19589: LD_ADDR_VAR 0 7
19593: PUSH
19594: LD_VAR 0 7
19598: PUSH
19599: LD_INT 1
19601: PLUS
19602: ST_TO_ADDR
// x = x + ( c div 2 ) ;
19603: LD_ADDR_VAR 0 2
19607: PUSH
19608: LD_VAR 0 2
19612: PUSH
19613: LD_VAR 0 7
19617: PUSH
19618: LD_INT 2
19620: DIV
19621: PLUS
19622: ST_TO_ADDR
// result := GetX ( un ) >= x + dist ;
19623: LD_ADDR_VAR 0 6
19627: PUSH
19628: LD_VAR 0 1
19632: PPUSH
19633: CALL_OW 250
19637: PUSH
19638: LD_VAR 0 2
19642: PUSH
19643: LD_VAR 0 5
19647: PLUS
19648: GREATEREQUAL
19649: ST_TO_ADDR
// end ; 5 :
19650: GO 19712
19652: LD_INT 5
19654: DOUBLE
19655: EQUAL
19656: IFTRUE 19660
19658: GO 19711
19660: POP
// begin result := GetX ( un ) + GetY ( un ) >= x + y + 2 * dist ;
19661: LD_ADDR_VAR 0 6
19665: PUSH
19666: LD_VAR 0 1
19670: PPUSH
19671: CALL_OW 250
19675: PUSH
19676: LD_VAR 0 1
19680: PPUSH
19681: CALL_OW 251
19685: PLUS
19686: PUSH
19687: LD_VAR 0 2
19691: PUSH
19692: LD_VAR 0 3
19696: PLUS
19697: PUSH
19698: LD_INT 2
19700: PUSH
19701: LD_VAR 0 5
19705: MUL
19706: PLUS
19707: GREATEREQUAL
19708: ST_TO_ADDR
// end ; end ;
19709: GO 19712
19711: POP
// end ;
19712: LD_VAR 0 6
19716: RET
// export function GetHexesNearHex ( x , y , dist ) ; var d , list_coords , b ; begin
19717: LD_INT 0
19719: PPUSH
19720: PPUSH
19721: PPUSH
19722: PPUSH
// result = [ [ x , y ] ] ;
19723: LD_ADDR_VAR 0 4
19727: PUSH
19728: LD_VAR 0 1
19732: PUSH
19733: LD_VAR 0 2
19737: PUSH
19738: EMPTY
19739: LIST
19740: LIST
19741: PUSH
19742: EMPTY
19743: LIST
19744: ST_TO_ADDR
// for d = 1 to dist do
19745: LD_ADDR_VAR 0 5
19749: PUSH
19750: DOUBLE
19751: LD_INT 1
19753: DEC
19754: ST_TO_ADDR
19755: LD_VAR 0 3
19759: PUSH
19760: FOR_TO
19761: IFFALSE 20356
// begin list_coords = [ ] ;
19763: LD_ADDR_VAR 0 6
19767: PUSH
19768: EMPTY
19769: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x , y - d ] ) ;
19770: LD_ADDR_VAR 0 6
19774: PUSH
19775: LD_VAR 0 6
19779: PPUSH
19780: LD_INT 1
19782: PPUSH
19783: LD_VAR 0 1
19787: PUSH
19788: LD_VAR 0 2
19792: PUSH
19793: LD_VAR 0 5
19797: MINUS
19798: PUSH
19799: EMPTY
19800: LIST
19801: LIST
19802: PPUSH
19803: CALL_OW 2
19807: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d , y ] ) ;
19808: LD_ADDR_VAR 0 6
19812: PUSH
19813: LD_VAR 0 6
19817: PPUSH
19818: LD_INT 1
19820: PPUSH
19821: LD_VAR 0 1
19825: PUSH
19826: LD_VAR 0 5
19830: PLUS
19831: PUSH
19832: LD_VAR 0 2
19836: PUSH
19837: EMPTY
19838: LIST
19839: LIST
19840: PPUSH
19841: CALL_OW 2
19845: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d , y + d ] ) ;
19846: LD_ADDR_VAR 0 6
19850: PUSH
19851: LD_VAR 0 6
19855: PPUSH
19856: LD_INT 1
19858: PPUSH
19859: LD_VAR 0 1
19863: PUSH
19864: LD_VAR 0 5
19868: PLUS
19869: PUSH
19870: LD_VAR 0 2
19874: PUSH
19875: LD_VAR 0 5
19879: PLUS
19880: PUSH
19881: EMPTY
19882: LIST
19883: LIST
19884: PPUSH
19885: CALL_OW 2
19889: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x , y + d ] ) ;
19890: LD_ADDR_VAR 0 6
19894: PUSH
19895: LD_VAR 0 6
19899: PPUSH
19900: LD_INT 1
19902: PPUSH
19903: LD_VAR 0 1
19907: PUSH
19908: LD_VAR 0 2
19912: PUSH
19913: LD_VAR 0 5
19917: PLUS
19918: PUSH
19919: EMPTY
19920: LIST
19921: LIST
19922: PPUSH
19923: CALL_OW 2
19927: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d , y ] ) ;
19928: LD_ADDR_VAR 0 6
19932: PUSH
19933: LD_VAR 0 6
19937: PPUSH
19938: LD_INT 1
19940: PPUSH
19941: LD_VAR 0 1
19945: PUSH
19946: LD_VAR 0 5
19950: MINUS
19951: PUSH
19952: LD_VAR 0 2
19956: PUSH
19957: EMPTY
19958: LIST
19959: LIST
19960: PPUSH
19961: CALL_OW 2
19965: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d , y - d ] ) ;
19966: LD_ADDR_VAR 0 6
19970: PUSH
19971: LD_VAR 0 6
19975: PPUSH
19976: LD_INT 1
19978: PPUSH
19979: LD_VAR 0 1
19983: PUSH
19984: LD_VAR 0 5
19988: MINUS
19989: PUSH
19990: LD_VAR 0 2
19994: PUSH
19995: LD_VAR 0 5
19999: MINUS
20000: PUSH
20001: EMPTY
20002: LIST
20003: LIST
20004: PPUSH
20005: CALL_OW 2
20009: ST_TO_ADDR
// b = 1 ;
20010: LD_ADDR_VAR 0 7
20014: PUSH
20015: LD_INT 1
20017: ST_TO_ADDR
// while b <= ( d - 1 ) do
20018: LD_VAR 0 7
20022: PUSH
20023: LD_VAR 0 5
20027: PUSH
20028: LD_INT 1
20030: MINUS
20031: LESSEQUAL
20032: IFFALSE 20338
// begin list_coords = Insert ( list_coords , 1 , [ x + b , y - d + b ] ) ;
20034: LD_ADDR_VAR 0 6
20038: PUSH
20039: LD_VAR 0 6
20043: PPUSH
20044: LD_INT 1
20046: PPUSH
20047: LD_VAR 0 1
20051: PUSH
20052: LD_VAR 0 7
20056: PLUS
20057: PUSH
20058: LD_VAR 0 2
20062: PUSH
20063: LD_VAR 0 5
20067: MINUS
20068: PUSH
20069: LD_VAR 0 7
20073: PLUS
20074: PUSH
20075: EMPTY
20076: LIST
20077: LIST
20078: PPUSH
20079: CALL_OW 2
20083: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d , y + b ] ) ;
20084: LD_ADDR_VAR 0 6
20088: PUSH
20089: LD_VAR 0 6
20093: PPUSH
20094: LD_INT 1
20096: PPUSH
20097: LD_VAR 0 1
20101: PUSH
20102: LD_VAR 0 5
20106: PLUS
20107: PUSH
20108: LD_VAR 0 2
20112: PUSH
20113: LD_VAR 0 7
20117: PLUS
20118: PUSH
20119: EMPTY
20120: LIST
20121: LIST
20122: PPUSH
20123: CALL_OW 2
20127: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d - b , y + d ] ) ;
20128: LD_ADDR_VAR 0 6
20132: PUSH
20133: LD_VAR 0 6
20137: PPUSH
20138: LD_INT 1
20140: PPUSH
20141: LD_VAR 0 1
20145: PUSH
20146: LD_VAR 0 5
20150: PLUS
20151: PUSH
20152: LD_VAR 0 7
20156: MINUS
20157: PUSH
20158: LD_VAR 0 2
20162: PUSH
20163: LD_VAR 0 5
20167: PLUS
20168: PUSH
20169: EMPTY
20170: LIST
20171: LIST
20172: PPUSH
20173: CALL_OW 2
20177: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - b , y + d - b ] ) ;
20178: LD_ADDR_VAR 0 6
20182: PUSH
20183: LD_VAR 0 6
20187: PPUSH
20188: LD_INT 1
20190: PPUSH
20191: LD_VAR 0 1
20195: PUSH
20196: LD_VAR 0 7
20200: MINUS
20201: PUSH
20202: LD_VAR 0 2
20206: PUSH
20207: LD_VAR 0 5
20211: PLUS
20212: PUSH
20213: LD_VAR 0 7
20217: MINUS
20218: PUSH
20219: EMPTY
20220: LIST
20221: LIST
20222: PPUSH
20223: CALL_OW 2
20227: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d , y - b ] ) ;
20228: LD_ADDR_VAR 0 6
20232: PUSH
20233: LD_VAR 0 6
20237: PPUSH
20238: LD_INT 1
20240: PPUSH
20241: LD_VAR 0 1
20245: PUSH
20246: LD_VAR 0 5
20250: MINUS
20251: PUSH
20252: LD_VAR 0 2
20256: PUSH
20257: LD_VAR 0 7
20261: MINUS
20262: PUSH
20263: EMPTY
20264: LIST
20265: LIST
20266: PPUSH
20267: CALL_OW 2
20271: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d + b , y - d ] ) ;
20272: LD_ADDR_VAR 0 6
20276: PUSH
20277: LD_VAR 0 6
20281: PPUSH
20282: LD_INT 1
20284: PPUSH
20285: LD_VAR 0 1
20289: PUSH
20290: LD_VAR 0 5
20294: MINUS
20295: PUSH
20296: LD_VAR 0 7
20300: PLUS
20301: PUSH
20302: LD_VAR 0 2
20306: PUSH
20307: LD_VAR 0 5
20311: MINUS
20312: PUSH
20313: EMPTY
20314: LIST
20315: LIST
20316: PPUSH
20317: CALL_OW 2
20321: ST_TO_ADDR
// b = b + 1 ;
20322: LD_ADDR_VAR 0 7
20326: PUSH
20327: LD_VAR 0 7
20331: PUSH
20332: LD_INT 1
20334: PLUS
20335: ST_TO_ADDR
// end ;
20336: GO 20018
// result = result ^ list_coords ;
20338: LD_ADDR_VAR 0 4
20342: PUSH
20343: LD_VAR 0 4
20347: PUSH
20348: LD_VAR 0 6
20352: ADD
20353: ST_TO_ADDR
// end ;
20354: GO 19760
20356: POP
20357: POP
// end ;
20358: LD_VAR 0 4
20362: RET
// export function RoundDouble ( d ) ; begin
20363: LD_INT 0
20365: PPUSH
// result = d div 1 ;
20366: LD_ADDR_VAR 0 2
20370: PUSH
20371: LD_VAR 0 1
20375: PUSH
20376: LD_INT 1
20378: DIV
20379: ST_TO_ADDR
// if d mod 1 >= 0.5 then
20380: LD_VAR 0 1
20384: PUSH
20385: LD_INT 1
20387: MOD
20388: PUSH
20389: LD_REAL  5.00000000000000E-0001
20392: GREATEREQUAL
20393: IFFALSE 20409
// result = result + 1 ;
20395: LD_ADDR_VAR 0 2
20399: PUSH
20400: LD_VAR 0 2
20404: PUSH
20405: LD_INT 1
20407: PLUS
20408: ST_TO_ADDR
// end ;
20409: LD_VAR 0 2
20413: RET
// export function Check2DArraysEqual ( list1 , list2 ) ; var a , b ; begin
20414: LD_INT 0
20416: PPUSH
20417: PPUSH
20418: PPUSH
// result = true ;
20419: LD_ADDR_VAR 0 3
20423: PUSH
20424: LD_INT 1
20426: ST_TO_ADDR
// if list1 + 0 <> list2 + 0 then
20427: LD_VAR 0 1
20431: PUSH
20432: LD_INT 0
20434: PLUS
20435: PUSH
20436: LD_VAR 0 2
20440: PUSH
20441: LD_INT 0
20443: PLUS
20444: NONEQUAL
20445: IFFALSE 20457
// begin result = false ;
20447: LD_ADDR_VAR 0 3
20451: PUSH
20452: LD_INT 0
20454: ST_TO_ADDR
// exit ;
20455: GO 20602
// end ; for a = 1 to list1 do
20457: LD_ADDR_VAR 0 4
20461: PUSH
20462: DOUBLE
20463: LD_INT 1
20465: DEC
20466: ST_TO_ADDR
20467: LD_VAR 0 1
20471: PUSH
20472: FOR_TO
20473: IFFALSE 20600
// begin if list1 [ a ] + 0 <> list2 [ a ] + 0 then
20475: LD_VAR 0 1
20479: PUSH
20480: LD_VAR 0 4
20484: ARRAY
20485: PUSH
20486: LD_INT 0
20488: PLUS
20489: PUSH
20490: LD_VAR 0 2
20494: PUSH
20495: LD_VAR 0 4
20499: ARRAY
20500: PUSH
20501: LD_INT 0
20503: PLUS
20504: NONEQUAL
20505: IFFALSE 20519
// begin result = false ;
20507: LD_ADDR_VAR 0 3
20511: PUSH
20512: LD_INT 0
20514: ST_TO_ADDR
// exit ;
20515: POP
20516: POP
20517: GO 20602
// end ; for b = 1 to list1 [ a ] do
20519: LD_ADDR_VAR 0 5
20523: PUSH
20524: DOUBLE
20525: LD_INT 1
20527: DEC
20528: ST_TO_ADDR
20529: LD_VAR 0 1
20533: PUSH
20534: LD_VAR 0 4
20538: ARRAY
20539: PUSH
20540: FOR_TO
20541: IFFALSE 20596
// if not list1 [ a ] [ b ] = list2 [ a ] [ b ] then
20543: LD_VAR 0 1
20547: PUSH
20548: LD_VAR 0 4
20552: ARRAY
20553: PUSH
20554: LD_VAR 0 5
20558: ARRAY
20559: PUSH
20560: LD_VAR 0 2
20564: PUSH
20565: LD_VAR 0 4
20569: ARRAY
20570: PUSH
20571: LD_VAR 0 5
20575: ARRAY
20576: EQUAL
20577: NOT
20578: IFFALSE 20594
// begin result = false ;
20580: LD_ADDR_VAR 0 3
20584: PUSH
20585: LD_INT 0
20587: ST_TO_ADDR
// exit ;
20588: POP
20589: POP
20590: POP
20591: POP
20592: GO 20602
// end ;
20594: GO 20540
20596: POP
20597: POP
// end ;
20598: GO 20472
20600: POP
20601: POP
// end ; end_of_file
20602: LD_VAR 0 3
20606: RET
// every 0 0$1.5 do var i , base , val ;
20607: GO 20609
20609: DISABLE
20610: LD_INT 0
20612: PPUSH
20613: PPUSH
20614: PPUSH
// begin for i = 1 to ai_depot do
20615: LD_ADDR_VAR 0 1
20619: PUSH
20620: DOUBLE
20621: LD_INT 1
20623: DEC
20624: ST_TO_ADDR
20625: LD_EXP 49
20629: PUSH
20630: FOR_TO
20631: IFFALSE 20877
// if IsOk ( ai_depot [ i ] ) and GetSide ( ai_depot [ i ] ) <> you then
20633: LD_EXP 49
20637: PUSH
20638: LD_VAR 0 1
20642: ARRAY
20643: PPUSH
20644: CALL_OW 302
20648: PUSH
20649: LD_EXP 49
20653: PUSH
20654: LD_VAR 0 1
20658: ARRAY
20659: PPUSH
20660: CALL_OW 255
20664: PUSH
20665: LD_EXP 2
20669: NONEQUAL
20670: AND
20671: IFFALSE 20875
// begin base = GetBase ( ai_depot [ i ] ) ;
20673: LD_ADDR_VAR 0 2
20677: PUSH
20678: LD_EXP 49
20682: PUSH
20683: LD_VAR 0 1
20687: ARRAY
20688: PPUSH
20689: CALL_OW 274
20693: ST_TO_ADDR
// if i = 2 and alli_sib_needed > 0 then
20694: LD_VAR 0 1
20698: PUSH
20699: LD_INT 2
20701: EQUAL
20702: PUSH
20703: LD_EXP 134
20707: PUSH
20708: LD_INT 0
20710: GREATER
20711: AND
20712: IFFALSE 20830
// begin val = GetResourceType ( base , mat_siberit ) + alli_sib_usage - 500 ;
20714: LD_ADDR_VAR 0 3
20718: PUSH
20719: LD_VAR 0 2
20723: PPUSH
20724: LD_INT 3
20726: PPUSH
20727: CALL_OW 275
20731: PUSH
20732: LD_EXP 135
20736: PLUS
20737: PUSH
20738: LD_INT 500
20740: MINUS
20741: ST_TO_ADDR
// if val > 0 then
20742: LD_VAR 0 3
20746: PUSH
20747: LD_INT 0
20749: GREATER
20750: IFFALSE 20768
// alli_sib_needed = alli_sib_needed - val ;
20752: LD_ADDR_EXP 134
20756: PUSH
20757: LD_EXP 134
20761: PUSH
20762: LD_VAR 0 3
20766: MINUS
20767: ST_TO_ADDR
// alli_sib_usage = 0 ;
20768: LD_ADDR_EXP 135
20772: PUSH
20773: LD_INT 0
20775: ST_TO_ADDR
// if alli_sib_needed < 0 then
20776: LD_EXP 134
20780: PUSH
20781: LD_INT 0
20783: LESS
20784: IFFALSE 20794
// alli_sib_needed = 0 ;
20786: LD_ADDR_EXP 134
20790: PUSH
20791: LD_INT 0
20793: ST_TO_ADDR
// if alli_sib_needed > 0 then
20794: LD_EXP 134
20798: PUSH
20799: LD_INT 0
20801: GREATER
20802: IFFALSE 20823
// display_strings = [ #Ar15a-AlliSibGather , alli_sib_needed ] else
20804: LD_ADDR_OWVAR 47
20808: PUSH
20809: LD_STRING #Ar15a-AlliSibGather
20811: PUSH
20812: LD_EXP 134
20816: PUSH
20817: EMPTY
20818: LIST
20819: LIST
20820: ST_TO_ADDR
20821: GO 20830
// display_strings = [ ] ;
20823: LD_ADDR_OWVAR 47
20827: PUSH
20828: EMPTY
20829: ST_TO_ADDR
// end ; SetResourceType ( base , mat_cans , 500 ) ;
20830: LD_VAR 0 2
20834: PPUSH
20835: LD_INT 1
20837: PPUSH
20838: LD_INT 500
20840: PPUSH
20841: CALL_OW 277
// SetResourceType ( base , mat_oil , 500 ) ;
20845: LD_VAR 0 2
20849: PPUSH
20850: LD_INT 2
20852: PPUSH
20853: LD_INT 500
20855: PPUSH
20856: CALL_OW 277
// SetResourceType ( base , mat_siberit , 500 ) ;
20860: LD_VAR 0 2
20864: PPUSH
20865: LD_INT 3
20867: PPUSH
20868: LD_INT 500
20870: PPUSH
20871: CALL_OW 277
// end ;
20875: GO 20630
20877: POP
20878: POP
// enable ;
20879: ENABLE
// end ;
20880: PPOPN 3
20882: END
// on UnitGoesToRed ( un ) do var base ;
20883: LD_INT 0
20885: PPUSH
// begin if un = Powell and not Powell in last_dialogue_leaders then
20886: LD_VAR 0 1
20890: PUSH
20891: LD_EXP 31
20895: EQUAL
20896: PUSH
20897: LD_EXP 31
20901: PUSH
20902: LD_EXP 140
20906: IN
20907: NOT
20908: AND
20909: IFFALSE 20947
// begin last_dialogue_leaders = last_dialogue_leaders ^ Powell ;
20911: LD_ADDR_EXP 140
20915: PUSH
20916: LD_EXP 140
20920: PUSH
20921: LD_EXP 31
20925: ADD
20926: ST_TO_ADDR
// DialogueOn ;
20927: CALL_OW 6
// ForceSay ( Powell , D21-Po-1 ) ;
20931: LD_EXP 31
20935: PPUSH
20936: LD_STRING D21-Po-1
20938: PPUSH
20939: CALL_OW 91
// DialogueOff ;
20943: CALL_OW 7
// end ; if un = Platonov and not Platonov in last_dialogue_leaders then
20947: LD_VAR 0 1
20951: PUSH
20952: LD_EXP 25
20956: EQUAL
20957: PUSH
20958: LD_EXP 25
20962: PUSH
20963: LD_EXP 140
20967: IN
20968: NOT
20969: AND
20970: IFFALSE 21008
// begin last_dialogue_leaders = last_dialogue_leaders ^ Platonov ;
20972: LD_ADDR_EXP 140
20976: PUSH
20977: LD_EXP 140
20981: PUSH
20982: LD_EXP 25
20986: ADD
20987: ST_TO_ADDR
// DialogueOn ;
20988: CALL_OW 6
// ForceSay ( Platonov , D21-Pla-1 ) ;
20992: LD_EXP 25
20996: PPUSH
20997: LD_STRING D21-Pla-1
20999: PPUSH
21000: CALL_OW 91
// DialogueOff ;
21004: CALL_OW 7
// end ; if un = Omar and not Omar in last_dialogue_leaders then
21008: LD_VAR 0 1
21012: PUSH
21013: LD_EXP 29
21017: EQUAL
21018: PUSH
21019: LD_EXP 29
21023: PUSH
21024: LD_EXP 140
21028: IN
21029: NOT
21030: AND
21031: IFFALSE 21069
// begin last_dialogue_leaders = last_dialogue_leaders ^ Omar ;
21033: LD_ADDR_EXP 140
21037: PUSH
21038: LD_EXP 140
21042: PUSH
21043: LD_EXP 29
21047: ADD
21048: ST_TO_ADDR
// DialogueOn ;
21049: CALL_OW 6
// ForceSay ( Omar , D21-Om-1 ) ;
21053: LD_EXP 29
21057: PPUSH
21058: LD_STRING D21-Om-1
21060: PPUSH
21061: CALL_OW 91
// DialogueOff ;
21065: CALL_OW 7
// end ; if un = Joan and not Joan in last_dialogue_leaders then
21069: LD_VAR 0 1
21073: PUSH
21074: LD_EXP 28
21078: EQUAL
21079: PUSH
21080: LD_EXP 28
21084: PUSH
21085: LD_EXP 140
21089: IN
21090: NOT
21091: AND
21092: IFFALSE 21130
// begin last_dialogue_leaders = last_dialogue_leaders ^ Joan ;
21094: LD_ADDR_EXP 140
21098: PUSH
21099: LD_EXP 140
21103: PUSH
21104: LD_EXP 28
21108: ADD
21109: ST_TO_ADDR
// DialogueOn ;
21110: CALL_OW 6
// ForceSay ( Joan , D21-Jo-1 ) ;
21114: LD_EXP 28
21118: PPUSH
21119: LD_STRING D21-Jo-1
21121: PPUSH
21122: CALL_OW 91
// DialogueOff ;
21126: CALL_OW 7
// end ; if GetSide ( un ) = you then
21130: LD_VAR 0 1
21134: PPUSH
21135: CALL_OW 255
21139: PUSH
21140: LD_EXP 2
21144: EQUAL
21145: IFFALSE 21149
// exit ;
21147: GO 21441
// base = FindBase ( un ) ;
21149: LD_ADDR_VAR 0 2
21153: PUSH
21154: LD_VAR 0 1
21158: PPUSH
21159: CALL 25073 0 1
21163: ST_TO_ADDR
// if base = 0 then
21164: LD_VAR 0 2
21168: PUSH
21169: LD_INT 0
21171: EQUAL
21172: IFFALSE 21176
// exit ;
21174: GO 21441
// if un = ai_teleporter [ base ] then
21176: LD_VAR 0 1
21180: PUSH
21181: LD_EXP 60
21185: PUSH
21186: LD_VAR 0 2
21190: ARRAY
21191: EQUAL
21192: IFFALSE 21217
// ai_teleporter_exit_placed = Replace ( ai_teleporter_exit_placed , base , false ) ;
21194: LD_ADDR_EXP 96
21198: PUSH
21199: LD_EXP 96
21203: PPUSH
21204: LD_VAR 0 2
21208: PPUSH
21209: LD_INT 0
21211: PPUSH
21212: CALL_OW 1
21216: ST_TO_ADDR
// if GetType ( un ) = unit_building then
21217: LD_VAR 0 1
21221: PPUSH
21222: CALL_OW 247
21226: PUSH
21227: LD_INT 3
21229: EQUAL
21230: IFFALSE 21376
// if GetBType ( un ) in [ b_depot , b_warehouse ] then
21232: LD_VAR 0 1
21236: PPUSH
21237: CALL_OW 266
21241: PUSH
21242: LD_INT 0
21244: PUSH
21245: LD_INT 1
21247: PUSH
21248: EMPTY
21249: LIST
21250: LIST
21251: IN
21252: IFFALSE 21376
// begin SetResourceType ( GetBase ( un ) , mat_cans , [ 100 , 50 , 0 ] [ difficulty ] + Rand ( 0 , 3 ) * 10 ) ;
21254: LD_VAR 0 1
21258: PPUSH
21259: CALL_OW 274
21263: PPUSH
21264: LD_INT 1
21266: PPUSH
21267: LD_INT 100
21269: PUSH
21270: LD_INT 50
21272: PUSH
21273: LD_INT 0
21275: PUSH
21276: EMPTY
21277: LIST
21278: LIST
21279: LIST
21280: PUSH
21281: LD_OWVAR 67
21285: ARRAY
21286: PUSH
21287: LD_INT 0
21289: PPUSH
21290: LD_INT 3
21292: PPUSH
21293: CALL_OW 12
21297: PUSH
21298: LD_INT 10
21300: MUL
21301: PLUS
21302: PPUSH
21303: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_oil , [ 200 , 150 , 100 ] [ difficulty ] + Rand ( 0 , 100 ) ) ;
21307: LD_VAR 0 1
21311: PPUSH
21312: CALL_OW 274
21316: PPUSH
21317: LD_INT 2
21319: PPUSH
21320: LD_INT 200
21322: PUSH
21323: LD_INT 150
21325: PUSH
21326: LD_INT 100
21328: PUSH
21329: EMPTY
21330: LIST
21331: LIST
21332: LIST
21333: PUSH
21334: LD_OWVAR 67
21338: ARRAY
21339: PUSH
21340: LD_INT 0
21342: PPUSH
21343: LD_INT 100
21345: PPUSH
21346: CALL_OW 12
21350: PLUS
21351: PPUSH
21352: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_siberit , 0 ) ;
21356: LD_VAR 0 1
21360: PPUSH
21361: CALL_OW 274
21365: PPUSH
21366: LD_INT 3
21368: PPUSH
21369: LD_INT 0
21371: PPUSH
21372: CALL_OW 277
// end ; if base = 2 and GetType ( un ) in [ unit_human , unit_building ] and SideShoot ( un ) = you then
21376: LD_VAR 0 2
21380: PUSH
21381: LD_INT 2
21383: EQUAL
21384: PUSH
21385: LD_VAR 0 1
21389: PPUSH
21390: CALL_OW 247
21394: PUSH
21395: LD_INT 1
21397: PUSH
21398: LD_INT 3
21400: PUSH
21401: EMPTY
21402: LIST
21403: LIST
21404: IN
21405: AND
21406: PUSH
21407: LD_VAR 0 1
21411: PPUSH
21412: CALL_OW 503
21416: PUSH
21417: LD_EXP 2
21421: EQUAL
21422: AND
21423: IFFALSE 21441
// player_alliance_uns_red = player_alliance_uns_red union un ;
21425: LD_ADDR_EXP 144
21429: PUSH
21430: LD_EXP 144
21434: PUSH
21435: LD_VAR 0 1
21439: UNION
21440: ST_TO_ADDR
// end ;
21441: PPOPN 2
21443: END
// every 0 0$1 do var i ;
21444: GO 21446
21446: DISABLE
21447: LD_INT 0
21449: PPUSH
// begin for i in player_alliance_uns_red do
21450: LD_ADDR_VAR 0 1
21454: PUSH
21455: LD_EXP 144
21459: PUSH
21460: FOR_IN
21461: IFFALSE 21496
// if GetLives ( i ) > 250 then
21463: LD_VAR 0 1
21467: PPUSH
21468: CALL_OW 256
21472: PUSH
21473: LD_INT 250
21475: GREATER
21476: IFFALSE 21494
// player_alliance_uns_red = player_alliance_uns_red diff i ;
21478: LD_ADDR_EXP 144
21482: PUSH
21483: LD_EXP 144
21487: PUSH
21488: LD_VAR 0 1
21492: DIFF
21493: ST_TO_ADDR
21494: GO 21460
21496: POP
21497: POP
// enable ;
21498: ENABLE
// end ;
21499: PPOPN 1
21501: END
// on UnitDestroyed ( un ) do var side , temp_list , base , temp_value , i ;
21502: LD_INT 0
21504: PPUSH
21505: PPUSH
21506: PPUSH
21507: PPUSH
21508: PPUSH
// begin if un = Heike then
21509: LD_VAR 0 1
21513: PUSH
21514: LD_EXP 10
21518: EQUAL
21519: IFFALSE 21543
// begin ExclusiveOn ;
21521: CALL_OW 4
// Wait ( 0 0$1 ) ;
21525: LD_INT 35
21527: PPUSH
21528: CALL_OW 67
// YouLost ( HeikeDead ) ;
21532: LD_STRING HeikeDead
21534: PPUSH
21535: CALL_OW 104
// ExclusiveOff ;
21539: CALL_OW 5
// end ; if un = player_sib_bomb_prod_fact then
21543: LD_VAR 0 1
21547: PUSH
21548: LD_EXP 136
21552: EQUAL
21553: IFFALSE 21563
// player_sib_bomb_prod_fact = 0 ;
21555: LD_ADDR_EXP 136
21559: PUSH
21560: LD_INT 0
21562: ST_TO_ADDR
// if un = player_sib_bomb_res_lab then
21563: LD_VAR 0 1
21567: PUSH
21568: LD_EXP 137
21572: EQUAL
21573: IFFALSE 21583
// player_sib_bomb_res_lab = 0 ;
21575: LD_ADDR_EXP 137
21579: PUSH
21580: LD_INT 0
21582: ST_TO_ADDR
// if un in player_alliance_uns_red then
21583: LD_VAR 0 1
21587: PUSH
21588: LD_EXP 144
21592: IN
21593: IFFALSE 21704
// begin if GetType ( un ) = unit_human then
21595: LD_VAR 0 1
21599: PPUSH
21600: CALL_OW 247
21604: PUSH
21605: LD_INT 1
21607: EQUAL
21608: IFFALSE 21650
// player_alliance_uns_destroy = Replace ( player_alliance_uns_destroy , 1 , player_alliance_uns_destroy [ 1 ] ^ GetClass ( un ) ) else
21610: LD_ADDR_EXP 145
21614: PUSH
21615: LD_EXP 145
21619: PPUSH
21620: LD_INT 1
21622: PPUSH
21623: LD_EXP 145
21627: PUSH
21628: LD_INT 1
21630: ARRAY
21631: PUSH
21632: LD_VAR 0 1
21636: PPUSH
21637: CALL_OW 257
21641: ADD
21642: PPUSH
21643: CALL_OW 1
21647: ST_TO_ADDR
21648: GO 21688
// player_alliance_uns_destroy = Replace ( player_alliance_uns_destroy , 2 , player_alliance_uns_destroy [ 2 ] ^ GetBType ( un ) ) ;
21650: LD_ADDR_EXP 145
21654: PUSH
21655: LD_EXP 145
21659: PPUSH
21660: LD_INT 2
21662: PPUSH
21663: LD_EXP 145
21667: PUSH
21668: LD_INT 2
21670: ARRAY
21671: PUSH
21672: LD_VAR 0 1
21676: PPUSH
21677: CALL_OW 266
21681: ADD
21682: PPUSH
21683: CALL_OW 1
21687: ST_TO_ADDR
// player_alliance_uns_red = player_alliance_uns_red diff un ;
21688: LD_ADDR_EXP 144
21692: PUSH
21693: LD_EXP 144
21697: PUSH
21698: LD_VAR 0 1
21702: DIFF
21703: ST_TO_ADDR
// end ; for base in ai_bases do
21704: LD_ADDR_VAR 0 4
21708: PUSH
21709: LD_EXP 39
21713: PUSH
21714: FOR_IN
21715: IFFALSE 21766
// begin temp_list = ai_captured_buildings [ base ] diff un ;
21717: LD_ADDR_VAR 0 3
21721: PUSH
21722: LD_EXP 62
21726: PUSH
21727: LD_VAR 0 4
21731: ARRAY
21732: PUSH
21733: LD_VAR 0 1
21737: DIFF
21738: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
21739: LD_ADDR_EXP 62
21743: PUSH
21744: LD_EXP 62
21748: PPUSH
21749: LD_VAR 0 4
21753: PPUSH
21754: LD_VAR 0 3
21758: PPUSH
21759: CALL_OW 1
21763: ST_TO_ADDR
// end ;
21764: GO 21714
21766: POP
21767: POP
// side = GetSide ( un ) ;
21768: LD_ADDR_VAR 0 2
21772: PUSH
21773: LD_VAR 0 1
21777: PPUSH
21778: CALL_OW 255
21782: ST_TO_ADDR
// if side = you then
21783: LD_VAR 0 2
21787: PUSH
21788: LD_EXP 2
21792: EQUAL
21793: IFFALSE 21797
// exit ;
21795: GO 22208
// case GetType ( un ) of unit_human :
21797: LD_VAR 0 1
21801: PPUSH
21802: CALL_OW 247
21806: PUSH
21807: LD_INT 1
21809: DOUBLE
21810: EQUAL
21811: IFTRUE 21815
21813: GO 22123
21815: POP
// for base in ai_bases do
21816: LD_ADDR_VAR 0 4
21820: PUSH
21821: LD_EXP 39
21825: PUSH
21826: FOR_IN
21827: IFFALSE 22119
// begin if base = 2 and RemoveHumanFromVariables ( base , un , true ) and not am_going_to_destroy_alli and alliance_deal_status <> 2 and ( ai_sib_bomb_used_time_matrix [ base ] diff - 1 ) = 0 then
21829: LD_VAR 0 4
21833: PUSH
21834: LD_INT 2
21836: EQUAL
21837: PUSH
21838: LD_VAR 0 4
21842: PPUSH
21843: LD_VAR 0 1
21847: PPUSH
21848: LD_INT 1
21850: PPUSH
21851: CALL 23625 0 3
21855: AND
21856: PUSH
21857: LD_EXP 125
21861: NOT
21862: AND
21863: PUSH
21864: LD_EXP 131
21868: PUSH
21869: LD_INT 2
21871: NONEQUAL
21872: AND
21873: PUSH
21874: LD_EXP 115
21878: PUSH
21879: LD_VAR 0 4
21883: ARRAY
21884: PUSH
21885: LD_INT 1
21887: NEG
21888: DIFF
21889: PUSH
21890: LD_INT 0
21892: EQUAL
21893: AND
21894: IFFALSE 22117
// begin if SideShoot ( un ) <> you then
21896: LD_VAR 0 1
21900: PPUSH
21901: CALL_OW 503
21905: PUSH
21906: LD_EXP 2
21910: NONEQUAL
21911: IFFALSE 21930
// temp_value = GetClass ( un ) else
21913: LD_ADDR_VAR 0 5
21917: PUSH
21918: LD_VAR 0 1
21922: PPUSH
21923: CALL_OW 257
21927: ST_TO_ADDR
21928: GO 21938
// temp_value = 0 ;
21930: LD_ADDR_VAR 0 5
21934: PUSH
21935: LD_INT 0
21937: ST_TO_ADDR
// if temp_value > 0 then
21938: LD_VAR 0 5
21942: PUSH
21943: LD_INT 0
21945: GREATER
21946: IFFALSE 22117
// begin if temp_value in [ class_apeman_engineer , class_apeman_soldier ] then
21948: LD_VAR 0 5
21952: PUSH
21953: LD_INT 16
21955: PUSH
21956: LD_INT 15
21958: PUSH
21959: EMPTY
21960: LIST
21961: LIST
21962: IN
21963: IFFALSE 21990
// temp_list = CreateApemenWithClass ( 1 , temp_value , base ) else
21965: LD_ADDR_VAR 0 3
21969: PUSH
21970: LD_INT 1
21972: PPUSH
21973: LD_VAR 0 5
21977: PPUSH
21978: LD_VAR 0 4
21982: PPUSH
21983: CALL 13616 0 3
21987: ST_TO_ADDR
21988: GO 22060
// if temp_value in [ class_soldier , class_engineer , class_mechanic , class_scientistic , class_bazooker , class_sniper , class_mortar ] then
21990: LD_VAR 0 5
21994: PUSH
21995: LD_INT 1
21997: PUSH
21998: LD_INT 2
22000: PUSH
22001: LD_INT 3
22003: PUSH
22004: LD_INT 4
22006: PUSH
22007: LD_INT 9
22009: PUSH
22010: LD_INT 5
22012: PUSH
22013: LD_INT 8
22015: PUSH
22016: EMPTY
22017: LIST
22018: LIST
22019: LIST
22020: LIST
22021: LIST
22022: LIST
22023: LIST
22024: IN
22025: IFFALSE 22052
// temp_list = CreateUnitsWithClass ( 1 , temp_value , base ) else
22027: LD_ADDR_VAR 0 3
22031: PUSH
22032: LD_INT 1
22034: PPUSH
22035: LD_VAR 0 5
22039: PPUSH
22040: LD_VAR 0 4
22044: PPUSH
22045: CALL 13445 0 3
22049: ST_TO_ADDR
22050: GO 22060
// temp_list = 0 ;
22052: LD_ADDR_VAR 0 3
22056: PUSH
22057: LD_INT 0
22059: ST_TO_ADDR
// if temp_list > 0 then
22060: LD_VAR 0 3
22064: PUSH
22065: LD_INT 0
22067: GREATER
22068: IFFALSE 22117
// begin temp_list = ai_spawn_people [ base ] ^ temp_list ;
22070: LD_ADDR_VAR 0 3
22074: PUSH
22075: LD_EXP 66
22079: PUSH
22080: LD_VAR 0 4
22084: ARRAY
22085: PUSH
22086: LD_VAR 0 3
22090: ADD
22091: ST_TO_ADDR
// ai_spawn_people = Replace ( ai_spawn_people , base , temp_list ) ;
22092: LD_ADDR_EXP 66
22096: PUSH
22097: LD_EXP 66
22101: PPUSH
22102: LD_VAR 0 4
22106: PPUSH
22107: LD_VAR 0 3
22111: PPUSH
22112: CALL_OW 1
22116: ST_TO_ADDR
// end ; end ; end ; end ; unit_vehicle :
22117: GO 21826
22119: POP
22120: POP
22121: GO 22208
22123: LD_INT 2
22125: DOUBLE
22126: EQUAL
22127: IFTRUE 22131
22129: GO 22165
22131: POP
// for base in ai_bases do
22132: LD_ADDR_VAR 0 4
22136: PUSH
22137: LD_EXP 39
22141: PUSH
22142: FOR_IN
22143: IFFALSE 22161
// RemoveVehicleFromVariables ( base , un ) ; unit_building :
22145: LD_VAR 0 4
22149: PPUSH
22150: LD_VAR 0 1
22154: PPUSH
22155: CALL 22584 0 2
22159: GO 22142
22161: POP
22162: POP
22163: GO 22208
22165: LD_INT 3
22167: DOUBLE
22168: EQUAL
22169: IFTRUE 22173
22171: GO 22207
22173: POP
// for base in ai_bases do
22174: LD_ADDR_VAR 0 4
22178: PUSH
22179: LD_EXP 39
22183: PUSH
22184: FOR_IN
22185: IFFALSE 22203
// RemoveBuildingFromVariables ( base , un ) ; end ;
22187: LD_VAR 0 4
22191: PPUSH
22192: LD_VAR 0 1
22196: PPUSH
22197: CALL 22335 0 2
22201: GO 22184
22203: POP
22204: POP
22205: GO 22208
22207: POP
// end ;
22208: PPOPN 6
22210: END
// every 0 0$0.5 do var base , i ;
22211: GO 22213
22213: DISABLE
22214: LD_INT 0
22216: PPUSH
22217: PPUSH
// begin for base in ai_bases do
22218: LD_ADDR_VAR 0 1
22222: PUSH
22223: LD_EXP 39
22227: PUSH
22228: FOR_IN
22229: IFFALSE 22329
// begin for i in ai_implosion_vehicles [ base ] do
22231: LD_ADDR_VAR 0 2
22235: PUSH
22236: LD_EXP 101
22240: PUSH
22241: LD_VAR 0 1
22245: ARRAY
22246: PUSH
22247: FOR_IN
22248: IFFALSE 22277
// if IsDead ( i ) then
22250: LD_VAR 0 2
22254: PPUSH
22255: CALL_OW 301
22259: IFFALSE 22275
// RemoveVehicleFromVariables ( base , i ) ;
22261: LD_VAR 0 1
22265: PPUSH
22266: LD_VAR 0 2
22270: PPUSH
22271: CALL 22584 0 2
22275: GO 22247
22277: POP
22278: POP
// for i in ai_vehicles_attack [ base ] do
22279: LD_ADDR_VAR 0 2
22283: PUSH
22284: LD_EXP 68
22288: PUSH
22289: LD_VAR 0 1
22293: ARRAY
22294: PUSH
22295: FOR_IN
22296: IFFALSE 22325
// if IsDead ( i ) then
22298: LD_VAR 0 2
22302: PPUSH
22303: CALL_OW 301
22307: IFFALSE 22323
// RemoveVehicleFromVariables ( base , i ) ;
22309: LD_VAR 0 1
22313: PPUSH
22314: LD_VAR 0 2
22318: PPUSH
22319: CALL 22584 0 2
22323: GO 22295
22325: POP
22326: POP
// end ;
22327: GO 22228
22329: POP
22330: POP
// enable ;
22331: ENABLE
// end ;
22332: PPOPN 2
22334: END
// export function RemoveBuildingFromVariables ( base , building ) ; var temp_list ; begin
22335: LD_INT 0
22337: PPUSH
22338: PPUSH
// temp_list = ai_all_buildings [ base ] diff building ;
22339: LD_ADDR_VAR 0 4
22343: PUSH
22344: LD_EXP 76
22348: PUSH
22349: LD_VAR 0 1
22353: ARRAY
22354: PUSH
22355: LD_VAR 0 2
22359: DIFF
22360: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
22361: LD_ADDR_EXP 76
22365: PUSH
22366: LD_EXP 76
22370: PPUSH
22371: LD_VAR 0 1
22375: PPUSH
22376: LD_VAR 0 4
22380: PPUSH
22381: CALL_OW 1
22385: ST_TO_ADDR
// temp_list = ai_excepted_buildings [ base ] diff building ;
22386: LD_ADDR_VAR 0 4
22390: PUSH
22391: LD_EXP 97
22395: PUSH
22396: LD_VAR 0 1
22400: ARRAY
22401: PUSH
22402: LD_VAR 0 2
22406: DIFF
22407: ST_TO_ADDR
// ai_excepted_buildings = Replace ( ai_excepted_buildings , base , temp_list ) ;
22408: LD_ADDR_EXP 97
22412: PUSH
22413: LD_EXP 97
22417: PPUSH
22418: LD_VAR 0 1
22422: PPUSH
22423: LD_VAR 0 4
22427: PPUSH
22428: CALL_OW 1
22432: ST_TO_ADDR
// temp_list = ai_dismantle_these_buildings [ base ] diff building ;
22433: LD_ADDR_VAR 0 4
22437: PUSH
22438: LD_EXP 99
22442: PUSH
22443: LD_VAR 0 1
22447: ARRAY
22448: PUSH
22449: LD_VAR 0 2
22453: DIFF
22454: ST_TO_ADDR
// ai_dismantle_these_buildings = Replace ( ai_dismantle_these_buildings , base , temp_list ) ;
22455: LD_ADDR_EXP 99
22459: PUSH
22460: LD_EXP 99
22464: PPUSH
22465: LD_VAR 0 1
22469: PPUSH
22470: LD_VAR 0 4
22474: PPUSH
22475: CALL_OW 1
22479: ST_TO_ADDR
// if building = ai_building_under_construction [ base ] then
22480: LD_VAR 0 2
22484: PUSH
22485: LD_EXP 74
22489: PUSH
22490: LD_VAR 0 1
22494: ARRAY
22495: EQUAL
22496: IFFALSE 22521
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
22498: LD_ADDR_EXP 74
22502: PUSH
22503: LD_EXP 74
22507: PPUSH
22508: LD_VAR 0 1
22512: PPUSH
22513: LD_INT 0
22515: PPUSH
22516: CALL_OW 1
22520: ST_TO_ADDR
// if building = ai_sib_bomb_fact [ base ] then
22521: LD_VAR 0 2
22525: PUSH
22526: LD_EXP 63
22530: PUSH
22531: LD_VAR 0 1
22535: ARRAY
22536: EQUAL
22537: IFFALSE 22562
// ai_sib_bomb_fact = Replace ( ai_sib_bomb_fact , base , 0 ) ;
22539: LD_ADDR_EXP 63
22543: PUSH
22544: LD_EXP 63
22548: PPUSH
22549: LD_VAR 0 1
22553: PPUSH
22554: LD_INT 0
22556: PPUSH
22557: CALL_OW 1
22561: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , false ) ;
22562: LD_VAR 0 1
22566: PPUSH
22567: LD_VAR 0 2
22571: PPUSH
22572: LD_INT 0
22574: PPUSH
22575: CALL 7288 0 3
// end ;
22579: LD_VAR 0 3
22583: RET
// function RemoveVehicleFromVariables ( base , vehicle ) ; var temp_list ; begin
22584: LD_INT 0
22586: PPUSH
22587: PPUSH
// if vehicle in ai_vehicles_defend [ base ] then
22588: LD_VAR 0 2
22592: PUSH
22593: LD_EXP 67
22597: PUSH
22598: LD_VAR 0 1
22602: ARRAY
22603: IN
22604: IFFALSE 22653
// begin temp_list = ai_vehicles_defend [ base ] diff vehicle ;
22606: LD_ADDR_VAR 0 4
22610: PUSH
22611: LD_EXP 67
22615: PUSH
22616: LD_VAR 0 1
22620: ARRAY
22621: PUSH
22622: LD_VAR 0 2
22626: DIFF
22627: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
22628: LD_ADDR_EXP 67
22632: PUSH
22633: LD_EXP 67
22637: PPUSH
22638: LD_VAR 0 1
22642: PPUSH
22643: LD_VAR 0 4
22647: PPUSH
22648: CALL_OW 1
22652: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_attack [ base ] then
22653: LD_VAR 0 2
22657: PUSH
22658: LD_EXP 68
22662: PUSH
22663: LD_VAR 0 1
22667: ARRAY
22668: IN
22669: IFFALSE 22718
// begin temp_list = ai_vehicles_attack [ base ] diff vehicle ;
22671: LD_ADDR_VAR 0 4
22675: PUSH
22676: LD_EXP 68
22680: PUSH
22681: LD_VAR 0 1
22685: ARRAY
22686: PUSH
22687: LD_VAR 0 2
22691: DIFF
22692: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
22693: LD_ADDR_EXP 68
22697: PUSH
22698: LD_EXP 68
22702: PPUSH
22703: LD_VAR 0 1
22707: PPUSH
22708: LD_VAR 0 4
22712: PPUSH
22713: CALL_OW 1
22717: ST_TO_ADDR
// end ; if vehicle in ai_taufield_vehicles [ base ] then
22718: LD_VAR 0 2
22722: PUSH
22723: LD_EXP 100
22727: PUSH
22728: LD_VAR 0 1
22732: ARRAY
22733: IN
22734: IFFALSE 22783
// begin temp_list = ai_taufield_vehicles [ base ] diff vehicle ;
22736: LD_ADDR_VAR 0 4
22740: PUSH
22741: LD_EXP 100
22745: PUSH
22746: LD_VAR 0 1
22750: ARRAY
22751: PUSH
22752: LD_VAR 0 2
22756: DIFF
22757: ST_TO_ADDR
// ai_taufield_vehicles = Replace ( ai_taufield_vehicles , base , temp_list ) ;
22758: LD_ADDR_EXP 100
22762: PUSH
22763: LD_EXP 100
22767: PPUSH
22768: LD_VAR 0 1
22772: PPUSH
22773: LD_VAR 0 4
22777: PPUSH
22778: CALL_OW 1
22782: ST_TO_ADDR
// end ; if vehicle in ai_implosion_vehicles [ base ] then
22783: LD_VAR 0 2
22787: PUSH
22788: LD_EXP 101
22792: PUSH
22793: LD_VAR 0 1
22797: ARRAY
22798: IN
22799: IFFALSE 22848
// begin temp_list = ai_implosion_vehicles [ base ] diff vehicle ;
22801: LD_ADDR_VAR 0 4
22805: PUSH
22806: LD_EXP 101
22810: PUSH
22811: LD_VAR 0 1
22815: ARRAY
22816: PUSH
22817: LD_VAR 0 2
22821: DIFF
22822: ST_TO_ADDR
// ai_implosion_vehicles = Replace ( ai_implosion_vehicles , base , temp_list ) ;
22823: LD_ADDR_EXP 101
22827: PUSH
22828: LD_EXP 101
22832: PPUSH
22833: LD_VAR 0 1
22837: PPUSH
22838: LD_VAR 0 4
22842: PPUSH
22843: CALL_OW 1
22847: ST_TO_ADDR
// end ; if vehicle in ai_control_tower_vehicles [ base ] then
22848: LD_VAR 0 2
22852: PUSH
22853: LD_EXP 95
22857: PUSH
22858: LD_VAR 0 1
22862: ARRAY
22863: IN
22864: IFFALSE 22913
// begin temp_list = ai_control_tower_vehicles [ base ] diff vehicle ;
22866: LD_ADDR_VAR 0 4
22870: PUSH
22871: LD_EXP 95
22875: PUSH
22876: LD_VAR 0 1
22880: ARRAY
22881: PUSH
22882: LD_VAR 0 2
22886: DIFF
22887: ST_TO_ADDR
// ai_control_tower_vehicles = Replace ( ai_control_tower_vehicles , base , temp_list ) ;
22888: LD_ADDR_EXP 95
22892: PUSH
22893: LD_EXP 95
22897: PPUSH
22898: LD_VAR 0 1
22902: PPUSH
22903: LD_VAR 0 4
22907: PPUSH
22908: CALL_OW 1
22912: ST_TO_ADDR
// end ; if vehicle = ai_cargo_bay [ base ] then
22913: LD_VAR 0 2
22917: PUSH
22918: LD_EXP 85
22922: PUSH
22923: LD_VAR 0 1
22927: ARRAY
22928: EQUAL
22929: IFFALSE 22979
// begin ai_cargo_bay = Replace ( ai_cargo_bay , base , 0 ) ;
22931: LD_ADDR_EXP 85
22935: PUSH
22936: LD_EXP 85
22940: PPUSH
22941: LD_VAR 0 1
22945: PPUSH
22946: LD_INT 0
22948: PPUSH
22949: CALL_OW 1
22953: ST_TO_ADDR
// ai_cargo_bay_destroy_tick = Replace ( ai_cargo_bay_destroy_tick , base , tick ) ;
22954: LD_ADDR_EXP 87
22958: PUSH
22959: LD_EXP 87
22963: PPUSH
22964: LD_VAR 0 1
22968: PPUSH
22969: LD_OWVAR 1
22973: PPUSH
22974: CALL_OW 1
22978: ST_TO_ADDR
// end ; if vehicle = ai_crane [ base ] then
22979: LD_VAR 0 2
22983: PUSH
22984: LD_EXP 88
22988: PUSH
22989: LD_VAR 0 1
22993: ARRAY
22994: EQUAL
22995: IFFALSE 23132
// begin ai_crane = Replace ( ai_crane , base , 0 ) ;
22997: LD_ADDR_EXP 88
23001: PUSH
23002: LD_EXP 88
23006: PPUSH
23007: LD_VAR 0 1
23011: PPUSH
23012: LD_INT 0
23014: PPUSH
23015: CALL_OW 1
23019: ST_TO_ADDR
// ai_crane_destroy_tick = Replace ( ai_crane_destroy_tick , base , tick ) ;
23020: LD_ADDR_EXP 90
23024: PUSH
23025: LD_EXP 90
23029: PPUSH
23030: LD_VAR 0 1
23034: PPUSH
23035: LD_OWVAR 1
23039: PPUSH
23040: CALL_OW 1
23044: ST_TO_ADDR
// ai_crane_driver = Replace ( ai_crane_driver , base , 0 ) ;
23045: LD_ADDR_EXP 92
23049: PUSH
23050: LD_EXP 92
23054: PPUSH
23055: LD_VAR 0 1
23059: PPUSH
23060: LD_INT 0
23062: PPUSH
23063: CALL_OW 1
23067: ST_TO_ADDR
// ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , false ) ;
23068: LD_ADDR_EXP 91
23072: PUSH
23073: LD_EXP 91
23077: PPUSH
23078: LD_VAR 0 1
23082: PPUSH
23083: LD_INT 0
23085: PPUSH
23086: CALL_OW 1
23090: ST_TO_ADDR
// if vehicle = ai_building_constructor [ base ] then
23091: LD_VAR 0 2
23095: PUSH
23096: LD_EXP 77
23100: PUSH
23101: LD_VAR 0 1
23105: ARRAY
23106: EQUAL
23107: IFFALSE 23132
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
23109: LD_ADDR_EXP 77
23113: PUSH
23114: LD_EXP 77
23118: PPUSH
23119: LD_VAR 0 1
23123: PPUSH
23124: LD_INT 0
23126: PPUSH
23127: CALL_OW 1
23131: ST_TO_ADDR
// end ; if vehicle in ai_sib_bomb_vehicles [ base ] then
23132: LD_VAR 0 2
23136: PUSH
23137: LD_EXP 107
23141: PUSH
23142: LD_VAR 0 1
23146: ARRAY
23147: IN
23148: IFFALSE 23197
// begin temp_list = ai_sib_bomb_vehicles [ base ] diff vehicle ;
23150: LD_ADDR_VAR 0 4
23154: PUSH
23155: LD_EXP 107
23159: PUSH
23160: LD_VAR 0 1
23164: ARRAY
23165: PUSH
23166: LD_VAR 0 2
23170: DIFF
23171: ST_TO_ADDR
// ai_sib_bomb_vehicles = Replace ( ai_sib_bomb_vehicles , base , temp_list ) ;
23172: LD_ADDR_EXP 107
23176: PUSH
23177: LD_EXP 107
23181: PPUSH
23182: LD_VAR 0 1
23186: PPUSH
23187: LD_VAR 0 4
23191: PPUSH
23192: CALL_OW 1
23196: ST_TO_ADDR
// end ; if vehicle in ai_behemoths [ base ] then
23197: LD_VAR 0 2
23201: PUSH
23202: LD_EXP 103
23206: PUSH
23207: LD_VAR 0 1
23211: ARRAY
23212: IN
23213: IFFALSE 23262
// begin temp_list = ai_behemoths [ base ] diff vehicle ;
23215: LD_ADDR_VAR 0 4
23219: PUSH
23220: LD_EXP 103
23224: PUSH
23225: LD_VAR 0 1
23229: ARRAY
23230: PUSH
23231: LD_VAR 0 2
23235: DIFF
23236: ST_TO_ADDR
// ai_behemoths = Replace ( ai_behemoths , base , temp_list ) ;
23237: LD_ADDR_EXP 103
23241: PUSH
23242: LD_EXP 103
23246: PPUSH
23247: LD_VAR 0 1
23251: PPUSH
23252: LD_VAR 0 4
23256: PPUSH
23257: CALL_OW 1
23261: ST_TO_ADDR
// end ; if vehicle in ai_retreating_vehicles_defend [ base ] then
23262: LD_VAR 0 2
23266: PUSH
23267: LD_EXP 69
23271: PUSH
23272: LD_VAR 0 1
23276: ARRAY
23277: IN
23278: IFFALSE 23327
// begin temp_list = ai_retreating_vehicles_defend [ base ] diff vehicle ;
23280: LD_ADDR_VAR 0 4
23284: PUSH
23285: LD_EXP 69
23289: PUSH
23290: LD_VAR 0 1
23294: ARRAY
23295: PUSH
23296: LD_VAR 0 2
23300: DIFF
23301: ST_TO_ADDR
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
23302: LD_ADDR_EXP 69
23306: PUSH
23307: LD_EXP 69
23311: PPUSH
23312: LD_VAR 0 1
23316: PPUSH
23317: LD_VAR 0 4
23321: PPUSH
23322: CALL_OW 1
23326: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_being_repaired [ base ] then
23327: LD_VAR 0 2
23331: PUSH
23332: LD_EXP 70
23336: PUSH
23337: LD_VAR 0 1
23341: ARRAY
23342: IN
23343: IFFALSE 23392
// begin temp_list = ai_vehicles_being_repaired [ base ] diff vehicle ;
23345: LD_ADDR_VAR 0 4
23349: PUSH
23350: LD_EXP 70
23354: PUSH
23355: LD_VAR 0 1
23359: ARRAY
23360: PUSH
23361: LD_VAR 0 2
23365: DIFF
23366: ST_TO_ADDR
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
23367: LD_ADDR_EXP 70
23371: PUSH
23372: LD_EXP 70
23376: PPUSH
23377: LD_VAR 0 1
23381: PPUSH
23382: LD_VAR 0 4
23386: PPUSH
23387: CALL_OW 1
23391: ST_TO_ADDR
// end ; if vehicle in ai_refuel_vehicles_list [ base ] then
23392: LD_VAR 0 2
23396: PUSH
23397: LD_EXP 71
23401: PUSH
23402: LD_VAR 0 1
23406: ARRAY
23407: IN
23408: IFFALSE 23457
// begin temp_list = ai_refuel_vehicles_list [ base ] diff vehicle ;
23410: LD_ADDR_VAR 0 4
23414: PUSH
23415: LD_EXP 71
23419: PUSH
23420: LD_VAR 0 1
23424: ARRAY
23425: PUSH
23426: LD_VAR 0 2
23430: DIFF
23431: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
23432: LD_ADDR_EXP 71
23436: PUSH
23437: LD_EXP 71
23441: PPUSH
23442: LD_VAR 0 1
23446: PPUSH
23447: LD_VAR 0 4
23451: PPUSH
23452: CALL_OW 1
23456: ST_TO_ADDR
// end ; if vehicle = ai_vehicle_being_moved [ base ] then
23457: LD_VAR 0 2
23461: PUSH
23462: LD_EXP 78
23466: PUSH
23467: LD_VAR 0 1
23471: ARRAY
23472: EQUAL
23473: IFFALSE 23498
// ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
23475: LD_ADDR_EXP 78
23479: PUSH
23480: LD_EXP 78
23484: PPUSH
23485: LD_VAR 0 1
23489: PPUSH
23490: LD_INT 0
23492: PPUSH
23493: CALL_OW 1
23497: ST_TO_ADDR
// if vehicle in ai_vehicles_having_been_moved [ base ] then
23498: LD_VAR 0 2
23502: PUSH
23503: LD_EXP 79
23507: PUSH
23508: LD_VAR 0 1
23512: ARRAY
23513: IN
23514: IFFALSE 23563
// begin temp_list = ai_vehicles_having_been_moved [ base ] diff vehicle ;
23516: LD_ADDR_VAR 0 4
23520: PUSH
23521: LD_EXP 79
23525: PUSH
23526: LD_VAR 0 1
23530: ARRAY
23531: PUSH
23532: LD_VAR 0 2
23536: DIFF
23537: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , temp_list ) ;
23538: LD_ADDR_EXP 79
23542: PUSH
23543: LD_EXP 79
23547: PPUSH
23548: LD_VAR 0 1
23552: PPUSH
23553: LD_VAR 0 4
23557: PPUSH
23558: CALL_OW 1
23562: ST_TO_ADDR
// end ; if vehicle = ar_mast then
23563: LD_VAR 0 2
23567: PUSH
23568: LD_INT 276
23570: EQUAL
23571: IFFALSE 23620
// begin temp_list = ai_heal_these_humans [ base ] diff vehicle ;
23573: LD_ADDR_VAR 0 4
23577: PUSH
23578: LD_EXP 75
23582: PUSH
23583: LD_VAR 0 1
23587: ARRAY
23588: PUSH
23589: LD_VAR 0 2
23593: DIFF
23594: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
23595: LD_ADDR_EXP 75
23599: PUSH
23600: LD_EXP 75
23604: PPUSH
23605: LD_VAR 0 1
23609: PPUSH
23610: LD_VAR 0 4
23614: PPUSH
23615: CALL_OW 1
23619: ST_TO_ADDR
// end ; end ;
23620: LD_VAR 0 3
23624: RET
// export function RemoveHumanFromVariables ( base , human , check_if_base_is_dead ) ; var temp_list , i ; begin
23625: LD_INT 0
23627: PPUSH
23628: PPUSH
23629: PPUSH
// result = false ;
23630: LD_ADDR_VAR 0 4
23634: PUSH
23635: LD_INT 0
23637: ST_TO_ADDR
// if human in ai_soldiers [ base ] then
23638: LD_VAR 0 2
23642: PUSH
23643: LD_EXP 40
23647: PUSH
23648: LD_VAR 0 1
23652: ARRAY
23653: IN
23654: IFFALSE 23711
// begin temp_list = ai_soldiers [ base ] diff human ;
23656: LD_ADDR_VAR 0 5
23660: PUSH
23661: LD_EXP 40
23665: PUSH
23666: LD_VAR 0 1
23670: ARRAY
23671: PUSH
23672: LD_VAR 0 2
23676: DIFF
23677: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
23678: LD_ADDR_EXP 40
23682: PUSH
23683: LD_EXP 40
23687: PPUSH
23688: LD_VAR 0 1
23692: PPUSH
23693: LD_VAR 0 5
23697: PPUSH
23698: CALL_OW 1
23702: ST_TO_ADDR
// result = true ;
23703: LD_ADDR_VAR 0 4
23707: PUSH
23708: LD_INT 1
23710: ST_TO_ADDR
// end ; if human in ai_attacking_soldiers [ base ] then
23711: LD_VAR 0 2
23715: PUSH
23716: LD_EXP 41
23720: PUSH
23721: LD_VAR 0 1
23725: ARRAY
23726: IN
23727: IFFALSE 23784
// begin temp_list = ai_attacking_soldiers [ base ] diff human ;
23729: LD_ADDR_VAR 0 5
23733: PUSH
23734: LD_EXP 41
23738: PUSH
23739: LD_VAR 0 1
23743: ARRAY
23744: PUSH
23745: LD_VAR 0 2
23749: DIFF
23750: ST_TO_ADDR
// ai_attacking_soldiers = Replace ( ai_attacking_soldiers , base , temp_list ) ;
23751: LD_ADDR_EXP 41
23755: PUSH
23756: LD_EXP 41
23760: PPUSH
23761: LD_VAR 0 1
23765: PPUSH
23766: LD_VAR 0 5
23770: PPUSH
23771: CALL_OW 1
23775: ST_TO_ADDR
// result = true ;
23776: LD_ADDR_VAR 0 4
23780: PUSH
23781: LD_INT 1
23783: ST_TO_ADDR
// end ; if human in ai_engineers [ base ] then
23784: LD_VAR 0 2
23788: PUSH
23789: LD_EXP 42
23793: PUSH
23794: LD_VAR 0 1
23798: ARRAY
23799: IN
23800: IFFALSE 23857
// begin temp_list = ai_engineers [ base ] diff human ;
23802: LD_ADDR_VAR 0 5
23806: PUSH
23807: LD_EXP 42
23811: PUSH
23812: LD_VAR 0 1
23816: ARRAY
23817: PUSH
23818: LD_VAR 0 2
23822: DIFF
23823: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , base , temp_list ) ;
23824: LD_ADDR_EXP 42
23828: PUSH
23829: LD_EXP 42
23833: PPUSH
23834: LD_VAR 0 1
23838: PPUSH
23839: LD_VAR 0 5
23843: PPUSH
23844: CALL_OW 1
23848: ST_TO_ADDR
// result = true ;
23849: LD_ADDR_VAR 0 4
23853: PUSH
23854: LD_INT 1
23856: ST_TO_ADDR
// end ; if human in ai_apemen_engineers [ base ] then
23857: LD_VAR 0 2
23861: PUSH
23862: LD_EXP 47
23866: PUSH
23867: LD_VAR 0 1
23871: ARRAY
23872: IN
23873: IFFALSE 23930
// begin temp_list = ai_apemen_engineers [ base ] diff human ;
23875: LD_ADDR_VAR 0 5
23879: PUSH
23880: LD_EXP 47
23884: PUSH
23885: LD_VAR 0 1
23889: ARRAY
23890: PUSH
23891: LD_VAR 0 2
23895: DIFF
23896: ST_TO_ADDR
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , temp_list ) ;
23897: LD_ADDR_EXP 47
23901: PUSH
23902: LD_EXP 47
23906: PPUSH
23907: LD_VAR 0 1
23911: PPUSH
23912: LD_VAR 0 5
23916: PPUSH
23917: CALL_OW 1
23921: ST_TO_ADDR
// result = true ;
23922: LD_ADDR_VAR 0 4
23926: PUSH
23927: LD_INT 1
23929: ST_TO_ADDR
// end ; if human in ai_mechanics_defend [ base ] then
23930: LD_VAR 0 2
23934: PUSH
23935: LD_EXP 43
23939: PUSH
23940: LD_VAR 0 1
23944: ARRAY
23945: IN
23946: IFFALSE 24003
// begin temp_list = ai_mechanics_defend [ base ] diff human ;
23948: LD_ADDR_VAR 0 5
23952: PUSH
23953: LD_EXP 43
23957: PUSH
23958: LD_VAR 0 1
23962: ARRAY
23963: PUSH
23964: LD_VAR 0 2
23968: DIFF
23969: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , temp_list ) ;
23970: LD_ADDR_EXP 43
23974: PUSH
23975: LD_EXP 43
23979: PPUSH
23980: LD_VAR 0 1
23984: PPUSH
23985: LD_VAR 0 5
23989: PPUSH
23990: CALL_OW 1
23994: ST_TO_ADDR
// result = true ;
23995: LD_ADDR_VAR 0 4
23999: PUSH
24000: LD_INT 1
24002: ST_TO_ADDR
// end ; if human in ai_mechanics_attack [ base ] then
24003: LD_VAR 0 2
24007: PUSH
24008: LD_EXP 44
24012: PUSH
24013: LD_VAR 0 1
24017: ARRAY
24018: IN
24019: IFFALSE 24076
// begin temp_list = ai_mechanics_attack [ base ] diff human ;
24021: LD_ADDR_VAR 0 5
24025: PUSH
24026: LD_EXP 44
24030: PUSH
24031: LD_VAR 0 1
24035: ARRAY
24036: PUSH
24037: LD_VAR 0 2
24041: DIFF
24042: ST_TO_ADDR
// ai_mechanics_attack = Replace ( ai_mechanics_attack , base , temp_list ) ;
24043: LD_ADDR_EXP 44
24047: PUSH
24048: LD_EXP 44
24052: PPUSH
24053: LD_VAR 0 1
24057: PPUSH
24058: LD_VAR 0 5
24062: PPUSH
24063: CALL_OW 1
24067: ST_TO_ADDR
// result = true ;
24068: LD_ADDR_VAR 0 4
24072: PUSH
24073: LD_INT 1
24075: ST_TO_ADDR
// end ; if human in ai_sib_bomb_mechanics [ base ] then
24076: LD_VAR 0 2
24080: PUSH
24081: LD_EXP 65
24085: PUSH
24086: LD_VAR 0 1
24090: ARRAY
24091: IN
24092: IFFALSE 24149
// begin temp_list = ai_sib_bomb_mechanics [ base ] diff human ;
24094: LD_ADDR_VAR 0 5
24098: PUSH
24099: LD_EXP 65
24103: PUSH
24104: LD_VAR 0 1
24108: ARRAY
24109: PUSH
24110: LD_VAR 0 2
24114: DIFF
24115: ST_TO_ADDR
// ai_sib_bomb_mechanics = Replace ( ai_sib_bomb_mechanics , base , temp_list ) ;
24116: LD_ADDR_EXP 65
24120: PUSH
24121: LD_EXP 65
24125: PPUSH
24126: LD_VAR 0 1
24130: PPUSH
24131: LD_VAR 0 5
24135: PPUSH
24136: CALL_OW 1
24140: ST_TO_ADDR
// result = true ;
24141: LD_ADDR_VAR 0 4
24145: PUSH
24146: LD_INT 1
24148: ST_TO_ADDR
// end ; if human in ai_scientists [ base ] then
24149: LD_VAR 0 2
24153: PUSH
24154: LD_EXP 45
24158: PUSH
24159: LD_VAR 0 1
24163: ARRAY
24164: IN
24165: IFFALSE 24222
// begin temp_list = ai_scientists [ base ] diff human ;
24167: LD_ADDR_VAR 0 5
24171: PUSH
24172: LD_EXP 45
24176: PUSH
24177: LD_VAR 0 1
24181: ARRAY
24182: PUSH
24183: LD_VAR 0 2
24187: DIFF
24188: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , temp_list ) ;
24189: LD_ADDR_EXP 45
24193: PUSH
24194: LD_EXP 45
24198: PPUSH
24199: LD_VAR 0 1
24203: PPUSH
24204: LD_VAR 0 5
24208: PPUSH
24209: CALL_OW 1
24213: ST_TO_ADDR
// result = true ;
24214: LD_ADDR_VAR 0 4
24218: PUSH
24219: LD_INT 1
24221: ST_TO_ADDR
// end ; if human in ai_attacking_scientists [ base ] then
24222: LD_VAR 0 2
24226: PUSH
24227: LD_EXP 46
24231: PUSH
24232: LD_VAR 0 1
24236: ARRAY
24237: IN
24238: IFFALSE 24295
// begin temp_list = ai_attacking_scientists [ base ] diff human ;
24240: LD_ADDR_VAR 0 5
24244: PUSH
24245: LD_EXP 46
24249: PUSH
24250: LD_VAR 0 1
24254: ARRAY
24255: PUSH
24256: LD_VAR 0 2
24260: DIFF
24261: ST_TO_ADDR
// ai_attacking_scientists = Replace ( ai_attacking_scientists , base , temp_list ) ;
24262: LD_ADDR_EXP 46
24266: PUSH
24267: LD_EXP 46
24271: PPUSH
24272: LD_VAR 0 1
24276: PPUSH
24277: LD_VAR 0 5
24281: PPUSH
24282: CALL_OW 1
24286: ST_TO_ADDR
// result = true ;
24287: LD_ADDR_VAR 0 4
24291: PUSH
24292: LD_INT 1
24294: ST_TO_ADDR
// end ; if human in ai_heal_these_humans [ base ] then
24295: LD_VAR 0 2
24299: PUSH
24300: LD_EXP 75
24304: PUSH
24305: LD_VAR 0 1
24309: ARRAY
24310: IN
24311: IFFALSE 24360
// begin temp_list = ai_heal_these_humans [ base ] diff human ;
24313: LD_ADDR_VAR 0 5
24317: PUSH
24318: LD_EXP 75
24322: PUSH
24323: LD_VAR 0 1
24327: ARRAY
24328: PUSH
24329: LD_VAR 0 2
24333: DIFF
24334: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
24335: LD_ADDR_EXP 75
24339: PUSH
24340: LD_EXP 75
24344: PPUSH
24345: LD_VAR 0 1
24349: PPUSH
24350: LD_VAR 0 5
24354: PPUSH
24355: CALL_OW 1
24359: ST_TO_ADDR
// end ; if human = ai_building_constructor [ base ] then
24360: LD_VAR 0 2
24364: PUSH
24365: LD_EXP 77
24369: PUSH
24370: LD_VAR 0 1
24374: ARRAY
24375: EQUAL
24376: IFFALSE 24401
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
24378: LD_ADDR_EXP 77
24382: PUSH
24383: LD_EXP 77
24387: PPUSH
24388: LD_VAR 0 1
24392: PPUSH
24393: LD_INT 0
24395: PPUSH
24396: CALL_OW 1
24400: ST_TO_ADDR
// if human in ai_retreating_attacking_humans [ base ] then
24401: LD_VAR 0 2
24405: PUSH
24406: LD_EXP 94
24410: PUSH
24411: LD_VAR 0 1
24415: ARRAY
24416: IN
24417: IFFALSE 24466
// begin temp_list = ai_retreating_attacking_humans [ base ] diff human ;
24419: LD_ADDR_VAR 0 5
24423: PUSH
24424: LD_EXP 94
24428: PUSH
24429: LD_VAR 0 1
24433: ARRAY
24434: PUSH
24435: LD_VAR 0 2
24439: DIFF
24440: ST_TO_ADDR
// ai_retreating_attacking_humans = Replace ( ai_retreating_attacking_humans , base , temp_list ) ;
24441: LD_ADDR_EXP 94
24445: PUSH
24446: LD_EXP 94
24450: PPUSH
24451: LD_VAR 0 1
24455: PPUSH
24456: LD_VAR 0 5
24460: PPUSH
24461: CALL_OW 1
24465: ST_TO_ADDR
// end ; if human = ai_crane_driver [ base ] then
24466: LD_VAR 0 2
24470: PUSH
24471: LD_EXP 92
24475: PUSH
24476: LD_VAR 0 1
24480: ARRAY
24481: EQUAL
24482: IFFALSE 24507
// ai_crane_driver = Replace ( ai_crane_driver , base , 0 ) ;
24484: LD_ADDR_EXP 92
24488: PUSH
24489: LD_EXP 92
24493: PPUSH
24494: LD_VAR 0 1
24498: PPUSH
24499: LD_INT 0
24501: PPUSH
24502: CALL_OW 1
24506: ST_TO_ADDR
// if check_if_base_is_dead then
24507: LD_VAR 0 3
24511: IFFALSE 24790
// 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
24513: LD_EXP 40
24517: PUSH
24518: LD_VAR 0 1
24522: ARRAY
24523: PUSH
24524: LD_EXP 41
24528: PUSH
24529: LD_VAR 0 1
24533: ARRAY
24534: ADD
24535: PUSH
24536: LD_EXP 42
24540: PUSH
24541: LD_VAR 0 1
24545: ARRAY
24546: ADD
24547: PUSH
24548: LD_EXP 47
24552: PUSH
24553: LD_VAR 0 1
24557: ARRAY
24558: ADD
24559: PUSH
24560: LD_EXP 43
24564: PUSH
24565: LD_VAR 0 1
24569: ARRAY
24570: ADD
24571: PUSH
24572: LD_EXP 44
24576: PUSH
24577: LD_VAR 0 1
24581: ARRAY
24582: ADD
24583: PUSH
24584: LD_EXP 65
24588: PUSH
24589: LD_VAR 0 1
24593: ARRAY
24594: ADD
24595: PUSH
24596: LD_EXP 45
24600: PUSH
24601: LD_VAR 0 1
24605: ARRAY
24606: ADD
24607: PUSH
24608: LD_EXP 46
24612: PUSH
24613: LD_VAR 0 1
24617: ARRAY
24618: ADD
24619: PUSH
24620: LD_INT 0
24622: DIFF
24623: PUSH
24624: LD_INT 0
24626: EQUAL
24627: IFFALSE 24790
// begin ai_bases = ai_bases diff base ;
24629: LD_ADDR_EXP 39
24633: PUSH
24634: LD_EXP 39
24638: PUSH
24639: LD_VAR 0 1
24643: DIFF
24644: ST_TO_ADDR
// elimination_order = elimination_order ^ base ;
24645: LD_ADDR_EXP 146
24649: PUSH
24650: LD_EXP 146
24654: PUSH
24655: LD_VAR 0 1
24659: ADD
24660: ST_TO_ADDR
// if base = 2 then
24661: LD_VAR 0 1
24665: PUSH
24666: LD_INT 2
24668: EQUAL
24669: IFFALSE 24675
// AllianceObjectivesReset ;
24671: CALL 96742 0 0
// if base = 1 then
24675: LD_VAR 0 1
24679: PUSH
24680: LD_INT 1
24682: EQUAL
24683: IFFALSE 24736
// begin temp_list = ai_bases ;
24685: LD_ADDR_VAR 0 5
24689: PUSH
24690: LD_EXP 39
24694: ST_TO_ADDR
// if alliance_deal_status = 2 then
24695: LD_EXP 131
24699: PUSH
24700: LD_INT 2
24702: EQUAL
24703: IFFALSE 24719
// temp_list = temp_list diff 2 ;
24705: LD_ADDR_VAR 0 5
24709: PUSH
24710: LD_VAR 0 5
24714: PUSH
24715: LD_INT 2
24717: DIFF
24718: ST_TO_ADDR
// if temp_list > 0 then
24719: LD_VAR 0 5
24723: PUSH
24724: LD_INT 0
24726: GREATER
24727: IFFALSE 24736
// ChangeMissionObjectives ( M3 ) ;
24729: LD_STRING M3
24731: PPUSH
24732: CALL_OW 337
// end ; for i in ai_spawn_people [ base ] do
24736: LD_ADDR_VAR 0 6
24740: PUSH
24741: LD_EXP 66
24745: PUSH
24746: LD_VAR 0 1
24750: ARRAY
24751: PUSH
24752: FOR_IN
24753: IFFALSE 24766
// DestroyUnit ( i ) ;
24755: LD_VAR 0 6
24759: PPUSH
24760: CALL_OW 65
24764: GO 24752
24766: POP
24767: POP
// ai_spawn_people = Replace ( ai_spawn_people , base , [ ] ) ;
24768: LD_ADDR_EXP 66
24772: PUSH
24773: LD_EXP 66
24777: PPUSH
24778: LD_VAR 0 1
24782: PPUSH
24783: EMPTY
24784: PPUSH
24785: CALL_OW 1
24789: ST_TO_ADDR
// end ; end ;
24790: LD_VAR 0 4
24794: RET
// export function GetBaseArea ( base ) ; begin
24795: LD_INT 0
24797: PPUSH
// case base of 1 :
24798: LD_VAR 0 1
24802: PUSH
24803: LD_INT 1
24805: DOUBLE
24806: EQUAL
24807: IFTRUE 24811
24809: GO 24822
24811: POP
// result = Ru_base ; 2 :
24812: LD_ADDR_VAR 0 2
24816: PUSH
24817: LD_INT 2
24819: ST_TO_ADDR
24820: GO 24880
24822: LD_INT 2
24824: DOUBLE
24825: EQUAL
24826: IFTRUE 24830
24828: GO 24841
24830: POP
// result = Alliance_base ; 3 :
24831: LD_ADDR_VAR 0 2
24835: PUSH
24836: LD_INT 3
24838: ST_TO_ADDR
24839: GO 24880
24841: LD_INT 3
24843: DOUBLE
24844: EQUAL
24845: IFTRUE 24849
24847: GO 24860
24849: POP
// result = Ar_base ; 4 :
24850: LD_ADDR_VAR 0 2
24854: PUSH
24855: LD_INT 4
24857: ST_TO_ADDR
24858: GO 24880
24860: LD_INT 4
24862: DOUBLE
24863: EQUAL
24864: IFTRUE 24868
24866: GO 24879
24868: POP
// result = Am_base ; end ;
24869: LD_ADDR_VAR 0 2
24873: PUSH
24874: LD_INT 5
24876: ST_TO_ADDR
24877: GO 24880
24879: POP
// end ;
24880: LD_VAR 0 2
24884: RET
// export function GetBaseSide ( base ) ; begin
24885: LD_INT 0
24887: PPUSH
// case base of 1 :
24888: LD_VAR 0 1
24892: PUSH
24893: LD_INT 1
24895: DOUBLE
24896: EQUAL
24897: IFTRUE 24901
24899: GO 24914
24901: POP
// result = russians ; 2 :
24902: LD_ADDR_VAR 0 2
24906: PUSH
24907: LD_EXP 3
24911: ST_TO_ADDR
24912: GO 24978
24914: LD_INT 2
24916: DOUBLE
24917: EQUAL
24918: IFTRUE 24922
24920: GO 24935
24922: POP
// result = alliance ; 3 :
24923: LD_ADDR_VAR 0 2
24927: PUSH
24928: LD_EXP 5
24932: ST_TO_ADDR
24933: GO 24978
24935: LD_INT 3
24937: DOUBLE
24938: EQUAL
24939: IFTRUE 24943
24941: GO 24956
24943: POP
// result = arabians ; 4 :
24944: LD_ADDR_VAR 0 2
24948: PUSH
24949: LD_EXP 6
24953: ST_TO_ADDR
24954: GO 24978
24956: LD_INT 4
24958: DOUBLE
24959: EQUAL
24960: IFTRUE 24964
24962: GO 24977
24964: POP
// result = americans ; end ;
24965: LD_ADDR_VAR 0 2
24969: PUSH
24970: LD_EXP 7
24974: ST_TO_ADDR
24975: GO 24978
24977: POP
// end ;
24978: LD_VAR 0 2
24982: RET
// export function GetBaseNation ( base ) ; begin
24983: LD_INT 0
24985: PPUSH
// case base of 1 :
24986: LD_VAR 0 1
24990: PUSH
24991: LD_INT 1
24993: DOUBLE
24994: EQUAL
24995: IFTRUE 24999
24997: GO 25010
24999: POP
// result = nation_russian ; 2 :
25000: LD_ADDR_VAR 0 2
25004: PUSH
25005: LD_INT 3
25007: ST_TO_ADDR
25008: GO 25068
25010: LD_INT 2
25012: DOUBLE
25013: EQUAL
25014: IFTRUE 25018
25016: GO 25029
25018: POP
// result = nation_american ; 3 :
25019: LD_ADDR_VAR 0 2
25023: PUSH
25024: LD_INT 1
25026: ST_TO_ADDR
25027: GO 25068
25029: LD_INT 3
25031: DOUBLE
25032: EQUAL
25033: IFTRUE 25037
25035: GO 25048
25037: POP
// result = nation_arabian ; 4 :
25038: LD_ADDR_VAR 0 2
25042: PUSH
25043: LD_INT 2
25045: ST_TO_ADDR
25046: GO 25068
25048: LD_INT 4
25050: DOUBLE
25051: EQUAL
25052: IFTRUE 25056
25054: GO 25067
25056: POP
// result = nation_american ; end ;
25057: LD_ADDR_VAR 0 2
25061: PUSH
25062: LD_INT 1
25064: ST_TO_ADDR
25065: GO 25068
25067: POP
// end ;
25068: LD_VAR 0 2
25072: RET
// export function FindBase ( un ) ; var base ; begin
25073: LD_INT 0
25075: PPUSH
25076: PPUSH
// result = 0 ;
25077: LD_ADDR_VAR 0 2
25081: PUSH
25082: LD_INT 0
25084: ST_TO_ADDR
// for base in ai_bases do
25085: LD_ADDR_VAR 0 3
25089: PUSH
25090: LD_EXP 39
25094: PUSH
25095: FOR_IN
25096: IFFALSE 25135
// if IsInArea ( un , GetBaseArea ( base ) ) then
25098: LD_VAR 0 1
25102: PPUSH
25103: LD_VAR 0 3
25107: PPUSH
25108: CALL 24795 0 1
25112: PPUSH
25113: CALL_OW 308
25117: IFFALSE 25133
// begin result = base ;
25119: LD_ADDR_VAR 0 2
25123: PUSH
25124: LD_VAR 0 3
25128: ST_TO_ADDR
// exit ;
25129: POP
25130: POP
25131: GO 25137
// end ;
25133: GO 25095
25135: POP
25136: POP
// end ;
25137: LD_VAR 0 2
25141: RET
// every 0 0$2 + 0 0$0.1 do var base , i , temp_unit , temp_list , away , buildings_list , b , cl ;
25142: GO 25144
25144: DISABLE
25145: LD_INT 0
25147: PPUSH
25148: PPUSH
25149: PPUSH
25150: PPUSH
25151: PPUSH
25152: PPUSH
25153: PPUSH
25154: PPUSH
// begin repeat wait ( 0 0$2 ) ;
25155: LD_INT 70
25157: PPUSH
25158: CALL_OW 67
// for base in ai_bases do
25162: LD_ADDR_VAR 0 1
25166: PUSH
25167: LD_EXP 39
25171: PUSH
25172: FOR_IN
25173: IFFALSE 26126
// begin if base in [ 1 , 3 , 4 ] then
25175: LD_VAR 0 1
25179: PUSH
25180: LD_INT 1
25182: PUSH
25183: LD_INT 3
25185: PUSH
25186: LD_INT 4
25188: PUSH
25189: EMPTY
25190: LIST
25191: LIST
25192: LIST
25193: IN
25194: IFFALSE 25198
// continue ;
25196: GO 25172
// if am_going_to_destroy_alli then
25198: LD_EXP 125
25202: IFFALSE 25262
// begin for i in ai_spawn_people [ base ] do
25204: LD_ADDR_VAR 0 2
25208: PUSH
25209: LD_EXP 66
25213: PUSH
25214: LD_VAR 0 1
25218: ARRAY
25219: PUSH
25220: FOR_IN
25221: IFFALSE 25234
// DestroyUnit ( i ) ;
25223: LD_VAR 0 2
25227: PPUSH
25228: CALL_OW 65
25232: GO 25220
25234: POP
25235: POP
// ai_spawn_people = Replace ( ai_spawn_people , base , [ ] ) ;
25236: LD_ADDR_EXP 66
25240: PUSH
25241: LD_EXP 66
25245: PPUSH
25246: LD_VAR 0 1
25250: PPUSH
25251: EMPTY
25252: PPUSH
25253: CALL_OW 1
25257: ST_TO_ADDR
// exit ;
25258: POP
25259: POP
25260: GO 26132
// end ; if BaseUnderAttack ( base , - 1 ) then
25262: LD_VAR 0 1
25266: PPUSH
25267: LD_INT 1
25269: NEG
25270: PPUSH
25271: CALL 45321 0 2
25275: IFFALSE 25279
// continue ;
25277: GO 25172
// i = 1 ;
25279: LD_ADDR_VAR 0 2
25283: PUSH
25284: LD_INT 1
25286: ST_TO_ADDR
// while i <= ai_spawn_people [ base ] do
25287: LD_VAR 0 2
25291: PUSH
25292: LD_EXP 66
25296: PUSH
25297: LD_VAR 0 1
25301: ARRAY
25302: LESSEQUAL
25303: IFFALSE 26124
// begin temp_unit = 0 ;
25305: LD_ADDR_VAR 0 3
25309: PUSH
25310: LD_INT 0
25312: ST_TO_ADDR
// cl = GetClass ( ai_spawn_people [ base ] [ i ] ) ;
25313: LD_ADDR_VAR 0 8
25317: PUSH
25318: LD_EXP 66
25322: PUSH
25323: LD_VAR 0 1
25327: ARRAY
25328: PUSH
25329: LD_VAR 0 2
25333: ARRAY
25334: PPUSH
25335: CALL_OW 257
25339: ST_TO_ADDR
// case cl of class_soldier , class_apeman_soldier , class_sniper , class_mortar , class_bazooker :
25340: LD_VAR 0 8
25344: PUSH
25345: LD_INT 1
25347: DOUBLE
25348: EQUAL
25349: IFTRUE 25377
25351: LD_INT 15
25353: DOUBLE
25354: EQUAL
25355: IFTRUE 25377
25357: LD_INT 5
25359: DOUBLE
25360: EQUAL
25361: IFTRUE 25377
25363: LD_INT 8
25365: DOUBLE
25366: EQUAL
25367: IFTRUE 25377
25369: LD_INT 9
25371: DOUBLE
25372: EQUAL
25373: IFTRUE 25377
25375: GO 25396
25377: POP
// buildings_list = ai_armouries [ base ] ; class_engineer , class_apeman_engineer :
25378: LD_ADDR_VAR 0 6
25382: PUSH
25383: LD_EXP 52
25387: PUSH
25388: LD_VAR 0 1
25392: ARRAY
25393: ST_TO_ADDR
25394: GO 25487
25396: LD_INT 2
25398: DOUBLE
25399: EQUAL
25400: IFTRUE 25410
25402: LD_INT 16
25404: DOUBLE
25405: EQUAL
25406: IFTRUE 25410
25408: GO 25432
25410: POP
// buildings_list = [ ai_depot [ base ] ] ; class_mechanic :
25411: LD_ADDR_VAR 0 6
25415: PUSH
25416: LD_EXP 49
25420: PUSH
25421: LD_VAR 0 1
25425: ARRAY
25426: PUSH
25427: EMPTY
25428: LIST
25429: ST_TO_ADDR
25430: GO 25487
25432: LD_INT 3
25434: DOUBLE
25435: EQUAL
25436: IFTRUE 25440
25438: GO 25459
25440: POP
// buildings_list = ai_facts [ base ] ; class_scientistic :
25441: LD_ADDR_VAR 0 6
25445: PUSH
25446: LD_EXP 51
25450: PUSH
25451: LD_VAR 0 1
25455: ARRAY
25456: ST_TO_ADDR
25457: GO 25487
25459: LD_INT 4
25461: DOUBLE
25462: EQUAL
25463: IFTRUE 25467
25465: GO 25486
25467: POP
// buildings_list = ai_labs [ base ] ; end ;
25468: LD_ADDR_VAR 0 6
25472: PUSH
25473: LD_EXP 50
25477: PUSH
25478: LD_VAR 0 1
25482: ARRAY
25483: ST_TO_ADDR
25484: GO 25487
25486: POP
// away = false ;
25487: LD_ADDR_VAR 0 5
25491: PUSH
25492: LD_INT 0
25494: ST_TO_ADDR
// for b in buildings_list do
25495: LD_ADDR_VAR 0 7
25499: PUSH
25500: LD_VAR 0 6
25504: PUSH
25505: FOR_IN
25506: IFFALSE 26047
// begin if ( IsOk ( b ) and UnitsInside ( b ) < 6 ) or cl = class_engineer then
25508: LD_VAR 0 7
25512: PPUSH
25513: CALL_OW 302
25517: PUSH
25518: LD_VAR 0 7
25522: PPUSH
25523: CALL_OW 313
25527: PUSH
25528: LD_INT 6
25530: LESS
25531: AND
25532: PUSH
25533: LD_VAR 0 8
25537: PUSH
25538: LD_INT 2
25540: EQUAL
25541: OR
25542: IFFALSE 26045
// begin if IsOk ( b ) and UnitsInside ( b ) < 6 then
25544: LD_VAR 0 7
25548: PPUSH
25549: CALL_OW 302
25553: PUSH
25554: LD_VAR 0 7
25558: PPUSH
25559: CALL_OW 313
25563: PUSH
25564: LD_INT 6
25566: LESS
25567: AND
25568: IFFALSE 25598
// PlaceHumanInUnit ( ai_spawn_people [ base ] [ i ] , b ) else
25570: LD_EXP 66
25574: PUSH
25575: LD_VAR 0 1
25579: ARRAY
25580: PUSH
25581: LD_VAR 0 2
25585: ARRAY
25586: PPUSH
25587: LD_VAR 0 7
25591: PPUSH
25592: CALL_OW 52
25596: GO 25655
// PlaceUnitXYR ( ai_spawn_people [ base ] [ i ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] , 7 , false ) ;
25598: LD_EXP 66
25602: PUSH
25603: LD_VAR 0 1
25607: ARRAY
25608: PUSH
25609: LD_VAR 0 2
25613: ARRAY
25614: PPUSH
25615: LD_EXP 73
25619: PUSH
25620: LD_VAR 0 1
25624: ARRAY
25625: PUSH
25626: LD_INT 1
25628: ARRAY
25629: PPUSH
25630: LD_EXP 73
25634: PUSH
25635: LD_VAR 0 1
25639: ARRAY
25640: PUSH
25641: LD_INT 2
25643: ARRAY
25644: PPUSH
25645: LD_INT 7
25647: PPUSH
25648: LD_INT 0
25650: PPUSH
25651: CALL_OW 50
// case cl of class_soldier , class_apeman_soldier , class_sniper , class_mortar , class_bazooker :
25655: LD_VAR 0 8
25659: PUSH
25660: LD_INT 1
25662: DOUBLE
25663: EQUAL
25664: IFTRUE 25692
25666: LD_INT 15
25668: DOUBLE
25669: EQUAL
25670: IFTRUE 25692
25672: LD_INT 5
25674: DOUBLE
25675: EQUAL
25676: IFTRUE 25692
25678: LD_INT 8
25680: DOUBLE
25681: EQUAL
25682: IFTRUE 25692
25684: LD_INT 9
25686: DOUBLE
25687: EQUAL
25688: IFTRUE 25692
25690: GO 25754
25692: POP
// begin temp_list = ai_soldiers [ base ] ^ ai_spawn_people [ base ] [ i ] ;
25693: LD_ADDR_VAR 0 4
25697: PUSH
25698: LD_EXP 40
25702: PUSH
25703: LD_VAR 0 1
25707: ARRAY
25708: PUSH
25709: LD_EXP 66
25713: PUSH
25714: LD_VAR 0 1
25718: ARRAY
25719: PUSH
25720: LD_VAR 0 2
25724: ARRAY
25725: ADD
25726: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
25727: LD_ADDR_EXP 40
25731: PUSH
25732: LD_EXP 40
25736: PPUSH
25737: LD_VAR 0 1
25741: PPUSH
25742: LD_VAR 0 4
25746: PPUSH
25747: CALL_OW 1
25751: ST_TO_ADDR
// end ; class_engineer :
25752: GO 26035
25754: LD_INT 2
25756: DOUBLE
25757: EQUAL
25758: IFTRUE 25762
25760: GO 25824
25762: POP
// begin temp_list = ai_engineers [ base ] ^ ai_spawn_people [ base ] [ i ] ;
25763: LD_ADDR_VAR 0 4
25767: PUSH
25768: LD_EXP 42
25772: PUSH
25773: LD_VAR 0 1
25777: ARRAY
25778: PUSH
25779: LD_EXP 66
25783: PUSH
25784: LD_VAR 0 1
25788: ARRAY
25789: PUSH
25790: LD_VAR 0 2
25794: ARRAY
25795: ADD
25796: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , base , temp_list ) ;
25797: LD_ADDR_EXP 42
25801: PUSH
25802: LD_EXP 42
25806: PPUSH
25807: LD_VAR 0 1
25811: PPUSH
25812: LD_VAR 0 4
25816: PPUSH
25817: CALL_OW 1
25821: ST_TO_ADDR
// end ; class_apeman_engineer :
25822: GO 26035
25824: LD_INT 16
25826: DOUBLE
25827: EQUAL
25828: IFTRUE 25832
25830: GO 25894
25832: POP
// begin temp_list = ai_apemen_engineers [ base ] ^ ai_spawn_people [ base ] [ i ] ;
25833: LD_ADDR_VAR 0 4
25837: PUSH
25838: LD_EXP 47
25842: PUSH
25843: LD_VAR 0 1
25847: ARRAY
25848: PUSH
25849: LD_EXP 66
25853: PUSH
25854: LD_VAR 0 1
25858: ARRAY
25859: PUSH
25860: LD_VAR 0 2
25864: ARRAY
25865: ADD
25866: ST_TO_ADDR
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , temp_list ) ;
25867: LD_ADDR_EXP 47
25871: PUSH
25872: LD_EXP 47
25876: PPUSH
25877: LD_VAR 0 1
25881: PPUSH
25882: LD_VAR 0 4
25886: PPUSH
25887: CALL_OW 1
25891: ST_TO_ADDR
// end ; class_mechanic :
25892: GO 26035
25894: LD_INT 3
25896: DOUBLE
25897: EQUAL
25898: IFTRUE 25902
25900: GO 25964
25902: POP
// begin temp_list = ai_mechanics_defend [ base ] ^ ai_spawn_people [ base ] [ i ] ;
25903: LD_ADDR_VAR 0 4
25907: PUSH
25908: LD_EXP 43
25912: PUSH
25913: LD_VAR 0 1
25917: ARRAY
25918: PUSH
25919: LD_EXP 66
25923: PUSH
25924: LD_VAR 0 1
25928: ARRAY
25929: PUSH
25930: LD_VAR 0 2
25934: ARRAY
25935: ADD
25936: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , temp_list ) ;
25937: LD_ADDR_EXP 43
25941: PUSH
25942: LD_EXP 43
25946: PPUSH
25947: LD_VAR 0 1
25951: PPUSH
25952: LD_VAR 0 4
25956: PPUSH
25957: CALL_OW 1
25961: ST_TO_ADDR
// end ; class_scientistic :
25962: GO 26035
25964: LD_INT 4
25966: DOUBLE
25967: EQUAL
25968: IFTRUE 25972
25970: GO 26034
25972: POP
// begin temp_list = ai_scientists [ base ] ^ ai_spawn_people [ base ] [ i ] ;
25973: LD_ADDR_VAR 0 4
25977: PUSH
25978: LD_EXP 45
25982: PUSH
25983: LD_VAR 0 1
25987: ARRAY
25988: PUSH
25989: LD_EXP 66
25993: PUSH
25994: LD_VAR 0 1
25998: ARRAY
25999: PUSH
26000: LD_VAR 0 2
26004: ARRAY
26005: ADD
26006: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , temp_list ) ;
26007: LD_ADDR_EXP 45
26011: PUSH
26012: LD_EXP 45
26016: PPUSH
26017: LD_VAR 0 1
26021: PPUSH
26022: LD_VAR 0 4
26026: PPUSH
26027: CALL_OW 1
26031: ST_TO_ADDR
// end ; end ;
26032: GO 26035
26034: POP
// away = true ;
26035: LD_ADDR_VAR 0 5
26039: PUSH
26040: LD_INT 1
26042: ST_TO_ADDR
// break ;
26043: GO 26047
// end ; end ;
26045: GO 25505
26047: POP
26048: POP
// if away then
26049: LD_VAR 0 5
26053: IFFALSE 26108
// begin temp_list = Delete ( ai_spawn_people [ base ] , i ) ;
26055: LD_ADDR_VAR 0 4
26059: PUSH
26060: LD_EXP 66
26064: PUSH
26065: LD_VAR 0 1
26069: ARRAY
26070: PPUSH
26071: LD_VAR 0 2
26075: PPUSH
26076: CALL_OW 3
26080: ST_TO_ADDR
// ai_spawn_people = Replace ( ai_spawn_people , base , temp_list ) ;
26081: LD_ADDR_EXP 66
26085: PUSH
26086: LD_EXP 66
26090: PPUSH
26091: LD_VAR 0 1
26095: PPUSH
26096: LD_VAR 0 4
26100: PPUSH
26101: CALL_OW 1
26105: ST_TO_ADDR
// continue ;
26106: GO 25287
// end ; i = i + 1 ;
26108: LD_ADDR_VAR 0 2
26112: PUSH
26113: LD_VAR 0 2
26117: PUSH
26118: LD_INT 1
26120: PLUS
26121: ST_TO_ADDR
// end ;
26122: GO 25287
// end ;
26124: GO 25172
26126: POP
26127: POP
// until false ;
26128: LD_INT 0
26130: IFFALSE 25155
// end ;
26132: PPOPN 8
26134: END
// every 0 0$1 + 0 0$0.1 do var side , i , temp_list , buildings_list , soldiers_list , temp_unit , base , val , special_units , bunkers , under_attack , j ; var temp_list_2 , special_defenders ;
26135: GO 26137
26137: DISABLE
26138: LD_INT 0
26140: PPUSH
26141: PPUSH
26142: PPUSH
26143: PPUSH
26144: PPUSH
26145: PPUSH
26146: PPUSH
26147: PPUSH
26148: PPUSH
26149: PPUSH
26150: PPUSH
26151: PPUSH
26152: PPUSH
26153: PPUSH
// begin repeat if ai_bases = 0 then
26154: LD_EXP 39
26158: PUSH
26159: LD_INT 0
26161: EQUAL
26162: IFFALSE 26166
// exit ;
26164: GO 28925
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
26166: LD_INT 35
26168: PUSH
26169: LD_EXP 39
26173: PUSH
26174: LD_INT 0
26176: PLUS
26177: MOD
26178: PPUSH
26179: CALL_OW 67
// for base in ai_bases do
26183: LD_ADDR_VAR 0 7
26187: PUSH
26188: LD_EXP 39
26192: PUSH
26193: FOR_IN
26194: IFFALSE 28919
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
26196: LD_INT 35
26198: PUSH
26199: LD_EXP 39
26203: PUSH
26204: LD_INT 0
26206: PLUS
26207: DIV
26208: PPUSH
26209: CALL_OW 67
// side = GetBaseSide ( base ) ;
26213: LD_ADDR_VAR 0 1
26217: PUSH
26218: LD_VAR 0 7
26222: PPUSH
26223: CALL 24885 0 1
26227: ST_TO_ADDR
// soldiers_list = ai_soldiers [ base ] diff ( ai_excepted_soldiers [ base ] ^ [ Platonov , Omar , Powell ] ) ;
26228: LD_ADDR_VAR 0 5
26232: PUSH
26233: LD_EXP 40
26237: PUSH
26238: LD_VAR 0 7
26242: ARRAY
26243: PUSH
26244: LD_EXP 48
26248: PUSH
26249: LD_VAR 0 7
26253: ARRAY
26254: PUSH
26255: LD_EXP 25
26259: PUSH
26260: LD_EXP 29
26264: PUSH
26265: LD_EXP 31
26269: PUSH
26270: EMPTY
26271: LIST
26272: LIST
26273: LIST
26274: ADD
26275: DIFF
26276: ST_TO_ADDR
// under_attack := BaseUnderAttack ( base , - 1 ) ;
26277: LD_ADDR_VAR 0 11
26281: PUSH
26282: LD_VAR 0 7
26286: PPUSH
26287: LD_INT 1
26289: NEG
26290: PPUSH
26291: CALL 45321 0 2
26295: ST_TO_ADDR
// case base of 1 :
26296: LD_VAR 0 7
26300: PUSH
26301: LD_INT 1
26303: DOUBLE
26304: EQUAL
26305: IFTRUE 26309
26307: GO 26322
26309: POP
// val = Platonov ; 2 :
26310: LD_ADDR_VAR 0 8
26314: PUSH
26315: LD_EXP 25
26319: ST_TO_ADDR
26320: GO 26791
26322: LD_INT 2
26324: DOUBLE
26325: EQUAL
26326: IFTRUE 26330
26328: GO 26341
26330: POP
// val = 0 ; 3 :
26331: LD_ADDR_VAR 0 8
26335: PUSH
26336: LD_INT 0
26338: ST_TO_ADDR
26339: GO 26791
26341: LD_INT 3
26343: DOUBLE
26344: EQUAL
26345: IFTRUE 26349
26347: GO 26769
26349: POP
// begin if IsLive ( ar_mast ) and IsLive ( Omar ) then
26350: LD_INT 276
26352: PPUSH
26353: CALL_OW 300
26357: PUSH
26358: LD_EXP 29
26362: PPUSH
26363: CALL_OW 300
26367: AND
26368: IFFALSE 26757
// begin j = GetLives ( ar_mast ) ;
26370: LD_ADDR_VAR 0 12
26374: PUSH
26375: LD_INT 276
26377: PPUSH
26378: CALL_OW 256
26382: ST_TO_ADDR
// if j <= 250 then
26383: LD_VAR 0 12
26387: PUSH
26388: LD_INT 250
26390: LESSEQUAL
26391: IFFALSE 26405
// val = Omar else
26393: LD_ADDR_VAR 0 8
26397: PUSH
26398: LD_EXP 29
26402: ST_TO_ADDR
26403: GO 26513
// begin val = 0 ;
26405: LD_ADDR_VAR 0 8
26409: PUSH
26410: LD_INT 0
26412: ST_TO_ADDR
// if IsInUnit ( Omar ) <> ar_mast then
26413: LD_EXP 29
26417: PPUSH
26418: CALL_OW 310
26422: PUSH
26423: LD_INT 276
26425: NONEQUAL
26426: IFFALSE 26513
// if IsInUnit ( Omar ) > 0 then
26428: LD_EXP 29
26432: PPUSH
26433: CALL_OW 310
26437: PUSH
26438: LD_INT 0
26440: GREATER
26441: IFFALSE 26501
// begin case GetType ( IsInUnit ( Omar ) ) of unit_vehicle :
26443: LD_EXP 29
26447: PPUSH
26448: CALL_OW 310
26452: PPUSH
26453: CALL_OW 247
26457: PUSH
26458: LD_INT 2
26460: DOUBLE
26461: EQUAL
26462: IFTRUE 26466
26464: GO 26478
26466: POP
// ComExitVehicle ( Omar ) ; unit_building :
26467: LD_EXP 29
26471: PPUSH
26472: CALL_OW 121
26476: GO 26499
26478: LD_INT 3
26480: DOUBLE
26481: EQUAL
26482: IFTRUE 26486
26484: GO 26498
26486: POP
// ComExitBuilding ( Omar ) ; end ;
26487: LD_EXP 29
26491: PPUSH
26492: CALL_OW 122
26496: GO 26499
26498: POP
// end else
26499: GO 26513
// ComEnterUnit ( Omar , ar_mast ) ;
26501: LD_EXP 29
26505: PPUSH
26506: LD_INT 276
26508: PPUSH
26509: CALL_OW 120
// end ; if j < 1000 and not under_attack then
26513: LD_VAR 0 12
26517: PUSH
26518: LD_INT 1000
26520: LESS
26521: PUSH
26522: LD_VAR 0 11
26526: NOT
26527: AND
26528: IFFALSE 26592
// begin if not ar_mast in ai_heal_these_humans [ base ] then
26530: LD_INT 276
26532: PUSH
26533: LD_EXP 75
26537: PUSH
26538: LD_VAR 0 7
26542: ARRAY
26543: IN
26544: NOT
26545: IFFALSE 26592
// begin temp_list = ai_heal_these_humans [ base ] ^ ar_mast ;
26547: LD_ADDR_VAR 0 3
26551: PUSH
26552: LD_EXP 75
26556: PUSH
26557: LD_VAR 0 7
26561: ARRAY
26562: PUSH
26563: LD_INT 276
26565: ADD
26566: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
26567: LD_ADDR_EXP 75
26571: PUSH
26572: LD_EXP 75
26576: PPUSH
26577: LD_VAR 0 7
26581: PPUSH
26582: LD_VAR 0 3
26586: PPUSH
26587: CALL_OW 1
26591: ST_TO_ADDR
// end ; end ; if val = 0 and IsInUnit ( Omar ) = ar_mast then
26592: LD_VAR 0 8
26596: PUSH
26597: LD_INT 0
26599: EQUAL
26600: PUSH
26601: LD_EXP 29
26605: PPUSH
26606: CALL_OW 310
26610: PUSH
26611: LD_INT 276
26613: EQUAL
26614: AND
26615: IFFALSE 26755
// begin if under_attack then
26617: LD_VAR 0 11
26621: IFFALSE 26675
// begin temp_unit = UnitShoot ( ar_mast ) ;
26623: LD_ADDR_VAR 0 6
26627: PUSH
26628: LD_INT 276
26630: PPUSH
26631: CALL_OW 504
26635: ST_TO_ADDR
// if temp_unit > 0 then
26636: LD_VAR 0 6
26640: PUSH
26641: LD_INT 0
26643: GREATER
26644: IFFALSE 26673
// ComAgressiveMove ( ar_mast , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
26646: LD_INT 276
26648: PPUSH
26649: LD_VAR 0 6
26653: PPUSH
26654: CALL_OW 250
26658: PPUSH
26659: LD_VAR 0 6
26663: PPUSH
26664: CALL_OW 251
26668: PPUSH
26669: CALL_OW 114
// end else
26673: GO 26755
// if GetDistUnitXY ( ar_mast , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 5 then
26675: LD_INT 276
26677: PPUSH
26678: LD_EXP 73
26682: PUSH
26683: LD_VAR 0 7
26687: ARRAY
26688: PUSH
26689: LD_INT 1
26691: ARRAY
26692: PPUSH
26693: LD_EXP 73
26697: PUSH
26698: LD_VAR 0 7
26702: ARRAY
26703: PUSH
26704: LD_INT 2
26706: ARRAY
26707: PPUSH
26708: CALL_OW 297
26712: PUSH
26713: LD_INT 5
26715: GREATER
26716: IFFALSE 26755
// ComMoveXY ( ar_mast , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
26718: LD_INT 276
26720: PPUSH
26721: LD_EXP 73
26725: PUSH
26726: LD_VAR 0 7
26730: ARRAY
26731: PUSH
26732: LD_INT 1
26734: ARRAY
26735: PPUSH
26736: LD_EXP 73
26740: PUSH
26741: LD_VAR 0 7
26745: ARRAY
26746: PUSH
26747: LD_INT 2
26749: ARRAY
26750: PPUSH
26751: CALL_OW 111
// end ; end else
26755: GO 26767
// val = Omar ;
26757: LD_ADDR_VAR 0 8
26761: PUSH
26762: LD_EXP 29
26766: ST_TO_ADDR
// end ; 4 :
26767: GO 26791
26769: LD_INT 4
26771: DOUBLE
26772: EQUAL
26773: IFTRUE 26777
26775: GO 26790
26777: POP
// val = Powell ; end ;
26778: LD_ADDR_VAR 0 8
26782: PUSH
26783: LD_EXP 31
26787: ST_TO_ADDR
26788: GO 26791
26790: POP
// if val > 0 and IsLive ( val ) and not val in ai_heal_these_humans [ base ] then
26791: LD_VAR 0 8
26795: PUSH
26796: LD_INT 0
26798: GREATER
26799: PUSH
26800: LD_VAR 0 8
26804: PPUSH
26805: CALL_OW 300
26809: AND
26810: PUSH
26811: LD_VAR 0 8
26815: PUSH
26816: LD_EXP 75
26820: PUSH
26821: LD_VAR 0 7
26825: ARRAY
26826: IN
26827: NOT
26828: AND
26829: IFFALSE 27016
// begin if ( val <> Omar and GetLives ( val ) <= 500 ) or ( GetLives ( val ) < 1000 and not under_attack ) then
26831: LD_VAR 0 8
26835: PUSH
26836: LD_EXP 29
26840: NONEQUAL
26841: PUSH
26842: LD_VAR 0 8
26846: PPUSH
26847: CALL_OW 256
26851: PUSH
26852: LD_INT 500
26854: LESSEQUAL
26855: AND
26856: PUSH
26857: LD_VAR 0 8
26861: PPUSH
26862: CALL_OW 256
26866: PUSH
26867: LD_INT 1000
26869: LESS
26870: PUSH
26871: LD_VAR 0 11
26875: NOT
26876: AND
26877: OR
26878: IFFALSE 26929
// begin temp_list = ai_heal_these_humans [ base ] ^ val ;
26880: LD_ADDR_VAR 0 3
26884: PUSH
26885: LD_EXP 75
26889: PUSH
26890: LD_VAR 0 7
26894: ARRAY
26895: PUSH
26896: LD_VAR 0 8
26900: ADD
26901: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
26902: LD_ADDR_EXP 75
26906: PUSH
26907: LD_EXP 75
26911: PPUSH
26912: LD_VAR 0 7
26916: PPUSH
26917: LD_VAR 0 3
26921: PPUSH
26922: CALL_OW 1
26926: ST_TO_ADDR
// end else
26927: GO 27016
// if not ( val = Omar and under_attack ) then
26929: LD_VAR 0 8
26933: PUSH
26934: LD_EXP 29
26938: EQUAL
26939: PUSH
26940: LD_VAR 0 11
26944: AND
26945: NOT
26946: IFFALSE 27016
// DistributeHumansToBuildings ( base , [ val ] , UnitFilter ( ai_depot [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , 0 , 6 , true , true ) ;
26948: LD_VAR 0 7
26952: PPUSH
26953: LD_VAR 0 8
26957: PUSH
26958: EMPTY
26959: LIST
26960: PPUSH
26961: LD_EXP 49
26965: PUSH
26966: LD_VAR 0 7
26970: ARRAY
26971: PPUSH
26972: LD_INT 50
26974: PUSH
26975: EMPTY
26976: LIST
26977: PUSH
26978: LD_INT 3
26980: PUSH
26981: LD_INT 57
26983: PUSH
26984: EMPTY
26985: LIST
26986: PUSH
26987: EMPTY
26988: LIST
26989: LIST
26990: PUSH
26991: EMPTY
26992: LIST
26993: LIST
26994: PPUSH
26995: CALL_OW 72
26999: PPUSH
27000: LD_INT 0
27002: PPUSH
27003: LD_INT 6
27005: PPUSH
27006: LD_INT 1
27008: PPUSH
27009: LD_INT 1
27011: PPUSH
27012: CALL 34075 0 7
// end ; if base in [ 1 , 3 , 4 ] and under_attack then
27016: LD_VAR 0 7
27020: PUSH
27021: LD_INT 1
27023: PUSH
27024: LD_INT 3
27026: PUSH
27027: LD_INT 4
27029: PUSH
27030: EMPTY
27031: LIST
27032: LIST
27033: LIST
27034: IN
27035: PUSH
27036: LD_VAR 0 11
27040: AND
27041: IFFALSE 27220
// begin special_defenders = UnitFilter ( soldiers_list , [ f_not , [ f_inside ] ] ) ;
27043: LD_ADDR_VAR 0 14
27047: PUSH
27048: LD_VAR 0 5
27052: PPUSH
27053: LD_INT 3
27055: PUSH
27056: LD_INT 54
27058: PUSH
27059: EMPTY
27060: LIST
27061: PUSH
27062: EMPTY
27063: LIST
27064: LIST
27065: PPUSH
27066: CALL_OW 72
27070: ST_TO_ADDR
// for i in ai_armouries [ base ] do
27071: LD_ADDR_VAR 0 2
27075: PUSH
27076: LD_EXP 52
27080: PUSH
27081: LD_VAR 0 7
27085: ARRAY
27086: PUSH
27087: FOR_IN
27088: IFFALSE 27216
// begin temp_list = UnitFilter ( UnitsInside ( i ) , [ f_or , [ f_class , class_sniper ] , [ f_class , class_mortar ] , [ f_class , class_bazooker ] ] ) ;
27090: LD_ADDR_VAR 0 3
27094: PUSH
27095: LD_VAR 0 2
27099: PPUSH
27100: CALL_OW 313
27104: PPUSH
27105: LD_INT 2
27107: PUSH
27108: LD_INT 25
27110: PUSH
27111: LD_INT 5
27113: PUSH
27114: EMPTY
27115: LIST
27116: LIST
27117: PUSH
27118: LD_INT 25
27120: PUSH
27121: LD_INT 8
27123: PUSH
27124: EMPTY
27125: LIST
27126: LIST
27127: PUSH
27128: LD_INT 25
27130: PUSH
27131: LD_INT 9
27133: PUSH
27134: EMPTY
27135: LIST
27136: LIST
27137: PUSH
27138: EMPTY
27139: LIST
27140: LIST
27141: LIST
27142: LIST
27143: PPUSH
27144: CALL_OW 72
27148: ST_TO_ADDR
// for j = 1 to temp_list - [ 5 , 4 , 3 ] [ difficulty ] do
27149: LD_ADDR_VAR 0 12
27153: PUSH
27154: DOUBLE
27155: LD_INT 1
27157: DEC
27158: ST_TO_ADDR
27159: LD_VAR 0 3
27163: PUSH
27164: LD_INT 5
27166: PUSH
27167: LD_INT 4
27169: PUSH
27170: LD_INT 3
27172: PUSH
27173: EMPTY
27174: LIST
27175: LIST
27176: LIST
27177: PUSH
27178: LD_OWVAR 67
27182: ARRAY
27183: MINUS
27184: PUSH
27185: FOR_TO
27186: IFFALSE 27212
// special_defenders = special_defenders ^ temp_list [ j ] ;
27188: LD_ADDR_VAR 0 14
27192: PUSH
27193: LD_VAR 0 14
27197: PUSH
27198: LD_VAR 0 3
27202: PUSH
27203: LD_VAR 0 12
27207: ARRAY
27208: ADD
27209: ST_TO_ADDR
27210: GO 27185
27212: POP
27213: POP
// end ;
27214: GO 27087
27216: POP
27217: POP
// end else
27218: GO 27227
// special_defenders = [ ] ;
27220: LD_ADDR_VAR 0 14
27224: PUSH
27225: EMPTY
27226: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
27227: LD_ADDR_VAR 0 3
27231: PUSH
27232: LD_EXP 75
27236: PUSH
27237: LD_VAR 0 7
27241: ARRAY
27242: ST_TO_ADDR
// for i in soldiers_list diff ai_heal_these_humans [ base ] do
27243: LD_ADDR_VAR 0 2
27247: PUSH
27248: LD_VAR 0 5
27252: PUSH
27253: LD_EXP 75
27257: PUSH
27258: LD_VAR 0 7
27262: ARRAY
27263: DIFF
27264: PUSH
27265: FOR_IN
27266: IFFALSE 27329
// if GetLives ( i ) <= 500 or ( GetLives ( i ) < 800 and not i in special_defenders ) then
27268: LD_VAR 0 2
27272: PPUSH
27273: CALL_OW 256
27277: PUSH
27278: LD_INT 500
27280: LESSEQUAL
27281: PUSH
27282: LD_VAR 0 2
27286: PPUSH
27287: CALL_OW 256
27291: PUSH
27292: LD_INT 800
27294: LESS
27295: PUSH
27296: LD_VAR 0 2
27300: PUSH
27301: LD_VAR 0 14
27305: IN
27306: NOT
27307: AND
27308: OR
27309: IFFALSE 27327
// temp_list = temp_list ^ i ;
27311: LD_ADDR_VAR 0 3
27315: PUSH
27316: LD_VAR 0 3
27320: PUSH
27321: LD_VAR 0 2
27325: ADD
27326: ST_TO_ADDR
27327: GO 27265
27329: POP
27330: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
27331: LD_ADDR_EXP 75
27335: PUSH
27336: LD_EXP 75
27340: PPUSH
27341: LD_VAR 0 7
27345: PPUSH
27346: LD_VAR 0 3
27350: PPUSH
27351: CALL_OW 1
27355: ST_TO_ADDR
// if not under_attack then
27356: LD_VAR 0 11
27360: NOT
27361: IFFALSE 27513
// begin for i in ai_heal_these_humans [ base ] do
27363: LD_ADDR_VAR 0 2
27367: PUSH
27368: LD_EXP 75
27372: PUSH
27373: LD_VAR 0 7
27377: ARRAY
27378: PUSH
27379: FOR_IN
27380: IFFALSE 27467
// if i in soldiers_list then
27382: LD_VAR 0 2
27386: PUSH
27387: LD_VAR 0 5
27391: IN
27392: IFFALSE 27465
// if IsInUnit ( i ) > 0 then
27394: LD_VAR 0 2
27398: PPUSH
27399: CALL_OW 310
27403: PUSH
27404: LD_INT 0
27406: GREATER
27407: IFFALSE 27465
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
27409: LD_VAR 0 2
27413: PPUSH
27414: CALL_OW 310
27418: PPUSH
27419: CALL_OW 247
27423: PUSH
27424: LD_INT 2
27426: DOUBLE
27427: EQUAL
27428: IFTRUE 27432
27430: GO 27444
27432: POP
// ComExitVehicle ( i ) ; unit_building :
27433: LD_VAR 0 2
27437: PPUSH
27438: CALL_OW 121
27442: GO 27465
27444: LD_INT 3
27446: DOUBLE
27447: EQUAL
27448: IFTRUE 27452
27450: GO 27464
27452: POP
// ComExitBuilding ( i ) ; end ;
27453: LD_VAR 0 2
27457: PPUSH
27458: CALL_OW 122
27462: GO 27465
27464: POP
27465: GO 27379
27467: POP
27468: POP
// soldiers_list = soldiers_list diff ai_heal_these_humans [ base ] ;
27469: LD_ADDR_VAR 0 5
27473: PUSH
27474: LD_VAR 0 5
27478: PUSH
27479: LD_EXP 75
27483: PUSH
27484: LD_VAR 0 7
27488: ARRAY
27489: DIFF
27490: ST_TO_ADDR
// special_defenders = special_defenders diff ai_heal_these_humans [ base ] ;
27491: LD_ADDR_VAR 0 14
27495: PUSH
27496: LD_VAR 0 14
27500: PUSH
27501: LD_EXP 75
27505: PUSH
27506: LD_VAR 0 7
27510: ARRAY
27511: DIFF
27512: ST_TO_ADDR
// end ; if soldiers_list = 0 then
27513: LD_VAR 0 5
27517: PUSH
27518: LD_INT 0
27520: EQUAL
27521: IFFALSE 27525
// continue ;
27523: GO 26193
// if special_defenders > 0 then
27525: LD_VAR 0 14
27529: PUSH
27530: LD_INT 0
27532: GREATER
27533: IFFALSE 27801
// begin case base of 1 :
27535: LD_VAR 0 7
27539: PUSH
27540: LD_INT 1
27542: DOUBLE
27543: EQUAL
27544: IFTRUE 27548
27546: GO 27598
27548: POP
// begin temp_list_2 = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_inarea , ru_bazooker_defend_area ] ] ) ;
27549: LD_ADDR_VAR 0 13
27553: PUSH
27554: LD_INT 81
27556: PUSH
27557: LD_VAR 0 1
27561: PUSH
27562: EMPTY
27563: LIST
27564: LIST
27565: PUSH
27566: LD_INT 21
27568: PUSH
27569: LD_INT 1
27571: PUSH
27572: EMPTY
27573: LIST
27574: LIST
27575: PUSH
27576: LD_INT 95
27578: PUSH
27579: LD_INT 27
27581: PUSH
27582: EMPTY
27583: LIST
27584: LIST
27585: PUSH
27586: EMPTY
27587: LIST
27588: LIST
27589: LIST
27590: PPUSH
27591: CALL_OW 69
27595: ST_TO_ADDR
// end ; 2 :
27596: GO 27733
27598: LD_INT 2
27600: DOUBLE
27601: EQUAL
27602: IFTRUE 27606
27604: GO 27616
27606: POP
// begin temp_list_2 = [ ] ;
27607: LD_ADDR_VAR 0 13
27611: PUSH
27612: EMPTY
27613: ST_TO_ADDR
// end ; 3 :
27614: GO 27733
27616: LD_INT 3
27618: DOUBLE
27619: EQUAL
27620: IFTRUE 27624
27622: GO 27674
27624: POP
// begin temp_list_2 = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_inarea , ar_mortar_defend_area ] ] ) ;
27625: LD_ADDR_VAR 0 13
27629: PUSH
27630: LD_INT 81
27632: PUSH
27633: LD_VAR 0 1
27637: PUSH
27638: EMPTY
27639: LIST
27640: LIST
27641: PUSH
27642: LD_INT 21
27644: PUSH
27645: LD_INT 1
27647: PUSH
27648: EMPTY
27649: LIST
27650: LIST
27651: PUSH
27652: LD_INT 95
27654: PUSH
27655: LD_INT 21
27657: PUSH
27658: EMPTY
27659: LIST
27660: LIST
27661: PUSH
27662: EMPTY
27663: LIST
27664: LIST
27665: LIST
27666: PPUSH
27667: CALL_OW 69
27671: ST_TO_ADDR
// end ; 4 :
27672: GO 27733
27674: LD_INT 4
27676: DOUBLE
27677: EQUAL
27678: IFTRUE 27682
27680: GO 27732
27682: POP
// begin temp_list_2 = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_inarea , am_sniper_defend_area ] ] ) ;
27683: LD_ADDR_VAR 0 13
27687: PUSH
27688: LD_INT 81
27690: PUSH
27691: LD_VAR 0 1
27695: PUSH
27696: EMPTY
27697: LIST
27698: LIST
27699: PUSH
27700: LD_INT 21
27702: PUSH
27703: LD_INT 1
27705: PUSH
27706: EMPTY
27707: LIST
27708: LIST
27709: PUSH
27710: LD_INT 95
27712: PUSH
27713: LD_INT 22
27715: PUSH
27716: EMPTY
27717: LIST
27718: LIST
27719: PUSH
27720: EMPTY
27721: LIST
27722: LIST
27723: LIST
27724: PPUSH
27725: CALL_OW 69
27729: ST_TO_ADDR
// end ; end ;
27730: GO 27733
27732: POP
// if temp_list_2 > 0 then
27733: LD_VAR 0 13
27737: PUSH
27738: LD_INT 0
27740: GREATER
27741: IFFALSE 27801
// begin soldiers_list = soldiers_list diff special_defenders ;
27743: LD_ADDR_VAR 0 5
27747: PUSH
27748: LD_VAR 0 5
27752: PUSH
27753: LD_VAR 0 14
27757: DIFF
27758: ST_TO_ADDR
// ComAgressiveMove ( GetHumansOutOfUnits ( special_defenders ) , GetX ( temp_list_2 [ 1 ] ) , GetY ( temp_list_2 [ 1 ] ) ) ;
27759: LD_VAR 0 14
27763: PPUSH
27764: CALL 45199 0 1
27768: PPUSH
27769: LD_VAR 0 13
27773: PUSH
27774: LD_INT 1
27776: ARRAY
27777: PPUSH
27778: CALL_OW 250
27782: PPUSH
27783: LD_VAR 0 13
27787: PUSH
27788: LD_INT 1
27790: ARRAY
27791: PPUSH
27792: CALL_OW 251
27796: PPUSH
27797: CALL_OW 114
// end ; end ; i = false ;
27801: LD_ADDR_VAR 0 2
27805: PUSH
27806: LD_INT 0
27808: ST_TO_ADDR
// if IsOk ( ai_depot [ base ] ) then
27809: LD_EXP 49
27813: PUSH
27814: LD_VAR 0 7
27818: ARRAY
27819: PPUSH
27820: CALL_OW 302
27824: IFFALSE 27864
// if GetEnergy ( GetBase ( ai_depot [ base ] ) ) [ 4 ] > 0 then
27826: LD_EXP 49
27830: PUSH
27831: LD_VAR 0 7
27835: ARRAY
27836: PPUSH
27837: CALL_OW 274
27841: PPUSH
27842: CALL_OW 278
27846: PUSH
27847: LD_INT 4
27849: ARRAY
27850: PUSH
27851: LD_INT 0
27853: GREATER
27854: IFFALSE 27864
// i = true ;
27856: LD_ADDR_VAR 0 2
27860: PUSH
27861: LD_INT 1
27863: ST_TO_ADDR
// if i or ( base = 1 and difficulty = 1 ) or ( base = 4 and difficulty = 1 ) then
27864: LD_VAR 0 2
27868: PUSH
27869: LD_VAR 0 7
27873: PUSH
27874: LD_INT 1
27876: EQUAL
27877: PUSH
27878: LD_OWVAR 67
27882: PUSH
27883: LD_INT 1
27885: EQUAL
27886: AND
27887: OR
27888: PUSH
27889: LD_VAR 0 7
27893: PUSH
27894: LD_INT 4
27896: EQUAL
27897: PUSH
27898: LD_OWVAR 67
27902: PUSH
27903: LD_INT 1
27905: EQUAL
27906: AND
27907: OR
27908: IFFALSE 27928
// bunkers = ai_bunkers [ base ] else
27910: LD_ADDR_VAR 0 10
27914: PUSH
27915: LD_EXP 53
27919: PUSH
27920: LD_VAR 0 7
27924: ARRAY
27925: ST_TO_ADDR
27926: GO 27989
// begin bunkers = [ ] ;
27928: LD_ADDR_VAR 0 10
27932: PUSH
27933: EMPTY
27934: ST_TO_ADDR
// for i in ai_bunkers [ base ] do
27935: LD_ADDR_VAR 0 2
27939: PUSH
27940: LD_EXP 53
27944: PUSH
27945: LD_VAR 0 7
27949: ARRAY
27950: PUSH
27951: FOR_IN
27952: IFFALSE 27987
// if GetBType ( i ) = b_breastwork then
27954: LD_VAR 0 2
27958: PPUSH
27959: CALL_OW 266
27963: PUSH
27964: LD_INT 31
27966: EQUAL
27967: IFFALSE 27985
// bunkers = bunkers ^ i ;
27969: LD_ADDR_VAR 0 10
27973: PUSH
27974: LD_VAR 0 10
27978: PUSH
27979: LD_VAR 0 2
27983: ADD
27984: ST_TO_ADDR
27985: GO 27951
27987: POP
27988: POP
// end ; buildings_list = [ ] ;
27989: LD_ADDR_VAR 0 4
27993: PUSH
27994: EMPTY
27995: ST_TO_ADDR
// for i in UnitFilter ( bunkers , [ f_ok ] ) do
27996: LD_ADDR_VAR 0 2
28000: PUSH
28001: LD_VAR 0 10
28005: PPUSH
28006: LD_INT 50
28008: PUSH
28009: EMPTY
28010: LIST
28011: PPUSH
28012: CALL_OW 72
28016: PUSH
28017: FOR_IN
28018: IFFALSE 28081
// begin temp_unit = UnitsInside ( i ) ;
28020: LD_ADDR_VAR 0 6
28024: PUSH
28025: LD_VAR 0 2
28029: PPUSH
28030: CALL_OW 313
28034: ST_TO_ADDR
// if temp_unit = 0 then
28035: LD_VAR 0 6
28039: PUSH
28040: LD_INT 0
28042: EQUAL
28043: IFFALSE 28063
// buildings_list = buildings_list ^ i else
28045: LD_ADDR_VAR 0 4
28049: PUSH
28050: LD_VAR 0 4
28054: PUSH
28055: LD_VAR 0 2
28059: ADD
28060: ST_TO_ADDR
28061: GO 28079
// soldiers_list = soldiers_list diff temp_unit ;
28063: LD_ADDR_VAR 0 5
28067: PUSH
28068: LD_VAR 0 5
28072: PUSH
28073: LD_VAR 0 6
28077: DIFF
28078: ST_TO_ADDR
// end ;
28079: GO 28017
28081: POP
28082: POP
// if buildings_list > 0 then
28083: LD_VAR 0 4
28087: PUSH
28088: LD_INT 0
28090: GREATER
28091: IFFALSE 28638
// begin if not under_attack then
28093: LD_VAR 0 11
28097: NOT
28098: IFFALSE 28168
// begin temp_list = [ ] ;
28100: LD_ADDR_VAR 0 3
28104: PUSH
28105: EMPTY
28106: ST_TO_ADDR
// for i in soldiers_list do
28107: LD_ADDR_VAR 0 2
28111: PUSH
28112: LD_VAR 0 5
28116: PUSH
28117: FOR_IN
28118: IFFALSE 28146
// temp_list = temp_list ^ GetSkill ( i , skill_combat ) ;
28120: LD_ADDR_VAR 0 3
28124: PUSH
28125: LD_VAR 0 3
28129: PUSH
28130: LD_VAR 0 2
28134: PPUSH
28135: LD_INT 1
28137: PPUSH
28138: CALL_OW 259
28142: ADD
28143: ST_TO_ADDR
28144: GO 28117
28146: POP
28147: POP
// soldiers_list = SortListByListDesc ( soldiers_list , temp_list ) ;
28148: LD_ADDR_VAR 0 5
28152: PUSH
28153: LD_VAR 0 5
28157: PPUSH
28158: LD_VAR 0 3
28162: PPUSH
28163: CALL_OW 77
28167: ST_TO_ADDR
// end ; special_units = UnitFilter ( soldiers_list , [ f_or , [ f_class , class_bazooker ] , [ f_class , class_sniper ] , [ f_class , class_mortar ] ] ) ;
28168: LD_ADDR_VAR 0 9
28172: PUSH
28173: LD_VAR 0 5
28177: PPUSH
28178: LD_INT 2
28180: PUSH
28181: LD_INT 25
28183: PUSH
28184: LD_INT 9
28186: PUSH
28187: EMPTY
28188: LIST
28189: LIST
28190: PUSH
28191: LD_INT 25
28193: PUSH
28194: LD_INT 5
28196: PUSH
28197: EMPTY
28198: LIST
28199: LIST
28200: PUSH
28201: LD_INT 25
28203: PUSH
28204: LD_INT 8
28206: PUSH
28207: EMPTY
28208: LIST
28209: LIST
28210: PUSH
28211: EMPTY
28212: LIST
28213: LIST
28214: LIST
28215: LIST
28216: PPUSH
28217: CALL_OW 72
28221: ST_TO_ADDR
// soldiers_list = soldiers_list diff special_units ;
28222: LD_ADDR_VAR 0 5
28226: PUSH
28227: LD_VAR 0 5
28231: PUSH
28232: LD_VAR 0 9
28236: DIFF
28237: ST_TO_ADDR
// for i = 1 to buildings_list do
28238: LD_ADDR_VAR 0 2
28242: PUSH
28243: DOUBLE
28244: LD_INT 1
28246: DEC
28247: ST_TO_ADDR
28248: LD_VAR 0 4
28252: PUSH
28253: FOR_TO
28254: IFFALSE 28634
// begin if soldiers_list = 0 then
28256: LD_VAR 0 5
28260: PUSH
28261: LD_INT 0
28263: EQUAL
28264: IFFALSE 28295
// begin if special_units = 0 then
28266: LD_VAR 0 9
28270: PUSH
28271: LD_INT 0
28273: EQUAL
28274: IFFALSE 28278
// break ;
28276: GO 28634
// soldiers_list = special_units ;
28278: LD_ADDR_VAR 0 5
28282: PUSH
28283: LD_VAR 0 9
28287: ST_TO_ADDR
// special_units = [ ] ;
28288: LD_ADDR_VAR 0 9
28292: PUSH
28293: EMPTY
28294: ST_TO_ADDR
// end ; if not under_attack then
28295: LD_VAR 0 11
28299: NOT
28300: IFFALSE 28365
// begin if GetBType ( buildings_list [ i ] ) = b_breastwork and special_units > 0 then
28302: LD_VAR 0 4
28306: PUSH
28307: LD_VAR 0 2
28311: ARRAY
28312: PPUSH
28313: CALL_OW 266
28317: PUSH
28318: LD_INT 31
28320: EQUAL
28321: PUSH
28322: LD_VAR 0 9
28326: PUSH
28327: LD_INT 0
28329: GREATER
28330: AND
28331: IFFALSE 28349
// temp_unit = special_units [ 1 ] else
28333: LD_ADDR_VAR 0 6
28337: PUSH
28338: LD_VAR 0 9
28342: PUSH
28343: LD_INT 1
28345: ARRAY
28346: ST_TO_ADDR
28347: GO 28363
// temp_unit = soldiers_list [ 1 ] ;
28349: LD_ADDR_VAR 0 6
28353: PUSH
28354: LD_VAR 0 5
28358: PUSH
28359: LD_INT 1
28361: ARRAY
28362: ST_TO_ADDR
// end else
28363: GO 28494
// begin if GetBType ( buildings_list [ i ] ) = b_breastwork and special_units > 0 then
28365: LD_VAR 0 4
28369: PUSH
28370: LD_VAR 0 2
28374: ARRAY
28375: PPUSH
28376: CALL_OW 266
28380: PUSH
28381: LD_INT 31
28383: EQUAL
28384: PUSH
28385: LD_VAR 0 9
28389: PUSH
28390: LD_INT 0
28392: GREATER
28393: AND
28394: IFFALSE 28408
// temp_list_2 = special_units else
28396: LD_ADDR_VAR 0 13
28400: PUSH
28401: LD_VAR 0 9
28405: ST_TO_ADDR
28406: GO 28418
// temp_list_2 = soldiers_list ;
28408: LD_ADDR_VAR 0 13
28412: PUSH
28413: LD_VAR 0 5
28417: ST_TO_ADDR
// temp_list = [ ] ;
28418: LD_ADDR_VAR 0 3
28422: PUSH
28423: EMPTY
28424: ST_TO_ADDR
// for j in temp_list_2 do
28425: LD_ADDR_VAR 0 12
28429: PUSH
28430: LD_VAR 0 13
28434: PUSH
28435: FOR_IN
28436: IFFALSE 28472
// temp_list = temp_list ^ GetDistUnits ( j , buildings_list [ i ] ) ;
28438: LD_ADDR_VAR 0 3
28442: PUSH
28443: LD_VAR 0 3
28447: PUSH
28448: LD_VAR 0 12
28452: PPUSH
28453: LD_VAR 0 4
28457: PUSH
28458: LD_VAR 0 2
28462: ARRAY
28463: PPUSH
28464: CALL_OW 296
28468: ADD
28469: ST_TO_ADDR
28470: GO 28435
28472: POP
28473: POP
// temp_unit = WorstFromListByList ( temp_list_2 , temp_list ) ;
28474: LD_ADDR_VAR 0 6
28478: PUSH
28479: LD_VAR 0 13
28483: PPUSH
28484: LD_VAR 0 3
28488: PPUSH
28489: CALL_OW 78
28493: ST_TO_ADDR
// end ; if IsOk ( buildings_list [ i ] ) then
28494: LD_VAR 0 4
28498: PUSH
28499: LD_VAR 0 2
28503: ARRAY
28504: PPUSH
28505: CALL_OW 302
28509: IFFALSE 28533
// ComEnterUnit ( temp_unit , buildings_list [ i ] ) else
28511: LD_VAR 0 6
28515: PPUSH
28516: LD_VAR 0 4
28520: PUSH
28521: LD_VAR 0 2
28525: ARRAY
28526: PPUSH
28527: CALL_OW 120
28531: GO 28600
// if GetDistUnits ( temp_unit , buildings_list [ i ] ) > 4 then
28533: LD_VAR 0 6
28537: PPUSH
28538: LD_VAR 0 4
28542: PUSH
28543: LD_VAR 0 2
28547: ARRAY
28548: PPUSH
28549: CALL_OW 296
28553: PUSH
28554: LD_INT 4
28556: GREATER
28557: IFFALSE 28600
// ComAgressiveMove ( temp_unit , GetX ( buildings_list [ i ] ) , GetY ( buildings_list [ i ] ) ) ;
28559: LD_VAR 0 6
28563: PPUSH
28564: LD_VAR 0 4
28568: PUSH
28569: LD_VAR 0 2
28573: ARRAY
28574: PPUSH
28575: CALL_OW 250
28579: PPUSH
28580: LD_VAR 0 4
28584: PUSH
28585: LD_VAR 0 2
28589: ARRAY
28590: PPUSH
28591: CALL_OW 251
28595: PPUSH
28596: CALL_OW 114
// soldiers_list = soldiers_list diff temp_unit ;
28600: LD_ADDR_VAR 0 5
28604: PUSH
28605: LD_VAR 0 5
28609: PUSH
28610: LD_VAR 0 6
28614: DIFF
28615: ST_TO_ADDR
// special_units = special_units diff temp_unit ;
28616: LD_ADDR_VAR 0 9
28620: PUSH
28621: LD_VAR 0 9
28625: PUSH
28626: LD_VAR 0 6
28630: DIFF
28631: ST_TO_ADDR
// end ;
28632: GO 28253
28634: POP
28635: POP
// end else
28636: GO 28645
// special_units = [ ] ;
28638: LD_ADDR_VAR 0 9
28642: PUSH
28643: EMPTY
28644: ST_TO_ADDR
// DistributeHumansToBuildings ( base , soldiers_list ^ special_units , UnitFilter ( ai_armouries [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , false , 6 , true , true ) ;
28645: LD_VAR 0 7
28649: PPUSH
28650: LD_VAR 0 5
28654: PUSH
28655: LD_VAR 0 9
28659: ADD
28660: PPUSH
28661: LD_EXP 52
28665: PUSH
28666: LD_VAR 0 7
28670: ARRAY
28671: PPUSH
28672: LD_INT 50
28674: PUSH
28675: EMPTY
28676: LIST
28677: PUSH
28678: LD_INT 3
28680: PUSH
28681: LD_INT 57
28683: PUSH
28684: EMPTY
28685: LIST
28686: PUSH
28687: EMPTY
28688: LIST
28689: LIST
28690: PUSH
28691: EMPTY
28692: LIST
28693: LIST
28694: PPUSH
28695: CALL_OW 72
28699: PPUSH
28700: LD_INT 0
28702: PPUSH
28703: LD_INT 6
28705: PPUSH
28706: LD_INT 1
28708: PPUSH
28709: LD_INT 1
28711: PPUSH
28712: CALL 34075 0 7
// if base = 1 then
28716: LD_VAR 0 7
28720: PUSH
28721: LD_INT 1
28723: EQUAL
28724: IFFALSE 28917
// begin if ai_armouries [ 1 ] > 0 then
28726: LD_EXP 52
28730: PUSH
28731: LD_INT 1
28733: ARRAY
28734: PUSH
28735: LD_INT 0
28737: GREATER
28738: IFFALSE 28760
// temp_unit = ai_armouries [ 1 ] [ 1 ] else
28740: LD_ADDR_VAR 0 6
28744: PUSH
28745: LD_EXP 52
28749: PUSH
28750: LD_INT 1
28752: ARRAY
28753: PUSH
28754: LD_INT 1
28756: ARRAY
28757: ST_TO_ADDR
28758: GO 28768
// temp_unit = 0 ;
28760: LD_ADDR_VAR 0 6
28764: PUSH
28765: LD_INT 0
28767: ST_TO_ADDR
// if temp_unit > 0 then
28768: LD_VAR 0 6
28772: PUSH
28773: LD_INT 0
28775: GREATER
28776: IFFALSE 28917
// if GetBType ( temp_unit ) = b_barracks then
28778: LD_VAR 0 6
28782: PPUSH
28783: CALL_OW 266
28787: PUSH
28788: LD_INT 5
28790: EQUAL
28791: IFFALSE 28917
// begin temp_list = [ HexInfo ( 67 , 61 ) , HexInfo ( 77 , 56 ) ] ;
28793: LD_ADDR_VAR 0 3
28797: PUSH
28798: LD_INT 67
28800: PPUSH
28801: LD_INT 61
28803: PPUSH
28804: CALL_OW 428
28808: PUSH
28809: LD_INT 77
28811: PPUSH
28812: LD_INT 56
28814: PPUSH
28815: CALL_OW 428
28819: PUSH
28820: EMPTY
28821: LIST
28822: LIST
28823: ST_TO_ADDR
// temp_list = UnitFilter ( temp_list , [ f_btype , b_siberite_mine ] ) ;
28824: LD_ADDR_VAR 0 3
28828: PUSH
28829: LD_VAR 0 3
28833: PPUSH
28834: LD_INT 30
28836: PUSH
28837: LD_INT 30
28839: PUSH
28840: EMPTY
28841: LIST
28842: LIST
28843: PPUSH
28844: CALL_OW 72
28848: ST_TO_ADDR
// if temp_list > 0 then
28849: LD_VAR 0 3
28853: PUSH
28854: LD_INT 0
28856: GREATER
28857: IFFALSE 28917
// begin temp_list_2 = UnitsInside ( temp_unit ) ;
28859: LD_ADDR_VAR 0 13
28863: PUSH
28864: LD_VAR 0 6
28868: PPUSH
28869: CALL_OW 313
28873: ST_TO_ADDR
// temp_list_2 = UnitFilter ( temp_list_2 , [ f_class , class_bazooker ] ) ;
28874: LD_ADDR_VAR 0 13
28878: PUSH
28879: LD_VAR 0 13
28883: PPUSH
28884: LD_INT 25
28886: PUSH
28887: LD_INT 9
28889: PUSH
28890: EMPTY
28891: LIST
28892: LIST
28893: PPUSH
28894: CALL_OW 72
28898: ST_TO_ADDR
// ComAttackUnit ( temp_list_2 , temp_list [ 1 ] ) ;
28899: LD_VAR 0 13
28903: PPUSH
28904: LD_VAR 0 3
28908: PUSH
28909: LD_INT 1
28911: ARRAY
28912: PPUSH
28913: CALL_OW 115
// end ; end ; end ; end ;
28917: GO 26193
28919: POP
28920: POP
// until false ;
28921: LD_INT 0
28923: IFFALSE 26154
// end ;
28925: PPOPN 14
28927: END
// every 0 0$1 + 0 0$0.2 do var temp_unit , i ;
28928: GO 28930
28930: DISABLE
28931: LD_INT 0
28933: PPUSH
28934: PPUSH
// begin repeat wait ( 0 0$2 ) ;
28935: LD_INT 70
28937: PPUSH
28938: CALL_OW 67
// if not 1 in ai_bases then
28942: LD_INT 1
28944: PUSH
28945: LD_EXP 39
28949: IN
28950: NOT
28951: IFFALSE 28955
// exit ;
28953: GO 29129
// temp_unit = HexInfo ( 38 , 57 ) ;
28955: LD_ADDR_VAR 0 1
28959: PUSH
28960: LD_INT 38
28962: PPUSH
28963: LD_INT 57
28965: PPUSH
28966: CALL_OW 428
28970: ST_TO_ADDR
// if temp_unit <= 0 then
28971: LD_VAR 0 1
28975: PUSH
28976: LD_INT 0
28978: LESSEQUAL
28979: IFFALSE 28983
// continue ;
28981: GO 28935
// if GetType ( temp_unit ) <> unit_building then
28983: LD_VAR 0 1
28987: PPUSH
28988: CALL_OW 247
28992: PUSH
28993: LD_INT 3
28995: NONEQUAL
28996: IFFALSE 29000
// continue ;
28998: GO 28935
// if GetBType ( temp_unit ) <> b_siberite_mine then
29000: LD_VAR 0 1
29004: PPUSH
29005: CALL_OW 266
29009: PUSH
29010: LD_INT 30
29012: NONEQUAL
29013: IFFALSE 29017
// continue ;
29015: GO 28935
// for i in ai_bunkers [ 1 ] ^ ai_turrets [ 1 ] do
29017: LD_ADDR_VAR 0 2
29021: PUSH
29022: LD_EXP 53
29026: PUSH
29027: LD_INT 1
29029: ARRAY
29030: PUSH
29031: LD_EXP 54
29035: PUSH
29036: LD_INT 1
29038: ARRAY
29039: ADD
29040: PUSH
29041: FOR_IN
29042: IFFALSE 29123
// if GetBWeapon ( i ) in [ ru_rocket_launcher , ru_rocket ] then
29044: LD_VAR 0 2
29048: PPUSH
29049: CALL_OW 269
29053: PUSH
29054: LD_INT 45
29056: PUSH
29057: LD_INT 47
29059: PUSH
29060: EMPTY
29061: LIST
29062: LIST
29063: IN
29064: IFFALSE 29121
// if IsOk ( i ) and GetY ( i ) > 34 and GetY ( i ) < 43 then
29066: LD_VAR 0 2
29070: PPUSH
29071: CALL_OW 302
29075: PUSH
29076: LD_VAR 0 2
29080: PPUSH
29081: CALL_OW 251
29085: PUSH
29086: LD_INT 34
29088: GREATER
29089: AND
29090: PUSH
29091: LD_VAR 0 2
29095: PPUSH
29096: CALL_OW 251
29100: PUSH
29101: LD_INT 43
29103: LESS
29104: AND
29105: IFFALSE 29121
// ComAttackUnit ( i , temp_unit ) ;
29107: LD_VAR 0 2
29111: PPUSH
29112: LD_VAR 0 1
29116: PPUSH
29117: CALL_OW 115
29121: GO 29041
29123: POP
29124: POP
// until false ;
29125: LD_INT 0
29127: IFFALSE 28935
// end ;
29129: PPOPN 2
29131: END
// on EvacuateVehicle ( driver , abandoned_vehicle , unknown1 , unknown2 ) do begin if driver = Omar then
29132: LD_VAR 0 1
29136: PUSH
29137: LD_EXP 29
29141: EQUAL
29142: IFFALSE 29153
// ComSabre ( driver ) ;
29144: LD_VAR 0 1
29148: PPUSH
29149: CALL_OW 163
// end ;
29153: PPOPN 4
29155: END
// every 0 0$1 + 0 0$0.3 do var base , center_hexes , i , temp_list , k , guy , temp_list_2 ; var under_attack , target_hex , num_mines_being_placed ;
29156: GO 29158
29158: DISABLE
29159: LD_INT 0
29161: PPUSH
29162: PPUSH
29163: PPUSH
29164: PPUSH
29165: PPUSH
29166: PPUSH
29167: PPUSH
29168: PPUSH
29169: PPUSH
29170: PPUSH
// begin target_hex = [ ] ;
29171: LD_ADDR_VAR 0 9
29175: PUSH
29176: EMPTY
29177: ST_TO_ADDR
// num_mines_being_placed = [ 0 , 0 , 0 , 0 ] ;
29178: LD_ADDR_VAR 0 10
29182: PUSH
29183: LD_INT 0
29185: PUSH
29186: LD_INT 0
29188: PUSH
29189: LD_INT 0
29191: PUSH
29192: LD_INT 0
29194: PUSH
29195: EMPTY
29196: LIST
29197: LIST
29198: LIST
29199: LIST
29200: ST_TO_ADDR
// repeat if ai_bases = 0 then
29201: LD_EXP 39
29205: PUSH
29206: LD_INT 0
29208: EQUAL
29209: IFFALSE 29213
// exit ;
29211: GO 30915
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
29213: LD_INT 35
29215: PUSH
29216: LD_EXP 39
29220: PUSH
29221: LD_INT 0
29223: PLUS
29224: MOD
29225: PPUSH
29226: CALL_OW 67
// for base in ai_bases do
29230: LD_ADDR_VAR 0 1
29234: PUSH
29235: LD_EXP 39
29239: PUSH
29240: FOR_IN
29241: IFFALSE 30909
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
29243: LD_INT 35
29245: PUSH
29246: LD_EXP 39
29250: PUSH
29251: LD_INT 0
29253: PLUS
29254: DIV
29255: PPUSH
29256: CALL_OW 67
// temp_list = [ ] ;
29260: LD_ADDR_VAR 0 4
29264: PUSH
29265: EMPTY
29266: ST_TO_ADDR
// for i in ai_mine_guys [ base ] do
29267: LD_ADDR_VAR 0 3
29271: PUSH
29272: LD_EXP 120
29276: PUSH
29277: LD_VAR 0 1
29281: ARRAY
29282: PUSH
29283: FOR_IN
29284: IFFALSE 29428
// begin if target_hex + 0 < i then
29286: LD_VAR 0 9
29290: PUSH
29291: LD_INT 0
29293: PLUS
29294: PUSH
29295: LD_VAR 0 3
29299: LESS
29300: IFFALSE 29324
// target_hex = Replace ( target_hex , i , [ ] ) ;
29302: LD_ADDR_VAR 0 9
29306: PUSH
29307: LD_VAR 0 9
29311: PPUSH
29312: LD_VAR 0 3
29316: PPUSH
29317: EMPTY
29318: PPUSH
29319: CALL_OW 1
29323: ST_TO_ADDR
// if IsLive ( i ) then
29324: LD_VAR 0 3
29328: PPUSH
29329: CALL_OW 300
29333: IFFALSE 29353
// temp_list = temp_list ^ i else
29335: LD_ADDR_VAR 0 4
29339: PUSH
29340: LD_VAR 0 4
29344: PUSH
29345: LD_VAR 0 3
29349: ADD
29350: ST_TO_ADDR
29351: GO 29426
// if target_hex [ i ] > 0 then
29353: LD_VAR 0 9
29357: PUSH
29358: LD_VAR 0 3
29362: ARRAY
29363: PUSH
29364: LD_INT 0
29366: GREATER
29367: IFFALSE 29426
// begin target_hex = Replace ( target_hex , i , [ ] ) ;
29369: LD_ADDR_VAR 0 9
29373: PUSH
29374: LD_VAR 0 9
29378: PPUSH
29379: LD_VAR 0 3
29383: PPUSH
29384: EMPTY
29385: PPUSH
29386: CALL_OW 1
29390: ST_TO_ADDR
// num_mines_being_placed = Replace ( num_mines_being_placed , base , num_mines_being_placed [ base ] - 1 ) ;
29391: LD_ADDR_VAR 0 10
29395: PUSH
29396: LD_VAR 0 10
29400: PPUSH
29401: LD_VAR 0 1
29405: PPUSH
29406: LD_VAR 0 10
29410: PUSH
29411: LD_VAR 0 1
29415: ARRAY
29416: PUSH
29417: LD_INT 1
29419: MINUS
29420: PPUSH
29421: CALL_OW 1
29425: ST_TO_ADDR
// end ; end ;
29426: GO 29283
29428: POP
29429: POP
// ai_mine_guys = Replace ( ai_mine_guys , base , temp_list ) ;
29430: LD_ADDR_EXP 120
29434: PUSH
29435: LD_EXP 120
29439: PPUSH
29440: LD_VAR 0 1
29444: PPUSH
29445: LD_VAR 0 4
29449: PPUSH
29450: CALL_OW 1
29454: ST_TO_ADDR
// if ai_mine_guys [ base ] = 0 then
29455: LD_EXP 120
29459: PUSH
29460: LD_VAR 0 1
29464: ARRAY
29465: PUSH
29466: LD_INT 0
29468: EQUAL
29469: IFFALSE 29473
// continue ;
29471: GO 29240
// under_attack = BaseUnderAttack ( base , - 1 ) ;
29473: LD_ADDR_VAR 0 8
29477: PUSH
29478: LD_VAR 0 1
29482: PPUSH
29483: LD_INT 1
29485: NEG
29486: PPUSH
29487: CALL 45321 0 2
29491: ST_TO_ADDR
// for guy in ai_mine_guys [ base ] do
29492: LD_ADDR_VAR 0 6
29496: PUSH
29497: LD_EXP 120
29501: PUSH
29502: LD_VAR 0 1
29506: ARRAY
29507: PUSH
29508: FOR_IN
29509: IFFALSE 30905
// begin if GetLives ( guy ) < 900 and guy in ai_excepted_soldiers [ base ] and not guy in ai_heal_these_humans [ base ] then
29511: LD_VAR 0 6
29515: PPUSH
29516: CALL_OW 256
29520: PUSH
29521: LD_INT 900
29523: LESS
29524: PUSH
29525: LD_VAR 0 6
29529: PUSH
29530: LD_EXP 48
29534: PUSH
29535: LD_VAR 0 1
29539: ARRAY
29540: IN
29541: AND
29542: PUSH
29543: LD_VAR 0 6
29547: PUSH
29548: LD_EXP 75
29552: PUSH
29553: LD_VAR 0 1
29557: ARRAY
29558: IN
29559: NOT
29560: AND
29561: IFFALSE 29610
// begin temp_list = ai_heal_these_humans [ base ] ^ guy ;
29563: LD_ADDR_VAR 0 4
29567: PUSH
29568: LD_EXP 75
29572: PUSH
29573: LD_VAR 0 1
29577: ARRAY
29578: PUSH
29579: LD_VAR 0 6
29583: ADD
29584: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
29585: LD_ADDR_EXP 75
29589: PUSH
29590: LD_EXP 75
29594: PPUSH
29595: LD_VAR 0 1
29599: PPUSH
29600: LD_VAR 0 4
29604: PPUSH
29605: CALL_OW 1
29609: ST_TO_ADDR
// end ; if ( ai_defence_replace_mines_hexes [ base ] + num_mines_being_placed [ base ] >= ai_defence_max_num_replace_mines [ base ] and target_hex [ guy ] = 0 ) or under_attack or guy in ai_heal_these_humans [ base ] then
29610: LD_EXP 121
29614: PUSH
29615: LD_VAR 0 1
29619: ARRAY
29620: PUSH
29621: LD_VAR 0 10
29625: PUSH
29626: LD_VAR 0 1
29630: ARRAY
29631: PLUS
29632: PUSH
29633: LD_EXP 119
29637: PUSH
29638: LD_VAR 0 1
29642: ARRAY
29643: GREATEREQUAL
29644: PUSH
29645: LD_VAR 0 9
29649: PUSH
29650: LD_VAR 0 6
29654: ARRAY
29655: PUSH
29656: LD_INT 0
29658: EQUAL
29659: AND
29660: PUSH
29661: LD_VAR 0 8
29665: OR
29666: PUSH
29667: LD_VAR 0 6
29671: PUSH
29672: LD_EXP 75
29676: PUSH
29677: LD_VAR 0 1
29681: ARRAY
29682: IN
29683: OR
29684: IFFALSE 29826
// begin if guy in ai_excepted_soldiers [ base ] then
29686: LD_VAR 0 6
29690: PUSH
29691: LD_EXP 48
29695: PUSH
29696: LD_VAR 0 1
29700: ARRAY
29701: IN
29702: IFFALSE 29751
// begin temp_list = ai_excepted_soldiers [ base ] diff guy ;
29704: LD_ADDR_VAR 0 4
29708: PUSH
29709: LD_EXP 48
29713: PUSH
29714: LD_VAR 0 1
29718: ARRAY
29719: PUSH
29720: LD_VAR 0 6
29724: DIFF
29725: ST_TO_ADDR
// ai_excepted_soldiers = Replace ( ai_excepted_soldiers , base , temp_list ) ;
29726: LD_ADDR_EXP 48
29730: PUSH
29731: LD_EXP 48
29735: PPUSH
29736: LD_VAR 0 1
29740: PPUSH
29741: LD_VAR 0 4
29745: PPUSH
29746: CALL_OW 1
29750: ST_TO_ADDR
// end ; if target_hex [ guy ] > 0 then
29751: LD_VAR 0 9
29755: PUSH
29756: LD_VAR 0 6
29760: ARRAY
29761: PUSH
29762: LD_INT 0
29764: GREATER
29765: IFFALSE 29824
// begin target_hex = Replace ( target_hex , guy , [ ] ) ;
29767: LD_ADDR_VAR 0 9
29771: PUSH
29772: LD_VAR 0 9
29776: PPUSH
29777: LD_VAR 0 6
29781: PPUSH
29782: EMPTY
29783: PPUSH
29784: CALL_OW 1
29788: ST_TO_ADDR
// num_mines_being_placed = Replace ( num_mines_being_placed , base , num_mines_being_placed [ base ] - 1 ) ;
29789: LD_ADDR_VAR 0 10
29793: PUSH
29794: LD_VAR 0 10
29798: PPUSH
29799: LD_VAR 0 1
29803: PPUSH
29804: LD_VAR 0 10
29808: PUSH
29809: LD_VAR 0 1
29813: ARRAY
29814: PUSH
29815: LD_INT 1
29817: MINUS
29818: PPUSH
29819: CALL_OW 1
29823: ST_TO_ADDR
// end ; continue ;
29824: GO 29508
// end ; if target_hex [ guy ] = 0 then
29826: LD_VAR 0 9
29830: PUSH
29831: LD_VAR 0 6
29835: ARRAY
29836: PUSH
29837: LD_INT 0
29839: EQUAL
29840: IFFALSE 30233
// begin center_hexes = ai_defence_replace_mines_centerhexes [ base ] ;
29842: LD_ADDR_VAR 0 2
29846: PUSH
29847: LD_EXP 117
29851: PUSH
29852: LD_VAR 0 1
29856: ARRAY
29857: ST_TO_ADDR
// for i in ai_defence_replace_mines_hexes [ base ] do
29858: LD_ADDR_VAR 0 3
29862: PUSH
29863: LD_EXP 121
29867: PUSH
29868: LD_VAR 0 1
29872: ARRAY
29873: PUSH
29874: FOR_IN
29875: IFFALSE 29984
// begin temp_list = [ ] ;
29877: LD_ADDR_VAR 0 4
29881: PUSH
29882: EMPTY
29883: ST_TO_ADDR
// for k in center_hexes do
29884: LD_ADDR_VAR 0 5
29888: PUSH
29889: LD_VAR 0 2
29893: PUSH
29894: FOR_IN
29895: IFFALSE 29951
// temp_list = temp_list ^ GetDistXY ( i [ 1 ] , i [ 2 ] , k [ 1 ] , k [ 2 ] ) ;
29897: LD_ADDR_VAR 0 4
29901: PUSH
29902: LD_VAR 0 4
29906: PUSH
29907: LD_VAR 0 3
29911: PUSH
29912: LD_INT 1
29914: ARRAY
29915: PPUSH
29916: LD_VAR 0 3
29920: PUSH
29921: LD_INT 2
29923: ARRAY
29924: PPUSH
29925: LD_VAR 0 5
29929: PUSH
29930: LD_INT 1
29932: ARRAY
29933: PPUSH
29934: LD_VAR 0 5
29938: PUSH
29939: LD_INT 2
29941: ARRAY
29942: PPUSH
29943: CALL_OW 298
29947: ADD
29948: ST_TO_ADDR
29949: GO 29894
29951: POP
29952: POP
// center_hexes = center_hexes diff [ WorstFromListByList ( center_hexes , temp_list ) ] ;
29953: LD_ADDR_VAR 0 2
29957: PUSH
29958: LD_VAR 0 2
29962: PUSH
29963: LD_VAR 0 2
29967: PPUSH
29968: LD_VAR 0 4
29972: PPUSH
29973: CALL_OW 78
29977: PUSH
29978: EMPTY
29979: LIST
29980: DIFF
29981: ST_TO_ADDR
// end ;
29982: GO 29874
29984: POP
29985: POP
// if center_hexes = 0 then
29986: LD_VAR 0 2
29990: PUSH
29991: LD_INT 0
29993: EQUAL
29994: IFFALSE 29998
// continue ;
29996: GO 29508
// k = Rand ( 1 , center_hexes ) ;
29998: LD_ADDR_VAR 0 5
30002: PUSH
30003: LD_INT 1
30005: PPUSH
30006: LD_VAR 0 2
30010: PPUSH
30011: CALL_OW 12
30015: ST_TO_ADDR
// k = center_hexes [ k ] ;
30016: LD_ADDR_VAR 0 5
30020: PUSH
30021: LD_VAR 0 2
30025: PUSH
30026: LD_VAR 0 5
30030: ARRAY
30031: ST_TO_ADDR
// temp_list = GetHexesNearHex ( k [ 1 ] , k [ 2 ] , 1 ) ;
30032: LD_ADDR_VAR 0 4
30036: PUSH
30037: LD_VAR 0 5
30041: PUSH
30042: LD_INT 1
30044: ARRAY
30045: PPUSH
30046: LD_VAR 0 5
30050: PUSH
30051: LD_INT 2
30053: ARRAY
30054: PPUSH
30055: LD_INT 1
30057: PPUSH
30058: CALL 19717 0 3
30062: ST_TO_ADDR
// repeat k = Rand ( 1 , temp_list ) ;
30063: LD_ADDR_VAR 0 5
30067: PUSH
30068: LD_INT 1
30070: PPUSH
30071: LD_VAR 0 4
30075: PPUSH
30076: CALL_OW 12
30080: ST_TO_ADDR
// if not temp_list [ k ] in ai_defence_mines_hexes [ base ] and not temp_list [ k ] in target_hex then
30081: LD_VAR 0 4
30085: PUSH
30086: LD_VAR 0 5
30090: ARRAY
30091: PUSH
30092: LD_EXP 118
30096: PUSH
30097: LD_VAR 0 1
30101: ARRAY
30102: IN
30103: NOT
30104: PUSH
30105: LD_VAR 0 4
30109: PUSH
30110: LD_VAR 0 5
30114: ARRAY
30115: PUSH
30116: LD_VAR 0 9
30120: IN
30121: NOT
30122: AND
30123: IFFALSE 30127
// break ;
30125: GO 30157
// temp_list = Delete ( temp_list , k ) ;
30127: LD_ADDR_VAR 0 4
30131: PUSH
30132: LD_VAR 0 4
30136: PPUSH
30137: LD_VAR 0 5
30141: PPUSH
30142: CALL_OW 3
30146: ST_TO_ADDR
// until temp_list = 0 ;
30147: LD_VAR 0 4
30151: PUSH
30152: LD_INT 0
30154: EQUAL
30155: IFFALSE 30063
// if temp_list > 0 then
30157: LD_VAR 0 4
30161: PUSH
30162: LD_INT 0
30164: GREATER
30165: IFFALSE 30233
// begin target_hex = Replace ( target_hex , guy , temp_list [ k ] ) ;
30167: LD_ADDR_VAR 0 9
30171: PUSH
30172: LD_VAR 0 9
30176: PPUSH
30177: LD_VAR 0 6
30181: PPUSH
30182: LD_VAR 0 4
30186: PUSH
30187: LD_VAR 0 5
30191: ARRAY
30192: PPUSH
30193: CALL_OW 1
30197: ST_TO_ADDR
// num_mines_being_placed = Replace ( num_mines_being_placed , base , num_mines_being_placed [ base ] + 1 ) ;
30198: LD_ADDR_VAR 0 10
30202: PUSH
30203: LD_VAR 0 10
30207: PPUSH
30208: LD_VAR 0 1
30212: PPUSH
30213: LD_VAR 0 10
30217: PUSH
30218: LD_VAR 0 1
30222: ARRAY
30223: PUSH
30224: LD_INT 1
30226: PLUS
30227: PPUSH
30228: CALL_OW 1
30232: ST_TO_ADDR
// end ; end ; if target_hex [ guy ] = 0 then
30233: LD_VAR 0 9
30237: PUSH
30238: LD_VAR 0 6
30242: ARRAY
30243: PUSH
30244: LD_INT 0
30246: EQUAL
30247: IFFALSE 30251
// continue ;
30249: GO 29508
// if not guy in ai_excepted_soldiers [ base ] then
30251: LD_VAR 0 6
30255: PUSH
30256: LD_EXP 48
30260: PUSH
30261: LD_VAR 0 1
30265: ARRAY
30266: IN
30267: NOT
30268: IFFALSE 30317
// begin temp_list = ai_excepted_soldiers [ base ] ^ guy ;
30270: LD_ADDR_VAR 0 4
30274: PUSH
30275: LD_EXP 48
30279: PUSH
30280: LD_VAR 0 1
30284: ARRAY
30285: PUSH
30286: LD_VAR 0 6
30290: ADD
30291: ST_TO_ADDR
// ai_excepted_soldiers = Replace ( ai_excepted_soldiers , base , temp_list ) ;
30292: LD_ADDR_EXP 48
30296: PUSH
30297: LD_EXP 48
30301: PPUSH
30302: LD_VAR 0 1
30306: PPUSH
30307: LD_VAR 0 4
30311: PPUSH
30312: CALL_OW 1
30316: ST_TO_ADDR
// end ; if GetClass ( guy ) <> class_soldier then
30317: LD_VAR 0 6
30321: PPUSH
30322: CALL_OW 257
30326: PUSH
30327: LD_INT 1
30329: NONEQUAL
30330: IFFALSE 30544
// begin if IsInUnit ( guy ) > 0 then
30332: LD_VAR 0 6
30336: PPUSH
30337: CALL_OW 310
30341: PUSH
30342: LD_INT 0
30344: GREATER
30345: IFFALSE 30446
// begin case GetType ( IsInUnit ( guy ) ) of unit_vehicle :
30347: LD_VAR 0 6
30351: PPUSH
30352: CALL_OW 310
30356: PPUSH
30357: CALL_OW 247
30361: PUSH
30362: LD_INT 2
30364: DOUBLE
30365: EQUAL
30366: IFTRUE 30370
30368: GO 30382
30370: POP
// ComExitVehicle ( guy ) ; unit_building :
30371: LD_VAR 0 6
30375: PPUSH
30376: CALL_OW 121
30380: GO 30444
30382: LD_INT 3
30384: DOUBLE
30385: EQUAL
30386: IFTRUE 30390
30388: GO 30443
30390: POP
// begin if GetBType ( IsInUnit ( guy ) ) in [ b_armoury , b_barracks ] then
30391: LD_VAR 0 6
30395: PPUSH
30396: CALL_OW 310
30400: PPUSH
30401: CALL_OW 266
30405: PUSH
30406: LD_INT 4
30408: PUSH
30409: LD_INT 5
30411: PUSH
30412: EMPTY
30413: LIST
30414: LIST
30415: IN
30416: IFFALSE 30432
// ComChangeProfession ( guy , class_soldier ) else
30418: LD_VAR 0 6
30422: PPUSH
30423: LD_INT 1
30425: PPUSH
30426: CALL_OW 123
30430: GO 30441
// ComExitBuilding ( guy ) ;
30432: LD_VAR 0 6
30436: PPUSH
30437: CALL_OW 122
// end ; end end else
30441: GO 30444
30443: POP
30444: GO 30542
// begin k = 0 ;
30446: LD_ADDR_VAR 0 5
30450: PUSH
30451: LD_INT 0
30453: ST_TO_ADDR
// for i in ai_armouries [ base ] do
30454: LD_ADDR_VAR 0 3
30458: PUSH
30459: LD_EXP 52
30463: PUSH
30464: LD_VAR 0 1
30468: ARRAY
30469: PUSH
30470: FOR_IN
30471: IFFALSE 30502
// if UnitsInside ( i ) < 6 then
30473: LD_VAR 0 3
30477: PPUSH
30478: CALL_OW 313
30482: PUSH
30483: LD_INT 6
30485: LESS
30486: IFFALSE 30500
// begin k = i ;
30488: LD_ADDR_VAR 0 5
30492: PUSH
30493: LD_VAR 0 3
30497: ST_TO_ADDR
// break ;
30498: GO 30502
// end ;
30500: GO 30470
30502: POP
30503: POP
// if k = 0 then
30504: LD_VAR 0 5
30508: PUSH
30509: LD_INT 0
30511: EQUAL
30512: IFFALSE 30528
// SetClass ( guy , class_soldier ) else
30514: LD_VAR 0 6
30518: PPUSH
30519: LD_INT 1
30521: PPUSH
30522: CALL_OW 336
30526: GO 30542
// ComEnterUnit ( guy , k ) ;
30528: LD_VAR 0 6
30532: PPUSH
30533: LD_VAR 0 5
30537: PPUSH
30538: CALL_OW 120
// end ; end else
30542: GO 30903
// begin temp_list = MineOfUnit ( guy ) ;
30544: LD_ADDR_VAR 0 4
30548: PUSH
30549: LD_VAR 0 6
30553: PPUSH
30554: CALL_OW 459
30558: ST_TO_ADDR
// if temp_list = 0 then
30559: LD_VAR 0 4
30563: PUSH
30564: LD_INT 0
30566: EQUAL
30567: IFFALSE 30699
// begin if GetDistUnitXY ( guy , target_hex [ guy ] [ 1 ] , target_hex [ guy ] [ 2 ] ) > 1 then
30569: LD_VAR 0 6
30573: PPUSH
30574: LD_VAR 0 9
30578: PUSH
30579: LD_VAR 0 6
30583: ARRAY
30584: PUSH
30585: LD_INT 1
30587: ARRAY
30588: PPUSH
30589: LD_VAR 0 9
30593: PUSH
30594: LD_VAR 0 6
30598: ARRAY
30599: PUSH
30600: LD_INT 2
30602: ARRAY
30603: PPUSH
30604: CALL_OW 297
30608: PUSH
30609: LD_INT 1
30611: GREATER
30612: IFFALSE 30655
// ComAgressiveMove ( guy , target_hex [ guy ] [ 1 ] , target_hex [ guy ] [ 2 ] ) else
30614: LD_VAR 0 6
30618: PPUSH
30619: LD_VAR 0 9
30623: PUSH
30624: LD_VAR 0 6
30628: ARRAY
30629: PUSH
30630: LD_INT 1
30632: ARRAY
30633: PPUSH
30634: LD_VAR 0 9
30638: PUSH
30639: LD_VAR 0 6
30643: ARRAY
30644: PUSH
30645: LD_INT 2
30647: ARRAY
30648: PPUSH
30649: CALL_OW 114
30653: GO 30697
// ComPlaceRemoteCharge ( guy , target_hex [ guy ] [ 1 ] , target_hex [ guy ] [ 2 ] , 0 ) ;
30655: LD_VAR 0 6
30659: PPUSH
30660: LD_VAR 0 9
30664: PUSH
30665: LD_VAR 0 6
30669: ARRAY
30670: PUSH
30671: LD_INT 1
30673: ARRAY
30674: PPUSH
30675: LD_VAR 0 9
30679: PUSH
30680: LD_VAR 0 6
30684: ARRAY
30685: PUSH
30686: LD_INT 2
30688: ARRAY
30689: PPUSH
30690: LD_INT 0
30692: PPUSH
30693: CALL_OW 133
// end else
30697: GO 30903
// begin PlaceMine ( temp_list [ 1 ] , temp_list [ 2 ] , mines_side , 0 ) ;
30699: LD_VAR 0 4
30703: PUSH
30704: LD_INT 1
30706: ARRAY
30707: PPUSH
30708: LD_VAR 0 4
30712: PUSH
30713: LD_INT 2
30715: ARRAY
30716: PPUSH
30717: LD_EXP 9
30721: PPUSH
30722: LD_INT 0
30724: PPUSH
30725: CALL_OW 454
// temp_list_2 = Insert ( ai_defence_mines_hexes [ base ] , 1 , temp_list ) ;
30729: LD_ADDR_VAR 0 7
30733: PUSH
30734: LD_EXP 118
30738: PUSH
30739: LD_VAR 0 1
30743: ARRAY
30744: PPUSH
30745: LD_INT 1
30747: PPUSH
30748: LD_VAR 0 4
30752: PPUSH
30753: CALL_OW 2
30757: ST_TO_ADDR
// ai_defence_mines_hexes = Replace ( ai_defence_mines_hexes , base , temp_list_2 ) ;
30758: LD_ADDR_EXP 118
30762: PUSH
30763: LD_EXP 118
30767: PPUSH
30768: LD_VAR 0 1
30772: PPUSH
30773: LD_VAR 0 7
30777: PPUSH
30778: CALL_OW 1
30782: ST_TO_ADDR
// temp_list_2 = Insert ( ai_defence_replace_mines_hexes [ base ] , 1 , temp_list ) ;
30783: LD_ADDR_VAR 0 7
30787: PUSH
30788: LD_EXP 121
30792: PUSH
30793: LD_VAR 0 1
30797: ARRAY
30798: PPUSH
30799: LD_INT 1
30801: PPUSH
30802: LD_VAR 0 4
30806: PPUSH
30807: CALL_OW 2
30811: ST_TO_ADDR
// ai_defence_replace_mines_hexes = Replace ( ai_defence_replace_mines_hexes , base , temp_list_2 ) ;
30812: LD_ADDR_EXP 121
30816: PUSH
30817: LD_EXP 121
30821: PPUSH
30822: LD_VAR 0 1
30826: PPUSH
30827: LD_VAR 0 7
30831: PPUSH
30832: CALL_OW 1
30836: ST_TO_ADDR
// RemoveMineOfUnit ( guy ) ;
30837: LD_VAR 0 6
30841: PPUSH
30842: CALL_OW 460
// target_hex = Replace ( target_hex , guy , [ ] ) ;
30846: LD_ADDR_VAR 0 9
30850: PUSH
30851: LD_VAR 0 9
30855: PPUSH
30856: LD_VAR 0 6
30860: PPUSH
30861: EMPTY
30862: PPUSH
30863: CALL_OW 1
30867: ST_TO_ADDR
// num_mines_being_placed = Replace ( num_mines_being_placed , base , num_mines_being_placed [ base ] - 1 ) ;
30868: LD_ADDR_VAR 0 10
30872: PUSH
30873: LD_VAR 0 10
30877: PPUSH
30878: LD_VAR 0 1
30882: PPUSH
30883: LD_VAR 0 10
30887: PUSH
30888: LD_VAR 0 1
30892: ARRAY
30893: PUSH
30894: LD_INT 1
30896: MINUS
30897: PPUSH
30898: CALL_OW 1
30902: ST_TO_ADDR
// end ; end ; end ;
30903: GO 29508
30905: POP
30906: POP
// end ;
30907: GO 29240
30909: POP
30910: POP
// until false ;
30911: LD_INT 0
30913: IFFALSE 29201
// end ;
30915: PPOPN 10
30917: END
// every 0 0$1 + 0 0$0.2 do var i , un , base , temp_list , temp_list_2 ; var mine_dialogue_played ;
30918: GO 30920
30920: DISABLE
30921: LD_INT 0
30923: PPUSH
30924: PPUSH
30925: PPUSH
30926: PPUSH
30927: PPUSH
30928: PPUSH
// begin mine_dialogue_played = false ;
30929: LD_ADDR_VAR 0 6
30933: PUSH
30934: LD_INT 0
30936: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
30937: LD_INT 18
30939: PPUSH
30940: CALL_OW 67
// for base in ai_bases do
30944: LD_ADDR_VAR 0 3
30948: PUSH
30949: LD_EXP 39
30953: PUSH
30954: FOR_IN
30955: IFFALSE 31609
// begin i = 1 ;
30957: LD_ADDR_VAR 0 1
30961: PUSH
30962: LD_INT 1
30964: ST_TO_ADDR
// while i <= ai_defence_mines_hexes [ base ] do
30965: LD_VAR 0 1
30969: PUSH
30970: LD_EXP 118
30974: PUSH
30975: LD_VAR 0 3
30979: ARRAY
30980: LESSEQUAL
30981: IFFALSE 31607
// begin un = HexInfo ( ai_defence_mines_hexes [ base ] [ i ] [ 1 ] , ai_defence_mines_hexes [ base ] [ i ] [ 2 ] ) ;
30983: LD_ADDR_VAR 0 2
30987: PUSH
30988: LD_EXP 118
30992: PUSH
30993: LD_VAR 0 3
30997: ARRAY
30998: PUSH
30999: LD_VAR 0 1
31003: ARRAY
31004: PUSH
31005: LD_INT 1
31007: ARRAY
31008: PPUSH
31009: LD_EXP 118
31013: PUSH
31014: LD_VAR 0 3
31018: ARRAY
31019: PUSH
31020: LD_VAR 0 1
31024: ARRAY
31025: PUSH
31026: LD_INT 2
31028: ARRAY
31029: PPUSH
31030: CALL_OW 428
31034: ST_TO_ADDR
// if un <= 0 then
31035: LD_VAR 0 2
31039: PUSH
31040: LD_INT 0
31042: LESSEQUAL
31043: IFFALSE 31061
// begin i = i + 1 ;
31045: LD_ADDR_VAR 0 1
31049: PUSH
31050: LD_VAR 0 1
31054: PUSH
31055: LD_INT 1
31057: PLUS
31058: ST_TO_ADDR
// continue ;
31059: GO 30965
// end ; if GetAttitude ( GetBaseSide ( base ) , GetSide ( un ) ) = att_enemy then
31061: LD_VAR 0 3
31065: PPUSH
31066: CALL 24885 0 1
31070: PPUSH
31071: LD_VAR 0 2
31075: PPUSH
31076: CALL_OW 255
31080: PPUSH
31081: CALL_OW 81
31085: PUSH
31086: LD_INT 2
31088: EQUAL
31089: IFFALSE 31591
// begin LaunchMineAtPos ( ai_defence_mines_hexes [ base ] [ i ] [ 1 ] , ai_defence_mines_hexes [ base ] [ i ] [ 2 ] , mines_side ) ;
31091: LD_EXP 118
31095: PUSH
31096: LD_VAR 0 3
31100: ARRAY
31101: PUSH
31102: LD_VAR 0 1
31106: ARRAY
31107: PUSH
31108: LD_INT 1
31110: ARRAY
31111: PPUSH
31112: LD_EXP 118
31116: PUSH
31117: LD_VAR 0 3
31121: ARRAY
31122: PUSH
31123: LD_VAR 0 1
31127: ARRAY
31128: PUSH
31129: LD_INT 2
31131: ARRAY
31132: PPUSH
31133: LD_EXP 9
31137: PPUSH
31138: CALL_OW 456
// if difficulty > 1 then
31142: LD_OWVAR 67
31146: PUSH
31147: LD_INT 1
31149: GREATER
31150: IFFALSE 31237
// begin if GetLives ( un ) > [ - 1 , 150 , 300 ] [ difficulty ] then
31152: LD_VAR 0 2
31156: PPUSH
31157: CALL_OW 256
31161: PUSH
31162: LD_INT 1
31164: NEG
31165: PUSH
31166: LD_INT 150
31168: PUSH
31169: LD_INT 300
31171: PUSH
31172: EMPTY
31173: LIST
31174: LIST
31175: LIST
31176: PUSH
31177: LD_OWVAR 67
31181: ARRAY
31182: GREATER
31183: IFFALSE 31228
// SetLives ( un , GetLives ( un ) - [ - 1 , 150 , 300 ] [ difficulty ] ) else
31185: LD_VAR 0 2
31189: PPUSH
31190: LD_VAR 0 2
31194: PPUSH
31195: CALL_OW 256
31199: PUSH
31200: LD_INT 1
31202: NEG
31203: PUSH
31204: LD_INT 150
31206: PUSH
31207: LD_INT 300
31209: PUSH
31210: EMPTY
31211: LIST
31212: LIST
31213: LIST
31214: PUSH
31215: LD_OWVAR 67
31219: ARRAY
31220: MINUS
31221: PPUSH
31222: CALL_OW 234
31226: GO 31237
// KillUnit ( un ) ;
31228: LD_VAR 0 2
31232: PPUSH
31233: CALL_OW 66
// end ; temp_list_2 = [ ai_defence_mines_hexes [ base ] [ i ] [ 1 ] , ai_defence_mines_hexes [ base ] [ i ] [ 2 ] ] ;
31237: LD_ADDR_VAR 0 5
31241: PUSH
31242: LD_EXP 118
31246: PUSH
31247: LD_VAR 0 3
31251: ARRAY
31252: PUSH
31253: LD_VAR 0 1
31257: ARRAY
31258: PUSH
31259: LD_INT 1
31261: ARRAY
31262: PUSH
31263: LD_EXP 118
31267: PUSH
31268: LD_VAR 0 3
31272: ARRAY
31273: PUSH
31274: LD_VAR 0 1
31278: ARRAY
31279: PUSH
31280: LD_INT 2
31282: ARRAY
31283: PUSH
31284: EMPTY
31285: LIST
31286: LIST
31287: ST_TO_ADDR
// temp_list = Delete ( ai_defence_mines_hexes [ base ] , i ) ;
31288: LD_ADDR_VAR 0 4
31292: PUSH
31293: LD_EXP 118
31297: PUSH
31298: LD_VAR 0 3
31302: ARRAY
31303: PPUSH
31304: LD_VAR 0 1
31308: PPUSH
31309: CALL_OW 3
31313: ST_TO_ADDR
// ai_defence_mines_hexes = Replace ( ai_defence_mines_hexes , base , temp_list ) ;
31314: LD_ADDR_EXP 118
31318: PUSH
31319: LD_EXP 118
31323: PPUSH
31324: LD_VAR 0 3
31328: PPUSH
31329: LD_VAR 0 4
31333: PPUSH
31334: CALL_OW 1
31338: ST_TO_ADDR
// temp_list = ai_defence_replace_mines_hexes [ base ] diff [ temp_list_2 ] ;
31339: LD_ADDR_VAR 0 4
31343: PUSH
31344: LD_EXP 121
31348: PUSH
31349: LD_VAR 0 3
31353: ARRAY
31354: PUSH
31355: LD_VAR 0 5
31359: PUSH
31360: EMPTY
31361: LIST
31362: DIFF
31363: ST_TO_ADDR
// ai_defence_replace_mines_hexes = Replace ( ai_defence_replace_mines_hexes , base , temp_list ) ;
31364: LD_ADDR_EXP 121
31368: PUSH
31369: LD_EXP 121
31373: PPUSH
31374: LD_VAR 0 3
31378: PPUSH
31379: LD_VAR 0 4
31383: PPUSH
31384: CALL_OW 1
31388: ST_TO_ADDR
// if not mine_dialogue_played and base = 4 and GetSide ( un ) = you then
31389: LD_VAR 0 6
31393: NOT
31394: PUSH
31395: LD_VAR 0 3
31399: PUSH
31400: LD_INT 4
31402: EQUAL
31403: AND
31404: PUSH
31405: LD_VAR 0 2
31409: PPUSH
31410: CALL_OW 255
31414: PUSH
31415: LD_EXP 2
31419: EQUAL
31420: AND
31421: IFFALSE 31589
// begin mine_dialogue_played = true ;
31423: LD_ADDR_VAR 0 6
31427: PUSH
31428: LD_INT 1
31430: ST_TO_ADDR
// wait ( 0 0$0.5 ) ;
31431: LD_INT 18
31433: PPUSH
31434: CALL_OW 67
// CenterOnXY ( temp_list_2 [ 1 ] , temp_list_2 [ 2 ] ) ;
31438: LD_VAR 0 5
31442: PUSH
31443: LD_INT 1
31445: ARRAY
31446: PPUSH
31447: LD_VAR 0 5
31451: PUSH
31452: LD_INT 2
31454: ARRAY
31455: PPUSH
31456: CALL_OW 84
// DialogueOn ;
31460: CALL_OW 6
// ForceSay ( Heike , D17-H-1 ) ;
31464: LD_EXP 10
31468: PPUSH
31469: LD_STRING D17-H-1
31471: PPUSH
31472: CALL_OW 91
// if IsOk ( Rolf ) then
31476: LD_EXP 33
31480: PPUSH
31481: CALL_OW 302
31485: IFFALSE 31585
// begin SayRadio ( Rolf , D17-Rolf-1 ) ;
31487: LD_EXP 33
31491: PPUSH
31492: LD_STRING D17-Rolf-1
31494: PPUSH
31495: CALL_OW 94
// ForceSay ( Heike , D17-H-2 ) ;
31499: LD_EXP 10
31503: PPUSH
31504: LD_STRING D17-H-2
31506: PPUSH
31507: CALL_OW 91
// if LoadVariable ( UPF_deserter_exiled_13a_cont , false ) or LoadVariable ( UPF_deserter_killed_13a_cont , false ) then
31511: LD_STRING UPF_deserter_exiled_13a_cont
31513: PPUSH
31514: LD_INT 0
31516: PPUSH
31517: CALL_OW 30
31521: PUSH
31522: LD_STRING UPF_deserter_killed_13a_cont
31524: PPUSH
31525: LD_INT 0
31527: PPUSH
31528: CALL_OW 30
31532: OR
31533: IFFALSE 31549
// begin SayRadio ( Rolf , D17-Rolf-2a ) ;
31535: LD_EXP 33
31539: PPUSH
31540: LD_STRING D17-Rolf-2a
31542: PPUSH
31543: CALL_OW 94
// end else
31547: GO 31585
// begin SayRadio ( Rolf , D17-Rolf-2b ) ;
31549: LD_EXP 33
31553: PPUSH
31554: LD_STRING D17-Rolf-2b
31556: PPUSH
31557: CALL_OW 94
// ForceSay ( Heike , D17-H-3b ) ;
31561: LD_EXP 10
31565: PPUSH
31566: LD_STRING D17-H-3b
31568: PPUSH
31569: CALL_OW 91
// SayRadio ( Rolf , D17-Rolf-3b ) ;
31573: LD_EXP 33
31577: PPUSH
31578: LD_STRING D17-Rolf-3b
31580: PPUSH
31581: CALL_OW 94
// end ; end ; DialogueOff ;
31585: CALL_OW 7
// end ; continue ;
31589: GO 30965
// end ; i = i + 1 ;
31591: LD_ADDR_VAR 0 1
31595: PUSH
31596: LD_VAR 0 1
31600: PUSH
31601: LD_INT 1
31603: PLUS
31604: ST_TO_ADDR
// end ;
31605: GO 30965
// end ;
31607: GO 30954
31609: POP
31610: POP
// until false ;
31611: LD_INT 0
31613: IFFALSE 30937
// end ;
31615: PPOPN 6
31617: 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 ;
31618: GO 31620
31620: DISABLE
31621: LD_INT 0
31623: PPUSH
31624: PPUSH
31625: PPUSH
31626: PPUSH
31627: PPUSH
31628: PPUSH
31629: PPUSH
31630: PPUSH
31631: PPUSH
// begin sopo_cooldown = [ ] ;
31632: LD_ADDR_VAR 0 9
31636: PUSH
31637: EMPTY
31638: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
31639: LD_INT 35
31641: PPUSH
31642: CALL_OW 67
// for base in ai_bases do
31646: LD_ADDR_VAR 0 2
31650: PUSH
31651: LD_EXP 39
31655: PUSH
31656: FOR_IN
31657: IFFALSE 32003
// begin if base in [ 1 , 3 ] then
31659: LD_VAR 0 2
31663: PUSH
31664: LD_INT 1
31666: PUSH
31667: LD_INT 3
31669: PUSH
31670: EMPTY
31671: LIST
31672: LIST
31673: IN
31674: IFFALSE 31678
// continue ;
31676: GO 31656
// side = GetBaseSide ( base ) ;
31678: LD_ADDR_VAR 0 1
31682: PUSH
31683: LD_VAR 0 2
31687: PPUSH
31688: CALL 24885 0 1
31692: ST_TO_ADDR
// for i in ai_soldiers [ base ] do
31693: LD_ADDR_VAR 0 3
31697: PUSH
31698: LD_EXP 40
31702: PUSH
31703: LD_VAR 0 2
31707: ARRAY
31708: PUSH
31709: FOR_IN
31710: IFFALSE 31777
// if sopo_cooldown >= i then
31712: LD_VAR 0 9
31716: PUSH
31717: LD_VAR 0 3
31721: GREATEREQUAL
31722: IFFALSE 31775
// if sopo_cooldown [ i ] > 0 0$0 then
31724: LD_VAR 0 9
31728: PUSH
31729: LD_VAR 0 3
31733: ARRAY
31734: PUSH
31735: LD_INT 0
31737: GREATER
31738: IFFALSE 31775
// sopo_cooldown = Replace ( sopo_cooldown , i , sopo_cooldown [ i ] - 0 0$0.5 ) ;
31740: LD_ADDR_VAR 0 9
31744: PUSH
31745: LD_VAR 0 9
31749: PPUSH
31750: LD_VAR 0 3
31754: PPUSH
31755: LD_VAR 0 9
31759: PUSH
31760: LD_VAR 0 3
31764: ARRAY
31765: PUSH
31766: LD_INT 18
31768: MINUS
31769: PPUSH
31770: CALL_OW 1
31774: ST_TO_ADDR
31775: GO 31709
31777: POP
31778: POP
// for i in ai_soldiers [ base ] diff ai_heal_these_humans [ base ] do
31779: LD_ADDR_VAR 0 3
31783: PUSH
31784: LD_EXP 40
31788: PUSH
31789: LD_VAR 0 2
31793: ARRAY
31794: PUSH
31795: LD_EXP 75
31799: PUSH
31800: LD_VAR 0 2
31804: ARRAY
31805: DIFF
31806: PUSH
31807: FOR_IN
31808: IFFALSE 31999
// if GetClass ( i ) = class_sniper then
31810: LD_VAR 0 3
31814: PPUSH
31815: CALL_OW 257
31819: PUSH
31820: LD_INT 5
31822: EQUAL
31823: IFFALSE 31997
// begin temp_list = GetTaskList ( i ) ;
31825: LD_ADDR_VAR 0 4
31829: PUSH
31830: LD_VAR 0 3
31834: PPUSH
31835: CALL_OW 437
31839: ST_TO_ADDR
// if temp_list > 0 then
31840: LD_VAR 0 4
31844: PUSH
31845: LD_INT 0
31847: GREATER
31848: IFFALSE 31870
// if temp_list [ 1 ] [ 1 ] = n then
31850: LD_VAR 0 4
31854: PUSH
31855: LD_INT 1
31857: ARRAY
31858: PUSH
31859: LD_INT 1
31861: ARRAY
31862: PUSH
31863: LD_STRING n
31865: EQUAL
31866: IFFALSE 31870
// continue ;
31868: GO 31807
// un1 = Attacks ( i ) ;
31870: LD_ADDR_VAR 0 5
31874: PUSH
31875: LD_VAR 0 3
31879: PPUSH
31880: CALL_OW 320
31884: ST_TO_ADDR
// if un1 > 0 then
31885: LD_VAR 0 5
31889: PUSH
31890: LD_INT 0
31892: GREATER
31893: IFFALSE 31997
// if GetType ( un1 ) = unit_human then
31895: LD_VAR 0 5
31899: PPUSH
31900: CALL_OW 247
31904: PUSH
31905: LD_INT 1
31907: EQUAL
31908: IFFALSE 31997
// begin val = true ;
31910: LD_ADDR_VAR 0 8
31914: PUSH
31915: LD_INT 1
31917: ST_TO_ADDR
// if sopo_cooldown >= i then
31918: LD_VAR 0 9
31922: PUSH
31923: LD_VAR 0 3
31927: GREATEREQUAL
31928: IFFALSE 31954
// if sopo_cooldown [ i ] > 0 0$0 then
31930: LD_VAR 0 9
31934: PUSH
31935: LD_VAR 0 3
31939: ARRAY
31940: PUSH
31941: LD_INT 0
31943: GREATER
31944: IFFALSE 31954
// val = false ;
31946: LD_ADDR_VAR 0 8
31950: PUSH
31951: LD_INT 0
31953: ST_TO_ADDR
// if val then
31954: LD_VAR 0 8
31958: IFFALSE 31997
// begin ComAttackSoporific ( i , un1 ) ;
31960: LD_VAR 0 3
31964: PPUSH
31965: LD_VAR 0 5
31969: PPUSH
31970: CALL_OW 166
// sopo_cooldown = Replace ( sopo_cooldown , i , 0 0$10 ) ;
31974: LD_ADDR_VAR 0 9
31978: PUSH
31979: LD_VAR 0 9
31983: PPUSH
31984: LD_VAR 0 3
31988: PPUSH
31989: LD_INT 350
31991: PPUSH
31992: CALL_OW 1
31996: ST_TO_ADDR
// end ; end ; end ;
31997: GO 31807
31999: POP
32000: POP
// end ;
32001: GO 31656
32003: POP
32004: POP
// until false ;
32005: LD_INT 0
32007: IFFALSE 31639
// end ;
32009: PPOPN 9
32011: END
// every 0 0$1 + 0 0$0.1 do var side , base , i , temp_list , un1 , temp_list_2 , temp_value , val , lapsers ;
32012: GO 32014
32014: DISABLE
32015: LD_INT 0
32017: PPUSH
32018: PPUSH
32019: PPUSH
32020: PPUSH
32021: PPUSH
32022: PPUSH
32023: PPUSH
32024: PPUSH
32025: PPUSH
// begin repeat wait ( 0 0$1 ) ;
32026: LD_INT 35
32028: PPUSH
32029: CALL_OW 67
// for base in ai_bases do
32033: LD_ADDR_VAR 0 2
32037: PUSH
32038: LD_EXP 39
32042: PUSH
32043: FOR_IN
32044: IFFALSE 32758
// begin if base in [ 2 , 3 , 4 ] then
32046: LD_VAR 0 2
32050: PUSH
32051: LD_INT 2
32053: PUSH
32054: LD_INT 3
32056: PUSH
32057: LD_INT 4
32059: PUSH
32060: EMPTY
32061: LIST
32062: LIST
32063: LIST
32064: IN
32065: IFFALSE 32069
// continue ;
32067: GO 32043
// side = GetBaseSide ( base ) ;
32069: LD_ADDR_VAR 0 1
32073: PUSH
32074: LD_VAR 0 2
32078: PPUSH
32079: CALL 24885 0 1
32083: ST_TO_ADDR
// lapsers = [ ] ;
32084: LD_ADDR_VAR 0 9
32088: PUSH
32089: EMPTY
32090: ST_TO_ADDR
// val = false ;
32091: LD_ADDR_VAR 0 8
32095: PUSH
32096: LD_INT 0
32098: ST_TO_ADDR
// if IsOk ( ai_depot [ base ] ) then
32099: LD_EXP 49
32103: PUSH
32104: LD_VAR 0 2
32108: ARRAY
32109: PPUSH
32110: CALL_OW 302
32114: IFFALSE 32154
// if GetEnergy ( GetBase ( ai_depot [ base ] ) ) [ 4 ] > 0 then
32116: LD_EXP 49
32120: PUSH
32121: LD_VAR 0 2
32125: ARRAY
32126: PPUSH
32127: CALL_OW 274
32131: PPUSH
32132: CALL_OW 278
32136: PUSH
32137: LD_INT 4
32139: ARRAY
32140: PUSH
32141: LD_INT 0
32143: GREATER
32144: IFFALSE 32154
// val = true ;
32146: LD_ADDR_VAR 0 8
32150: PUSH
32151: LD_INT 1
32153: ST_TO_ADDR
// if val then
32154: LD_VAR 0 8
32158: IFFALSE 32267
// for i in ai_bunkers [ base ] ^ ai_turrets [ base ] do
32160: LD_ADDR_VAR 0 3
32164: PUSH
32165: LD_EXP 53
32169: PUSH
32170: LD_VAR 0 2
32174: ARRAY
32175: PUSH
32176: LD_EXP 54
32180: PUSH
32181: LD_VAR 0 2
32185: ARRAY
32186: ADD
32187: PUSH
32188: FOR_IN
32189: IFFALSE 32265
// if GetBWeapon ( i ) = ru_time_lapser and IsOk ( i ) and ( UnitsInside ( i ) > 0 or GetBType ( i ) = b_turret ) then
32191: LD_VAR 0 3
32195: PPUSH
32196: CALL_OW 269
32200: PUSH
32201: LD_INT 49
32203: EQUAL
32204: PUSH
32205: LD_VAR 0 3
32209: PPUSH
32210: CALL_OW 302
32214: AND
32215: PUSH
32216: LD_VAR 0 3
32220: PPUSH
32221: CALL_OW 313
32225: PUSH
32226: LD_INT 0
32228: GREATER
32229: PUSH
32230: LD_VAR 0 3
32234: PPUSH
32235: CALL_OW 266
32239: PUSH
32240: LD_INT 33
32242: EQUAL
32243: OR
32244: AND
32245: IFFALSE 32263
// lapsers = lapsers ^ i ;
32247: LD_ADDR_VAR 0 9
32251: PUSH
32252: LD_VAR 0 9
32256: PUSH
32257: LD_VAR 0 3
32261: ADD
32262: ST_TO_ADDR
32263: GO 32188
32265: POP
32266: POP
// for i in ai_soldiers [ base ] diff ai_heal_these_humans [ base ] do
32267: LD_ADDR_VAR 0 3
32271: PUSH
32272: LD_EXP 40
32276: PUSH
32277: LD_VAR 0 2
32281: ARRAY
32282: PUSH
32283: LD_EXP 75
32287: PUSH
32288: LD_VAR 0 2
32292: ARRAY
32293: DIFF
32294: PUSH
32295: FOR_IN
32296: IFFALSE 32754
// if GetClass ( i ) = class_bazooker then
32298: LD_VAR 0 3
32302: PPUSH
32303: CALL_OW 257
32307: PUSH
32308: LD_INT 9
32310: EQUAL
32311: IFFALSE 32752
// begin temp_list = GetTaskList ( i ) ;
32313: LD_ADDR_VAR 0 4
32317: PUSH
32318: LD_VAR 0 3
32322: PPUSH
32323: CALL_OW 437
32327: ST_TO_ADDR
// if temp_list > 0 then
32328: LD_VAR 0 4
32332: PUSH
32333: LD_INT 0
32335: GREATER
32336: IFFALSE 32376
// if temp_list [ 1 ] [ 1 ] = & or temp_list [ 1 ] [ 1 ] = % then
32338: LD_VAR 0 4
32342: PUSH
32343: LD_INT 1
32345: ARRAY
32346: PUSH
32347: LD_INT 1
32349: ARRAY
32350: PUSH
32351: LD_STRING &
32353: EQUAL
32354: PUSH
32355: LD_VAR 0 4
32359: PUSH
32360: LD_INT 1
32362: ARRAY
32363: PUSH
32364: LD_INT 1
32366: ARRAY
32367: PUSH
32368: LD_STRING %
32370: EQUAL
32371: OR
32372: IFFALSE 32376
// continue ;
32374: GO 32295
// un1 = Attacks ( i ) ;
32376: LD_ADDR_VAR 0 5
32380: PUSH
32381: LD_VAR 0 3
32385: PPUSH
32386: CALL_OW 320
32390: ST_TO_ADDR
// if un1 > 0 and DangerousUnits ( [ un1 ] ) > 0 then
32391: LD_VAR 0 5
32395: PUSH
32396: LD_INT 0
32398: GREATER
32399: PUSH
32400: LD_VAR 0 5
32404: PUSH
32405: EMPTY
32406: LIST
32407: PPUSH
32408: CALL 81944 0 1
32412: PUSH
32413: LD_INT 0
32415: GREATER
32416: AND
32417: IFFALSE 32752
// begin temp_list_2 = [ GetX ( un1 ) , GetY ( un1 ) ] ;
32419: LD_ADDR_VAR 0 6
32423: PUSH
32424: LD_VAR 0 5
32428: PPUSH
32429: CALL_OW 250
32433: PUSH
32434: LD_VAR 0 5
32438: PPUSH
32439: CALL_OW 251
32443: PUSH
32444: EMPTY
32445: LIST
32446: LIST
32447: ST_TO_ADDR
// temp_value = false ;
32448: LD_ADDR_VAR 0 7
32452: PUSH
32453: LD_INT 0
32455: ST_TO_ADDR
// for val in ai_time_shift_hexes [ base ] ^ ai_time_shift_hexes_underway [ base ] do
32456: LD_ADDR_VAR 0 8
32460: PUSH
32461: LD_EXP 110
32465: PUSH
32466: LD_VAR 0 2
32470: ARRAY
32471: PUSH
32472: LD_EXP 111
32476: PUSH
32477: LD_VAR 0 2
32481: ARRAY
32482: ADD
32483: PUSH
32484: FOR_IN
32485: IFFALSE 32557
// if GetDistXY ( temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , val [ 1 ] , val [ 2 ] ) <= ai_time_shift_data [ side ] [ 2 ] then
32487: LD_VAR 0 6
32491: PUSH
32492: LD_INT 1
32494: ARRAY
32495: PPUSH
32496: LD_VAR 0 6
32500: PUSH
32501: LD_INT 2
32503: ARRAY
32504: PPUSH
32505: LD_VAR 0 8
32509: PUSH
32510: LD_INT 1
32512: ARRAY
32513: PPUSH
32514: LD_VAR 0 8
32518: PUSH
32519: LD_INT 2
32521: ARRAY
32522: PPUSH
32523: CALL_OW 298
32527: PUSH
32528: LD_EXP 109
32532: PUSH
32533: LD_VAR 0 1
32537: ARRAY
32538: PUSH
32539: LD_INT 2
32541: ARRAY
32542: LESSEQUAL
32543: IFFALSE 32555
// begin temp_value = true ;
32545: LD_ADDR_VAR 0 7
32549: PUSH
32550: LD_INT 1
32552: ST_TO_ADDR
// break ;
32553: GO 32557
// end ;
32555: GO 32484
32557: POP
32558: POP
// if not temp_value then
32559: LD_VAR 0 7
32563: NOT
32564: IFFALSE 32641
// for val in lapsers do
32566: LD_ADDR_VAR 0 8
32570: PUSH
32571: LD_VAR 0 9
32575: PUSH
32576: FOR_IN
32577: IFFALSE 32639
// if GetDistXY ( temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , GetX ( val ) , GetY ( val ) ) <= 11 then
32579: LD_VAR 0 6
32583: PUSH
32584: LD_INT 1
32586: ARRAY
32587: PPUSH
32588: LD_VAR 0 6
32592: PUSH
32593: LD_INT 2
32595: ARRAY
32596: PPUSH
32597: LD_VAR 0 8
32601: PPUSH
32602: CALL_OW 250
32606: PPUSH
32607: LD_VAR 0 8
32611: PPUSH
32612: CALL_OW 251
32616: PPUSH
32617: CALL_OW 298
32621: PUSH
32622: LD_INT 11
32624: LESSEQUAL
32625: IFFALSE 32637
// begin temp_value = true ;
32627: LD_ADDR_VAR 0 7
32631: PUSH
32632: LD_INT 1
32634: ST_TO_ADDR
// break ;
32635: GO 32639
// end ;
32637: GO 32576
32639: POP
32640: POP
// if not temp_value then
32641: LD_VAR 0 7
32645: NOT
32646: IFFALSE 32752
// begin ComTimeShift ( i , temp_list_2 [ 1 ] , temp_list_2 [ 2 ] ) ;
32648: LD_VAR 0 3
32652: PPUSH
32653: LD_VAR 0 6
32657: PUSH
32658: LD_INT 1
32660: ARRAY
32661: PPUSH
32662: LD_VAR 0 6
32666: PUSH
32667: LD_INT 2
32669: ARRAY
32670: PPUSH
32671: CALL_OW 154
// temp_list = Insert ( ai_time_shift_hexes_underway [ base ] , 1 , [ temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , i ] ) ;
32675: LD_ADDR_VAR 0 4
32679: PUSH
32680: LD_EXP 111
32684: PUSH
32685: LD_VAR 0 2
32689: ARRAY
32690: PPUSH
32691: LD_INT 1
32693: PPUSH
32694: LD_VAR 0 6
32698: PUSH
32699: LD_INT 1
32701: ARRAY
32702: PUSH
32703: LD_VAR 0 6
32707: PUSH
32708: LD_INT 2
32710: ARRAY
32711: PUSH
32712: LD_VAR 0 3
32716: PUSH
32717: EMPTY
32718: LIST
32719: LIST
32720: LIST
32721: PPUSH
32722: CALL_OW 2
32726: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
32727: LD_ADDR_EXP 111
32731: PUSH
32732: LD_EXP 111
32736: PPUSH
32737: LD_VAR 0 2
32741: PPUSH
32742: LD_VAR 0 4
32746: PPUSH
32747: CALL_OW 1
32751: ST_TO_ADDR
// end ; end ; end ;
32752: GO 32295
32754: POP
32755: POP
// end ;
32756: GO 32043
32758: POP
32759: POP
// until false ;
32760: LD_INT 0
32762: IFFALSE 32026
// end ;
32764: PPOPN 9
32766: END
// every 0 0$1 + 0 0$0.2 do var base , i , temp_list , un1 , temp_list_2 , temp_value ; var shooting_delay ;
32767: GO 32769
32769: DISABLE
32770: LD_INT 0
32772: PPUSH
32773: PPUSH
32774: PPUSH
32775: PPUSH
32776: PPUSH
32777: PPUSH
32778: PPUSH
// begin shooting_delay = [ 0 0$0 , 0 0$0 , 0 0$0 , 0 0$0 ] ;
32779: LD_ADDR_VAR 0 7
32783: PUSH
32784: LD_INT 0
32786: PUSH
32787: LD_INT 0
32789: PUSH
32790: LD_INT 0
32792: PUSH
32793: LD_INT 0
32795: PUSH
32796: EMPTY
32797: LIST
32798: LIST
32799: LIST
32800: LIST
32801: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
32802: LD_INT 35
32804: PPUSH
32805: CALL_OW 67
// if difficulty = 1 then
32809: LD_OWVAR 67
32813: PUSH
32814: LD_INT 1
32816: EQUAL
32817: IFFALSE 32821
// exit ;
32819: GO 33314
// for base in ai_bases do
32821: LD_ADDR_VAR 0 1
32825: PUSH
32826: LD_EXP 39
32830: PUSH
32831: FOR_IN
32832: IFFALSE 33308
// begin if base in [ 2 , 3 , 4 ] then
32834: LD_VAR 0 1
32838: PUSH
32839: LD_INT 2
32841: PUSH
32842: LD_INT 3
32844: PUSH
32845: LD_INT 4
32847: PUSH
32848: EMPTY
32849: LIST
32850: LIST
32851: LIST
32852: IN
32853: IFFALSE 32857
// continue ;
32855: GO 32831
// if shooting_delay [ base ] > 0 0$0 then
32857: LD_VAR 0 7
32861: PUSH
32862: LD_VAR 0 1
32866: ARRAY
32867: PUSH
32868: LD_INT 0
32870: GREATER
32871: IFFALSE 32910
// begin shooting_delay = Replace ( shooting_delay , base , shooting_delay [ base ] - 0 0$1 ) ;
32873: LD_ADDR_VAR 0 7
32877: PUSH
32878: LD_VAR 0 7
32882: PPUSH
32883: LD_VAR 0 1
32887: PPUSH
32888: LD_VAR 0 7
32892: PUSH
32893: LD_VAR 0 1
32897: ARRAY
32898: PUSH
32899: LD_INT 35
32901: MINUS
32902: PPUSH
32903: CALL_OW 1
32907: ST_TO_ADDR
// continue ;
32908: GO 32831
// end ; if Rand ( 1 , 10 ) > 1 then
32910: LD_INT 1
32912: PPUSH
32913: LD_INT 10
32915: PPUSH
32916: CALL_OW 12
32920: PUSH
32921: LD_INT 1
32923: GREATER
32924: IFFALSE 32928
// continue ;
32926: GO 32831
// temp_list = [ ] ;
32928: LD_ADDR_VAR 0 3
32932: PUSH
32933: EMPTY
32934: ST_TO_ADDR
// for i in ai_soldiers [ base ] diff ai_heal_these_humans [ base ] do
32935: LD_ADDR_VAR 0 2
32939: PUSH
32940: LD_EXP 40
32944: PUSH
32945: LD_VAR 0 1
32949: ARRAY
32950: PUSH
32951: LD_EXP 75
32955: PUSH
32956: LD_VAR 0 1
32960: ARRAY
32961: DIFF
32962: PUSH
32963: FOR_IN
32964: IFFALSE 33007
// if IsInUnit ( i ) in ai_armouries [ base ] then
32966: LD_VAR 0 2
32970: PPUSH
32971: CALL_OW 310
32975: PUSH
32976: LD_EXP 52
32980: PUSH
32981: LD_VAR 0 1
32985: ARRAY
32986: IN
32987: IFFALSE 33005
// temp_list = temp_list ^ i ;
32989: LD_ADDR_VAR 0 3
32993: PUSH
32994: LD_VAR 0 3
32998: PUSH
32999: LD_VAR 0 2
33003: ADD
33004: ST_TO_ADDR
33005: GO 32963
33007: POP
33008: POP
// for i in temp_list do
33009: LD_ADDR_VAR 0 2
33013: PUSH
33014: LD_VAR 0 3
33018: PUSH
33019: FOR_IN
33020: IFFALSE 33304
// if GetClass ( i ) = class_bazooker then
33022: LD_VAR 0 2
33026: PPUSH
33027: CALL_OW 257
33031: PUSH
33032: LD_INT 9
33034: EQUAL
33035: IFFALSE 33302
// begin temp_list = GetTaskList ( i ) ;
33037: LD_ADDR_VAR 0 3
33041: PUSH
33042: LD_VAR 0 2
33046: PPUSH
33047: CALL_OW 437
33051: ST_TO_ADDR
// if temp_list > 0 then
33052: LD_VAR 0 3
33056: PUSH
33057: LD_INT 0
33059: GREATER
33060: IFFALSE 33100
// if temp_list [ 1 ] [ 1 ] = & or temp_list [ 1 ] [ 1 ] = % then
33062: LD_VAR 0 3
33066: PUSH
33067: LD_INT 1
33069: ARRAY
33070: PUSH
33071: LD_INT 1
33073: ARRAY
33074: PUSH
33075: LD_STRING &
33077: EQUAL
33078: PUSH
33079: LD_VAR 0 3
33083: PUSH
33084: LD_INT 1
33086: ARRAY
33087: PUSH
33088: LD_INT 1
33090: ARRAY
33091: PUSH
33092: LD_STRING %
33094: EQUAL
33095: OR
33096: IFFALSE 33100
// continue ;
33098: GO 33019
// un1 = Attacks ( i ) ;
33100: LD_ADDR_VAR 0 4
33104: PUSH
33105: LD_VAR 0 2
33109: PPUSH
33110: CALL_OW 320
33114: ST_TO_ADDR
// if un1 > 0 and not IsInArea ( un1 , GetBaseArea ( base ) ) then
33115: LD_VAR 0 4
33119: PUSH
33120: LD_INT 0
33122: GREATER
33123: PUSH
33124: LD_VAR 0 4
33128: PPUSH
33129: LD_VAR 0 1
33133: PPUSH
33134: CALL 24795 0 1
33138: PPUSH
33139: CALL_OW 308
33143: NOT
33144: AND
33145: IFFALSE 33302
// begin temp_list_2 = [ GetX ( un1 ) , GetY ( un1 ) ] ;
33147: LD_ADDR_VAR 0 5
33151: PUSH
33152: LD_VAR 0 4
33156: PPUSH
33157: CALL_OW 250
33161: PUSH
33162: LD_VAR 0 4
33166: PPUSH
33167: CALL_OW 251
33171: PUSH
33172: EMPTY
33173: LIST
33174: LIST
33175: ST_TO_ADDR
// temp_value = AI_GetTurnDirection ( GetX ( i ) , GetY ( i ) , temp_list_2 [ 1 ] , temp_list_2 [ 2 ] ) ;
33176: LD_ADDR_VAR 0 6
33180: PUSH
33181: LD_VAR 0 2
33185: PPUSH
33186: CALL_OW 250
33190: PPUSH
33191: LD_VAR 0 2
33195: PPUSH
33196: CALL_OW 251
33200: PPUSH
33201: LD_VAR 0 5
33205: PUSH
33206: LD_INT 1
33208: ARRAY
33209: PPUSH
33210: LD_VAR 0 5
33214: PUSH
33215: LD_INT 2
33217: ARRAY
33218: PPUSH
33219: CALL 18897 0 4
33223: ST_TO_ADDR
// ComSpaceShift ( i , ShiftX ( temp_list_2 [ 1 ] , temp_value , 1 ) , ShiftY ( temp_list_2 [ 2 ] , temp_value , 1 ) ) ;
33224: LD_VAR 0 2
33228: PPUSH
33229: LD_VAR 0 5
33233: PUSH
33234: LD_INT 1
33236: ARRAY
33237: PPUSH
33238: LD_VAR 0 6
33242: PPUSH
33243: LD_INT 1
33245: PPUSH
33246: CALL_OW 272
33250: PPUSH
33251: LD_VAR 0 5
33255: PUSH
33256: LD_INT 2
33258: ARRAY
33259: PPUSH
33260: LD_VAR 0 6
33264: PPUSH
33265: LD_INT 1
33267: PPUSH
33268: CALL_OW 273
33272: PPUSH
33273: CALL_OW 153
// shooting_delay = Replace ( shooting_delay , base , 0 0$10 ) ;
33277: LD_ADDR_VAR 0 7
33281: PUSH
33282: LD_VAR 0 7
33286: PPUSH
33287: LD_VAR 0 1
33291: PPUSH
33292: LD_INT 350
33294: PPUSH
33295: CALL_OW 1
33299: ST_TO_ADDR
// break ;
33300: GO 33304
// end ; end ;
33302: GO 33019
33304: POP
33305: POP
// end ;
33306: GO 32831
33308: POP
33309: POP
// until false ;
33310: LD_INT 0
33312: IFFALSE 32802
// end ;
33314: PPOPN 7
33316: END
// every 0 0$1 do var base , side , val , temp_value , temp_list ;
33317: GO 33319
33319: DISABLE
33320: LD_INT 0
33322: PPUSH
33323: PPUSH
33324: PPUSH
33325: PPUSH
33326: PPUSH
// begin repeat wait ( 1 ) ;
33327: LD_INT 1
33329: PPUSH
33330: CALL_OW 67
// for base in ai_bases do
33334: LD_ADDR_VAR 0 1
33338: PUSH
33339: LD_EXP 39
33343: PUSH
33344: FOR_IN
33345: IFFALSE 33763
// begin if base in [ 3 , 4 ] then
33347: LD_VAR 0 1
33351: PUSH
33352: LD_INT 3
33354: PUSH
33355: LD_INT 4
33357: PUSH
33358: EMPTY
33359: LIST
33360: LIST
33361: IN
33362: IFFALSE 33366
// continue ;
33364: GO 33344
// side = GetBaseSide ( base ) ;
33366: LD_ADDR_VAR 0 2
33370: PUSH
33371: LD_VAR 0 1
33375: PPUSH
33376: CALL 24885 0 1
33380: ST_TO_ADDR
// val = 1 ;
33381: LD_ADDR_VAR 0 3
33385: PUSH
33386: LD_INT 1
33388: ST_TO_ADDR
// while val <= ai_time_shift_hexes_underway [ base ] do
33389: LD_VAR 0 3
33393: PUSH
33394: LD_EXP 111
33398: PUSH
33399: LD_VAR 0 1
33403: ARRAY
33404: LESSEQUAL
33405: IFFALSE 33761
// begin temp_value = false ;
33407: LD_ADDR_VAR 0 4
33411: PUSH
33412: LD_INT 0
33414: ST_TO_ADDR
// temp_list = GetTaskList ( ai_time_shift_hexes_underway [ base ] [ val ] [ 3 ] ) ;
33415: LD_ADDR_VAR 0 5
33419: PUSH
33420: LD_EXP 111
33424: PUSH
33425: LD_VAR 0 1
33429: ARRAY
33430: PUSH
33431: LD_VAR 0 3
33435: ARRAY
33436: PUSH
33437: LD_INT 3
33439: ARRAY
33440: PPUSH
33441: CALL_OW 437
33445: ST_TO_ADDR
// if IsOk ( ai_time_shift_hexes_underway [ base ] [ val ] [ 3 ] ) then
33446: LD_EXP 111
33450: PUSH
33451: LD_VAR 0 1
33455: ARRAY
33456: PUSH
33457: LD_VAR 0 3
33461: ARRAY
33462: PUSH
33463: LD_INT 3
33465: ARRAY
33466: PPUSH
33467: CALL_OW 302
33471: IFFALSE 33522
// begin if temp_list = 0 then
33473: LD_VAR 0 5
33477: PUSH
33478: LD_INT 0
33480: EQUAL
33481: IFFALSE 33493
// temp_value = true else
33483: LD_ADDR_VAR 0 4
33487: PUSH
33488: LD_INT 1
33490: ST_TO_ADDR
33491: GO 33520
// if not temp_list [ 1 ] [ 1 ] = & then
33493: LD_VAR 0 5
33497: PUSH
33498: LD_INT 1
33500: ARRAY
33501: PUSH
33502: LD_INT 1
33504: ARRAY
33505: PUSH
33506: LD_STRING &
33508: EQUAL
33509: NOT
33510: IFFALSE 33520
// temp_value = true ;
33512: LD_ADDR_VAR 0 4
33516: PUSH
33517: LD_INT 1
33519: ST_TO_ADDR
// end else
33520: GO 33575
// begin temp_list = Delete ( ai_time_shift_hexes_underway [ base ] , val ) ;
33522: LD_ADDR_VAR 0 5
33526: PUSH
33527: LD_EXP 111
33531: PUSH
33532: LD_VAR 0 1
33536: ARRAY
33537: PPUSH
33538: LD_VAR 0 3
33542: PPUSH
33543: CALL_OW 3
33547: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
33548: LD_ADDR_EXP 111
33552: PUSH
33553: LD_EXP 111
33557: PPUSH
33558: LD_VAR 0 1
33562: PPUSH
33563: LD_VAR 0 5
33567: PPUSH
33568: CALL_OW 1
33572: ST_TO_ADDR
// continue ;
33573: GO 33389
// end ; if temp_value then
33575: LD_VAR 0 4
33579: IFFALSE 33745
// 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 ] ] ) ;
33581: LD_ADDR_VAR 0 5
33585: PUSH
33586: LD_EXP 110
33590: PUSH
33591: LD_VAR 0 1
33595: ARRAY
33596: PPUSH
33597: LD_INT 1
33599: PPUSH
33600: LD_EXP 111
33604: PUSH
33605: LD_VAR 0 1
33609: ARRAY
33610: PUSH
33611: LD_VAR 0 3
33615: ARRAY
33616: PUSH
33617: LD_INT 1
33619: ARRAY
33620: PUSH
33621: LD_EXP 111
33625: PUSH
33626: LD_VAR 0 1
33630: ARRAY
33631: PUSH
33632: LD_VAR 0 3
33636: ARRAY
33637: PUSH
33638: LD_INT 2
33640: ARRAY
33641: PUSH
33642: LD_EXP 109
33646: PUSH
33647: LD_VAR 0 2
33651: ARRAY
33652: PUSH
33653: LD_INT 1
33655: ARRAY
33656: PUSH
33657: EMPTY
33658: LIST
33659: LIST
33660: LIST
33661: PPUSH
33662: CALL_OW 2
33666: ST_TO_ADDR
// ai_time_shift_hexes = Replace ( ai_time_shift_hexes , base , temp_list ) ;
33667: LD_ADDR_EXP 110
33671: PUSH
33672: LD_EXP 110
33676: PPUSH
33677: LD_VAR 0 1
33681: PPUSH
33682: LD_VAR 0 5
33686: PPUSH
33687: CALL_OW 1
33691: ST_TO_ADDR
// temp_list = Delete ( ai_time_shift_hexes_underway [ base ] , val ) ;
33692: LD_ADDR_VAR 0 5
33696: PUSH
33697: LD_EXP 111
33701: PUSH
33702: LD_VAR 0 1
33706: ARRAY
33707: PPUSH
33708: LD_VAR 0 3
33712: PPUSH
33713: CALL_OW 3
33717: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
33718: LD_ADDR_EXP 111
33722: PUSH
33723: LD_EXP 111
33727: PPUSH
33728: LD_VAR 0 1
33732: PPUSH
33733: LD_VAR 0 5
33737: PPUSH
33738: CALL_OW 1
33742: ST_TO_ADDR
// continue ;
33743: GO 33389
// end ; val = val + 1 ;
33745: LD_ADDR_VAR 0 3
33749: PUSH
33750: LD_VAR 0 3
33754: PUSH
33755: LD_INT 1
33757: PLUS
33758: ST_TO_ADDR
// end ;
33759: GO 33389
// end ;
33761: GO 33344
33763: POP
33764: POP
// until false ;
33765: LD_INT 0
33767: IFFALSE 33327
// end ;
33769: PPOPN 5
33771: END
// every 0 0$1 + 0 0$0.3 do var base , side , val , temp_list , time ;
33772: GO 33774
33774: DISABLE
33775: LD_INT 0
33777: PPUSH
33778: PPUSH
33779: PPUSH
33780: PPUSH
33781: PPUSH
// begin repeat wait ( 0 0$1 ) ;
33782: LD_INT 35
33784: PPUSH
33785: CALL_OW 67
// for base in ai_bases do
33789: LD_ADDR_VAR 0 1
33793: PUSH
33794: LD_EXP 39
33798: PUSH
33799: FOR_IN
33800: IFFALSE 34066
// begin if base in [ 3 , 4 ] then
33802: LD_VAR 0 1
33806: PUSH
33807: LD_INT 3
33809: PUSH
33810: LD_INT 4
33812: PUSH
33813: EMPTY
33814: LIST
33815: LIST
33816: IN
33817: IFFALSE 33821
// continue ;
33819: GO 33799
// side = GetBaseSide ( base ) ;
33821: LD_ADDR_VAR 0 2
33825: PUSH
33826: LD_VAR 0 1
33830: PPUSH
33831: CALL 24885 0 1
33835: ST_TO_ADDR
// val = 1 ;
33836: LD_ADDR_VAR 0 3
33840: PUSH
33841: LD_INT 1
33843: ST_TO_ADDR
// while val <= ai_time_shift_hexes [ base ] do
33844: LD_VAR 0 3
33848: PUSH
33849: LD_EXP 110
33853: PUSH
33854: LD_VAR 0 1
33858: ARRAY
33859: LESSEQUAL
33860: IFFALSE 34064
// begin time = ai_time_shift_hexes [ base ] [ val ] [ 3 ] - 0 0$1 ;
33862: LD_ADDR_VAR 0 5
33866: PUSH
33867: LD_EXP 110
33871: PUSH
33872: LD_VAR 0 1
33876: ARRAY
33877: PUSH
33878: LD_VAR 0 3
33882: ARRAY
33883: PUSH
33884: LD_INT 3
33886: ARRAY
33887: PUSH
33888: LD_INT 35
33890: MINUS
33891: ST_TO_ADDR
// if time <= 0 0$0 then
33892: LD_VAR 0 5
33896: PUSH
33897: LD_INT 0
33899: LESSEQUAL
33900: IFFALSE 33957
// begin temp_list = Delete ( ai_time_shift_hexes [ base ] , val ) ;
33902: LD_ADDR_VAR 0 4
33906: PUSH
33907: LD_EXP 110
33911: PUSH
33912: LD_VAR 0 1
33916: ARRAY
33917: PPUSH
33918: LD_VAR 0 3
33922: PPUSH
33923: CALL_OW 3
33927: ST_TO_ADDR
// ai_time_shift_hexes = Replace ( ai_time_shift_hexes , base , temp_list ) ;
33928: LD_ADDR_EXP 110
33932: PUSH
33933: LD_EXP 110
33937: PPUSH
33938: LD_VAR 0 1
33942: PPUSH
33943: LD_VAR 0 4
33947: PPUSH
33948: CALL_OW 1
33952: ST_TO_ADDR
// continue ;
33953: GO 33844
// end else
33955: GO 34048
// begin temp_list = Replace ( ai_time_shift_hexes [ base ] [ val ] , 3 , time ) ;
33957: LD_ADDR_VAR 0 4
33961: PUSH
33962: LD_EXP 110
33966: PUSH
33967: LD_VAR 0 1
33971: ARRAY
33972: PUSH
33973: LD_VAR 0 3
33977: ARRAY
33978: PPUSH
33979: LD_INT 3
33981: PPUSH
33982: LD_VAR 0 5
33986: PPUSH
33987: CALL_OW 1
33991: ST_TO_ADDR
// temp_list = Replace ( ai_time_shift_hexes [ base ] , val , temp_list ) ;
33992: LD_ADDR_VAR 0 4
33996: PUSH
33997: LD_EXP 110
34001: PUSH
34002: LD_VAR 0 1
34006: ARRAY
34007: PPUSH
34008: LD_VAR 0 3
34012: PPUSH
34013: LD_VAR 0 4
34017: PPUSH
34018: CALL_OW 1
34022: ST_TO_ADDR
// ai_time_shift_hexes = Replace ( ai_time_shift_hexes , base , temp_list ) ;
34023: LD_ADDR_EXP 110
34027: PUSH
34028: LD_EXP 110
34032: PPUSH
34033: LD_VAR 0 1
34037: PPUSH
34038: LD_VAR 0 4
34042: PPUSH
34043: CALL_OW 1
34047: ST_TO_ADDR
// end ; val = val + 1 ;
34048: LD_ADDR_VAR 0 3
34052: PUSH
34053: LD_VAR 0 3
34057: PUSH
34058: LD_INT 1
34060: PLUS
34061: ST_TO_ADDR
// end ;
34062: GO 33844
// end ;
34064: GO 33799
34066: POP
34067: POP
// until false ;
34068: LD_INT 0
34070: IFFALSE 33782
// end ;
34072: PPOPN 5
34074: 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
34075: LD_INT 0
34077: PPUSH
34078: PPUSH
34079: PPUSH
34080: PPUSH
34081: PPUSH
34082: PPUSH
34083: PPUSH
34084: PPUSH
34085: PPUSH
34086: PPUSH
// if human_list = 0 then
34087: LD_VAR 0 2
34091: PUSH
34092: LD_INT 0
34094: EQUAL
34095: IFFALSE 34099
// exit ;
34097: GO 35500
// area = GetBaseArea ( base ) ;
34099: LD_ADDR_VAR 0 13
34103: PUSH
34104: LD_VAR 0 1
34108: PPUSH
34109: CALL 24795 0 1
34113: ST_TO_ADDR
// under_attack = BaseUnderAttack ( base , - 1 ) ;
34114: LD_ADDR_VAR 0 17
34118: PUSH
34119: LD_VAR 0 1
34123: PPUSH
34124: LD_INT 1
34126: NEG
34127: PPUSH
34128: CALL 45321 0 2
34132: ST_TO_ADDR
// if not GetClass ( human_list [ 1 ] ) in [ class_engineer , class_apeman_engineer , class_mechanic , class_scientistic ] and building_list > 0 then
34133: LD_VAR 0 2
34137: PUSH
34138: LD_INT 1
34140: ARRAY
34141: PPUSH
34142: CALL_OW 257
34146: PUSH
34147: LD_INT 2
34149: PUSH
34150: LD_INT 16
34152: PUSH
34153: LD_INT 3
34155: PUSH
34156: LD_INT 4
34158: PUSH
34159: EMPTY
34160: LIST
34161: LIST
34162: LIST
34163: LIST
34164: IN
34165: NOT
34166: PUSH
34167: LD_VAR 0 3
34171: PUSH
34172: LD_INT 0
34174: GREATER
34175: AND
34176: IFFALSE 34265
// begin val = 0 ;
34178: LD_ADDR_VAR 0 11
34182: PUSH
34183: LD_INT 0
34185: ST_TO_ADDR
// for i in human_list do
34186: LD_ADDR_VAR 0 9
34190: PUSH
34191: LD_VAR 0 2
34195: PUSH
34196: FOR_IN
34197: IFFALSE 34241
// if GetClass ( i ) in [ class_sniper , class_mortar , class_bazooker ] then
34199: LD_VAR 0 9
34203: PPUSH
34204: CALL_OW 257
34208: PUSH
34209: LD_INT 5
34211: PUSH
34212: LD_INT 8
34214: PUSH
34215: LD_INT 9
34217: PUSH
34218: EMPTY
34219: LIST
34220: LIST
34221: LIST
34222: IN
34223: IFFALSE 34239
// val = val + 1 ;
34225: LD_ADDR_VAR 0 11
34229: PUSH
34230: LD_VAR 0 11
34234: PUSH
34235: LD_INT 1
34237: PLUS
34238: ST_TO_ADDR
34239: GO 34196
34241: POP
34242: POP
// special_un_count = val div ( building_list + 0 ) ;
34243: LD_ADDR_VAR 0 14
34247: PUSH
34248: LD_VAR 0 11
34252: PUSH
34253: LD_VAR 0 3
34257: PUSH
34258: LD_INT 0
34260: PLUS
34261: DIV
34262: ST_TO_ADDR
// end else
34263: GO 34273
// special_un_count = 0 ;
34265: LD_ADDR_VAR 0 14
34269: PUSH
34270: LD_INT 0
34272: ST_TO_ADDR
// val = building_list + 0 ;
34273: LD_ADDR_VAR 0 11
34277: PUSH
34278: LD_VAR 0 3
34282: PUSH
34283: LD_INT 0
34285: PLUS
34286: ST_TO_ADDR
// while val > 0 and human_list > 0 do
34287: LD_VAR 0 11
34291: PUSH
34292: LD_INT 0
34294: GREATER
34295: PUSH
34296: LD_VAR 0 2
34300: PUSH
34301: LD_INT 0
34303: GREATER
34304: AND
34305: IFFALSE 35234
// begin temp_list = [ ] ;
34307: LD_ADDR_VAR 0 10
34311: PUSH
34312: EMPTY
34313: ST_TO_ADDR
// for i in human_list do
34314: LD_ADDR_VAR 0 9
34318: PUSH
34319: LD_VAR 0 2
34323: PUSH
34324: FOR_IN
34325: IFFALSE 34368
// if IsInUnit ( i ) = building_list [ val ] then
34327: LD_VAR 0 9
34331: PPUSH
34332: CALL_OW 310
34336: PUSH
34337: LD_VAR 0 3
34341: PUSH
34342: LD_VAR 0 11
34346: ARRAY
34347: EQUAL
34348: IFFALSE 34366
// temp_list = temp_list ^ i ;
34350: LD_ADDR_VAR 0 10
34354: PUSH
34355: LD_VAR 0 10
34359: PUSH
34360: LD_VAR 0 9
34364: ADD
34365: ST_TO_ADDR
34366: GO 34324
34368: POP
34369: POP
// human_list = temp_list ^ ( human_list diff temp_list ) ;
34370: LD_ADDR_VAR 0 2
34374: PUSH
34375: LD_VAR 0 10
34379: PUSH
34380: LD_VAR 0 2
34384: PUSH
34385: LD_VAR 0 10
34389: DIFF
34390: ADD
34391: ST_TO_ADDR
// counter = 0 ;
34392: LD_ADDR_VAR 0 15
34396: PUSH
34397: LD_INT 0
34399: ST_TO_ADDR
// temp_list = [ ] ;
34400: LD_ADDR_VAR 0 10
34404: PUSH
34405: EMPTY
34406: ST_TO_ADDR
// for i = 1 to human_list div val do
34407: LD_ADDR_VAR 0 9
34411: PUSH
34412: DOUBLE
34413: LD_INT 1
34415: DEC
34416: ST_TO_ADDR
34417: LD_VAR 0 2
34421: PUSH
34422: LD_VAR 0 11
34426: DIV
34427: PUSH
34428: FOR_TO
34429: IFFALSE 34794
// begin if i > building_capacity then
34431: LD_VAR 0 9
34435: PUSH
34436: LD_VAR 0 5
34440: GREATER
34441: IFFALSE 34445
// break ;
34443: GO 34794
// if special_un_count = 0 then
34445: LD_VAR 0 14
34449: PUSH
34450: LD_INT 0
34452: EQUAL
34453: IFFALSE 34495
// begin temp_list = temp_list ^ human_list [ 1 ] ;
34455: LD_ADDR_VAR 0 10
34459: PUSH
34460: LD_VAR 0 10
34464: PUSH
34465: LD_VAR 0 2
34469: PUSH
34470: LD_INT 1
34472: ARRAY
34473: ADD
34474: ST_TO_ADDR
// human_list = Delete ( human_list , 1 ) ;
34475: LD_ADDR_VAR 0 2
34479: PUSH
34480: LD_VAR 0 2
34484: PPUSH
34485: LD_INT 1
34487: PPUSH
34488: CALL_OW 3
34492: ST_TO_ADDR
// end else
34493: GO 34792
// if counter = special_un_count then
34495: LD_VAR 0 15
34499: PUSH
34500: LD_VAR 0 14
34504: EQUAL
34505: IFFALSE 34644
// begin temp_unit = 0 ;
34507: LD_ADDR_VAR 0 12
34511: PUSH
34512: LD_INT 0
34514: ST_TO_ADDR
// for k = 1 to human_list do
34515: LD_ADDR_VAR 0 16
34519: PUSH
34520: DOUBLE
34521: LD_INT 1
34523: DEC
34524: ST_TO_ADDR
34525: LD_VAR 0 2
34529: PUSH
34530: FOR_TO
34531: IFFALSE 34580
// if not GetClass ( human_list [ k ] ) in [ class_sniper , class_mortar , class_bazooker ] then
34533: LD_VAR 0 2
34537: PUSH
34538: LD_VAR 0 16
34542: ARRAY
34543: PPUSH
34544: CALL_OW 257
34548: PUSH
34549: LD_INT 5
34551: PUSH
34552: LD_INT 8
34554: PUSH
34555: LD_INT 9
34557: PUSH
34558: EMPTY
34559: LIST
34560: LIST
34561: LIST
34562: IN
34563: NOT
34564: IFFALSE 34578
// begin temp_unit = k ;
34566: LD_ADDR_VAR 0 12
34570: PUSH
34571: LD_VAR 0 16
34575: ST_TO_ADDR
// break ;
34576: GO 34580
// end ;
34578: GO 34530
34580: POP
34581: POP
// if temp_unit = 0 then
34582: LD_VAR 0 12
34586: PUSH
34587: LD_INT 0
34589: EQUAL
34590: IFFALSE 34600
// temp_unit = 1 ;
34592: LD_ADDR_VAR 0 12
34596: PUSH
34597: LD_INT 1
34599: ST_TO_ADDR
// temp_list = temp_list ^ human_list [ temp_unit ] ;
34600: LD_ADDR_VAR 0 10
34604: PUSH
34605: LD_VAR 0 10
34609: PUSH
34610: LD_VAR 0 2
34614: PUSH
34615: LD_VAR 0 12
34619: ARRAY
34620: ADD
34621: ST_TO_ADDR
// human_list = Delete ( human_list , temp_unit ) ;
34622: LD_ADDR_VAR 0 2
34626: PUSH
34627: LD_VAR 0 2
34631: PPUSH
34632: LD_VAR 0 12
34636: PPUSH
34637: CALL_OW 3
34641: ST_TO_ADDR
// end else
34642: GO 34792
// begin counter = counter + 1 ;
34644: LD_ADDR_VAR 0 15
34648: PUSH
34649: LD_VAR 0 15
34653: PUSH
34654: LD_INT 1
34656: PLUS
34657: ST_TO_ADDR
// temp_unit = 0 ;
34658: LD_ADDR_VAR 0 12
34662: PUSH
34663: LD_INT 0
34665: ST_TO_ADDR
// for k = 1 to human_list do
34666: LD_ADDR_VAR 0 16
34670: PUSH
34671: DOUBLE
34672: LD_INT 1
34674: DEC
34675: ST_TO_ADDR
34676: LD_VAR 0 2
34680: PUSH
34681: FOR_TO
34682: IFFALSE 34730
// if GetClass ( human_list [ k ] ) in [ class_sniper , class_mortar , class_bazooker ] then
34684: LD_VAR 0 2
34688: PUSH
34689: LD_VAR 0 16
34693: ARRAY
34694: PPUSH
34695: CALL_OW 257
34699: PUSH
34700: LD_INT 5
34702: PUSH
34703: LD_INT 8
34705: PUSH
34706: LD_INT 9
34708: PUSH
34709: EMPTY
34710: LIST
34711: LIST
34712: LIST
34713: IN
34714: IFFALSE 34728
// begin temp_unit = k ;
34716: LD_ADDR_VAR 0 12
34720: PUSH
34721: LD_VAR 0 16
34725: ST_TO_ADDR
// break ;
34726: GO 34730
// end ;
34728: GO 34681
34730: POP
34731: POP
// if temp_unit = 0 then
34732: LD_VAR 0 12
34736: PUSH
34737: LD_INT 0
34739: EQUAL
34740: IFFALSE 34750
// temp_unit = 1 ;
34742: LD_ADDR_VAR 0 12
34746: PUSH
34747: LD_INT 1
34749: ST_TO_ADDR
// temp_list = temp_list ^ human_list [ temp_unit ] ;
34750: LD_ADDR_VAR 0 10
34754: PUSH
34755: LD_VAR 0 10
34759: PUSH
34760: LD_VAR 0 2
34764: PUSH
34765: LD_VAR 0 12
34769: ARRAY
34770: ADD
34771: ST_TO_ADDR
// human_list = Delete ( human_list , temp_unit ) ;
34772: LD_ADDR_VAR 0 2
34776: PUSH
34777: LD_VAR 0 2
34781: PPUSH
34782: LD_VAR 0 12
34786: PPUSH
34787: CALL_OW 3
34791: ST_TO_ADDR
// end ; end ;
34792: GO 34428
34794: POP
34795: POP
// for i in temp_list do
34796: LD_ADDR_VAR 0 9
34800: PUSH
34801: LD_VAR 0 10
34805: PUSH
34806: FOR_IN
34807: IFFALSE 35216
// begin temp_unit = IsInUnit ( i ) ;
34809: LD_ADDR_VAR 0 12
34813: PUSH
34814: LD_VAR 0 9
34818: PPUSH
34819: CALL_OW 310
34823: ST_TO_ADDR
// if temp_unit <> building_list [ val ] then
34824: LD_VAR 0 12
34828: PUSH
34829: LD_VAR 0 3
34833: PUSH
34834: LD_VAR 0 11
34838: ARRAY
34839: NONEQUAL
34840: IFFALSE 35214
// if temp_unit > 0 then
34842: LD_VAR 0 12
34846: PUSH
34847: LD_INT 0
34849: GREATER
34850: IFFALSE 34905
// begin case GetType ( temp_unit ) of unit_vehicle :
34852: LD_VAR 0 12
34856: PPUSH
34857: CALL_OW 247
34861: PUSH
34862: LD_INT 2
34864: DOUBLE
34865: EQUAL
34866: IFTRUE 34870
34868: GO 34882
34870: POP
// ComExitVehicle ( i ) ; unit_building :
34871: LD_VAR 0 9
34875: PPUSH
34876: CALL_OW 121
34880: GO 34903
34882: LD_INT 3
34884: DOUBLE
34885: EQUAL
34886: IFTRUE 34890
34888: GO 34902
34890: POP
// ComExitBuilding ( i ) ; end ;
34891: LD_VAR 0 9
34895: PPUSH
34896: CALL_OW 122
34900: GO 34903
34902: POP
// end else
34903: GO 35214
// begin if IsInArea ( i , area ) or not aggressive_pullback then
34905: LD_VAR 0 9
34909: PPUSH
34910: LD_VAR 0 13
34914: PPUSH
34915: CALL_OW 308
34919: PUSH
34920: LD_VAR 0 7
34924: NOT
34925: OR
34926: IFFALSE 34950
// ComEnterUnit ( i , building_list [ val ] ) else
34928: LD_VAR 0 9
34932: PPUSH
34933: LD_VAR 0 3
34937: PUSH
34938: LD_VAR 0 11
34942: ARRAY
34943: PPUSH
34944: CALL_OW 120
34948: GO 34991
// ComAgressiveMove ( i , GetX ( building_list [ val ] ) , GetY ( building_list [ val ] ) ) ;
34950: LD_VAR 0 9
34954: PPUSH
34955: LD_VAR 0 3
34959: PUSH
34960: LD_VAR 0 11
34964: ARRAY
34965: PPUSH
34966: CALL_OW 250
34970: PPUSH
34971: LD_VAR 0 3
34975: PUSH
34976: LD_VAR 0 11
34980: ARRAY
34981: PPUSH
34982: CALL_OW 251
34986: PPUSH
34987: CALL_OW 114
// if change_to_this_class > 0 then
34991: LD_VAR 0 4
34995: PUSH
34996: LD_INT 0
34998: GREATER
34999: IFFALSE 35100
// begin if GetClass ( i ) <> change_to_this_class and GetNation ( i ) <> nation_nature then
35001: LD_VAR 0 9
35005: PPUSH
35006: CALL_OW 257
35010: PUSH
35011: LD_VAR 0 4
35015: NONEQUAL
35016: PUSH
35017: LD_VAR 0 9
35021: PPUSH
35022: CALL_OW 248
35026: PUSH
35027: LD_INT 0
35029: NONEQUAL
35030: AND
35031: IFFALSE 35098
// 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
35033: LD_VAR 0 4
35037: PUSH
35038: LD_INT 5
35040: PUSH
35041: LD_INT 8
35043: PUSH
35044: LD_INT 9
35046: PUSH
35047: EMPTY
35048: LIST
35049: LIST
35050: LIST
35051: IN
35052: PUSH
35053: LD_VAR 0 3
35057: PUSH
35058: LD_VAR 0 11
35062: ARRAY
35063: PPUSH
35064: CALL_OW 266
35068: PUSH
35069: LD_INT 5
35071: PUSH
35072: LD_INT 35
35074: PUSH
35075: EMPTY
35076: LIST
35077: LIST
35078: IN
35079: NOT
35080: AND
35081: NOT
35082: IFFALSE 35098
// AddComChangeProfession ( i , change_to_this_class ) ;
35084: LD_VAR 0 9
35088: PPUSH
35089: LD_VAR 0 4
35093: PPUSH
35094: CALL_OW 183
// end else
35098: GO 35214
// begin if GetBType ( building_list [ val ] ) in [ b_barracks , b_fort ] then
35100: LD_VAR 0 3
35104: PUSH
35105: LD_VAR 0 11
35109: ARRAY
35110: PPUSH
35111: CALL_OW 266
35115: PUSH
35116: LD_INT 5
35118: PUSH
35119: LD_INT 35
35121: PUSH
35122: EMPTY
35123: LIST
35124: LIST
35125: IN
35126: IFFALSE 35214
// case GetNation ( building_list [ val ] ) of nation_american :
35128: LD_VAR 0 3
35132: PUSH
35133: LD_VAR 0 11
35137: ARRAY
35138: PPUSH
35139: CALL_OW 248
35143: PUSH
35144: LD_INT 1
35146: DOUBLE
35147: EQUAL
35148: IFTRUE 35152
35150: GO 35167
35152: POP
// AddComChangeProfession ( i , class_sniper ) ; nation_arabian :
35153: LD_VAR 0 9
35157: PPUSH
35158: LD_INT 5
35160: PPUSH
35161: CALL_OW 183
35165: GO 35214
35167: LD_INT 2
35169: DOUBLE
35170: EQUAL
35171: IFTRUE 35175
35173: GO 35190
35175: POP
// AddComChangeProfession ( i , class_mortar ) ; nation_russian :
35176: LD_VAR 0 9
35180: PPUSH
35181: LD_INT 8
35183: PPUSH
35184: CALL_OW 183
35188: GO 35214
35190: LD_INT 3
35192: DOUBLE
35193: EQUAL
35194: IFTRUE 35198
35196: GO 35213
35198: POP
// AddComChangeProfession ( i , class_bazooker ) ; end ;
35199: LD_VAR 0 9
35203: PPUSH
35204: LD_INT 9
35206: PPUSH
35207: CALL_OW 183
35211: GO 35214
35213: POP
// end ; end ; end ;
35214: GO 34806
35216: POP
35217: POP
// val = val - 1 ;
35218: LD_ADDR_VAR 0 11
35222: PUSH
35223: LD_VAR 0 11
35227: PUSH
35228: LD_INT 1
35230: MINUS
35231: ST_TO_ADDR
// end ;
35232: GO 34287
// if human_list > 0 then
35234: LD_VAR 0 2
35238: PUSH
35239: LD_INT 0
35241: GREATER
35242: IFFALSE 35500
// if ai_building_under_construction [ base ] > 0 and help_building and not under_attack then
35244: LD_EXP 74
35248: PUSH
35249: LD_VAR 0 1
35253: ARRAY
35254: PUSH
35255: LD_INT 0
35257: GREATER
35258: PUSH
35259: LD_VAR 0 6
35263: AND
35264: PUSH
35265: LD_VAR 0 17
35269: NOT
35270: AND
35271: IFFALSE 35347
// begin for i in GetHumansOutOfUnits ( human_list ) do
35273: LD_ADDR_VAR 0 9
35277: PUSH
35278: LD_VAR 0 2
35282: PPUSH
35283: CALL 45199 0 1
35287: PUSH
35288: FOR_IN
35289: IFFALSE 35343
// SetTaskList ( i , [ [ h , 0 , 0 , ai_building_under_construction [ base ] , 0 , 0 , 0 ] ] ) ;
35291: LD_VAR 0 9
35295: PPUSH
35296: LD_STRING h
35298: PUSH
35299: LD_INT 0
35301: PUSH
35302: LD_INT 0
35304: PUSH
35305: LD_EXP 74
35309: PUSH
35310: LD_VAR 0 1
35314: ARRAY
35315: PUSH
35316: LD_INT 0
35318: PUSH
35319: LD_INT 0
35321: PUSH
35322: LD_INT 0
35324: PUSH
35325: EMPTY
35326: LIST
35327: LIST
35328: LIST
35329: LIST
35330: LIST
35331: LIST
35332: LIST
35333: PUSH
35334: EMPTY
35335: LIST
35336: PPUSH
35337: CALL_OW 446
35341: GO 35288
35343: POP
35344: POP
// end else
35345: GO 35500
// for i in GetHumansOutOfUnits ( human_list ) do
35347: LD_ADDR_VAR 0 9
35351: PUSH
35352: LD_VAR 0 2
35356: PPUSH
35357: CALL 45199 0 1
35361: PUSH
35362: FOR_IN
35363: IFFALSE 35498
// if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
35365: LD_VAR 0 9
35369: PPUSH
35370: LD_EXP 73
35374: PUSH
35375: LD_VAR 0 1
35379: ARRAY
35380: PUSH
35381: LD_INT 1
35383: ARRAY
35384: PPUSH
35385: LD_EXP 73
35389: PUSH
35390: LD_VAR 0 1
35394: ARRAY
35395: PUSH
35396: LD_INT 2
35398: ARRAY
35399: PPUSH
35400: CALL_OW 297
35404: PUSH
35405: LD_INT 4
35407: GREATER
35408: IFFALSE 35496
// if aggressive_pullback then
35410: LD_VAR 0 7
35414: IFFALSE 35457
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) else
35416: LD_VAR 0 9
35420: PPUSH
35421: LD_EXP 73
35425: PUSH
35426: LD_VAR 0 1
35430: ARRAY
35431: PUSH
35432: LD_INT 1
35434: ARRAY
35435: PPUSH
35436: LD_EXP 73
35440: PUSH
35441: LD_VAR 0 1
35445: ARRAY
35446: PUSH
35447: LD_INT 2
35449: ARRAY
35450: PPUSH
35451: CALL_OW 114
35455: GO 35496
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
35457: LD_VAR 0 9
35461: PPUSH
35462: LD_EXP 73
35466: PUSH
35467: LD_VAR 0 1
35471: ARRAY
35472: PUSH
35473: LD_INT 1
35475: ARRAY
35476: PPUSH
35477: LD_EXP 73
35481: PUSH
35482: LD_VAR 0 1
35486: ARRAY
35487: PUSH
35488: LD_INT 2
35490: ARRAY
35491: PPUSH
35492: CALL_OW 111
35496: GO 35362
35498: POP
35499: POP
// end ;
35500: LD_VAR 0 8
35504: 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 ;
35505: GO 35507
35507: DISABLE
35508: LD_INT 0
35510: PPUSH
35511: PPUSH
35512: PPUSH
35513: PPUSH
35514: PPUSH
35515: PPUSH
35516: PPUSH
35517: PPUSH
35518: PPUSH
35519: PPUSH
35520: PPUSH
35521: PPUSH
35522: PPUSH
35523: PPUSH
35524: PPUSH
35525: PPUSH
35526: PPUSH
35527: PPUSH
35528: PPUSH
35529: PPUSH
35530: PPUSH
35531: PPUSH
// begin crane_is_refueling = [ false , false , false , false ] ;
35532: LD_ADDR_VAR 0 21
35536: PUSH
35537: LD_INT 0
35539: PUSH
35540: LD_INT 0
35542: PUSH
35543: LD_INT 0
35545: PUSH
35546: LD_INT 0
35548: PUSH
35549: EMPTY
35550: LIST
35551: LIST
35552: LIST
35553: LIST
35554: ST_TO_ADDR
// try_rebuild_again_time = [ ] ;
35555: LD_ADDR_VAR 0 22
35559: PUSH
35560: EMPTY
35561: ST_TO_ADDR
// for base in ai_bases do
35562: LD_ADDR_VAR 0 9
35566: PUSH
35567: LD_EXP 39
35571: PUSH
35572: FOR_IN
35573: IFFALSE 35600
// try_rebuild_again_time = Replace ( try_rebuild_again_time , base , 0 0$0 ) ;
35575: LD_ADDR_VAR 0 22
35579: PUSH
35580: LD_VAR 0 22
35584: PPUSH
35585: LD_VAR 0 9
35589: PPUSH
35590: LD_INT 0
35592: PPUSH
35593: CALL_OW 1
35597: ST_TO_ADDR
35598: GO 35572
35600: POP
35601: POP
// repeat if ai_bases = 0 then
35602: LD_EXP 39
35606: PUSH
35607: LD_INT 0
35609: EQUAL
35610: IFFALSE 35614
// exit ;
35612: GO 43692
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
35614: LD_INT 35
35616: PUSH
35617: LD_EXP 39
35621: PUSH
35622: LD_INT 0
35624: PLUS
35625: MOD
35626: PPUSH
35627: CALL_OW 67
// for base in ai_bases do
35631: LD_ADDR_VAR 0 9
35635: PUSH
35636: LD_EXP 39
35640: PUSH
35641: FOR_IN
35642: IFFALSE 43686
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
35644: LD_INT 35
35646: PUSH
35647: LD_EXP 39
35651: PUSH
35652: LD_INT 0
35654: PLUS
35655: DIV
35656: PPUSH
35657: CALL_OW 67
// side = GetBaseSide ( base ) ;
35661: LD_ADDR_VAR 0 1
35665: PUSH
35666: LD_VAR 0 9
35670: PPUSH
35671: CALL 24885 0 1
35675: ST_TO_ADDR
// under_attack := BaseUnderAttack ( base , - 1 ) ;
35676: LD_ADDR_VAR 0 19
35680: PUSH
35681: LD_VAR 0 9
35685: PPUSH
35686: LD_INT 1
35688: NEG
35689: PPUSH
35690: CALL 45321 0 2
35694: ST_TO_ADDR
// if under_attack then
35695: LD_VAR 0 19
35699: IFFALSE 35746
// begin ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
35701: LD_ADDR_EXP 78
35705: PUSH
35706: LD_EXP 78
35710: PPUSH
35711: LD_VAR 0 9
35715: PPUSH
35716: LD_INT 0
35718: PPUSH
35719: CALL_OW 1
35723: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , [ ] ) ;
35724: LD_ADDR_EXP 79
35728: PUSH
35729: LD_EXP 79
35733: PPUSH
35734: LD_VAR 0 9
35738: PPUSH
35739: EMPTY
35740: PPUSH
35741: CALL_OW 1
35745: 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
35746: LD_EXP 81
35750: PUSH
35751: LD_VAR 0 9
35755: ARRAY
35756: PUSH
35757: LD_INT 0
35759: GREATER
35760: PUSH
35761: LD_EXP 42
35765: PUSH
35766: LD_VAR 0 9
35770: ARRAY
35771: PUSH
35772: LD_INT 0
35774: GREATER
35775: PUSH
35776: LD_VAR 0 22
35780: PUSH
35781: LD_VAR 0 9
35785: ARRAY
35786: PUSH
35787: LD_INT 700
35789: GREATEREQUAL
35790: OR
35791: AND
35792: IFFALSE 35841
// begin ai_cannot_rebuild_these_buildings = Replace ( ai_cannot_rebuild_these_buildings , base , [ ] ) ;
35794: LD_ADDR_EXP 81
35798: PUSH
35799: LD_EXP 81
35803: PPUSH
35804: LD_VAR 0 9
35808: PPUSH
35809: EMPTY
35810: PPUSH
35811: CALL_OW 1
35815: ST_TO_ADDR
// try_rebuild_again_time = Replace ( try_rebuild_again_time , base , 0 0$0 ) ;
35816: LD_ADDR_VAR 0 22
35820: PUSH
35821: LD_VAR 0 22
35825: PPUSH
35826: LD_VAR 0 9
35830: PPUSH
35831: LD_INT 0
35833: PPUSH
35834: CALL_OW 1
35838: ST_TO_ADDR
// end else
35839: GO 35876
// try_rebuild_again_time = Replace ( try_rebuild_again_time , base , try_rebuild_again_time [ base ] + 0 0$1 ) ;
35841: LD_ADDR_VAR 0 22
35845: PUSH
35846: LD_VAR 0 22
35850: PPUSH
35851: LD_VAR 0 9
35855: PPUSH
35856: LD_VAR 0 22
35860: PUSH
35861: LD_VAR 0 9
35865: ARRAY
35866: PUSH
35867: LD_INT 35
35869: PLUS
35870: PPUSH
35871: CALL_OW 1
35875: ST_TO_ADDR
// engineers_list = ai_engineers [ base ] diff ai_heal_these_humans [ base ] ;
35876: LD_ADDR_VAR 0 3
35880: PUSH
35881: LD_EXP 42
35885: PUSH
35886: LD_VAR 0 9
35890: ARRAY
35891: PUSH
35892: LD_EXP 75
35896: PUSH
35897: LD_VAR 0 9
35901: ARRAY
35902: DIFF
35903: ST_TO_ADDR
// apemen_engineers_list = ai_apemen_engineers [ base ] diff ai_heal_these_humans [ base ] ;
35904: LD_ADDR_VAR 0 10
35908: PUSH
35909: LD_EXP 47
35913: PUSH
35914: LD_VAR 0 9
35918: ARRAY
35919: PUSH
35920: LD_EXP 75
35924: PUSH
35925: LD_VAR 0 9
35929: ARRAY
35930: DIFF
35931: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
35932: LD_ADDR_VAR 0 4
35936: PUSH
35937: LD_EXP 75
35941: PUSH
35942: LD_VAR 0 9
35946: ARRAY
35947: ST_TO_ADDR
// humans_list = engineers_list ^ apemen_engineers_list ;
35948: LD_ADDR_VAR 0 11
35952: PUSH
35953: LD_VAR 0 3
35957: PUSH
35958: LD_VAR 0 10
35962: ADD
35963: ST_TO_ADDR
// i = 1 ;
35964: LD_ADDR_VAR 0 2
35968: PUSH
35969: LD_INT 1
35971: ST_TO_ADDR
// while i <= humans_list do
35972: LD_VAR 0 2
35976: PUSH
35977: LD_VAR 0 11
35981: LESSEQUAL
35982: IFFALSE 36109
// begin if GetLives ( humans_list [ i ] ) <= 700 then
35984: LD_VAR 0 11
35988: PUSH
35989: LD_VAR 0 2
35993: ARRAY
35994: PPUSH
35995: CALL_OW 256
35999: PUSH
36000: LD_INT 700
36002: LESSEQUAL
36003: IFFALSE 36093
// begin temp_list = temp_list ^ humans_list [ i ] ;
36005: LD_ADDR_VAR 0 4
36009: PUSH
36010: LD_VAR 0 4
36014: PUSH
36015: LD_VAR 0 11
36019: PUSH
36020: LD_VAR 0 2
36024: ARRAY
36025: ADD
36026: ST_TO_ADDR
// engineers_list = engineers_list diff humans_list [ i ] ;
36027: LD_ADDR_VAR 0 3
36031: PUSH
36032: LD_VAR 0 3
36036: PUSH
36037: LD_VAR 0 11
36041: PUSH
36042: LD_VAR 0 2
36046: ARRAY
36047: DIFF
36048: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff humans_list [ i ] ;
36049: LD_ADDR_VAR 0 10
36053: PUSH
36054: LD_VAR 0 10
36058: PUSH
36059: LD_VAR 0 11
36063: PUSH
36064: LD_VAR 0 2
36068: ARRAY
36069: DIFF
36070: ST_TO_ADDR
// humans_list = Delete ( humans_list , i ) ;
36071: LD_ADDR_VAR 0 11
36075: PUSH
36076: LD_VAR 0 11
36080: PPUSH
36081: LD_VAR 0 2
36085: PPUSH
36086: CALL_OW 3
36090: ST_TO_ADDR
// continue ;
36091: GO 35972
// end ; i = i + 1 ;
36093: LD_ADDR_VAR 0 2
36097: PUSH
36098: LD_VAR 0 2
36102: PUSH
36103: LD_INT 1
36105: PLUS
36106: ST_TO_ADDR
// end ;
36107: GO 35972
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
36109: LD_ADDR_EXP 75
36113: PUSH
36114: LD_EXP 75
36118: PPUSH
36119: LD_VAR 0 9
36123: PPUSH
36124: LD_VAR 0 4
36128: PPUSH
36129: CALL_OW 1
36133: ST_TO_ADDR
// crane_usable = false ;
36134: LD_ADDR_VAR 0 12
36138: PUSH
36139: LD_INT 0
36141: ST_TO_ADDR
// if ai_crane [ base ] > 0 then
36142: LD_EXP 88
36146: PUSH
36147: LD_VAR 0 9
36151: ARRAY
36152: PUSH
36153: LD_INT 0
36155: GREATER
36156: IFFALSE 36755
// begin if GetControl ( ai_crane [ base ] ) = control_manual and not ai_crane [ base ] = ai_vehicle_being_moved [ base ] then
36158: LD_EXP 88
36162: PUSH
36163: LD_VAR 0 9
36167: ARRAY
36168: PPUSH
36169: CALL_OW 263
36173: PUSH
36174: LD_INT 1
36176: EQUAL
36177: PUSH
36178: LD_EXP 88
36182: PUSH
36183: LD_VAR 0 9
36187: ARRAY
36188: PUSH
36189: LD_EXP 78
36193: PUSH
36194: LD_VAR 0 9
36198: ARRAY
36199: EQUAL
36200: NOT
36201: AND
36202: IFFALSE 36270
// begin temp_list = UnitsInside ( ai_crane [ base ] ) ;
36204: LD_ADDR_VAR 0 4
36208: PUSH
36209: LD_EXP 88
36213: PUSH
36214: LD_VAR 0 9
36218: ARRAY
36219: PPUSH
36220: CALL_OW 313
36224: ST_TO_ADDR
// if temp_list > 0 then
36225: LD_VAR 0 4
36229: PUSH
36230: LD_INT 0
36232: GREATER
36233: IFFALSE 36270
// if temp_list [ 1 ] <> ai_crane_driver [ base ] then
36235: LD_VAR 0 4
36239: PUSH
36240: LD_INT 1
36242: ARRAY
36243: PUSH
36244: LD_EXP 92
36248: PUSH
36249: LD_VAR 0 9
36253: ARRAY
36254: NONEQUAL
36255: IFFALSE 36270
// ComExitVehicle ( temp_list [ 1 ] ) ;
36257: LD_VAR 0 4
36261: PUSH
36262: LD_INT 1
36264: ARRAY
36265: PPUSH
36266: 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
36270: LD_EXP 88
36274: PUSH
36275: LD_VAR 0 9
36279: ARRAY
36280: PPUSH
36281: CALL_OW 256
36285: PUSH
36286: LD_INT 500
36288: LESSEQUAL
36289: PUSH
36290: LD_EXP 92
36294: PUSH
36295: LD_VAR 0 9
36299: ARRAY
36300: PUSH
36301: LD_INT 0
36303: GREATER
36304: PUSH
36305: LD_EXP 92
36309: PUSH
36310: LD_VAR 0 9
36314: ARRAY
36315: PPUSH
36316: CALL_OW 256
36320: PUSH
36321: LD_INT 500
36323: LESSEQUAL
36324: AND
36325: OR
36326: PUSH
36327: LD_EXP 91
36331: PUSH
36332: LD_VAR 0 9
36336: ARRAY
36337: PUSH
36338: LD_EXP 88
36342: PUSH
36343: LD_VAR 0 9
36347: ARRAY
36348: PPUSH
36349: CALL_OW 256
36353: PUSH
36354: LD_INT 1000
36356: LESS
36357: PUSH
36358: LD_EXP 92
36362: PUSH
36363: LD_VAR 0 9
36367: ARRAY
36368: PUSH
36369: LD_INT 0
36371: GREATER
36372: PUSH
36373: LD_EXP 92
36377: PUSH
36378: LD_VAR 0 9
36382: ARRAY
36383: PPUSH
36384: CALL_OW 256
36388: PUSH
36389: LD_INT 1000
36391: LESS
36392: AND
36393: OR
36394: AND
36395: OR
36396: IFFALSE 36519
// begin ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , true ) ;
36398: LD_ADDR_EXP 91
36402: PUSH
36403: LD_EXP 91
36407: PPUSH
36408: LD_VAR 0 9
36412: PPUSH
36413: LD_INT 1
36415: PPUSH
36416: CALL_OW 1
36420: ST_TO_ADDR
// if GetDistUnitXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 6 then
36421: LD_EXP 88
36425: PUSH
36426: LD_VAR 0 9
36430: ARRAY
36431: PPUSH
36432: LD_EXP 73
36436: PUSH
36437: LD_VAR 0 9
36441: ARRAY
36442: PUSH
36443: LD_INT 1
36445: ARRAY
36446: PPUSH
36447: LD_EXP 73
36451: PUSH
36452: LD_VAR 0 9
36456: ARRAY
36457: PUSH
36458: LD_INT 2
36460: ARRAY
36461: PPUSH
36462: CALL_OW 297
36466: PUSH
36467: LD_INT 6
36469: GREATER
36470: IFFALSE 36517
// ComMoveXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
36472: LD_EXP 88
36476: PUSH
36477: LD_VAR 0 9
36481: ARRAY
36482: PPUSH
36483: LD_EXP 73
36487: PUSH
36488: LD_VAR 0 9
36492: ARRAY
36493: PUSH
36494: LD_INT 1
36496: ARRAY
36497: PPUSH
36498: LD_EXP 73
36502: PUSH
36503: LD_VAR 0 9
36507: ARRAY
36508: PUSH
36509: LD_INT 2
36511: ARRAY
36512: PPUSH
36513: CALL_OW 111
// end else
36517: GO 36755
// begin ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , false ) ;
36519: LD_ADDR_EXP 91
36523: PUSH
36524: LD_EXP 91
36528: PPUSH
36529: LD_VAR 0 9
36533: PPUSH
36534: LD_INT 0
36536: PPUSH
36537: CALL_OW 1
36541: ST_TO_ADDR
// if GetEngine ( ai_crane [ base ] ) = engine_combustion then
36542: LD_EXP 88
36546: PUSH
36547: LD_VAR 0 9
36551: ARRAY
36552: PPUSH
36553: CALL_OW 262
36557: PUSH
36558: LD_INT 1
36560: EQUAL
36561: IFFALSE 36734
// begin i = GetFuel ( ai_crane [ base ] ) ;
36563: LD_ADDR_VAR 0 2
36567: PUSH
36568: LD_EXP 88
36572: PUSH
36573: LD_VAR 0 9
36577: ARRAY
36578: PPUSH
36579: CALL_OW 261
36583: ST_TO_ADDR
// if i > 90 or not IsOk ( ai_depot [ base ] ) then
36584: LD_VAR 0 2
36588: PUSH
36589: LD_INT 90
36591: GREATER
36592: PUSH
36593: LD_EXP 49
36597: PUSH
36598: LD_VAR 0 9
36602: ARRAY
36603: PPUSH
36604: CALL_OW 302
36608: NOT
36609: OR
36610: IFFALSE 36637
// crane_is_refueling = Replace ( crane_is_refueling , base , false ) else
36612: LD_ADDR_VAR 0 21
36616: PUSH
36617: LD_VAR 0 21
36621: PPUSH
36622: LD_VAR 0 9
36626: PPUSH
36627: LD_INT 0
36629: PPUSH
36630: CALL_OW 1
36634: ST_TO_ADDR
36635: GO 36734
// if i < 25 or crane_is_refueling [ base ] then
36637: LD_VAR 0 2
36641: PUSH
36642: LD_INT 25
36644: LESS
36645: PUSH
36646: LD_VAR 0 21
36650: PUSH
36651: LD_VAR 0 9
36655: ARRAY
36656: OR
36657: IFFALSE 36734
// begin ComMoveUnit ( ai_crane [ base ] , ai_depot [ base ] ) ;
36659: LD_EXP 88
36663: PUSH
36664: LD_VAR 0 9
36668: ARRAY
36669: PPUSH
36670: LD_EXP 49
36674: PUSH
36675: LD_VAR 0 9
36679: ARRAY
36680: PPUSH
36681: CALL_OW 112
// AddComRefuel ( ai_crane [ base ] , ai_depot [ base ] ) ;
36685: LD_EXP 88
36689: PUSH
36690: LD_VAR 0 9
36694: ARRAY
36695: PPUSH
36696: LD_EXP 49
36700: PUSH
36701: LD_VAR 0 9
36705: ARRAY
36706: PPUSH
36707: CALL_OW 210
// crane_is_refueling = Replace ( crane_is_refueling , base , true ) ;
36711: LD_ADDR_VAR 0 21
36715: PUSH
36716: LD_VAR 0 21
36720: PPUSH
36721: LD_VAR 0 9
36725: PPUSH
36726: LD_INT 1
36728: PPUSH
36729: CALL_OW 1
36733: ST_TO_ADDR
// end ; end ; if not crane_is_refueling [ base ] then
36734: LD_VAR 0 21
36738: PUSH
36739: LD_VAR 0 9
36743: ARRAY
36744: NOT
36745: IFFALSE 36755
// crane_usable = true ;
36747: LD_ADDR_VAR 0 12
36751: PUSH
36752: LD_INT 1
36754: ST_TO_ADDR
// end ; end ; if engineers_list = 0 and apemen_engineers_list = 0 and not crane_usable then
36755: LD_VAR 0 3
36759: PUSH
36760: LD_INT 0
36762: EQUAL
36763: PUSH
36764: LD_VAR 0 10
36768: PUSH
36769: LD_INT 0
36771: EQUAL
36772: AND
36773: PUSH
36774: LD_VAR 0 12
36778: NOT
36779: AND
36780: IFFALSE 36784
// continue ;
36782: GO 35641
// temp_list_2 = UnitFilter ( engineers_list , [ f_class , class_engineer ] ) ;
36784: LD_ADDR_VAR 0 8
36788: PUSH
36789: LD_VAR 0 3
36793: PPUSH
36794: LD_INT 25
36796: PUSH
36797: LD_INT 2
36799: PUSH
36800: EMPTY
36801: LIST
36802: LIST
36803: PPUSH
36804: CALL_OW 72
36808: ST_TO_ADDR
// if ai_captured_buildings [ base ] > 0 and temp_list_2 > 0 then
36809: LD_EXP 62
36813: PUSH
36814: LD_VAR 0 9
36818: ARRAY
36819: PUSH
36820: LD_INT 0
36822: GREATER
36823: PUSH
36824: LD_VAR 0 8
36828: PUSH
36829: LD_INT 0
36831: GREATER
36832: AND
36833: IFFALSE 37111
// begin temp_list = [ ] ;
36835: LD_ADDR_VAR 0 4
36839: PUSH
36840: EMPTY
36841: ST_TO_ADDR
// for i in ai_captured_buildings [ base ] do
36842: LD_ADDR_VAR 0 2
36846: PUSH
36847: LD_EXP 62
36851: PUSH
36852: LD_VAR 0 9
36856: ARRAY
36857: PUSH
36858: FOR_IN
36859: IFFALSE 36915
// if GetBType ( i ) in [ b_depot , b_warehouse ] then
36861: LD_VAR 0 2
36865: PPUSH
36866: CALL_OW 266
36870: PUSH
36871: LD_INT 0
36873: PUSH
36874: LD_INT 1
36876: PUSH
36877: EMPTY
36878: LIST
36879: LIST
36880: IN
36881: IFFALSE 36899
// temp_list = temp_list ^ 1 else
36883: LD_ADDR_VAR 0 4
36887: PUSH
36888: LD_VAR 0 4
36892: PUSH
36893: LD_INT 1
36895: ADD
36896: ST_TO_ADDR
36897: GO 36913
// temp_list = temp_list ^ 0 ;
36899: LD_ADDR_VAR 0 4
36903: PUSH
36904: LD_VAR 0 4
36908: PUSH
36909: LD_INT 0
36911: ADD
36912: ST_TO_ADDR
36913: GO 36858
36915: POP
36916: POP
// temp_list = SortListByListDesc ( ai_captured_buildings [ base ] , temp_list ) ;
36917: LD_ADDR_VAR 0 4
36921: PUSH
36922: LD_EXP 62
36926: PUSH
36927: LD_VAR 0 9
36931: ARRAY
36932: PPUSH
36933: LD_VAR 0 4
36937: PPUSH
36938: CALL_OW 77
36942: ST_TO_ADDR
// temp_list_2 = GetHumansOutOfUnits ( temp_list_2 ) ;
36943: LD_ADDR_VAR 0 8
36947: PUSH
36948: LD_VAR 0 8
36952: PPUSH
36953: CALL 45199 0 1
36957: ST_TO_ADDR
// if temp_list_2 > 0 then
36958: LD_VAR 0 8
36962: PUSH
36963: LD_INT 0
36965: GREATER
36966: IFFALSE 37082
// begin temp_list_2 = SortListByListDesc ( temp_list_2 , temp_list_2 ) ;
36968: LD_ADDR_VAR 0 8
36972: PUSH
36973: LD_VAR 0 8
36977: PPUSH
36978: LD_VAR 0 8
36982: PPUSH
36983: CALL_OW 77
36987: ST_TO_ADDR
// SetTaskList ( temp_list_2 [ 1 ] , [ [ e , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) , temp_list [ 1 ] , 0 , 0 , 0 ] ] ) ;
36988: LD_VAR 0 8
36992: PUSH
36993: LD_INT 1
36995: ARRAY
36996: PPUSH
36997: LD_STRING e
36999: PUSH
37000: LD_VAR 0 4
37004: PUSH
37005: LD_INT 1
37007: ARRAY
37008: PPUSH
37009: CALL_OW 250
37013: PUSH
37014: LD_VAR 0 4
37018: PUSH
37019: LD_INT 1
37021: ARRAY
37022: PPUSH
37023: CALL_OW 251
37027: PUSH
37028: LD_VAR 0 4
37032: PUSH
37033: LD_INT 1
37035: ARRAY
37036: PUSH
37037: LD_INT 0
37039: PUSH
37040: LD_INT 0
37042: PUSH
37043: LD_INT 0
37045: PUSH
37046: EMPTY
37047: LIST
37048: LIST
37049: LIST
37050: LIST
37051: LIST
37052: LIST
37053: LIST
37054: PUSH
37055: EMPTY
37056: LIST
37057: PPUSH
37058: CALL_OW 446
// engineers_list = engineers_list diff temp_list_2 [ 1 ] ;
37062: LD_ADDR_VAR 0 3
37066: PUSH
37067: LD_VAR 0 3
37071: PUSH
37072: LD_VAR 0 8
37076: PUSH
37077: LD_INT 1
37079: ARRAY
37080: DIFF
37081: ST_TO_ADDR
// end ; if engineers_list = 0 and apemen_engineers_list = 0 and not crane_usable then
37082: LD_VAR 0 3
37086: PUSH
37087: LD_INT 0
37089: EQUAL
37090: PUSH
37091: LD_VAR 0 10
37095: PUSH
37096: LD_INT 0
37098: EQUAL
37099: AND
37100: PUSH
37101: LD_VAR 0 12
37105: NOT
37106: AND
37107: IFFALSE 37111
// continue ;
37109: GO 35641
// end ; case base of 1 :
37111: LD_VAR 0 9
37115: PUSH
37116: LD_INT 1
37118: DOUBLE
37119: EQUAL
37120: IFTRUE 37124
37122: GO 37143
37124: POP
// begin engineers_not_allowed_to_repair_area = ru_no_engineer_repair_area ;
37125: LD_ADDR_VAR 0 14
37129: PUSH
37130: LD_INT 7
37132: ST_TO_ADDR
// crane_not_allowed_to_repair_area = ru_no_crane_repair_area ;
37133: LD_ADDR_VAR 0 15
37137: PUSH
37138: LD_INT 6
37140: ST_TO_ADDR
// end ; 2 :
37141: GO 37225
37143: LD_INT 2
37145: DOUBLE
37146: EQUAL
37147: IFTRUE 37151
37149: GO 37170
37151: POP
// begin engineers_not_allowed_to_repair_area = alli_no_engineer_repair_area ;
37152: LD_ADDR_VAR 0 14
37156: PUSH
37157: LD_INT 18
37159: ST_TO_ADDR
// crane_not_allowed_to_repair_area = 0 ;
37160: LD_ADDR_VAR 0 15
37164: PUSH
37165: LD_INT 0
37167: ST_TO_ADDR
// end ; 3 :
37168: GO 37225
37170: LD_INT 3
37172: DOUBLE
37173: EQUAL
37174: IFTRUE 37178
37176: GO 37197
37178: POP
// begin engineers_not_allowed_to_repair_area = 0 ;
37179: LD_ADDR_VAR 0 14
37183: PUSH
37184: LD_INT 0
37186: ST_TO_ADDR
// crane_not_allowed_to_repair_area = 0 ;
37187: LD_ADDR_VAR 0 15
37191: PUSH
37192: LD_INT 0
37194: ST_TO_ADDR
// end ; 4 :
37195: GO 37225
37197: LD_INT 4
37199: DOUBLE
37200: EQUAL
37201: IFTRUE 37205
37203: GO 37224
37205: POP
// begin engineers_not_allowed_to_repair_area = 0 ;
37206: LD_ADDR_VAR 0 14
37210: PUSH
37211: LD_INT 0
37213: ST_TO_ADDR
// crane_not_allowed_to_repair_area = 0 ;
37214: LD_ADDR_VAR 0 15
37218: PUSH
37219: LD_INT 0
37221: ST_TO_ADDR
// end ; end ;
37222: GO 37225
37224: POP
// repairing_buildings = [ false , false , false ] ;
37225: LD_ADDR_VAR 0 18
37229: PUSH
37230: LD_INT 0
37232: PUSH
37233: LD_INT 0
37235: PUSH
37236: LD_INT 0
37238: PUSH
37239: EMPTY
37240: LIST
37241: LIST
37242: LIST
37243: ST_TO_ADDR
// for k = 1 to 3 do
37244: LD_ADDR_VAR 0 17
37248: PUSH
37249: DOUBLE
37250: LD_INT 1
37252: DEC
37253: ST_TO_ADDR
37254: LD_INT 3
37256: PUSH
37257: FOR_TO
37258: IFFALSE 37951
// begin i = 1 ;
37260: LD_ADDR_VAR 0 2
37264: PUSH
37265: LD_INT 1
37267: ST_TO_ADDR
// buildings_list = [ ] ;
37268: LD_ADDR_VAR 0 5
37272: PUSH
37273: EMPTY
37274: ST_TO_ADDR
// repeat case i of 1 :
37275: LD_VAR 0 2
37279: PUSH
37280: LD_INT 1
37282: DOUBLE
37283: EQUAL
37284: IFTRUE 37288
37286: GO 37337
37288: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] diff ai_dismantle_these_buildings [ base ] , [ f_not , [ f_ok ] ] ) ; 2 :
37289: LD_ADDR_VAR 0 5
37293: PUSH
37294: LD_EXP 76
37298: PUSH
37299: LD_VAR 0 9
37303: ARRAY
37304: PUSH
37305: LD_EXP 99
37309: PUSH
37310: LD_VAR 0 9
37314: ARRAY
37315: DIFF
37316: PPUSH
37317: LD_INT 3
37319: PUSH
37320: LD_INT 50
37322: PUSH
37323: EMPTY
37324: LIST
37325: PUSH
37326: EMPTY
37327: LIST
37328: LIST
37329: PPUSH
37330: CALL_OW 72
37334: ST_TO_ADDR
37335: GO 37399
37337: LD_INT 2
37339: DOUBLE
37340: EQUAL
37341: IFTRUE 37345
37343: GO 37398
37345: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] diff ai_dismantle_these_buildings [ base ] , [ f_not , [ f_lives , 1000 ] ] ) ; end ;
37346: LD_ADDR_VAR 0 5
37350: PUSH
37351: LD_EXP 76
37355: PUSH
37356: LD_VAR 0 9
37360: ARRAY
37361: PUSH
37362: LD_EXP 99
37366: PUSH
37367: LD_VAR 0 9
37371: ARRAY
37372: DIFF
37373: PPUSH
37374: LD_INT 3
37376: PUSH
37377: LD_INT 24
37379: PUSH
37380: LD_INT 1000
37382: PUSH
37383: EMPTY
37384: LIST
37385: LIST
37386: PUSH
37387: EMPTY
37388: LIST
37389: LIST
37390: PPUSH
37391: CALL_OW 72
37395: ST_TO_ADDR
37396: GO 37399
37398: POP
// case k of 2 :
37399: LD_VAR 0 17
37403: PUSH
37404: LD_INT 2
37406: DOUBLE
37407: EQUAL
37408: IFTRUE 37412
37410: GO 37465
37412: POP
// begin if under_attack and engineers_not_allowed_to_repair_area > 0 then
37413: LD_VAR 0 19
37417: PUSH
37418: LD_VAR 0 14
37422: PUSH
37423: LD_INT 0
37425: GREATER
37426: AND
37427: IFFALSE 37463
// buildings_list = UnitFilter ( buildings_list , [ f_not , [ f_inarea , engineers_not_allowed_to_repair_area ] ] ) ;
37429: LD_ADDR_VAR 0 5
37433: PUSH
37434: LD_VAR 0 5
37438: PPUSH
37439: LD_INT 3
37441: PUSH
37442: LD_INT 95
37444: PUSH
37445: LD_VAR 0 14
37449: PUSH
37450: EMPTY
37451: LIST
37452: LIST
37453: PUSH
37454: EMPTY
37455: LIST
37456: LIST
37457: PPUSH
37458: CALL_OW 72
37462: ST_TO_ADDR
// end ; 3 :
37463: GO 37521
37465: LD_INT 3
37467: DOUBLE
37468: EQUAL
37469: IFTRUE 37473
37471: GO 37520
37473: POP
// begin if crane_not_allowed_to_repair_area > 0 then
37474: LD_VAR 0 15
37478: PUSH
37479: LD_INT 0
37481: GREATER
37482: IFFALSE 37518
// buildings_list = UnitFilter ( buildings_list , [ f_not , [ f_inarea , crane_not_allowed_to_repair_area ] ] ) ;
37484: LD_ADDR_VAR 0 5
37488: PUSH
37489: LD_VAR 0 5
37493: PPUSH
37494: LD_INT 3
37496: PUSH
37497: LD_INT 95
37499: PUSH
37500: LD_VAR 0 15
37504: PUSH
37505: EMPTY
37506: LIST
37507: LIST
37508: PUSH
37509: EMPTY
37510: LIST
37511: LIST
37512: PPUSH
37513: CALL_OW 72
37517: ST_TO_ADDR
// end ; end ;
37518: GO 37521
37520: POP
// i = i + 1 ;
37521: LD_ADDR_VAR 0 2
37525: PUSH
37526: LD_VAR 0 2
37530: PUSH
37531: LD_INT 1
37533: PLUS
37534: ST_TO_ADDR
// until buildings_list > 0 or i > 2 ;
37535: LD_VAR 0 5
37539: PUSH
37540: LD_INT 0
37542: GREATER
37543: PUSH
37544: LD_VAR 0 2
37548: PUSH
37549: LD_INT 2
37551: GREATER
37552: OR
37553: IFFALSE 37275
// if buildings_list > 0 then
37555: LD_VAR 0 5
37559: PUSH
37560: LD_INT 0
37562: GREATER
37563: IFFALSE 37949
// begin case k of 1 :
37565: LD_VAR 0 17
37569: PUSH
37570: LD_INT 1
37572: DOUBLE
37573: EQUAL
37574: IFTRUE 37578
37576: GO 37629
37578: POP
// begin if apemen_engineers_list > 0 then
37579: LD_VAR 0 10
37583: PUSH
37584: LD_INT 0
37586: GREATER
37587: IFFALSE 37612
// repairing_buildings = Replace ( repairing_buildings , k , true ) ;
37589: LD_ADDR_VAR 0 18
37593: PUSH
37594: LD_VAR 0 18
37598: PPUSH
37599: LD_VAR 0 17
37603: PPUSH
37604: LD_INT 1
37606: PPUSH
37607: CALL_OW 1
37611: ST_TO_ADDR
// workers_list = GetHumansOutOfUnits ( apemen_engineers_list ) ;
37612: LD_ADDR_VAR 0 16
37616: PUSH
37617: LD_VAR 0 10
37621: PPUSH
37622: CALL 45199 0 1
37626: ST_TO_ADDR
// end ; 2 :
37627: GO 37797
37629: LD_INT 2
37631: DOUBLE
37632: EQUAL
37633: IFTRUE 37637
37635: GO 37688
37637: POP
// begin if engineers_list > 0 then
37638: LD_VAR 0 3
37642: PUSH
37643: LD_INT 0
37645: GREATER
37646: IFFALSE 37671
// repairing_buildings = Replace ( repairing_buildings , k , true ) ;
37648: LD_ADDR_VAR 0 18
37652: PUSH
37653: LD_VAR 0 18
37657: PPUSH
37658: LD_VAR 0 17
37662: PPUSH
37663: LD_INT 1
37665: PPUSH
37666: CALL_OW 1
37670: ST_TO_ADDR
// workers_list = GetHumansOutOfUnits ( engineers_list ) ;
37671: LD_ADDR_VAR 0 16
37675: PUSH
37676: LD_VAR 0 3
37680: PPUSH
37681: CALL 45199 0 1
37685: ST_TO_ADDR
// end ; 3 :
37686: GO 37797
37688: LD_INT 3
37690: DOUBLE
37691: EQUAL
37692: IFTRUE 37696
37694: GO 37796
37696: POP
// begin if ai_crane [ base ] > 0 then
37697: LD_EXP 88
37701: PUSH
37702: LD_VAR 0 9
37706: ARRAY
37707: PUSH
37708: LD_INT 0
37710: GREATER
37711: IFFALSE 37736
// repairing_buildings = Replace ( repairing_buildings , k , true ) ;
37713: LD_ADDR_VAR 0 18
37717: PUSH
37718: LD_VAR 0 18
37722: PPUSH
37723: LD_VAR 0 17
37727: PPUSH
37728: LD_INT 1
37730: PPUSH
37731: CALL_OW 1
37735: ST_TO_ADDR
// if ai_crane [ base ] > 0 and crane_usable then
37736: LD_EXP 88
37740: PUSH
37741: LD_VAR 0 9
37745: ARRAY
37746: PUSH
37747: LD_INT 0
37749: GREATER
37750: PUSH
37751: LD_VAR 0 12
37755: AND
37756: IFFALSE 37787
// begin workers_list = [ ai_crane [ base ] ] ;
37758: LD_ADDR_VAR 0 16
37762: PUSH
37763: LD_EXP 88
37767: PUSH
37768: LD_VAR 0 9
37772: ARRAY
37773: PUSH
37774: EMPTY
37775: LIST
37776: ST_TO_ADDR
// crane_usable = false ;
37777: LD_ADDR_VAR 0 12
37781: PUSH
37782: LD_INT 0
37784: ST_TO_ADDR
// end else
37785: GO 37794
// workers_list = [ ] ;
37787: LD_ADDR_VAR 0 16
37791: PUSH
37792: EMPTY
37793: ST_TO_ADDR
// end ; end ;
37794: GO 37797
37796: POP
// repeat i = 1 ;
37797: LD_ADDR_VAR 0 2
37801: PUSH
37802: LD_INT 1
37804: ST_TO_ADDR
// while i <= buildings_list do
37805: LD_VAR 0 2
37809: PUSH
37810: LD_VAR 0 5
37814: LESSEQUAL
37815: IFFALSE 37939
// begin if workers_list = 0 then
37817: LD_VAR 0 16
37821: PUSH
37822: LD_INT 0
37824: EQUAL
37825: IFFALSE 37829
// break ;
37827: GO 37939
// temp_unit = NearestUnitToUnit ( workers_list , buildings_list [ i ] ) ;
37829: LD_ADDR_VAR 0 6
37833: PUSH
37834: LD_VAR 0 16
37838: PPUSH
37839: LD_VAR 0 5
37843: PUSH
37844: LD_VAR 0 2
37848: ARRAY
37849: PPUSH
37850: CALL_OW 74
37854: ST_TO_ADDR
// ComRepairBuilding ( temp_unit , buildings_list [ i ] ) ;
37855: LD_VAR 0 6
37859: PPUSH
37860: LD_VAR 0 5
37864: PUSH
37865: LD_VAR 0 2
37869: ARRAY
37870: PPUSH
37871: CALL_OW 130
// workers_list = workers_list diff temp_unit ;
37875: LD_ADDR_VAR 0 16
37879: PUSH
37880: LD_VAR 0 16
37884: PUSH
37885: LD_VAR 0 6
37889: DIFF
37890: ST_TO_ADDR
// engineers_list = engineers_list diff temp_unit ;
37891: LD_ADDR_VAR 0 3
37895: PUSH
37896: LD_VAR 0 3
37900: PUSH
37901: LD_VAR 0 6
37905: DIFF
37906: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff temp_unit ;
37907: LD_ADDR_VAR 0 10
37911: PUSH
37912: LD_VAR 0 10
37916: PUSH
37917: LD_VAR 0 6
37921: DIFF
37922: ST_TO_ADDR
// i = i + 1 ;
37923: LD_ADDR_VAR 0 2
37927: PUSH
37928: LD_VAR 0 2
37932: PUSH
37933: LD_INT 1
37935: PLUS
37936: ST_TO_ADDR
// end ;
37937: GO 37805
// until workers_list = 0 ;
37939: LD_VAR 0 16
37943: PUSH
37944: LD_INT 0
37946: EQUAL
37947: IFFALSE 37797
// end ; end ;
37949: GO 37257
37951: POP
37952: POP
// if true in repairing_buildings then
37953: LD_INT 1
37955: PUSH
37956: LD_VAR 0 18
37960: IN
37961: IFFALSE 38112
// begin temp_list = [ ] ;
37963: LD_ADDR_VAR 0 4
37967: PUSH
37968: EMPTY
37969: ST_TO_ADDR
// if not repairing_buildings [ 1 ] then
37970: LD_VAR 0 18
37974: PUSH
37975: LD_INT 1
37977: ARRAY
37978: NOT
37979: IFFALSE 37997
// temp_list = temp_list ^ apemen_engineers_list ;
37981: LD_ADDR_VAR 0 4
37985: PUSH
37986: LD_VAR 0 4
37990: PUSH
37991: LD_VAR 0 10
37995: ADD
37996: ST_TO_ADDR
// if not repairing_buildings [ 2 ] then
37997: LD_VAR 0 18
38001: PUSH
38002: LD_INT 2
38004: ARRAY
38005: NOT
38006: IFFALSE 38024
// temp_list = temp_list ^ engineers_list ;
38008: LD_ADDR_VAR 0 4
38012: PUSH
38013: LD_VAR 0 4
38017: PUSH
38018: LD_VAR 0 3
38022: ADD
38023: ST_TO_ADDR
// DistributeHumansToBuildings ( base , temp_list , UnitFilter ( ai_depot [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_engineer , [ 5 , 6 , 5 , 5 ] [ base ] , false , false ) ;
38024: LD_VAR 0 9
38028: PPUSH
38029: LD_VAR 0 4
38033: PPUSH
38034: LD_EXP 49
38038: PUSH
38039: LD_VAR 0 9
38043: ARRAY
38044: PPUSH
38045: LD_INT 50
38047: PUSH
38048: EMPTY
38049: LIST
38050: PUSH
38051: LD_INT 3
38053: PUSH
38054: LD_INT 57
38056: PUSH
38057: EMPTY
38058: LIST
38059: PUSH
38060: EMPTY
38061: LIST
38062: LIST
38063: PUSH
38064: EMPTY
38065: LIST
38066: LIST
38067: PPUSH
38068: CALL_OW 72
38072: PPUSH
38073: LD_INT 2
38075: PPUSH
38076: LD_INT 5
38078: PUSH
38079: LD_INT 6
38081: PUSH
38082: LD_INT 5
38084: PUSH
38085: LD_INT 5
38087: PUSH
38088: EMPTY
38089: LIST
38090: LIST
38091: LIST
38092: LIST
38093: PUSH
38094: LD_VAR 0 9
38098: ARRAY
38099: PPUSH
38100: LD_INT 0
38102: PPUSH
38103: LD_INT 0
38105: PPUSH
38106: CALL 34075 0 7
// continue ;
38110: GO 35641
// end ; if not under_attack then
38112: LD_VAR 0 19
38116: NOT
38117: IFFALSE 43460
// begin if ai_building_under_construction [ base ] > 0 then
38119: LD_EXP 74
38123: PUSH
38124: LD_VAR 0 9
38128: ARRAY
38129: PUSH
38130: LD_INT 0
38132: GREATER
38133: IFFALSE 38307
// if BuildingStatus ( ai_building_under_construction [ base ] ) = bs_build then
38135: LD_EXP 74
38139: PUSH
38140: LD_VAR 0 9
38144: ARRAY
38145: PPUSH
38146: CALL_OW 461
38150: PUSH
38151: LD_INT 1
38153: EQUAL
38154: IFFALSE 38269
// begin temp_list_2 = GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) ;
38156: LD_ADDR_VAR 0 8
38160: PUSH
38161: LD_VAR 0 3
38165: PUSH
38166: LD_VAR 0 10
38170: ADD
38171: PPUSH
38172: CALL 45199 0 1
38176: ST_TO_ADDR
// if crane_usable and not IsInArea ( ai_building_under_construction [ base ] , crane_not_allowed_to_repair_area ) then
38177: LD_VAR 0 12
38181: PUSH
38182: LD_EXP 74
38186: PUSH
38187: LD_VAR 0 9
38191: ARRAY
38192: PPUSH
38193: LD_VAR 0 15
38197: PPUSH
38198: CALL_OW 308
38202: NOT
38203: AND
38204: IFFALSE 38228
// temp_list_2 = temp_list_2 ^ ai_crane [ base ] ;
38206: LD_ADDR_VAR 0 8
38210: PUSH
38211: LD_VAR 0 8
38215: PUSH
38216: LD_EXP 88
38220: PUSH
38221: LD_VAR 0 9
38225: ARRAY
38226: ADD
38227: ST_TO_ADDR
// for i in temp_list_2 do
38228: LD_ADDR_VAR 0 2
38232: PUSH
38233: LD_VAR 0 8
38237: PUSH
38238: FOR_IN
38239: IFFALSE 38263
// ComRepairBuilding ( i , ai_building_under_construction [ base ] ) ;
38241: LD_VAR 0 2
38245: PPUSH
38246: LD_EXP 74
38250: PUSH
38251: LD_VAR 0 9
38255: ARRAY
38256: PPUSH
38257: CALL_OW 130
38261: GO 38238
38263: POP
38264: POP
// continue ;
38265: GO 35641
// end else
38267: GO 38307
// begin ComCancel ( ai_building_under_construction [ base ] ) ;
38269: LD_EXP 74
38273: PUSH
38274: LD_VAR 0 9
38278: ARRAY
38279: PPUSH
38280: CALL_OW 127
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
38284: LD_ADDR_EXP 74
38288: PUSH
38289: LD_EXP 74
38293: PPUSH
38294: LD_VAR 0 9
38298: PPUSH
38299: LD_INT 0
38301: PPUSH
38302: CALL_OW 1
38306: ST_TO_ADDR
// end ; if ai_dismantle_these_buildings [ base ] > 0 and engineers_list > 0 then
38307: LD_EXP 99
38311: PUSH
38312: LD_VAR 0 9
38316: ARRAY
38317: PUSH
38318: LD_INT 0
38320: GREATER
38321: PUSH
38322: LD_VAR 0 3
38326: PUSH
38327: LD_INT 0
38329: GREATER
38330: AND
38331: IFFALSE 38512
// begin is_dismantling = true ;
38333: LD_ADDR_VAR 0 20
38337: PUSH
38338: LD_INT 1
38340: ST_TO_ADDR
// if ai_building_constructor [ base ] in engineers_list then
38341: LD_EXP 77
38345: PUSH
38346: LD_VAR 0 9
38350: ARRAY
38351: PUSH
38352: LD_VAR 0 3
38356: IN
38357: IFFALSE 38377
// k = ai_building_constructor [ base ] else
38359: LD_ADDR_VAR 0 17
38363: PUSH
38364: LD_EXP 77
38368: PUSH
38369: LD_VAR 0 9
38373: ARRAY
38374: ST_TO_ADDR
38375: GO 38397
// k = BestFromListByList ( engineers_list , engineers_list ) ;
38377: LD_ADDR_VAR 0 17
38381: PUSH
38382: LD_VAR 0 3
38386: PPUSH
38387: LD_VAR 0 3
38391: PPUSH
38392: CALL_OW 79
38396: ST_TO_ADDR
// engineers_list = engineers_list diff k ;
38397: LD_ADDR_VAR 0 3
38401: PUSH
38402: LD_VAR 0 3
38406: PUSH
38407: LD_VAR 0 17
38411: DIFF
38412: ST_TO_ADDR
// if IsInUnit ( k ) > 0 then
38413: LD_VAR 0 17
38417: PPUSH
38418: CALL_OW 310
38422: PUSH
38423: LD_INT 0
38425: GREATER
38426: IFFALSE 38486
// case GetType ( IsInUnit ( k ) ) of unit_vehicle :
38428: LD_VAR 0 17
38432: PPUSH
38433: CALL_OW 310
38437: PPUSH
38438: CALL_OW 247
38442: PUSH
38443: LD_INT 2
38445: DOUBLE
38446: EQUAL
38447: IFTRUE 38451
38449: GO 38463
38451: POP
// ComExitVehicle ( k ) ; unit_building :
38452: LD_VAR 0 17
38456: PPUSH
38457: CALL_OW 121
38461: GO 38484
38463: LD_INT 3
38465: DOUBLE
38466: EQUAL
38467: IFTRUE 38471
38469: GO 38483
38471: POP
// ComExitBuilding ( k ) ; end else
38472: LD_VAR 0 17
38476: PPUSH
38477: CALL_OW 122
38481: GO 38484
38483: POP
38484: GO 38510
// ComDismantle ( k , ai_dismantle_these_buildings [ base ] [ 1 ] ) ;
38486: LD_VAR 0 17
38490: PPUSH
38491: LD_EXP 99
38495: PUSH
38496: LD_VAR 0 9
38500: ARRAY
38501: PUSH
38502: LD_INT 1
38504: ARRAY
38505: PPUSH
38506: CALL_OW 167
// end else
38510: GO 38520
// is_dismantling = false ;
38512: LD_ADDR_VAR 0 20
38516: PUSH
38517: LD_INT 0
38519: 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
38520: LD_EXP 76
38524: PUSH
38525: LD_VAR 0 9
38529: ARRAY
38530: PUSH
38531: LD_EXP 97
38535: PUSH
38536: LD_VAR 0 9
38540: ARRAY
38541: MINUS
38542: PUSH
38543: LD_EXP 61
38547: PUSH
38548: LD_VAR 0 9
38552: ARRAY
38553: LESS
38554: PUSH
38555: LD_EXP 80
38559: PUSH
38560: LD_VAR 0 9
38564: ARRAY
38565: PUSH
38566: LD_INT 0
38568: GREATER
38569: OR
38570: PUSH
38571: LD_VAR 0 20
38575: NOT
38576: AND
38577: IFFALSE 43276
// begin if ai_upcoming_building_data [ base ] = 0 then
38579: LD_EXP 80
38583: PUSH
38584: LD_VAR 0 9
38588: ARRAY
38589: PUSH
38590: LD_INT 0
38592: EQUAL
38593: IFFALSE 39080
// begin temp_list = [ ] ;
38595: LD_ADDR_VAR 0 4
38599: PUSH
38600: EMPTY
38601: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
38602: LD_ADDR_VAR 0 2
38606: PUSH
38607: LD_EXP 61
38611: PUSH
38612: LD_VAR 0 9
38616: ARRAY
38617: PUSH
38618: FOR_IN
38619: IFFALSE 38747
// begin k = false ;
38621: LD_ADDR_VAR 0 17
38625: PUSH
38626: LD_INT 0
38628: ST_TO_ADDR
// if HexInfo ( i [ 1 ] , i [ 2 ] ) <= 0 then
38629: LD_VAR 0 2
38633: PUSH
38634: LD_INT 1
38636: ARRAY
38637: PPUSH
38638: LD_VAR 0 2
38642: PUSH
38643: LD_INT 2
38645: ARRAY
38646: PPUSH
38647: CALL_OW 428
38651: PUSH
38652: LD_INT 0
38654: LESSEQUAL
38655: IFFALSE 38667
// k = true else
38657: LD_ADDR_VAR 0 17
38661: PUSH
38662: LD_INT 1
38664: ST_TO_ADDR
38665: GO 38708
// if GetType ( HexInfo ( i [ 1 ] , i [ 2 ] ) ) <> unit_building then
38667: LD_VAR 0 2
38671: PUSH
38672: LD_INT 1
38674: ARRAY
38675: PPUSH
38676: LD_VAR 0 2
38680: PUSH
38681: LD_INT 2
38683: ARRAY
38684: PPUSH
38685: CALL_OW 428
38689: PPUSH
38690: CALL_OW 247
38694: PUSH
38695: LD_INT 3
38697: NONEQUAL
38698: IFFALSE 38708
// k = true ;
38700: LD_ADDR_VAR 0 17
38704: PUSH
38705: LD_INT 1
38707: ST_TO_ADDR
// if k and not i in ai_cannot_rebuild_these_buildings [ base ] then
38708: LD_VAR 0 17
38712: PUSH
38713: LD_VAR 0 2
38717: PUSH
38718: LD_EXP 81
38722: PUSH
38723: LD_VAR 0 9
38727: ARRAY
38728: IN
38729: NOT
38730: AND
38731: IFFALSE 38745
// begin temp_list = i ;
38733: LD_ADDR_VAR 0 4
38737: PUSH
38738: LD_VAR 0 2
38742: ST_TO_ADDR
// break ;
38743: GO 38747
// end ; end ;
38745: GO 38618
38747: POP
38748: POP
// if temp_list > 0 then
38749: LD_VAR 0 4
38753: PUSH
38754: LD_INT 0
38756: GREATER
38757: IFFALSE 39080
// begin if temp_list [ 4 ] = b_bunker and GetBaseNation ( base ) in [ nation_american , nation_russian ] then
38759: LD_VAR 0 4
38763: PUSH
38764: LD_INT 4
38766: ARRAY
38767: PUSH
38768: LD_INT 32
38770: EQUAL
38771: PUSH
38772: LD_VAR 0 9
38776: PPUSH
38777: CALL 24983 0 1
38781: PUSH
38782: LD_INT 1
38784: PUSH
38785: LD_INT 3
38787: PUSH
38788: EMPTY
38789: LIST
38790: LIST
38791: IN
38792: AND
38793: IFFALSE 39055
// begin k = 0 ;
38795: LD_ADDR_VAR 0 17
38799: PUSH
38800: LD_INT 0
38802: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
38803: LD_ADDR_VAR 0 2
38807: PUSH
38808: LD_EXP 61
38812: PUSH
38813: LD_VAR 0 9
38817: ARRAY
38818: PUSH
38819: FOR_IN
38820: IFFALSE 38871
// if i [ 4 ] in [ b_breastwork , b_bunker , b_armoury , b_barracks , b_fort ] then
38822: LD_VAR 0 2
38826: PUSH
38827: LD_INT 4
38829: ARRAY
38830: PUSH
38831: LD_INT 31
38833: PUSH
38834: LD_INT 32
38836: PUSH
38837: LD_INT 4
38839: PUSH
38840: LD_INT 5
38842: PUSH
38843: LD_INT 35
38845: PUSH
38846: EMPTY
38847: LIST
38848: LIST
38849: LIST
38850: LIST
38851: LIST
38852: IN
38853: IFFALSE 38869
// k = k + 1 ;
38855: LD_ADDR_VAR 0 17
38859: PUSH
38860: LD_VAR 0 17
38864: PUSH
38865: LD_INT 1
38867: PLUS
38868: ST_TO_ADDR
38869: GO 38819
38871: POP
38872: POP
// if k > ai_soldiers [ base ] then
38873: LD_VAR 0 17
38877: PUSH
38878: LD_EXP 40
38882: PUSH
38883: LD_VAR 0 9
38887: ARRAY
38888: GREATER
38889: IFFALSE 39055
// begin for i = 1 to ai_buildings_locations [ base ] do
38891: LD_ADDR_VAR 0 2
38895: PUSH
38896: DOUBLE
38897: LD_INT 1
38899: DEC
38900: ST_TO_ADDR
38901: LD_EXP 61
38905: PUSH
38906: LD_VAR 0 9
38910: ARRAY
38911: PUSH
38912: FOR_TO
38913: IFFALSE 39032
// if ai_buildings_locations [ base ] [ i ] = temp_list then
38915: LD_EXP 61
38919: PUSH
38920: LD_VAR 0 9
38924: ARRAY
38925: PUSH
38926: LD_VAR 0 2
38930: ARRAY
38931: PUSH
38932: LD_VAR 0 4
38936: EQUAL
38937: IFFALSE 39030
// begin temp_list_2 = Replace ( ai_buildings_locations [ base ] [ i ] , 4 , b_turret ) ;
38939: LD_ADDR_VAR 0 8
38943: PUSH
38944: LD_EXP 61
38948: PUSH
38949: LD_VAR 0 9
38953: ARRAY
38954: PUSH
38955: LD_VAR 0 2
38959: ARRAY
38960: PPUSH
38961: LD_INT 4
38963: PPUSH
38964: LD_INT 33
38966: PPUSH
38967: CALL_OW 1
38971: ST_TO_ADDR
// temp_list_2 = Replace ( ai_buildings_locations [ base ] , i , temp_list_2 ) ;
38972: LD_ADDR_VAR 0 8
38976: PUSH
38977: LD_EXP 61
38981: PUSH
38982: LD_VAR 0 9
38986: ARRAY
38987: PPUSH
38988: LD_VAR 0 2
38992: PPUSH
38993: LD_VAR 0 8
38997: PPUSH
38998: CALL_OW 1
39002: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list_2 ) ;
39003: LD_ADDR_EXP 61
39007: PUSH
39008: LD_EXP 61
39012: PPUSH
39013: LD_VAR 0 9
39017: PPUSH
39018: LD_VAR 0 8
39022: PPUSH
39023: CALL_OW 1
39027: ST_TO_ADDR
// break ;
39028: GO 39032
// end ;
39030: GO 38912
39032: POP
39033: POP
// temp_list = Replace ( temp_list , 4 , b_turret ) ;
39034: LD_ADDR_VAR 0 4
39038: PUSH
39039: LD_VAR 0 4
39043: PPUSH
39044: LD_INT 4
39046: PPUSH
39047: LD_INT 33
39049: PPUSH
39050: CALL_OW 1
39054: ST_TO_ADDR
// end ; end ; ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , temp_list ) ;
39055: LD_ADDR_EXP 80
39059: PUSH
39060: LD_EXP 80
39064: PPUSH
39065: LD_VAR 0 9
39069: PPUSH
39070: LD_VAR 0 4
39074: PPUSH
39075: CALL_OW 1
39079: ST_TO_ADDR
// end ; end ; if ai_upcoming_building_data [ base ] > 0 then
39080: LD_EXP 80
39084: PUSH
39085: LD_VAR 0 9
39089: ARRAY
39090: PUSH
39091: LD_INT 0
39093: GREATER
39094: IFFALSE 43276
// begin if ai_building_constructor [ base ] = 0 then
39096: LD_EXP 77
39100: PUSH
39101: LD_VAR 0 9
39105: ARRAY
39106: PUSH
39107: LD_INT 0
39109: EQUAL
39110: IFFALSE 39428
// begin temp_list_2 = UnitFilter ( ai_engineers [ base ] , [ f_class , class_engineer ] ) ;
39112: LD_ADDR_VAR 0 8
39116: PUSH
39117: LD_EXP 42
39121: PUSH
39122: LD_VAR 0 9
39126: ARRAY
39127: PPUSH
39128: LD_INT 25
39130: PUSH
39131: LD_INT 2
39133: PUSH
39134: EMPTY
39135: LIST
39136: LIST
39137: PPUSH
39138: CALL_OW 72
39142: ST_TO_ADDR
// if temp_list_2 > 0 then
39143: LD_VAR 0 8
39147: PUSH
39148: LD_INT 0
39150: GREATER
39151: IFFALSE 39238
// begin temp_list = [ ] ;
39153: LD_ADDR_VAR 0 4
39157: PUSH
39158: EMPTY
39159: ST_TO_ADDR
// for i in temp_list_2 do
39160: LD_ADDR_VAR 0 2
39164: PUSH
39165: LD_VAR 0 8
39169: PUSH
39170: FOR_IN
39171: IFFALSE 39199
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
39173: LD_ADDR_VAR 0 4
39177: PUSH
39178: LD_VAR 0 4
39182: PUSH
39183: LD_VAR 0 2
39187: PPUSH
39188: LD_INT 2
39190: PPUSH
39191: CALL_OW 259
39195: ADD
39196: ST_TO_ADDR
39197: GO 39170
39199: POP
39200: POP
// ai_building_constructor = Replace ( ai_building_constructor , base , BestFromListByList ( temp_list_2 , temp_list ) ) ;
39201: LD_ADDR_EXP 77
39205: PUSH
39206: LD_EXP 77
39210: PPUSH
39211: LD_VAR 0 9
39215: PPUSH
39216: LD_VAR 0 8
39220: PPUSH
39221: LD_VAR 0 4
39225: PPUSH
39226: CALL_OW 79
39230: PPUSH
39231: CALL_OW 1
39235: ST_TO_ADDR
// end else
39236: GO 39428
// if ai_engineers [ base ] = 0 and ai_crane [ base ] > 0 and crane_usable then
39238: LD_EXP 42
39242: PUSH
39243: LD_VAR 0 9
39247: ARRAY
39248: PUSH
39249: LD_INT 0
39251: EQUAL
39252: PUSH
39253: LD_EXP 88
39257: PUSH
39258: LD_VAR 0 9
39262: ARRAY
39263: PUSH
39264: LD_INT 0
39266: GREATER
39267: AND
39268: PUSH
39269: LD_VAR 0 12
39273: AND
39274: IFFALSE 39428
// begin if InArea ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , crane_not_allowed_to_repair_area ) then
39276: LD_EXP 80
39280: PUSH
39281: LD_VAR 0 9
39285: ARRAY
39286: PUSH
39287: LD_INT 1
39289: ARRAY
39290: PPUSH
39291: LD_EXP 80
39295: PUSH
39296: LD_VAR 0 9
39300: ARRAY
39301: PUSH
39302: LD_INT 2
39304: ARRAY
39305: PPUSH
39306: LD_VAR 0 15
39310: PPUSH
39311: CALL_OW 309
39315: IFFALSE 39397
// begin temp_list = ai_cannot_rebuild_these_buildings [ base ] ^ [ ai_upcoming_building_data [ base ] ] ;
39317: LD_ADDR_VAR 0 4
39321: PUSH
39322: LD_EXP 81
39326: PUSH
39327: LD_VAR 0 9
39331: ARRAY
39332: PUSH
39333: LD_EXP 80
39337: PUSH
39338: LD_VAR 0 9
39342: ARRAY
39343: PUSH
39344: EMPTY
39345: LIST
39346: ADD
39347: ST_TO_ADDR
// ai_cannot_rebuild_these_buildings = Replace ( ai_cannot_rebuild_these_buildings , base , temp_list ) ;
39348: LD_ADDR_EXP 81
39352: PUSH
39353: LD_EXP 81
39357: PPUSH
39358: LD_VAR 0 9
39362: PPUSH
39363: LD_VAR 0 4
39367: PPUSH
39368: CALL_OW 1
39372: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
39373: LD_ADDR_EXP 80
39377: PUSH
39378: LD_EXP 80
39382: PPUSH
39383: LD_VAR 0 9
39387: PPUSH
39388: EMPTY
39389: PPUSH
39390: CALL_OW 1
39394: ST_TO_ADDR
// end else
39395: GO 39428
// ai_building_constructor = Replace ( ai_building_constructor , base , ai_crane [ base ] ) ;
39397: LD_ADDR_EXP 77
39401: PUSH
39402: LD_EXP 77
39406: PPUSH
39407: LD_VAR 0 9
39411: PPUSH
39412: LD_EXP 88
39416: PUSH
39417: LD_VAR 0 9
39421: ARRAY
39422: PPUSH
39423: CALL_OW 1
39427: 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
39428: LD_EXP 77
39432: PUSH
39433: LD_VAR 0 9
39437: ARRAY
39438: PUSH
39439: LD_INT 0
39441: GREATER
39442: PUSH
39443: LD_EXP 77
39447: PUSH
39448: LD_VAR 0 9
39452: ARRAY
39453: PUSH
39454: LD_VAR 0 3
39458: IN
39459: PUSH
39460: LD_EXP 77
39464: PUSH
39465: LD_VAR 0 9
39469: ARRAY
39470: PUSH
39471: LD_EXP 88
39475: PUSH
39476: LD_VAR 0 9
39480: ARRAY
39481: EQUAL
39482: PUSH
39483: LD_VAR 0 12
39487: AND
39488: OR
39489: AND
39490: IFFALSE 43276
// begin engineers_list = engineers_list diff ai_building_constructor [ base ] ;
39492: LD_ADDR_VAR 0 3
39496: PUSH
39497: LD_VAR 0 3
39501: PUSH
39502: LD_EXP 77
39506: PUSH
39507: LD_VAR 0 9
39511: ARRAY
39512: DIFF
39513: ST_TO_ADDR
// if ai_building_constructor [ base ] = ai_crane [ base ] then
39514: LD_EXP 77
39518: PUSH
39519: LD_VAR 0 9
39523: ARRAY
39524: PUSH
39525: LD_EXP 88
39529: PUSH
39530: LD_VAR 0 9
39534: ARRAY
39535: EQUAL
39536: IFFALSE 39546
// crane_usable = false ;
39538: LD_ADDR_VAR 0 12
39542: PUSH
39543: LD_INT 0
39545: ST_TO_ADDR
// away_dist = 7 ;
39546: LD_ADDR_VAR 0 7
39550: PUSH
39551: LD_INT 7
39553: ST_TO_ADDR
// if ai_vehicle_being_moved [ base ] = 0 then
39554: LD_EXP 78
39558: PUSH
39559: LD_VAR 0 9
39563: ARRAY
39564: PUSH
39565: LD_INT 0
39567: EQUAL
39568: IFFALSE 42995
// 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 ] ] ) ;
39570: LD_ADDR_VAR 0 4
39574: PUSH
39575: LD_EXP 67
39579: PUSH
39580: LD_VAR 0 9
39584: ARRAY
39585: PUSH
39586: LD_EXP 100
39590: PUSH
39591: LD_VAR 0 9
39595: ARRAY
39596: ADD
39597: PUSH
39598: LD_EXP 101
39602: PUSH
39603: LD_VAR 0 9
39607: ARRAY
39608: ADD
39609: PUSH
39610: LD_EXP 95
39614: PUSH
39615: LD_VAR 0 9
39619: ARRAY
39620: ADD
39621: PUSH
39622: LD_EXP 88
39626: PUSH
39627: LD_VAR 0 9
39631: ARRAY
39632: ADD
39633: PUSH
39634: LD_EXP 85
39638: PUSH
39639: LD_VAR 0 9
39643: ARRAY
39644: ADD
39645: PUSH
39646: LD_EXP 107
39650: PUSH
39651: LD_VAR 0 9
39655: ARRAY
39656: ADD
39657: PPUSH
39658: LD_INT 33
39660: PUSH
39661: LD_INT 1
39663: PUSH
39664: EMPTY
39665: LIST
39666: LIST
39667: PUSH
39668: LD_INT 58
39670: PUSH
39671: EMPTY
39672: LIST
39673: PUSH
39674: LD_INT 92
39676: PUSH
39677: LD_EXP 80
39681: PUSH
39682: LD_VAR 0 9
39686: ARRAY
39687: PUSH
39688: LD_INT 1
39690: ARRAY
39691: PUSH
39692: LD_EXP 80
39696: PUSH
39697: LD_VAR 0 9
39701: ARRAY
39702: PUSH
39703: LD_INT 2
39705: ARRAY
39706: PUSH
39707: LD_VAR 0 7
39711: PUSH
39712: EMPTY
39713: LIST
39714: LIST
39715: LIST
39716: LIST
39717: PUSH
39718: EMPTY
39719: LIST
39720: LIST
39721: LIST
39722: PPUSH
39723: CALL_OW 72
39727: ST_TO_ADDR
// if temp_list > 0 then
39728: LD_VAR 0 4
39732: PUSH
39733: LD_INT 0
39735: GREATER
39736: IFFALSE 39947
// begin if ai_building_constructor [ base ] = ai_crane [ base ] then
39738: LD_EXP 77
39742: PUSH
39743: LD_VAR 0 9
39747: ARRAY
39748: PUSH
39749: LD_EXP 88
39753: PUSH
39754: LD_VAR 0 9
39758: ARRAY
39759: EQUAL
39760: IFFALSE 39865
// begin temp_list = ai_cannot_rebuild_these_buildings [ base ] ^ [ ai_upcoming_building_data [ base ] ] ;
39762: LD_ADDR_VAR 0 4
39766: PUSH
39767: LD_EXP 81
39771: PUSH
39772: LD_VAR 0 9
39776: ARRAY
39777: PUSH
39778: LD_EXP 80
39782: PUSH
39783: LD_VAR 0 9
39787: ARRAY
39788: PUSH
39789: EMPTY
39790: LIST
39791: ADD
39792: ST_TO_ADDR
// ai_cannot_rebuild_these_buildings = Replace ( ai_cannot_rebuild_these_buildings , base , temp_list ) ;
39793: LD_ADDR_EXP 81
39797: PUSH
39798: LD_EXP 81
39802: PPUSH
39803: LD_VAR 0 9
39807: PPUSH
39808: LD_VAR 0 4
39812: PPUSH
39813: CALL_OW 1
39817: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
39818: LD_ADDR_EXP 80
39822: PUSH
39823: LD_EXP 80
39827: PPUSH
39828: LD_VAR 0 9
39832: PPUSH
39833: EMPTY
39834: PPUSH
39835: CALL_OW 1
39839: ST_TO_ADDR
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
39840: LD_ADDR_EXP 77
39844: PUSH
39845: LD_EXP 77
39849: PPUSH
39850: LD_VAR 0 9
39854: PPUSH
39855: LD_INT 0
39857: PPUSH
39858: CALL_OW 1
39862: ST_TO_ADDR
// end else
39863: GO 39945
// begin ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , temp_list [ 1 ] ) ;
39865: LD_ADDR_EXP 78
39869: PUSH
39870: LD_EXP 78
39874: PPUSH
39875: LD_VAR 0 9
39879: PPUSH
39880: LD_VAR 0 4
39884: PUSH
39885: LD_INT 1
39887: ARRAY
39888: PPUSH
39889: CALL_OW 1
39893: ST_TO_ADDR
// temp_list_2 = ai_vehicles_having_been_moved [ base ] ^ temp_list [ 1 ] ;
39894: LD_ADDR_VAR 0 8
39898: PUSH
39899: LD_EXP 79
39903: PUSH
39904: LD_VAR 0 9
39908: ARRAY
39909: PUSH
39910: LD_VAR 0 4
39914: PUSH
39915: LD_INT 1
39917: ARRAY
39918: ADD
39919: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , temp_list_2 ) ;
39920: LD_ADDR_EXP 79
39924: PUSH
39925: LD_EXP 79
39929: PPUSH
39930: LD_VAR 0 9
39934: PPUSH
39935: LD_VAR 0 8
39939: PPUSH
39940: CALL_OW 1
39944: ST_TO_ADDR
// end ; end else
39945: GO 42993
// if IsInUnit ( ai_building_constructor [ base ] ) > 0 then
39947: LD_EXP 77
39951: PUSH
39952: LD_VAR 0 9
39956: ARRAY
39957: PPUSH
39958: CALL_OW 310
39962: PUSH
39963: LD_INT 0
39965: GREATER
39966: IFFALSE 40044
// case GetType ( IsInUnit ( ai_building_constructor [ base ] ) ) of unit_building :
39968: LD_EXP 77
39972: PUSH
39973: LD_VAR 0 9
39977: ARRAY
39978: PPUSH
39979: CALL_OW 310
39983: PPUSH
39984: CALL_OW 247
39988: PUSH
39989: LD_INT 3
39991: DOUBLE
39992: EQUAL
39993: IFTRUE 39997
39995: GO 40015
39997: POP
// ComExitBuilding ( ai_building_constructor [ base ] ) ; unit_vehicle :
39998: LD_EXP 77
40002: PUSH
40003: LD_VAR 0 9
40007: ARRAY
40008: PPUSH
40009: CALL_OW 122
40013: GO 40042
40015: LD_INT 2
40017: DOUBLE
40018: EQUAL
40019: IFTRUE 40023
40021: GO 40041
40023: POP
// ComExitVehicle ( ai_building_constructor [ base ] ) ; end else
40024: LD_EXP 77
40028: PUSH
40029: LD_VAR 0 9
40033: ARRAY
40034: PPUSH
40035: CALL_OW 121
40039: GO 40042
40041: POP
40042: GO 42993
// begin k = false ;
40044: LD_ADDR_VAR 0 17
40048: PUSH
40049: LD_INT 0
40051: ST_TO_ADDR
// if HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) <= 0 then
40052: LD_EXP 80
40056: PUSH
40057: LD_VAR 0 9
40061: ARRAY
40062: PUSH
40063: LD_INT 1
40065: ARRAY
40066: PPUSH
40067: LD_EXP 80
40071: PUSH
40072: LD_VAR 0 9
40076: ARRAY
40077: PUSH
40078: LD_INT 2
40080: ARRAY
40081: PPUSH
40082: CALL_OW 428
40086: PUSH
40087: LD_INT 0
40089: LESSEQUAL
40090: IFFALSE 40102
// k = true else
40092: LD_ADDR_VAR 0 17
40096: PUSH
40097: LD_INT 1
40099: ST_TO_ADDR
40100: GO 40155
// if GetType ( HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ) <> unit_building then
40102: LD_EXP 80
40106: PUSH
40107: LD_VAR 0 9
40111: ARRAY
40112: PUSH
40113: LD_INT 1
40115: ARRAY
40116: PPUSH
40117: LD_EXP 80
40121: PUSH
40122: LD_VAR 0 9
40126: ARRAY
40127: PUSH
40128: LD_INT 2
40130: ARRAY
40131: PPUSH
40132: CALL_OW 428
40136: PPUSH
40137: CALL_OW 247
40141: PUSH
40142: LD_INT 3
40144: NONEQUAL
40145: IFFALSE 40155
// k = true ;
40147: LD_ADDR_VAR 0 17
40151: PUSH
40152: LD_INT 1
40154: ST_TO_ADDR
// if k then
40155: LD_VAR 0 17
40159: IFFALSE 42350
// begin case ai_upcoming_building_data [ base ] [ 4 ] of b_warehouse :
40161: LD_EXP 80
40165: PUSH
40166: LD_VAR 0 9
40170: ARRAY
40171: PUSH
40172: LD_INT 4
40174: ARRAY
40175: PUSH
40176: LD_INT 1
40178: DOUBLE
40179: EQUAL
40180: IFTRUE 40184
40182: GO 40195
40184: POP
// i = b_depot ; b_factory :
40185: LD_ADDR_VAR 0 2
40189: PUSH
40190: LD_INT 0
40192: ST_TO_ADDR
40193: GO 40279
40195: LD_INT 3
40197: DOUBLE
40198: EQUAL
40199: IFTRUE 40203
40201: GO 40214
40203: POP
// i = b_workshop ; b_lab_half , b_lab_full :
40204: LD_ADDR_VAR 0 2
40208: PUSH
40209: LD_INT 2
40211: ST_TO_ADDR
40212: GO 40279
40214: LD_INT 7
40216: DOUBLE
40217: EQUAL
40218: IFTRUE 40228
40220: LD_INT 8
40222: DOUBLE
40223: EQUAL
40224: IFTRUE 40228
40226: GO 40239
40228: POP
// i = b_lab ; b_barracks :
40229: LD_ADDR_VAR 0 2
40233: PUSH
40234: LD_INT 6
40236: ST_TO_ADDR
40237: GO 40279
40239: LD_INT 5
40241: DOUBLE
40242: EQUAL
40243: IFTRUE 40247
40245: GO 40258
40247: POP
// i = b_armoury ; else
40248: LD_ADDR_VAR 0 2
40252: PUSH
40253: LD_INT 4
40255: ST_TO_ADDR
40256: GO 40279
40258: POP
// i = ai_upcoming_building_data [ base ] [ 4 ] ; end ;
40259: LD_ADDR_VAR 0 2
40263: PUSH
40264: LD_EXP 80
40268: PUSH
40269: LD_VAR 0 9
40273: ARRAY
40274: PUSH
40275: LD_INT 4
40277: ARRAY
40278: ST_TO_ADDR
// case i of b_depot :
40279: LD_VAR 0 2
40283: PUSH
40284: LD_INT 0
40286: DOUBLE
40287: EQUAL
40288: IFTRUE 40292
40290: GO 40369
40292: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
40293: LD_EXP 77
40297: PUSH
40298: LD_VAR 0 9
40302: ARRAY
40303: PPUSH
40304: CALL_OW 248
40308: PUSH
40309: LD_INT 3
40311: DOUBLE
40312: EQUAL
40313: IFTRUE 40317
40315: GO 40328
40317: POP
// b_value = 64 ; nation_american :
40318: LD_ADDR_VAR 0 13
40322: PUSH
40323: LD_INT 64
40325: ST_TO_ADDR
40326: GO 40367
40328: LD_INT 1
40330: DOUBLE
40331: EQUAL
40332: IFTRUE 40336
40334: GO 40347
40336: POP
// b_value = 1 ; nation_arabian :
40337: LD_ADDR_VAR 0 13
40341: PUSH
40342: LD_INT 1
40344: ST_TO_ADDR
40345: GO 40367
40347: LD_INT 2
40349: DOUBLE
40350: EQUAL
40351: IFTRUE 40355
40353: GO 40366
40355: POP
// b_value = 34 ; end ;
40356: LD_ADDR_VAR 0 13
40360: PUSH
40361: LD_INT 34
40363: ST_TO_ADDR
40364: GO 40367
40366: POP
// end ; b_workshop :
40367: GO 42262
40369: LD_INT 2
40371: DOUBLE
40372: EQUAL
40373: IFTRUE 40377
40375: GO 40454
40377: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
40378: LD_EXP 77
40382: PUSH
40383: LD_VAR 0 9
40387: ARRAY
40388: PPUSH
40389: CALL_OW 248
40393: PUSH
40394: LD_INT 3
40396: DOUBLE
40397: EQUAL
40398: IFTRUE 40402
40400: GO 40413
40402: POP
// b_value = 68 ; nation_american :
40403: LD_ADDR_VAR 0 13
40407: PUSH
40408: LD_INT 68
40410: ST_TO_ADDR
40411: GO 40452
40413: LD_INT 1
40415: DOUBLE
40416: EQUAL
40417: IFTRUE 40421
40419: GO 40432
40421: POP
// b_value = 5 ; nation_arabian :
40422: LD_ADDR_VAR 0 13
40426: PUSH
40427: LD_INT 5
40429: ST_TO_ADDR
40430: GO 40452
40432: LD_INT 2
40434: DOUBLE
40435: EQUAL
40436: IFTRUE 40440
40438: GO 40451
40440: POP
// b_value = 38 ; end ;
40441: LD_ADDR_VAR 0 13
40445: PUSH
40446: LD_INT 38
40448: ST_TO_ADDR
40449: GO 40452
40451: POP
// end ; b_armoury :
40452: GO 42262
40454: LD_INT 4
40456: DOUBLE
40457: EQUAL
40458: IFTRUE 40462
40460: GO 40539
40462: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
40463: LD_EXP 77
40467: PUSH
40468: LD_VAR 0 9
40472: ARRAY
40473: PPUSH
40474: CALL_OW 248
40478: PUSH
40479: LD_INT 3
40481: DOUBLE
40482: EQUAL
40483: IFTRUE 40487
40485: GO 40498
40487: POP
// b_value = 66 ; nation_american :
40488: LD_ADDR_VAR 0 13
40492: PUSH
40493: LD_INT 66
40495: ST_TO_ADDR
40496: GO 40537
40498: LD_INT 1
40500: DOUBLE
40501: EQUAL
40502: IFTRUE 40506
40504: GO 40517
40506: POP
// b_value = 3 ; nation_arabian :
40507: LD_ADDR_VAR 0 13
40511: PUSH
40512: LD_INT 3
40514: ST_TO_ADDR
40515: GO 40537
40517: LD_INT 2
40519: DOUBLE
40520: EQUAL
40521: IFTRUE 40525
40523: GO 40536
40525: POP
// b_value = 36 ; end ;
40526: LD_ADDR_VAR 0 13
40530: PUSH
40531: LD_INT 36
40533: ST_TO_ADDR
40534: GO 40537
40536: POP
// end ; b_lab :
40537: GO 42262
40539: LD_INT 6
40541: DOUBLE
40542: EQUAL
40543: IFTRUE 40547
40545: GO 40624
40547: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
40548: LD_EXP 77
40552: PUSH
40553: LD_VAR 0 9
40557: ARRAY
40558: PPUSH
40559: CALL_OW 248
40563: PUSH
40564: LD_INT 3
40566: DOUBLE
40567: EQUAL
40568: IFTRUE 40572
40570: GO 40583
40572: POP
// b_value = 77 ; nation_american :
40573: LD_ADDR_VAR 0 13
40577: PUSH
40578: LD_INT 77
40580: ST_TO_ADDR
40581: GO 40622
40583: LD_INT 1
40585: DOUBLE
40586: EQUAL
40587: IFTRUE 40591
40589: GO 40602
40591: POP
// b_value = 17 ; nation_arabian :
40592: LD_ADDR_VAR 0 13
40596: PUSH
40597: LD_INT 17
40599: ST_TO_ADDR
40600: GO 40622
40602: LD_INT 2
40604: DOUBLE
40605: EQUAL
40606: IFTRUE 40610
40608: GO 40621
40610: POP
// b_value = 48 ; end ;
40611: LD_ADDR_VAR 0 13
40615: PUSH
40616: LD_INT 48
40618: ST_TO_ADDR
40619: GO 40622
40621: POP
// end ; b_oil_power :
40622: GO 42262
40624: LD_INT 26
40626: DOUBLE
40627: EQUAL
40628: IFTRUE 40632
40630: GO 40709
40632: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
40633: LD_EXP 77
40637: PUSH
40638: LD_VAR 0 9
40642: ARRAY
40643: PPUSH
40644: CALL_OW 248
40648: PUSH
40649: LD_INT 3
40651: DOUBLE
40652: EQUAL
40653: IFTRUE 40657
40655: GO 40668
40657: POP
// b_value = 85 ; nation_american :
40658: LD_ADDR_VAR 0 13
40662: PUSH
40663: LD_INT 85
40665: ST_TO_ADDR
40666: GO 40707
40668: LD_INT 1
40670: DOUBLE
40671: EQUAL
40672: IFTRUE 40676
40674: GO 40687
40676: POP
// b_value = 25 ; nation_arabian :
40677: LD_ADDR_VAR 0 13
40681: PUSH
40682: LD_INT 25
40684: ST_TO_ADDR
40685: GO 40707
40687: LD_INT 2
40689: DOUBLE
40690: EQUAL
40691: IFTRUE 40695
40693: GO 40706
40695: POP
// b_value = 56 ; end ;
40696: LD_ADDR_VAR 0 13
40700: PUSH
40701: LD_INT 56
40703: ST_TO_ADDR
40704: GO 40707
40706: POP
// end ; b_solar_power :
40707: GO 42262
40709: LD_INT 27
40711: DOUBLE
40712: EQUAL
40713: IFTRUE 40717
40715: GO 40795
40717: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
40718: LD_EXP 77
40722: PUSH
40723: LD_VAR 0 9
40727: ARRAY
40728: PPUSH
40729: CALL_OW 248
40733: PUSH
40734: LD_INT 3
40736: DOUBLE
40737: EQUAL
40738: IFTRUE 40742
40740: GO 40754
40742: POP
// b_value = - 7 ; nation_american :
40743: LD_ADDR_VAR 0 13
40747: PUSH
40748: LD_INT 7
40750: NEG
40751: ST_TO_ADDR
40752: GO 40793
40754: LD_INT 1
40756: DOUBLE
40757: EQUAL
40758: IFTRUE 40762
40760: GO 40773
40762: POP
// b_value = 26 ; nation_arabian :
40763: LD_ADDR_VAR 0 13
40767: PUSH
40768: LD_INT 26
40770: ST_TO_ADDR
40771: GO 40793
40773: LD_INT 2
40775: DOUBLE
40776: EQUAL
40777: IFTRUE 40781
40779: GO 40792
40781: POP
// b_value = 57 ; end ;
40782: LD_ADDR_VAR 0 13
40786: PUSH
40787: LD_INT 57
40789: ST_TO_ADDR
40790: GO 40793
40792: POP
// end ; b_siberite_power :
40793: GO 42262
40795: LD_INT 28
40797: DOUBLE
40798: EQUAL
40799: IFTRUE 40803
40801: GO 40880
40803: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
40804: LD_EXP 77
40808: PUSH
40809: LD_VAR 0 9
40813: ARRAY
40814: PPUSH
40815: CALL_OW 248
40819: PUSH
40820: LD_INT 3
40822: DOUBLE
40823: EQUAL
40824: IFTRUE 40828
40826: GO 40839
40828: POP
// b_value = 86 ; nation_american :
40829: LD_ADDR_VAR 0 13
40833: PUSH
40834: LD_INT 86
40836: ST_TO_ADDR
40837: GO 40878
40839: LD_INT 1
40841: DOUBLE
40842: EQUAL
40843: IFTRUE 40847
40845: GO 40858
40847: POP
// b_value = 27 ; nation_arabian :
40848: LD_ADDR_VAR 0 13
40852: PUSH
40853: LD_INT 27
40855: ST_TO_ADDR
40856: GO 40878
40858: LD_INT 2
40860: DOUBLE
40861: EQUAL
40862: IFTRUE 40866
40864: GO 40877
40866: POP
// b_value = 58 ; end ;
40867: LD_ADDR_VAR 0 13
40871: PUSH
40872: LD_INT 58
40874: ST_TO_ADDR
40875: GO 40878
40877: POP
// end ; b_oil_mine :
40878: GO 42262
40880: LD_INT 29
40882: DOUBLE
40883: EQUAL
40884: IFTRUE 40888
40886: GO 40965
40888: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
40889: LD_EXP 77
40893: PUSH
40894: LD_VAR 0 9
40898: ARRAY
40899: PPUSH
40900: CALL_OW 248
40904: PUSH
40905: LD_INT 3
40907: DOUBLE
40908: EQUAL
40909: IFTRUE 40913
40911: GO 40924
40913: POP
// b_value = 87 ; nation_american :
40914: LD_ADDR_VAR 0 13
40918: PUSH
40919: LD_INT 87
40921: ST_TO_ADDR
40922: GO 40963
40924: LD_INT 1
40926: DOUBLE
40927: EQUAL
40928: IFTRUE 40932
40930: GO 40943
40932: POP
// b_value = 28 ; nation_arabian :
40933: LD_ADDR_VAR 0 13
40937: PUSH
40938: LD_INT 28
40940: ST_TO_ADDR
40941: GO 40963
40943: LD_INT 2
40945: DOUBLE
40946: EQUAL
40947: IFTRUE 40951
40949: GO 40962
40951: POP
// b_value = 59 ; end ;
40952: LD_ADDR_VAR 0 13
40956: PUSH
40957: LD_INT 59
40959: ST_TO_ADDR
40960: GO 40963
40962: POP
// end ; b_siberite_mine :
40963: GO 42262
40965: LD_INT 30
40967: DOUBLE
40968: EQUAL
40969: IFTRUE 40973
40971: GO 41050
40973: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
40974: LD_EXP 77
40978: PUSH
40979: LD_VAR 0 9
40983: ARRAY
40984: PPUSH
40985: CALL_OW 248
40989: PUSH
40990: LD_INT 3
40992: DOUBLE
40993: EQUAL
40994: IFTRUE 40998
40996: GO 41009
40998: POP
// b_value = 88 ; nation_american :
40999: LD_ADDR_VAR 0 13
41003: PUSH
41004: LD_INT 88
41006: ST_TO_ADDR
41007: GO 41048
41009: LD_INT 1
41011: DOUBLE
41012: EQUAL
41013: IFTRUE 41017
41015: GO 41028
41017: POP
// b_value = 29 ; nation_arabian :
41018: LD_ADDR_VAR 0 13
41022: PUSH
41023: LD_INT 29
41025: ST_TO_ADDR
41026: GO 41048
41028: LD_INT 2
41030: DOUBLE
41031: EQUAL
41032: IFTRUE 41036
41034: GO 41047
41036: POP
// b_value = 60 ; end ;
41037: LD_ADDR_VAR 0 13
41041: PUSH
41042: LD_INT 60
41044: ST_TO_ADDR
41045: GO 41048
41047: POP
// end ; b_breastwork :
41048: GO 42262
41050: LD_INT 31
41052: DOUBLE
41053: EQUAL
41054: IFTRUE 41058
41056: GO 41135
41058: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41059: LD_EXP 77
41063: PUSH
41064: LD_VAR 0 9
41068: ARRAY
41069: PPUSH
41070: CALL_OW 248
41074: PUSH
41075: LD_INT 3
41077: DOUBLE
41078: EQUAL
41079: IFTRUE 41083
41081: GO 41094
41083: POP
// b_value = 89 ; nation_american :
41084: LD_ADDR_VAR 0 13
41088: PUSH
41089: LD_INT 89
41091: ST_TO_ADDR
41092: GO 41133
41094: LD_INT 1
41096: DOUBLE
41097: EQUAL
41098: IFTRUE 41102
41100: GO 41113
41102: POP
// b_value = 30 ; nation_arabian :
41103: LD_ADDR_VAR 0 13
41107: PUSH
41108: LD_INT 30
41110: ST_TO_ADDR
41111: GO 41133
41113: LD_INT 2
41115: DOUBLE
41116: EQUAL
41117: IFTRUE 41121
41119: GO 41132
41121: POP
// b_value = 61 ; end ;
41122: LD_ADDR_VAR 0 13
41126: PUSH
41127: LD_INT 61
41129: ST_TO_ADDR
41130: GO 41133
41132: POP
// end ; b_bunker :
41133: GO 42262
41135: LD_INT 32
41137: DOUBLE
41138: EQUAL
41139: IFTRUE 41143
41141: GO 41220
41143: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41144: LD_EXP 77
41148: PUSH
41149: LD_VAR 0 9
41153: ARRAY
41154: PPUSH
41155: CALL_OW 248
41159: PUSH
41160: LD_INT 3
41162: DOUBLE
41163: EQUAL
41164: IFTRUE 41168
41166: GO 41179
41168: POP
// b_value = 90 ; nation_american :
41169: LD_ADDR_VAR 0 13
41173: PUSH
41174: LD_INT 90
41176: ST_TO_ADDR
41177: GO 41218
41179: LD_INT 1
41181: DOUBLE
41182: EQUAL
41183: IFTRUE 41187
41185: GO 41198
41187: POP
// b_value = 31 ; nation_arabian :
41188: LD_ADDR_VAR 0 13
41192: PUSH
41193: LD_INT 31
41195: ST_TO_ADDR
41196: GO 41218
41198: LD_INT 2
41200: DOUBLE
41201: EQUAL
41202: IFTRUE 41206
41204: GO 41217
41206: POP
// b_value = 62 ; end ;
41207: LD_ADDR_VAR 0 13
41211: PUSH
41212: LD_INT 62
41214: ST_TO_ADDR
41215: GO 41218
41217: POP
// end ; b_turret :
41218: GO 42262
41220: LD_INT 33
41222: DOUBLE
41223: EQUAL
41224: IFTRUE 41228
41226: GO 41306
41228: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41229: LD_EXP 77
41233: PUSH
41234: LD_VAR 0 9
41238: ARRAY
41239: PPUSH
41240: CALL_OW 248
41244: PUSH
41245: LD_INT 3
41247: DOUBLE
41248: EQUAL
41249: IFTRUE 41253
41251: GO 41264
41253: POP
// b_value = 91 ; nation_american :
41254: LD_ADDR_VAR 0 13
41258: PUSH
41259: LD_INT 91
41261: ST_TO_ADDR
41262: GO 41304
41264: LD_INT 1
41266: DOUBLE
41267: EQUAL
41268: IFTRUE 41272
41270: GO 41283
41272: POP
// b_value = 32 ; nation_arabian :
41273: LD_ADDR_VAR 0 13
41277: PUSH
41278: LD_INT 32
41280: ST_TO_ADDR
41281: GO 41304
41283: LD_INT 2
41285: DOUBLE
41286: EQUAL
41287: IFTRUE 41291
41289: GO 41303
41291: POP
// b_value = - 7 ; end ;
41292: LD_ADDR_VAR 0 13
41296: PUSH
41297: LD_INT 7
41299: NEG
41300: ST_TO_ADDR
41301: GO 41304
41303: POP
// end ; b_teleport :
41304: GO 42262
41306: LD_INT 34
41308: DOUBLE
41309: EQUAL
41310: IFTRUE 41314
41312: GO 41393
41314: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41315: LD_EXP 77
41319: PUSH
41320: LD_VAR 0 9
41324: ARRAY
41325: PPUSH
41326: CALL_OW 248
41330: PUSH
41331: LD_INT 3
41333: DOUBLE
41334: EQUAL
41335: IFTRUE 41339
41337: GO 41350
41339: POP
// b_value = 92 ; nation_american :
41340: LD_ADDR_VAR 0 13
41344: PUSH
41345: LD_INT 92
41347: ST_TO_ADDR
41348: GO 41391
41350: LD_INT 1
41352: DOUBLE
41353: EQUAL
41354: IFTRUE 41358
41356: GO 41370
41358: POP
// b_value = - 7 ; nation_arabian :
41359: LD_ADDR_VAR 0 13
41363: PUSH
41364: LD_INT 7
41366: NEG
41367: ST_TO_ADDR
41368: GO 41391
41370: LD_INT 2
41372: DOUBLE
41373: EQUAL
41374: IFTRUE 41378
41376: GO 41390
41378: POP
// b_value = - 7 ; end ;
41379: LD_ADDR_VAR 0 13
41383: PUSH
41384: LD_INT 7
41386: NEG
41387: ST_TO_ADDR
41388: GO 41391
41390: POP
// end ; b_control_tower :
41391: GO 42262
41393: LD_INT 36
41395: DOUBLE
41396: EQUAL
41397: IFTRUE 41401
41399: GO 41480
41401: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41402: LD_EXP 77
41406: PUSH
41407: LD_VAR 0 9
41411: ARRAY
41412: PPUSH
41413: CALL_OW 248
41417: PUSH
41418: LD_INT 3
41420: DOUBLE
41421: EQUAL
41422: IFTRUE 41426
41424: GO 41438
41426: POP
// b_value = - 7 ; nation_american :
41427: LD_ADDR_VAR 0 13
41431: PUSH
41432: LD_INT 7
41434: NEG
41435: ST_TO_ADDR
41436: GO 41478
41438: LD_INT 1
41440: DOUBLE
41441: EQUAL
41442: IFTRUE 41446
41444: GO 41457
41446: POP
// b_value = 94 ; nation_arabian :
41447: LD_ADDR_VAR 0 13
41451: PUSH
41452: LD_INT 94
41454: ST_TO_ADDR
41455: GO 41478
41457: LD_INT 2
41459: DOUBLE
41460: EQUAL
41461: IFTRUE 41465
41463: GO 41477
41465: POP
// b_value = - 7 ; end ;
41466: LD_ADDR_VAR 0 13
41470: PUSH
41471: LD_INT 7
41473: NEG
41474: ST_TO_ADDR
41475: GO 41478
41477: POP
// end ; b_ext_track :
41478: GO 42262
41480: LD_INT 16
41482: DOUBLE
41483: EQUAL
41484: IFTRUE 41488
41486: GO 41565
41488: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41489: LD_EXP 77
41493: PUSH
41494: LD_VAR 0 9
41498: ARRAY
41499: PPUSH
41500: CALL_OW 248
41504: PUSH
41505: LD_INT 3
41507: DOUBLE
41508: EQUAL
41509: IFTRUE 41513
41511: GO 41524
41513: POP
// b_value = 70 ; nation_american :
41514: LD_ADDR_VAR 0 13
41518: PUSH
41519: LD_INT 70
41521: ST_TO_ADDR
41522: GO 41563
41524: LD_INT 1
41526: DOUBLE
41527: EQUAL
41528: IFTRUE 41532
41530: GO 41543
41532: POP
// b_value = 7 ; nation_arabian :
41533: LD_ADDR_VAR 0 13
41537: PUSH
41538: LD_INT 7
41540: ST_TO_ADDR
41541: GO 41563
41543: LD_INT 2
41545: DOUBLE
41546: EQUAL
41547: IFTRUE 41551
41549: GO 41562
41551: POP
// b_value = 40 ; end ;
41552: LD_ADDR_VAR 0 13
41556: PUSH
41557: LD_INT 40
41559: ST_TO_ADDR
41560: GO 41563
41562: POP
// end ; b_ext_gun :
41563: GO 42262
41565: LD_INT 17
41567: DOUBLE
41568: EQUAL
41569: IFTRUE 41573
41571: GO 41650
41573: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41574: LD_EXP 77
41578: PUSH
41579: LD_VAR 0 9
41583: ARRAY
41584: PPUSH
41585: CALL_OW 248
41589: PUSH
41590: LD_INT 3
41592: DOUBLE
41593: EQUAL
41594: IFTRUE 41598
41596: GO 41609
41598: POP
// b_value = 71 ; nation_american :
41599: LD_ADDR_VAR 0 13
41603: PUSH
41604: LD_INT 71
41606: ST_TO_ADDR
41607: GO 41648
41609: LD_INT 1
41611: DOUBLE
41612: EQUAL
41613: IFTRUE 41617
41615: GO 41628
41617: POP
// b_value = 8 ; nation_arabian :
41618: LD_ADDR_VAR 0 13
41622: PUSH
41623: LD_INT 8
41625: ST_TO_ADDR
41626: GO 41648
41628: LD_INT 2
41630: DOUBLE
41631: EQUAL
41632: IFTRUE 41636
41634: GO 41647
41636: POP
// b_value = 41 ; end ;
41637: LD_ADDR_VAR 0 13
41641: PUSH
41642: LD_INT 41
41644: ST_TO_ADDR
41645: GO 41648
41647: POP
// end ; b_ext_rocket :
41648: GO 42262
41650: LD_INT 18
41652: DOUBLE
41653: EQUAL
41654: IFTRUE 41658
41656: GO 41735
41658: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41659: LD_EXP 77
41663: PUSH
41664: LD_VAR 0 9
41668: ARRAY
41669: PPUSH
41670: CALL_OW 248
41674: PUSH
41675: LD_INT 3
41677: DOUBLE
41678: EQUAL
41679: IFTRUE 41683
41681: GO 41694
41683: POP
// b_value = 72 ; nation_american :
41684: LD_ADDR_VAR 0 13
41688: PUSH
41689: LD_INT 72
41691: ST_TO_ADDR
41692: GO 41733
41694: LD_INT 1
41696: DOUBLE
41697: EQUAL
41698: IFTRUE 41702
41700: GO 41713
41702: POP
// b_value = 9 ; nation_arabian :
41703: LD_ADDR_VAR 0 13
41707: PUSH
41708: LD_INT 9
41710: ST_TO_ADDR
41711: GO 41733
41713: LD_INT 2
41715: DOUBLE
41716: EQUAL
41717: IFTRUE 41721
41719: GO 41732
41721: POP
// b_value = 42 ; end ;
41722: LD_ADDR_VAR 0 13
41726: PUSH
41727: LD_INT 42
41729: ST_TO_ADDR
41730: GO 41733
41732: POP
// end ; b_ext_noncombat :
41733: GO 42262
41735: LD_INT 19
41737: DOUBLE
41738: EQUAL
41739: IFTRUE 41743
41741: GO 41821
41743: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41744: LD_EXP 77
41748: PUSH
41749: LD_VAR 0 9
41753: ARRAY
41754: PPUSH
41755: CALL_OW 248
41759: PUSH
41760: LD_INT 3
41762: DOUBLE
41763: EQUAL
41764: IFTRUE 41768
41766: GO 41779
41768: POP
// b_value = 73 ; nation_american :
41769: LD_ADDR_VAR 0 13
41773: PUSH
41774: LD_INT 73
41776: ST_TO_ADDR
41777: GO 41819
41779: LD_INT 1
41781: DOUBLE
41782: EQUAL
41783: IFTRUE 41787
41785: GO 41798
41787: POP
// b_value = 10 ; nation_arabian :
41788: LD_ADDR_VAR 0 13
41792: PUSH
41793: LD_INT 10
41795: ST_TO_ADDR
41796: GO 41819
41798: LD_INT 2
41800: DOUBLE
41801: EQUAL
41802: IFTRUE 41806
41804: GO 41818
41806: POP
// b_value = - 7 ; end ;
41807: LD_ADDR_VAR 0 13
41811: PUSH
41812: LD_INT 7
41814: NEG
41815: ST_TO_ADDR
41816: GO 41819
41818: POP
// end ; b_ext_radar :
41819: GO 42262
41821: LD_INT 20
41823: DOUBLE
41824: EQUAL
41825: IFTRUE 41829
41827: GO 41907
41829: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41830: LD_EXP 77
41834: PUSH
41835: LD_VAR 0 9
41839: ARRAY
41840: PPUSH
41841: CALL_OW 248
41845: PUSH
41846: LD_INT 3
41848: DOUBLE
41849: EQUAL
41850: IFTRUE 41854
41852: GO 41866
41854: POP
// b_value = - 7 ; nation_american :
41855: LD_ADDR_VAR 0 13
41859: PUSH
41860: LD_INT 7
41862: NEG
41863: ST_TO_ADDR
41864: GO 41905
41866: LD_INT 1
41868: DOUBLE
41869: EQUAL
41870: IFTRUE 41874
41872: GO 41885
41874: POP
// b_value = 11 ; nation_arabian :
41875: LD_ADDR_VAR 0 13
41879: PUSH
41880: LD_INT 11
41882: ST_TO_ADDR
41883: GO 41905
41885: LD_INT 2
41887: DOUBLE
41888: EQUAL
41889: IFTRUE 41893
41891: GO 41904
41893: POP
// b_value = 44 ; end ;
41894: LD_ADDR_VAR 0 13
41898: PUSH
41899: LD_INT 44
41901: ST_TO_ADDR
41902: GO 41905
41904: POP
// end ; b_ext_siberium :
41905: GO 42262
41907: LD_INT 21
41909: DOUBLE
41910: EQUAL
41911: IFTRUE 41915
41913: GO 41992
41915: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
41916: LD_EXP 77
41920: PUSH
41921: LD_VAR 0 9
41925: ARRAY
41926: PPUSH
41927: CALL_OW 248
41931: PUSH
41932: LD_INT 3
41934: DOUBLE
41935: EQUAL
41936: IFTRUE 41940
41938: GO 41951
41940: POP
// b_value = 75 ; nation_american :
41941: LD_ADDR_VAR 0 13
41945: PUSH
41946: LD_INT 75
41948: ST_TO_ADDR
41949: GO 41990
41951: LD_INT 1
41953: DOUBLE
41954: EQUAL
41955: IFTRUE 41959
41957: GO 41970
41959: POP
// b_value = 12 ; nation_arabian :
41960: LD_ADDR_VAR 0 13
41964: PUSH
41965: LD_INT 12
41967: ST_TO_ADDR
41968: GO 41990
41970: LD_INT 2
41972: DOUBLE
41973: EQUAL
41974: IFTRUE 41978
41976: GO 41989
41978: POP
// b_value = 45 ; end ;
41979: LD_ADDR_VAR 0 13
41983: PUSH
41984: LD_INT 45
41986: ST_TO_ADDR
41987: GO 41990
41989: POP
// end ; b_ext_stitch :
41990: GO 42262
41992: LD_INT 23
41994: DOUBLE
41995: EQUAL
41996: IFTRUE 42000
41998: GO 42079
42000: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42001: LD_EXP 77
42005: PUSH
42006: LD_VAR 0 9
42010: ARRAY
42011: PPUSH
42012: CALL_OW 248
42016: PUSH
42017: LD_INT 3
42019: DOUBLE
42020: EQUAL
42021: IFTRUE 42025
42023: GO 42037
42025: POP
// b_value = - 7 ; nation_american :
42026: LD_ADDR_VAR 0 13
42030: PUSH
42031: LD_INT 7
42033: NEG
42034: ST_TO_ADDR
42035: GO 42077
42037: LD_INT 1
42039: DOUBLE
42040: EQUAL
42041: IFTRUE 42045
42043: GO 42057
42045: POP
// b_value = - 7 ; nation_arabian :
42046: LD_ADDR_VAR 0 13
42050: PUSH
42051: LD_INT 7
42053: NEG
42054: ST_TO_ADDR
42055: GO 42077
42057: LD_INT 2
42059: DOUBLE
42060: EQUAL
42061: IFTRUE 42065
42063: GO 42076
42065: POP
// b_value = 43 ; end ;
42066: LD_ADDR_VAR 0 13
42070: PUSH
42071: LD_INT 43
42073: ST_TO_ADDR
42074: GO 42077
42076: POP
// end ; b_ext_computer :
42077: GO 42262
42079: LD_INT 24
42081: DOUBLE
42082: EQUAL
42083: IFTRUE 42087
42085: GO 42165
42087: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42088: LD_EXP 77
42092: PUSH
42093: LD_VAR 0 9
42097: ARRAY
42098: PPUSH
42099: CALL_OW 248
42103: PUSH
42104: LD_INT 3
42106: DOUBLE
42107: EQUAL
42108: IFTRUE 42112
42110: GO 42123
42112: POP
// b_value = 76 ; nation_american :
42113: LD_ADDR_VAR 0 13
42117: PUSH
42118: LD_INT 76
42120: ST_TO_ADDR
42121: GO 42163
42123: LD_INT 1
42125: DOUBLE
42126: EQUAL
42127: IFTRUE 42131
42129: GO 42142
42131: POP
// b_value = 15 ; nation_arabian :
42132: LD_ADDR_VAR 0 13
42136: PUSH
42137: LD_INT 15
42139: ST_TO_ADDR
42140: GO 42163
42142: LD_INT 2
42144: DOUBLE
42145: EQUAL
42146: IFTRUE 42150
42148: GO 42162
42150: POP
// b_value = - 7 ; end ;
42151: LD_ADDR_VAR 0 13
42155: PUSH
42156: LD_INT 7
42158: NEG
42159: ST_TO_ADDR
42160: GO 42163
42162: POP
// end ; b_ext_laser :
42163: GO 42262
42165: LD_INT 25
42167: DOUBLE
42168: EQUAL
42169: IFTRUE 42173
42171: GO 42252
42173: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
42174: LD_EXP 77
42178: PUSH
42179: LD_VAR 0 9
42183: ARRAY
42184: PPUSH
42185: CALL_OW 248
42189: PUSH
42190: LD_INT 3
42192: DOUBLE
42193: EQUAL
42194: IFTRUE 42198
42196: GO 42210
42198: POP
// b_value = - 7 ; nation_american :
42199: LD_ADDR_VAR 0 13
42203: PUSH
42204: LD_INT 7
42206: NEG
42207: ST_TO_ADDR
42208: GO 42250
42210: LD_INT 1
42212: DOUBLE
42213: EQUAL
42214: IFTRUE 42218
42216: GO 42229
42218: POP
// b_value = 16 ; nation_arabian :
42219: LD_ADDR_VAR 0 13
42223: PUSH
42224: LD_INT 16
42226: ST_TO_ADDR
42227: GO 42250
42229: LD_INT 2
42231: DOUBLE
42232: EQUAL
42233: IFTRUE 42237
42235: GO 42249
42237: POP
// b_value = - 7 ; end ;
42238: LD_ADDR_VAR 0 13
42242: PUSH
42243: LD_INT 7
42245: NEG
42246: ST_TO_ADDR
42247: GO 42250
42249: POP
// end ; else
42250: GO 42262
42252: POP
// b_value = - 42 ; end ;
42253: LD_ADDR_VAR 0 13
42257: PUSH
42258: LD_INT 42
42260: NEG
42261: 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 ] ] ) ;
42262: LD_EXP 77
42266: PUSH
42267: LD_VAR 0 9
42271: ARRAY
42272: PPUSH
42273: LD_STRING B
42275: PUSH
42276: LD_EXP 80
42280: PUSH
42281: LD_VAR 0 9
42285: ARRAY
42286: PUSH
42287: LD_INT 1
42289: ARRAY
42290: PUSH
42291: LD_EXP 80
42295: PUSH
42296: LD_VAR 0 9
42300: ARRAY
42301: PUSH
42302: LD_INT 2
42304: ARRAY
42305: PUSH
42306: LD_INT 0
42308: PUSH
42309: LD_VAR 0 13
42313: PUSH
42314: LD_EXP 80
42318: PUSH
42319: LD_VAR 0 9
42323: ARRAY
42324: PUSH
42325: LD_INT 3
42327: ARRAY
42328: PUSH
42329: LD_INT 0
42331: PUSH
42332: EMPTY
42333: LIST
42334: LIST
42335: LIST
42336: LIST
42337: LIST
42338: LIST
42339: LIST
42340: PUSH
42341: EMPTY
42342: LIST
42343: PPUSH
42344: CALL_OW 446
// end else
42348: GO 42993
// case GetBType ( HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ) of b_depot :
42350: LD_EXP 80
42354: PUSH
42355: LD_VAR 0 9
42359: ARRAY
42360: PUSH
42361: LD_INT 1
42363: ARRAY
42364: PPUSH
42365: LD_EXP 80
42369: PUSH
42370: LD_VAR 0 9
42374: ARRAY
42375: PUSH
42376: LD_INT 2
42378: ARRAY
42379: PPUSH
42380: CALL_OW 428
42384: PPUSH
42385: CALL_OW 266
42389: PUSH
42390: LD_INT 0
42392: DOUBLE
42393: EQUAL
42394: IFTRUE 42398
42396: GO 42447
42398: POP
// begin ComUpgrade ( ai_depot [ base ] ) ;
42399: LD_EXP 49
42403: PUSH
42404: LD_VAR 0 9
42408: ARRAY
42409: PPUSH
42410: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , ai_depot [ base ] ) ;
42414: LD_ADDR_EXP 74
42418: PUSH
42419: LD_EXP 74
42423: PPUSH
42424: LD_VAR 0 9
42428: PPUSH
42429: LD_EXP 49
42433: PUSH
42434: LD_VAR 0 9
42438: ARRAY
42439: PPUSH
42440: CALL_OW 1
42444: ST_TO_ADDR
// end ; b_workshop :
42445: GO 42993
42447: LD_INT 2
42449: DOUBLE
42450: EQUAL
42451: IFTRUE 42455
42453: GO 42532
42455: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
42456: LD_ADDR_VAR 0 6
42460: PUSH
42461: LD_EXP 80
42465: PUSH
42466: LD_VAR 0 9
42470: ARRAY
42471: PUSH
42472: LD_INT 1
42474: ARRAY
42475: PPUSH
42476: LD_EXP 80
42480: PUSH
42481: LD_VAR 0 9
42485: ARRAY
42486: PUSH
42487: LD_INT 2
42489: ARRAY
42490: PPUSH
42491: CALL_OW 428
42495: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
42496: LD_VAR 0 6
42500: PPUSH
42501: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
42505: LD_ADDR_EXP 74
42509: PUSH
42510: LD_EXP 74
42514: PPUSH
42515: LD_VAR 0 9
42519: PPUSH
42520: LD_VAR 0 6
42524: PPUSH
42525: CALL_OW 1
42529: ST_TO_ADDR
// end ; b_lab , b_lab_half :
42530: GO 42993
42532: LD_INT 6
42534: DOUBLE
42535: EQUAL
42536: IFTRUE 42546
42538: LD_INT 7
42540: DOUBLE
42541: EQUAL
42542: IFTRUE 42546
42544: GO 42907
42546: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
42547: LD_ADDR_VAR 0 6
42551: PUSH
42552: LD_EXP 80
42556: PUSH
42557: LD_VAR 0 9
42561: ARRAY
42562: PUSH
42563: LD_INT 1
42565: ARRAY
42566: PPUSH
42567: LD_EXP 80
42571: PUSH
42572: LD_VAR 0 9
42576: ARRAY
42577: PUSH
42578: LD_INT 2
42580: ARRAY
42581: PPUSH
42582: CALL_OW 428
42586: 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
42587: LD_EXP 80
42591: PUSH
42592: LD_VAR 0 9
42596: ARRAY
42597: PUSH
42598: LD_INT 5
42600: ARRAY
42601: PUSH
42602: LD_INT 9
42604: NONEQUAL
42605: PUSH
42606: LD_EXP 80
42610: PUSH
42611: LD_VAR 0 9
42615: ARRAY
42616: PUSH
42617: LD_INT 5
42619: ARRAY
42620: PUSH
42621: LD_VAR 0 6
42625: PPUSH
42626: LD_INT 1
42628: PPUSH
42629: CALL_OW 268
42633: PUSH
42634: LD_VAR 0 6
42638: PPUSH
42639: LD_INT 2
42641: PPUSH
42642: CALL_OW 268
42646: PUSH
42647: EMPTY
42648: LIST
42649: LIST
42650: IN
42651: NOT
42652: AND
42653: IFFALSE 42735
// begin ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 5 ] ) ;
42655: LD_VAR 0 6
42659: PPUSH
42660: LD_EXP 80
42664: PUSH
42665: LD_VAR 0 9
42669: ARRAY
42670: PUSH
42671: LD_INT 5
42673: ARRAY
42674: PPUSH
42675: CALL_OW 147
// if base = 2 and alli_sib_needed > 0 and ai_upcoming_building_data [ base ] [ 5 ] = b_lab_siberium then
42679: LD_VAR 0 9
42683: PUSH
42684: LD_INT 2
42686: EQUAL
42687: PUSH
42688: LD_EXP 134
42692: PUSH
42693: LD_INT 0
42695: GREATER
42696: AND
42697: PUSH
42698: LD_EXP 80
42702: PUSH
42703: LD_VAR 0 9
42707: ARRAY
42708: PUSH
42709: LD_INT 5
42711: ARRAY
42712: PUSH
42713: LD_INT 11
42715: EQUAL
42716: AND
42717: IFFALSE 42733
// alli_sib_usage = alli_sib_usage + 5 ;
42719: LD_ADDR_EXP 135
42723: PUSH
42724: LD_EXP 135
42728: PUSH
42729: LD_INT 5
42731: PLUS
42732: ST_TO_ADDR
// end else
42733: GO 42880
// if ai_upcoming_building_data [ base ] [ 6 ] <> b_lab_basic then
42735: LD_EXP 80
42739: PUSH
42740: LD_VAR 0 9
42744: ARRAY
42745: PUSH
42746: LD_INT 6
42748: ARRAY
42749: PUSH
42750: LD_INT 9
42752: NONEQUAL
42753: IFFALSE 42835
// begin ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 6 ] ) ;
42755: LD_VAR 0 6
42759: PPUSH
42760: LD_EXP 80
42764: PUSH
42765: LD_VAR 0 9
42769: ARRAY
42770: PUSH
42771: LD_INT 6
42773: ARRAY
42774: PPUSH
42775: CALL_OW 147
// if base = 2 and alli_sib_needed > 0 and ai_upcoming_building_data [ base ] [ 6 ] = b_lab_siberium then
42779: LD_VAR 0 9
42783: PUSH
42784: LD_INT 2
42786: EQUAL
42787: PUSH
42788: LD_EXP 134
42792: PUSH
42793: LD_INT 0
42795: GREATER
42796: AND
42797: PUSH
42798: LD_EXP 80
42802: PUSH
42803: LD_VAR 0 9
42807: ARRAY
42808: PUSH
42809: LD_INT 6
42811: ARRAY
42812: PUSH
42813: LD_INT 11
42815: EQUAL
42816: AND
42817: IFFALSE 42833
// alli_sib_usage = alli_sib_usage + 5 ;
42819: LD_ADDR_EXP 135
42823: PUSH
42824: LD_EXP 135
42828: PUSH
42829: LD_INT 5
42831: PLUS
42832: ST_TO_ADDR
// end else
42833: GO 42880
// begin ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
42835: LD_ADDR_EXP 77
42839: PUSH
42840: LD_EXP 77
42844: PPUSH
42845: LD_VAR 0 9
42849: PPUSH
42850: LD_INT 0
42852: PPUSH
42853: CALL_OW 1
42857: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
42858: LD_ADDR_EXP 80
42862: PUSH
42863: LD_EXP 80
42867: PPUSH
42868: LD_VAR 0 9
42872: PPUSH
42873: EMPTY
42874: PPUSH
42875: CALL_OW 1
42879: ST_TO_ADDR
// end ; ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
42880: LD_ADDR_EXP 74
42884: PUSH
42885: LD_EXP 74
42889: PPUSH
42890: LD_VAR 0 9
42894: PPUSH
42895: LD_VAR 0 6
42899: PPUSH
42900: CALL_OW 1
42904: ST_TO_ADDR
// end ; b_armoury :
42905: GO 42993
42907: LD_INT 4
42909: DOUBLE
42910: EQUAL
42911: IFTRUE 42915
42913: GO 42992
42915: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
42916: LD_ADDR_VAR 0 6
42920: PUSH
42921: LD_EXP 80
42925: PUSH
42926: LD_VAR 0 9
42930: ARRAY
42931: PUSH
42932: LD_INT 1
42934: ARRAY
42935: PPUSH
42936: LD_EXP 80
42940: PUSH
42941: LD_VAR 0 9
42945: ARRAY
42946: PUSH
42947: LD_INT 2
42949: ARRAY
42950: PPUSH
42951: CALL_OW 428
42955: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
42956: LD_VAR 0 6
42960: PPUSH
42961: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
42965: LD_ADDR_EXP 74
42969: PUSH
42970: LD_EXP 74
42974: PPUSH
42975: LD_VAR 0 9
42979: PPUSH
42980: LD_VAR 0 6
42984: PPUSH
42985: CALL_OW 1
42989: ST_TO_ADDR
// end ; end ;
42990: GO 42993
42992: POP
// end ; end else
42993: GO 43276
// if UnitsInside ( ai_vehicle_being_moved [ base ] ) > 0 then
42995: LD_EXP 78
42999: PUSH
43000: LD_VAR 0 9
43004: ARRAY
43005: PPUSH
43006: CALL_OW 313
43010: PUSH
43011: LD_INT 0
43013: GREATER
43014: IFFALSE 43153
// begin if GetDistUnitXY ( ai_vehicle_being_moved [ base ] , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) <= away_dist then
43016: LD_EXP 78
43020: PUSH
43021: LD_VAR 0 9
43025: ARRAY
43026: PPUSH
43027: LD_EXP 80
43031: PUSH
43032: LD_VAR 0 9
43036: ARRAY
43037: PUSH
43038: LD_INT 1
43040: ARRAY
43041: PPUSH
43042: LD_EXP 80
43046: PUSH
43047: LD_VAR 0 9
43051: ARRAY
43052: PUSH
43053: LD_INT 2
43055: ARRAY
43056: PPUSH
43057: CALL_OW 297
43061: PUSH
43062: LD_VAR 0 7
43066: LESSEQUAL
43067: IFFALSE 43128
// AI_GetAwayFromXY ( ai_vehicle_being_moved [ base ] , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , away_dist + 2 , false ) else
43069: LD_EXP 78
43073: PUSH
43074: LD_VAR 0 9
43078: ARRAY
43079: PPUSH
43080: LD_EXP 80
43084: PUSH
43085: LD_VAR 0 9
43089: ARRAY
43090: PUSH
43091: LD_INT 1
43093: ARRAY
43094: PPUSH
43095: LD_EXP 80
43099: PUSH
43100: LD_VAR 0 9
43104: ARRAY
43105: PUSH
43106: LD_INT 2
43108: ARRAY
43109: PPUSH
43110: LD_VAR 0 7
43114: PUSH
43115: LD_INT 2
43117: PLUS
43118: PPUSH
43119: LD_INT 0
43121: PPUSH
43122: CALL 17235 0 5
43126: GO 43151
// ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
43128: LD_ADDR_EXP 78
43132: PUSH
43133: LD_EXP 78
43137: PPUSH
43138: LD_VAR 0 9
43142: PPUSH
43143: LD_INT 0
43145: PPUSH
43146: CALL_OW 1
43150: ST_TO_ADDR
// end else
43151: GO 43276
// if IsInUnit ( ai_building_constructor [ base ] ) > 0 then
43153: LD_EXP 77
43157: PUSH
43158: LD_VAR 0 9
43162: ARRAY
43163: PPUSH
43164: CALL_OW 310
43168: PUSH
43169: LD_INT 0
43171: GREATER
43172: IFFALSE 43250
// case GetType ( IsInUnit ( ai_building_constructor [ base ] ) ) of unit_building :
43174: LD_EXP 77
43178: PUSH
43179: LD_VAR 0 9
43183: ARRAY
43184: PPUSH
43185: CALL_OW 310
43189: PPUSH
43190: CALL_OW 247
43194: PUSH
43195: LD_INT 3
43197: DOUBLE
43198: EQUAL
43199: IFTRUE 43203
43201: GO 43221
43203: POP
// ComExitBuilding ( ai_building_constructor [ base ] ) ; unit_vehicle :
43204: LD_EXP 77
43208: PUSH
43209: LD_VAR 0 9
43213: ARRAY
43214: PPUSH
43215: CALL_OW 122
43219: GO 43248
43221: LD_INT 2
43223: DOUBLE
43224: EQUAL
43225: IFTRUE 43229
43227: GO 43247
43229: POP
// ComExitVehicle ( ai_building_constructor [ base ] ) ; end else
43230: LD_EXP 77
43234: PUSH
43235: LD_VAR 0 9
43239: ARRAY
43240: PPUSH
43241: CALL_OW 121
43245: GO 43248
43247: POP
43248: GO 43276
// ComEnterUnit ( ai_building_constructor [ base ] , ai_vehicle_being_moved [ base ] ) ;
43250: LD_EXP 77
43254: PUSH
43255: LD_VAR 0 9
43259: ARRAY
43260: PPUSH
43261: LD_EXP 78
43265: PUSH
43266: LD_VAR 0 9
43270: ARRAY
43271: PPUSH
43272: CALL_OW 120
// end ; end ; end ; if ( engineers_list ^ apemen_engineers_list ) > 0 and ai_depot [ base ] > 0 then
43276: LD_VAR 0 3
43280: PUSH
43281: LD_VAR 0 10
43285: ADD
43286: PUSH
43287: LD_INT 0
43289: GREATER
43290: PUSH
43291: LD_EXP 49
43295: PUSH
43296: LD_VAR 0 9
43300: ARRAY
43301: PUSH
43302: LD_INT 0
43304: GREATER
43305: AND
43306: IFFALSE 43460
// begin temp_list = GetListOfCratesInArea ( GetBaseArea ( base ) ) ;
43308: LD_ADDR_VAR 0 4
43312: PUSH
43313: LD_VAR 0 9
43317: PPUSH
43318: CALL 24795 0 1
43322: PPUSH
43323: CALL_OW 435
43327: ST_TO_ADDR
// while temp_list > 0 do
43328: LD_VAR 0 4
43332: PUSH
43333: LD_INT 0
43335: GREATER
43336: IFFALSE 43460
// begin if GetResourceTypeXY ( temp_list [ 1 ] , temp_list [ 2 ] ) = mat_artifact then
43338: LD_VAR 0 4
43342: PUSH
43343: LD_INT 1
43345: ARRAY
43346: PPUSH
43347: LD_VAR 0 4
43351: PUSH
43352: LD_INT 2
43354: ARRAY
43355: PPUSH
43356: CALL_OW 283
43360: PUSH
43361: LD_INT 4
43363: EQUAL
43364: IFFALSE 43404
// begin temp_list = Delete ( temp_list , 1 ) ;
43366: LD_ADDR_VAR 0 4
43370: PUSH
43371: LD_VAR 0 4
43375: PPUSH
43376: LD_INT 1
43378: PPUSH
43379: CALL_OW 3
43383: ST_TO_ADDR
// temp_list = Delete ( temp_list , 1 ) ;
43384: LD_ADDR_VAR 0 4
43388: PUSH
43389: LD_VAR 0 4
43393: PPUSH
43394: LD_INT 1
43396: PPUSH
43397: CALL_OW 3
43401: ST_TO_ADDR
// continue ;
43402: GO 43328
// end ; ComCollect ( GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) , temp_list [ 1 ] , temp_list [ 2 ] ) ;
43404: LD_VAR 0 3
43408: PUSH
43409: LD_VAR 0 10
43413: ADD
43414: PPUSH
43415: CALL 45199 0 1
43419: PPUSH
43420: LD_VAR 0 4
43424: PUSH
43425: LD_INT 1
43427: ARRAY
43428: PPUSH
43429: LD_VAR 0 4
43433: PUSH
43434: LD_INT 2
43436: ARRAY
43437: PPUSH
43438: CALL_OW 117
// engineers_list = [ ] ;
43442: LD_ADDR_VAR 0 3
43446: PUSH
43447: EMPTY
43448: ST_TO_ADDR
// apemen_engineers_list = [ ] ;
43449: LD_ADDR_VAR 0 10
43453: PUSH
43454: EMPTY
43455: ST_TO_ADDR
// break ;
43456: GO 43460
// end ;
43458: GO 43328
// end ; end ; DistributeHumansToBuildings ( base , engineers_list ^ apemen_engineers_list , UnitFilter ( ai_depot [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_engineer , [ 5 , 6 , 5 , 5 ] [ base ] , false , false ) ;
43460: LD_VAR 0 9
43464: PPUSH
43465: LD_VAR 0 3
43469: PUSH
43470: LD_VAR 0 10
43474: ADD
43475: PPUSH
43476: LD_EXP 49
43480: PUSH
43481: LD_VAR 0 9
43485: ARRAY
43486: PPUSH
43487: LD_INT 50
43489: PUSH
43490: EMPTY
43491: LIST
43492: PUSH
43493: LD_INT 3
43495: PUSH
43496: LD_INT 57
43498: PUSH
43499: EMPTY
43500: LIST
43501: PUSH
43502: EMPTY
43503: LIST
43504: LIST
43505: PUSH
43506: EMPTY
43507: LIST
43508: LIST
43509: PPUSH
43510: CALL_OW 72
43514: PPUSH
43515: LD_INT 2
43517: PPUSH
43518: LD_INT 5
43520: PUSH
43521: LD_INT 6
43523: PUSH
43524: LD_INT 5
43526: PUSH
43527: LD_INT 5
43529: PUSH
43530: EMPTY
43531: LIST
43532: LIST
43533: LIST
43534: LIST
43535: PUSH
43536: LD_VAR 0 9
43540: ARRAY
43541: PPUSH
43542: LD_INT 0
43544: PPUSH
43545: LD_INT 0
43547: PPUSH
43548: CALL 34075 0 7
// if crane_usable then
43552: LD_VAR 0 12
43556: IFFALSE 43684
// if not IsInArea ( ai_crane [ base ] , GetBaseArea ( base ) ) then
43558: LD_EXP 88
43562: PUSH
43563: LD_VAR 0 9
43567: ARRAY
43568: PPUSH
43569: LD_VAR 0 9
43573: PPUSH
43574: CALL 24795 0 1
43578: PPUSH
43579: CALL_OW 308
43583: NOT
43584: IFFALSE 43633
// ComMoveXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) else
43586: LD_EXP 88
43590: PUSH
43591: LD_VAR 0 9
43595: ARRAY
43596: PPUSH
43597: LD_EXP 73
43601: PUSH
43602: LD_VAR 0 9
43606: ARRAY
43607: PUSH
43608: LD_INT 1
43610: ARRAY
43611: PPUSH
43612: LD_EXP 73
43616: PUSH
43617: LD_VAR 0 9
43621: ARRAY
43622: PUSH
43623: LD_INT 2
43625: ARRAY
43626: PPUSH
43627: CALL_OW 111
43631: GO 43684
// if GetLives ( ai_crane [ base ] ) < 1000 and not under_attack then
43633: LD_EXP 88
43637: PUSH
43638: LD_VAR 0 9
43642: ARRAY
43643: PPUSH
43644: CALL_OW 256
43648: PUSH
43649: LD_INT 1000
43651: LESS
43652: PUSH
43653: LD_VAR 0 19
43657: NOT
43658: AND
43659: IFFALSE 43684
// ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , true ) ;
43661: LD_ADDR_EXP 91
43665: PUSH
43666: LD_EXP 91
43670: PPUSH
43671: LD_VAR 0 9
43675: PPUSH
43676: LD_INT 1
43678: PPUSH
43679: CALL_OW 1
43683: ST_TO_ADDR
// end ;
43684: GO 35641
43686: POP
43687: POP
// until false ;
43688: LD_INT 0
43690: IFFALSE 35602
// end ;
43692: PPOPN 22
43694: END
// on BuildingStarted ( building , builder ) do var side , temp_list , base , i ;
43695: LD_INT 0
43697: PPUSH
43698: PPUSH
43699: PPUSH
43700: PPUSH
// begin side = GetSide ( building ) ;
43701: LD_ADDR_VAR 0 3
43705: PUSH
43706: LD_VAR 0 1
43710: PPUSH
43711: CALL_OW 255
43715: ST_TO_ADDR
// if side = you then
43716: LD_VAR 0 3
43720: PUSH
43721: LD_EXP 2
43725: EQUAL
43726: IFFALSE 43730
// exit ;
43728: GO 43908
// base = FindBase ( building ) ;
43730: LD_ADDR_VAR 0 5
43734: PUSH
43735: LD_VAR 0 1
43739: PPUSH
43740: CALL 25073 0 1
43744: ST_TO_ADDR
// if base = 0 then
43745: LD_VAR 0 5
43749: PUSH
43750: LD_INT 0
43752: EQUAL
43753: IFFALSE 43757
// exit ;
43755: GO 43908
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
43757: LD_ADDR_EXP 77
43761: PUSH
43762: LD_EXP 77
43766: PPUSH
43767: LD_VAR 0 5
43771: PPUSH
43772: LD_INT 0
43774: PPUSH
43775: CALL_OW 1
43779: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , [ ] ) ;
43780: LD_ADDR_EXP 79
43784: PUSH
43785: LD_EXP 79
43789: PPUSH
43790: LD_VAR 0 5
43794: PPUSH
43795: EMPTY
43796: PPUSH
43797: CALL_OW 1
43801: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , building ) ;
43802: LD_ADDR_EXP 74
43806: PUSH
43807: LD_EXP 74
43811: PPUSH
43812: LD_VAR 0 5
43816: PPUSH
43817: LD_VAR 0 1
43821: PPUSH
43822: CALL_OW 1
43826: ST_TO_ADDR
// if base = 2 and alli_sib_needed > 0 then
43827: LD_VAR 0 5
43831: PUSH
43832: LD_INT 2
43834: EQUAL
43835: PUSH
43836: LD_EXP 134
43840: PUSH
43841: LD_INT 0
43843: GREATER
43844: AND
43845: IFFALSE 43908
// begin case GetBType ( building ) of b_siberite_power :
43847: LD_VAR 0 1
43851: PPUSH
43852: CALL_OW 266
43856: PUSH
43857: LD_INT 28
43859: DOUBLE
43860: EQUAL
43861: IFTRUE 43865
43863: GO 43882
43865: POP
// alli_sib_usage = alli_sib_usage + 20 ; b_ext_siberium :
43866: LD_ADDR_EXP 135
43870: PUSH
43871: LD_EXP 135
43875: PUSH
43876: LD_INT 20
43878: PLUS
43879: ST_TO_ADDR
43880: GO 43908
43882: LD_INT 21
43884: DOUBLE
43885: EQUAL
43886: IFTRUE 43890
43888: GO 43907
43890: POP
// alli_sib_usage = alli_sib_usage + 10 ; end ;
43891: LD_ADDR_EXP 135
43895: PUSH
43896: LD_EXP 135
43900: PUSH
43901: LD_INT 10
43903: PLUS
43904: ST_TO_ADDR
43905: GO 43908
43907: POP
// end ; end ;
43908: PPOPN 6
43910: END
// on BuildingComplete ( building ) do var side , temp_list , temp_unit , base , i , hex ;
43911: LD_INT 0
43913: PPUSH
43914: PPUSH
43915: PPUSH
43916: PPUSH
43917: PPUSH
43918: PPUSH
// begin side = GetSide ( building ) ;
43919: LD_ADDR_VAR 0 2
43923: PUSH
43924: LD_VAR 0 1
43928: PPUSH
43929: CALL_OW 255
43933: ST_TO_ADDR
// if side = you then
43934: LD_VAR 0 2
43938: PUSH
43939: LD_EXP 2
43943: EQUAL
43944: IFFALSE 43948
// exit ;
43946: GO 44290
// base = FindBase ( building ) ;
43948: LD_ADDR_VAR 0 5
43952: PUSH
43953: LD_VAR 0 1
43957: PPUSH
43958: CALL 25073 0 1
43962: ST_TO_ADDR
// if base = 0 then
43963: LD_VAR 0 5
43967: PUSH
43968: LD_INT 0
43970: EQUAL
43971: IFFALSE 43975
// exit ;
43973: GO 44290
// if ai_sib_bomb_fact_location [ base ] > 0 then
43975: LD_EXP 64
43979: PUSH
43980: LD_VAR 0 5
43984: ARRAY
43985: PUSH
43986: LD_INT 0
43988: GREATER
43989: IFFALSE 44080
// 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
43991: LD_EXP 80
43995: PUSH
43996: LD_VAR 0 5
44000: ARRAY
44001: PUSH
44002: LD_INT 1
44004: ARRAY
44005: PUSH
44006: LD_EXP 64
44010: PUSH
44011: LD_VAR 0 5
44015: ARRAY
44016: PUSH
44017: LD_INT 1
44019: ARRAY
44020: EQUAL
44021: PUSH
44022: LD_EXP 80
44026: PUSH
44027: LD_VAR 0 5
44031: ARRAY
44032: PUSH
44033: LD_INT 2
44035: ARRAY
44036: PUSH
44037: LD_EXP 64
44041: PUSH
44042: LD_VAR 0 5
44046: ARRAY
44047: PUSH
44048: LD_INT 2
44050: ARRAY
44051: EQUAL
44052: AND
44053: IFFALSE 44080
// ai_sib_bomb_fact = Replace ( ai_sib_bomb_fact , base , building ) ;
44055: LD_ADDR_EXP 63
44059: PUSH
44060: LD_EXP 63
44064: PPUSH
44065: LD_VAR 0 5
44069: PPUSH
44070: LD_VAR 0 1
44074: PPUSH
44075: CALL_OW 1
44079: ST_TO_ADDR
// hex = [ GetX ( building ) , GetY ( building ) ] ;
44080: LD_ADDR_VAR 0 7
44084: PUSH
44085: LD_VAR 0 1
44089: PPUSH
44090: CALL_OW 250
44094: PUSH
44095: LD_VAR 0 1
44099: PPUSH
44100: CALL_OW 251
44104: PUSH
44105: EMPTY
44106: LIST
44107: LIST
44108: ST_TO_ADDR
// if hex in ai_fact_extension_replace_locations [ base ] then
44109: LD_VAR 0 7
44113: PUSH
44114: LD_EXP 98
44118: PUSH
44119: LD_VAR 0 5
44123: ARRAY
44124: IN
44125: IFFALSE 44212
// begin for i in ai_facts [ base ] do
44127: LD_ADDR_VAR 0 6
44131: PUSH
44132: LD_EXP 51
44136: PUSH
44137: LD_VAR 0 5
44141: ARRAY
44142: PUSH
44143: FOR_IN
44144: IFFALSE 44210
// if ai_facts_with_ext_rebuild_map >= i then
44146: LD_EXP 108
44150: PUSH
44151: LD_VAR 0 6
44155: GREATEREQUAL
44156: IFFALSE 44208
// begin temp_list = ai_facts_with_ext_rebuild_map [ i ] diff [ hex ] ;
44158: LD_ADDR_VAR 0 3
44162: PUSH
44163: LD_EXP 108
44167: PUSH
44168: LD_VAR 0 6
44172: ARRAY
44173: PUSH
44174: LD_VAR 0 7
44178: PUSH
44179: EMPTY
44180: LIST
44181: DIFF
44182: ST_TO_ADDR
// ai_facts_with_ext_rebuild_map = Replace ( ai_facts_with_ext_rebuild_map , i , temp_list ) ;
44183: LD_ADDR_EXP 108
44187: PUSH
44188: LD_EXP 108
44192: PPUSH
44193: LD_VAR 0 6
44197: PPUSH
44198: LD_VAR 0 3
44202: PPUSH
44203: CALL_OW 1
44207: ST_TO_ADDR
// end ;
44208: GO 44143
44210: POP
44211: POP
// end ; BuildUpgradeCommon ( base , building ) ;
44212: LD_VAR 0 5
44216: PPUSH
44217: LD_VAR 0 1
44221: PPUSH
44222: CALL 44371 0 2
// temp_list = ai_all_buildings [ base ] ^ building ;
44226: LD_ADDR_VAR 0 3
44230: PUSH
44231: LD_EXP 76
44235: PUSH
44236: LD_VAR 0 5
44240: ARRAY
44241: PUSH
44242: LD_VAR 0 1
44246: ADD
44247: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
44248: LD_ADDR_EXP 76
44252: PUSH
44253: LD_EXP 76
44257: PPUSH
44258: LD_VAR 0 5
44262: PPUSH
44263: LD_VAR 0 3
44267: PPUSH
44268: CALL_OW 1
44272: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , true ) ;
44273: LD_VAR 0 5
44277: PPUSH
44278: LD_VAR 0 1
44282: PPUSH
44283: LD_INT 1
44285: PPUSH
44286: CALL 7288 0 3
// end ;
44290: PPOPN 7
44292: END
// on UpgradeComplete ( building ) do var side , temp_list , base ;
44293: LD_INT 0
44295: PPUSH
44296: PPUSH
44297: PPUSH
// begin side = GetSide ( building ) ;
44298: LD_ADDR_VAR 0 2
44302: PUSH
44303: LD_VAR 0 1
44307: PPUSH
44308: CALL_OW 255
44312: ST_TO_ADDR
// if side = you then
44313: LD_VAR 0 2
44317: PUSH
44318: LD_EXP 2
44322: EQUAL
44323: IFFALSE 44327
// exit ;
44325: GO 44368
// base = FindBase ( building ) ;
44327: LD_ADDR_VAR 0 4
44331: PUSH
44332: LD_VAR 0 1
44336: PPUSH
44337: CALL 25073 0 1
44341: ST_TO_ADDR
// if base = 0 then
44342: LD_VAR 0 4
44346: PUSH
44347: LD_INT 0
44349: EQUAL
44350: IFFALSE 44354
// exit ;
44352: GO 44368
// BuildUpgradeCommon ( base , building ) ;
44354: LD_VAR 0 4
44358: PPUSH
44359: LD_VAR 0 1
44363: PPUSH
44364: CALL 44371 0 2
// end ;
44368: PPOPN 4
44370: END
// function BuildUpgradeCommon ( base , building ) ; begin
44371: LD_INT 0
44373: PPUSH
// if GetBType ( building ) = ai_upcoming_building_data [ base ] [ 4 ] then
44374: LD_VAR 0 2
44378: PPUSH
44379: CALL_OW 266
44383: PUSH
44384: LD_EXP 80
44388: PUSH
44389: LD_VAR 0 1
44393: ARRAY
44394: PUSH
44395: LD_INT 4
44397: ARRAY
44398: EQUAL
44399: IFFALSE 44423
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
44401: LD_ADDR_EXP 80
44405: PUSH
44406: LD_EXP 80
44410: PPUSH
44411: LD_VAR 0 1
44415: PPUSH
44416: EMPTY
44417: PPUSH
44418: CALL_OW 1
44422: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
44423: LD_ADDR_EXP 74
44427: PUSH
44428: LD_EXP 74
44432: PPUSH
44433: LD_VAR 0 1
44437: PPUSH
44438: LD_INT 0
44440: PPUSH
44441: CALL_OW 1
44445: ST_TO_ADDR
// end ;
44446: LD_VAR 0 3
44450: RET
// on BuildingCaptured ( captured_building , building_former_side , capturing_unit ) do var temp_list , base , i ;
44451: LD_INT 0
44453: PPUSH
44454: PPUSH
44455: PPUSH
// begin if captured_building = ai_depot [ 2 ] and alliance_deal_status = 2 then
44456: LD_VAR 0 1
44460: PUSH
44461: LD_EXP 49
44465: PUSH
44466: LD_INT 2
44468: ARRAY
44469: EQUAL
44470: PUSH
44471: LD_EXP 131
44475: PUSH
44476: LD_INT 2
44478: EQUAL
44479: AND
44480: IFFALSE 44486
// AllianceDealBreakdown ;
44482: CALL 96688 0 0
// if captured_building in ai_depot then
44486: LD_VAR 0 1
44490: PUSH
44491: LD_EXP 49
44495: IN
44496: IFFALSE 44637
// begin SetResourceType ( GetBase ( captured_building ) , mat_cans , [ 100 , 50 , 0 ] [ difficulty ] + Rand ( 0 , 3 ) * 10 ) ;
44498: LD_VAR 0 1
44502: PPUSH
44503: CALL_OW 274
44507: PPUSH
44508: LD_INT 1
44510: PPUSH
44511: LD_INT 100
44513: PUSH
44514: LD_INT 50
44516: PUSH
44517: LD_INT 0
44519: PUSH
44520: EMPTY
44521: LIST
44522: LIST
44523: LIST
44524: PUSH
44525: LD_OWVAR 67
44529: ARRAY
44530: PUSH
44531: LD_INT 0
44533: PPUSH
44534: LD_INT 3
44536: PPUSH
44537: CALL_OW 12
44541: PUSH
44542: LD_INT 10
44544: MUL
44545: PLUS
44546: PPUSH
44547: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_oil , [ 200 , 150 , 100 ] [ difficulty ] + Rand ( 0 , 100 ) ) ;
44551: LD_VAR 0 1
44555: PPUSH
44556: CALL_OW 274
44560: PPUSH
44561: LD_INT 2
44563: PPUSH
44564: LD_INT 200
44566: PUSH
44567: LD_INT 150
44569: PUSH
44570: LD_INT 100
44572: PUSH
44573: EMPTY
44574: LIST
44575: LIST
44576: LIST
44577: PUSH
44578: LD_OWVAR 67
44582: ARRAY
44583: PUSH
44584: LD_INT 0
44586: PPUSH
44587: LD_INT 100
44589: PPUSH
44590: CALL_OW 12
44594: PLUS
44595: PPUSH
44596: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_siberit , [ 20 , 10 , 0 ] [ difficulty ] ) ;
44600: LD_VAR 0 1
44604: PPUSH
44605: CALL_OW 274
44609: PPUSH
44610: LD_INT 3
44612: PPUSH
44613: LD_INT 20
44615: PUSH
44616: LD_INT 10
44618: PUSH
44619: LD_INT 0
44621: PUSH
44622: EMPTY
44623: LIST
44624: LIST
44625: LIST
44626: PUSH
44627: LD_OWVAR 67
44631: ARRAY
44632: PPUSH
44633: CALL_OW 277
// end ; if building_former_side = alliance and difficulty > 1 and GetBType ( captured_building ) = b_factory then
44637: LD_VAR 0 2
44641: PUSH
44642: LD_EXP 5
44646: EQUAL
44647: PUSH
44648: LD_OWVAR 67
44652: PUSH
44653: LD_INT 1
44655: GREATER
44656: AND
44657: PUSH
44658: LD_VAR 0 1
44662: PPUSH
44663: CALL_OW 266
44667: PUSH
44668: LD_INT 3
44670: EQUAL
44671: AND
44672: IFFALSE 44730
// begin for i in FilterAllUnits ( [ [ f_dist , captured_building , 4 ] , [ f_btype , b_ext_noncombat ] ] ) do
44674: LD_ADDR_VAR 0 6
44678: PUSH
44679: LD_INT 91
44681: PUSH
44682: LD_VAR 0 1
44686: PUSH
44687: LD_INT 4
44689: PUSH
44690: EMPTY
44691: LIST
44692: LIST
44693: LIST
44694: PUSH
44695: LD_INT 30
44697: PUSH
44698: LD_INT 19
44700: PUSH
44701: EMPTY
44702: LIST
44703: LIST
44704: PUSH
44705: EMPTY
44706: LIST
44707: LIST
44708: PPUSH
44709: CALL_OW 69
44713: PUSH
44714: FOR_IN
44715: IFFALSE 44728
// KillUnit ( i ) ;
44717: LD_VAR 0 6
44721: PPUSH
44722: CALL_OW 66
44726: GO 44714
44728: POP
44729: POP
// end ; if GetSide ( capturing_unit ) = you and GetBType ( captured_building ) in [ b_lab , b_lab_half , b_lab_full ] then
44730: LD_VAR 0 3
44734: PPUSH
44735: CALL_OW 255
44739: PUSH
44740: LD_EXP 2
44744: EQUAL
44745: PUSH
44746: LD_VAR 0 1
44750: PPUSH
44751: CALL_OW 266
44755: PUSH
44756: LD_INT 6
44758: PUSH
44759: LD_INT 7
44761: PUSH
44762: LD_INT 8
44764: PUSH
44765: EMPTY
44766: LIST
44767: LIST
44768: LIST
44769: IN
44770: AND
44771: IFFALSE 44938
// begin case GetNation ( captured_building ) of nation_american :
44773: LD_VAR 0 1
44777: PPUSH
44778: CALL_OW 248
44782: PUSH
44783: LD_INT 1
44785: DOUBLE
44786: EQUAL
44787: IFTRUE 44791
44789: GO 44860
44791: POP
// begin if GetTech ( tech_lassight , you ) = state_disabled then
44792: LD_INT 12
44794: PPUSH
44795: LD_EXP 2
44799: PPUSH
44800: CALL_OW 321
44804: PUSH
44805: LD_INT 0
44807: EQUAL
44808: IFFALSE 44825
// SetTech ( tech_lassight , you , state_enabled ) ;
44810: LD_INT 12
44812: PPUSH
44813: LD_EXP 2
44817: PPUSH
44818: LD_INT 1
44820: PPUSH
44821: CALL_OW 322
// if GetTech ( tech_advmet , you ) = state_disabled then
44825: LD_INT 34
44827: PPUSH
44828: LD_EXP 2
44832: PPUSH
44833: CALL_OW 321
44837: PUSH
44838: LD_INT 0
44840: EQUAL
44841: IFFALSE 44858
// SetTech ( tech_advmet , you , state_enabled ) ;
44843: LD_INT 34
44845: PPUSH
44846: LD_EXP 2
44850: PPUSH
44851: LD_INT 1
44853: PPUSH
44854: CALL_OW 322
// end ; nation_russian :
44858: GO 44938
44860: LD_INT 3
44862: DOUBLE
44863: EQUAL
44864: IFTRUE 44868
44866: GO 44937
44868: POP
// begin if GetTech ( tech_bazooka , you ) = state_disabled then
44869: LD_INT 44
44871: PPUSH
44872: LD_EXP 2
44876: PPUSH
44877: CALL_OW 321
44881: PUSH
44882: LD_INT 0
44884: EQUAL
44885: IFFALSE 44902
// SetTech ( tech_bazooka , you , state_enabled ) ;
44887: LD_INT 44
44889: PPUSH
44890: LD_EXP 2
44894: PPUSH
44895: LD_INT 1
44897: PPUSH
44898: CALL_OW 322
// if GetTech ( tech_advmet , you ) = state_disabled then
44902: LD_INT 34
44904: PPUSH
44905: LD_EXP 2
44909: PPUSH
44910: CALL_OW 321
44914: PUSH
44915: LD_INT 0
44917: EQUAL
44918: IFFALSE 44935
// SetTech ( tech_advmet , you , state_enabled ) ;
44920: LD_INT 34
44922: PPUSH
44923: LD_EXP 2
44927: PPUSH
44928: LD_INT 1
44930: PPUSH
44931: CALL_OW 322
// end ; end ;
44935: GO 44938
44937: POP
// end ; base = FindBase ( captured_building ) ;
44938: LD_ADDR_VAR 0 5
44942: PUSH
44943: LD_VAR 0 1
44947: PPUSH
44948: CALL 25073 0 1
44952: ST_TO_ADDR
// if base = 0 then
44953: LD_VAR 0 5
44957: PUSH
44958: LD_INT 0
44960: EQUAL
44961: IFFALSE 44965
// exit ;
44963: GO 45196
// if building_former_side = GetBaseSide ( base ) then
44965: LD_VAR 0 2
44969: PUSH
44970: LD_VAR 0 5
44974: PPUSH
44975: CALL 24885 0 1
44979: EQUAL
44980: IFFALSE 45063
// begin if captured_building in ai_all_buildings [ base ] then
44982: LD_VAR 0 1
44986: PUSH
44987: LD_EXP 76
44991: PUSH
44992: LD_VAR 0 5
44996: ARRAY
44997: IN
44998: IFFALSE 45061
// begin RemoveBuildingFromVariables ( base , captured_building ) ;
45000: LD_VAR 0 5
45004: PPUSH
45005: LD_VAR 0 1
45009: PPUSH
45010: CALL 22335 0 2
// temp_list = ai_captured_buildings [ base ] ^ captured_building ;
45014: LD_ADDR_VAR 0 4
45018: PUSH
45019: LD_EXP 62
45023: PUSH
45024: LD_VAR 0 5
45028: ARRAY
45029: PUSH
45030: LD_VAR 0 1
45034: ADD
45035: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
45036: LD_ADDR_EXP 62
45040: PUSH
45041: LD_EXP 62
45045: PPUSH
45046: LD_VAR 0 5
45050: PPUSH
45051: LD_VAR 0 4
45055: PPUSH
45056: CALL_OW 1
45060: ST_TO_ADDR
// end ; end else
45061: GO 45196
// begin if GetSide ( captured_building ) = GetBaseSide ( base ) then
45063: LD_VAR 0 1
45067: PPUSH
45068: CALL_OW 255
45072: PUSH
45073: LD_VAR 0 5
45077: PPUSH
45078: CALL 24885 0 1
45082: EQUAL
45083: IFFALSE 45196
// begin temp_list = ai_all_buildings [ base ] ^ captured_building ;
45085: LD_ADDR_VAR 0 4
45089: PUSH
45090: LD_EXP 76
45094: PUSH
45095: LD_VAR 0 5
45099: ARRAY
45100: PUSH
45101: LD_VAR 0 1
45105: ADD
45106: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
45107: LD_ADDR_EXP 76
45111: PUSH
45112: LD_EXP 76
45116: PPUSH
45117: LD_VAR 0 5
45121: PPUSH
45122: LD_VAR 0 4
45126: PPUSH
45127: CALL_OW 1
45131: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , captured_building , true ) ;
45132: LD_VAR 0 5
45136: PPUSH
45137: LD_VAR 0 1
45141: PPUSH
45142: LD_INT 1
45144: PPUSH
45145: CALL 7288 0 3
// temp_list = ai_captured_buildings [ base ] diff captured_building ;
45149: LD_ADDR_VAR 0 4
45153: PUSH
45154: LD_EXP 62
45158: PUSH
45159: LD_VAR 0 5
45163: ARRAY
45164: PUSH
45165: LD_VAR 0 1
45169: DIFF
45170: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
45171: LD_ADDR_EXP 62
45175: PUSH
45176: LD_EXP 62
45180: PPUSH
45181: LD_VAR 0 5
45185: PPUSH
45186: LD_VAR 0 4
45190: PPUSH
45191: CALL_OW 1
45195: ST_TO_ADDR
// end ; end ; end ;
45196: PPOPN 6
45198: END
// export function GetHumansOutOfUnits ( un_list ) ; var i ; begin
45199: LD_INT 0
45201: PPUSH
45202: PPUSH
// result = [ ] ;
45203: LD_ADDR_VAR 0 2
45207: PUSH
45208: EMPTY
45209: ST_TO_ADDR
// for i in un_list do
45210: LD_ADDR_VAR 0 3
45214: PUSH
45215: LD_VAR 0 1
45219: PUSH
45220: FOR_IN
45221: IFFALSE 45314
// if IsInUnit ( i ) > 0 then
45223: LD_VAR 0 3
45227: PPUSH
45228: CALL_OW 310
45232: PUSH
45233: LD_INT 0
45235: GREATER
45236: IFFALSE 45296
// case GetType ( IsInUnit ( i ) ) of unit_building :
45238: LD_VAR 0 3
45242: PPUSH
45243: CALL_OW 310
45247: PPUSH
45248: CALL_OW 247
45252: PUSH
45253: LD_INT 3
45255: DOUBLE
45256: EQUAL
45257: IFTRUE 45261
45259: GO 45273
45261: POP
// ComExitBuilding ( i ) ; unit_vehicle :
45262: LD_VAR 0 3
45266: PPUSH
45267: CALL_OW 122
45271: GO 45294
45273: LD_INT 2
45275: DOUBLE
45276: EQUAL
45277: IFTRUE 45281
45279: GO 45293
45281: POP
// ComExitVehicle ( i ) ; end else
45282: LD_VAR 0 3
45286: PPUSH
45287: CALL_OW 121
45291: GO 45294
45293: POP
45294: GO 45312
// result = result ^ i ;
45296: LD_ADDR_VAR 0 2
45300: PUSH
45301: LD_VAR 0 2
45305: PUSH
45306: LD_VAR 0 3
45310: ADD
45311: ST_TO_ADDR
45312: GO 45220
45314: POP
45315: POP
// end ;
45316: LD_VAR 0 2
45320: RET
// export function BaseUnderAttack ( base , attack_side ) ; var area , i , val , def_side , temp_list ; begin
45321: LD_INT 0
45323: PPUSH
45324: PPUSH
45325: PPUSH
45326: PPUSH
45327: PPUSH
45328: PPUSH
// result = false ;
45329: LD_ADDR_VAR 0 3
45333: PUSH
45334: LD_INT 0
45336: ST_TO_ADDR
// def_side = GetBaseSide ( base ) ;
45337: LD_ADDR_VAR 0 7
45341: PUSH
45342: LD_VAR 0 1
45346: PPUSH
45347: CALL 24885 0 1
45351: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
45352: LD_ADDR_VAR 0 4
45356: PUSH
45357: LD_VAR 0 1
45361: PPUSH
45362: CALL 24795 0 1
45366: ST_TO_ADDR
// if attack_side = def_side then
45367: LD_VAR 0 2
45371: PUSH
45372: LD_VAR 0 7
45376: EQUAL
45377: IFFALSE 45381
// exit ;
45379: GO 46048
// if attack_side = - 1 then
45381: LD_VAR 0 2
45385: PUSH
45386: LD_INT 1
45388: NEG
45389: EQUAL
45390: IFFALSE 45741
// begin for i = 1 to 8 do
45392: LD_ADDR_VAR 0 5
45396: PUSH
45397: DOUBLE
45398: LD_INT 1
45400: DEC
45401: ST_TO_ADDR
45402: LD_INT 8
45404: PUSH
45405: FOR_TO
45406: IFFALSE 45475
// 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
45408: LD_EXP 115
45412: PUSH
45413: LD_VAR 0 1
45417: ARRAY
45418: PUSH
45419: LD_VAR 0 5
45423: ARRAY
45424: PUSH
45425: LD_INT 1
45427: NEG
45428: GREATER
45429: PUSH
45430: LD_EXP 115
45434: PUSH
45435: LD_VAR 0 1
45439: ARRAY
45440: PUSH
45441: LD_VAR 0 5
45445: ARRAY
45446: PUSH
45447: LD_EXP 116
45451: PLUS
45452: PUSH
45453: LD_OWVAR 1
45457: GREATEREQUAL
45458: AND
45459: IFFALSE 45473
// begin result = true ;
45461: LD_ADDR_VAR 0 3
45465: PUSH
45466: LD_INT 1
45468: ST_TO_ADDR
// exit ;
45469: POP
45470: POP
45471: GO 46048
// end ;
45473: GO 45405
45475: POP
45476: POP
// if FilterAllUnits ( [ [ f_enemy , def_side ] , [ f_inarea , area ] ] ) > 0 then
45477: LD_INT 81
45479: PUSH
45480: LD_VAR 0 7
45484: PUSH
45485: EMPTY
45486: LIST
45487: LIST
45488: PUSH
45489: LD_INT 95
45491: PUSH
45492: LD_VAR 0 4
45496: PUSH
45497: EMPTY
45498: LIST
45499: LIST
45500: PUSH
45501: EMPTY
45502: LIST
45503: LIST
45504: PPUSH
45505: CALL_OW 69
45509: PUSH
45510: LD_INT 0
45512: GREATER
45513: IFFALSE 45525
// begin result = true ;
45515: LD_ADDR_VAR 0 3
45519: PUSH
45520: LD_INT 1
45522: ST_TO_ADDR
// exit ;
45523: GO 46048
// end ; val = true ;
45525: LD_ADDR_VAR 0 6
45529: PUSH
45530: LD_INT 1
45532: ST_TO_ADDR
// for i in ai_contact_time [ def_side ] do
45533: LD_ADDR_VAR 0 5
45537: PUSH
45538: LD_EXP 112
45542: PUSH
45543: LD_VAR 0 7
45547: ARRAY
45548: PUSH
45549: FOR_IN
45550: IFFALSE 45574
// if i < 0 0$10 then
45552: LD_VAR 0 5
45556: PUSH
45557: LD_INT 350
45559: LESS
45560: IFFALSE 45572
// begin val = false ;
45562: LD_ADDR_VAR 0 6
45566: PUSH
45567: LD_INT 0
45569: ST_TO_ADDR
// break ;
45570: GO 45574
// end ;
45572: GO 45549
45574: POP
45575: POP
// if ContactTime ( def_side ) >= 0 0$10 and val then
45576: LD_VAR 0 7
45580: PPUSH
45581: CALL_OW 462
45585: PUSH
45586: LD_INT 350
45588: GREATEREQUAL
45589: PUSH
45590: LD_VAR 0 6
45594: AND
45595: IFFALSE 45599
// exit ;
45597: GO 46048
// temp_list = [ ] ;
45599: LD_ADDR_VAR 0 8
45603: PUSH
45604: EMPTY
45605: ST_TO_ADDR
// for i in ( ai_bases diff base ) do
45606: LD_ADDR_VAR 0 5
45610: PUSH
45611: LD_EXP 39
45615: PUSH
45616: LD_VAR 0 1
45620: DIFF
45621: PUSH
45622: FOR_IN
45623: IFFALSE 45669
// temp_list = Insert ( temp_list , 1 , [ f_not , [ f_inarea , GetBaseArea ( i ) ] ] ) ;
45625: LD_ADDR_VAR 0 8
45629: PUSH
45630: LD_VAR 0 8
45634: PPUSH
45635: LD_INT 1
45637: PPUSH
45638: LD_INT 3
45640: PUSH
45641: LD_INT 95
45643: PUSH
45644: LD_VAR 0 5
45648: PPUSH
45649: CALL 24795 0 1
45653: PUSH
45654: EMPTY
45655: LIST
45656: LIST
45657: PUSH
45658: EMPTY
45659: LIST
45660: LIST
45661: PPUSH
45662: CALL_OW 2
45666: ST_TO_ADDR
45667: GO 45622
45669: POP
45670: POP
// temp_list = FilterAllUnits ( [ [ f_enemy , def_side ] , [ f_not , [ f_type , unit_building ] ] ] ^ temp_list ) ;
45671: LD_ADDR_VAR 0 8
45675: PUSH
45676: LD_INT 81
45678: PUSH
45679: LD_VAR 0 7
45683: PUSH
45684: EMPTY
45685: LIST
45686: LIST
45687: PUSH
45688: LD_INT 3
45690: PUSH
45691: LD_INT 21
45693: PUSH
45694: LD_INT 3
45696: PUSH
45697: EMPTY
45698: LIST
45699: LIST
45700: PUSH
45701: EMPTY
45702: LIST
45703: LIST
45704: PUSH
45705: EMPTY
45706: LIST
45707: LIST
45708: PUSH
45709: LD_VAR 0 8
45713: ADD
45714: PPUSH
45715: CALL_OW 69
45719: ST_TO_ADDR
// if not AnyNearBaseArea ( temp_list , base ) then
45720: LD_VAR 0 8
45724: PPUSH
45725: LD_VAR 0 1
45729: PPUSH
45730: CALL 46124 0 2
45734: NOT
45735: IFFALSE 45739
// exit ;
45737: GO 46048
// end else
45739: GO 46040
// 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
45741: LD_EXP 115
45745: PUSH
45746: LD_VAR 0 1
45750: ARRAY
45751: PUSH
45752: LD_VAR 0 2
45756: ARRAY
45757: PUSH
45758: LD_INT 1
45760: NEG
45761: GREATER
45762: PUSH
45763: LD_EXP 115
45767: PUSH
45768: LD_VAR 0 1
45772: ARRAY
45773: PUSH
45774: LD_VAR 0 2
45778: ARRAY
45779: PUSH
45780: LD_EXP 116
45784: PLUS
45785: PUSH
45786: LD_OWVAR 1
45790: GREATEREQUAL
45791: AND
45792: IFFALSE 45804
// begin result = true ;
45794: LD_ADDR_VAR 0 3
45798: PUSH
45799: LD_INT 1
45801: ST_TO_ADDR
// exit ;
45802: GO 46048
// end ; if FilterAllUnits ( [ [ f_side , attack_side ] , [ f_inarea , area ] ] ) > 0 then
45804: LD_INT 22
45806: PUSH
45807: LD_VAR 0 2
45811: PUSH
45812: EMPTY
45813: LIST
45814: LIST
45815: PUSH
45816: LD_INT 95
45818: PUSH
45819: LD_VAR 0 4
45823: PUSH
45824: EMPTY
45825: LIST
45826: LIST
45827: PUSH
45828: EMPTY
45829: LIST
45830: LIST
45831: PPUSH
45832: CALL_OW 69
45836: PUSH
45837: LD_INT 0
45839: GREATER
45840: IFFALSE 45852
// begin result = true ;
45842: LD_ADDR_VAR 0 3
45846: PUSH
45847: LD_INT 1
45849: ST_TO_ADDR
// exit ;
45850: GO 46048
// end ; if ContactTime ( [ def_side , attack_side ] ) >= 0 0$10 and ai_contact_time [ def_side ] [ attack_side ] >= 0 0$10 then
45852: LD_VAR 0 7
45856: PUSH
45857: LD_VAR 0 2
45861: PUSH
45862: EMPTY
45863: LIST
45864: LIST
45865: PPUSH
45866: CALL_OW 462
45870: PUSH
45871: LD_INT 350
45873: GREATEREQUAL
45874: PUSH
45875: LD_EXP 112
45879: PUSH
45880: LD_VAR 0 7
45884: ARRAY
45885: PUSH
45886: LD_VAR 0 2
45890: ARRAY
45891: PUSH
45892: LD_INT 350
45894: GREATEREQUAL
45895: AND
45896: IFFALSE 45900
// exit ;
45898: GO 46048
// temp_list = [ ] ;
45900: LD_ADDR_VAR 0 8
45904: PUSH
45905: EMPTY
45906: ST_TO_ADDR
// for i in ( ai_bases diff base ) do
45907: LD_ADDR_VAR 0 5
45911: PUSH
45912: LD_EXP 39
45916: PUSH
45917: LD_VAR 0 1
45921: DIFF
45922: PUSH
45923: FOR_IN
45924: IFFALSE 45970
// temp_list = Insert ( temp_list , 1 , [ f_not , [ f_inarea , GetBaseArea ( i ) ] ] ) ;
45926: LD_ADDR_VAR 0 8
45930: PUSH
45931: LD_VAR 0 8
45935: PPUSH
45936: LD_INT 1
45938: PPUSH
45939: LD_INT 3
45941: PUSH
45942: LD_INT 95
45944: PUSH
45945: LD_VAR 0 5
45949: PPUSH
45950: CALL 24795 0 1
45954: PUSH
45955: EMPTY
45956: LIST
45957: LIST
45958: PUSH
45959: EMPTY
45960: LIST
45961: LIST
45962: PPUSH
45963: CALL_OW 2
45967: ST_TO_ADDR
45968: GO 45923
45970: POP
45971: POP
// temp_list = FilterAllUnits ( [ [ f_side , attack_side ] , [ f_not , [ f_type , unit_building ] ] ] ^ temp_list ) ;
45972: LD_ADDR_VAR 0 8
45976: PUSH
45977: LD_INT 22
45979: PUSH
45980: LD_VAR 0 2
45984: PUSH
45985: EMPTY
45986: LIST
45987: LIST
45988: PUSH
45989: LD_INT 3
45991: PUSH
45992: LD_INT 21
45994: PUSH
45995: LD_INT 3
45997: PUSH
45998: EMPTY
45999: LIST
46000: LIST
46001: PUSH
46002: EMPTY
46003: LIST
46004: LIST
46005: PUSH
46006: EMPTY
46007: LIST
46008: LIST
46009: PUSH
46010: LD_VAR 0 8
46014: ADD
46015: PPUSH
46016: CALL_OW 69
46020: ST_TO_ADDR
// if not AnyNearBaseArea ( temp_list , base ) then
46021: LD_VAR 0 8
46025: PPUSH
46026: LD_VAR 0 1
46030: PPUSH
46031: CALL 46124 0 2
46035: NOT
46036: IFFALSE 46040
// exit ;
46038: GO 46048
// end ; result = true ;
46040: LD_ADDR_VAR 0 3
46044: PUSH
46045: LD_INT 1
46047: ST_TO_ADDR
// end ;
46048: LD_VAR 0 3
46052: RET
// export function ListFilterNearArea ( list , area ) ; var i ; begin
46053: LD_INT 0
46055: PPUSH
46056: PPUSH
// result = [ ] ;
46057: LD_ADDR_VAR 0 3
46061: PUSH
46062: EMPTY
46063: ST_TO_ADDR
// for i in list do
46064: LD_ADDR_VAR 0 4
46068: PUSH
46069: LD_VAR 0 1
46073: PUSH
46074: FOR_IN
46075: IFFALSE 46117
// if GetDistUnitArea ( i , area ) <= ai_near_base_dist then
46077: LD_VAR 0 4
46081: PPUSH
46082: LD_VAR 0 2
46086: PPUSH
46087: CALL_OW 299
46091: PUSH
46092: LD_EXP 82
46096: LESSEQUAL
46097: IFFALSE 46115
// result = result ^ i ;
46099: LD_ADDR_VAR 0 3
46103: PUSH
46104: LD_VAR 0 3
46108: PUSH
46109: LD_VAR 0 4
46113: ADD
46114: ST_TO_ADDR
46115: GO 46074
46117: POP
46118: POP
// end ;
46119: LD_VAR 0 3
46123: RET
// function AnyNearBaseArea ( list , base ) ; var i , area ; begin
46124: LD_INT 0
46126: PPUSH
46127: PPUSH
46128: PPUSH
// result = false ;
46129: LD_ADDR_VAR 0 3
46133: PUSH
46134: LD_INT 0
46136: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
46137: LD_ADDR_VAR 0 5
46141: PUSH
46142: LD_VAR 0 2
46146: PPUSH
46147: CALL 24795 0 1
46151: ST_TO_ADDR
// for i in list do
46152: LD_ADDR_VAR 0 4
46156: PUSH
46157: LD_VAR 0 1
46161: PUSH
46162: FOR_IN
46163: IFFALSE 46199
// if GetDistUnitArea ( i , area ) <= ai_near_base_dist then
46165: LD_VAR 0 4
46169: PPUSH
46170: LD_VAR 0 5
46174: PPUSH
46175: CALL_OW 299
46179: PUSH
46180: LD_EXP 82
46184: LESSEQUAL
46185: IFFALSE 46197
// begin result = true ;
46187: LD_ADDR_VAR 0 3
46191: PUSH
46192: LD_INT 1
46194: ST_TO_ADDR
// break ;
46195: GO 46199
// end ;
46197: GO 46162
46199: POP
46200: POP
// end ;
46201: LD_VAR 0 3
46205: RET
// on Command ( com ) do var i , temp_list , hex_list , un , k , target_hex ;
46206: LD_INT 0
46208: PPUSH
46209: PPUSH
46210: PPUSH
46211: PPUSH
46212: PPUSH
46213: PPUSH
// begin OnCommand_Steal ( com ) ;
46214: LD_VAR 0 1
46218: PPUSH
46219: CALL 98492 0 1
// OnCommand_CrateDropDetection ( com ) ;
46223: LD_VAR 0 1
46227: PPUSH
46228: CALL 16374 0 1
// if com = 124 then
46232: LD_VAR 0 1
46236: PUSH
46237: LD_INT 124
46239: EQUAL
46240: IFFALSE 46651
// begin for i in FilterAllUnits ( [ f_side , you ] ) do
46242: LD_ADDR_VAR 0 2
46246: PUSH
46247: LD_INT 22
46249: PUSH
46250: LD_EXP 2
46254: PUSH
46255: EMPTY
46256: LIST
46257: LIST
46258: PPUSH
46259: CALL_OW 69
46263: PUSH
46264: FOR_IN
46265: IFFALSE 46649
// if IsSelected ( i ) and HasTask ( i ) then
46267: LD_VAR 0 2
46271: PPUSH
46272: CALL_OW 306
46276: PUSH
46277: LD_VAR 0 2
46281: PPUSH
46282: CALL_OW 314
46286: AND
46287: IFFALSE 46647
// begin target_hex = [ ] ;
46289: LD_ADDR_VAR 0 7
46293: PUSH
46294: EMPTY
46295: ST_TO_ADDR
// for k in GetTaskList ( i ) do
46296: LD_ADDR_VAR 0 6
46300: PUSH
46301: LD_VAR 0 2
46305: PPUSH
46306: CALL_OW 437
46310: PUSH
46311: FOR_IN
46312: IFFALSE 46359
// if k [ 1 ] = | then
46314: LD_VAR 0 6
46318: PUSH
46319: LD_INT 1
46321: ARRAY
46322: PUSH
46323: LD_STRING |
46325: EQUAL
46326: IFFALSE 46357
// begin target_hex = [ k [ 2 ] , k [ 3 ] ] ;
46328: LD_ADDR_VAR 0 7
46332: PUSH
46333: LD_VAR 0 6
46337: PUSH
46338: LD_INT 2
46340: ARRAY
46341: PUSH
46342: LD_VAR 0 6
46346: PUSH
46347: LD_INT 3
46349: ARRAY
46350: PUSH
46351: EMPTY
46352: LIST
46353: LIST
46354: ST_TO_ADDR
// break ;
46355: GO 46359
// end ;
46357: GO 46311
46359: POP
46360: POP
// if target_hex > 0 then
46361: LD_VAR 0 7
46365: PUSH
46366: LD_INT 0
46368: GREATER
46369: IFFALSE 46647
// begin hex_list = target_hex ;
46371: LD_ADDR_VAR 0 4
46375: PUSH
46376: LD_VAR 0 7
46380: ST_TO_ADDR
// temp_list = [ ] ;
46381: LD_ADDR_VAR 0 3
46385: PUSH
46386: EMPTY
46387: ST_TO_ADDR
// for k = 0 to 5 do
46388: LD_ADDR_VAR 0 6
46392: PUSH
46393: DOUBLE
46394: LD_INT 0
46396: DEC
46397: ST_TO_ADDR
46398: LD_INT 5
46400: PUSH
46401: FOR_TO
46402: IFFALSE 46472
// temp_list = Insert ( temp_list , 1 , [ ShiftX ( hex_list [ 1 ] , k , 1 ) , ShiftY ( hex_list [ 2 ] , k , 1 ) ] ) ;
46404: LD_ADDR_VAR 0 3
46408: PUSH
46409: LD_VAR 0 3
46413: PPUSH
46414: LD_INT 1
46416: PPUSH
46417: LD_VAR 0 4
46421: PUSH
46422: LD_INT 1
46424: ARRAY
46425: PPUSH
46426: LD_VAR 0 6
46430: PPUSH
46431: LD_INT 1
46433: PPUSH
46434: CALL_OW 272
46438: PUSH
46439: LD_VAR 0 4
46443: PUSH
46444: LD_INT 2
46446: ARRAY
46447: PPUSH
46448: LD_VAR 0 6
46452: PPUSH
46453: LD_INT 1
46455: PPUSH
46456: CALL_OW 273
46460: PUSH
46461: EMPTY
46462: LIST
46463: LIST
46464: PPUSH
46465: CALL_OW 2
46469: ST_TO_ADDR
46470: GO 46401
46472: POP
46473: POP
// hex_list = [ hex_list ] ^ temp_list ;
46474: LD_ADDR_VAR 0 4
46478: PUSH
46479: LD_VAR 0 4
46483: PUSH
46484: EMPTY
46485: LIST
46486: PUSH
46487: LD_VAR 0 3
46491: ADD
46492: ST_TO_ADDR
// temp_list = [ ] ;
46493: LD_ADDR_VAR 0 3
46497: PUSH
46498: EMPTY
46499: ST_TO_ADDR
// for k in hex_list do
46500: LD_ADDR_VAR 0 6
46504: PUSH
46505: LD_VAR 0 4
46509: PUSH
46510: FOR_IN
46511: IFFALSE 46645
// begin un = HexInfo ( k [ 1 ] , k [ 2 ] ) ;
46513: LD_ADDR_VAR 0 5
46517: PUSH
46518: LD_VAR 0 6
46522: PUSH
46523: LD_INT 1
46525: ARRAY
46526: PPUSH
46527: LD_VAR 0 6
46531: PUSH
46532: LD_INT 2
46534: ARRAY
46535: PPUSH
46536: CALL_OW 428
46540: ST_TO_ADDR
// if un > 0 and not un in temp_list then
46541: LD_VAR 0 5
46545: PUSH
46546: LD_INT 0
46548: GREATER
46549: PUSH
46550: LD_VAR 0 5
46554: PUSH
46555: LD_VAR 0 3
46559: IN
46560: NOT
46561: AND
46562: IFFALSE 46643
// begin ai_attack_ground_info_initial = Insert ( ai_attack_ground_info_initial , 1 , [ i , un , GetSide ( un ) , target_hex [ 1 ] , target_hex [ 2 ] ] ) ;
46564: LD_ADDR_EXP 113
46568: PUSH
46569: LD_EXP 113
46573: PPUSH
46574: LD_INT 1
46576: PPUSH
46577: LD_VAR 0 2
46581: PUSH
46582: LD_VAR 0 5
46586: PUSH
46587: LD_VAR 0 5
46591: PPUSH
46592: CALL_OW 255
46596: PUSH
46597: LD_VAR 0 7
46601: PUSH
46602: LD_INT 1
46604: ARRAY
46605: PUSH
46606: LD_VAR 0 7
46610: PUSH
46611: LD_INT 2
46613: ARRAY
46614: PUSH
46615: EMPTY
46616: LIST
46617: LIST
46618: LIST
46619: LIST
46620: LIST
46621: PPUSH
46622: CALL_OW 2
46626: ST_TO_ADDR
// temp_list = temp_list ^ un ;
46627: LD_ADDR_VAR 0 3
46631: PUSH
46632: LD_VAR 0 3
46636: PUSH
46637: LD_VAR 0 5
46641: ADD
46642: ST_TO_ADDR
// end ; end ;
46643: GO 46510
46645: POP
46646: POP
// end ; end ;
46647: GO 46264
46649: POP
46650: POP
// end ; end ;
46651: PPOPN 7
46653: END
// every 0 0$1 + 0 0$0.1 do var a , b , temp_list , temp_list_2 , yup , i , t ;
46654: GO 46656
46656: DISABLE
46657: LD_INT 0
46659: PPUSH
46660: PPUSH
46661: PPUSH
46662: PPUSH
46663: PPUSH
46664: PPUSH
46665: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
46666: LD_INT 18
46668: PPUSH
46669: CALL_OW 67
// i = 1 ;
46673: LD_ADDR_VAR 0 6
46677: PUSH
46678: LD_INT 1
46680: ST_TO_ADDR
// while i <= ai_attack_ground_info_initial do
46681: LD_VAR 0 6
46685: PUSH
46686: LD_EXP 113
46690: LESSEQUAL
46691: IFFALSE 46854
// begin yup = false ;
46693: LD_ADDR_VAR 0 5
46697: PUSH
46698: LD_INT 0
46700: ST_TO_ADDR
// for t in GetTaskList ( ai_attack_ground_info_initial [ i ] [ 1 ] ) do
46701: LD_ADDR_VAR 0 7
46705: PUSH
46706: LD_EXP 113
46710: PUSH
46711: LD_VAR 0 6
46715: ARRAY
46716: PUSH
46717: LD_INT 1
46719: ARRAY
46720: PPUSH
46721: CALL_OW 437
46725: PUSH
46726: FOR_IN
46727: IFFALSE 46807
// if t [ 1 ] = | then
46729: LD_VAR 0 7
46733: PUSH
46734: LD_INT 1
46736: ARRAY
46737: PUSH
46738: LD_STRING |
46740: EQUAL
46741: IFFALSE 46805
// if t [ 2 ] = ai_attack_ground_info_initial [ i ] [ 4 ] and t [ 3 ] = ai_attack_ground_info_initial [ i ] [ 5 ] then
46743: LD_VAR 0 7
46747: PUSH
46748: LD_INT 2
46750: ARRAY
46751: PUSH
46752: LD_EXP 113
46756: PUSH
46757: LD_VAR 0 6
46761: ARRAY
46762: PUSH
46763: LD_INT 4
46765: ARRAY
46766: EQUAL
46767: PUSH
46768: LD_VAR 0 7
46772: PUSH
46773: LD_INT 3
46775: ARRAY
46776: PUSH
46777: LD_EXP 113
46781: PUSH
46782: LD_VAR 0 6
46786: ARRAY
46787: PUSH
46788: LD_INT 5
46790: ARRAY
46791: EQUAL
46792: AND
46793: IFFALSE 46805
// begin yup = true ;
46795: LD_ADDR_VAR 0 5
46799: PUSH
46800: LD_INT 1
46802: ST_TO_ADDR
// break ;
46803: GO 46807
// end ;
46805: GO 46726
46807: POP
46808: POP
// if not yup then
46809: LD_VAR 0 5
46813: NOT
46814: IFFALSE 46838
// begin ai_attack_ground_info_initial = Delete ( ai_attack_ground_info_initial , i ) ;
46816: LD_ADDR_EXP 113
46820: PUSH
46821: LD_EXP 113
46825: PPUSH
46826: LD_VAR 0 6
46830: PPUSH
46831: CALL_OW 3
46835: ST_TO_ADDR
// continue ;
46836: GO 46681
// end ; i = i + 1 ;
46838: LD_ADDR_VAR 0 6
46842: PUSH
46843: LD_VAR 0 6
46847: PUSH
46848: LD_INT 1
46850: PLUS
46851: ST_TO_ADDR
// end ;
46852: GO 46681
// i = 1 ;
46854: LD_ADDR_VAR 0 6
46858: PUSH
46859: LD_INT 1
46861: ST_TO_ADDR
// while i <= ai_attack_ground_info_sustain do
46862: LD_VAR 0 6
46866: PUSH
46867: LD_EXP 114
46871: LESSEQUAL
46872: IFFALSE 47035
// begin yup = false ;
46874: LD_ADDR_VAR 0 5
46878: PUSH
46879: LD_INT 0
46881: ST_TO_ADDR
// for t in GetTaskList ( ai_attack_ground_info_sustain [ i ] [ 1 ] ) do
46882: LD_ADDR_VAR 0 7
46886: PUSH
46887: LD_EXP 114
46891: PUSH
46892: LD_VAR 0 6
46896: ARRAY
46897: PUSH
46898: LD_INT 1
46900: ARRAY
46901: PPUSH
46902: CALL_OW 437
46906: PUSH
46907: FOR_IN
46908: IFFALSE 46988
// if t [ 1 ] = | then
46910: LD_VAR 0 7
46914: PUSH
46915: LD_INT 1
46917: ARRAY
46918: PUSH
46919: LD_STRING |
46921: EQUAL
46922: IFFALSE 46986
// if t [ 2 ] = ai_attack_ground_info_sustain [ i ] [ 4 ] and t [ 3 ] = ai_attack_ground_info_sustain [ i ] [ 5 ] then
46924: LD_VAR 0 7
46928: PUSH
46929: LD_INT 2
46931: ARRAY
46932: PUSH
46933: LD_EXP 114
46937: PUSH
46938: LD_VAR 0 6
46942: ARRAY
46943: PUSH
46944: LD_INT 4
46946: ARRAY
46947: EQUAL
46948: PUSH
46949: LD_VAR 0 7
46953: PUSH
46954: LD_INT 3
46956: ARRAY
46957: PUSH
46958: LD_EXP 114
46962: PUSH
46963: LD_VAR 0 6
46967: ARRAY
46968: PUSH
46969: LD_INT 5
46971: ARRAY
46972: EQUAL
46973: AND
46974: IFFALSE 46986
// begin yup = true ;
46976: LD_ADDR_VAR 0 5
46980: PUSH
46981: LD_INT 1
46983: ST_TO_ADDR
// break ;
46984: GO 46988
// end ;
46986: GO 46907
46988: POP
46989: POP
// if not yup then
46990: LD_VAR 0 5
46994: NOT
46995: IFFALSE 47019
// begin ai_attack_ground_info_sustain = Delete ( ai_attack_ground_info_sustain , i ) ;
46997: LD_ADDR_EXP 114
47001: PUSH
47002: LD_EXP 114
47006: PPUSH
47007: LD_VAR 0 6
47011: PPUSH
47012: CALL_OW 3
47016: ST_TO_ADDR
// continue ;
47017: GO 46862
// end ; i = i + 1 ;
47019: LD_ADDR_VAR 0 6
47023: PUSH
47024: LD_VAR 0 6
47028: PUSH
47029: LD_INT 1
47031: PLUS
47032: ST_TO_ADDR
// end ;
47033: GO 46862
// temp_list = ai_contact_time ;
47035: LD_ADDR_VAR 0 3
47039: PUSH
47040: LD_EXP 112
47044: ST_TO_ADDR
// for a = 1 to temp_list do
47045: LD_ADDR_VAR 0 1
47049: PUSH
47050: DOUBLE
47051: LD_INT 1
47053: DEC
47054: ST_TO_ADDR
47055: LD_VAR 0 3
47059: PUSH
47060: FOR_TO
47061: IFFALSE 47187
// for b = 1 to temp_list [ a ] do
47063: LD_ADDR_VAR 0 2
47067: PUSH
47068: DOUBLE
47069: LD_INT 1
47071: DEC
47072: ST_TO_ADDR
47073: LD_VAR 0 3
47077: PUSH
47078: LD_VAR 0 1
47082: ARRAY
47083: PUSH
47084: FOR_TO
47085: IFFALSE 47183
// if temp_list [ a ] [ b ] < 100000 then
47087: LD_VAR 0 3
47091: PUSH
47092: LD_VAR 0 1
47096: ARRAY
47097: PUSH
47098: LD_VAR 0 2
47102: ARRAY
47103: PUSH
47104: LD_INT 100000
47106: LESS
47107: IFFALSE 47181
// begin temp_list_2 = Replace ( ai_contact_time [ a ] , b , temp_list [ a ] [ b ] + 0 0$0.5 ) ;
47109: LD_ADDR_VAR 0 4
47113: PUSH
47114: LD_EXP 112
47118: PUSH
47119: LD_VAR 0 1
47123: ARRAY
47124: PPUSH
47125: LD_VAR 0 2
47129: PPUSH
47130: LD_VAR 0 3
47134: PUSH
47135: LD_VAR 0 1
47139: ARRAY
47140: PUSH
47141: LD_VAR 0 2
47145: ARRAY
47146: PUSH
47147: LD_INT 18
47149: PLUS
47150: PPUSH
47151: CALL_OW 1
47155: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a , temp_list_2 ) ;
47156: LD_ADDR_EXP 112
47160: PUSH
47161: LD_EXP 112
47165: PPUSH
47166: LD_VAR 0 1
47170: PPUSH
47171: LD_VAR 0 4
47175: PPUSH
47176: CALL_OW 1
47180: ST_TO_ADDR
// end ;
47181: GO 47084
47183: POP
47184: POP
47185: GO 47060
47187: POP
47188: POP
// for a in ai_attack_ground_info_initial do
47189: LD_ADDR_VAR 0 1
47193: PUSH
47194: LD_EXP 113
47198: PUSH
47199: FOR_IN
47200: IFFALSE 47406
// begin if IsDead ( a [ 2 ] ) or UnitShoot ( a [ 2 ] ) = a [ 1 ] then
47202: LD_VAR 0 1
47206: PUSH
47207: LD_INT 2
47209: ARRAY
47210: PPUSH
47211: CALL_OW 301
47215: PUSH
47216: LD_VAR 0 1
47220: PUSH
47221: LD_INT 2
47223: ARRAY
47224: PPUSH
47225: CALL_OW 504
47229: PUSH
47230: LD_VAR 0 1
47234: PUSH
47235: LD_INT 1
47237: ARRAY
47238: EQUAL
47239: OR
47240: IFFALSE 47404
// begin temp_list = Replace ( ai_contact_time [ you ] , a [ 3 ] , 0 ) ;
47242: LD_ADDR_VAR 0 3
47246: PUSH
47247: LD_EXP 112
47251: PUSH
47252: LD_EXP 2
47256: ARRAY
47257: PPUSH
47258: LD_VAR 0 1
47262: PUSH
47263: LD_INT 3
47265: ARRAY
47266: PPUSH
47267: LD_INT 0
47269: PPUSH
47270: CALL_OW 1
47274: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , you , temp_list ) ;
47275: LD_ADDR_EXP 112
47279: PUSH
47280: LD_EXP 112
47284: PPUSH
47285: LD_EXP 2
47289: PPUSH
47290: LD_VAR 0 3
47294: PPUSH
47295: CALL_OW 1
47299: ST_TO_ADDR
// temp_list = Replace ( ai_contact_time [ a [ 3 ] ] , you , 0 ) ;
47300: LD_ADDR_VAR 0 3
47304: PUSH
47305: LD_EXP 112
47309: PUSH
47310: LD_VAR 0 1
47314: PUSH
47315: LD_INT 3
47317: ARRAY
47318: ARRAY
47319: PPUSH
47320: LD_EXP 2
47324: PPUSH
47325: LD_INT 0
47327: PPUSH
47328: CALL_OW 1
47332: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a [ 3 ] , temp_list ) ;
47333: LD_ADDR_EXP 112
47337: PUSH
47338: LD_EXP 112
47342: PPUSH
47343: LD_VAR 0 1
47347: PUSH
47348: LD_INT 3
47350: ARRAY
47351: PPUSH
47352: LD_VAR 0 3
47356: PPUSH
47357: CALL_OW 1
47361: ST_TO_ADDR
// ai_attack_ground_info_initial = ai_attack_ground_info_initial diff [ a ] ;
47362: LD_ADDR_EXP 113
47366: PUSH
47367: LD_EXP 113
47371: PUSH
47372: LD_VAR 0 1
47376: PUSH
47377: EMPTY
47378: LIST
47379: DIFF
47380: ST_TO_ADDR
// ai_attack_ground_info_sustain = Insert ( ai_attack_ground_info_sustain , 1 , a ) ;
47381: LD_ADDR_EXP 114
47385: PUSH
47386: LD_EXP 114
47390: PPUSH
47391: LD_INT 1
47393: PPUSH
47394: LD_VAR 0 1
47398: PPUSH
47399: CALL_OW 2
47403: ST_TO_ADDR
// end ; end ;
47404: GO 47199
47406: POP
47407: POP
// for a in ai_attack_ground_info_sustain do
47408: LD_ADDR_VAR 0 1
47412: PUSH
47413: LD_EXP 114
47417: PUSH
47418: FOR_IN
47419: IFFALSE 47543
// begin temp_list = Replace ( ai_contact_time [ you ] , a [ 3 ] , 0 ) ;
47421: LD_ADDR_VAR 0 3
47425: PUSH
47426: LD_EXP 112
47430: PUSH
47431: LD_EXP 2
47435: ARRAY
47436: PPUSH
47437: LD_VAR 0 1
47441: PUSH
47442: LD_INT 3
47444: ARRAY
47445: PPUSH
47446: LD_INT 0
47448: PPUSH
47449: CALL_OW 1
47453: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , you , temp_list ) ;
47454: LD_ADDR_EXP 112
47458: PUSH
47459: LD_EXP 112
47463: PPUSH
47464: LD_EXP 2
47468: PPUSH
47469: LD_VAR 0 3
47473: PPUSH
47474: CALL_OW 1
47478: ST_TO_ADDR
// temp_list = Replace ( ai_contact_time [ a [ 3 ] ] , you , 0 ) ;
47479: LD_ADDR_VAR 0 3
47483: PUSH
47484: LD_EXP 112
47488: PUSH
47489: LD_VAR 0 1
47493: PUSH
47494: LD_INT 3
47496: ARRAY
47497: ARRAY
47498: PPUSH
47499: LD_EXP 2
47503: PPUSH
47504: LD_INT 0
47506: PPUSH
47507: CALL_OW 1
47511: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a [ 3 ] , temp_list ) ;
47512: LD_ADDR_EXP 112
47516: PUSH
47517: LD_EXP 112
47521: PPUSH
47522: LD_VAR 0 1
47526: PUSH
47527: LD_INT 3
47529: ARRAY
47530: PPUSH
47531: LD_VAR 0 3
47535: PPUSH
47536: CALL_OW 1
47540: ST_TO_ADDR
// end ;
47541: GO 47418
47543: POP
47544: POP
// until false ;
47545: LD_INT 0
47547: IFFALSE 46666
// end ;
47549: PPOPN 7
47551: END
// on SiberiteRocketExploded ( vehicle , x , y ) do var side , base , i , temp_list ;
47552: LD_INT 0
47554: PPUSH
47555: PPUSH
47556: PPUSH
47557: PPUSH
// begin if InArea ( x , y , south_motherlode_area ) or InArea ( x , y , Ru_base ) then
47558: LD_VAR 0 2
47562: PPUSH
47563: LD_VAR 0 3
47567: PPUSH
47568: LD_INT 16
47570: PPUSH
47571: CALL_OW 309
47575: PUSH
47576: LD_VAR 0 2
47580: PPUSH
47581: LD_VAR 0 3
47585: PPUSH
47586: LD_INT 2
47588: PPUSH
47589: CALL_OW 309
47593: OR
47594: IFFALSE 47614
// begin ExclusiveOn ;
47596: CALL_OW 4
// wait ( 0 0$4 ) ;
47600: LD_INT 140
47602: PPUSH
47603: CALL_OW 67
// YouLost ( SibChain ) ;
47607: LD_STRING SibChain
47609: PPUSH
47610: CALL_OW 104
// end ; if IsDead ( vehicle ) then
47614: LD_VAR 0 1
47618: PPUSH
47619: CALL_OW 301
47623: IFFALSE 47627
// exit ;
47625: GO 47795
// side = GetSide ( vehicle ) ;
47627: LD_ADDR_VAR 0 4
47631: PUSH
47632: LD_VAR 0 1
47636: PPUSH
47637: CALL_OW 255
47641: ST_TO_ADDR
// if side = you then
47642: LD_VAR 0 4
47646: PUSH
47647: LD_EXP 2
47651: EQUAL
47652: IFFALSE 47662
// player_fired_siberite_bomb = true ;
47654: LD_ADDR_EXP 149
47658: PUSH
47659: LD_INT 1
47661: ST_TO_ADDR
// base = - 1 ;
47662: LD_ADDR_VAR 0 5
47666: PUSH
47667: LD_INT 1
47669: NEG
47670: ST_TO_ADDR
// for i in ai_bases do
47671: LD_ADDR_VAR 0 6
47675: PUSH
47676: LD_EXP 39
47680: PUSH
47681: FOR_IN
47682: IFFALSE 47724
// if InArea ( x , y , GetBaseArea ( i ) ) then
47684: LD_VAR 0 2
47688: PPUSH
47689: LD_VAR 0 3
47693: PPUSH
47694: LD_VAR 0 6
47698: PPUSH
47699: CALL 24795 0 1
47703: PPUSH
47704: CALL_OW 309
47708: IFFALSE 47722
// begin base = i ;
47710: LD_ADDR_VAR 0 5
47714: PUSH
47715: LD_VAR 0 6
47719: ST_TO_ADDR
// break ;
47720: GO 47724
// end ;
47722: GO 47681
47724: POP
47725: POP
// if base = - 1 then
47726: LD_VAR 0 5
47730: PUSH
47731: LD_INT 1
47733: NEG
47734: EQUAL
47735: IFFALSE 47739
// exit ;
47737: GO 47795
// temp_list = Replace ( ai_sib_bomb_used_time_matrix [ base ] , side , tick ) ;
47739: LD_ADDR_VAR 0 7
47743: PUSH
47744: LD_EXP 115
47748: PUSH
47749: LD_VAR 0 5
47753: ARRAY
47754: PPUSH
47755: LD_VAR 0 4
47759: PPUSH
47760: LD_OWVAR 1
47764: PPUSH
47765: CALL_OW 1
47769: ST_TO_ADDR
// ai_sib_bomb_used_time_matrix = Replace ( ai_sib_bomb_used_time_matrix , base , temp_list ) ;
47770: LD_ADDR_EXP 115
47774: PUSH
47775: LD_EXP 115
47779: PPUSH
47780: LD_VAR 0 5
47784: PPUSH
47785: LD_VAR 0 7
47789: PPUSH
47790: CALL_OW 1
47794: ST_TO_ADDR
// end ;
47795: PPOPN 7
47797: 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 ;
47798: GO 47800
47800: DISABLE
47801: LD_INT 0
47803: PPUSH
47804: PPUSH
47805: PPUSH
47806: PPUSH
47807: PPUSH
47808: PPUSH
47809: PPUSH
47810: PPUSH
47811: PPUSH
47812: PPUSH
47813: PPUSH
47814: PPUSH
47815: PPUSH
47816: PPUSH
47817: PPUSH
47818: PPUSH
47819: PPUSH
47820: PPUSH
47821: PPUSH
47822: PPUSH
47823: PPUSH
47824: PPUSH
47825: PPUSH
47826: PPUSH
47827: PPUSH
47828: PPUSH
47829: PPUSH
47830: PPUSH
47831: PPUSH
47832: PPUSH
// begin vehicles_drivers = [ ] ;
47833: LD_ADDR_VAR 0 29
47837: PUSH
47838: EMPTY
47839: ST_TO_ADDR
// remote_driver_vehicles = [ [ ] , [ ] , [ ] , [ ] ] ;
47840: LD_ADDR_VAR 0 30
47844: PUSH
47845: EMPTY
47846: PUSH
47847: EMPTY
47848: PUSH
47849: EMPTY
47850: PUSH
47851: EMPTY
47852: PUSH
47853: EMPTY
47854: LIST
47855: LIST
47856: LIST
47857: LIST
47858: ST_TO_ADDR
// repeat if ai_bases = 0 then
47859: LD_EXP 39
47863: PUSH
47864: LD_INT 0
47866: EQUAL
47867: IFFALSE 47871
// exit ;
47869: GO 57335
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
47871: LD_INT 35
47873: PUSH
47874: LD_EXP 39
47878: PUSH
47879: LD_INT 0
47881: PLUS
47882: MOD
47883: PPUSH
47884: CALL_OW 67
// for base in ai_bases do
47888: LD_ADDR_VAR 0 12
47892: PUSH
47893: LD_EXP 39
47897: PUSH
47898: FOR_IN
47899: IFFALSE 57329
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
47901: LD_INT 35
47903: PUSH
47904: LD_EXP 39
47908: PUSH
47909: LD_INT 0
47911: PLUS
47912: DIV
47913: PPUSH
47914: CALL_OW 67
// side = GetBaseSide ( base ) ;
47918: LD_ADDR_VAR 0 1
47922: PUSH
47923: LD_VAR 0 12
47927: PPUSH
47928: CALL 24885 0 1
47932: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
47933: LD_ADDR_VAR 0 13
47937: PUSH
47938: LD_VAR 0 12
47942: PPUSH
47943: CALL 24795 0 1
47947: ST_TO_ADDR
// under_attack = BaseUnderAttack ( base , - 1 ) ;
47948: LD_ADDR_VAR 0 9
47952: PUSH
47953: LD_VAR 0 12
47957: PPUSH
47958: LD_INT 1
47960: NEG
47961: PPUSH
47962: CALL 45321 0 2
47966: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] do
47967: LD_ADDR_VAR 0 2
47971: PUSH
47972: LD_EXP 67
47976: PUSH
47977: LD_VAR 0 12
47981: ARRAY
47982: PUSH
47983: LD_EXP 100
47987: PUSH
47988: LD_VAR 0 12
47992: ARRAY
47993: ADD
47994: PUSH
47995: LD_EXP 101
47999: PUSH
48000: LD_VAR 0 12
48004: ARRAY
48005: ADD
48006: PUSH
48007: FOR_IN
48008: IFFALSE 48103
// if vehicles_drivers >= i then
48010: LD_VAR 0 29
48014: PUSH
48015: LD_VAR 0 2
48019: GREATEREQUAL
48020: IFFALSE 48101
// if vehicles_drivers [ i ] > 0 then
48022: LD_VAR 0 29
48026: PUSH
48027: LD_VAR 0 2
48031: ARRAY
48032: PUSH
48033: LD_INT 0
48035: GREATER
48036: IFFALSE 48101
// if IsInUnit ( vehicles_drivers [ i ] ) = i or IsDead ( vehicles_drivers [ i ] ) then
48038: LD_VAR 0 29
48042: PUSH
48043: LD_VAR 0 2
48047: ARRAY
48048: PPUSH
48049: CALL_OW 310
48053: PUSH
48054: LD_VAR 0 2
48058: EQUAL
48059: PUSH
48060: LD_VAR 0 29
48064: PUSH
48065: LD_VAR 0 2
48069: ARRAY
48070: PPUSH
48071: CALL_OW 301
48075: OR
48076: IFFALSE 48101
// vehicles_drivers = Replace ( vehicles_drivers , i , 0 ) ;
48078: LD_ADDR_VAR 0 29
48082: PUSH
48083: LD_VAR 0 29
48087: PPUSH
48088: LD_VAR 0 2
48092: PPUSH
48093: LD_INT 0
48095: PPUSH
48096: CALL_OW 1
48100: ST_TO_ADDR
48101: GO 48007
48103: POP
48104: 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
48105: LD_EXP 88
48109: PUSH
48110: LD_VAR 0 12
48114: ARRAY
48115: PUSH
48116: LD_INT 0
48118: GREATER
48119: PUSH
48120: LD_EXP 88
48124: PUSH
48125: LD_VAR 0 12
48129: ARRAY
48130: PPUSH
48131: CALL_OW 263
48135: PUSH
48136: LD_INT 1
48138: EQUAL
48139: AND
48140: PUSH
48141: LD_EXP 92
48145: PUSH
48146: LD_VAR 0 12
48150: ARRAY
48151: PUSH
48152: LD_INT 0
48154: EQUAL
48155: AND
48156: PUSH
48157: LD_EXP 43
48161: PUSH
48162: LD_VAR 0 12
48166: ARRAY
48167: PUSH
48168: LD_INT 0
48170: GREATER
48171: AND
48172: IFFALSE 48323
// begin ai_crane_driver = Replace ( ai_crane_driver , base , FindBestCraneDriver ( base ) ) ;
48174: LD_ADDR_EXP 92
48178: PUSH
48179: LD_EXP 92
48183: PPUSH
48184: LD_VAR 0 12
48188: PPUSH
48189: LD_VAR 0 12
48193: PPUSH
48194: CALL 57661 0 1
48198: PPUSH
48199: CALL_OW 1
48203: ST_TO_ADDR
// for i = 1 to remote_driver_vehicles [ base ] + 0 do
48204: LD_ADDR_VAR 0 2
48208: PUSH
48209: DOUBLE
48210: LD_INT 1
48212: DEC
48213: ST_TO_ADDR
48214: LD_VAR 0 30
48218: PUSH
48219: LD_VAR 0 12
48223: ARRAY
48224: PUSH
48225: LD_INT 0
48227: PLUS
48228: PUSH
48229: FOR_TO
48230: IFFALSE 48321
// if remote_driver_vehicles [ base ] [ i ] [ 1 ] = ai_crane_driver [ base ] then
48232: LD_VAR 0 30
48236: PUSH
48237: LD_VAR 0 12
48241: ARRAY
48242: PUSH
48243: LD_VAR 0 2
48247: ARRAY
48248: PUSH
48249: LD_INT 1
48251: ARRAY
48252: PUSH
48253: LD_EXP 92
48257: PUSH
48258: LD_VAR 0 12
48262: ARRAY
48263: EQUAL
48264: IFFALSE 48319
// begin temp_list = Delete ( remote_driver_vehicles [ base ] , i ) ;
48266: LD_ADDR_VAR 0 4
48270: PUSH
48271: LD_VAR 0 30
48275: PUSH
48276: LD_VAR 0 12
48280: ARRAY
48281: PPUSH
48282: LD_VAR 0 2
48286: PPUSH
48287: CALL_OW 3
48291: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list ) ;
48292: LD_ADDR_VAR 0 30
48296: PUSH
48297: LD_VAR 0 30
48301: PPUSH
48302: LD_VAR 0 12
48306: PPUSH
48307: LD_VAR 0 4
48311: PPUSH
48312: CALL_OW 1
48316: ST_TO_ADDR
// break ;
48317: GO 48321
// end ;
48319: GO 48229
48321: POP
48322: POP
// end ; mechanics_list = UnitFilter ( ai_mechanics_defend [ base ] diff ( ai_heal_these_humans [ base ] ^ ai_crane_driver [ base ] ) , [ f_not , [ f_driving ] ] ) ;
48323: LD_ADDR_VAR 0 3
48327: PUSH
48328: LD_EXP 43
48332: PUSH
48333: LD_VAR 0 12
48337: ARRAY
48338: PUSH
48339: LD_EXP 75
48343: PUSH
48344: LD_VAR 0 12
48348: ARRAY
48349: PUSH
48350: LD_EXP 92
48354: PUSH
48355: LD_VAR 0 12
48359: ARRAY
48360: ADD
48361: DIFF
48362: PPUSH
48363: LD_INT 3
48365: PUSH
48366: LD_INT 55
48368: PUSH
48369: EMPTY
48370: LIST
48371: PUSH
48372: EMPTY
48373: LIST
48374: LIST
48375: PPUSH
48376: CALL_OW 72
48380: ST_TO_ADDR
// if ai_crane_driver [ base ] > 0 and not IsOk ( ai_crane [ base ] ) then
48381: LD_EXP 92
48385: PUSH
48386: LD_VAR 0 12
48390: ARRAY
48391: PUSH
48392: LD_INT 0
48394: GREATER
48395: PUSH
48396: LD_EXP 88
48400: PUSH
48401: LD_VAR 0 12
48405: ARRAY
48406: PPUSH
48407: CALL_OW 302
48411: NOT
48412: AND
48413: IFFALSE 48437
// mechanics_list = mechanics_list ^ ai_crane_driver [ base ] ;
48415: LD_ADDR_VAR 0 3
48419: PUSH
48420: LD_VAR 0 3
48424: PUSH
48425: LD_EXP 92
48429: PUSH
48430: LD_VAR 0 12
48434: ARRAY
48435: ADD
48436: ST_TO_ADDR
// remote_mechanics = [ ] ;
48437: LD_ADDR_VAR 0 15
48441: PUSH
48442: EMPTY
48443: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
48444: LD_ADDR_VAR 0 4
48448: PUSH
48449: LD_EXP 75
48453: PUSH
48454: LD_VAR 0 12
48458: ARRAY
48459: ST_TO_ADDR
// i = 1 ;
48460: LD_ADDR_VAR 0 2
48464: PUSH
48465: LD_INT 1
48467: ST_TO_ADDR
// while i <= mechanics_list do
48468: LD_VAR 0 2
48472: PUSH
48473: LD_VAR 0 3
48477: LESSEQUAL
48478: IFFALSE 48561
// begin if GetLives ( mechanics_list [ i ] ) <= 900 then
48480: LD_VAR 0 3
48484: PUSH
48485: LD_VAR 0 2
48489: ARRAY
48490: PPUSH
48491: CALL_OW 256
48495: PUSH
48496: LD_INT 900
48498: LESSEQUAL
48499: IFFALSE 48545
// begin temp_list = temp_list ^ mechanics_list [ i ] ;
48501: LD_ADDR_VAR 0 4
48505: PUSH
48506: LD_VAR 0 4
48510: PUSH
48511: LD_VAR 0 3
48515: PUSH
48516: LD_VAR 0 2
48520: ARRAY
48521: ADD
48522: ST_TO_ADDR
// mechanics_list = Delete ( mechanics_list , i ) ;
48523: LD_ADDR_VAR 0 3
48527: PUSH
48528: LD_VAR 0 3
48532: PPUSH
48533: LD_VAR 0 2
48537: PPUSH
48538: CALL_OW 3
48542: ST_TO_ADDR
// continue ;
48543: GO 48468
// end ; i = i + 1 ;
48545: LD_ADDR_VAR 0 2
48549: PUSH
48550: LD_VAR 0 2
48554: PUSH
48555: LD_INT 1
48557: PLUS
48558: ST_TO_ADDR
// end ;
48559: GO 48468
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
48561: LD_ADDR_EXP 75
48565: PUSH
48566: LD_EXP 75
48570: PPUSH
48571: LD_VAR 0 12
48575: PPUSH
48576: LD_VAR 0 4
48580: PPUSH
48581: CALL_OW 1
48585: ST_TO_ADDR
// if ai_control_tower [ base ] > 0 or ai_control_tower_vehicles [ base ] > 0 then
48586: LD_EXP 59
48590: PUSH
48591: LD_VAR 0 12
48595: ARRAY
48596: PUSH
48597: LD_INT 0
48599: GREATER
48600: PUSH
48601: LD_EXP 95
48605: PUSH
48606: LD_VAR 0 12
48610: ARRAY
48611: PUSH
48612: LD_INT 0
48614: GREATER
48615: OR
48616: IFFALSE 50277
// begin temp_list = remote_driver_vehicles [ base ] ;
48618: LD_ADDR_VAR 0 4
48622: PUSH
48623: LD_VAR 0 30
48627: PUSH
48628: LD_VAR 0 12
48632: ARRAY
48633: ST_TO_ADDR
// vehicles_list = [ ] ;
48634: LD_ADDR_VAR 0 7
48638: PUSH
48639: EMPTY
48640: ST_TO_ADDR
// i = 1 ;
48641: LD_ADDR_VAR 0 2
48645: PUSH
48646: LD_INT 1
48648: ST_TO_ADDR
// while i <= temp_list do
48649: LD_VAR 0 2
48653: PUSH
48654: LD_VAR 0 4
48658: LESSEQUAL
48659: IFFALSE 48931
// begin if IsDead ( temp_list [ i ] [ 1 ] ) then
48661: LD_VAR 0 4
48665: PUSH
48666: LD_VAR 0 2
48670: ARRAY
48671: PUSH
48672: LD_INT 1
48674: ARRAY
48675: PPUSH
48676: CALL_OW 301
48680: IFFALSE 48706
// begin temp_list = Delete ( temp_list , i ) ;
48682: LD_ADDR_VAR 0 4
48686: PUSH
48687: LD_VAR 0 4
48691: PPUSH
48692: LD_VAR 0 2
48696: PPUSH
48697: CALL_OW 3
48701: ST_TO_ADDR
// continue ;
48702: GO 48649
// end else
48704: GO 48889
// begin temp_list_3 = temp_list [ i ] [ 2 ] ;
48706: LD_ADDR_VAR 0 5
48710: PUSH
48711: LD_VAR 0 4
48715: PUSH
48716: LD_VAR 0 2
48720: ARRAY
48721: PUSH
48722: LD_INT 2
48724: ARRAY
48725: ST_TO_ADDR
// k = 1 ;
48726: LD_ADDR_VAR 0 11
48730: PUSH
48731: LD_INT 1
48733: ST_TO_ADDR
// while k <= temp_list_3 do
48734: LD_VAR 0 11
48738: PUSH
48739: LD_VAR 0 5
48743: LESSEQUAL
48744: IFFALSE 48801
// begin if IsDead ( temp_list_3 [ k ] ) then
48746: LD_VAR 0 5
48750: PUSH
48751: LD_VAR 0 11
48755: ARRAY
48756: PPUSH
48757: CALL_OW 301
48761: IFFALSE 48785
// begin temp_list_3 = Delete ( temp_list_3 , k ) ;
48763: LD_ADDR_VAR 0 5
48767: PUSH
48768: LD_VAR 0 5
48772: PPUSH
48773: LD_VAR 0 11
48777: PPUSH
48778: CALL_OW 3
48782: ST_TO_ADDR
// continue ;
48783: GO 48734
// end ; k = k + 1 ;
48785: LD_ADDR_VAR 0 11
48789: PUSH
48790: LD_VAR 0 11
48794: PUSH
48795: LD_INT 1
48797: PLUS
48798: ST_TO_ADDR
// end ;
48799: GO 48734
// if temp_list_3 > 0 then
48801: LD_VAR 0 5
48805: PUSH
48806: LD_INT 0
48808: GREATER
48809: IFFALSE 48867
// begin temp_list_2 = Replace ( temp_list [ i ] , 2 , temp_list_3 ) ;
48811: LD_ADDR_VAR 0 14
48815: PUSH
48816: LD_VAR 0 4
48820: PUSH
48821: LD_VAR 0 2
48825: ARRAY
48826: PPUSH
48827: LD_INT 2
48829: PPUSH
48830: LD_VAR 0 5
48834: PPUSH
48835: CALL_OW 1
48839: ST_TO_ADDR
// temp_list = Replace ( temp_list , i , temp_list_2 ) ;
48840: LD_ADDR_VAR 0 4
48844: PUSH
48845: LD_VAR 0 4
48849: PPUSH
48850: LD_VAR 0 2
48854: PPUSH
48855: LD_VAR 0 14
48859: PPUSH
48860: CALL_OW 1
48864: ST_TO_ADDR
// end else
48865: GO 48889
// begin temp_list = Delete ( temp_list , i ) ;
48867: LD_ADDR_VAR 0 4
48871: PUSH
48872: LD_VAR 0 4
48876: PPUSH
48877: LD_VAR 0 2
48881: PPUSH
48882: CALL_OW 3
48886: ST_TO_ADDR
// continue ;
48887: GO 48649
// end ; end ; vehicles_list = vehicles_list ^ temp_list [ i ] [ 2 ] ;
48889: LD_ADDR_VAR 0 7
48893: PUSH
48894: LD_VAR 0 7
48898: PUSH
48899: LD_VAR 0 4
48903: PUSH
48904: LD_VAR 0 2
48908: ARRAY
48909: PUSH
48910: LD_INT 2
48912: ARRAY
48913: ADD
48914: ST_TO_ADDR
// i = i + 1 ;
48915: LD_ADDR_VAR 0 2
48919: PUSH
48920: LD_VAR 0 2
48924: PUSH
48925: LD_INT 1
48927: PLUS
48928: ST_TO_ADDR
// end ;
48929: GO 48649
// num_control_stations = ai_control_tower_vehicles [ base ] + ( ai_control_tower [ base ] > 0 ) * 3 ;
48931: LD_ADDR_VAR 0 21
48935: PUSH
48936: LD_EXP 95
48940: PUSH
48941: LD_VAR 0 12
48945: ARRAY
48946: PUSH
48947: LD_EXP 59
48951: PUSH
48952: LD_VAR 0 12
48956: ARRAY
48957: PUSH
48958: LD_INT 0
48960: GREATER
48961: PUSH
48962: LD_INT 3
48964: MUL
48965: PLUS
48966: ST_TO_ADDR
// while temp_list > num_control_stations do
48967: LD_VAR 0 4
48971: PUSH
48972: LD_VAR 0 21
48976: GREATER
48977: IFFALSE 49035
// begin vehicles_list = vehicles_list diff temp_list [ temp_list + 0 ] [ 2 ] ;
48979: LD_ADDR_VAR 0 7
48983: PUSH
48984: LD_VAR 0 7
48988: PUSH
48989: LD_VAR 0 4
48993: PUSH
48994: LD_VAR 0 4
48998: PUSH
48999: LD_INT 0
49001: PLUS
49002: ARRAY
49003: PUSH
49004: LD_INT 2
49006: ARRAY
49007: DIFF
49008: ST_TO_ADDR
// temp_list = Delete ( temp_list , temp_list + 0 ) ;
49009: LD_ADDR_VAR 0 4
49013: PUSH
49014: LD_VAR 0 4
49018: PPUSH
49019: LD_VAR 0 4
49023: PUSH
49024: LD_INT 0
49026: PLUS
49027: PPUSH
49028: CALL_OW 3
49032: ST_TO_ADDR
// end ;
49033: GO 48967
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list ) ;
49035: LD_ADDR_VAR 0 30
49039: PUSH
49040: LD_VAR 0 30
49044: PPUSH
49045: LD_VAR 0 12
49049: PPUSH
49050: LD_VAR 0 4
49054: PPUSH
49055: CALL_OW 1
49059: 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 ] ) ;
49060: LD_ADDR_VAR 0 4
49064: PUSH
49065: LD_EXP 67
49069: PUSH
49070: LD_VAR 0 12
49074: ARRAY
49075: PUSH
49076: LD_EXP 85
49080: PUSH
49081: LD_VAR 0 12
49085: ARRAY
49086: PUSH
49087: LD_INT 0
49089: DIFF
49090: ADD
49091: PUSH
49092: LD_EXP 88
49096: PUSH
49097: LD_VAR 0 12
49101: ARRAY
49102: PUSH
49103: LD_INT 0
49105: DIFF
49106: ADD
49107: PUSH
49108: LD_EXP 68
49112: PUSH
49113: LD_VAR 0 12
49117: ARRAY
49118: ADD
49119: PUSH
49120: LD_EXP 100
49124: PUSH
49125: LD_VAR 0 12
49129: ARRAY
49130: ADD
49131: PUSH
49132: LD_EXP 101
49136: PUSH
49137: LD_VAR 0 12
49141: ARRAY
49142: ADD
49143: PUSH
49144: LD_EXP 107
49148: PUSH
49149: LD_VAR 0 12
49153: ARRAY
49154: ADD
49155: PUSH
49156: LD_VAR 0 7
49160: DIFF
49161: PPUSH
49162: LD_INT 33
49164: PUSH
49165: LD_INT 2
49167: PUSH
49168: EMPTY
49169: LIST
49170: LIST
49171: PPUSH
49172: CALL_OW 72
49176: ST_TO_ADDR
// if temp_list > 0 then
49177: LD_VAR 0 4
49181: PUSH
49182: LD_INT 0
49184: GREATER
49185: IFFALSE 49933
// begin temp_list_3 = mechanics_list ;
49187: LD_ADDR_VAR 0 5
49191: PUSH
49192: LD_VAR 0 3
49196: ST_TO_ADDR
// for i in remote_driver_vehicles [ base ] do
49197: LD_ADDR_VAR 0 2
49201: PUSH
49202: LD_VAR 0 30
49206: PUSH
49207: LD_VAR 0 12
49211: ARRAY
49212: PUSH
49213: FOR_IN
49214: IFFALSE 49238
// temp_list_3 = temp_list_3 diff i [ 1 ] ;
49216: LD_ADDR_VAR 0 5
49220: PUSH
49221: LD_VAR 0 5
49225: PUSH
49226: LD_VAR 0 2
49230: PUSH
49231: LD_INT 1
49233: ARRAY
49234: DIFF
49235: ST_TO_ADDR
49236: GO 49213
49238: POP
49239: POP
// if temp_list_3 > 0 then
49240: LD_VAR 0 5
49244: PUSH
49245: LD_INT 0
49247: GREATER
49248: IFFALSE 49274
// temp_list_3 = temp_list_3 diff FindMinSkill ( temp_list_3 , skill_mechanical ) ;
49250: LD_ADDR_VAR 0 5
49254: PUSH
49255: LD_VAR 0 5
49259: PUSH
49260: LD_VAR 0 5
49264: PPUSH
49265: LD_INT 3
49267: PPUSH
49268: CALL_OW 443
49272: DIFF
49273: ST_TO_ADDR
// i = 1 ;
49274: LD_ADDR_VAR 0 2
49278: PUSH
49279: LD_INT 1
49281: ST_TO_ADDR
// while i <= temp_list do
49282: LD_VAR 0 2
49286: PUSH
49287: LD_VAR 0 4
49291: LESSEQUAL
49292: IFFALSE 49933
// begin a = 1 ;
49294: LD_ADDR_VAR 0 18
49298: PUSH
49299: LD_INT 1
49301: ST_TO_ADDR
// while a <= remote_driver_vehicles [ base ] do
49302: LD_VAR 0 18
49306: PUSH
49307: LD_VAR 0 30
49311: PUSH
49312: LD_VAR 0 12
49316: ARRAY
49317: LESSEQUAL
49318: IFFALSE 49398
// begin if remote_driver_vehicles [ base ] [ a ] [ 2 ] < 2 and GetSkill ( remote_driver_vehicles [ base ] [ a ] [ 1 ] , skill_mechanical ) >= 2 then
49320: LD_VAR 0 30
49324: PUSH
49325: LD_VAR 0 12
49329: ARRAY
49330: PUSH
49331: LD_VAR 0 18
49335: ARRAY
49336: PUSH
49337: LD_INT 2
49339: ARRAY
49340: PUSH
49341: LD_INT 2
49343: LESS
49344: PUSH
49345: LD_VAR 0 30
49349: PUSH
49350: LD_VAR 0 12
49354: ARRAY
49355: PUSH
49356: LD_VAR 0 18
49360: ARRAY
49361: PUSH
49362: LD_INT 1
49364: ARRAY
49365: PPUSH
49366: LD_INT 3
49368: PPUSH
49369: CALL_OW 259
49373: PUSH
49374: LD_INT 2
49376: GREATEREQUAL
49377: AND
49378: IFFALSE 49382
// break ;
49380: GO 49398
// a = a + 1 ;
49382: LD_ADDR_VAR 0 18
49386: PUSH
49387: LD_VAR 0 18
49391: PUSH
49392: LD_INT 1
49394: PLUS
49395: ST_TO_ADDR
// end ;
49396: GO 49302
// if a > remote_driver_vehicles [ base ] then
49398: LD_VAR 0 18
49402: PUSH
49403: LD_VAR 0 30
49407: PUSH
49408: LD_VAR 0 12
49412: ARRAY
49413: GREATER
49414: IFFALSE 49788
// begin if remote_driver_vehicles [ base ] >= num_control_stations then
49416: LD_VAR 0 30
49420: PUSH
49421: LD_VAR 0 12
49425: ARRAY
49426: PUSH
49427: LD_VAR 0 21
49431: GREATEREQUAL
49432: IFFALSE 49441
// begin temp_list_3 = [ ] ;
49434: LD_ADDR_VAR 0 5
49438: PUSH
49439: EMPTY
49440: ST_TO_ADDR
// end ; if temp_list_3 > 0 then
49441: LD_VAR 0 5
49445: PUSH
49446: LD_INT 0
49448: GREATER
49449: IFFALSE 49569
// begin temp_unit = FindMaxSkill ( temp_list_3 , skill_mechanical ) ;
49451: LD_ADDR_VAR 0 6
49455: PUSH
49456: LD_VAR 0 5
49460: PPUSH
49461: LD_INT 3
49463: PPUSH
49464: CALL_OW 433
49468: ST_TO_ADDR
// temp_list_3 = temp_list_3 diff temp_unit ;
49469: LD_ADDR_VAR 0 5
49473: PUSH
49474: LD_VAR 0 5
49478: PUSH
49479: LD_VAR 0 6
49483: DIFF
49484: ST_TO_ADDR
// temp_list_2 = remote_driver_vehicles [ base ] ^ [ [ temp_unit , [ temp_list [ i ] ] ] ] ;
49485: LD_ADDR_VAR 0 14
49489: PUSH
49490: LD_VAR 0 30
49494: PUSH
49495: LD_VAR 0 12
49499: ARRAY
49500: PUSH
49501: LD_VAR 0 6
49505: PUSH
49506: LD_VAR 0 4
49510: PUSH
49511: LD_VAR 0 2
49515: ARRAY
49516: PUSH
49517: EMPTY
49518: LIST
49519: PUSH
49520: EMPTY
49521: LIST
49522: LIST
49523: PUSH
49524: EMPTY
49525: LIST
49526: ADD
49527: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list_2 ) ;
49528: LD_ADDR_VAR 0 30
49532: PUSH
49533: LD_VAR 0 30
49537: PPUSH
49538: LD_VAR 0 12
49542: PPUSH
49543: LD_VAR 0 14
49547: PPUSH
49548: CALL_OW 1
49552: ST_TO_ADDR
// i = i + 1 ;
49553: LD_ADDR_VAR 0 2
49557: PUSH
49558: LD_VAR 0 2
49562: PUSH
49563: LD_INT 1
49565: PLUS
49566: ST_TO_ADDR
// continue ;
49567: GO 49282
// end ; temp_list_4 = [ ] ;
49569: LD_ADDR_VAR 0 19
49573: PUSH
49574: EMPTY
49575: ST_TO_ADDR
// for a in remote_driver_vehicles [ base ] do
49576: LD_ADDR_VAR 0 18
49580: PUSH
49581: LD_VAR 0 30
49585: PUSH
49586: LD_VAR 0 12
49590: ARRAY
49591: PUSH
49592: FOR_IN
49593: IFFALSE 49644
// if GetSkill ( a [ 1 ] , skill_mechanical ) > a [ 2 ] then
49595: LD_VAR 0 18
49599: PUSH
49600: LD_INT 1
49602: ARRAY
49603: PPUSH
49604: LD_INT 3
49606: PPUSH
49607: CALL_OW 259
49611: PUSH
49612: LD_VAR 0 18
49616: PUSH
49617: LD_INT 2
49619: ARRAY
49620: GREATER
49621: IFFALSE 49642
// temp_list_4 = temp_list_4 ^ [ a ] ;
49623: LD_ADDR_VAR 0 19
49627: PUSH
49628: LD_VAR 0 19
49632: PUSH
49633: LD_VAR 0 18
49637: PUSH
49638: EMPTY
49639: LIST
49640: ADD
49641: ST_TO_ADDR
49642: GO 49592
49644: POP
49645: POP
// if temp_list_4 = 0 then
49646: LD_VAR 0 19
49650: PUSH
49651: LD_INT 0
49653: EQUAL
49654: IFFALSE 49658
// break ;
49656: GO 49933
// temp_list_2 = [ ] ;
49658: LD_ADDR_VAR 0 14
49662: PUSH
49663: EMPTY
49664: ST_TO_ADDR
// for a in temp_list_4 do
49665: LD_ADDR_VAR 0 18
49669: PUSH
49670: LD_VAR 0 19
49674: PUSH
49675: FOR_IN
49676: IFFALSE 49704
// temp_list_2 = temp_list_2 ^ ( a [ 2 ] + 0 ) ;
49678: LD_ADDR_VAR 0 14
49682: PUSH
49683: LD_VAR 0 14
49687: PUSH
49688: LD_VAR 0 18
49692: PUSH
49693: LD_INT 2
49695: ARRAY
49696: PUSH
49697: LD_INT 0
49699: PLUS
49700: ADD
49701: ST_TO_ADDR
49702: GO 49675
49704: POP
49705: POP
// temp_list_2 = WorstFromListByList ( temp_list_4 , temp_list_2 ) ;
49706: LD_ADDR_VAR 0 14
49710: PUSH
49711: LD_VAR 0 19
49715: PPUSH
49716: LD_VAR 0 14
49720: PPUSH
49721: CALL_OW 78
49725: ST_TO_ADDR
// for a = 1 to remote_driver_vehicles [ base ] do
49726: LD_ADDR_VAR 0 18
49730: PUSH
49731: DOUBLE
49732: LD_INT 1
49734: DEC
49735: ST_TO_ADDR
49736: LD_VAR 0 30
49740: PUSH
49741: LD_VAR 0 12
49745: ARRAY
49746: PUSH
49747: FOR_TO
49748: IFFALSE 49786
// if remote_driver_vehicles [ base ] [ a ] [ 1 ] = temp_list_2 [ 1 ] then
49750: LD_VAR 0 30
49754: PUSH
49755: LD_VAR 0 12
49759: ARRAY
49760: PUSH
49761: LD_VAR 0 18
49765: ARRAY
49766: PUSH
49767: LD_INT 1
49769: ARRAY
49770: PUSH
49771: LD_VAR 0 14
49775: PUSH
49776: LD_INT 1
49778: ARRAY
49779: EQUAL
49780: IFFALSE 49784
// break ;
49782: GO 49786
49784: GO 49747
49786: POP
49787: POP
// end ; temp_list_2 = remote_driver_vehicles [ base ] [ a ] [ 2 ] ^ temp_list [ i ] ;
49788: LD_ADDR_VAR 0 14
49792: PUSH
49793: LD_VAR 0 30
49797: PUSH
49798: LD_VAR 0 12
49802: ARRAY
49803: PUSH
49804: LD_VAR 0 18
49808: ARRAY
49809: PUSH
49810: LD_INT 2
49812: ARRAY
49813: PUSH
49814: LD_VAR 0 4
49818: PUSH
49819: LD_VAR 0 2
49823: ARRAY
49824: ADD
49825: ST_TO_ADDR
// temp_list_2 = Replace ( remote_driver_vehicles [ base ] [ a ] , 2 , temp_list_2 ) ;
49826: LD_ADDR_VAR 0 14
49830: PUSH
49831: LD_VAR 0 30
49835: PUSH
49836: LD_VAR 0 12
49840: ARRAY
49841: PUSH
49842: LD_VAR 0 18
49846: ARRAY
49847: PPUSH
49848: LD_INT 2
49850: PPUSH
49851: LD_VAR 0 14
49855: PPUSH
49856: CALL_OW 1
49860: ST_TO_ADDR
// temp_list_2 = Replace ( remote_driver_vehicles [ base ] , a , temp_list_2 ) ;
49861: LD_ADDR_VAR 0 14
49865: PUSH
49866: LD_VAR 0 30
49870: PUSH
49871: LD_VAR 0 12
49875: ARRAY
49876: PPUSH
49877: LD_VAR 0 18
49881: PPUSH
49882: LD_VAR 0 14
49886: PPUSH
49887: CALL_OW 1
49891: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list_2 ) ;
49892: LD_ADDR_VAR 0 30
49896: PUSH
49897: LD_VAR 0 30
49901: PPUSH
49902: LD_VAR 0 12
49906: PPUSH
49907: LD_VAR 0 14
49911: PPUSH
49912: CALL_OW 1
49916: ST_TO_ADDR
// i = i + 1 ;
49917: LD_ADDR_VAR 0 2
49921: PUSH
49922: LD_VAR 0 2
49926: PUSH
49927: LD_INT 1
49929: PLUS
49930: ST_TO_ADDR
// end ;
49931: GO 49282
// end ; for i in remote_driver_vehicles [ base ] do
49933: LD_ADDR_VAR 0 2
49937: PUSH
49938: LD_VAR 0 30
49942: PUSH
49943: LD_VAR 0 12
49947: ARRAY
49948: PUSH
49949: FOR_IN
49950: IFFALSE 49974
// remote_mechanics = remote_mechanics ^ i [ 1 ] ;
49952: LD_ADDR_VAR 0 15
49956: PUSH
49957: LD_VAR 0 15
49961: PUSH
49962: LD_VAR 0 2
49966: PUSH
49967: LD_INT 1
49969: ARRAY
49970: ADD
49971: ST_TO_ADDR
49972: GO 49949
49974: POP
49975: POP
// mechanics_list = mechanics_list diff remote_mechanics ;
49976: LD_ADDR_VAR 0 3
49980: PUSH
49981: LD_VAR 0 3
49985: PUSH
49986: LD_VAR 0 15
49990: DIFF
49991: ST_TO_ADDR
// remote_mechanics = remote_mechanics diff ai_heal_these_humans [ base ] ;
49992: LD_ADDR_VAR 0 15
49996: PUSH
49997: LD_VAR 0 15
50001: PUSH
50002: LD_EXP 75
50006: PUSH
50007: LD_VAR 0 12
50011: ARRAY
50012: DIFF
50013: ST_TO_ADDR
// if mechanics_list = 0 and remote_driver_vehicles [ base ] > 0 then
50014: LD_VAR 0 3
50018: PUSH
50019: LD_INT 0
50021: EQUAL
50022: PUSH
50023: LD_VAR 0 30
50027: PUSH
50028: LD_VAR 0 12
50032: ARRAY
50033: PUSH
50034: LD_INT 0
50036: GREATER
50037: AND
50038: IFFALSE 50275
// begin n = 0 ;
50040: LD_ADDR_VAR 0 17
50044: PUSH
50045: LD_INT 0
50047: ST_TO_ADDR
// a = 9999 ;
50048: LD_ADDR_VAR 0 18
50052: PUSH
50053: LD_INT 9999
50055: ST_TO_ADDR
// for i = 1 to ( remote_driver_vehicles [ base ] + 0 ) do
50056: LD_ADDR_VAR 0 2
50060: PUSH
50061: DOUBLE
50062: LD_INT 1
50064: DEC
50065: ST_TO_ADDR
50066: LD_VAR 0 30
50070: PUSH
50071: LD_VAR 0 12
50075: ARRAY
50076: PUSH
50077: LD_INT 0
50079: PLUS
50080: PUSH
50081: FOR_TO
50082: IFFALSE 50158
// begin if remote_driver_vehicles [ base ] [ i ] [ 2 ] + 0 < a then
50084: LD_VAR 0 30
50088: PUSH
50089: LD_VAR 0 12
50093: ARRAY
50094: PUSH
50095: LD_VAR 0 2
50099: ARRAY
50100: PUSH
50101: LD_INT 2
50103: ARRAY
50104: PUSH
50105: LD_INT 0
50107: PLUS
50108: PUSH
50109: LD_VAR 0 18
50113: LESS
50114: IFFALSE 50156
// begin a = remote_driver_vehicles [ base ] [ i ] [ 2 ] + 0 ;
50116: LD_ADDR_VAR 0 18
50120: PUSH
50121: LD_VAR 0 30
50125: PUSH
50126: LD_VAR 0 12
50130: ARRAY
50131: PUSH
50132: LD_VAR 0 2
50136: ARRAY
50137: PUSH
50138: LD_INT 2
50140: ARRAY
50141: PUSH
50142: LD_INT 0
50144: PLUS
50145: ST_TO_ADDR
// n = i ;
50146: LD_ADDR_VAR 0 17
50150: PUSH
50151: LD_VAR 0 2
50155: ST_TO_ADDR
// end ; end ;
50156: GO 50081
50158: POP
50159: POP
// mechanics_list = mechanics_list ^ remote_driver_vehicles [ base ] [ n ] [ 1 ] ;
50160: LD_ADDR_VAR 0 3
50164: PUSH
50165: LD_VAR 0 3
50169: PUSH
50170: LD_VAR 0 30
50174: PUSH
50175: LD_VAR 0 12
50179: ARRAY
50180: PUSH
50181: LD_VAR 0 17
50185: ARRAY
50186: PUSH
50187: LD_INT 1
50189: ARRAY
50190: ADD
50191: ST_TO_ADDR
// remote_mechanics = remote_mechanics diff remote_driver_vehicles [ base ] [ n ] [ 1 ] ;
50192: LD_ADDR_VAR 0 15
50196: PUSH
50197: LD_VAR 0 15
50201: PUSH
50202: LD_VAR 0 30
50206: PUSH
50207: LD_VAR 0 12
50211: ARRAY
50212: PUSH
50213: LD_VAR 0 17
50217: ARRAY
50218: PUSH
50219: LD_INT 1
50221: ARRAY
50222: DIFF
50223: ST_TO_ADDR
// temp_list_2 = Delete ( remote_driver_vehicles [ base ] , n ) ;
50224: LD_ADDR_VAR 0 14
50228: PUSH
50229: LD_VAR 0 30
50233: PUSH
50234: LD_VAR 0 12
50238: ARRAY
50239: PPUSH
50240: LD_VAR 0 17
50244: PPUSH
50245: CALL_OW 3
50249: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list_2 ) ;
50250: LD_ADDR_VAR 0 30
50254: PUSH
50255: LD_VAR 0 30
50259: PPUSH
50260: LD_VAR 0 12
50264: PPUSH
50265: LD_VAR 0 14
50269: PPUSH
50270: CALL_OW 1
50274: ST_TO_ADDR
// end ; end else
50275: GO 50299
// begin remote_driver_vehicles = Replace ( remote_driver_vehicles , base , [ ] ) ;
50277: LD_ADDR_VAR 0 30
50281: PUSH
50282: LD_VAR 0 30
50286: PPUSH
50287: LD_VAR 0 12
50291: PPUSH
50292: EMPTY
50293: PPUSH
50294: CALL_OW 1
50298: ST_TO_ADDR
// end ; if base = 1 and ai_behemoths [ base ] + UnitFilter ( ai_vehicles_attack [ base ] , [ [ f_ok ] , [ f_weapon , 59 ] ] ) < MaxNumBehemoths ( base ) and mechanics_list > 2 then
50299: LD_VAR 0 12
50303: PUSH
50304: LD_INT 1
50306: EQUAL
50307: PUSH
50308: LD_EXP 103
50312: PUSH
50313: LD_VAR 0 12
50317: ARRAY
50318: PUSH
50319: LD_EXP 68
50323: PUSH
50324: LD_VAR 0 12
50328: ARRAY
50329: PPUSH
50330: LD_INT 50
50332: PUSH
50333: EMPTY
50334: LIST
50335: PUSH
50336: LD_INT 34
50338: PUSH
50339: LD_INT 59
50341: PUSH
50342: EMPTY
50343: LIST
50344: LIST
50345: PUSH
50346: EMPTY
50347: LIST
50348: LIST
50349: PPUSH
50350: CALL_OW 72
50354: PLUS
50355: PUSH
50356: LD_VAR 0 12
50360: PPUSH
50361: CALL 60730 0 1
50365: LESS
50366: AND
50367: PUSH
50368: LD_VAR 0 3
50372: PUSH
50373: LD_INT 2
50375: GREATER
50376: AND
50377: IFFALSE 50614
// begin temp_list = [ ] ;
50379: LD_ADDR_VAR 0 4
50383: PUSH
50384: EMPTY
50385: ST_TO_ADDR
// for i = 3 to mechanics_list + 0 do
50386: LD_ADDR_VAR 0 2
50390: PUSH
50391: DOUBLE
50392: LD_INT 3
50394: DEC
50395: ST_TO_ADDR
50396: LD_VAR 0 3
50400: PUSH
50401: LD_INT 0
50403: PLUS
50404: PUSH
50405: FOR_TO
50406: IFFALSE 50448
// begin temp_list = temp_list ^ mechanics_list [ 1 ] ;
50408: LD_ADDR_VAR 0 4
50412: PUSH
50413: LD_VAR 0 4
50417: PUSH
50418: LD_VAR 0 3
50422: PUSH
50423: LD_INT 1
50425: ARRAY
50426: ADD
50427: ST_TO_ADDR
// mechanics_list = Delete ( mechanics_list , 1 ) ;
50428: LD_ADDR_VAR 0 3
50432: PUSH
50433: LD_VAR 0 3
50437: PPUSH
50438: LD_INT 1
50440: PPUSH
50441: CALL_OW 3
50445: ST_TO_ADDR
// end ;
50446: GO 50405
50448: POP
50449: POP
// temp_unit = HexInfo ( ai_behemoth_construction_hex [ base ] [ 1 ] , ai_behemoth_construction_hex [ base ] [ 2 ] ) ;
50450: LD_ADDR_VAR 0 6
50454: PUSH
50455: LD_EXP 105
50459: PUSH
50460: LD_VAR 0 12
50464: ARRAY
50465: PUSH
50466: LD_INT 1
50468: ARRAY
50469: PPUSH
50470: LD_EXP 105
50474: PUSH
50475: LD_VAR 0 12
50479: ARRAY
50480: PUSH
50481: LD_INT 2
50483: ARRAY
50484: PPUSH
50485: CALL_OW 428
50489: ST_TO_ADDR
// k = false ;
50490: LD_ADDR_VAR 0 11
50494: PUSH
50495: LD_INT 0
50497: ST_TO_ADDR
// if temp_unit > 0 then
50498: LD_VAR 0 6
50502: PUSH
50503: LD_INT 0
50505: GREATER
50506: IFFALSE 50546
// if GetType ( temp_unit ) = unit_building then
50508: LD_VAR 0 6
50512: PPUSH
50513: CALL_OW 247
50517: PUSH
50518: LD_INT 3
50520: EQUAL
50521: IFFALSE 50546
// if GetBType ( temp_unit ) = b_behemoth then
50523: LD_VAR 0 6
50527: PPUSH
50528: CALL_OW 266
50532: PUSH
50533: LD_INT 37
50535: EQUAL
50536: IFFALSE 50546
// k = true ;
50538: LD_ADDR_VAR 0 11
50542: PUSH
50543: LD_INT 1
50545: ST_TO_ADDR
// if not k then
50546: LD_VAR 0 11
50550: NOT
50551: IFFALSE 50600
// begin ComBuildBehemoth ( temp_list , b_behemoth , ai_behemoth_construction_hex [ base ] [ 1 ] , ai_behemoth_construction_hex [ base ] [ 2 ] , 0 ) ;
50553: LD_VAR 0 4
50557: PPUSH
50558: LD_INT 37
50560: PPUSH
50561: LD_EXP 105
50565: PUSH
50566: LD_VAR 0 12
50570: ARRAY
50571: PUSH
50572: LD_INT 1
50574: ARRAY
50575: PPUSH
50576: LD_EXP 105
50580: PUSH
50581: LD_VAR 0 12
50585: ARRAY
50586: PUSH
50587: LD_INT 2
50589: ARRAY
50590: PPUSH
50591: LD_INT 0
50593: PPUSH
50594: CALL_OW 170
// end else
50598: GO 50614
// begin ComRepairBuilding ( temp_list , temp_unit ) ;
50600: LD_VAR 0 4
50604: PPUSH
50605: LD_VAR 0 6
50609: PPUSH
50610: CALL_OW 130
// end ; end ; temp_list = [ ] ;
50614: LD_ADDR_VAR 0 4
50618: PUSH
50619: EMPTY
50620: ST_TO_ADDR
// for i in ai_vehicles_being_repaired [ base ] do
50621: LD_ADDR_VAR 0 2
50625: PUSH
50626: LD_EXP 70
50630: PUSH
50631: LD_VAR 0 12
50635: ARRAY
50636: PUSH
50637: FOR_IN
50638: IFFALSE 50673
// if GetLives ( i ) < 1000 then
50640: LD_VAR 0 2
50644: PPUSH
50645: CALL_OW 256
50649: PUSH
50650: LD_INT 1000
50652: LESS
50653: IFFALSE 50671
// temp_list = temp_list ^ i ;
50655: LD_ADDR_VAR 0 4
50659: PUSH
50660: LD_VAR 0 4
50664: PUSH
50665: LD_VAR 0 2
50669: ADD
50670: ST_TO_ADDR
50671: GO 50637
50673: POP
50674: POP
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
50675: LD_ADDR_EXP 70
50679: PUSH
50680: LD_EXP 70
50684: PPUSH
50685: LD_VAR 0 12
50689: PPUSH
50690: LD_VAR 0 4
50694: PPUSH
50695: CALL_OW 1
50699: ST_TO_ADDR
// temp_list = [ ] ;
50700: LD_ADDR_VAR 0 4
50704: PUSH
50705: EMPTY
50706: ST_TO_ADDR
// for i in ai_retreating_vehicles_defend [ base ] do
50707: LD_ADDR_VAR 0 2
50711: PUSH
50712: LD_EXP 69
50716: PUSH
50717: LD_VAR 0 12
50721: ARRAY
50722: PUSH
50723: FOR_IN
50724: IFFALSE 50759
// if GetLives ( i ) < 1000 then
50726: LD_VAR 0 2
50730: PPUSH
50731: CALL_OW 256
50735: PUSH
50736: LD_INT 1000
50738: LESS
50739: IFFALSE 50757
// temp_list = temp_list ^ i ;
50741: LD_ADDR_VAR 0 4
50745: PUSH
50746: LD_VAR 0 4
50750: PUSH
50751: LD_VAR 0 2
50755: ADD
50756: ST_TO_ADDR
50757: GO 50723
50759: POP
50760: POP
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
50761: LD_ADDR_EXP 69
50765: PUSH
50766: LD_EXP 69
50770: PPUSH
50771: LD_VAR 0 12
50775: PPUSH
50776: LD_VAR 0 4
50780: PPUSH
50781: CALL_OW 1
50785: ST_TO_ADDR
// temp_list = ai_retreating_vehicles_defend [ base ] ;
50786: LD_ADDR_VAR 0 4
50790: PUSH
50791: LD_EXP 69
50795: PUSH
50796: LD_VAR 0 12
50800: ARRAY
50801: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] diff ai_retreating_vehicles_defend [ base ] do
50802: LD_ADDR_VAR 0 2
50806: PUSH
50807: LD_EXP 67
50811: PUSH
50812: LD_VAR 0 12
50816: ARRAY
50817: PUSH
50818: LD_EXP 69
50822: PUSH
50823: LD_VAR 0 12
50827: ARRAY
50828: DIFF
50829: PUSH
50830: FOR_IN
50831: IFFALSE 50866
// if GetLives ( i ) <= 250 then
50833: LD_VAR 0 2
50837: PPUSH
50838: CALL_OW 256
50842: PUSH
50843: LD_INT 250
50845: LESSEQUAL
50846: IFFALSE 50864
// temp_list = temp_list ^ i ;
50848: LD_ADDR_VAR 0 4
50852: PUSH
50853: LD_VAR 0 4
50857: PUSH
50858: LD_VAR 0 2
50862: ADD
50863: ST_TO_ADDR
50864: GO 50830
50866: POP
50867: POP
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
50868: LD_ADDR_EXP 69
50872: PUSH
50873: LD_EXP 69
50877: PPUSH
50878: LD_VAR 0 12
50882: PPUSH
50883: LD_VAR 0 4
50887: PPUSH
50888: CALL_OW 1
50892: ST_TO_ADDR
// if not under_attack then
50893: LD_VAR 0 9
50897: NOT
50898: IFFALSE 51036
// begin temp_list = [ ] ;
50900: LD_ADDR_VAR 0 4
50904: PUSH
50905: EMPTY
50906: 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
50907: LD_ADDR_VAR 0 2
50911: PUSH
50912: LD_EXP 71
50916: PUSH
50917: LD_VAR 0 12
50921: ARRAY
50922: PUSH
50923: LD_EXP 69
50927: PUSH
50928: LD_VAR 0 12
50932: ARRAY
50933: PUSH
50934: LD_EXP 70
50938: PUSH
50939: LD_VAR 0 12
50943: ARRAY
50944: ADD
50945: PUSH
50946: LD_EXP 78
50950: PUSH
50951: LD_VAR 0 12
50955: ARRAY
50956: ADD
50957: PUSH
50958: LD_EXP 79
50962: PUSH
50963: LD_VAR 0 12
50967: ARRAY
50968: ADD
50969: DIFF
50970: PUSH
50971: FOR_IN
50972: IFFALSE 51007
// if GetFuel ( i ) < 95 then
50974: LD_VAR 0 2
50978: PPUSH
50979: CALL_OW 261
50983: PUSH
50984: LD_INT 95
50986: LESS
50987: IFFALSE 51005
// temp_list = temp_list ^ i ;
50989: LD_ADDR_VAR 0 4
50993: PUSH
50994: LD_VAR 0 4
50998: PUSH
50999: LD_VAR 0 2
51003: ADD
51004: ST_TO_ADDR
51005: GO 50971
51007: POP
51008: POP
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
51009: LD_ADDR_EXP 71
51013: PUSH
51014: LD_EXP 71
51018: PPUSH
51019: LD_VAR 0 12
51023: PPUSH
51024: LD_VAR 0 4
51028: PPUSH
51029: CALL_OW 1
51033: ST_TO_ADDR
// end else
51034: GO 51058
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , [ ] ) ;
51036: LD_ADDR_EXP 71
51040: PUSH
51041: LD_EXP 71
51045: PPUSH
51046: LD_VAR 0 12
51050: PPUSH
51051: EMPTY
51052: PPUSH
51053: CALL_OW 1
51057: ST_TO_ADDR
// vehicles_to_consider = ai_vehicles_defend [ base ] ^ ai_control_tower_vehicles [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] ;
51058: LD_ADDR_VAR 0 25
51062: PUSH
51063: LD_EXP 67
51067: PUSH
51068: LD_VAR 0 12
51072: ARRAY
51073: PUSH
51074: LD_EXP 95
51078: PUSH
51079: LD_VAR 0 12
51083: ARRAY
51084: ADD
51085: PUSH
51086: LD_EXP 100
51090: PUSH
51091: LD_VAR 0 12
51095: ARRAY
51096: ADD
51097: PUSH
51098: LD_EXP 101
51102: PUSH
51103: LD_VAR 0 12
51107: ARRAY
51108: ADD
51109: ST_TO_ADDR
// if under_attack and base <> 2 then
51110: LD_VAR 0 9
51114: PUSH
51115: LD_VAR 0 12
51119: PUSH
51120: LD_INT 2
51122: NONEQUAL
51123: AND
51124: IFFALSE 51644
// 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 ] ) ;
51126: LD_ADDR_VAR 0 7
51130: PUSH
51131: LD_EXP 67
51135: PUSH
51136: LD_VAR 0 12
51140: ARRAY
51141: PUSH
51142: LD_EXP 71
51146: PUSH
51147: LD_VAR 0 12
51151: ARRAY
51152: PUSH
51153: LD_EXP 69
51157: PUSH
51158: LD_VAR 0 12
51162: ARRAY
51163: ADD
51164: PUSH
51165: LD_EXP 70
51169: PUSH
51170: LD_VAR 0 12
51174: ARRAY
51175: ADD
51176: PUSH
51177: LD_EXP 79
51181: PUSH
51182: LD_VAR 0 12
51186: ARRAY
51187: ADD
51188: PUSH
51189: LD_EXP 78
51193: PUSH
51194: LD_VAR 0 12
51198: ARRAY
51199: ADD
51200: DIFF
51201: ST_TO_ADDR
// temp_list = UnitFilter ( vehicles_list , [ [ f_control , control_manual ] , [ f_ok ] , [ f_empty ] , [ f_inarea , area ] ] ) ;
51202: LD_ADDR_VAR 0 4
51206: PUSH
51207: LD_VAR 0 7
51211: PPUSH
51212: LD_INT 33
51214: PUSH
51215: LD_INT 1
51217: PUSH
51218: EMPTY
51219: LIST
51220: LIST
51221: PUSH
51222: LD_INT 50
51224: PUSH
51225: EMPTY
51226: LIST
51227: PUSH
51228: LD_INT 58
51230: PUSH
51231: EMPTY
51232: LIST
51233: PUSH
51234: LD_INT 95
51236: PUSH
51237: LD_VAR 0 13
51241: PUSH
51242: EMPTY
51243: LIST
51244: LIST
51245: PUSH
51246: EMPTY
51247: LIST
51248: LIST
51249: LIST
51250: LIST
51251: PPUSH
51252: CALL_OW 72
51256: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
51257: LD_ADDR_VAR 0 4
51261: PUSH
51262: LD_VAR 0 4
51266: PPUSH
51267: LD_VAR 0 3
51271: PPUSH
51272: LD_VAR 0 29
51276: PPUSH
51277: CALL 57338 0 3
51281: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
51282: LD_ADDR_VAR 0 3
51286: PUSH
51287: LD_VAR 0 4
51291: PUSH
51292: LD_INT 1
51294: ARRAY
51295: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
51296: LD_ADDR_VAR 0 29
51300: PUSH
51301: LD_VAR 0 4
51305: PUSH
51306: LD_INT 2
51308: ARRAY
51309: ST_TO_ADDR
// case base of 1 :
51310: LD_VAR 0 12
51314: PUSH
51315: LD_INT 1
51317: DOUBLE
51318: EQUAL
51319: IFTRUE 51323
51321: GO 51367
51323: POP
// temp_list = DangerousUnits ( FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , ru_vehicle_defend_area ] ] ) ) ; 2 :
51324: LD_ADDR_VAR 0 4
51328: PUSH
51329: LD_INT 81
51331: PUSH
51332: LD_VAR 0 1
51336: PUSH
51337: EMPTY
51338: LIST
51339: LIST
51340: PUSH
51341: LD_INT 95
51343: PUSH
51344: LD_INT 8
51346: PUSH
51347: EMPTY
51348: LIST
51349: LIST
51350: PUSH
51351: EMPTY
51352: LIST
51353: LIST
51354: PPUSH
51355: CALL_OW 69
51359: PPUSH
51360: CALL 81944 0 1
51364: ST_TO_ADDR
51365: GO 51490
51367: LD_INT 2
51369: DOUBLE
51370: EQUAL
51371: IFTRUE 51375
51373: GO 51385
51375: POP
// temp_list = [ ] ; 3 :
51376: LD_ADDR_VAR 0 4
51380: PUSH
51381: EMPTY
51382: ST_TO_ADDR
51383: GO 51490
51385: LD_INT 3
51387: DOUBLE
51388: EQUAL
51389: IFTRUE 51393
51391: GO 51437
51393: POP
// temp_list = DangerousUnits ( FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , ar_vehicle_defend_area ] ] ) ) ; 4 :
51394: LD_ADDR_VAR 0 4
51398: PUSH
51399: LD_INT 81
51401: PUSH
51402: LD_VAR 0 1
51406: PUSH
51407: EMPTY
51408: LIST
51409: LIST
51410: PUSH
51411: LD_INT 95
51413: PUSH
51414: LD_INT 9
51416: PUSH
51417: EMPTY
51418: LIST
51419: LIST
51420: PUSH
51421: EMPTY
51422: LIST
51423: LIST
51424: PPUSH
51425: CALL_OW 69
51429: PPUSH
51430: CALL 81944 0 1
51434: ST_TO_ADDR
51435: GO 51490
51437: LD_INT 4
51439: DOUBLE
51440: EQUAL
51441: IFTRUE 51445
51443: GO 51489
51445: POP
// temp_list = DangerousUnits ( FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , am_vehicle_defend_area ] ] ) ) ; end ;
51446: LD_ADDR_VAR 0 4
51450: PUSH
51451: LD_INT 81
51453: PUSH
51454: LD_VAR 0 1
51458: PUSH
51459: EMPTY
51460: LIST
51461: LIST
51462: PUSH
51463: LD_INT 95
51465: PUSH
51466: LD_INT 10
51468: PUSH
51469: EMPTY
51470: LIST
51471: LIST
51472: PUSH
51473: EMPTY
51474: LIST
51475: LIST
51476: PPUSH
51477: CALL_OW 69
51481: PPUSH
51482: CALL 81944 0 1
51486: ST_TO_ADDR
51487: GO 51490
51489: POP
// if temp_list > 0 then
51490: LD_VAR 0 4
51494: PUSH
51495: LD_INT 0
51497: GREATER
51498: IFFALSE 51551
// ComAgressiveMove ( vehicles_list ^ ai_behemoths [ base ] , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) else
51500: LD_VAR 0 7
51504: PUSH
51505: LD_EXP 103
51509: PUSH
51510: LD_VAR 0 12
51514: ARRAY
51515: ADD
51516: PPUSH
51517: LD_VAR 0 4
51521: PUSH
51522: LD_INT 1
51524: ARRAY
51525: PPUSH
51526: CALL_OW 250
51530: PPUSH
51531: LD_VAR 0 4
51535: PUSH
51536: LD_INT 1
51538: ARRAY
51539: PPUSH
51540: CALL_OW 251
51544: PPUSH
51545: CALL_OW 114
51549: GO 51642
// begin temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , area ] ] ) ;
51551: LD_ADDR_VAR 0 4
51555: PUSH
51556: LD_INT 81
51558: PUSH
51559: LD_VAR 0 1
51563: PUSH
51564: EMPTY
51565: LIST
51566: LIST
51567: PUSH
51568: LD_INT 95
51570: PUSH
51571: LD_VAR 0 13
51575: PUSH
51576: EMPTY
51577: LIST
51578: LIST
51579: PUSH
51580: EMPTY
51581: LIST
51582: LIST
51583: PPUSH
51584: CALL_OW 69
51588: ST_TO_ADDR
// if temp_list > 0 then
51589: LD_VAR 0 4
51593: PUSH
51594: LD_INT 0
51596: GREATER
51597: IFFALSE 51642
// begin temp_list_2 = DangerousUnits ( temp_list ) ;
51599: LD_ADDR_VAR 0 14
51603: PUSH
51604: LD_VAR 0 4
51608: PPUSH
51609: CALL 81944 0 1
51613: ST_TO_ADDR
// if temp_list_2 = 0 then
51614: LD_VAR 0 14
51618: PUSH
51619: LD_INT 0
51621: EQUAL
51622: IFFALSE 51642
// ComAttackUnit ( vehicles_list , temp_list [ 1 ] ) ;
51624: LD_VAR 0 7
51628: PPUSH
51629: LD_VAR 0 4
51633: PUSH
51634: LD_INT 1
51636: ARRAY
51637: PPUSH
51638: CALL_OW 115
// end ; end ; end else
51642: GO 52223
// begin if IsOk ( ai_depot [ base ] ) then
51644: LD_EXP 49
51648: PUSH
51649: LD_VAR 0 12
51653: ARRAY
51654: PPUSH
51655: CALL_OW 302
51659: IFFALSE 52068
// begin temp_list = ai_refuel_vehicles_list [ base ] ;
51661: LD_ADDR_VAR 0 4
51665: PUSH
51666: LD_EXP 71
51670: PUSH
51671: LD_VAR 0 12
51675: ARRAY
51676: ST_TO_ADDR
// for i in vehicles_to_consider diff ai_refuel_vehicles_list [ base ] do
51677: LD_ADDR_VAR 0 2
51681: PUSH
51682: LD_VAR 0 25
51686: PUSH
51687: LD_EXP 71
51691: PUSH
51692: LD_VAR 0 12
51696: ARRAY
51697: DIFF
51698: PUSH
51699: FOR_IN
51700: IFFALSE 51750
// if GetFuel ( i ) < 70 and GetEngine ( i ) = engine_combustion then
51702: LD_VAR 0 2
51706: PPUSH
51707: CALL_OW 261
51711: PUSH
51712: LD_INT 70
51714: LESS
51715: PUSH
51716: LD_VAR 0 2
51720: PPUSH
51721: CALL_OW 262
51725: PUSH
51726: LD_INT 1
51728: EQUAL
51729: AND
51730: IFFALSE 51748
// temp_list = temp_list ^ i ;
51732: LD_ADDR_VAR 0 4
51736: PUSH
51737: LD_VAR 0 4
51741: PUSH
51742: LD_VAR 0 2
51746: ADD
51747: ST_TO_ADDR
51748: GO 51699
51750: POP
51751: 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 ] ) ;
51752: LD_ADDR_VAR 0 4
51756: PUSH
51757: LD_VAR 0 4
51761: PUSH
51762: LD_EXP 69
51766: PUSH
51767: LD_VAR 0 12
51771: ARRAY
51772: PUSH
51773: LD_EXP 70
51777: PUSH
51778: LD_VAR 0 12
51782: ARRAY
51783: ADD
51784: PUSH
51785: LD_EXP 78
51789: PUSH
51790: LD_VAR 0 12
51794: ARRAY
51795: ADD
51796: PUSH
51797: LD_EXP 79
51801: PUSH
51802: LD_VAR 0 12
51806: ARRAY
51807: ADD
51808: DIFF
51809: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
51810: LD_ADDR_EXP 71
51814: PUSH
51815: LD_EXP 71
51819: PPUSH
51820: LD_VAR 0 12
51824: PPUSH
51825: LD_VAR 0 4
51829: PPUSH
51830: CALL_OW 1
51834: 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 ] ;
51835: LD_ADDR_VAR 0 4
51839: PUSH
51840: LD_EXP 71
51844: PUSH
51845: LD_VAR 0 12
51849: ARRAY
51850: PPUSH
51851: LD_INT 33
51853: PUSH
51854: LD_INT 1
51856: PUSH
51857: EMPTY
51858: LIST
51859: LIST
51860: PUSH
51861: LD_INT 58
51863: PUSH
51864: EMPTY
51865: LIST
51866: PUSH
51867: LD_INT 50
51869: PUSH
51870: EMPTY
51871: LIST
51872: PUSH
51873: EMPTY
51874: LIST
51875: LIST
51876: LIST
51877: PPUSH
51878: CALL_OW 72
51882: PUSH
51883: LD_EXP 95
51887: PUSH
51888: LD_VAR 0 12
51892: ARRAY
51893: DIFF
51894: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
51895: LD_ADDR_VAR 0 4
51899: PUSH
51900: LD_VAR 0 4
51904: PPUSH
51905: LD_VAR 0 3
51909: PPUSH
51910: LD_VAR 0 29
51914: PPUSH
51915: CALL 57338 0 3
51919: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
51920: LD_ADDR_VAR 0 3
51924: PUSH
51925: LD_VAR 0 4
51929: PUSH
51930: LD_INT 1
51932: ARRAY
51933: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
51934: LD_ADDR_VAR 0 29
51938: PUSH
51939: LD_VAR 0 4
51943: PUSH
51944: LD_INT 2
51946: ARRAY
51947: ST_TO_ADDR
// for i in ai_refuel_vehicles_list [ base ] do
51948: LD_ADDR_VAR 0 2
51952: PUSH
51953: LD_EXP 71
51957: PUSH
51958: LD_VAR 0 12
51962: ARRAY
51963: PUSH
51964: FOR_IN
51965: IFFALSE 52066
// begin if IsInArea ( i , area ) then
51967: LD_VAR 0 2
51971: PPUSH
51972: LD_VAR 0 13
51976: PPUSH
51977: CALL_OW 308
51981: IFFALSE 52025
// begin ComMoveUnit ( i , ai_depot [ base ] ) ;
51983: LD_VAR 0 2
51987: PPUSH
51988: LD_EXP 49
51992: PUSH
51993: LD_VAR 0 12
51997: ARRAY
51998: PPUSH
51999: CALL_OW 112
// AddComRefuel ( i , ai_depot [ base ] ) ;
52003: LD_VAR 0 2
52007: PPUSH
52008: LD_EXP 49
52012: PUSH
52013: LD_VAR 0 12
52017: ARRAY
52018: PPUSH
52019: CALL_OW 210
// end else
52023: GO 52064
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
52025: LD_VAR 0 2
52029: PPUSH
52030: LD_EXP 73
52034: PUSH
52035: LD_VAR 0 12
52039: ARRAY
52040: PUSH
52041: LD_INT 1
52043: ARRAY
52044: PPUSH
52045: LD_EXP 73
52049: PUSH
52050: LD_VAR 0 12
52054: ARRAY
52055: PUSH
52056: LD_INT 2
52058: ARRAY
52059: PPUSH
52060: CALL_OW 114
// end ;
52064: GO 51964
52066: POP
52067: 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
52068: LD_ADDR_VAR 0 2
52072: PUSH
52073: LD_VAR 0 25
52077: PPUSH
52078: LD_INT 3
52080: PUSH
52081: LD_INT 33
52083: PUSH
52084: LD_INT 1
52086: PUSH
52087: EMPTY
52088: LIST
52089: LIST
52090: PUSH
52091: EMPTY
52092: LIST
52093: LIST
52094: PPUSH
52095: CALL_OW 72
52099: PUSH
52100: LD_EXP 71
52104: PUSH
52105: LD_VAR 0 12
52109: ARRAY
52110: PUSH
52111: LD_EXP 69
52115: PUSH
52116: LD_VAR 0 12
52120: ARRAY
52121: ADD
52122: PUSH
52123: LD_EXP 70
52127: PUSH
52128: LD_VAR 0 12
52132: ARRAY
52133: ADD
52134: PUSH
52135: LD_EXP 78
52139: PUSH
52140: LD_VAR 0 12
52144: ARRAY
52145: ADD
52146: PUSH
52147: LD_EXP 79
52151: PUSH
52152: LD_VAR 0 12
52156: ARRAY
52157: ADD
52158: DIFF
52159: PUSH
52160: FOR_IN
52161: IFFALSE 52221
// if not IsInArea ( i , area ) then
52163: LD_VAR 0 2
52167: PPUSH
52168: LD_VAR 0 13
52172: PPUSH
52173: CALL_OW 308
52177: NOT
52178: IFFALSE 52219
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
52180: LD_VAR 0 2
52184: PPUSH
52185: LD_EXP 73
52189: PUSH
52190: LD_VAR 0 12
52194: ARRAY
52195: PUSH
52196: LD_INT 1
52198: ARRAY
52199: PPUSH
52200: LD_EXP 73
52204: PUSH
52205: LD_VAR 0 12
52209: ARRAY
52210: PUSH
52211: LD_INT 2
52213: ARRAY
52214: PPUSH
52215: CALL_OW 114
52219: GO 52160
52221: POP
52222: POP
// end ; free_parking_spots = [ ] ;
52223: LD_ADDR_VAR 0 10
52227: PUSH
52228: EMPTY
52229: ST_TO_ADDR
// parked_vehicles = [ ] ;
52230: LD_ADDR_VAR 0 16
52234: PUSH
52235: EMPTY
52236: ST_TO_ADDR
// vehicles_allowed_to_park = UnitFilter ( vehicles_to_consider , [ f_control , control_manual ] ) ;
52237: LD_ADDR_VAR 0 26
52241: PUSH
52242: LD_VAR 0 25
52246: PPUSH
52247: LD_INT 33
52249: PUSH
52250: LD_INT 1
52252: PUSH
52253: EMPTY
52254: LIST
52255: LIST
52256: PPUSH
52257: CALL_OW 72
52261: ST_TO_ADDR
// case ( vehicles_to_consider diff vehicles_allowed_to_park ) + 0 of 0 .. 1 :
52262: LD_VAR 0 25
52266: PUSH
52267: LD_VAR 0 26
52271: DIFF
52272: PUSH
52273: LD_INT 0
52275: PLUS
52276: PUSH
52277: LD_INT 0
52279: DOUBLE
52280: GREATEREQUAL
52281: IFFALSE 52289
52283: LD_INT 1
52285: DOUBLE
52286: LESSEQUAL
52287: IFTRUE 52291
52289: GO 52302
52291: POP
// human_pullback_hex_max_dist = 4 ; 2 :
52292: LD_ADDR_VAR 0 27
52296: PUSH
52297: LD_INT 4
52299: ST_TO_ADDR
52300: GO 52355
52302: LD_INT 2
52304: DOUBLE
52305: EQUAL
52306: IFTRUE 52310
52308: GO 52321
52310: POP
// human_pullback_hex_max_dist = 5 ; 3 .. 4 :
52311: LD_ADDR_VAR 0 27
52315: PUSH
52316: LD_INT 5
52318: ST_TO_ADDR
52319: GO 52355
52321: LD_INT 3
52323: DOUBLE
52324: GREATEREQUAL
52325: IFFALSE 52333
52327: LD_INT 4
52329: DOUBLE
52330: LESSEQUAL
52331: IFTRUE 52335
52333: GO 52346
52335: POP
// human_pullback_hex_max_dist = 6 ; else
52336: LD_ADDR_VAR 0 27
52340: PUSH
52341: LD_INT 6
52343: ST_TO_ADDR
52344: GO 52355
52346: POP
// human_pullback_hex_max_dist = 7 ; end ;
52347: LD_ADDR_VAR 0 27
52351: PUSH
52352: LD_INT 7
52354: ST_TO_ADDR
// for i in ai_vehicle_pullback_hexes [ base ] do
52355: LD_ADDR_VAR 0 2
52359: PUSH
52360: LD_EXP 72
52364: PUSH
52365: LD_VAR 0 12
52369: ARRAY
52370: PUSH
52371: FOR_IN
52372: IFFALSE 52593
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
52374: LD_ADDR_VAR 0 6
52378: PUSH
52379: LD_VAR 0 2
52383: PUSH
52384: LD_INT 1
52386: ARRAY
52387: PPUSH
52388: LD_VAR 0 2
52392: PUSH
52393: LD_INT 2
52395: ARRAY
52396: PPUSH
52397: CALL_OW 428
52401: ST_TO_ADDR
// if temp_unit in vehicles_allowed_to_park then
52402: LD_VAR 0 6
52406: PUSH
52407: LD_VAR 0 26
52411: IN
52412: IFFALSE 52432
// begin parked_vehicles = parked_vehicles ^ temp_unit ;
52414: LD_ADDR_VAR 0 16
52418: PUSH
52419: LD_VAR 0 16
52423: PUSH
52424: LD_VAR 0 6
52428: ADD
52429: ST_TO_ADDR
// end else
52430: GO 52591
// if temp_unit = 0 then
52432: LD_VAR 0 6
52436: PUSH
52437: LD_INT 0
52439: EQUAL
52440: IFFALSE 52467
// free_parking_spots = Insert ( free_parking_spots , 1 , i ) else
52442: LD_ADDR_VAR 0 10
52446: PUSH
52447: LD_VAR 0 10
52451: PPUSH
52452: LD_INT 1
52454: PPUSH
52455: LD_VAR 0 2
52459: PPUSH
52460: CALL_OW 2
52464: ST_TO_ADDR
52465: GO 52591
// if temp_unit > 0 then
52467: LD_VAR 0 6
52471: PUSH
52472: LD_INT 0
52474: GREATER
52475: IFFALSE 52591
// if 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
52477: LD_VAR 0 6
52481: PPUSH
52482: CALL_OW 247
52486: PUSH
52487: LD_INT 3
52489: EQUAL
52490: PUSH
52491: LD_VAR 0 6
52495: PPUSH
52496: CALL_OW 247
52500: PUSH
52501: LD_INT 2
52503: EQUAL
52504: PUSH
52505: LD_VAR 0 6
52509: PPUSH
52510: CALL_OW 263
52514: PUSH
52515: LD_INT 1
52517: EQUAL
52518: PUSH
52519: LD_VAR 0 6
52523: PPUSH
52524: CALL_OW 311
52528: PUSH
52529: LD_INT 0
52531: EQUAL
52532: AND
52533: PUSH
52534: LD_VAR 0 6
52538: PPUSH
52539: CALL_OW 263
52543: PUSH
52544: LD_INT 2
52546: EQUAL
52547: PUSH
52548: LD_VAR 0 6
52552: PPUSH
52553: CALL_OW 312
52557: PUSH
52558: LD_INT 0
52560: EQUAL
52561: AND
52562: OR
52563: AND
52564: OR
52565: NOT
52566: IFFALSE 52591
// free_parking_spots = Insert ( free_parking_spots , 1 , i ) ;
52568: LD_ADDR_VAR 0 10
52572: PUSH
52573: LD_VAR 0 10
52577: PPUSH
52578: LD_INT 1
52580: PPUSH
52581: LD_VAR 0 2
52585: PPUSH
52586: CALL_OW 2
52590: ST_TO_ADDR
// end ;
52591: GO 52371
52593: POP
52594: POP
// free_behemoth_parking_spots = [ ] ;
52595: LD_ADDR_VAR 0 22
52599: PUSH
52600: EMPTY
52601: ST_TO_ADDR
// parked_behemoths = [ ] ;
52602: LD_ADDR_VAR 0 23
52606: PUSH
52607: EMPTY
52608: ST_TO_ADDR
// for i in ai_behemoth_parking_hexes [ base ] do
52609: LD_ADDR_VAR 0 2
52613: PUSH
52614: LD_EXP 104
52618: PUSH
52619: LD_VAR 0 12
52623: ARRAY
52624: PUSH
52625: FOR_IN
52626: IFFALSE 52907
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
52628: LD_ADDR_VAR 0 6
52632: PUSH
52633: LD_VAR 0 2
52637: PUSH
52638: LD_INT 1
52640: ARRAY
52641: PPUSH
52642: LD_VAR 0 2
52646: PUSH
52647: LD_INT 2
52649: ARRAY
52650: PPUSH
52651: CALL_OW 428
52655: ST_TO_ADDR
// k = false ;
52656: LD_ADDR_VAR 0 11
52660: PUSH
52661: LD_INT 0
52663: ST_TO_ADDR
// if temp_unit > 0 then
52664: LD_VAR 0 6
52668: PUSH
52669: LD_INT 0
52671: GREATER
52672: IFFALSE 52712
// if GetType ( temp_unit ) = unit_vehicle and GetWeapon ( temp_unit ) = 59 then
52674: LD_VAR 0 6
52678: PPUSH
52679: CALL_OW 247
52683: PUSH
52684: LD_INT 2
52686: EQUAL
52687: PUSH
52688: LD_VAR 0 6
52692: PPUSH
52693: CALL_OW 264
52697: PUSH
52698: LD_INT 59
52700: EQUAL
52701: AND
52702: IFFALSE 52712
// k = true ;
52704: LD_ADDR_VAR 0 11
52708: PUSH
52709: LD_INT 1
52711: ST_TO_ADDR
// if temp_unit > 0 and k then
52712: LD_VAR 0 6
52716: PUSH
52717: LD_INT 0
52719: GREATER
52720: PUSH
52721: LD_VAR 0 11
52725: AND
52726: IFFALSE 52746
// begin parked_behemoths = parked_behemoths ^ temp_unit ;
52728: LD_ADDR_VAR 0 23
52732: PUSH
52733: LD_VAR 0 23
52737: PUSH
52738: LD_VAR 0 6
52742: ADD
52743: ST_TO_ADDR
// end else
52744: GO 52905
// if temp_unit = 0 then
52746: LD_VAR 0 6
52750: PUSH
52751: LD_INT 0
52753: EQUAL
52754: IFFALSE 52781
// free_behemoth_parking_spots = Insert ( free_behemoth_parking_spots , 1 , i ) else
52756: LD_ADDR_VAR 0 22
52760: PUSH
52761: LD_VAR 0 22
52765: PPUSH
52766: LD_INT 1
52768: PPUSH
52769: LD_VAR 0 2
52773: PPUSH
52774: CALL_OW 2
52778: ST_TO_ADDR
52779: GO 52905
// if temp_unit > 0 then
52781: LD_VAR 0 6
52785: PUSH
52786: LD_INT 0
52788: GREATER
52789: IFFALSE 52905
// if 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
52791: LD_VAR 0 6
52795: PPUSH
52796: CALL_OW 247
52800: PUSH
52801: LD_INT 3
52803: EQUAL
52804: PUSH
52805: LD_VAR 0 6
52809: PPUSH
52810: CALL_OW 247
52814: PUSH
52815: LD_INT 2
52817: EQUAL
52818: PUSH
52819: LD_VAR 0 6
52823: PPUSH
52824: CALL_OW 263
52828: PUSH
52829: LD_INT 1
52831: EQUAL
52832: PUSH
52833: LD_VAR 0 6
52837: PPUSH
52838: CALL_OW 311
52842: PUSH
52843: LD_INT 0
52845: EQUAL
52846: AND
52847: PUSH
52848: LD_VAR 0 6
52852: PPUSH
52853: CALL_OW 263
52857: PUSH
52858: LD_INT 2
52860: EQUAL
52861: PUSH
52862: LD_VAR 0 6
52866: PPUSH
52867: CALL_OW 312
52871: PUSH
52872: LD_INT 0
52874: EQUAL
52875: AND
52876: OR
52877: AND
52878: OR
52879: NOT
52880: IFFALSE 52905
// free_behemoth_parking_spots = Insert ( free_behemoth_parking_spots , 1 , i ) ;
52882: LD_ADDR_VAR 0 22
52886: PUSH
52887: LD_VAR 0 22
52891: PPUSH
52892: LD_INT 1
52894: PPUSH
52895: LD_VAR 0 2
52899: PPUSH
52900: CALL_OW 2
52904: ST_TO_ADDR
// end ;
52905: GO 52625
52907: POP
52908: POP
// if under_attack then
52909: LD_VAR 0 9
52913: IFFALSE 53500
// begin vehicles_to_park = ( ai_vehicles_being_repaired [ base ] union ai_retreating_vehicles_defend [ base ] ) isect vehicles_allowed_to_park ;
52915: LD_ADDR_VAR 0 28
52919: PUSH
52920: LD_EXP 70
52924: PUSH
52925: LD_VAR 0 12
52929: ARRAY
52930: PUSH
52931: LD_EXP 69
52935: PUSH
52936: LD_VAR 0 12
52940: ARRAY
52941: UNION
52942: PUSH
52943: LD_VAR 0 26
52947: ISECT
52948: ST_TO_ADDR
// vehicles_to_park = UnitFilter ( vehicles_to_park diff parked_vehicles , [ f_ok ] ) ;
52949: LD_ADDR_VAR 0 28
52953: PUSH
52954: LD_VAR 0 28
52958: PUSH
52959: LD_VAR 0 16
52963: DIFF
52964: PPUSH
52965: LD_INT 50
52967: PUSH
52968: EMPTY
52969: LIST
52970: PPUSH
52971: CALL_OW 72
52975: 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 ] ) ;
52976: LD_ADDR_VAR 0 28
52980: PUSH
52981: LD_VAR 0 28
52985: PUSH
52986: LD_EXP 95
52990: PUSH
52991: LD_VAR 0 12
52995: ARRAY
52996: PUSH
52997: LD_VAR 0 16
53001: PUSH
53002: LD_EXP 71
53006: PUSH
53007: LD_VAR 0 12
53011: ARRAY
53012: ADD
53013: PUSH
53014: LD_EXP 79
53018: PUSH
53019: LD_VAR 0 12
53023: ARRAY
53024: ADD
53025: PUSH
53026: LD_EXP 78
53030: PUSH
53031: LD_VAR 0 12
53035: ARRAY
53036: ADD
53037: DIFF
53038: PPUSH
53039: LD_INT 50
53041: PUSH
53042: EMPTY
53043: LIST
53044: PPUSH
53045: CALL_OW 72
53049: UNION
53050: ST_TO_ADDR
// temp_list = [ ] ;
53051: LD_ADDR_VAR 0 4
53055: PUSH
53056: EMPTY
53057: ST_TO_ADDR
// temp_list_3 = ( ai_vehicles_being_repaired [ base ] union ai_retreating_vehicles_defend [ base ] ) isect parked_vehicles ;
53058: LD_ADDR_VAR 0 5
53062: PUSH
53063: LD_EXP 70
53067: PUSH
53068: LD_VAR 0 12
53072: ARRAY
53073: PUSH
53074: LD_EXP 69
53078: PUSH
53079: LD_VAR 0 12
53083: ARRAY
53084: UNION
53085: PUSH
53086: LD_VAR 0 16
53090: ISECT
53091: ST_TO_ADDR
// temp_list_3 = UnitFilter ( temp_list_3 , [ f_ok ] ) diff ai_control_tower_vehicles [ base ] ;
53092: LD_ADDR_VAR 0 5
53096: PUSH
53097: LD_VAR 0 5
53101: PPUSH
53102: LD_INT 50
53104: PUSH
53105: EMPTY
53106: LIST
53107: PPUSH
53108: CALL_OW 72
53112: PUSH
53113: LD_EXP 95
53117: PUSH
53118: LD_VAR 0 12
53122: ARRAY
53123: DIFF
53124: ST_TO_ADDR
// for i in temp_list_3 do
53125: LD_ADDR_VAR 0 2
53129: PUSH
53130: LD_VAR 0 5
53134: PUSH
53135: FOR_IN
53136: IFFALSE 53193
// if UnitShoot ( i ) > 0 then
53138: LD_VAR 0 2
53142: PPUSH
53143: CALL_OW 504
53147: PUSH
53148: LD_INT 0
53150: GREATER
53151: IFFALSE 53191
// if GetSide ( UnitShoot ( i ) ) <> side then
53153: LD_VAR 0 2
53157: PPUSH
53158: CALL_OW 504
53162: PPUSH
53163: CALL_OW 255
53167: PUSH
53168: LD_VAR 0 1
53172: NONEQUAL
53173: IFFALSE 53191
// temp_list = temp_list ^ i ;
53175: LD_ADDR_VAR 0 4
53179: PUSH
53180: LD_VAR 0 4
53184: PUSH
53185: LD_VAR 0 2
53189: ADD
53190: ST_TO_ADDR
53191: GO 53135
53193: POP
53194: POP
// for i in ai_mechanics_defend [ base ] do
53195: LD_ADDR_VAR 0 2
53199: PUSH
53200: LD_EXP 43
53204: PUSH
53205: LD_VAR 0 12
53209: ARRAY
53210: PUSH
53211: FOR_IN
53212: IFFALSE 53290
// if UnitShoot ( i ) > 0 then
53214: LD_VAR 0 2
53218: PPUSH
53219: CALL_OW 504
53223: PUSH
53224: LD_INT 0
53226: GREATER
53227: IFFALSE 53288
// if GetSide ( UnitShoot ( i ) ) <> side then
53229: LD_VAR 0 2
53233: PPUSH
53234: CALL_OW 504
53238: PPUSH
53239: CALL_OW 255
53243: PUSH
53244: LD_VAR 0 1
53248: NONEQUAL
53249: IFFALSE 53288
// temp_list = temp_list union UnitFilter ( temp_list_3 , [ f_dist , i , 5 ] ) ;
53251: LD_ADDR_VAR 0 4
53255: PUSH
53256: LD_VAR 0 4
53260: PUSH
53261: LD_VAR 0 5
53265: PPUSH
53266: LD_INT 91
53268: PUSH
53269: LD_VAR 0 2
53273: PUSH
53274: LD_INT 5
53276: PUSH
53277: EMPTY
53278: LIST
53279: LIST
53280: LIST
53281: PPUSH
53282: CALL_OW 72
53286: UNION
53287: ST_TO_ADDR
53288: GO 53211
53290: POP
53291: POP
// for i in temp_list_3 diff temp_list do
53292: LD_ADDR_VAR 0 2
53296: PUSH
53297: LD_VAR 0 5
53301: PUSH
53302: LD_VAR 0 4
53306: DIFF
53307: PUSH
53308: FOR_IN
53309: IFFALSE 53390
// begin if not i in ( ai_refuel_vehicles_list [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) then
53311: LD_VAR 0 2
53315: PUSH
53316: LD_EXP 71
53320: PUSH
53321: LD_VAR 0 12
53325: ARRAY
53326: PUSH
53327: LD_EXP 78
53331: PUSH
53332: LD_VAR 0 12
53336: ARRAY
53337: ADD
53338: PUSH
53339: LD_EXP 79
53343: PUSH
53344: LD_VAR 0 12
53348: ARRAY
53349: ADD
53350: IN
53351: NOT
53352: IFFALSE 53388
// begin k = IsDrivenBy ( i ) ;
53354: LD_ADDR_VAR 0 11
53358: PUSH
53359: LD_VAR 0 2
53363: PPUSH
53364: CALL_OW 311
53368: ST_TO_ADDR
// if k > 0 then
53369: LD_VAR 0 11
53373: PUSH
53374: LD_INT 0
53376: GREATER
53377: IFFALSE 53388
// ComExitVehicle ( k ) ;
53379: LD_VAR 0 11
53383: PPUSH
53384: CALL_OW 121
// end ; end ;
53388: GO 53308
53390: POP
53391: POP
// temp_list = UnitFilter ( temp_list ^ vehicles_to_park , [ [ f_control , control_manual ] , [ f_empty ] ] ) diff ai_control_tower_vehicles [ base ] ;
53392: LD_ADDR_VAR 0 4
53396: PUSH
53397: LD_VAR 0 4
53401: PUSH
53402: LD_VAR 0 28
53406: ADD
53407: PPUSH
53408: LD_INT 33
53410: PUSH
53411: LD_INT 1
53413: PUSH
53414: EMPTY
53415: LIST
53416: LIST
53417: PUSH
53418: LD_INT 58
53420: PUSH
53421: EMPTY
53422: LIST
53423: PUSH
53424: EMPTY
53425: LIST
53426: LIST
53427: PPUSH
53428: CALL_OW 72
53432: PUSH
53433: LD_EXP 95
53437: PUSH
53438: LD_VAR 0 12
53442: ARRAY
53443: DIFF
53444: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
53445: LD_ADDR_VAR 0 4
53449: PUSH
53450: LD_VAR 0 4
53454: PPUSH
53455: LD_VAR 0 3
53459: PPUSH
53460: LD_VAR 0 29
53464: PPUSH
53465: CALL 57338 0 3
53469: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
53470: LD_ADDR_VAR 0 3
53474: PUSH
53475: LD_VAR 0 4
53479: PUSH
53480: LD_INT 1
53482: ARRAY
53483: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
53484: LD_ADDR_VAR 0 29
53488: PUSH
53489: LD_VAR 0 4
53493: PUSH
53494: LD_INT 2
53496: ARRAY
53497: ST_TO_ADDR
// end else
53498: GO 53788
// 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 ] ) ;
53500: LD_ADDR_VAR 0 28
53504: PUSH
53505: LD_VAR 0 26
53509: PUSH
53510: LD_VAR 0 16
53514: PUSH
53515: LD_EXP 71
53519: PUSH
53520: LD_VAR 0 12
53524: ARRAY
53525: ADD
53526: PUSH
53527: LD_EXP 79
53531: PUSH
53532: LD_VAR 0 12
53536: ARRAY
53537: ADD
53538: PUSH
53539: LD_EXP 78
53543: PUSH
53544: LD_VAR 0 12
53548: ARRAY
53549: ADD
53550: DIFF
53551: PPUSH
53552: LD_INT 50
53554: PUSH
53555: EMPTY
53556: LIST
53557: PPUSH
53558: CALL_OW 72
53562: ST_TO_ADDR
// for i in parked_vehicles do
53563: LD_ADDR_VAR 0 2
53567: PUSH
53568: LD_VAR 0 16
53572: PUSH
53573: FOR_IN
53574: IFFALSE 53686
// begin if not i in ( ai_refuel_vehicles_list [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) then
53576: LD_VAR 0 2
53580: PUSH
53581: LD_EXP 71
53585: PUSH
53586: LD_VAR 0 12
53590: ARRAY
53591: PUSH
53592: LD_EXP 78
53596: PUSH
53597: LD_VAR 0 12
53601: ARRAY
53602: ADD
53603: PUSH
53604: LD_EXP 79
53608: PUSH
53609: LD_VAR 0 12
53613: ARRAY
53614: ADD
53615: IN
53616: NOT
53617: IFFALSE 53684
// begin k = IsDrivenBy ( i ) ;
53619: LD_ADDR_VAR 0 11
53623: PUSH
53624: LD_VAR 0 2
53628: PPUSH
53629: CALL_OW 311
53633: ST_TO_ADDR
// if k > 0 and not ( k in remote_mechanics and i in ai_control_tower_vehicles [ base ] ) then
53634: LD_VAR 0 11
53638: PUSH
53639: LD_INT 0
53641: GREATER
53642: PUSH
53643: LD_VAR 0 11
53647: PUSH
53648: LD_VAR 0 15
53652: IN
53653: PUSH
53654: LD_VAR 0 2
53658: PUSH
53659: LD_EXP 95
53663: PUSH
53664: LD_VAR 0 12
53668: ARRAY
53669: IN
53670: AND
53671: NOT
53672: AND
53673: IFFALSE 53684
// begin ComExitVehicle ( k ) ;
53675: LD_VAR 0 11
53679: PPUSH
53680: CALL_OW 121
// end ; end ; end ;
53684: GO 53573
53686: POP
53687: POP
// temp_list = UnitFilter ( vehicles_to_park , [ [ f_control , control_manual ] , [ f_empty ] ] ) diff ai_control_tower_vehicles [ base ] ;
53688: LD_ADDR_VAR 0 4
53692: PUSH
53693: LD_VAR 0 28
53697: PPUSH
53698: LD_INT 33
53700: PUSH
53701: LD_INT 1
53703: PUSH
53704: EMPTY
53705: LIST
53706: LIST
53707: PUSH
53708: LD_INT 58
53710: PUSH
53711: EMPTY
53712: LIST
53713: PUSH
53714: EMPTY
53715: LIST
53716: LIST
53717: PPUSH
53718: CALL_OW 72
53722: PUSH
53723: LD_EXP 95
53727: PUSH
53728: LD_VAR 0 12
53732: ARRAY
53733: DIFF
53734: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
53735: LD_ADDR_VAR 0 4
53739: PUSH
53740: LD_VAR 0 4
53744: PPUSH
53745: LD_VAR 0 3
53749: PPUSH
53750: LD_VAR 0 29
53754: PPUSH
53755: CALL 57338 0 3
53759: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
53760: LD_ADDR_VAR 0 3
53764: PUSH
53765: LD_VAR 0 4
53769: PUSH
53770: LD_INT 1
53772: ARRAY
53773: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
53774: LD_ADDR_VAR 0 29
53778: PUSH
53779: LD_VAR 0 4
53783: PUSH
53784: LD_INT 2
53786: ARRAY
53787: ST_TO_ADDR
// end ; while vehicles_to_park > 0 do
53788: LD_VAR 0 28
53792: PUSH
53793: LD_INT 0
53795: GREATER
53796: IFFALSE 53980
// begin if free_parking_spots = 0 then
53798: LD_VAR 0 10
53802: PUSH
53803: LD_INT 0
53805: EQUAL
53806: IFFALSE 53810
// break ;
53808: GO 53980
// temp_list = [ ] ;
53810: LD_ADDR_VAR 0 4
53814: PUSH
53815: EMPTY
53816: ST_TO_ADDR
// for k in free_parking_spots do
53817: LD_ADDR_VAR 0 11
53821: PUSH
53822: LD_VAR 0 10
53826: PUSH
53827: FOR_IN
53828: IFFALSE 53875
// temp_list = temp_list ^ GetDistUnitXY ( vehicles_to_park [ 1 ] , k [ 1 ] , k [ 2 ] ) ;
53830: LD_ADDR_VAR 0 4
53834: PUSH
53835: LD_VAR 0 4
53839: PUSH
53840: LD_VAR 0 28
53844: PUSH
53845: LD_INT 1
53847: ARRAY
53848: PPUSH
53849: LD_VAR 0 11
53853: PUSH
53854: LD_INT 1
53856: ARRAY
53857: PPUSH
53858: LD_VAR 0 11
53862: PUSH
53863: LD_INT 2
53865: ARRAY
53866: PPUSH
53867: CALL_OW 297
53871: ADD
53872: ST_TO_ADDR
53873: GO 53827
53875: POP
53876: POP
// temp_list = WorstFromListByList ( free_parking_spots , temp_list ) ;
53877: LD_ADDR_VAR 0 4
53881: PUSH
53882: LD_VAR 0 10
53886: PPUSH
53887: LD_VAR 0 4
53891: PPUSH
53892: CALL_OW 78
53896: ST_TO_ADDR
// ComMoveXY ( vehicles_to_park [ 1 ] , temp_list [ 1 ] , temp_list [ 2 ] ) ;
53897: LD_VAR 0 28
53901: PUSH
53902: LD_INT 1
53904: ARRAY
53905: PPUSH
53906: LD_VAR 0 4
53910: PUSH
53911: LD_INT 1
53913: ARRAY
53914: PPUSH
53915: LD_VAR 0 4
53919: PUSH
53920: LD_INT 2
53922: ARRAY
53923: PPUSH
53924: CALL_OW 111
// AddComHold ( vehicles_to_park [ 1 ] ) ;
53928: LD_VAR 0 28
53932: PUSH
53933: LD_INT 1
53935: ARRAY
53936: PPUSH
53937: CALL_OW 200
// free_parking_spots = free_parking_spots diff [ temp_list ] ;
53941: LD_ADDR_VAR 0 10
53945: PUSH
53946: LD_VAR 0 10
53950: PUSH
53951: LD_VAR 0 4
53955: PUSH
53956: EMPTY
53957: LIST
53958: DIFF
53959: ST_TO_ADDR
// vehicles_to_park = Delete ( vehicles_to_park , 1 ) ;
53960: LD_ADDR_VAR 0 28
53964: PUSH
53965: LD_VAR 0 28
53969: PPUSH
53970: LD_INT 1
53972: PPUSH
53973: CALL_OW 3
53977: ST_TO_ADDR
// end ;
53978: GO 53788
// if not under_attack then
53980: LD_VAR 0 9
53984: NOT
53985: IFFALSE 54168
// begin for i in ai_behemoths [ base ] diff parked_behemoths do
53987: LD_ADDR_VAR 0 2
53991: PUSH
53992: LD_EXP 103
53996: PUSH
53997: LD_VAR 0 12
54001: ARRAY
54002: PUSH
54003: LD_VAR 0 23
54007: DIFF
54008: PUSH
54009: FOR_IN
54010: IFFALSE 54166
// begin if free_behemoth_parking_spots > 0 then
54012: LD_VAR 0 22
54016: PUSH
54017: LD_INT 0
54019: GREATER
54020: IFFALSE 54162
// begin temp_list = [ ] ;
54022: LD_ADDR_VAR 0 4
54026: PUSH
54027: EMPTY
54028: ST_TO_ADDR
// for k in free_behemoth_parking_spots do
54029: LD_ADDR_VAR 0 11
54033: PUSH
54034: LD_VAR 0 22
54038: PUSH
54039: FOR_IN
54040: IFFALSE 54083
// temp_list = temp_list ^ GetDistUnitXY ( i , k [ 1 ] , k [ 2 ] ) ;
54042: LD_ADDR_VAR 0 4
54046: PUSH
54047: LD_VAR 0 4
54051: PUSH
54052: LD_VAR 0 2
54056: PPUSH
54057: LD_VAR 0 11
54061: PUSH
54062: LD_INT 1
54064: ARRAY
54065: PPUSH
54066: LD_VAR 0 11
54070: PUSH
54071: LD_INT 2
54073: ARRAY
54074: PPUSH
54075: CALL_OW 297
54079: ADD
54080: ST_TO_ADDR
54081: GO 54039
54083: POP
54084: POP
// temp_list = WorstFromListByList ( free_behemoth_parking_spots , temp_list ) ;
54085: LD_ADDR_VAR 0 4
54089: PUSH
54090: LD_VAR 0 22
54094: PPUSH
54095: LD_VAR 0 4
54099: PPUSH
54100: CALL_OW 78
54104: ST_TO_ADDR
// ComMoveXY ( i , temp_list [ 1 ] , temp_list [ 2 ] ) ;
54105: LD_VAR 0 2
54109: PPUSH
54110: LD_VAR 0 4
54114: PUSH
54115: LD_INT 1
54117: ARRAY
54118: PPUSH
54119: LD_VAR 0 4
54123: PUSH
54124: LD_INT 2
54126: ARRAY
54127: PPUSH
54128: CALL_OW 111
// AddComHold ( i ) ;
54132: LD_VAR 0 2
54136: PPUSH
54137: CALL_OW 200
// free_behemoth_parking_spots = free_behemoth_parking_spots diff [ temp_list ] ;
54141: LD_ADDR_VAR 0 22
54145: PUSH
54146: LD_VAR 0 22
54150: PUSH
54151: LD_VAR 0 4
54155: PUSH
54156: EMPTY
54157: LIST
54158: DIFF
54159: ST_TO_ADDR
// end else
54160: GO 54164
// break ;
54162: GO 54166
// end ;
54164: GO 54009
54166: POP
54167: POP
// end ; if under_attack then
54168: LD_VAR 0 9
54172: IFFALSE 54312
// begin for i in UnitFilter ( ( ai_retreating_vehicles_defend [ base ] union ai_vehicles_being_repaired [ base ] ) diff vehicles_allowed_to_park , [ f_ok ] ) do
54174: LD_ADDR_VAR 0 2
54178: PUSH
54179: LD_EXP 69
54183: PUSH
54184: LD_VAR 0 12
54188: ARRAY
54189: PUSH
54190: LD_EXP 70
54194: PUSH
54195: LD_VAR 0 12
54199: ARRAY
54200: UNION
54201: PUSH
54202: LD_VAR 0 26
54206: DIFF
54207: PPUSH
54208: LD_INT 50
54210: PUSH
54211: EMPTY
54212: LIST
54213: PPUSH
54214: CALL_OW 72
54218: PUSH
54219: FOR_IN
54220: IFFALSE 54310
// begin if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > human_pullback_hex_max_dist then
54222: LD_VAR 0 2
54226: PPUSH
54227: LD_EXP 73
54231: PUSH
54232: LD_VAR 0 12
54236: ARRAY
54237: PUSH
54238: LD_INT 1
54240: ARRAY
54241: PPUSH
54242: LD_EXP 73
54246: PUSH
54247: LD_VAR 0 12
54251: ARRAY
54252: PUSH
54253: LD_INT 2
54255: ARRAY
54256: PPUSH
54257: CALL_OW 297
54261: PUSH
54262: LD_VAR 0 27
54266: GREATER
54267: IFFALSE 54308
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
54269: LD_VAR 0 2
54273: PPUSH
54274: LD_EXP 73
54278: PUSH
54279: LD_VAR 0 12
54283: ARRAY
54284: PUSH
54285: LD_INT 1
54287: ARRAY
54288: PPUSH
54289: LD_EXP 73
54293: PUSH
54294: LD_VAR 0 12
54298: ARRAY
54299: PUSH
54300: LD_INT 2
54302: ARRAY
54303: PPUSH
54304: CALL_OW 111
// end ;
54308: GO 54219
54310: POP
54311: POP
// end ; if under_attack then
54312: LD_VAR 0 9
54316: IFFALSE 54437
// 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 ] ) ;
54318: LD_ADDR_VAR 0 8
54322: PUSH
54323: LD_VAR 0 16
54327: PUSH
54328: LD_VAR 0 25
54332: PUSH
54333: LD_VAR 0 26
54337: DIFF
54338: PPUSH
54339: LD_INT 92
54341: PUSH
54342: LD_EXP 73
54346: PUSH
54347: LD_VAR 0 12
54351: ARRAY
54352: PUSH
54353: LD_INT 1
54355: ARRAY
54356: PUSH
54357: LD_EXP 73
54361: PUSH
54362: LD_VAR 0 12
54366: ARRAY
54367: PUSH
54368: LD_INT 2
54370: ARRAY
54371: PUSH
54372: LD_VAR 0 27
54376: PUSH
54377: EMPTY
54378: LIST
54379: LIST
54380: LIST
54381: LIST
54382: PPUSH
54383: CALL_OW 72
54387: ADD
54388: 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 ] ) ;
54389: LD_ADDR_VAR 0 8
54393: PUSH
54394: LD_VAR 0 8
54398: PUSH
54399: LD_EXP 71
54403: PUSH
54404: LD_VAR 0 12
54408: ARRAY
54409: PUSH
54410: LD_EXP 79
54414: PUSH
54415: LD_VAR 0 12
54419: ARRAY
54420: ADD
54421: PUSH
54422: LD_EXP 78
54426: PUSH
54427: LD_VAR 0 12
54431: ARRAY
54432: ADD
54433: DIFF
54434: ST_TO_ADDR
// end else
54435: GO 54628
// 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 ] ) ;
54437: LD_ADDR_VAR 0 8
54441: PUSH
54442: LD_VAR 0 25
54446: PUSH
54447: LD_EXP 71
54451: PUSH
54452: LD_VAR 0 12
54456: ARRAY
54457: PUSH
54458: LD_EXP 79
54462: PUSH
54463: LD_VAR 0 12
54467: ARRAY
54468: ADD
54469: PUSH
54470: LD_EXP 78
54474: PUSH
54475: LD_VAR 0 12
54479: ARRAY
54480: ADD
54481: DIFF
54482: ST_TO_ADDR
// allowed_to_repair_vehicles = allowed_to_repair_vehicles ^ UnitFilter ( ai_cargo_bay [ base ] diff 0 , [ f_inarea , area ] ) ;
54483: LD_ADDR_VAR 0 8
54487: PUSH
54488: LD_VAR 0 8
54492: PUSH
54493: LD_EXP 85
54497: PUSH
54498: LD_VAR 0 12
54502: ARRAY
54503: PUSH
54504: LD_INT 0
54506: DIFF
54507: PPUSH
54508: LD_INT 95
54510: PUSH
54511: LD_VAR 0 13
54515: PUSH
54516: EMPTY
54517: LIST
54518: LIST
54519: PPUSH
54520: CALL_OW 72
54524: ADD
54525: ST_TO_ADDR
// i = 1 ;
54526: LD_ADDR_VAR 0 2
54530: PUSH
54531: LD_INT 1
54533: ST_TO_ADDR
// while i <= allowed_to_repair_vehicles do
54534: LD_VAR 0 2
54538: PUSH
54539: LD_VAR 0 8
54543: LESSEQUAL
54544: IFFALSE 54628
// begin if not IsOk ( allowed_to_repair_vehicles [ i ] ) and GetDistUnitArea ( allowed_to_repair_vehicles [ i ] , area ) > 7 then
54546: LD_VAR 0 8
54550: PUSH
54551: LD_VAR 0 2
54555: ARRAY
54556: PPUSH
54557: CALL_OW 302
54561: NOT
54562: PUSH
54563: LD_VAR 0 8
54567: PUSH
54568: LD_VAR 0 2
54572: ARRAY
54573: PPUSH
54574: LD_VAR 0 13
54578: PPUSH
54579: CALL_OW 299
54583: PUSH
54584: LD_INT 7
54586: GREATER
54587: AND
54588: IFFALSE 54612
// begin allowed_to_repair_vehicles = Delete ( allowed_to_repair_vehicles , i ) ;
54590: LD_ADDR_VAR 0 8
54594: PUSH
54595: LD_VAR 0 8
54599: PPUSH
54600: LD_VAR 0 2
54604: PPUSH
54605: CALL_OW 3
54609: ST_TO_ADDR
// continue ;
54610: GO 54534
// end ; i = i + 1 ;
54612: LD_ADDR_VAR 0 2
54616: PUSH
54617: LD_VAR 0 2
54621: PUSH
54622: LD_INT 1
54624: PLUS
54625: ST_TO_ADDR
// end ;
54626: GO 54534
// end ; allowed_to_repair_vehicles = UnitFilter ( allowed_to_repair_vehicles , [ [ f_not , [ f_lives , 1000 ] ] , [ f_or , [ f_not , [ f_ok ] ] , [ f_inarea , area ] ] ] ) ;
54628: LD_ADDR_VAR 0 8
54632: PUSH
54633: LD_VAR 0 8
54637: PPUSH
54638: LD_INT 3
54640: PUSH
54641: LD_INT 24
54643: PUSH
54644: LD_INT 1000
54646: PUSH
54647: EMPTY
54648: LIST
54649: LIST
54650: PUSH
54651: EMPTY
54652: LIST
54653: LIST
54654: PUSH
54655: LD_INT 2
54657: PUSH
54658: LD_INT 3
54660: PUSH
54661: LD_INT 50
54663: PUSH
54664: EMPTY
54665: LIST
54666: PUSH
54667: EMPTY
54668: LIST
54669: LIST
54670: PUSH
54671: LD_INT 95
54673: PUSH
54674: LD_VAR 0 13
54678: PUSH
54679: EMPTY
54680: LIST
54681: LIST
54682: PUSH
54683: EMPTY
54684: LIST
54685: LIST
54686: LIST
54687: PUSH
54688: EMPTY
54689: LIST
54690: LIST
54691: PPUSH
54692: CALL_OW 72
54696: ST_TO_ADDR
// if ai_crane [ base ] > 0 then
54697: LD_EXP 88
54701: PUSH
54702: LD_VAR 0 12
54706: ARRAY
54707: PUSH
54708: LD_INT 0
54710: GREATER
54711: IFFALSE 55325
// begin k = false ;
54713: LD_ADDR_VAR 0 11
54717: PUSH
54718: LD_INT 0
54720: 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
54721: LD_EXP 91
54725: PUSH
54726: LD_VAR 0 12
54730: ARRAY
54731: PUSH
54732: LD_EXP 88
54736: PUSH
54737: LD_VAR 0 12
54741: ARRAY
54742: PPUSH
54743: LD_EXP 73
54747: PUSH
54748: LD_VAR 0 12
54752: ARRAY
54753: PUSH
54754: LD_INT 1
54756: ARRAY
54757: PPUSH
54758: LD_EXP 73
54762: PUSH
54763: LD_VAR 0 12
54767: ARRAY
54768: PUSH
54769: LD_INT 2
54771: ARRAY
54772: PPUSH
54773: CALL_OW 297
54777: PUSH
54778: LD_INT 6
54780: LESSEQUAL
54781: PUSH
54782: LD_EXP 88
54786: PUSH
54787: LD_VAR 0 12
54791: ARRAY
54792: PPUSH
54793: LD_VAR 0 13
54797: PPUSH
54798: CALL_OW 308
54802: PUSH
54803: LD_VAR 0 9
54807: NOT
54808: AND
54809: OR
54810: AND
54811: IFFALSE 55082
// begin if GetLives ( ai_crane [ base ] ) < 1000 then
54813: LD_EXP 88
54817: PUSH
54818: LD_VAR 0 12
54822: ARRAY
54823: PPUSH
54824: CALL_OW 256
54828: PUSH
54829: LD_INT 1000
54831: LESS
54832: IFFALSE 54856
// allowed_to_repair_vehicles = ai_crane [ base ] ^ allowed_to_repair_vehicles ;
54834: LD_ADDR_VAR 0 8
54838: PUSH
54839: LD_EXP 88
54843: PUSH
54844: LD_VAR 0 12
54848: ARRAY
54849: PUSH
54850: LD_VAR 0 8
54854: ADD
54855: ST_TO_ADDR
// if ai_crane_driver [ base ] > 0 then
54856: LD_EXP 92
54860: PUSH
54861: LD_VAR 0 12
54865: ARRAY
54866: PUSH
54867: LD_INT 0
54869: GREATER
54870: IFFALSE 55080
// begin if GetLives ( ai_crane_driver [ base ] ) = 1000 then
54872: LD_EXP 92
54876: PUSH
54877: LD_VAR 0 12
54881: ARRAY
54882: PPUSH
54883: CALL_OW 256
54887: PUSH
54888: LD_INT 1000
54890: EQUAL
54891: IFFALSE 54917
// begin mechanics_list = mechanics_list ^ ai_crane_driver [ base ] ;
54893: LD_ADDR_VAR 0 3
54897: PUSH
54898: LD_VAR 0 3
54902: PUSH
54903: LD_EXP 92
54907: PUSH
54908: LD_VAR 0 12
54912: ARRAY
54913: ADD
54914: ST_TO_ADDR
// end else
54915: GO 55080
// begin if GetDistUnitXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) <= 6 then
54917: LD_EXP 88
54921: PUSH
54922: LD_VAR 0 12
54926: ARRAY
54927: PPUSH
54928: LD_EXP 73
54932: PUSH
54933: LD_VAR 0 12
54937: ARRAY
54938: PUSH
54939: LD_INT 1
54941: ARRAY
54942: PPUSH
54943: LD_EXP 73
54947: PUSH
54948: LD_VAR 0 12
54952: ARRAY
54953: PUSH
54954: LD_INT 2
54956: ARRAY
54957: PPUSH
54958: CALL_OW 297
54962: PUSH
54963: LD_INT 6
54965: LESSEQUAL
54966: IFFALSE 55072
// begin if GetHumansOutOfUnits ( [ ai_crane_driver [ base ] ] ) > 0 and not ai_crane_driver [ base ] in ai_heal_these_humans [ base ] then
54968: LD_EXP 92
54972: PUSH
54973: LD_VAR 0 12
54977: ARRAY
54978: PUSH
54979: EMPTY
54980: LIST
54981: PPUSH
54982: CALL 45199 0 1
54986: PUSH
54987: LD_INT 0
54989: GREATER
54990: PUSH
54991: LD_EXP 92
54995: PUSH
54996: LD_VAR 0 12
55000: ARRAY
55001: PUSH
55002: LD_EXP 75
55006: PUSH
55007: LD_VAR 0 12
55011: ARRAY
55012: IN
55013: NOT
55014: AND
55015: IFFALSE 55070
// begin temp_list = ai_heal_these_humans [ base ] ^ ai_crane_driver [ base ] ;
55017: LD_ADDR_VAR 0 4
55021: PUSH
55022: LD_EXP 75
55026: PUSH
55027: LD_VAR 0 12
55031: ARRAY
55032: PUSH
55033: LD_EXP 92
55037: PUSH
55038: LD_VAR 0 12
55042: ARRAY
55043: ADD
55044: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
55045: LD_ADDR_EXP 75
55049: PUSH
55050: LD_EXP 75
55054: PPUSH
55055: LD_VAR 0 12
55059: PPUSH
55060: LD_VAR 0 4
55064: PPUSH
55065: CALL_OW 1
55069: ST_TO_ADDR
// end ; end else
55070: GO 55080
// k = true ;
55072: LD_ADDR_VAR 0 11
55076: PUSH
55077: LD_INT 1
55079: ST_TO_ADDR
// end ; end ; end else
55080: GO 55090
// k = true ;
55082: LD_ADDR_VAR 0 11
55086: PUSH
55087: LD_INT 1
55089: ST_TO_ADDR
// if k then
55090: LD_VAR 0 11
55094: IFFALSE 55325
// 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
55096: LD_EXP 88
55100: PUSH
55101: LD_VAR 0 12
55105: ARRAY
55106: PPUSH
55107: CALL_OW 302
55111: PUSH
55112: LD_EXP 92
55116: PUSH
55117: LD_VAR 0 12
55121: ARRAY
55122: PUSH
55123: LD_INT 0
55125: GREATER
55126: AND
55127: PUSH
55128: LD_EXP 92
55132: PUSH
55133: LD_VAR 0 12
55137: ARRAY
55138: PUSH
55139: LD_VAR 0 3
55143: IN
55144: NOT
55145: AND
55146: PUSH
55147: LD_EXP 92
55151: PUSH
55152: LD_VAR 0 12
55156: ARRAY
55157: PUSH
55158: LD_EXP 75
55162: PUSH
55163: LD_VAR 0 12
55167: ARRAY
55168: IN
55169: NOT
55170: AND
55171: IFFALSE 55325
// begin if IsInUnit ( ai_crane_driver [ base ] ) <> ai_crane [ base ] then
55173: LD_EXP 92
55177: PUSH
55178: LD_VAR 0 12
55182: ARRAY
55183: PPUSH
55184: CALL_OW 310
55188: PUSH
55189: LD_EXP 88
55193: PUSH
55194: LD_VAR 0 12
55198: ARRAY
55199: NONEQUAL
55200: IFFALSE 55325
// if IsInUnit ( ai_crane_driver [ base ] ) > 0 then
55202: LD_EXP 92
55206: PUSH
55207: LD_VAR 0 12
55211: ARRAY
55212: PPUSH
55213: CALL_OW 310
55217: PUSH
55218: LD_INT 0
55220: GREATER
55221: IFFALSE 55299
// case GetType ( IsInUnit ( ai_crane_driver [ base ] ) ) of unit_building :
55223: LD_EXP 92
55227: PUSH
55228: LD_VAR 0 12
55232: ARRAY
55233: PPUSH
55234: CALL_OW 310
55238: PPUSH
55239: CALL_OW 247
55243: PUSH
55244: LD_INT 3
55246: DOUBLE
55247: EQUAL
55248: IFTRUE 55252
55250: GO 55270
55252: POP
// ComExitBuilding ( ai_crane_driver [ base ] ) ; unit_vehicle :
55253: LD_EXP 92
55257: PUSH
55258: LD_VAR 0 12
55262: ARRAY
55263: PPUSH
55264: CALL_OW 122
55268: GO 55297
55270: LD_INT 2
55272: DOUBLE
55273: EQUAL
55274: IFTRUE 55278
55276: GO 55296
55278: POP
// ComExitVehicle ( ai_crane_driver [ base ] ) ; end else
55279: LD_EXP 92
55283: PUSH
55284: LD_VAR 0 12
55288: ARRAY
55289: PPUSH
55290: CALL_OW 121
55294: GO 55297
55296: POP
55297: GO 55325
// ComEnterUnit ( ai_crane_driver [ base ] , ai_crane [ base ] ) ;
55299: LD_EXP 92
55303: PUSH
55304: LD_VAR 0 12
55308: ARRAY
55309: PPUSH
55310: LD_EXP 88
55314: PUSH
55315: LD_VAR 0 12
55319: ARRAY
55320: PPUSH
55321: CALL_OW 120
// end ; end ; end ; if mechanics_list = 0 and remote_mechanics = 0 then
55325: LD_VAR 0 3
55329: PUSH
55330: LD_INT 0
55332: EQUAL
55333: PUSH
55334: LD_VAR 0 15
55338: PUSH
55339: LD_INT 0
55341: EQUAL
55342: AND
55343: IFFALSE 55347
// continue ;
55345: GO 47898
// allowed_to_repair_vehicles = allowed_to_repair_vehicles diff ai_vehicles_being_repaired [ base ] ;
55347: LD_ADDR_VAR 0 8
55351: PUSH
55352: LD_VAR 0 8
55356: PUSH
55357: LD_EXP 70
55361: PUSH
55362: LD_VAR 0 12
55366: ARRAY
55367: DIFF
55368: ST_TO_ADDR
// if allowed_to_repair_vehicles > 0 or ai_vehicles_being_repaired [ base ] > 0 then
55369: LD_VAR 0 8
55373: PUSH
55374: LD_INT 0
55376: GREATER
55377: PUSH
55378: LD_EXP 70
55382: PUSH
55383: LD_VAR 0 12
55387: ARRAY
55388: PUSH
55389: LD_INT 0
55391: GREATER
55392: OR
55393: IFFALSE 55895
// begin if remote_mechanics > 0 then
55395: LD_VAR 0 15
55399: PUSH
55400: LD_INT 0
55402: GREATER
55403: IFFALSE 55639
// begin if under_attack or UnitFilter ( ai_vehicles_attack [ base ] , [ [ f_control , control_remote ] , [ f_ok ] ] ) > 0 then
55405: LD_VAR 0 9
55409: PUSH
55410: LD_EXP 68
55414: PUSH
55415: LD_VAR 0 12
55419: ARRAY
55420: PPUSH
55421: LD_INT 33
55423: PUSH
55424: LD_INT 2
55426: PUSH
55427: EMPTY
55428: LIST
55429: LIST
55430: PUSH
55431: LD_INT 50
55433: PUSH
55434: EMPTY
55435: LIST
55436: PUSH
55437: EMPTY
55438: LIST
55439: LIST
55440: PPUSH
55441: CALL_OW 72
55445: PUSH
55446: LD_INT 0
55448: GREATER
55449: OR
55450: IFFALSE 55558
// begin for i in remote_driver_vehicles [ base ] do
55452: LD_ADDR_VAR 0 2
55456: PUSH
55457: LD_VAR 0 30
55461: PUSH
55462: LD_VAR 0 12
55466: ARRAY
55467: PUSH
55468: FOR_IN
55469: IFFALSE 55554
// if UnitFilter ( i [ 2 ] , [ f_ok ] ) = 0 and i [ 1 ] in remote_mechanics then
55471: LD_VAR 0 2
55475: PUSH
55476: LD_INT 2
55478: ARRAY
55479: PPUSH
55480: LD_INT 50
55482: PUSH
55483: EMPTY
55484: LIST
55485: PPUSH
55486: CALL_OW 72
55490: PUSH
55491: LD_INT 0
55493: EQUAL
55494: PUSH
55495: LD_VAR 0 2
55499: PUSH
55500: LD_INT 1
55502: ARRAY
55503: PUSH
55504: LD_VAR 0 15
55508: IN
55509: AND
55510: IFFALSE 55552
// begin mechanics_list = mechanics_list ^ i [ 1 ] ;
55512: LD_ADDR_VAR 0 3
55516: PUSH
55517: LD_VAR 0 3
55521: PUSH
55522: LD_VAR 0 2
55526: PUSH
55527: LD_INT 1
55529: ARRAY
55530: ADD
55531: ST_TO_ADDR
// remote_mechanics = remote_mechanics diff i [ 1 ] ;
55532: LD_ADDR_VAR 0 15
55536: PUSH
55537: LD_VAR 0 15
55541: PUSH
55542: LD_VAR 0 2
55546: PUSH
55547: LD_INT 1
55549: ARRAY
55550: DIFF
55551: ST_TO_ADDR
// end ;
55552: GO 55468
55554: POP
55555: POP
// end else
55556: GO 55639
// begin temp_unit = true ;
55558: LD_ADDR_VAR 0 6
55562: PUSH
55563: LD_INT 1
55565: ST_TO_ADDR
// for i in vehicles_to_consider do
55566: LD_ADDR_VAR 0 2
55570: PUSH
55571: LD_VAR 0 25
55575: PUSH
55576: FOR_IN
55577: IFFALSE 55608
// if not IsInArea ( i , area ) then
55579: LD_VAR 0 2
55583: PPUSH
55584: LD_VAR 0 13
55588: PPUSH
55589: CALL_OW 308
55593: NOT
55594: IFFALSE 55606
// begin temp_unit = false ;
55596: LD_ADDR_VAR 0 6
55600: PUSH
55601: LD_INT 0
55603: ST_TO_ADDR
// break ;
55604: GO 55608
// end ;
55606: GO 55576
55608: POP
55609: POP
// if temp_unit then
55610: LD_VAR 0 6
55614: IFFALSE 55639
// begin mechanics_list = mechanics_list ^ remote_mechanics ;
55616: LD_ADDR_VAR 0 3
55620: PUSH
55621: LD_VAR 0 3
55625: PUSH
55626: LD_VAR 0 15
55630: ADD
55631: ST_TO_ADDR
// remote_mechanics = [ ] ;
55632: LD_ADDR_VAR 0 15
55636: PUSH
55637: EMPTY
55638: ST_TO_ADDR
// end ; end ; end ; if allowed_to_repair_vehicles > 0 then
55639: LD_VAR 0 8
55643: PUSH
55644: LD_INT 0
55646: GREATER
55647: IFFALSE 55864
// begin k = false ;
55649: LD_ADDR_VAR 0 11
55653: PUSH
55654: LD_INT 0
55656: ST_TO_ADDR
// if ai_vehicles_being_repaired [ base ] = 0 then
55657: LD_EXP 70
55661: PUSH
55662: LD_VAR 0 12
55666: ARRAY
55667: PUSH
55668: LD_INT 0
55670: EQUAL
55671: IFFALSE 55683
// k = true else
55673: LD_ADDR_VAR 0 11
55677: PUSH
55678: LD_INT 1
55680: ST_TO_ADDR
55681: GO 55746
// if IsOk ( ai_vehicles_being_repaired [ base ] [ 1 ] ) then
55683: LD_EXP 70
55687: PUSH
55688: LD_VAR 0 12
55692: ARRAY
55693: PUSH
55694: LD_INT 1
55696: ARRAY
55697: PPUSH
55698: CALL_OW 302
55702: IFFALSE 55746
// begin allowed_to_repair_vehicles = UnitFilter ( allowed_to_repair_vehicles , [ f_not , [ f_ok ] ] ) ;
55704: LD_ADDR_VAR 0 8
55708: PUSH
55709: LD_VAR 0 8
55713: PPUSH
55714: LD_INT 3
55716: PUSH
55717: LD_INT 50
55719: PUSH
55720: EMPTY
55721: LIST
55722: PUSH
55723: EMPTY
55724: LIST
55725: LIST
55726: PPUSH
55727: CALL_OW 72
55731: ST_TO_ADDR
// k := allowed_to_repair_vehicles > 0 ;
55732: LD_ADDR_VAR 0 11
55736: PUSH
55737: LD_VAR 0 8
55741: PUSH
55742: LD_INT 0
55744: GREATER
55745: ST_TO_ADDR
// end ; if k then
55746: LD_VAR 0 11
55750: IFFALSE 55864
// begin temp_list = [ ] ;
55752: LD_ADDR_VAR 0 4
55756: PUSH
55757: EMPTY
55758: ST_TO_ADDR
// for i in allowed_to_repair_vehicles do
55759: LD_ADDR_VAR 0 2
55763: PUSH
55764: LD_VAR 0 8
55768: PUSH
55769: FOR_IN
55770: IFFALSE 55795
// temp_list = temp_list ^ GetLives ( i ) ;
55772: LD_ADDR_VAR 0 4
55776: PUSH
55777: LD_VAR 0 4
55781: PUSH
55782: LD_VAR 0 2
55786: PPUSH
55787: CALL_OW 256
55791: ADD
55792: ST_TO_ADDR
55793: GO 55769
55795: POP
55796: POP
// temp_unit = WorstFromListByList ( allowed_to_repair_vehicles , temp_list ) ;
55797: LD_ADDR_VAR 0 6
55801: PUSH
55802: LD_VAR 0 8
55806: PPUSH
55807: LD_VAR 0 4
55811: PPUSH
55812: CALL_OW 78
55816: ST_TO_ADDR
// temp_list = temp_unit ^ ai_vehicles_being_repaired [ base ] ;
55817: LD_ADDR_VAR 0 4
55821: PUSH
55822: LD_VAR 0 6
55826: PUSH
55827: LD_EXP 70
55831: PUSH
55832: LD_VAR 0 12
55836: ARRAY
55837: ADD
55838: ST_TO_ADDR
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
55839: LD_ADDR_EXP 70
55843: PUSH
55844: LD_EXP 70
55848: PPUSH
55849: LD_VAR 0 12
55853: PPUSH
55854: LD_VAR 0 4
55858: PPUSH
55859: CALL_OW 1
55863: ST_TO_ADDR
// end ; end ; ComRepairVehicle ( GetHumansOutOfUnits ( mechanics_list ) , ai_vehicles_being_repaired [ base ] [ 1 ] ) ;
55864: LD_VAR 0 3
55868: PPUSH
55869: CALL 45199 0 1
55873: PPUSH
55874: LD_EXP 70
55878: PUSH
55879: LD_VAR 0 12
55883: ARRAY
55884: PUSH
55885: LD_INT 1
55887: ARRAY
55888: PPUSH
55889: CALL_OW 129
// end else
55893: GO 55972
// 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 ) ;
55895: LD_VAR 0 12
55899: PPUSH
55900: LD_VAR 0 3
55904: PPUSH
55905: LD_EXP 51
55909: PUSH
55910: LD_VAR 0 12
55914: ARRAY
55915: PUSH
55916: LD_EXP 63
55920: PUSH
55921: LD_VAR 0 12
55925: ARRAY
55926: DIFF
55927: PPUSH
55928: LD_INT 50
55930: PUSH
55931: EMPTY
55932: LIST
55933: PUSH
55934: LD_INT 3
55936: PUSH
55937: LD_INT 57
55939: PUSH
55940: EMPTY
55941: LIST
55942: PUSH
55943: EMPTY
55944: LIST
55945: LIST
55946: PUSH
55947: EMPTY
55948: LIST
55949: LIST
55950: PPUSH
55951: CALL_OW 72
55955: PPUSH
55956: LD_INT 3
55958: PPUSH
55959: LD_INT 6
55961: PPUSH
55962: LD_INT 1
55964: PPUSH
55965: LD_INT 0
55967: PPUSH
55968: CALL 34075 0 7
// end ; if remote_driver_vehicles [ base ] > 0 then
55972: LD_VAR 0 30
55976: PUSH
55977: LD_VAR 0 12
55981: ARRAY
55982: PUSH
55983: LD_INT 0
55985: GREATER
55986: IFFALSE 57327
// begin if not IsOk ( ai_control_tower [ base ] ) and UnitFilter ( ai_control_tower_vehicles [ base ] , [ f_ok ] ) = 0 then
55988: LD_EXP 59
55992: PUSH
55993: LD_VAR 0 12
55997: ARRAY
55998: PPUSH
55999: CALL_OW 302
56003: NOT
56004: PUSH
56005: LD_EXP 95
56009: PUSH
56010: LD_VAR 0 12
56014: ARRAY
56015: PPUSH
56016: LD_INT 50
56018: PUSH
56019: EMPTY
56020: LIST
56021: PPUSH
56022: CALL_OW 72
56026: PUSH
56027: LD_INT 0
56029: EQUAL
56030: AND
56031: IFFALSE 56112
// 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 ) ;
56033: LD_VAR 0 12
56037: PPUSH
56038: LD_VAR 0 15
56042: PPUSH
56043: LD_EXP 51
56047: PUSH
56048: LD_VAR 0 12
56052: ARRAY
56053: PUSH
56054: LD_EXP 63
56058: PUSH
56059: LD_VAR 0 12
56063: ARRAY
56064: DIFF
56065: PPUSH
56066: LD_INT 50
56068: PUSH
56069: EMPTY
56070: LIST
56071: PUSH
56072: LD_INT 3
56074: PUSH
56075: LD_INT 57
56077: PUSH
56078: EMPTY
56079: LIST
56080: PUSH
56081: EMPTY
56082: LIST
56083: LIST
56084: PUSH
56085: EMPTY
56086: LIST
56087: LIST
56088: PPUSH
56089: CALL_OW 72
56093: PPUSH
56094: LD_INT 3
56096: PPUSH
56097: LD_INT 6
56099: PPUSH
56100: LD_INT 1
56102: PPUSH
56103: LD_INT 0
56105: PPUSH
56106: CALL 34075 0 7
// end else
56110: GO 57327
// begin temp_list_3 = [ [ ] , 0 ] ;
56112: LD_ADDR_VAR 0 5
56116: PUSH
56117: EMPTY
56118: PUSH
56119: LD_INT 0
56121: PUSH
56122: EMPTY
56123: LIST
56124: LIST
56125: ST_TO_ADDR
// temp_list_2 = [ ] ;
56126: LD_ADDR_VAR 0 14
56130: PUSH
56131: EMPTY
56132: ST_TO_ADDR
// already_inside_mecs = [ ] ;
56133: LD_ADDR_VAR 0 24
56137: PUSH
56138: EMPTY
56139: ST_TO_ADDR
// for i in remote_driver_vehicles [ base ] do
56140: LD_ADDR_VAR 0 2
56144: PUSH
56145: LD_VAR 0 30
56149: PUSH
56150: LD_VAR 0 12
56154: ARRAY
56155: PUSH
56156: FOR_IN
56157: IFFALSE 56361
// begin if GetClass ( i [ 1 ] ) <> class_mechanic then
56159: LD_VAR 0 2
56163: PUSH
56164: LD_INT 1
56166: ARRAY
56167: PPUSH
56168: CALL_OW 257
56172: PUSH
56173: LD_INT 3
56175: NONEQUAL
56176: IFFALSE 56180
// continue ;
56178: GO 56156
// k = IsInUnit ( i [ 1 ] ) ;
56180: LD_ADDR_VAR 0 11
56184: PUSH
56185: LD_VAR 0 2
56189: PUSH
56190: LD_INT 1
56192: ARRAY
56193: PPUSH
56194: CALL_OW 310
56198: ST_TO_ADDR
// if k > 0 and ( k in ai_control_tower_vehicles [ base ] or k = ai_control_tower [ base ] ) then
56199: LD_VAR 0 11
56203: PUSH
56204: LD_INT 0
56206: GREATER
56207: PUSH
56208: LD_VAR 0 11
56212: PUSH
56213: LD_EXP 95
56217: PUSH
56218: LD_VAR 0 12
56222: ARRAY
56223: IN
56224: PUSH
56225: LD_VAR 0 11
56229: PUSH
56230: LD_EXP 59
56234: PUSH
56235: LD_VAR 0 12
56239: ARRAY
56240: EQUAL
56241: OR
56242: AND
56243: IFFALSE 56359
// begin already_inside_mecs = already_inside_mecs ^ i [ 1 ] ;
56245: LD_ADDR_VAR 0 24
56249: PUSH
56250: LD_VAR 0 24
56254: PUSH
56255: LD_VAR 0 2
56259: PUSH
56260: LD_INT 1
56262: ARRAY
56263: ADD
56264: ST_TO_ADDR
// if k in ai_control_tower_vehicles [ base ] then
56265: LD_VAR 0 11
56269: PUSH
56270: LD_EXP 95
56274: PUSH
56275: LD_VAR 0 12
56279: ARRAY
56280: IN
56281: IFFALSE 56328
// begin temp_list = temp_list_3 [ 1 ] ^ k ;
56283: LD_ADDR_VAR 0 4
56287: PUSH
56288: LD_VAR 0 5
56292: PUSH
56293: LD_INT 1
56295: ARRAY
56296: PUSH
56297: LD_VAR 0 11
56301: ADD
56302: ST_TO_ADDR
// temp_list_3 = Replace ( temp_list_3 , 1 , temp_list ) ;
56303: LD_ADDR_VAR 0 5
56307: PUSH
56308: LD_VAR 0 5
56312: PPUSH
56313: LD_INT 1
56315: PPUSH
56316: LD_VAR 0 4
56320: PPUSH
56321: CALL_OW 1
56325: ST_TO_ADDR
// end else
56326: GO 56359
// temp_list_3 = Replace ( temp_list_3 , 2 , temp_list_3 [ 2 ] + 1 ) ;
56328: LD_ADDR_VAR 0 5
56332: PUSH
56333: LD_VAR 0 5
56337: PPUSH
56338: LD_INT 2
56340: PPUSH
56341: LD_VAR 0 5
56345: PUSH
56346: LD_INT 2
56348: ARRAY
56349: PUSH
56350: LD_INT 1
56352: PLUS
56353: PPUSH
56354: CALL_OW 1
56358: ST_TO_ADDR
// end ; end ;
56359: GO 56156
56361: POP
56362: POP
// for i in remote_driver_vehicles [ base ] do
56363: LD_ADDR_VAR 0 2
56367: PUSH
56368: LD_VAR 0 30
56372: PUSH
56373: LD_VAR 0 12
56377: ARRAY
56378: PUSH
56379: FOR_IN
56380: IFFALSE 57248
// begin if not i [ 1 ] in remote_mechanics then
56382: LD_VAR 0 2
56386: PUSH
56387: LD_INT 1
56389: ARRAY
56390: PUSH
56391: LD_VAR 0 15
56395: IN
56396: NOT
56397: IFFALSE 56401
// continue ;
56399: GO 56379
// if GetClass ( i [ 1 ] ) <> class_mechanic then
56401: LD_VAR 0 2
56405: PUSH
56406: LD_INT 1
56408: ARRAY
56409: PPUSH
56410: CALL_OW 257
56414: PUSH
56415: LD_INT 3
56417: NONEQUAL
56418: IFFALSE 56647
// begin temp_unit = 0 ;
56420: LD_ADDR_VAR 0 6
56424: PUSH
56425: LD_INT 0
56427: ST_TO_ADDR
// for k in ai_facts [ base ] do
56428: LD_ADDR_VAR 0 11
56432: PUSH
56433: LD_EXP 51
56437: PUSH
56438: LD_VAR 0 12
56442: ARRAY
56443: PUSH
56444: FOR_IN
56445: IFFALSE 56487
// if IsOk ( k ) and UnitsInside ( k ) < 6 then
56447: LD_VAR 0 11
56451: PPUSH
56452: CALL_OW 302
56456: PUSH
56457: LD_VAR 0 11
56461: PPUSH
56462: CALL_OW 313
56466: PUSH
56467: LD_INT 6
56469: LESS
56470: AND
56471: IFFALSE 56485
// begin temp_unit = k ;
56473: LD_ADDR_VAR 0 6
56477: PUSH
56478: LD_VAR 0 11
56482: ST_TO_ADDR
// break ;
56483: GO 56487
// end ;
56485: GO 56444
56487: POP
56488: POP
// if temp_unit > 0 then
56489: LD_VAR 0 6
56493: PUSH
56494: LD_INT 0
56496: GREATER
56497: IFFALSE 56645
// begin if IsInUnit ( i [ 1 ] ) = temp_unit then
56499: LD_VAR 0 2
56503: PUSH
56504: LD_INT 1
56506: ARRAY
56507: PPUSH
56508: CALL_OW 310
56512: PUSH
56513: LD_VAR 0 6
56517: EQUAL
56518: IFFALSE 56538
// ComChangeProfession ( i [ 1 ] , class_mechanic ) else
56520: LD_VAR 0 2
56524: PUSH
56525: LD_INT 1
56527: ARRAY
56528: PPUSH
56529: LD_INT 3
56531: PPUSH
56532: CALL_OW 123
56536: GO 56645
// begin if IsInUnit ( i [ 1 ] ) > 0 then
56538: LD_VAR 0 2
56542: PUSH
56543: LD_INT 1
56545: ARRAY
56546: PPUSH
56547: CALL_OW 310
56551: PUSH
56552: LD_INT 0
56554: GREATER
56555: IFFALSE 56627
// case GetType ( IsInUnit ( i [ 1 ] ) ) of unit_building :
56557: LD_VAR 0 2
56561: PUSH
56562: LD_INT 1
56564: ARRAY
56565: PPUSH
56566: CALL_OW 310
56570: PPUSH
56571: CALL_OW 247
56575: PUSH
56576: LD_INT 3
56578: DOUBLE
56579: EQUAL
56580: IFTRUE 56584
56582: GO 56600
56584: POP
// ComExitBuilding ( i [ 1 ] ) ; unit_vehicle :
56585: LD_VAR 0 2
56589: PUSH
56590: LD_INT 1
56592: ARRAY
56593: PPUSH
56594: CALL_OW 122
56598: GO 56625
56600: LD_INT 2
56602: DOUBLE
56603: EQUAL
56604: IFTRUE 56608
56606: GO 56624
56608: POP
// ComExitVehicle ( i [ 1 ] ) ; end else
56609: LD_VAR 0 2
56613: PUSH
56614: LD_INT 1
56616: ARRAY
56617: PPUSH
56618: CALL_OW 121
56622: GO 56625
56624: POP
56625: GO 56645
// ComEnterUnit ( i [ 1 ] , temp_unit ) ;
56627: LD_VAR 0 2
56631: PUSH
56632: LD_INT 1
56634: ARRAY
56635: PPUSH
56636: LD_VAR 0 6
56640: PPUSH
56641: CALL_OW 120
// end ; end ; end else
56645: GO 57246
// begin temp_unit = 0 ;
56647: LD_ADDR_VAR 0 6
56651: PUSH
56652: LD_INT 0
56654: ST_TO_ADDR
// if i [ 1 ] in already_inside_mecs then
56655: LD_VAR 0 2
56659: PUSH
56660: LD_INT 1
56662: ARRAY
56663: PUSH
56664: LD_VAR 0 24
56668: IN
56669: IFFALSE 56692
// begin temp_unit = IsInUnit ( i [ 1 ] ) ;
56671: LD_ADDR_VAR 0 6
56675: PUSH
56676: LD_VAR 0 2
56680: PUSH
56681: LD_INT 1
56683: ARRAY
56684: PPUSH
56685: CALL_OW 310
56689: ST_TO_ADDR
// end else
56690: GO 57005
// begin if ( ai_control_tower_vehicles [ base ] diff temp_list_3 [ 1 ] ) > 0 then
56692: LD_EXP 95
56696: PUSH
56697: LD_VAR 0 12
56701: ARRAY
56702: PUSH
56703: LD_VAR 0 5
56707: PUSH
56708: LD_INT 1
56710: ARRAY
56711: DIFF
56712: PUSH
56713: LD_INT 0
56715: GREATER
56716: IFFALSE 56909
// begin temp_list = [ GetX ( i [ 1 ] ) , GetY ( i [ 1 ] ) ] ;
56718: LD_ADDR_VAR 0 4
56722: PUSH
56723: LD_VAR 0 2
56727: PUSH
56728: LD_INT 1
56730: ARRAY
56731: PPUSH
56732: CALL_OW 250
56736: PUSH
56737: LD_VAR 0 2
56741: PUSH
56742: LD_INT 1
56744: ARRAY
56745: PPUSH
56746: CALL_OW 251
56750: PUSH
56751: EMPTY
56752: LIST
56753: LIST
56754: ST_TO_ADDR
// temp_list_4 = [ ] ;
56755: LD_ADDR_VAR 0 19
56759: PUSH
56760: EMPTY
56761: ST_TO_ADDR
// temp_list_5 = ai_control_tower_vehicles [ base ] diff temp_list_3 [ 1 ] ;
56762: LD_ADDR_VAR 0 20
56766: PUSH
56767: LD_EXP 95
56771: PUSH
56772: LD_VAR 0 12
56776: ARRAY
56777: PUSH
56778: LD_VAR 0 5
56782: PUSH
56783: LD_INT 1
56785: ARRAY
56786: DIFF
56787: ST_TO_ADDR
// for k in temp_list_5 do
56788: LD_ADDR_VAR 0 11
56792: PUSH
56793: LD_VAR 0 20
56797: PUSH
56798: FOR_IN
56799: IFFALSE 56842
// temp_list_4 = temp_list_4 ^ GetDistUnitXY ( k , temp_list [ 1 ] , temp_list [ 2 ] ) ;
56801: LD_ADDR_VAR 0 19
56805: PUSH
56806: LD_VAR 0 19
56810: PUSH
56811: LD_VAR 0 11
56815: PPUSH
56816: LD_VAR 0 4
56820: PUSH
56821: LD_INT 1
56823: ARRAY
56824: PPUSH
56825: LD_VAR 0 4
56829: PUSH
56830: LD_INT 2
56832: ARRAY
56833: PPUSH
56834: CALL_OW 297
56838: ADD
56839: ST_TO_ADDR
56840: GO 56798
56842: POP
56843: POP
// temp_unit = WorstFromListByList ( temp_list_5 , temp_list_4 ) ;
56844: LD_ADDR_VAR 0 6
56848: PUSH
56849: LD_VAR 0 20
56853: PPUSH
56854: LD_VAR 0 19
56858: PPUSH
56859: CALL_OW 78
56863: ST_TO_ADDR
// temp_list = temp_list_3 [ 1 ] ^ temp_unit ;
56864: LD_ADDR_VAR 0 4
56868: PUSH
56869: LD_VAR 0 5
56873: PUSH
56874: LD_INT 1
56876: ARRAY
56877: PUSH
56878: LD_VAR 0 6
56882: ADD
56883: ST_TO_ADDR
// temp_list_3 = Replace ( temp_list_3 , 1 , temp_list ) ;
56884: LD_ADDR_VAR 0 5
56888: PUSH
56889: LD_VAR 0 5
56893: PPUSH
56894: LD_INT 1
56896: PPUSH
56897: LD_VAR 0 4
56901: PPUSH
56902: CALL_OW 1
56906: ST_TO_ADDR
// end else
56907: GO 57005
// if IsOk ( ai_control_tower [ base ] ) and temp_list_3 [ 2 ] < 3 then
56909: LD_EXP 59
56913: PUSH
56914: LD_VAR 0 12
56918: ARRAY
56919: PPUSH
56920: CALL_OW 302
56924: PUSH
56925: LD_VAR 0 5
56929: PUSH
56930: LD_INT 2
56932: ARRAY
56933: PUSH
56934: LD_INT 3
56936: LESS
56937: AND
56938: IFFALSE 56989
// begin temp_unit = ai_control_tower [ base ] ;
56940: LD_ADDR_VAR 0 6
56944: PUSH
56945: LD_EXP 59
56949: PUSH
56950: LD_VAR 0 12
56954: ARRAY
56955: ST_TO_ADDR
// temp_list_3 = Replace ( temp_list_3 , 2 , temp_list_3 [ 2 ] + 1 ) ;
56956: LD_ADDR_VAR 0 5
56960: PUSH
56961: LD_VAR 0 5
56965: PPUSH
56966: LD_INT 2
56968: PPUSH
56969: LD_VAR 0 5
56973: PUSH
56974: LD_INT 2
56976: ARRAY
56977: PUSH
56978: LD_INT 1
56980: PLUS
56981: PPUSH
56982: CALL_OW 1
56986: ST_TO_ADDR
// end else
56987: GO 57005
// temp_list_2 = temp_list_2 ^ i ;
56989: LD_ADDR_VAR 0 14
56993: PUSH
56994: LD_VAR 0 14
56998: PUSH
56999: LD_VAR 0 2
57003: ADD
57004: ST_TO_ADDR
// end ; if temp_unit > 0 then
57005: LD_VAR 0 6
57009: PUSH
57010: LD_INT 0
57012: GREATER
57013: IFFALSE 57246
// begin k = IsInUnit ( i [ 1 ] ) ;
57015: LD_ADDR_VAR 0 11
57019: PUSH
57020: LD_VAR 0 2
57024: PUSH
57025: LD_INT 1
57027: ARRAY
57028: PPUSH
57029: CALL_OW 310
57033: ST_TO_ADDR
// if k <> temp_unit then
57034: LD_VAR 0 11
57038: PUSH
57039: LD_VAR 0 6
57043: NONEQUAL
57044: IFFALSE 57137
// begin if k > 0 then
57046: LD_VAR 0 11
57050: PUSH
57051: LD_INT 0
57053: GREATER
57054: IFFALSE 57117
// case GetType ( k ) of unit_building :
57056: LD_VAR 0 11
57060: PPUSH
57061: CALL_OW 247
57065: PUSH
57066: LD_INT 3
57068: DOUBLE
57069: EQUAL
57070: IFTRUE 57074
57072: GO 57090
57074: POP
// ComExitBuilding ( i [ 1 ] ) ; unit_vehicle :
57075: LD_VAR 0 2
57079: PUSH
57080: LD_INT 1
57082: ARRAY
57083: PPUSH
57084: CALL_OW 122
57088: GO 57115
57090: LD_INT 2
57092: DOUBLE
57093: EQUAL
57094: IFTRUE 57098
57096: GO 57114
57098: POP
// ComExitVehicle ( i [ 1 ] ) ; end else
57099: LD_VAR 0 2
57103: PUSH
57104: LD_INT 1
57106: ARRAY
57107: PPUSH
57108: CALL_OW 121
57112: GO 57115
57114: POP
57115: GO 57135
// ComEnterUnit ( i [ 1 ] , temp_unit ) ;
57117: LD_VAR 0 2
57121: PUSH
57122: LD_INT 1
57124: ARRAY
57125: PPUSH
57126: LD_VAR 0 6
57130: PPUSH
57131: CALL_OW 120
// end else
57135: GO 57246
// for k in i [ 2 ] do
57137: LD_ADDR_VAR 0 11
57141: PUSH
57142: LD_VAR 0 2
57146: PUSH
57147: LD_INT 2
57149: ARRAY
57150: PUSH
57151: FOR_IN
57152: IFFALSE 57244
// if IsOk ( k ) and IsControledBy ( k ) <> i [ 1 ] then
57154: LD_VAR 0 11
57158: PPUSH
57159: CALL_OW 302
57163: PUSH
57164: LD_VAR 0 11
57168: PPUSH
57169: CALL_OW 312
57173: PUSH
57174: LD_VAR 0 2
57178: PUSH
57179: LD_INT 1
57181: ARRAY
57182: NONEQUAL
57183: AND
57184: IFFALSE 57206
// ComLinkTo ( k , i [ 1 ] ) else
57186: LD_VAR 0 11
57190: PPUSH
57191: LD_VAR 0 2
57195: PUSH
57196: LD_INT 1
57198: ARRAY
57199: PPUSH
57200: CALL_OW 135
57204: GO 57242
// if not IsOk ( k ) and IsControledBy ( k ) > 0 then
57206: LD_VAR 0 11
57210: PPUSH
57211: CALL_OW 302
57215: NOT
57216: PUSH
57217: LD_VAR 0 11
57221: PPUSH
57222: CALL_OW 312
57226: PUSH
57227: LD_INT 0
57229: GREATER
57230: AND
57231: IFFALSE 57242
// ComUnlink ( k ) ;
57233: LD_VAR 0 11
57237: PPUSH
57238: CALL_OW 136
57242: GO 57151
57244: POP
57245: POP
// end ; end ; end ;
57246: GO 56379
57248: POP
57249: 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 ) ;
57250: LD_VAR 0 12
57254: PPUSH
57255: LD_VAR 0 14
57259: PPUSH
57260: LD_EXP 51
57264: PUSH
57265: LD_VAR 0 12
57269: ARRAY
57270: PUSH
57271: LD_EXP 63
57275: PUSH
57276: LD_VAR 0 12
57280: ARRAY
57281: DIFF
57282: PPUSH
57283: LD_INT 50
57285: PUSH
57286: EMPTY
57287: LIST
57288: PUSH
57289: LD_INT 3
57291: PUSH
57292: LD_INT 57
57294: PUSH
57295: EMPTY
57296: LIST
57297: PUSH
57298: EMPTY
57299: LIST
57300: LIST
57301: PUSH
57302: EMPTY
57303: LIST
57304: LIST
57305: PPUSH
57306: CALL_OW 72
57310: PPUSH
57311: LD_INT 3
57313: PPUSH
57314: LD_INT 6
57316: PPUSH
57317: LD_INT 1
57319: PPUSH
57320: LD_INT 0
57322: PPUSH
57323: CALL 34075 0 7
// end ; end ; end ;
57327: GO 47898
57329: POP
57330: POP
// until false ;
57331: LD_INT 0
57333: IFFALSE 47859
// end ;
57335: PPOPN 30
57337: END
// function FindDriverHelper ( vehicles_list , mechanics_list , vehicles_drivers ) ; var i , k , temp_unit ; begin
57338: LD_INT 0
57340: PPUSH
57341: PPUSH
57342: PPUSH
57343: PPUSH
// for i in vehicles_list do
57344: LD_ADDR_VAR 0 5
57348: PUSH
57349: LD_VAR 0 1
57353: PUSH
57354: FOR_IN
57355: IFFALSE 57635
// begin if mechanics_list = 0 then
57357: LD_VAR 0 2
57361: PUSH
57362: LD_INT 0
57364: EQUAL
57365: IFFALSE 57369
// break ;
57367: GO 57635
// k = false ;
57369: LD_ADDR_VAR 0 6
57373: PUSH
57374: LD_INT 0
57376: ST_TO_ADDR
// if vehicles_drivers < i then
57377: LD_VAR 0 3
57381: PUSH
57382: LD_VAR 0 5
57386: LESS
57387: IFFALSE 57399
// k = true else
57389: LD_ADDR_VAR 0 6
57393: PUSH
57394: LD_INT 1
57396: ST_TO_ADDR
57397: GO 57426
// if not vehicles_drivers [ i ] in mechanics_list then
57399: LD_VAR 0 3
57403: PUSH
57404: LD_VAR 0 5
57408: ARRAY
57409: PUSH
57410: LD_VAR 0 2
57414: IN
57415: NOT
57416: IFFALSE 57426
// k = true ;
57418: LD_ADDR_VAR 0 6
57422: PUSH
57423: LD_INT 1
57425: ST_TO_ADDR
// if k then
57426: LD_VAR 0 6
57430: IFFALSE 57467
// vehicles_drivers = Replace ( vehicles_drivers , i , AllNearestUnitToUnit ( mechanics_list , i ) ) ;
57432: LD_ADDR_VAR 0 3
57436: PUSH
57437: LD_VAR 0 3
57441: PPUSH
57442: LD_VAR 0 5
57446: PPUSH
57447: LD_VAR 0 2
57451: PPUSH
57452: LD_VAR 0 5
57456: PPUSH
57457: CALL_OW 75
57461: PPUSH
57462: CALL_OW 1
57466: ST_TO_ADDR
// if vehicles_drivers [ i ] > 0 then
57467: LD_VAR 0 3
57471: PUSH
57472: LD_VAR 0 5
57476: ARRAY
57477: PUSH
57478: LD_INT 0
57480: GREATER
57481: IFFALSE 57633
// begin temp_unit = IsInUnit ( vehicles_drivers [ i ] ) ;
57483: LD_ADDR_VAR 0 7
57487: PUSH
57488: LD_VAR 0 3
57492: PUSH
57493: LD_VAR 0 5
57497: ARRAY
57498: PPUSH
57499: CALL_OW 310
57503: ST_TO_ADDR
// if temp_unit <> i then
57504: LD_VAR 0 7
57508: PUSH
57509: LD_VAR 0 5
57513: NONEQUAL
57514: IFFALSE 57611
// if temp_unit > 0 then
57516: LD_VAR 0 7
57520: PUSH
57521: LD_INT 0
57523: GREATER
57524: IFFALSE 57591
// case GetType ( temp_unit ) of unit_vehicle :
57526: LD_VAR 0 7
57530: PPUSH
57531: CALL_OW 247
57535: PUSH
57536: LD_INT 2
57538: DOUBLE
57539: EQUAL
57540: IFTRUE 57544
57542: GO 57562
57544: POP
// ComExitVehicle ( vehicles_drivers [ i ] ) ; unit_building :
57545: LD_VAR 0 3
57549: PUSH
57550: LD_VAR 0 5
57554: ARRAY
57555: PPUSH
57556: CALL_OW 121
57560: GO 57589
57562: LD_INT 3
57564: DOUBLE
57565: EQUAL
57566: IFTRUE 57570
57568: GO 57588
57570: POP
// ComExitBuilding ( vehicles_drivers [ i ] ) ; end else
57571: LD_VAR 0 3
57575: PUSH
57576: LD_VAR 0 5
57580: ARRAY
57581: PPUSH
57582: CALL_OW 122
57586: GO 57589
57588: POP
57589: GO 57611
// ComEnterUnit ( vehicles_drivers [ i ] , i ) ;
57591: LD_VAR 0 3
57595: PUSH
57596: LD_VAR 0 5
57600: ARRAY
57601: PPUSH
57602: LD_VAR 0 5
57606: PPUSH
57607: CALL_OW 120
// mechanics_list = mechanics_list diff vehicles_drivers [ i ] ;
57611: LD_ADDR_VAR 0 2
57615: PUSH
57616: LD_VAR 0 2
57620: PUSH
57621: LD_VAR 0 3
57625: PUSH
57626: LD_VAR 0 5
57630: ARRAY
57631: DIFF
57632: ST_TO_ADDR
// end ; end ;
57633: GO 57354
57635: POP
57636: POP
// result = [ mechanics_list , vehicles_drivers ] ;
57637: LD_ADDR_VAR 0 4
57641: PUSH
57642: LD_VAR 0 2
57646: PUSH
57647: LD_VAR 0 3
57651: PUSH
57652: EMPTY
57653: LIST
57654: LIST
57655: ST_TO_ADDR
// end ;
57656: LD_VAR 0 4
57660: RET
// function FindBestCraneDriver ( base ) ; var i , temp_list ; begin
57661: LD_INT 0
57663: PPUSH
57664: PPUSH
57665: PPUSH
// if ai_mechanics_defend [ base ] = 0 then
57666: LD_EXP 43
57670: PUSH
57671: LD_VAR 0 1
57675: ARRAY
57676: PUSH
57677: LD_INT 0
57679: EQUAL
57680: IFFALSE 57692
// begin result = 0 ;
57682: LD_ADDR_VAR 0 2
57686: PUSH
57687: LD_INT 0
57689: ST_TO_ADDR
// exit ;
57690: GO 57786
// end ; temp_list = [ ] ;
57692: LD_ADDR_VAR 0 4
57696: PUSH
57697: EMPTY
57698: ST_TO_ADDR
// for i in ai_mechanics_defend [ base ] do
57699: LD_ADDR_VAR 0 3
57703: PUSH
57704: LD_EXP 43
57708: PUSH
57709: LD_VAR 0 1
57713: ARRAY
57714: PUSH
57715: FOR_IN
57716: IFFALSE 57758
// temp_list = temp_list ^ ( GetSkill ( i , skill_engineering ) + GetSkill ( i , skill_mechanical ) ) ;
57718: LD_ADDR_VAR 0 4
57722: PUSH
57723: LD_VAR 0 4
57727: PUSH
57728: LD_VAR 0 3
57732: PPUSH
57733: LD_INT 2
57735: PPUSH
57736: CALL_OW 259
57740: PUSH
57741: LD_VAR 0 3
57745: PPUSH
57746: LD_INT 3
57748: PPUSH
57749: CALL_OW 259
57753: PLUS
57754: ADD
57755: ST_TO_ADDR
57756: GO 57715
57758: POP
57759: POP
// result = BestFromListByList ( ai_mechanics_defend [ base ] , temp_list ) ;
57760: LD_ADDR_VAR 0 2
57764: PUSH
57765: LD_EXP 43
57769: PUSH
57770: LD_VAR 0 1
57774: ARRAY
57775: PPUSH
57776: LD_VAR 0 4
57780: PPUSH
57781: CALL_OW 79
57785: ST_TO_ADDR
// end ;
57786: LD_VAR 0 2
57790: RET
// every 0 0$1.1 do var i , base , temp_list , veh , mechanics_list , un , bomb_sent ; var orig_mec_num , last_attack_time_tick , going_to_be_recycled_bomb , bomb_talk_map ;
57791: GO 57793
57793: DISABLE
57794: LD_INT 0
57796: PPUSH
57797: PPUSH
57798: PPUSH
57799: PPUSH
57800: PPUSH
57801: PPUSH
57802: PPUSH
57803: PPUSH
57804: PPUSH
57805: PPUSH
57806: PPUSH
// begin orig_mec_num = [ ] ;
57807: LD_ADDR_VAR 0 8
57811: PUSH
57812: EMPTY
57813: ST_TO_ADDR
// for base in ai_bases do
57814: LD_ADDR_VAR 0 2
57818: PUSH
57819: LD_EXP 39
57823: PUSH
57824: FOR_IN
57825: IFFALSE 57864
// orig_mec_num = Replace ( orig_mec_num , base , ai_sib_bomb_mechanics [ base ] + 0 ) ;
57827: LD_ADDR_VAR 0 8
57831: PUSH
57832: LD_VAR 0 8
57836: PPUSH
57837: LD_VAR 0 2
57841: PPUSH
57842: LD_EXP 65
57846: PUSH
57847: LD_VAR 0 2
57851: ARRAY
57852: PUSH
57853: LD_INT 0
57855: PLUS
57856: PPUSH
57857: CALL_OW 1
57861: ST_TO_ADDR
57862: GO 57824
57864: POP
57865: POP
// last_attack_time_tick = [ 0 , 0 , 0 , 0 ] ;
57866: LD_ADDR_VAR 0 9
57870: PUSH
57871: LD_INT 0
57873: PUSH
57874: LD_INT 0
57876: PUSH
57877: LD_INT 0
57879: PUSH
57880: LD_INT 0
57882: PUSH
57883: EMPTY
57884: LIST
57885: LIST
57886: LIST
57887: LIST
57888: ST_TO_ADDR
// going_to_be_recycled_bomb = [ 0 , 0 , 0 , 0 ] ;
57889: LD_ADDR_VAR 0 10
57893: PUSH
57894: LD_INT 0
57896: PUSH
57897: LD_INT 0
57899: PUSH
57900: LD_INT 0
57902: PUSH
57903: LD_INT 0
57905: PUSH
57906: EMPTY
57907: LIST
57908: LIST
57909: LIST
57910: LIST
57911: ST_TO_ADDR
// bomb_talk_map = [ ] ;
57912: LD_ADDR_VAR 0 11
57916: PUSH
57917: EMPTY
57918: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
57919: LD_INT 35
57921: PPUSH
57922: CALL_OW 67
// if not 1 in ai_bases and not 4 in ai_bases then
57926: LD_INT 1
57928: PUSH
57929: LD_EXP 39
57933: IN
57934: NOT
57935: PUSH
57936: LD_INT 4
57938: PUSH
57939: LD_EXP 39
57943: IN
57944: NOT
57945: AND
57946: IFFALSE 57950
// exit ;
57948: GO 59374
// for base in [ 1 , 4 ] do
57950: LD_ADDR_VAR 0 2
57954: PUSH
57955: LD_INT 1
57957: PUSH
57958: LD_INT 4
57960: PUSH
57961: EMPTY
57962: LIST
57963: LIST
57964: PUSH
57965: FOR_IN
57966: IFFALSE 59368
// begin if not base in ai_bases then
57968: LD_VAR 0 2
57972: PUSH
57973: LD_EXP 39
57977: IN
57978: NOT
57979: IFFALSE 57983
// continue ;
57981: GO 57965
// if going_to_be_recycled_bomb [ base ] > 0 then
57983: LD_VAR 0 10
57987: PUSH
57988: LD_VAR 0 2
57992: ARRAY
57993: PUSH
57994: LD_INT 0
57996: GREATER
57997: IFFALSE 58092
// if IsDead ( going_to_be_recycled_bomb [ base ] ) then
57999: LD_VAR 0 10
58003: PUSH
58004: LD_VAR 0 2
58008: ARRAY
58009: PPUSH
58010: CALL_OW 301
58014: IFFALSE 58092
// begin temp_list = ai_sib_bomb_vehicles [ base ] diff going_to_be_recycled_bomb [ base ] ;
58016: LD_ADDR_VAR 0 3
58020: PUSH
58021: LD_EXP 107
58025: PUSH
58026: LD_VAR 0 2
58030: ARRAY
58031: PUSH
58032: LD_VAR 0 10
58036: PUSH
58037: LD_VAR 0 2
58041: ARRAY
58042: DIFF
58043: ST_TO_ADDR
// ai_sib_bomb_vehicles = Replace ( ai_sib_bomb_vehicles , base , temp_list ) ;
58044: LD_ADDR_EXP 107
58048: PUSH
58049: LD_EXP 107
58053: PPUSH
58054: LD_VAR 0 2
58058: PPUSH
58059: LD_VAR 0 3
58063: PPUSH
58064: CALL_OW 1
58068: ST_TO_ADDR
// going_to_be_recycled_bomb = Replace ( going_to_be_recycled_bomb , base , 0 ) ;
58069: LD_ADDR_VAR 0 10
58073: PUSH
58074: LD_VAR 0 10
58078: PPUSH
58079: LD_VAR 0 2
58083: PPUSH
58084: LD_INT 0
58086: PPUSH
58087: CALL_OW 1
58091: ST_TO_ADDR
// end ; if ai_sib_bomb_mechanics [ base ] < orig_mec_num [ base ] and difficulty = 3 and ( ( base = 1 and IsLive ( Platonov ) ) or ( base = 4 and IsLive ( Powell ) ) ) then
58092: LD_EXP 65
58096: PUSH
58097: LD_VAR 0 2
58101: ARRAY
58102: PUSH
58103: LD_VAR 0 8
58107: PUSH
58108: LD_VAR 0 2
58112: ARRAY
58113: LESS
58114: PUSH
58115: LD_OWVAR 67
58119: PUSH
58120: LD_INT 3
58122: EQUAL
58123: AND
58124: PUSH
58125: LD_VAR 0 2
58129: PUSH
58130: LD_INT 1
58132: EQUAL
58133: PUSH
58134: LD_EXP 25
58138: PPUSH
58139: CALL_OW 300
58143: AND
58144: PUSH
58145: LD_VAR 0 2
58149: PUSH
58150: LD_INT 4
58152: EQUAL
58153: PUSH
58154: LD_EXP 31
58158: PPUSH
58159: CALL_OW 300
58163: AND
58164: OR
58165: AND
58166: IFFALSE 58418
// begin if BaseUnderAttack ( base , - 1 ) then
58168: LD_VAR 0 2
58172: PPUSH
58173: LD_INT 1
58175: NEG
58176: PPUSH
58177: CALL 45321 0 2
58181: IFFALSE 58210
// last_attack_time_tick = Replace ( last_attack_time_tick , base , tick ) else
58183: LD_ADDR_VAR 0 9
58187: PUSH
58188: LD_VAR 0 9
58192: PPUSH
58193: LD_VAR 0 2
58197: PPUSH
58198: LD_OWVAR 1
58202: PPUSH
58203: CALL_OW 1
58207: ST_TO_ADDR
58208: GO 58418
// if last_attack_time_tick [ base ] + 3 3$0 <= tick then
58210: LD_VAR 0 9
58214: PUSH
58215: LD_VAR 0 2
58219: ARRAY
58220: PUSH
58221: LD_INT 6300
58223: PLUS
58224: PUSH
58225: LD_OWVAR 1
58229: LESSEQUAL
58230: IFFALSE 58418
// begin temp_list = CreateUnitsWithClass ( orig_mec_num [ base ] - ai_sib_bomb_mechanics [ base ] , class_mechanic , base ) ;
58232: LD_ADDR_VAR 0 3
58236: PUSH
58237: LD_VAR 0 8
58241: PUSH
58242: LD_VAR 0 2
58246: ARRAY
58247: PUSH
58248: LD_EXP 65
58252: PUSH
58253: LD_VAR 0 2
58257: ARRAY
58258: MINUS
58259: PPUSH
58260: LD_INT 3
58262: PPUSH
58263: LD_VAR 0 2
58267: PPUSH
58268: CALL 13445 0 3
58272: ST_TO_ADDR
// for i in temp_list do
58273: LD_ADDR_VAR 0 1
58277: PUSH
58278: LD_VAR 0 3
58282: PUSH
58283: FOR_IN
58284: IFFALSE 58303
// SetSkill ( i , skill_mechanical , 10 ) ;
58286: LD_VAR 0 1
58290: PPUSH
58291: LD_INT 3
58293: PPUSH
58294: LD_INT 10
58296: PPUSH
58297: CALL_OW 237
58301: GO 58283
58303: POP
58304: POP
// for i in temp_list do
58305: LD_ADDR_VAR 0 1
58309: PUSH
58310: LD_VAR 0 3
58314: PUSH
58315: FOR_IN
58316: IFFALSE 58369
// if not PlaceUnitXYR ( i , 108 , 196 , 2 , false ) then
58318: LD_VAR 0 1
58322: PPUSH
58323: LD_INT 108
58325: PPUSH
58326: LD_INT 196
58328: PPUSH
58329: LD_INT 2
58331: PPUSH
58332: LD_INT 0
58334: PPUSH
58335: CALL_OW 50
58339: NOT
58340: IFFALSE 58367
// begin DestroyUnit ( i ) ;
58342: LD_VAR 0 1
58346: PPUSH
58347: CALL_OW 65
// temp_list = temp_list diff i ;
58351: LD_ADDR_VAR 0 3
58355: PUSH
58356: LD_VAR 0 3
58360: PUSH
58361: LD_VAR 0 1
58365: DIFF
58366: ST_TO_ADDR
// end ;
58367: GO 58315
58369: POP
58370: POP
// temp_list = ai_sib_bomb_mechanics [ base ] ^ temp_list ;
58371: LD_ADDR_VAR 0 3
58375: PUSH
58376: LD_EXP 65
58380: PUSH
58381: LD_VAR 0 2
58385: ARRAY
58386: PUSH
58387: LD_VAR 0 3
58391: ADD
58392: ST_TO_ADDR
// ai_sib_bomb_mechanics = Replace ( ai_sib_bomb_mechanics , base , temp_list ) ;
58393: LD_ADDR_EXP 65
58397: PUSH
58398: LD_EXP 65
58402: PPUSH
58403: LD_VAR 0 2
58407: PPUSH
58408: LD_VAR 0 3
58412: PPUSH
58413: CALL_OW 1
58417: ST_TO_ADDR
// end ; end ; mechanics_list = ai_sib_bomb_mechanics [ base ] diff ai_heal_these_humans [ base ] ;
58418: LD_ADDR_VAR 0 5
58422: PUSH
58423: LD_EXP 65
58427: PUSH
58428: LD_VAR 0 2
58432: ARRAY
58433: PUSH
58434: LD_EXP 75
58438: PUSH
58439: LD_VAR 0 2
58443: ARRAY
58444: DIFF
58445: ST_TO_ADDR
// for i in mechanics_list do
58446: LD_ADDR_VAR 0 1
58450: PUSH
58451: LD_VAR 0 5
58455: PUSH
58456: FOR_IN
58457: IFFALSE 59157
// begin veh = IsInUnit ( i ) ;
58459: LD_ADDR_VAR 0 4
58463: PUSH
58464: LD_VAR 0 1
58468: PPUSH
58469: CALL_OW 310
58473: ST_TO_ADDR
// if veh > 0 then
58474: LD_VAR 0 4
58478: PUSH
58479: LD_INT 0
58481: GREATER
58482: IFFALSE 59155
// if GetType ( veh ) = unit_vehicle then
58484: LD_VAR 0 4
58488: PPUSH
58489: CALL_OW 247
58493: PUSH
58494: LD_INT 2
58496: EQUAL
58497: IFFALSE 59155
// begin mechanics_list = mechanics_list diff i ;
58499: LD_ADDR_VAR 0 5
58503: PUSH
58504: LD_VAR 0 5
58508: PUSH
58509: LD_VAR 0 1
58513: DIFF
58514: ST_TO_ADDR
// case GetWeapon ( veh ) of us_siberium_rocket , ru_siberium_rocket :
58515: LD_VAR 0 4
58519: PPUSH
58520: CALL_OW 264
58524: PUSH
58525: LD_INT 8
58527: DOUBLE
58528: EQUAL
58529: IFTRUE 58539
58531: LD_INT 48
58533: DOUBLE
58534: EQUAL
58535: IFTRUE 58539
58537: GO 59049
58539: POP
// begin bomb_sent = true ;
58540: LD_ADDR_VAR 0 7
58544: PUSH
58545: LD_INT 1
58547: ST_TO_ADDR
// case base of 1 :
58548: LD_VAR 0 2
58552: PUSH
58553: LD_INT 1
58555: DOUBLE
58556: EQUAL
58557: IFTRUE 58561
58559: GO 58671
58561: POP
// begin if IsLive ( Powell ) then
58562: LD_EXP 31
58566: PPUSH
58567: CALL_OW 300
58571: IFFALSE 58610
// ComAttackPlace ( veh , ai_human_pullback_hex [ 4 ] [ 1 ] , ai_human_pullback_hex [ 4 ] [ 2 ] ) else
58573: LD_VAR 0 4
58577: PPUSH
58578: LD_EXP 73
58582: PUSH
58583: LD_INT 4
58585: ARRAY
58586: PUSH
58587: LD_INT 1
58589: ARRAY
58590: PPUSH
58591: LD_EXP 73
58595: PUSH
58596: LD_INT 4
58598: ARRAY
58599: PUSH
58600: LD_INT 2
58602: ARRAY
58603: PPUSH
58604: CALL_OW 116
58608: GO 58669
// begin un = FindPlayerMainBase ;
58610: LD_ADDR_VAR 0 6
58614: PUSH
58615: CALL 59377 0 0
58619: ST_TO_ADDR
// if un > 0 then
58620: LD_VAR 0 6
58624: PUSH
58625: LD_INT 0
58627: GREATER
58628: IFFALSE 58661
// ComAttackPlace ( veh , GetX ( un ) , GetY ( un ) ) else
58630: LD_VAR 0 4
58634: PPUSH
58635: LD_VAR 0 6
58639: PPUSH
58640: CALL_OW 250
58644: PPUSH
58645: LD_VAR 0 6
58649: PPUSH
58650: CALL_OW 251
58654: PPUSH
58655: CALL_OW 116
58659: GO 58669
// bomb_sent = false ;
58661: LD_ADDR_VAR 0 7
58665: PUSH
58666: LD_INT 0
58668: ST_TO_ADDR
// end ; end ; 4 :
58669: GO 58847
58671: LD_INT 4
58673: DOUBLE
58674: EQUAL
58675: IFTRUE 58679
58677: GO 58846
58679: POP
// begin if 2 in ai_bases and alliance_deal_status = 2 then
58680: LD_INT 2
58682: PUSH
58683: LD_EXP 39
58687: IN
58688: PUSH
58689: LD_EXP 131
58693: PUSH
58694: LD_INT 2
58696: EQUAL
58697: AND
58698: IFFALSE 58737
// ComAttackPlace ( veh , ai_human_pullback_hex [ 2 ] [ 1 ] , ai_human_pullback_hex [ 2 ] [ 2 ] ) else
58700: LD_VAR 0 4
58704: PPUSH
58705: LD_EXP 73
58709: PUSH
58710: LD_INT 2
58712: ARRAY
58713: PUSH
58714: LD_INT 1
58716: ARRAY
58717: PPUSH
58718: LD_EXP 73
58722: PUSH
58723: LD_INT 2
58725: ARRAY
58726: PUSH
58727: LD_INT 2
58729: ARRAY
58730: PPUSH
58731: CALL_OW 116
58735: GO 58844
// if IsLive ( Platonov ) then
58737: LD_EXP 25
58741: PPUSH
58742: CALL_OW 300
58746: IFFALSE 58785
// ComAttackPlace ( veh , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) else
58748: LD_VAR 0 4
58752: PPUSH
58753: LD_EXP 73
58757: PUSH
58758: LD_INT 1
58760: ARRAY
58761: PUSH
58762: LD_INT 1
58764: ARRAY
58765: PPUSH
58766: LD_EXP 73
58770: PUSH
58771: LD_INT 1
58773: ARRAY
58774: PUSH
58775: LD_INT 2
58777: ARRAY
58778: PPUSH
58779: CALL_OW 116
58783: GO 58844
// begin un = FindPlayerMainBase ;
58785: LD_ADDR_VAR 0 6
58789: PUSH
58790: CALL 59377 0 0
58794: ST_TO_ADDR
// if un > 0 then
58795: LD_VAR 0 6
58799: PUSH
58800: LD_INT 0
58802: GREATER
58803: IFFALSE 58836
// ComAttackPlace ( veh , GetX ( un ) , GetY ( un ) ) else
58805: LD_VAR 0 4
58809: PPUSH
58810: LD_VAR 0 6
58814: PPUSH
58815: CALL_OW 250
58819: PPUSH
58820: LD_VAR 0 6
58824: PPUSH
58825: CALL_OW 251
58829: PPUSH
58830: CALL_OW 116
58834: GO 58844
// bomb_sent = false ;
58836: LD_ADDR_VAR 0 7
58840: PUSH
58841: LD_INT 0
58843: ST_TO_ADDR
// end ; end ; end ;
58844: GO 58847
58846: POP
// if bomb_sent then
58847: LD_VAR 0 7
58851: IFFALSE 59047
// begin if bomb_talk_map < veh then
58853: LD_VAR 0 11
58857: PUSH
58858: LD_VAR 0 4
58862: LESS
58863: IFFALSE 58888
// bomb_talk_map = Replace ( bomb_talk_map , veh , false ) ;
58865: LD_ADDR_VAR 0 11
58869: PUSH
58870: LD_VAR 0 11
58874: PPUSH
58875: LD_VAR 0 4
58879: PPUSH
58880: LD_INT 0
58882: PPUSH
58883: CALL_OW 1
58887: ST_TO_ADDR
// if not bomb_talk_map [ veh ] then
58888: LD_VAR 0 11
58892: PUSH
58893: LD_VAR 0 4
58897: ARRAY
58898: NOT
58899: IFFALSE 59047
// begin bomb_talk_map = Replace ( bomb_talk_map , veh , true ) ;
58901: LD_ADDR_VAR 0 11
58905: PUSH
58906: LD_VAR 0 11
58910: PPUSH
58911: LD_VAR 0 4
58915: PPUSH
58916: LD_INT 1
58918: PPUSH
58919: CALL_OW 1
58923: ST_TO_ADDR
// case base of 1 :
58924: LD_VAR 0 2
58928: PUSH
58929: LD_INT 1
58931: DOUBLE
58932: EQUAL
58933: IFTRUE 58937
58935: GO 58950
58937: POP
// un = Platonov ; 4 :
58938: LD_ADDR_VAR 0 6
58942: PUSH
58943: LD_EXP 25
58947: ST_TO_ADDR
58948: GO 58972
58950: LD_INT 4
58952: DOUBLE
58953: EQUAL
58954: IFTRUE 58958
58956: GO 58971
58958: POP
// un = Powell ; end ;
58959: LD_ADDR_VAR 0 6
58963: PUSH
58964: LD_EXP 31
58968: ST_TO_ADDR
58969: GO 58972
58971: POP
// if IsLive ( un ) then
58972: LD_VAR 0 6
58976: PPUSH
58977: CALL_OW 300
58981: IFFALSE 59047
// begin DialogueOn ;
58983: CALL_OW 6
// case un of Platonov :
58987: LD_VAR 0 6
58991: PUSH
58992: LD_EXP 25
58996: DOUBLE
58997: EQUAL
58998: IFTRUE 59002
59000: GO 59017
59002: POP
// ForceSay ( un , D25-Pla-1 ) ; Powell :
59003: LD_VAR 0 6
59007: PPUSH
59008: LD_STRING D25-Pla-1
59010: PPUSH
59011: CALL_OW 91
59015: GO 59043
59017: LD_EXP 31
59021: DOUBLE
59022: EQUAL
59023: IFTRUE 59027
59025: GO 59042
59027: POP
// ForceSay ( un , D25-Po-1 ) ; end ;
59028: LD_VAR 0 6
59032: PPUSH
59033: LD_STRING D25-Po-1
59035: PPUSH
59036: CALL_OW 91
59040: GO 59043
59042: POP
// DialogueOff ;
59043: CALL_OW 7
// end ; end ; end ; end ; us_siberium_rocket_remainder , ru_siberium_rocket_remainder :
59047: GO 59155
59049: LD_INT 15
59051: DOUBLE
59052: EQUAL
59053: IFTRUE 59063
59055: LD_INT 55
59057: DOUBLE
59058: EQUAL
59059: IFTRUE 59063
59061: GO 59145
59063: POP
// begin if IsOk ( ai_sib_bomb_fact [ base ] ) and IsIdle ( ai_sib_bomb_fact [ base ] ) then
59064: LD_EXP 63
59068: PUSH
59069: LD_VAR 0 2
59073: ARRAY
59074: PPUSH
59075: CALL_OW 302
59079: PUSH
59080: LD_EXP 63
59084: PUSH
59085: LD_VAR 0 2
59089: ARRAY
59090: PPUSH
59091: CALL_OW 316
59095: AND
59096: IFFALSE 59143
// begin ComRecycle ( veh , ai_sib_bomb_fact [ base ] ) ;
59098: LD_VAR 0 4
59102: PPUSH
59103: LD_EXP 63
59107: PUSH
59108: LD_VAR 0 2
59112: ARRAY
59113: PPUSH
59114: CALL_OW 168
// going_to_be_recycled_bomb = Replace ( going_to_be_recycled_bomb , base , veh ) ;
59118: LD_ADDR_VAR 0 10
59122: PUSH
59123: LD_VAR 0 10
59127: PPUSH
59128: LD_VAR 0 2
59132: PPUSH
59133: LD_VAR 0 4
59137: PPUSH
59138: CALL_OW 1
59142: ST_TO_ADDR
// end ; end ; else
59143: GO 59155
59145: POP
// begin ComExitVehicle ( i ) ;
59146: LD_VAR 0 1
59150: PPUSH
59151: CALL_OW 121
// end ; end ; end ; end ;
59155: GO 58456
59157: POP
59158: POP
// temp_list = ai_heal_these_humans [ base ] ;
59159: LD_ADDR_VAR 0 3
59163: PUSH
59164: LD_EXP 75
59168: PUSH
59169: LD_VAR 0 2
59173: ARRAY
59174: ST_TO_ADDR
// i = 1 ;
59175: LD_ADDR_VAR 0 1
59179: PUSH
59180: LD_INT 1
59182: ST_TO_ADDR
// while i <= mechanics_list do
59183: LD_VAR 0 1
59187: PUSH
59188: LD_VAR 0 5
59192: LESSEQUAL
59193: IFFALSE 59276
// begin if GetLives ( mechanics_list [ i ] ) <= 900 then
59195: LD_VAR 0 5
59199: PUSH
59200: LD_VAR 0 1
59204: ARRAY
59205: PPUSH
59206: CALL_OW 256
59210: PUSH
59211: LD_INT 900
59213: LESSEQUAL
59214: IFFALSE 59260
// begin temp_list = temp_list ^ mechanics_list [ i ] ;
59216: LD_ADDR_VAR 0 3
59220: PUSH
59221: LD_VAR 0 3
59225: PUSH
59226: LD_VAR 0 5
59230: PUSH
59231: LD_VAR 0 1
59235: ARRAY
59236: ADD
59237: ST_TO_ADDR
// mechanics_list = Delete ( mechanics_list , i ) ;
59238: LD_ADDR_VAR 0 5
59242: PUSH
59243: LD_VAR 0 5
59247: PPUSH
59248: LD_VAR 0 1
59252: PPUSH
59253: CALL_OW 3
59257: ST_TO_ADDR
// continue ;
59258: GO 59183
// end ; i = i + 1 ;
59260: LD_ADDR_VAR 0 1
59264: PUSH
59265: LD_VAR 0 1
59269: PUSH
59270: LD_INT 1
59272: PLUS
59273: ST_TO_ADDR
// end ;
59274: GO 59183
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
59276: LD_ADDR_EXP 75
59280: PUSH
59281: LD_EXP 75
59285: PPUSH
59286: LD_VAR 0 2
59290: PPUSH
59291: LD_VAR 0 3
59295: PPUSH
59296: CALL_OW 1
59300: ST_TO_ADDR
// DistributeHumansToBuildings ( base , mechanics_list , UnitFilter ( ai_sib_bomb_fact [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
59301: LD_VAR 0 2
59305: PPUSH
59306: LD_VAR 0 5
59310: PPUSH
59311: LD_EXP 63
59315: PUSH
59316: LD_VAR 0 2
59320: ARRAY
59321: PPUSH
59322: LD_INT 50
59324: PUSH
59325: EMPTY
59326: LIST
59327: PUSH
59328: LD_INT 3
59330: PUSH
59331: LD_INT 57
59333: PUSH
59334: EMPTY
59335: LIST
59336: PUSH
59337: EMPTY
59338: LIST
59339: LIST
59340: PUSH
59341: EMPTY
59342: LIST
59343: LIST
59344: PPUSH
59345: CALL_OW 72
59349: PPUSH
59350: LD_INT 3
59352: PPUSH
59353: LD_INT 6
59355: PPUSH
59356: LD_INT 1
59358: PPUSH
59359: LD_INT 0
59361: PPUSH
59362: CALL 34075 0 7
// end ;
59366: GO 57965
59368: POP
59369: POP
// until false ;
59370: LD_INT 0
59372: IFFALSE 57919
// end ;
59374: PPOPN 11
59376: END
// function FindPlayerMainBase ; var dep_list , map_num , map_base , i , b , temp_list ; begin
59377: LD_INT 0
59379: PPUSH
59380: PPUSH
59381: PPUSH
59382: PPUSH
59383: PPUSH
59384: PPUSH
59385: PPUSH
// dep_list = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
59386: LD_ADDR_VAR 0 2
59390: PUSH
59391: LD_INT 22
59393: PUSH
59394: LD_EXP 2
59398: PUSH
59399: EMPTY
59400: LIST
59401: LIST
59402: PUSH
59403: LD_INT 2
59405: PUSH
59406: LD_INT 30
59408: PUSH
59409: LD_INT 0
59411: PUSH
59412: EMPTY
59413: LIST
59414: LIST
59415: PUSH
59416: LD_INT 30
59418: PUSH
59419: LD_INT 1
59421: PUSH
59422: EMPTY
59423: LIST
59424: LIST
59425: PUSH
59426: EMPTY
59427: LIST
59428: LIST
59429: LIST
59430: PUSH
59431: EMPTY
59432: LIST
59433: LIST
59434: PPUSH
59435: CALL_OW 69
59439: ST_TO_ADDR
// if dep_list = 0 then
59440: LD_VAR 0 2
59444: PUSH
59445: LD_INT 0
59447: EQUAL
59448: IFFALSE 59460
// result = 0 else
59450: LD_ADDR_VAR 0 1
59454: PUSH
59455: LD_INT 0
59457: ST_TO_ADDR
59458: GO 59775
// if dep_list = 1 then
59460: LD_VAR 0 2
59464: PUSH
59465: LD_INT 1
59467: EQUAL
59468: IFFALSE 59486
// result = dep_list [ 1 ] else
59470: LD_ADDR_VAR 0 1
59474: PUSH
59475: LD_VAR 0 2
59479: PUSH
59480: LD_INT 1
59482: ARRAY
59483: ST_TO_ADDR
59484: GO 59775
// begin map_num = [ ] ;
59486: LD_ADDR_VAR 0 3
59490: PUSH
59491: EMPTY
59492: ST_TO_ADDR
// map_base = [ ] ;
59493: LD_ADDR_VAR 0 4
59497: PUSH
59498: EMPTY
59499: ST_TO_ADDR
// for i in dep_list do
59500: LD_ADDR_VAR 0 5
59504: PUSH
59505: LD_VAR 0 2
59509: PUSH
59510: FOR_IN
59511: IFFALSE 59568
// begin map_num = Replace ( map_num , i , 0 ) ;
59513: LD_ADDR_VAR 0 3
59517: PUSH
59518: LD_VAR 0 3
59522: PPUSH
59523: LD_VAR 0 5
59527: PPUSH
59528: LD_INT 0
59530: PPUSH
59531: CALL_OW 1
59535: ST_TO_ADDR
// map_base = Replace ( map_base , GetBase ( i ) , i ) ;
59536: LD_ADDR_VAR 0 4
59540: PUSH
59541: LD_VAR 0 4
59545: PPUSH
59546: LD_VAR 0 5
59550: PPUSH
59551: CALL_OW 274
59555: PPUSH
59556: LD_VAR 0 5
59560: PPUSH
59561: CALL_OW 1
59565: ST_TO_ADDR
// end ;
59566: GO 59510
59568: POP
59569: POP
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] ] ) diff dep_list do
59570: LD_ADDR_VAR 0 5
59574: PUSH
59575: LD_INT 22
59577: PUSH
59578: LD_EXP 2
59582: PUSH
59583: EMPTY
59584: LIST
59585: LIST
59586: PUSH
59587: LD_INT 21
59589: PUSH
59590: LD_INT 3
59592: PUSH
59593: EMPTY
59594: LIST
59595: LIST
59596: PUSH
59597: EMPTY
59598: LIST
59599: LIST
59600: PPUSH
59601: CALL_OW 69
59605: PUSH
59606: LD_VAR 0 2
59610: DIFF
59611: PUSH
59612: FOR_IN
59613: IFFALSE 59707
// begin b = GetBase ( i ) ;
59615: LD_ADDR_VAR 0 6
59619: PUSH
59620: LD_VAR 0 5
59624: PPUSH
59625: CALL_OW 274
59629: ST_TO_ADDR
// if map_base >= b then
59630: LD_VAR 0 4
59634: PUSH
59635: LD_VAR 0 6
59639: GREATEREQUAL
59640: IFFALSE 59705
// if map_base [ b ] > 0 then
59642: LD_VAR 0 4
59646: PUSH
59647: LD_VAR 0 6
59651: ARRAY
59652: PUSH
59653: LD_INT 0
59655: GREATER
59656: IFFALSE 59705
// begin map_num = Replace ( map_num , map_base [ b ] , map_num [ map_base [ b ] ] + 1 ) ;
59658: LD_ADDR_VAR 0 3
59662: PUSH
59663: LD_VAR 0 3
59667: PPUSH
59668: LD_VAR 0 4
59672: PUSH
59673: LD_VAR 0 6
59677: ARRAY
59678: PPUSH
59679: LD_VAR 0 3
59683: PUSH
59684: LD_VAR 0 4
59688: PUSH
59689: LD_VAR 0 6
59693: ARRAY
59694: ARRAY
59695: PUSH
59696: LD_INT 1
59698: PLUS
59699: PPUSH
59700: CALL_OW 1
59704: ST_TO_ADDR
// end ; end ;
59705: GO 59612
59707: POP
59708: POP
// temp_list = [ ] ;
59709: LD_ADDR_VAR 0 7
59713: PUSH
59714: EMPTY
59715: ST_TO_ADDR
// for i in dep_list do
59716: LD_ADDR_VAR 0 5
59720: PUSH
59721: LD_VAR 0 2
59725: PUSH
59726: FOR_IN
59727: IFFALSE 59753
// temp_list = temp_list ^ map_num [ i ] ;
59729: LD_ADDR_VAR 0 7
59733: PUSH
59734: LD_VAR 0 7
59738: PUSH
59739: LD_VAR 0 3
59743: PUSH
59744: LD_VAR 0 5
59748: ARRAY
59749: ADD
59750: ST_TO_ADDR
59751: GO 59726
59753: POP
59754: POP
// result = BestFromListByList ( dep_list , temp_list ) ;
59755: LD_ADDR_VAR 0 1
59759: PUSH
59760: LD_VAR 0 2
59764: PPUSH
59765: LD_VAR 0 7
59769: PPUSH
59770: CALL_OW 79
59774: ST_TO_ADDR
// end ; end ;
59775: LD_VAR 0 1
59779: RET
// function MaxNumWarVehiclesDefend ( base ) ; var time ; begin
59780: LD_INT 0
59782: PPUSH
59783: PPUSH
// case base of 1 :
59784: LD_VAR 0 1
59788: PUSH
59789: LD_INT 1
59791: DOUBLE
59792: EQUAL
59793: IFTRUE 59797
59795: GO 59825
59797: POP
// result = [ 3 , 4 , 5 ] [ difficulty ] ; 2 :
59798: LD_ADDR_VAR 0 2
59802: PUSH
59803: LD_INT 3
59805: PUSH
59806: LD_INT 4
59808: PUSH
59809: LD_INT 5
59811: PUSH
59812: EMPTY
59813: LIST
59814: LIST
59815: LIST
59816: PUSH
59817: LD_OWVAR 67
59821: ARRAY
59822: ST_TO_ADDR
59823: GO 59917
59825: LD_INT 2
59827: DOUBLE
59828: EQUAL
59829: IFTRUE 59833
59831: GO 59844
59833: POP
// result = 0 ; 3 :
59834: LD_ADDR_VAR 0 2
59838: PUSH
59839: LD_INT 0
59841: ST_TO_ADDR
59842: GO 59917
59844: LD_INT 3
59846: DOUBLE
59847: EQUAL
59848: IFTRUE 59852
59850: GO 59880
59852: POP
// result = [ 2 , 3 , 4 ] [ difficulty ] ; 4 :
59853: LD_ADDR_VAR 0 2
59857: PUSH
59858: LD_INT 2
59860: PUSH
59861: LD_INT 3
59863: PUSH
59864: LD_INT 4
59866: PUSH
59867: EMPTY
59868: LIST
59869: LIST
59870: LIST
59871: PUSH
59872: LD_OWVAR 67
59876: ARRAY
59877: ST_TO_ADDR
59878: GO 59917
59880: LD_INT 4
59882: DOUBLE
59883: EQUAL
59884: IFTRUE 59888
59886: GO 59916
59888: POP
// result = [ 1 , 2 , 3 ] [ difficulty ] ; end ;
59889: LD_ADDR_VAR 0 2
59893: PUSH
59894: LD_INT 1
59896: PUSH
59897: LD_INT 2
59899: PUSH
59900: LD_INT 3
59902: PUSH
59903: EMPTY
59904: LIST
59905: LIST
59906: LIST
59907: PUSH
59908: LD_OWVAR 67
59912: ARRAY
59913: ST_TO_ADDR
59914: GO 59917
59916: POP
// if base = 3 and american_arabian_alliance then
59917: LD_VAR 0 1
59921: PUSH
59922: LD_INT 3
59924: EQUAL
59925: PUSH
59926: LD_EXP 123
59930: AND
59931: IFFALSE 59949
// time = ai_vehicle_attack_delay [ 4 ] else
59933: LD_ADDR_VAR 0 3
59937: PUSH
59938: LD_EXP 83
59942: PUSH
59943: LD_INT 4
59945: ARRAY
59946: ST_TO_ADDR
59947: GO 59965
// time = ai_vehicle_attack_delay [ base ] ;
59949: LD_ADDR_VAR 0 3
59953: PUSH
59954: LD_EXP 83
59958: PUSH
59959: LD_VAR 0 1
59963: ARRAY
59964: ST_TO_ADDR
// if ( MaxNumWarVehiclesAttack ( base ) - result ) * 0 0$45 >= time then
59965: LD_VAR 0 1
59969: PPUSH
59970: CALL 60012 0 1
59974: PUSH
59975: LD_VAR 0 2
59979: MINUS
59980: PUSH
59981: LD_INT 1575
59983: MUL
59984: PUSH
59985: LD_VAR 0 3
59989: GREATEREQUAL
59990: IFFALSE 60007
// result = MaxNumWarVehiclesAttack ( base ) ;
59992: LD_ADDR_VAR 0 2
59996: PUSH
59997: LD_VAR 0 1
60001: PPUSH
60002: CALL 60012 0 1
60006: ST_TO_ADDR
// end ;
60007: LD_VAR 0 2
60011: RET
// function MaxNumWarVehiclesAttack ( base ) ; begin
60012: LD_INT 0
60014: PPUSH
// case base of 1 :
60015: LD_VAR 0 1
60019: PUSH
60020: LD_INT 1
60022: DOUBLE
60023: EQUAL
60024: IFTRUE 60028
60026: GO 60124
60028: POP
// begin result = [ 2 , 3 , 4 ] [ difficulty ] ;
60029: LD_ADDR_VAR 0 2
60033: PUSH
60034: LD_INT 2
60036: PUSH
60037: LD_INT 3
60039: PUSH
60040: LD_INT 4
60042: PUSH
60043: EMPTY
60044: LIST
60045: LIST
60046: LIST
60047: PUSH
60048: LD_OWVAR 67
60052: ARRAY
60053: ST_TO_ADDR
// if attacked_times [ base ] + 0 >= 2 then
60054: LD_EXP 132
60058: PUSH
60059: LD_VAR 0 1
60063: ARRAY
60064: PUSH
60065: LD_INT 0
60067: PLUS
60068: PUSH
60069: LD_INT 2
60071: GREATEREQUAL
60072: IFFALSE 60088
// result = result + 1 ;
60074: LD_ADDR_VAR 0 2
60078: PUSH
60079: LD_VAR 0 2
60083: PUSH
60084: LD_INT 1
60086: PLUS
60087: ST_TO_ADDR
// if attacked_times [ base ] + 0 >= 5 then
60088: LD_EXP 132
60092: PUSH
60093: LD_VAR 0 1
60097: ARRAY
60098: PUSH
60099: LD_INT 0
60101: PLUS
60102: PUSH
60103: LD_INT 5
60105: GREATEREQUAL
60106: IFFALSE 60122
// result = result + 1 ;
60108: LD_ADDR_VAR 0 2
60112: PUSH
60113: LD_VAR 0 2
60117: PUSH
60118: LD_INT 1
60120: PLUS
60121: ST_TO_ADDR
// end ; 2 :
60122: GO 60448
60124: LD_INT 2
60126: DOUBLE
60127: EQUAL
60128: IFTRUE 60132
60130: GO 60143
60132: POP
// result = 0 ; 3 :
60133: LD_ADDR_VAR 0 2
60137: PUSH
60138: LD_INT 0
60140: ST_TO_ADDR
60141: GO 60448
60143: LD_INT 3
60145: DOUBLE
60146: EQUAL
60147: IFTRUE 60151
60149: GO 60428
60151: POP
// begin if american_arabian_alliance and am_ar_attack_alli_together then
60152: LD_EXP 123
60156: PUSH
60157: LD_EXP 126
60161: AND
60162: IFFALSE 60269
// begin result = [ 1 , 2 , 4 ] [ difficulty ] ;
60164: LD_ADDR_VAR 0 2
60168: PUSH
60169: LD_INT 1
60171: PUSH
60172: LD_INT 2
60174: PUSH
60175: LD_INT 4
60177: PUSH
60178: EMPTY
60179: LIST
60180: LIST
60181: LIST
60182: PUSH
60183: LD_OWVAR 67
60187: ARRAY
60188: ST_TO_ADDR
// if num_attacks_ar_on_alli > 0 then
60189: LD_EXP 133
60193: PUSH
60194: LD_INT 0
60196: GREATER
60197: IFFALSE 60267
// begin result = result + num_attacks_ar_on_alli ;
60199: LD_ADDR_VAR 0 2
60203: PUSH
60204: LD_VAR 0 2
60208: PUSH
60209: LD_EXP 133
60213: PLUS
60214: ST_TO_ADDR
// if result > [ 2 , 4 , 6 ] [ difficulty ] then
60215: LD_VAR 0 2
60219: PUSH
60220: LD_INT 2
60222: PUSH
60223: LD_INT 4
60225: PUSH
60226: LD_INT 6
60228: PUSH
60229: EMPTY
60230: LIST
60231: LIST
60232: LIST
60233: PUSH
60234: LD_OWVAR 67
60238: ARRAY
60239: GREATER
60240: IFFALSE 60267
// result = [ 2 , 4 , 6 ] [ difficulty ] ;
60242: LD_ADDR_VAR 0 2
60246: PUSH
60247: LD_INT 2
60249: PUSH
60250: LD_INT 4
60252: PUSH
60253: LD_INT 6
60255: PUSH
60256: EMPTY
60257: LIST
60258: LIST
60259: LIST
60260: PUSH
60261: LD_OWVAR 67
60265: ARRAY
60266: ST_TO_ADDR
// end ; end else
60267: GO 60426
// begin if attacked_times [ base ] + 0 = 0 then
60269: LD_EXP 132
60273: PUSH
60274: LD_VAR 0 1
60278: ARRAY
60279: PUSH
60280: LD_INT 0
60282: PLUS
60283: PUSH
60284: LD_INT 0
60286: EQUAL
60287: IFFALSE 60299
// result = 0 else
60289: LD_ADDR_VAR 0 2
60293: PUSH
60294: LD_INT 0
60296: ST_TO_ADDR
60297: GO 60426
// begin result = [ 1 , 2 , 3 ] [ difficulty ] ;
60299: LD_ADDR_VAR 0 2
60303: PUSH
60304: LD_INT 1
60306: PUSH
60307: LD_INT 2
60309: PUSH
60310: LD_INT 3
60312: PUSH
60313: EMPTY
60314: LIST
60315: LIST
60316: LIST
60317: PUSH
60318: LD_OWVAR 67
60322: ARRAY
60323: ST_TO_ADDR
// if attacked_times [ base ] + 0 >= 2 then
60324: LD_EXP 132
60328: PUSH
60329: LD_VAR 0 1
60333: ARRAY
60334: PUSH
60335: LD_INT 0
60337: PLUS
60338: PUSH
60339: LD_INT 2
60341: GREATEREQUAL
60342: IFFALSE 60358
// result = result + 1 ;
60344: LD_ADDR_VAR 0 2
60348: PUSH
60349: LD_VAR 0 2
60353: PUSH
60354: LD_INT 1
60356: PLUS
60357: ST_TO_ADDR
// if attacked_times [ base ] + 0 >= 5 then
60358: LD_EXP 132
60362: PUSH
60363: LD_VAR 0 1
60367: ARRAY
60368: PUSH
60369: LD_INT 0
60371: PLUS
60372: PUSH
60373: LD_INT 5
60375: GREATEREQUAL
60376: IFFALSE 60392
// result = result + 1 ;
60378: LD_ADDR_VAR 0 2
60382: PUSH
60383: LD_VAR 0 2
60387: PUSH
60388: LD_INT 1
60390: PLUS
60391: ST_TO_ADDR
// if attacked_times [ base ] + 0 >= 6 then
60392: LD_EXP 132
60396: PUSH
60397: LD_VAR 0 1
60401: ARRAY
60402: PUSH
60403: LD_INT 0
60405: PLUS
60406: PUSH
60407: LD_INT 6
60409: GREATEREQUAL
60410: IFFALSE 60426
// result = result + 1 ;
60412: LD_ADDR_VAR 0 2
60416: PUSH
60417: LD_VAR 0 2
60421: PUSH
60422: LD_INT 1
60424: PLUS
60425: ST_TO_ADDR
// end ; end ; end ; 4 :
60426: GO 60448
60428: LD_INT 4
60430: DOUBLE
60431: EQUAL
60432: IFTRUE 60436
60434: GO 60447
60436: POP
// result = 6 ; end ;
60437: LD_ADDR_VAR 0 2
60441: PUSH
60442: LD_INT 6
60444: ST_TO_ADDR
60445: GO 60448
60447: POP
// end ;
60448: LD_VAR 0 2
60452: RET
// function MaxNumTaufieldVehicles ( base ) ; var t ; begin
60453: LD_INT 0
60455: PPUSH
60456: PPUSH
// case base of 1 :
60457: LD_VAR 0 1
60461: PUSH
60462: LD_INT 1
60464: DOUBLE
60465: EQUAL
60466: IFTRUE 60470
60468: GO 60577
60470: POP
// begin t = AdjustTimeToDifficulty ( 35 35$0 ) ;
60471: LD_ADDR_VAR 0 3
60475: PUSH
60476: LD_INT 73500
60478: PPUSH
60479: CALL 85701 0 1
60483: ST_TO_ADDR
// if tick < t then
60484: LD_OWVAR 1
60488: PUSH
60489: LD_VAR 0 3
60493: LESS
60494: IFFALSE 60506
// result = 0 else
60496: LD_ADDR_VAR 0 2
60500: PUSH
60501: LD_INT 0
60503: ST_TO_ADDR
60504: GO 60575
// begin if attacked_times [ base ] [ attacked_times [ base ] + 0 ] >= t then
60506: LD_EXP 132
60510: PUSH
60511: LD_VAR 0 1
60515: ARRAY
60516: PUSH
60517: LD_EXP 132
60521: PUSH
60522: LD_VAR 0 1
60526: ARRAY
60527: PUSH
60528: LD_INT 0
60530: PLUS
60531: ARRAY
60532: PUSH
60533: LD_VAR 0 3
60537: GREATEREQUAL
60538: IFFALSE 60567
// result = [ 1 , 2 , 3 ] [ difficulty ] else
60540: LD_ADDR_VAR 0 2
60544: PUSH
60545: LD_INT 1
60547: PUSH
60548: LD_INT 2
60550: PUSH
60551: LD_INT 3
60553: PUSH
60554: EMPTY
60555: LIST
60556: LIST
60557: LIST
60558: PUSH
60559: LD_OWVAR 67
60563: ARRAY
60564: ST_TO_ADDR
60565: GO 60575
// result = 1 ;
60567: LD_ADDR_VAR 0 2
60571: PUSH
60572: LD_INT 1
60574: ST_TO_ADDR
// end ; end ; 2 :
60575: GO 60635
60577: LD_INT 2
60579: DOUBLE
60580: EQUAL
60581: IFTRUE 60585
60583: GO 60596
60585: POP
// result = 0 ; 3 :
60586: LD_ADDR_VAR 0 2
60590: PUSH
60591: LD_INT 0
60593: ST_TO_ADDR
60594: GO 60635
60596: LD_INT 3
60598: DOUBLE
60599: EQUAL
60600: IFTRUE 60604
60602: GO 60615
60604: POP
// result = 0 ; 4 :
60605: LD_ADDR_VAR 0 2
60609: PUSH
60610: LD_INT 0
60612: ST_TO_ADDR
60613: GO 60635
60615: LD_INT 4
60617: DOUBLE
60618: EQUAL
60619: IFTRUE 60623
60621: GO 60634
60623: POP
// result = 0 ; end ;
60624: LD_ADDR_VAR 0 2
60628: PUSH
60629: LD_INT 0
60631: ST_TO_ADDR
60632: GO 60635
60634: POP
// end ;
60635: LD_VAR 0 2
60639: RET
// function MaxNumImplosionVehicles ( base ) ; begin
60640: LD_INT 0
60642: PPUSH
// case base of 1 :
60643: LD_VAR 0 1
60647: PUSH
60648: LD_INT 1
60650: DOUBLE
60651: EQUAL
60652: IFTRUE 60656
60654: GO 60667
60656: POP
// result = 0 ; 2 :
60657: LD_ADDR_VAR 0 2
60661: PUSH
60662: LD_INT 0
60664: ST_TO_ADDR
60665: GO 60725
60667: LD_INT 2
60669: DOUBLE
60670: EQUAL
60671: IFTRUE 60675
60673: GO 60686
60675: POP
// result = 0 ; 3 :
60676: LD_ADDR_VAR 0 2
60680: PUSH
60681: LD_INT 0
60683: ST_TO_ADDR
60684: GO 60725
60686: LD_INT 3
60688: DOUBLE
60689: EQUAL
60690: IFTRUE 60694
60692: GO 60705
60694: POP
// result = 0 ; 4 :
60695: LD_ADDR_VAR 0 2
60699: PUSH
60700: LD_INT 0
60702: ST_TO_ADDR
60703: GO 60725
60705: LD_INT 4
60707: DOUBLE
60708: EQUAL
60709: IFTRUE 60713
60711: GO 60724
60713: POP
// result = 0 ; end ;
60714: LD_ADDR_VAR 0 2
60718: PUSH
60719: LD_INT 0
60721: ST_TO_ADDR
60722: GO 60725
60724: POP
// end ;
60725: LD_VAR 0 2
60729: RET
// function MaxNumBehemoths ( base ) ; var t ; begin
60730: LD_INT 0
60732: PPUSH
60733: PPUSH
// case base of 1 :
60734: LD_VAR 0 1
60738: PUSH
60739: LD_INT 1
60741: DOUBLE
60742: EQUAL
60743: IFTRUE 60747
60745: GO 60852
60747: POP
// begin if StratGroupAUsed then
60748: CALL 85614 0 0
60752: IFFALSE 60764
// t = 60 60$0 else
60754: LD_ADDR_VAR 0 3
60758: PUSH
60759: LD_INT 126000
60761: ST_TO_ADDR
60762: GO 60788
// if StratGroupBUsed then
60764: CALL 85643 0 0
60768: IFFALSE 60780
// t = 65 65$0 else
60770: LD_ADDR_VAR 0 3
60774: PUSH
60775: LD_INT 136500
60777: ST_TO_ADDR
60778: GO 60788
// t = 50 50$0 ;
60780: LD_ADDR_VAR 0 3
60784: PUSH
60785: LD_INT 105000
60787: ST_TO_ADDR
// t = AdjustTimeToDifficulty ( t ) ;
60788: LD_ADDR_VAR 0 3
60792: PUSH
60793: LD_VAR 0 3
60797: PPUSH
60798: CALL 85701 0 1
60802: ST_TO_ADDR
// if tick < t then
60803: LD_OWVAR 1
60807: PUSH
60808: LD_VAR 0 3
60812: LESS
60813: IFFALSE 60825
// result = 0 else
60815: LD_ADDR_VAR 0 2
60819: PUSH
60820: LD_INT 0
60822: ST_TO_ADDR
60823: GO 60850
// begin result = [ 1 , 2 , 3 ] [ difficulty ] ;
60825: LD_ADDR_VAR 0 2
60829: PUSH
60830: LD_INT 1
60832: PUSH
60833: LD_INT 2
60835: PUSH
60836: LD_INT 3
60838: PUSH
60839: EMPTY
60840: LIST
60841: LIST
60842: LIST
60843: PUSH
60844: LD_OWVAR 67
60848: ARRAY
60849: ST_TO_ADDR
// end ; end ; 2 :
60850: GO 60910
60852: LD_INT 2
60854: DOUBLE
60855: EQUAL
60856: IFTRUE 60860
60858: GO 60871
60860: POP
// result = 0 ; 3 :
60861: LD_ADDR_VAR 0 2
60865: PUSH
60866: LD_INT 0
60868: ST_TO_ADDR
60869: GO 60910
60871: LD_INT 3
60873: DOUBLE
60874: EQUAL
60875: IFTRUE 60879
60877: GO 60890
60879: POP
// result = 0 ; 4 :
60880: LD_ADDR_VAR 0 2
60884: PUSH
60885: LD_INT 0
60887: ST_TO_ADDR
60888: GO 60910
60890: LD_INT 4
60892: DOUBLE
60893: EQUAL
60894: IFTRUE 60898
60896: GO 60909
60898: POP
// result = 0 ; end ;
60899: LD_ADDR_VAR 0 2
60903: PUSH
60904: LD_INT 0
60906: ST_TO_ADDR
60907: GO 60910
60909: POP
// end ;
60910: LD_VAR 0 2
60914: 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 ;
60915: GO 60917
60917: DISABLE
60918: LD_INT 0
60920: PPUSH
60921: PPUSH
60922: PPUSH
60923: PPUSH
60924: PPUSH
60925: PPUSH
60926: PPUSH
60927: PPUSH
60928: PPUSH
60929: PPUSH
60930: PPUSH
60931: PPUSH
// begin vehicle_prod_delay = [ 0 0$0 , 0 0$0 , 0 0$0 , 0 0$0 ] ;
60932: LD_ADDR_VAR 0 10
60936: PUSH
60937: LD_INT 0
60939: PUSH
60940: LD_INT 0
60942: PUSH
60943: LD_INT 0
60945: PUSH
60946: LD_INT 0
60948: PUSH
60949: EMPTY
60950: LIST
60951: LIST
60952: LIST
60953: LIST
60954: ST_TO_ADDR
// saved_construct_list = [ [ ] , [ ] , [ ] , [ ] ] ;
60955: LD_ADDR_VAR 0 11
60959: PUSH
60960: EMPTY
60961: PUSH
60962: EMPTY
60963: PUSH
60964: EMPTY
60965: PUSH
60966: EMPTY
60967: PUSH
60968: EMPTY
60969: LIST
60970: LIST
60971: LIST
60972: LIST
60973: ST_TO_ADDR
// repeat if ai_bases = 0 then
60974: LD_EXP 39
60978: PUSH
60979: LD_INT 0
60981: EQUAL
60982: IFFALSE 60986
// exit ;
60984: GO 63877
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
60986: LD_INT 35
60988: PUSH
60989: LD_EXP 39
60993: PUSH
60994: LD_INT 0
60996: PLUS
60997: MOD
60998: PPUSH
60999: CALL_OW 67
// for base in ai_bases do
61003: LD_ADDR_VAR 0 5
61007: PUSH
61008: LD_EXP 39
61012: PUSH
61013: FOR_IN
61014: IFFALSE 63871
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
61016: LD_INT 35
61018: PUSH
61019: LD_EXP 39
61023: PUSH
61024: LD_INT 0
61026: PLUS
61027: DIV
61028: PPUSH
61029: CALL_OW 67
// under_attack = BaseUnderAttack ( base , - 1 ) ;
61033: LD_ADDR_VAR 0 12
61037: PUSH
61038: LD_VAR 0 5
61042: PPUSH
61043: LD_INT 1
61045: NEG
61046: PPUSH
61047: CALL 45321 0 2
61051: ST_TO_ADDR
// if under_attack and ai_vehicles_defend [ base ] >= [ 0 , 1 , 2 ] [ difficulty ] and not ( base = 1 and rus_enforce_vehicle_prod ) then
61052: LD_VAR 0 12
61056: PUSH
61057: LD_EXP 67
61061: PUSH
61062: LD_VAR 0 5
61066: ARRAY
61067: PUSH
61068: LD_INT 0
61070: PUSH
61071: LD_INT 1
61073: PUSH
61074: LD_INT 2
61076: PUSH
61077: EMPTY
61078: LIST
61079: LIST
61080: LIST
61081: PUSH
61082: LD_OWVAR 67
61086: ARRAY
61087: GREATEREQUAL
61088: AND
61089: PUSH
61090: LD_VAR 0 5
61094: PUSH
61095: LD_INT 1
61097: EQUAL
61098: PUSH
61099: LD_EXP 141
61103: AND
61104: NOT
61105: AND
61106: IFFALSE 61148
// begin vehicle_prod_delay = Replace ( vehicle_prod_delay , base , [ 1 1$15 , 0 0$45 , 0 0$30 ] [ difficulty ] ) ;
61108: LD_ADDR_VAR 0 10
61112: PUSH
61113: LD_VAR 0 10
61117: PPUSH
61118: LD_VAR 0 5
61122: PPUSH
61123: LD_INT 2625
61125: PUSH
61126: LD_INT 1575
61128: PUSH
61129: LD_INT 1050
61131: PUSH
61132: EMPTY
61133: LIST
61134: LIST
61135: LIST
61136: PUSH
61137: LD_OWVAR 67
61141: ARRAY
61142: PPUSH
61143: CALL_OW 1
61147: ST_TO_ADDR
// end ; idle_factories = [ ] ;
61148: LD_ADDR_VAR 0 6
61152: PUSH
61153: EMPTY
61154: ST_TO_ADDR
// for i in ai_facts [ base ] diff ai_sib_bomb_fact [ base ] do
61155: LD_ADDR_VAR 0 1
61159: PUSH
61160: LD_EXP 51
61164: PUSH
61165: LD_VAR 0 5
61169: ARRAY
61170: PUSH
61171: LD_EXP 63
61175: PUSH
61176: LD_VAR 0 5
61180: ARRAY
61181: DIFF
61182: PUSH
61183: FOR_IN
61184: IFFALSE 61295
// if BuildingStatus ( i ) = bs_idle and IsOk ( i ) and GetBType ( i ) = b_factory then
61186: LD_VAR 0 1
61190: PPUSH
61191: CALL_OW 461
61195: PUSH
61196: LD_INT 2
61198: EQUAL
61199: PUSH
61200: LD_VAR 0 1
61204: PPUSH
61205: CALL_OW 302
61209: AND
61210: PUSH
61211: LD_VAR 0 1
61215: PPUSH
61216: CALL_OW 266
61220: PUSH
61221: LD_INT 3
61223: EQUAL
61224: AND
61225: IFFALSE 61293
// begin b = true ;
61227: LD_ADDR_VAR 0 8
61231: PUSH
61232: LD_INT 1
61234: ST_TO_ADDR
// if ai_facts_with_ext_rebuild_map >= i then
61235: LD_EXP 108
61239: PUSH
61240: LD_VAR 0 1
61244: GREATEREQUAL
61245: IFFALSE 61271
// if ai_facts_with_ext_rebuild_map [ i ] > 0 then
61247: LD_EXP 108
61251: PUSH
61252: LD_VAR 0 1
61256: ARRAY
61257: PUSH
61258: LD_INT 0
61260: GREATER
61261: IFFALSE 61271
// b = false ;
61263: LD_ADDR_VAR 0 8
61267: PUSH
61268: LD_INT 0
61270: ST_TO_ADDR
// if b then
61271: LD_VAR 0 8
61275: IFFALSE 61293
// idle_factories = idle_factories ^ i ;
61277: LD_ADDR_VAR 0 6
61281: PUSH
61282: LD_VAR 0 6
61286: PUSH
61287: LD_VAR 0 1
61291: ADD
61292: ST_TO_ADDR
// end ;
61293: GO 61183
61295: POP
61296: POP
// if idle_factories = 0 then
61297: LD_VAR 0 6
61301: PUSH
61302: LD_INT 0
61304: EQUAL
61305: IFFALSE 61309
// continue ;
61307: GO 61013
// temp_value = false ;
61309: LD_ADDR_VAR 0 2
61313: PUSH
61314: LD_INT 0
61316: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
61317: LD_ADDR_VAR 0 1
61321: PUSH
61322: LD_EXP 61
61326: PUSH
61327: LD_VAR 0 5
61331: ARRAY
61332: PUSH
61333: FOR_IN
61334: IFFALSE 61606
// if i [ 4 ] in [ b_bunker , b_turret ] then
61336: LD_VAR 0 1
61340: PUSH
61341: LD_INT 4
61343: ARRAY
61344: PUSH
61345: LD_INT 32
61347: PUSH
61348: LD_INT 33
61350: PUSH
61351: EMPTY
61352: LIST
61353: LIST
61354: IN
61355: IFFALSE 61604
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
61357: LD_ADDR_VAR 0 3
61361: PUSH
61362: LD_VAR 0 1
61366: PUSH
61367: LD_INT 1
61369: ARRAY
61370: PPUSH
61371: LD_VAR 0 1
61375: PUSH
61376: LD_INT 2
61378: ARRAY
61379: PPUSH
61380: CALL_OW 428
61384: ST_TO_ADDR
// if temp_unit > 0 then
61385: LD_VAR 0 3
61389: PUSH
61390: LD_INT 0
61392: GREATER
61393: IFFALSE 61604
// if GetType ( temp_unit ) = unit_building then
61395: LD_VAR 0 3
61399: PPUSH
61400: CALL_OW 247
61404: PUSH
61405: LD_INT 3
61407: EQUAL
61408: IFFALSE 61604
// if GetBType ( temp_unit ) in [ b_bunker , b_turret ] and not IsConstructed ( temp_unit ) and GetBWeapon ( temp_unit ) = 0 then
61410: LD_VAR 0 3
61414: PPUSH
61415: CALL_OW 266
61419: PUSH
61420: LD_INT 32
61422: PUSH
61423: LD_INT 33
61425: PUSH
61426: EMPTY
61427: LIST
61428: LIST
61429: IN
61430: PUSH
61431: LD_VAR 0 3
61435: PPUSH
61436: CALL_OW 304
61440: NOT
61441: AND
61442: PUSH
61443: LD_VAR 0 3
61447: PPUSH
61448: CALL_OW 269
61452: PUSH
61453: LD_INT 0
61455: EQUAL
61456: AND
61457: IFFALSE 61604
// begin b = false ;
61459: LD_ADDR_VAR 0 8
61463: PUSH
61464: LD_INT 0
61466: ST_TO_ADDR
// if not under_attack then
61467: LD_VAR 0 12
61471: NOT
61472: IFFALSE 61484
// b = true else
61474: LD_ADDR_VAR 0 8
61478: PUSH
61479: LD_INT 1
61481: ST_TO_ADDR
61482: GO 61523
// begin if CanFactConstructThis ( idle_factories [ 1 ] , i [ 7 ] , false ) = 1 then
61484: LD_VAR 0 6
61488: PUSH
61489: LD_INT 1
61491: ARRAY
61492: PPUSH
61493: LD_VAR 0 1
61497: PUSH
61498: LD_INT 7
61500: ARRAY
61501: PPUSH
61502: LD_INT 0
61504: PPUSH
61505: CALL 64387 0 3
61509: PUSH
61510: LD_INT 1
61512: EQUAL
61513: IFFALSE 61523
// b = true ;
61515: LD_ADDR_VAR 0 8
61519: PUSH
61520: LD_INT 1
61522: ST_TO_ADDR
// end ; if b then
61523: LD_VAR 0 8
61527: IFFALSE 61604
// begin if FactConstruct ( base , [ idle_factories [ 1 ] ] , [ temp_unit , - 1 , - 1 , i [ 7 ] ] , false ) in [ 0 , 1 ] then
61529: LD_VAR 0 5
61533: PPUSH
61534: LD_VAR 0 6
61538: PUSH
61539: LD_INT 1
61541: ARRAY
61542: PUSH
61543: EMPTY
61544: LIST
61545: PPUSH
61546: LD_VAR 0 3
61550: PUSH
61551: LD_INT 1
61553: NEG
61554: PUSH
61555: LD_INT 1
61557: NEG
61558: PUSH
61559: LD_VAR 0 1
61563: PUSH
61564: LD_INT 7
61566: ARRAY
61567: PUSH
61568: EMPTY
61569: LIST
61570: LIST
61571: LIST
61572: LIST
61573: PPUSH
61574: LD_INT 0
61576: PPUSH
61577: CALL 63880 0 4
61581: PUSH
61582: LD_INT 0
61584: PUSH
61585: LD_INT 1
61587: PUSH
61588: EMPTY
61589: LIST
61590: LIST
61591: IN
61592: IFFALSE 61604
// begin temp_value = true ;
61594: LD_ADDR_VAR 0 2
61598: PUSH
61599: LD_INT 1
61601: ST_TO_ADDR
// break ;
61602: GO 61606
// end ; end ; end ; end ;
61604: GO 61333
61606: POP
61607: POP
// if temp_value then
61608: LD_VAR 0 2
61612: IFFALSE 61616
// continue ;
61614: GO 61013
// if base = 3 then
61616: LD_VAR 0 5
61620: PUSH
61621: LD_INT 3
61623: EQUAL
61624: IFFALSE 61679
// begin b = CheckAndFixArControlTowerAmount ( base , idle_factories , false ) ;
61626: LD_ADDR_VAR 0 8
61630: PUSH
61631: LD_VAR 0 5
61635: PPUSH
61636: LD_VAR 0 6
61640: PPUSH
61641: LD_INT 0
61643: PPUSH
61644: CALL 64101 0 3
61648: ST_TO_ADDR
// if b <> - 1 then
61649: LD_VAR 0 8
61653: PUSH
61654: LD_INT 1
61656: NEG
61657: NONEQUAL
61658: IFFALSE 61679
// begin if b in [ 0 , 1 ] then
61660: LD_VAR 0 8
61664: PUSH
61665: LD_INT 0
61667: PUSH
61668: LD_INT 1
61670: PUSH
61671: EMPTY
61672: LIST
61673: LIST
61674: IN
61675: IFFALSE 61679
// continue ;
61677: GO 61013
// end ; end ; if not under_attack then
61679: LD_VAR 0 12
61683: NOT
61684: IFFALSE 62004
// 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$30 , 3 3$0 ] [ difficulty ] then
61686: LD_EXP 85
61690: PUSH
61691: LD_VAR 0 5
61695: ARRAY
61696: PUSH
61697: LD_INT 0
61699: EQUAL
61700: PUSH
61701: LD_EXP 86
61705: PUSH
61706: LD_VAR 0 5
61710: ARRAY
61711: NOT
61712: AND
61713: PUSH
61714: LD_OWVAR 1
61718: PUSH
61719: LD_EXP 87
61723: PUSH
61724: LD_VAR 0 5
61728: ARRAY
61729: MINUS
61730: PUSH
61731: LD_INT 12600
61733: PUSH
61734: LD_INT 9450
61736: PUSH
61737: LD_INT 6300
61739: PUSH
61740: EMPTY
61741: LIST
61742: LIST
61743: LIST
61744: PUSH
61745: LD_OWVAR 67
61749: ARRAY
61750: GREATEREQUAL
61751: AND
61752: IFFALSE 62004
// begin case GetBaseNation ( base ) of nation_american :
61754: LD_VAR 0 5
61758: PPUSH
61759: CALL 24983 0 1
61763: PUSH
61764: LD_INT 1
61766: DOUBLE
61767: EQUAL
61768: IFTRUE 61772
61770: GO 61837
61772: POP
// begin b = false ;
61773: LD_ADDR_VAR 0 8
61777: PUSH
61778: LD_INT 0
61780: ST_TO_ADDR
// temp_list = [ us_medium_tracked , engine_siberite , control_computer , us_cargo_bay ] ;
61781: LD_ADDR_VAR 0 4
61785: PUSH
61786: LD_INT 3
61788: PUSH
61789: LD_INT 3
61791: PUSH
61792: LD_INT 3
61794: PUSH
61795: LD_INT 12
61797: PUSH
61798: EMPTY
61799: LIST
61800: LIST
61801: LIST
61802: LIST
61803: ST_TO_ADDR
// if base = 2 then
61804: LD_VAR 0 5
61808: PUSH
61809: LD_INT 2
61811: EQUAL
61812: IFFALSE 61835
// temp_list = Replace ( temp_list , 1 , us_medium_wheeled ) ;
61814: LD_ADDR_VAR 0 4
61818: PUSH
61819: LD_VAR 0 4
61823: PPUSH
61824: LD_INT 1
61826: PPUSH
61827: LD_INT 2
61829: PPUSH
61830: CALL_OW 1
61834: ST_TO_ADDR
// end ; nation_arabian :
61835: GO 61922
61837: LD_INT 2
61839: DOUBLE
61840: EQUAL
61841: IFTRUE 61845
61843: GO 61879
61845: POP
// begin b = true ;
61846: LD_ADDR_VAR 0 8
61850: PUSH
61851: LD_INT 1
61853: ST_TO_ADDR
// temp_list = [ ar_half_tracked , engine_siberite , control_remote , ar_cargo_bay ] ;
61854: LD_ADDR_VAR 0 4
61858: PUSH
61859: LD_INT 14
61861: PUSH
61862: LD_INT 3
61864: PUSH
61865: LD_INT 2
61867: PUSH
61868: LD_INT 32
61870: PUSH
61871: EMPTY
61872: LIST
61873: LIST
61874: LIST
61875: LIST
61876: ST_TO_ADDR
// end ; nation_russian :
61877: GO 61922
61879: LD_INT 3
61881: DOUBLE
61882: EQUAL
61883: IFTRUE 61887
61885: GO 61921
61887: POP
// begin b = false ;
61888: LD_ADDR_VAR 0 8
61892: PUSH
61893: LD_INT 0
61895: ST_TO_ADDR
// temp_list = [ ru_medium_tracked , engine_siberite , control_computer , ru_cargo_bay ] ;
61896: LD_ADDR_VAR 0 4
61900: PUSH
61901: LD_INT 22
61903: PUSH
61904: LD_INT 3
61906: PUSH
61907: LD_INT 3
61909: PUSH
61910: LD_INT 51
61912: PUSH
61913: EMPTY
61914: LIST
61915: LIST
61916: LIST
61917: LIST
61918: ST_TO_ADDR
// end ; end ;
61919: GO 61922
61921: POP
// b = FactConstruct ( base , idle_factories , temp_list , b ) ;
61922: LD_ADDR_VAR 0 8
61926: PUSH
61927: LD_VAR 0 5
61931: PPUSH
61932: LD_VAR 0 6
61936: PPUSH
61937: LD_VAR 0 4
61941: PPUSH
61942: LD_VAR 0 8
61946: PPUSH
61947: CALL 63880 0 4
61951: ST_TO_ADDR
// if b in [ 0 , 1 ] then
61952: LD_VAR 0 8
61956: PUSH
61957: LD_INT 0
61959: PUSH
61960: LD_INT 1
61962: PUSH
61963: EMPTY
61964: LIST
61965: LIST
61966: IN
61967: IFFALSE 62004
// begin if b = 1 then
61969: LD_VAR 0 8
61973: PUSH
61974: LD_INT 1
61976: EQUAL
61977: IFFALSE 62002
// ai_cargo_bay_under_construction = Replace ( ai_cargo_bay_under_construction , base , true ) ;
61979: LD_ADDR_EXP 86
61983: PUSH
61984: LD_EXP 86
61988: PPUSH
61989: LD_VAR 0 5
61993: PPUSH
61994: LD_INT 1
61996: PPUSH
61997: CALL_OW 1
62001: ST_TO_ADDR
// continue ;
62002: GO 61013
// end ; end ; end ; if base in [ 1 , 2 , 4 ] and difficulty > 1 then
62004: LD_VAR 0 5
62008: PUSH
62009: LD_INT 1
62011: PUSH
62012: LD_INT 2
62014: PUSH
62015: LD_INT 4
62017: PUSH
62018: EMPTY
62019: LIST
62020: LIST
62021: LIST
62022: IN
62023: PUSH
62024: LD_OWVAR 67
62028: PUSH
62029: LD_INT 1
62031: GREATER
62032: AND
62033: IFFALSE 62506
// begin if ai_crane [ base ] = 0 and not ai_crane_under_construction [ base ] and tick - ai_crane_destroy_tick [ base ] >= [ 8 8$0 , 6 6$0 , 4 4$0 ] [ difficulty ] then
62035: LD_EXP 88
62039: PUSH
62040: LD_VAR 0 5
62044: ARRAY
62045: PUSH
62046: LD_INT 0
62048: EQUAL
62049: PUSH
62050: LD_EXP 89
62054: PUSH
62055: LD_VAR 0 5
62059: ARRAY
62060: NOT
62061: AND
62062: PUSH
62063: LD_OWVAR 1
62067: PUSH
62068: LD_EXP 90
62072: PUSH
62073: LD_VAR 0 5
62077: ARRAY
62078: MINUS
62079: PUSH
62080: LD_INT 16800
62082: PUSH
62083: LD_INT 12600
62085: PUSH
62086: LD_INT 8400
62088: PUSH
62089: EMPTY
62090: LIST
62091: LIST
62092: LIST
62093: PUSH
62094: LD_OWVAR 67
62098: ARRAY
62099: GREATEREQUAL
62100: AND
62101: IFFALSE 62506
// begin temp_list = [ ] ;
62103: LD_ADDR_VAR 0 4
62107: PUSH
62108: EMPTY
62109: ST_TO_ADDR
// case GetBaseNation ( base ) of nation_american :
62110: LD_VAR 0 5
62114: PPUSH
62115: CALL 24983 0 1
62119: PUSH
62120: LD_INT 1
62122: DOUBLE
62123: EQUAL
62124: IFTRUE 62128
62126: GO 62255
62128: POP
// begin temp_list = [ us_medium_tracked , engine_siberite , control_manual , us_crane ] ;
62129: LD_ADDR_VAR 0 4
62133: PUSH
62134: LD_INT 3
62136: PUSH
62137: LD_INT 3
62139: PUSH
62140: LD_INT 1
62142: PUSH
62143: LD_INT 13
62145: PUSH
62146: EMPTY
62147: LIST
62148: LIST
62149: LIST
62150: LIST
62151: ST_TO_ADDR
// if ai_mechanics_defend [ base ] + ai_mechanics_attack [ base ] = 1 then
62152: LD_EXP 43
62156: PUSH
62157: LD_VAR 0 5
62161: ARRAY
62162: PUSH
62163: LD_EXP 44
62167: PUSH
62168: LD_VAR 0 5
62172: ARRAY
62173: PLUS
62174: PUSH
62175: LD_INT 1
62177: EQUAL
62178: IFFALSE 62201
// temp_list = Replace ( temp_list , 3 , control_computer ) ;
62180: LD_ADDR_VAR 0 4
62184: PUSH
62185: LD_VAR 0 4
62189: PPUSH
62190: LD_INT 3
62192: PPUSH
62193: LD_INT 3
62195: PPUSH
62196: CALL_OW 1
62200: ST_TO_ADDR
// if base = 2 then
62201: LD_VAR 0 5
62205: PUSH
62206: LD_INT 2
62208: EQUAL
62209: IFFALSE 62253
// begin temp_list = Replace ( temp_list , 1 , us_medium_wheeled ) ;
62211: LD_ADDR_VAR 0 4
62215: PUSH
62216: LD_VAR 0 4
62220: PPUSH
62221: LD_INT 1
62223: PPUSH
62224: LD_INT 2
62226: PPUSH
62227: CALL_OW 1
62231: ST_TO_ADDR
// temp_list = Replace ( temp_list , 3 , control_computer ) ;
62232: LD_ADDR_VAR 0 4
62236: PUSH
62237: LD_VAR 0 4
62241: PPUSH
62242: LD_INT 3
62244: PPUSH
62245: LD_INT 3
62247: PPUSH
62248: CALL_OW 1
62252: ST_TO_ADDR
// end ; end ; nation_russian :
62253: GO 62339
62255: LD_INT 3
62257: DOUBLE
62258: EQUAL
62259: IFTRUE 62263
62261: GO 62338
62263: POP
// begin temp_list = [ ru_medium_tracked , engine_siberite , control_manual , ru_crane ] ;
62264: LD_ADDR_VAR 0 4
62268: PUSH
62269: LD_INT 22
62271: PUSH
62272: LD_INT 3
62274: PUSH
62275: LD_INT 1
62277: PUSH
62278: LD_INT 52
62280: PUSH
62281: EMPTY
62282: LIST
62283: LIST
62284: LIST
62285: LIST
62286: ST_TO_ADDR
// if ai_mechanics_defend [ base ] + ai_mechanics_attack [ base ] = 1 then
62287: LD_EXP 43
62291: PUSH
62292: LD_VAR 0 5
62296: ARRAY
62297: PUSH
62298: LD_EXP 44
62302: PUSH
62303: LD_VAR 0 5
62307: ARRAY
62308: PLUS
62309: PUSH
62310: LD_INT 1
62312: EQUAL
62313: IFFALSE 62336
// temp_list = Replace ( temp_list , 3 , control_computer ) ;
62315: LD_ADDR_VAR 0 4
62319: PUSH
62320: LD_VAR 0 4
62324: PPUSH
62325: LD_INT 3
62327: PPUSH
62328: LD_INT 3
62330: PPUSH
62331: CALL_OW 1
62335: ST_TO_ADDR
// end ; end ;
62336: GO 62339
62338: POP
// if temp_list > 0 then
62339: LD_VAR 0 4
62343: PUSH
62344: LD_INT 0
62346: GREATER
62347: IFFALSE 62506
// begin b = false ;
62349: LD_ADDR_VAR 0 8
62353: PUSH
62354: LD_INT 0
62356: ST_TO_ADDR
// if not under_attack then
62357: LD_VAR 0 12
62361: NOT
62362: IFFALSE 62374
// b = true else
62364: LD_ADDR_VAR 0 8
62368: PUSH
62369: LD_INT 1
62371: ST_TO_ADDR
62372: GO 62413
// begin if CanFactConstructThis ( idle_factories [ 1 ] , temp_list [ 4 ] , false ) = 1 then
62374: LD_VAR 0 6
62378: PUSH
62379: LD_INT 1
62381: ARRAY
62382: PPUSH
62383: LD_VAR 0 4
62387: PUSH
62388: LD_INT 4
62390: ARRAY
62391: PPUSH
62392: LD_INT 0
62394: PPUSH
62395: CALL 64387 0 3
62399: PUSH
62400: LD_INT 1
62402: EQUAL
62403: IFFALSE 62413
// b = true ;
62405: LD_ADDR_VAR 0 8
62409: PUSH
62410: LD_INT 1
62412: ST_TO_ADDR
// end ; if b then
62413: LD_VAR 0 8
62417: IFFALSE 62506
// begin b = FactConstruct ( base , [ idle_factories [ 1 ] ] , temp_list , false ) ;
62419: LD_ADDR_VAR 0 8
62423: PUSH
62424: LD_VAR 0 5
62428: PPUSH
62429: LD_VAR 0 6
62433: PUSH
62434: LD_INT 1
62436: ARRAY
62437: PUSH
62438: EMPTY
62439: LIST
62440: PPUSH
62441: LD_VAR 0 4
62445: PPUSH
62446: LD_INT 0
62448: PPUSH
62449: CALL 63880 0 4
62453: ST_TO_ADDR
// if b in [ 0 , 1 ] then
62454: LD_VAR 0 8
62458: PUSH
62459: LD_INT 0
62461: PUSH
62462: LD_INT 1
62464: PUSH
62465: EMPTY
62466: LIST
62467: LIST
62468: IN
62469: IFFALSE 62506
// begin if b = 1 then
62471: LD_VAR 0 8
62475: PUSH
62476: LD_INT 1
62478: EQUAL
62479: IFFALSE 62504
// ai_crane_under_construction = Replace ( ai_crane_under_construction , base , true ) ;
62481: LD_ADDR_EXP 89
62485: PUSH
62486: LD_EXP 89
62490: PPUSH
62491: LD_VAR 0 5
62495: PPUSH
62496: LD_INT 1
62498: PPUSH
62499: CALL_OW 1
62503: ST_TO_ADDR
// continue ;
62504: GO 61013
// end ; end ; end ; end ; end ; if vehicle_prod_delay [ base ] > 0 0$0 and not ( base = 1 and rus_enforce_vehicle_prod ) then
62506: LD_VAR 0 10
62510: PUSH
62511: LD_VAR 0 5
62515: ARRAY
62516: PUSH
62517: LD_INT 0
62519: GREATER
62520: PUSH
62521: LD_VAR 0 5
62525: PUSH
62526: LD_INT 1
62528: EQUAL
62529: PUSH
62530: LD_EXP 141
62534: AND
62535: NOT
62536: AND
62537: IFFALSE 62576
// begin vehicle_prod_delay = Replace ( vehicle_prod_delay , base , vehicle_prod_delay [ base ] - 0 0$1 ) ;
62539: LD_ADDR_VAR 0 10
62543: PUSH
62544: LD_VAR 0 10
62548: PPUSH
62549: LD_VAR 0 5
62553: PPUSH
62554: LD_VAR 0 10
62558: PUSH
62559: LD_VAR 0 5
62563: ARRAY
62564: PUSH
62565: LD_INT 35
62567: MINUS
62568: PPUSH
62569: CALL_OW 1
62573: ST_TO_ADDR
// continue ;
62574: GO 61013
// end ; if ai_vehicles_defend [ base ] + UnitFilter ( ai_vehicles_attack [ base ] , [ [ f_ok ] , [ f_not , [ f_weapon , 59 ] ] , [ f_not , [ f_weapon , ar_selfpropelled_bomb ] ] , [ f_not , [ f_weapon , ru_time_lapser ] ] ] ) < MaxNumWarVehiclesDefend ( base ) then
62576: LD_EXP 67
62580: PUSH
62581: LD_VAR 0 5
62585: ARRAY
62586: PUSH
62587: LD_EXP 68
62591: PUSH
62592: LD_VAR 0 5
62596: ARRAY
62597: PPUSH
62598: LD_INT 50
62600: PUSH
62601: EMPTY
62602: LIST
62603: PUSH
62604: LD_INT 3
62606: PUSH
62607: LD_INT 34
62609: PUSH
62610: LD_INT 59
62612: PUSH
62613: EMPTY
62614: LIST
62615: LIST
62616: PUSH
62617: EMPTY
62618: LIST
62619: LIST
62620: PUSH
62621: LD_INT 3
62623: PUSH
62624: LD_INT 34
62626: PUSH
62627: LD_INT 29
62629: PUSH
62630: EMPTY
62631: LIST
62632: LIST
62633: PUSH
62634: EMPTY
62635: LIST
62636: LIST
62637: PUSH
62638: LD_INT 3
62640: PUSH
62641: LD_INT 34
62643: PUSH
62644: LD_INT 49
62646: PUSH
62647: EMPTY
62648: LIST
62649: LIST
62650: PUSH
62651: EMPTY
62652: LIST
62653: LIST
62654: PUSH
62655: EMPTY
62656: LIST
62657: LIST
62658: LIST
62659: LIST
62660: PPUSH
62661: CALL_OW 72
62665: PLUS
62666: PUSH
62667: LD_VAR 0 5
62671: PPUSH
62672: CALL 59780 0 1
62676: LESS
62677: IFFALSE 63634
// begin if saved_construct_list [ base ] > 0 and not under_attack then
62679: LD_VAR 0 11
62683: PUSH
62684: LD_VAR 0 5
62688: ARRAY
62689: PUSH
62690: LD_INT 0
62692: GREATER
62693: PUSH
62694: LD_VAR 0 12
62698: NOT
62699: AND
62700: IFFALSE 62720
// begin construct_list = saved_construct_list [ base ] ;
62702: LD_ADDR_VAR 0 9
62706: PUSH
62707: LD_VAR 0 11
62711: PUSH
62712: LD_VAR 0 5
62716: ARRAY
62717: ST_TO_ADDR
// end else
62718: GO 63500
// begin construct_list = [ ] ;
62720: LD_ADDR_VAR 0 9
62724: PUSH
62725: EMPTY
62726: ST_TO_ADDR
// case base of 1 :
62727: LD_VAR 0 5
62731: PUSH
62732: LD_INT 1
62734: DOUBLE
62735: EQUAL
62736: IFTRUE 62740
62738: GO 63008
62740: POP
// begin temp_list = [ ru_gun , ru_heavy_gun , ru_rocket_launcher , ru_rocket , ru_gatling_gun ] ;
62741: LD_ADDR_VAR 0 4
62745: PUSH
62746: LD_INT 44
62748: PUSH
62749: LD_INT 46
62751: PUSH
62752: LD_INT 45
62754: PUSH
62755: LD_INT 47
62757: PUSH
62758: LD_INT 43
62760: PUSH
62761: EMPTY
62762: LIST
62763: LIST
62764: LIST
62765: LIST
62766: LIST
62767: ST_TO_ADDR
// if difficulty = 2 then
62768: LD_OWVAR 67
62772: PUSH
62773: LD_INT 2
62775: EQUAL
62776: IFFALSE 62792
// temp_list = temp_list ^ ru_heavy_gun ;
62778: LD_ADDR_VAR 0 4
62782: PUSH
62783: LD_VAR 0 4
62787: PUSH
62788: LD_INT 46
62790: ADD
62791: ST_TO_ADDR
// if difficulty = 3 then
62792: LD_OWVAR 67
62796: PUSH
62797: LD_INT 3
62799: EQUAL
62800: IFFALSE 62841
// begin temp_list = Replace ( temp_list , 1 , ru_heavy_gun ) ;
62802: LD_ADDR_VAR 0 4
62806: PUSH
62807: LD_VAR 0 4
62811: PPUSH
62812: LD_INT 1
62814: PPUSH
62815: LD_INT 46
62817: PPUSH
62818: CALL_OW 1
62822: ST_TO_ADDR
// temp_list = Delete ( temp_list , 3 ) ;
62823: LD_ADDR_VAR 0 4
62827: PUSH
62828: LD_VAR 0 4
62832: PPUSH
62833: LD_INT 3
62835: PPUSH
62836: CALL_OW 3
62840: ST_TO_ADDR
// end ; temp_value = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
62841: LD_ADDR_VAR 0 2
62845: PUSH
62846: LD_VAR 0 4
62850: PUSH
62851: LD_INT 1
62853: PPUSH
62854: LD_VAR 0 4
62858: PUSH
62859: LD_INT 0
62861: PLUS
62862: PPUSH
62863: CALL_OW 12
62867: ARRAY
62868: ST_TO_ADDR
// if under_attack then
62869: LD_VAR 0 12
62873: IFFALSE 62910
// if CanFactConstructThis ( idle_factories [ 1 ] , temp_value , false ) <> 1 then
62875: LD_VAR 0 6
62879: PUSH
62880: LD_INT 1
62882: ARRAY
62883: PPUSH
62884: LD_VAR 0 2
62888: PPUSH
62889: LD_INT 0
62891: PPUSH
62892: CALL 64387 0 3
62896: PUSH
62897: LD_INT 1
62899: NONEQUAL
62900: IFFALSE 62910
// temp_value = ru_heavy_machine_gun ;
62902: LD_ADDR_VAR 0 2
62906: PUSH
62907: LD_INT 42
62909: ST_TO_ADDR
// if Rand ( 1 , [ 2 , 3 , 4 ] [ difficulty ] ) = 1 and not temp_value in [ ru_heavy_gun , ru_rocket ] then
62910: LD_INT 1
62912: PPUSH
62913: LD_INT 2
62915: PUSH
62916: LD_INT 3
62918: PUSH
62919: LD_INT 4
62921: PUSH
62922: EMPTY
62923: LIST
62924: LIST
62925: LIST
62926: PUSH
62927: LD_OWVAR 67
62931: ARRAY
62932: PPUSH
62933: CALL_OW 12
62937: PUSH
62938: LD_INT 1
62940: EQUAL
62941: PUSH
62942: LD_VAR 0 2
62946: PUSH
62947: LD_INT 46
62949: PUSH
62950: LD_INT 47
62952: PUSH
62953: EMPTY
62954: LIST
62955: LIST
62956: IN
62957: NOT
62958: AND
62959: IFFALSE 62971
// i = ru_medium_tracked else
62961: LD_ADDR_VAR 0 1
62965: PUSH
62966: LD_INT 22
62968: ST_TO_ADDR
62969: GO 62979
// i = ru_heavy_tracked ;
62971: LD_ADDR_VAR 0 1
62975: PUSH
62976: LD_INT 24
62978: ST_TO_ADDR
// construct_list = [ i , engine_siberite , control_computer , temp_value ] ;
62979: LD_ADDR_VAR 0 9
62983: PUSH
62984: LD_VAR 0 1
62988: PUSH
62989: LD_INT 3
62991: PUSH
62992: LD_INT 3
62994: PUSH
62995: LD_VAR 0 2
62999: PUSH
63000: EMPTY
63001: LIST
63002: LIST
63003: LIST
63004: LIST
63005: ST_TO_ADDR
// end ; 2 :
63006: GO 63500
63008: LD_INT 2
63010: DOUBLE
63011: EQUAL
63012: IFTRUE 63016
63014: GO 63019
63016: POP
// begin end ; 3 :
63017: GO 63500
63019: LD_INT 3
63021: DOUBLE
63022: EQUAL
63023: IFTRUE 63027
63025: GO 63177
63027: POP
// begin temp_list = [ ar_gun , ar_rocket_launcher , ar_gatling_gun ] ;
63028: LD_ADDR_VAR 0 4
63032: PUSH
63033: LD_INT 27
63035: PUSH
63036: LD_INT 28
63038: PUSH
63039: LD_INT 25
63041: PUSH
63042: EMPTY
63043: LIST
63044: LIST
63045: LIST
63046: ST_TO_ADDR
// temp_value = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
63047: LD_ADDR_VAR 0 2
63051: PUSH
63052: LD_VAR 0 4
63056: PUSH
63057: LD_INT 1
63059: PPUSH
63060: LD_VAR 0 4
63064: PUSH
63065: LD_INT 0
63067: PLUS
63068: PPUSH
63069: CALL_OW 12
63073: ARRAY
63074: ST_TO_ADDR
// if temp_value = ar_gatling_gun and Rand ( 1 , 2 ) = 1 then
63075: LD_VAR 0 2
63079: PUSH
63080: LD_INT 25
63082: EQUAL
63083: PUSH
63084: LD_INT 1
63086: PPUSH
63087: LD_INT 2
63089: PPUSH
63090: CALL_OW 12
63094: PUSH
63095: LD_INT 1
63097: EQUAL
63098: AND
63099: IFFALSE 63109
// temp_value = ar_flame_thrower ;
63101: LD_ADDR_VAR 0 2
63105: PUSH
63106: LD_INT 26
63108: ST_TO_ADDR
// if under_attack then
63109: LD_VAR 0 12
63113: IFFALSE 63150
// if CanFactConstructThis ( idle_factories [ 1 ] , temp_value , false ) <> 1 then
63115: LD_VAR 0 6
63119: PUSH
63120: LD_INT 1
63122: ARRAY
63123: PPUSH
63124: LD_VAR 0 2
63128: PPUSH
63129: LD_INT 0
63131: PPUSH
63132: CALL 64387 0 3
63136: PUSH
63137: LD_INT 1
63139: NONEQUAL
63140: IFFALSE 63150
// temp_value = ar_double_machine_gun ;
63142: LD_ADDR_VAR 0 2
63146: PUSH
63147: LD_INT 24
63149: ST_TO_ADDR
// construct_list = [ ar_half_tracked , engine_siberite , control_remote , temp_value ] ;
63150: LD_ADDR_VAR 0 9
63154: PUSH
63155: LD_INT 14
63157: PUSH
63158: LD_INT 3
63160: PUSH
63161: LD_INT 2
63163: PUSH
63164: LD_VAR 0 2
63168: PUSH
63169: EMPTY
63170: LIST
63171: LIST
63172: LIST
63173: LIST
63174: ST_TO_ADDR
// end ; 4 :
63175: GO 63500
63177: LD_INT 4
63179: DOUBLE
63180: EQUAL
63181: IFTRUE 63185
63183: GO 63499
63185: POP
// begin temp_list = [ us_double_gun , us_heavy_gun , us_rocket_launcher , us_gatling_gun ] ;
63186: LD_ADDR_VAR 0 4
63190: PUSH
63191: LD_INT 5
63193: PUSH
63194: LD_INT 6
63196: PUSH
63197: LD_INT 7
63199: PUSH
63200: LD_INT 4
63202: PUSH
63203: EMPTY
63204: LIST
63205: LIST
63206: LIST
63207: LIST
63208: ST_TO_ADDR
// if difficulty = 2 then
63209: LD_OWVAR 67
63213: PUSH
63214: LD_INT 2
63216: EQUAL
63217: IFFALSE 63233
// temp_list = temp_list ^ us_heavy_gun ;
63219: LD_ADDR_VAR 0 4
63223: PUSH
63224: LD_VAR 0 4
63228: PUSH
63229: LD_INT 6
63231: ADD
63232: ST_TO_ADDR
// if difficulty = 3 then
63233: LD_OWVAR 67
63237: PUSH
63238: LD_INT 3
63240: EQUAL
63241: IFFALSE 63264
// temp_list = Replace ( temp_list , 1 , us_heavy_gun ) ;
63243: LD_ADDR_VAR 0 4
63247: PUSH
63248: LD_VAR 0 4
63252: PPUSH
63253: LD_INT 1
63255: PPUSH
63256: LD_INT 6
63258: PPUSH
63259: CALL_OW 1
63263: ST_TO_ADDR
// temp_value = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
63264: LD_ADDR_VAR 0 2
63268: PUSH
63269: LD_VAR 0 4
63273: PUSH
63274: LD_INT 1
63276: PPUSH
63277: LD_VAR 0 4
63281: PUSH
63282: LD_INT 0
63284: PLUS
63285: PPUSH
63286: CALL_OW 12
63290: ARRAY
63291: ST_TO_ADDR
// if under_attack then
63292: LD_VAR 0 12
63296: IFFALSE 63333
// if CanFactConstructThis ( idle_factories [ 1 ] , temp_value , false ) <> 1 then
63298: LD_VAR 0 6
63302: PUSH
63303: LD_INT 1
63305: ARRAY
63306: PPUSH
63307: LD_VAR 0 2
63311: PPUSH
63312: LD_INT 0
63314: PPUSH
63315: CALL 64387 0 3
63319: PUSH
63320: LD_INT 1
63322: NONEQUAL
63323: IFFALSE 63333
// temp_value = us_machine_gun ;
63325: LD_ADDR_VAR 0 2
63329: PUSH
63330: LD_INT 2
63332: ST_TO_ADDR
// if Rand ( 1 , [ 2 , 3 , 4 ] [ difficulty ] ) = 1 and not temp_value = us_heavy_gun then
63333: LD_INT 1
63335: PPUSH
63336: LD_INT 2
63338: PUSH
63339: LD_INT 3
63341: PUSH
63342: LD_INT 4
63344: PUSH
63345: EMPTY
63346: LIST
63347: LIST
63348: LIST
63349: PUSH
63350: LD_OWVAR 67
63354: ARRAY
63355: PPUSH
63356: CALL_OW 12
63360: PUSH
63361: LD_INT 1
63363: EQUAL
63364: PUSH
63365: LD_VAR 0 2
63369: PUSH
63370: LD_INT 6
63372: EQUAL
63373: NOT
63374: AND
63375: IFFALSE 63387
// i = us_medium_tracked else
63377: LD_ADDR_VAR 0 1
63381: PUSH
63382: LD_INT 3
63384: ST_TO_ADDR
63385: GO 63431
// if Rand ( 1 , 3 ) = 1 and difficulty < 3 then
63387: LD_INT 1
63389: PPUSH
63390: LD_INT 3
63392: PPUSH
63393: CALL_OW 12
63397: PUSH
63398: LD_INT 1
63400: EQUAL
63401: PUSH
63402: LD_OWVAR 67
63406: PUSH
63407: LD_INT 3
63409: LESS
63410: AND
63411: IFFALSE 63423
// i = us_heavy_tracked else
63413: LD_ADDR_VAR 0 1
63417: PUSH
63418: LD_INT 4
63420: ST_TO_ADDR
63421: GO 63431
// i = us_morphling ;
63423: LD_ADDR_VAR 0 1
63427: PUSH
63428: LD_INT 5
63430: ST_TO_ADDR
// if alli_destroy_am_objective_status >= 2 then
63431: LD_EXP 138
63435: PUSH
63436: LD_INT 2
63438: GREATEREQUAL
63439: IFFALSE 63470
// construct_list = [ i , engine_combustion , control_remote , temp_value ] else
63441: LD_ADDR_VAR 0 9
63445: PUSH
63446: LD_VAR 0 1
63450: PUSH
63451: LD_INT 1
63453: PUSH
63454: LD_INT 2
63456: PUSH
63457: LD_VAR 0 2
63461: PUSH
63462: EMPTY
63463: LIST
63464: LIST
63465: LIST
63466: LIST
63467: ST_TO_ADDR
63468: GO 63497
// construct_list = [ i , engine_siberite , control_remote , temp_value ] ;
63470: LD_ADDR_VAR 0 9
63474: PUSH
63475: LD_VAR 0 1
63479: PUSH
63480: LD_INT 3
63482: PUSH
63483: LD_INT 2
63485: PUSH
63486: LD_VAR 0 2
63490: PUSH
63491: EMPTY
63492: LIST
63493: LIST
63494: LIST
63495: LIST
63496: ST_TO_ADDR
// end ; end ;
63497: GO 63500
63499: POP
// end ; if construct_list > 0 then
63500: LD_VAR 0 9
63504: PUSH
63505: LD_INT 0
63507: GREATER
63508: IFFALSE 63632
// begin b = FactConstruct ( base , [ idle_factories [ 1 ] ] , construct_list , base = 3 ) ;
63510: LD_ADDR_VAR 0 8
63514: PUSH
63515: LD_VAR 0 5
63519: PPUSH
63520: LD_VAR 0 6
63524: PUSH
63525: LD_INT 1
63527: ARRAY
63528: PUSH
63529: EMPTY
63530: LIST
63531: PPUSH
63532: LD_VAR 0 9
63536: PPUSH
63537: LD_VAR 0 5
63541: PUSH
63542: LD_INT 3
63544: EQUAL
63545: PPUSH
63546: CALL 63880 0 4
63550: ST_TO_ADDR
// case b of 0 :
63551: LD_VAR 0 8
63555: PUSH
63556: LD_INT 0
63558: DOUBLE
63559: EQUAL
63560: IFTRUE 63564
63562: GO 63592
63564: POP
// saved_construct_list = Replace ( saved_construct_list , base , construct_list ) ; 1 , 2 :
63565: LD_ADDR_VAR 0 11
63569: PUSH
63570: LD_VAR 0 11
63574: PPUSH
63575: LD_VAR 0 5
63579: PPUSH
63580: LD_VAR 0 9
63584: PPUSH
63585: CALL_OW 1
63589: ST_TO_ADDR
63590: GO 63632
63592: LD_INT 1
63594: DOUBLE
63595: EQUAL
63596: IFTRUE 63606
63598: LD_INT 2
63600: DOUBLE
63601: EQUAL
63602: IFTRUE 63606
63604: GO 63631
63606: POP
// saved_construct_list = Replace ( saved_construct_list , base , [ ] ) ; end ;
63607: LD_ADDR_VAR 0 11
63611: PUSH
63612: LD_VAR 0 11
63616: PPUSH
63617: LD_VAR 0 5
63621: PPUSH
63622: EMPTY
63623: PPUSH
63624: CALL_OW 1
63628: ST_TO_ADDR
63629: GO 63632
63631: POP
// end ; continue ;
63632: GO 61013
// end ; if base = 1 and ai_taufield_vehicles [ base ] + UnitFilter ( ai_vehicles_attack [ base ] , [ [ f_ok ] , [ f_weapon , ru_time_lapser ] ] ) < MaxNumTaufieldVehicles ( base ) then
63634: LD_VAR 0 5
63638: PUSH
63639: LD_INT 1
63641: EQUAL
63642: PUSH
63643: LD_EXP 100
63647: PUSH
63648: LD_VAR 0 5
63652: ARRAY
63653: PUSH
63654: LD_EXP 68
63658: PUSH
63659: LD_VAR 0 5
63663: ARRAY
63664: PPUSH
63665: LD_INT 50
63667: PUSH
63668: EMPTY
63669: LIST
63670: PUSH
63671: LD_INT 34
63673: PUSH
63674: LD_INT 49
63676: PUSH
63677: EMPTY
63678: LIST
63679: LIST
63680: PUSH
63681: EMPTY
63682: LIST
63683: LIST
63684: PPUSH
63685: CALL_OW 72
63689: PLUS
63690: PUSH
63691: LD_VAR 0 5
63695: PPUSH
63696: CALL 60453 0 1
63700: LESS
63701: AND
63702: IFFALSE 63764
// begin b = FactConstruct ( base , idle_factories , [ ru_medium_tracked , engine_siberite , control_computer , ru_time_lapser ] , false ) ;
63704: LD_ADDR_VAR 0 8
63708: PUSH
63709: LD_VAR 0 5
63713: PPUSH
63714: LD_VAR 0 6
63718: PPUSH
63719: LD_INT 22
63721: PUSH
63722: LD_INT 3
63724: PUSH
63725: LD_INT 3
63727: PUSH
63728: LD_INT 49
63730: PUSH
63731: EMPTY
63732: LIST
63733: LIST
63734: LIST
63735: LIST
63736: PPUSH
63737: LD_INT 0
63739: PPUSH
63740: CALL 63880 0 4
63744: ST_TO_ADDR
// if b in [ 0 , 1 ] then
63745: LD_VAR 0 8
63749: PUSH
63750: LD_INT 0
63752: PUSH
63753: LD_INT 1
63755: PUSH
63756: EMPTY
63757: LIST
63758: LIST
63759: IN
63760: IFFALSE 63764
// continue ;
63762: GO 61013
// end ; if base = 3 and ai_implosion_vehicles [ base ] + UnitFilter ( ai_vehicles_attack [ base ] , [ [ f_ok ] , [ f_weapon , ar_selfpropelled_bomb ] ] ) < MaxNumImplosionVehicles ( base ) then
63764: LD_VAR 0 5
63768: PUSH
63769: LD_INT 3
63771: EQUAL
63772: PUSH
63773: LD_EXP 101
63777: PUSH
63778: LD_VAR 0 5
63782: ARRAY
63783: PUSH
63784: LD_EXP 68
63788: PUSH
63789: LD_VAR 0 5
63793: ARRAY
63794: PPUSH
63795: LD_INT 50
63797: PUSH
63798: EMPTY
63799: LIST
63800: PUSH
63801: LD_INT 34
63803: PUSH
63804: LD_INT 29
63806: PUSH
63807: EMPTY
63808: LIST
63809: LIST
63810: PUSH
63811: EMPTY
63812: LIST
63813: LIST
63814: PPUSH
63815: CALL_OW 72
63819: PLUS
63820: PUSH
63821: LD_VAR 0 5
63825: PPUSH
63826: CALL 60640 0 1
63830: LESS
63831: AND
63832: IFFALSE 63869
// begin FactConstruct ( base , idle_factories , [ ar_half_tracked , engine_siberite , control_remote , ar_selfpropelled_bomb ] , true ) ;
63834: LD_VAR 0 5
63838: PPUSH
63839: LD_VAR 0 6
63843: PPUSH
63844: LD_INT 14
63846: PUSH
63847: LD_INT 3
63849: PUSH
63850: LD_INT 2
63852: PUSH
63853: LD_INT 29
63855: PUSH
63856: EMPTY
63857: LIST
63858: LIST
63859: LIST
63860: LIST
63861: PPUSH
63862: LD_INT 1
63864: PPUSH
63865: CALL 63880 0 4
// end ; end ;
63869: GO 61013
63871: POP
63872: POP
// until false ;
63873: LD_INT 0
63875: IFFALSE 60974
// end ;
63877: PPOPN 12
63879: END
// function FactConstruct ( base , fact_list , construct_list , check_ar_control_tower_amount ) ; var i , temp_list , map_list , val ; begin
63880: LD_INT 0
63882: PPUSH
63883: PPUSH
63884: PPUSH
63885: PPUSH
63886: PPUSH
// if fact_list = 0 then
63887: LD_VAR 0 2
63891: PUSH
63892: LD_INT 0
63894: EQUAL
63895: IFFALSE 63907
// begin result = 2 ;
63897: LD_ADDR_VAR 0 5
63901: PUSH
63902: LD_INT 2
63904: ST_TO_ADDR
// exit ;
63905: GO 64096
// end ; if check_ar_control_tower_amount then
63907: LD_VAR 0 4
63911: IFFALSE 63967
// begin result = CheckAndFixArControlTowerAmount ( base , fact_list , true ) ;
63913: LD_ADDR_VAR 0 5
63917: PUSH
63918: LD_VAR 0 1
63922: PPUSH
63923: LD_VAR 0 2
63927: PPUSH
63928: LD_INT 1
63930: PPUSH
63931: CALL 64101 0 3
63935: ST_TO_ADDR
// if result <> - 1 then
63936: LD_VAR 0 5
63940: PUSH
63941: LD_INT 1
63943: NEG
63944: NONEQUAL
63945: IFFALSE 63967
// begin if result = 1 then
63947: LD_VAR 0 5
63951: PUSH
63952: LD_INT 1
63954: EQUAL
63955: IFFALSE 63965
// result = 0 ;
63957: LD_ADDR_VAR 0 5
63961: PUSH
63962: LD_INT 0
63964: ST_TO_ADDR
// exit ;
63965: GO 64096
// end ; end ; result = CanFactConstructThis ( fact_list [ 1 ] , construct_list [ 4 ] , true ) ;
63967: LD_ADDR_VAR 0 5
63971: PUSH
63972: LD_VAR 0 2
63976: PUSH
63977: LD_INT 1
63979: ARRAY
63980: PPUSH
63981: LD_VAR 0 3
63985: PUSH
63986: LD_INT 4
63988: ARRAY
63989: PPUSH
63990: LD_INT 1
63992: PPUSH
63993: CALL 64387 0 3
63997: ST_TO_ADDR
// if result = 1 then
63998: LD_VAR 0 5
64002: PUSH
64003: LD_INT 1
64005: EQUAL
64006: IFFALSE 64096
// begin if construct_list [ 2 ] = - 1 then
64008: LD_VAR 0 3
64012: PUSH
64013: LD_INT 2
64015: ARRAY
64016: PUSH
64017: LD_INT 1
64019: NEG
64020: EQUAL
64021: IFFALSE 64047
// ComPlaceWeapon ( construct_list [ 1 ] , construct_list [ 4 ] ) else
64023: LD_VAR 0 3
64027: PUSH
64028: LD_INT 1
64030: ARRAY
64031: PPUSH
64032: LD_VAR 0 3
64036: PUSH
64037: LD_INT 4
64039: ARRAY
64040: PPUSH
64041: CALL_OW 148
64045: GO 64096
// ComConstruct ( fact_list [ 1 ] , construct_list [ 1 ] , construct_list [ 2 ] , construct_list [ 3 ] , construct_list [ 4 ] ) ;
64047: LD_VAR 0 2
64051: PUSH
64052: LD_INT 1
64054: ARRAY
64055: PPUSH
64056: LD_VAR 0 3
64060: PUSH
64061: LD_INT 1
64063: ARRAY
64064: PPUSH
64065: LD_VAR 0 3
64069: PUSH
64070: LD_INT 2
64072: ARRAY
64073: PPUSH
64074: LD_VAR 0 3
64078: PUSH
64079: LD_INT 3
64081: ARRAY
64082: PPUSH
64083: LD_VAR 0 3
64087: PUSH
64088: LD_INT 4
64090: ARRAY
64091: PPUSH
64092: CALL_OW 125
// end ; end ;
64096: LD_VAR 0 5
64100: RET
// function CheckAndFixArControlTowerAmount ( base , fact_list , going_to_build_a_vehicle_after_this_check ) ; var temp_list ; begin
64101: LD_INT 0
64103: PPUSH
64104: PPUSH
// temp_list = UnitFilter ( ai_vehicles_defend [ base ] ^ ai_vehicles_attack [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] ^ ai_cargo_bay [ base ] ^ ai_crane [ base ] , [ f_control , control_remote ] ) ;
64105: LD_ADDR_VAR 0 5
64109: PUSH
64110: LD_EXP 67
64114: PUSH
64115: LD_VAR 0 1
64119: ARRAY
64120: PUSH
64121: LD_EXP 68
64125: PUSH
64126: LD_VAR 0 1
64130: ARRAY
64131: ADD
64132: PUSH
64133: LD_EXP 100
64137: PUSH
64138: LD_VAR 0 1
64142: ARRAY
64143: ADD
64144: PUSH
64145: LD_EXP 101
64149: PUSH
64150: LD_VAR 0 1
64154: ARRAY
64155: ADD
64156: PUSH
64157: LD_EXP 85
64161: PUSH
64162: LD_VAR 0 1
64166: ARRAY
64167: ADD
64168: PUSH
64169: LD_EXP 88
64173: PUSH
64174: LD_VAR 0 1
64178: ARRAY
64179: ADD
64180: PPUSH
64181: LD_INT 33
64183: PUSH
64184: LD_INT 2
64186: PUSH
64187: EMPTY
64188: LIST
64189: LIST
64190: PPUSH
64191: CALL_OW 72
64195: ST_TO_ADDR
// if ( temp_list + 0 > ai_control_tower_vehicles [ base ] * 2 or ( temp_list + 0 >= ai_control_tower_vehicles [ base ] * 2 and going_to_build_a_vehicle_after_this_check ) ) and ai_control_tower_vehicles [ base ] < ai_vehicle_pullback_hexes [ base ] and ai_control_tower_vehicles [ base ] < ( ( ai_mechanics_defend [ base ] ^ ai_mechanics_attack [ base ] ) diff ai_crane_driver [ base ] ) - 1 then
64196: LD_VAR 0 5
64200: PUSH
64201: LD_INT 0
64203: PLUS
64204: PUSH
64205: LD_EXP 95
64209: PUSH
64210: LD_VAR 0 1
64214: ARRAY
64215: PUSH
64216: LD_INT 2
64218: MUL
64219: GREATER
64220: PUSH
64221: LD_VAR 0 5
64225: PUSH
64226: LD_INT 0
64228: PLUS
64229: PUSH
64230: LD_EXP 95
64234: PUSH
64235: LD_VAR 0 1
64239: ARRAY
64240: PUSH
64241: LD_INT 2
64243: MUL
64244: GREATEREQUAL
64245: PUSH
64246: LD_VAR 0 3
64250: AND
64251: OR
64252: PUSH
64253: LD_EXP 95
64257: PUSH
64258: LD_VAR 0 1
64262: ARRAY
64263: PUSH
64264: LD_EXP 72
64268: PUSH
64269: LD_VAR 0 1
64273: ARRAY
64274: LESS
64275: AND
64276: PUSH
64277: LD_EXP 95
64281: PUSH
64282: LD_VAR 0 1
64286: ARRAY
64287: PUSH
64288: LD_EXP 43
64292: PUSH
64293: LD_VAR 0 1
64297: ARRAY
64298: PUSH
64299: LD_EXP 44
64303: PUSH
64304: LD_VAR 0 1
64308: ARRAY
64309: ADD
64310: PUSH
64311: LD_EXP 92
64315: PUSH
64316: LD_VAR 0 1
64320: ARRAY
64321: DIFF
64322: PUSH
64323: LD_INT 1
64325: MINUS
64326: LESS
64327: AND
64328: IFFALSE 64373
// begin result = FactConstruct ( base , fact_list , [ ar_half_tracked , engine_siberite , control_manual , ar_control_tower ] , false ) ;
64330: LD_ADDR_VAR 0 4
64334: PUSH
64335: LD_VAR 0 1
64339: PPUSH
64340: LD_VAR 0 2
64344: PPUSH
64345: LD_INT 14
64347: PUSH
64348: LD_INT 3
64350: PUSH
64351: LD_INT 1
64353: PUSH
64354: LD_INT 31
64356: PUSH
64357: EMPTY
64358: LIST
64359: LIST
64360: LIST
64361: LIST
64362: PPUSH
64363: LD_INT 0
64365: PPUSH
64366: CALL 63880 0 4
64370: ST_TO_ADDR
// end else
64371: GO 64382
// result = - 1 ;
64373: LD_ADDR_VAR 0 4
64377: PUSH
64378: LD_INT 1
64380: NEG
64381: ST_TO_ADDR
// end ;
64382: LD_VAR 0 4
64386: 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
64387: LD_INT 0
64389: PPUSH
64390: PPUSH
64391: PPUSH
64392: PPUSH
64393: PPUSH
64394: PPUSH
64395: PPUSH
64396: PPUSH
64397: PPUSH
64398: PPUSH
64399: PPUSH
64400: PPUSH
64401: PPUSH
// base = FindBase ( fact ) ;
64402: LD_ADDR_VAR 0 5
64406: PUSH
64407: LD_VAR 0 1
64411: PPUSH
64412: CALL 25073 0 1
64416: ST_TO_ADDR
// if base = 0 then
64417: LD_VAR 0 5
64421: PUSH
64422: LD_INT 0
64424: EQUAL
64425: IFFALSE 64437
// begin result = 2 ;
64427: LD_ADDR_VAR 0 4
64431: PUSH
64432: LD_INT 2
64434: ST_TO_ADDR
// exit ;
64435: GO 66457
// end ; btype_list_planned = [ ] ;
64437: LD_ADDR_VAR 0 10
64441: PUSH
64442: EMPTY
64443: ST_TO_ADDR
// temp_list = [ GetX ( fact ) , GetY ( fact ) ] ;
64444: LD_ADDR_VAR 0 7
64448: PUSH
64449: LD_VAR 0 1
64453: PPUSH
64454: CALL_OW 250
64458: PUSH
64459: LD_VAR 0 1
64463: PPUSH
64464: CALL_OW 251
64468: PUSH
64469: EMPTY
64470: LIST
64471: LIST
64472: ST_TO_ADDR
// for i = 1 to ai_buildings_locations [ base ] + 0 do
64473: LD_ADDR_VAR 0 6
64477: PUSH
64478: DOUBLE
64479: LD_INT 1
64481: DEC
64482: ST_TO_ADDR
64483: LD_EXP 61
64487: PUSH
64488: LD_VAR 0 5
64492: ARRAY
64493: PUSH
64494: LD_INT 0
64496: PLUS
64497: PUSH
64498: FOR_TO
64499: IFFALSE 64780
// 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
64501: LD_EXP 61
64505: PUSH
64506: LD_VAR 0 5
64510: ARRAY
64511: PUSH
64512: LD_VAR 0 6
64516: ARRAY
64517: PUSH
64518: LD_INT 4
64520: ARRAY
64521: PUSH
64522: LD_INT 24
64524: PUSH
64525: LD_INT 17
64527: PUSH
64528: LD_INT 19
64530: PUSH
64531: LD_INT 25
64533: PUSH
64534: LD_INT 20
64536: PUSH
64537: LD_INT 22
64539: PUSH
64540: LD_INT 18
64542: PUSH
64543: LD_INT 21
64545: PUSH
64546: LD_INT 23
64548: PUSH
64549: LD_INT 16
64551: PUSH
64552: EMPTY
64553: LIST
64554: LIST
64555: LIST
64556: LIST
64557: LIST
64558: LIST
64559: LIST
64560: LIST
64561: LIST
64562: LIST
64563: IN
64564: IFFALSE 64778
// if GetDistXY ( ai_buildings_locations [ base ] [ i ] [ 1 ] , ai_buildings_locations [ base ] [ i ] [ 2 ] , temp_list [ 1 ] , temp_list [ 2 ] ) <= 4 then
64566: LD_EXP 61
64570: PUSH
64571: LD_VAR 0 5
64575: ARRAY
64576: PUSH
64577: LD_VAR 0 6
64581: ARRAY
64582: PUSH
64583: LD_INT 1
64585: ARRAY
64586: PPUSH
64587: LD_EXP 61
64591: PUSH
64592: LD_VAR 0 5
64596: ARRAY
64597: PUSH
64598: LD_VAR 0 6
64602: ARRAY
64603: PUSH
64604: LD_INT 2
64606: ARRAY
64607: PPUSH
64608: LD_VAR 0 7
64612: PUSH
64613: LD_INT 1
64615: ARRAY
64616: PPUSH
64617: LD_VAR 0 7
64621: PUSH
64622: LD_INT 2
64624: ARRAY
64625: PPUSH
64626: CALL_OW 298
64630: PUSH
64631: LD_INT 4
64633: LESSEQUAL
64634: IFFALSE 64778
// begin btype_list_planned = btype_list_planned ^ ai_buildings_locations [ base ] [ i ] [ 4 ] ;
64636: LD_ADDR_VAR 0 10
64640: PUSH
64641: LD_VAR 0 10
64645: PUSH
64646: LD_EXP 61
64650: PUSH
64651: LD_VAR 0 5
64655: ARRAY
64656: PUSH
64657: LD_VAR 0 6
64661: ARRAY
64662: PUSH
64663: LD_INT 4
64665: ARRAY
64666: ADD
64667: ST_TO_ADDR
// un = HexInfo ( ai_buildings_locations [ base ] [ i ] [ 1 ] , ai_buildings_locations [ base ] [ i ] [ 2 ] ) ;
64668: LD_ADDR_VAR 0 8
64672: PUSH
64673: LD_EXP 61
64677: PUSH
64678: LD_VAR 0 5
64682: ARRAY
64683: PUSH
64684: LD_VAR 0 6
64688: ARRAY
64689: PUSH
64690: LD_INT 1
64692: ARRAY
64693: PPUSH
64694: LD_EXP 61
64698: PUSH
64699: LD_VAR 0 5
64703: ARRAY
64704: PUSH
64705: LD_VAR 0 6
64709: ARRAY
64710: PUSH
64711: LD_INT 2
64713: ARRAY
64714: PPUSH
64715: CALL_OW 428
64719: ST_TO_ADDR
// if un > 0 then
64720: LD_VAR 0 8
64724: PUSH
64725: LD_INT 0
64727: GREATER
64728: IFFALSE 64778
// if GetType ( un ) = unit_building and not IsConstructed ( un ) then
64730: LD_VAR 0 8
64734: PPUSH
64735: CALL_OW 247
64739: PUSH
64740: LD_INT 3
64742: EQUAL
64743: PUSH
64744: LD_VAR 0 8
64748: PPUSH
64749: CALL_OW 304
64753: NOT
64754: AND
64755: IFFALSE 64778
// btype_list_exists = btype_list_exists ^ GetBType ( un ) ;
64757: LD_ADDR_VAR 0 11
64761: PUSH
64762: LD_VAR 0 11
64766: PUSH
64767: LD_VAR 0 8
64771: PPUSH
64772: CALL_OW 266
64776: ADD
64777: ST_TO_ADDR
// end ;
64778: GO 64498
64780: POP
64781: POP
// currently_needed = [ ] ;
64782: LD_ADDR_VAR 0 15
64786: PUSH
64787: EMPTY
64788: ST_TO_ADDR
// case weapon of ar_cargo_bay , ru_cargo_bay , us_cargo_bay , ru_crane , us_crane , ru_bulldozer , us_bulldozer :
64789: LD_VAR 0 2
64793: PUSH
64794: LD_INT 32
64796: DOUBLE
64797: EQUAL
64798: IFTRUE 64838
64800: LD_INT 51
64802: DOUBLE
64803: EQUAL
64804: IFTRUE 64838
64806: LD_INT 12
64808: DOUBLE
64809: EQUAL
64810: IFTRUE 64838
64812: LD_INT 52
64814: DOUBLE
64815: EQUAL
64816: IFTRUE 64838
64818: LD_INT 13
64820: DOUBLE
64821: EQUAL
64822: IFTRUE 64838
64824: LD_INT 53
64826: DOUBLE
64827: EQUAL
64828: IFTRUE 64838
64830: LD_INT 14
64832: DOUBLE
64833: EQUAL
64834: IFTRUE 64838
64836: GO 65062
64838: POP
// begin if ( ( b_ext_noncombat in btype_list_exists and b_ext_computer in btype_list_exists ) or ( GetBaseNation ( base ) = nation_arabian and b_ext_stitch in btype_list_exists ) ) and b_ext_siberium in btype_list_exists then
64839: LD_INT 19
64841: PUSH
64842: LD_VAR 0 11
64846: IN
64847: PUSH
64848: LD_INT 24
64850: PUSH
64851: LD_VAR 0 11
64855: IN
64856: AND
64857: PUSH
64858: LD_VAR 0 5
64862: PPUSH
64863: CALL 24983 0 1
64867: PUSH
64868: LD_INT 2
64870: EQUAL
64871: PUSH
64872: LD_INT 23
64874: PUSH
64875: LD_VAR 0 11
64879: IN
64880: AND
64881: OR
64882: PUSH
64883: LD_INT 21
64885: PUSH
64886: LD_VAR 0 11
64890: IN
64891: AND
64892: IFFALSE 64906
// begin result = 1 ;
64894: LD_ADDR_VAR 0 4
64898: PUSH
64899: LD_INT 1
64901: ST_TO_ADDR
// exit ;
64902: GO 66457
// end else
64904: GO 65060
// begin if GetBaseNation ( base ) = nation_arabian then
64906: LD_VAR 0 5
64910: PPUSH
64911: CALL 24983 0 1
64915: PUSH
64916: LD_INT 2
64918: EQUAL
64919: IFFALSE 64956
// begin if not b_ext_stitch in btype_list_planned then
64921: LD_INT 23
64923: PUSH
64924: LD_VAR 0 10
64928: IN
64929: NOT
64930: IFFALSE 64943
// currently_needed = [ b_ext_stitch ] ;
64932: LD_ADDR_VAR 0 15
64936: PUSH
64937: LD_INT 23
64939: PUSH
64940: EMPTY
64941: LIST
64942: ST_TO_ADDR
// all_needed = [ b_ext_stitch ] ;
64943: LD_ADDR_VAR 0 14
64947: PUSH
64948: LD_INT 23
64950: PUSH
64951: EMPTY
64952: LIST
64953: ST_TO_ADDR
// end else
64954: GO 65021
// begin if not b_ext_noncombat in btype_list_planned then
64956: LD_INT 19
64958: PUSH
64959: LD_VAR 0 10
64963: IN
64964: NOT
64965: IFFALSE 64981
// currently_needed = currently_needed ^ b_ext_noncombat ;
64967: LD_ADDR_VAR 0 15
64971: PUSH
64972: LD_VAR 0 15
64976: PUSH
64977: LD_INT 19
64979: ADD
64980: ST_TO_ADDR
// if not b_ext_computer in btype_list_planned then
64981: LD_INT 24
64983: PUSH
64984: LD_VAR 0 10
64988: IN
64989: NOT
64990: IFFALSE 65006
// currently_needed = currently_needed ^ b_ext_computer ;
64992: LD_ADDR_VAR 0 15
64996: PUSH
64997: LD_VAR 0 15
65001: PUSH
65002: LD_INT 24
65004: ADD
65005: ST_TO_ADDR
// all_needed = [ b_ext_noncombat , b_ext_computer ] ;
65006: LD_ADDR_VAR 0 14
65010: PUSH
65011: LD_INT 19
65013: PUSH
65014: LD_INT 24
65016: PUSH
65017: EMPTY
65018: LIST
65019: LIST
65020: ST_TO_ADDR
// end ; if not b_ext_siberium in btype_list_planned then
65021: LD_INT 21
65023: PUSH
65024: LD_VAR 0 10
65028: IN
65029: NOT
65030: IFFALSE 65046
// currently_needed = currently_needed ^ b_ext_siberium ;
65032: LD_ADDR_VAR 0 15
65036: PUSH
65037: LD_VAR 0 15
65041: PUSH
65042: LD_INT 21
65044: ADD
65045: ST_TO_ADDR
// all_needed = all_needed ^ b_ext_siberium ;
65046: LD_ADDR_VAR 0 14
65050: PUSH
65051: LD_VAR 0 14
65055: PUSH
65056: LD_INT 21
65058: ADD
65059: ST_TO_ADDR
// end ; end ; us_rocket_launcher , ru_rocket_launcher , ru_rocket , ar_rocket_launcher :
65060: GO 65547
65062: LD_INT 7
65064: DOUBLE
65065: EQUAL
65066: IFTRUE 65088
65068: LD_INT 45
65070: DOUBLE
65071: EQUAL
65072: IFTRUE 65088
65074: LD_INT 47
65076: DOUBLE
65077: EQUAL
65078: IFTRUE 65088
65080: LD_INT 28
65082: DOUBLE
65083: EQUAL
65084: IFTRUE 65088
65086: GO 65146
65088: POP
// begin if b_ext_rocket in btype_list_exists then
65089: LD_INT 18
65091: PUSH
65092: LD_VAR 0 11
65096: IN
65097: IFFALSE 65111
// begin result = 1 ;
65099: LD_ADDR_VAR 0 4
65103: PUSH
65104: LD_INT 1
65106: ST_TO_ADDR
// exit ;
65107: GO 66457
// end else
65109: GO 65144
// begin if not b_ext_rocket in btype_list_planned then
65111: LD_INT 18
65113: PUSH
65114: LD_VAR 0 10
65118: IN
65119: NOT
65120: IFFALSE 65133
// currently_needed = [ b_ext_rocket ] ;
65122: LD_ADDR_VAR 0 15
65126: PUSH
65127: LD_INT 18
65129: PUSH
65130: EMPTY
65131: LIST
65132: ST_TO_ADDR
// all_needed = [ b_ext_rocket ] ;
65133: LD_ADDR_VAR 0 14
65137: PUSH
65138: LD_INT 18
65140: PUSH
65141: EMPTY
65142: LIST
65143: ST_TO_ADDR
// end ; end ; us_light_gun , us_double_gun , us_heavy_gun , ru_gun , ru_heavy_gun , ar_light_gun , ar_gun :
65144: GO 65547
65146: LD_INT 3
65148: DOUBLE
65149: EQUAL
65150: IFTRUE 65190
65152: LD_INT 5
65154: DOUBLE
65155: EQUAL
65156: IFTRUE 65190
65158: LD_INT 6
65160: DOUBLE
65161: EQUAL
65162: IFTRUE 65190
65164: LD_INT 44
65166: DOUBLE
65167: EQUAL
65168: IFTRUE 65190
65170: LD_INT 46
65172: DOUBLE
65173: EQUAL
65174: IFTRUE 65190
65176: LD_INT 23
65178: DOUBLE
65179: EQUAL
65180: IFTRUE 65190
65182: LD_INT 27
65184: DOUBLE
65185: EQUAL
65186: IFTRUE 65190
65188: GO 65248
65190: POP
// begin if b_ext_gun in btype_list_exists then
65191: LD_INT 17
65193: PUSH
65194: LD_VAR 0 11
65198: IN
65199: IFFALSE 65213
// begin result = 1 ;
65201: LD_ADDR_VAR 0 4
65205: PUSH
65206: LD_INT 1
65208: ST_TO_ADDR
// exit ;
65209: GO 66457
// end else
65211: GO 65246
// begin if not b_ext_gun in btype_list_planned then
65213: LD_INT 17
65215: PUSH
65216: LD_VAR 0 10
65220: IN
65221: NOT
65222: IFFALSE 65235
// currently_needed = [ b_ext_gun ] ;
65224: LD_ADDR_VAR 0 15
65228: PUSH
65229: LD_INT 17
65231: PUSH
65232: EMPTY
65233: LIST
65234: ST_TO_ADDR
// all_needed = [ b_ext_gun ] ;
65235: LD_ADDR_VAR 0 14
65239: PUSH
65240: LD_INT 17
65242: PUSH
65243: EMPTY
65244: LIST
65245: ST_TO_ADDR
// end ; end ; us_laser , us_double_laser :
65246: GO 65547
65248: LD_INT 9
65250: DOUBLE
65251: EQUAL
65252: IFTRUE 65262
65254: LD_INT 10
65256: DOUBLE
65257: EQUAL
65258: IFTRUE 65262
65260: GO 65320
65262: POP
// begin if b_ext_laser in btype_list_exists then
65263: LD_INT 25
65265: PUSH
65266: LD_VAR 0 11
65270: IN
65271: IFFALSE 65285
// begin result = 1 ;
65273: LD_ADDR_VAR 0 4
65277: PUSH
65278: LD_INT 1
65280: ST_TO_ADDR
// exit ;
65281: GO 66457
// end else
65283: GO 65318
// begin if not b_ext_laser in btype_list_planned then
65285: LD_INT 25
65287: PUSH
65288: LD_VAR 0 10
65292: IN
65293: NOT
65294: IFFALSE 65307
// currently_needed = [ b_ext_laser ] ;
65296: LD_ADDR_VAR 0 15
65300: PUSH
65301: LD_INT 25
65303: PUSH
65304: EMPTY
65305: LIST
65306: ST_TO_ADDR
// all_needed = [ b_ext_laser ] ;
65307: LD_ADDR_VAR 0 14
65311: PUSH
65312: LD_INT 25
65314: PUSH
65315: EMPTY
65316: LIST
65317: ST_TO_ADDR
// end ; end ; us_radar , ar_radar , ar_control_tower :
65318: GO 65547
65320: LD_INT 11
65322: DOUBLE
65323: EQUAL
65324: IFTRUE 65340
65326: LD_INT 30
65328: DOUBLE
65329: EQUAL
65330: IFTRUE 65340
65332: LD_INT 31
65334: DOUBLE
65335: EQUAL
65336: IFTRUE 65340
65338: GO 65398
65340: POP
// begin if b_ext_radar in btype_list_exists then
65341: LD_INT 20
65343: PUSH
65344: LD_VAR 0 11
65348: IN
65349: IFFALSE 65363
// begin result = 1 ;
65351: LD_ADDR_VAR 0 4
65355: PUSH
65356: LD_INT 1
65358: ST_TO_ADDR
// exit ;
65359: GO 66457
// end else
65361: GO 65396
// begin if not b_ext_radar in btype_list_planned then
65363: LD_INT 20
65365: PUSH
65366: LD_VAR 0 10
65370: IN
65371: NOT
65372: IFFALSE 65385
// currently_needed = [ b_ext_radar ] ;
65374: LD_ADDR_VAR 0 15
65378: PUSH
65379: LD_INT 20
65381: PUSH
65382: EMPTY
65383: LIST
65384: ST_TO_ADDR
// all_needed = [ b_ext_radar ] ;
65385: LD_ADDR_VAR 0 14
65389: PUSH
65390: LD_INT 20
65392: PUSH
65393: EMPTY
65394: LIST
65395: ST_TO_ADDR
// end ; end ; ar_flame_thrower :
65396: GO 65547
65398: LD_INT 26
65400: DOUBLE
65401: EQUAL
65402: IFTRUE 65406
65404: GO 65464
65406: POP
// begin if b_ext_stitch in btype_list_exists then
65407: LD_INT 23
65409: PUSH
65410: LD_VAR 0 11
65414: IN
65415: IFFALSE 65429
// begin result = 1 ;
65417: LD_ADDR_VAR 0 4
65421: PUSH
65422: LD_INT 1
65424: ST_TO_ADDR
// exit ;
65425: GO 66457
// end else
65427: GO 65462
// begin if not b_ext_stitch in btype_list_planned then
65429: LD_INT 23
65431: PUSH
65432: LD_VAR 0 10
65436: IN
65437: NOT
65438: IFFALSE 65451
// currently_needed = [ b_ext_stitch ] ;
65440: LD_ADDR_VAR 0 15
65444: PUSH
65445: LD_INT 23
65447: PUSH
65448: EMPTY
65449: LIST
65450: ST_TO_ADDR
// all_needed = [ b_ext_stitch ] ;
65451: LD_ADDR_VAR 0 14
65455: PUSH
65456: LD_INT 23
65458: PUSH
65459: EMPTY
65460: LIST
65461: ST_TO_ADDR
// end ; end ; ar_selfpropelled_bomb , ru_time_lapser :
65462: GO 65547
65464: LD_INT 29
65466: DOUBLE
65467: EQUAL
65468: IFTRUE 65478
65470: LD_INT 49
65472: DOUBLE
65473: EQUAL
65474: IFTRUE 65478
65476: GO 65536
65478: POP
// begin if b_ext_siberium in btype_list_exists then
65479: LD_INT 21
65481: PUSH
65482: LD_VAR 0 11
65486: IN
65487: IFFALSE 65501
// begin result = 1 ;
65489: LD_ADDR_VAR 0 4
65493: PUSH
65494: LD_INT 1
65496: ST_TO_ADDR
// exit ;
65497: GO 66457
// end else
65499: GO 65534
// begin if not b_ext_siberium in btype_list_planned then
65501: LD_INT 21
65503: PUSH
65504: LD_VAR 0 10
65508: IN
65509: NOT
65510: IFFALSE 65523
// currently_needed = [ b_ext_siberium ] ;
65512: LD_ADDR_VAR 0 15
65516: PUSH
65517: LD_INT 21
65519: PUSH
65520: EMPTY
65521: LIST
65522: ST_TO_ADDR
// all_needed = [ b_ext_siberium ] ;
65523: LD_ADDR_VAR 0 14
65527: PUSH
65528: LD_INT 21
65530: PUSH
65531: EMPTY
65532: LIST
65533: ST_TO_ADDR
// end ; end ; else
65534: GO 65547
65536: POP
// begin result = 1 ;
65537: LD_ADDR_VAR 0 4
65541: PUSH
65542: LD_INT 1
65544: ST_TO_ADDR
// exit ;
65545: GO 66457
// end ; end ; if currently_needed = 0 then
65547: LD_VAR 0 15
65551: PUSH
65552: LD_INT 0
65554: EQUAL
65555: IFFALSE 65567
// begin result = 0 ;
65557: LD_ADDR_VAR 0 4
65561: PUSH
65562: LD_INT 0
65564: ST_TO_ADDR
// end else
65565: GO 66457
// begin if ai_engineers [ base ] = 0 then
65567: LD_EXP 42
65571: PUSH
65572: LD_VAR 0 5
65576: ARRAY
65577: PUSH
65578: LD_INT 0
65580: EQUAL
65581: IFFALSE 65593
// begin result = 2 ;
65583: LD_ADDR_VAR 0 4
65587: PUSH
65588: LD_INT 2
65590: ST_TO_ADDR
// exit ;
65591: GO 66457
// end ; fact_ext_replace_loc_list = [ ] ;
65593: LD_ADDR_VAR 0 16
65597: PUSH
65598: EMPTY
65599: ST_TO_ADDR
// for i in ai_fact_extension_replace_locations [ base ] do
65600: LD_ADDR_VAR 0 6
65604: PUSH
65605: LD_EXP 98
65609: PUSH
65610: LD_VAR 0 5
65614: ARRAY
65615: PUSH
65616: FOR_IN
65617: IFFALSE 65673
// if GetDistUnitXY ( fact , i [ 1 ] , i [ 2 ] ) <= 4 then
65619: LD_VAR 0 1
65623: PPUSH
65624: LD_VAR 0 6
65628: PUSH
65629: LD_INT 1
65631: ARRAY
65632: PPUSH
65633: LD_VAR 0 6
65637: PUSH
65638: LD_INT 2
65640: ARRAY
65641: PPUSH
65642: CALL_OW 297
65646: PUSH
65647: LD_INT 4
65649: LESSEQUAL
65650: IFFALSE 65671
// fact_ext_replace_loc_list = fact_ext_replace_loc_list ^ [ i ] ;
65652: LD_ADDR_VAR 0 16
65656: PUSH
65657: LD_VAR 0 16
65661: PUSH
65662: LD_VAR 0 6
65666: PUSH
65667: EMPTY
65668: LIST
65669: ADD
65670: ST_TO_ADDR
65671: GO 65616
65673: POP
65674: POP
// if fact_ext_replace_loc_list = 0 then
65675: LD_VAR 0 16
65679: PUSH
65680: LD_INT 0
65682: EQUAL
65683: IFFALSE 65695
// begin result = 2 ;
65685: LD_ADDR_VAR 0 4
65689: PUSH
65690: LD_INT 2
65692: ST_TO_ADDR
// exit ;
65693: GO 66457
// end ; if not do_something_about_it then
65695: LD_VAR 0 3
65699: NOT
65700: IFFALSE 65704
// exit ;
65702: GO 66457
// temp_list_2 = [ ] ;
65704: LD_ADDR_VAR 0 12
65708: PUSH
65709: EMPTY
65710: ST_TO_ADDR
// for i = 1 to ai_buildings_locations [ base ] + 0 do
65711: LD_ADDR_VAR 0 6
65715: PUSH
65716: DOUBLE
65717: LD_INT 1
65719: DEC
65720: ST_TO_ADDR
65721: LD_EXP 61
65725: PUSH
65726: LD_VAR 0 5
65730: ARRAY
65731: PUSH
65732: LD_INT 0
65734: PLUS
65735: PUSH
65736: FOR_TO
65737: IFFALSE 65810
// if [ ai_buildings_locations [ base ] [ i ] [ 1 ] , ai_buildings_locations [ base ] [ i ] [ 2 ] ] in fact_ext_replace_loc_list then
65739: LD_EXP 61
65743: PUSH
65744: LD_VAR 0 5
65748: ARRAY
65749: PUSH
65750: LD_VAR 0 6
65754: ARRAY
65755: PUSH
65756: LD_INT 1
65758: ARRAY
65759: PUSH
65760: LD_EXP 61
65764: PUSH
65765: LD_VAR 0 5
65769: ARRAY
65770: PUSH
65771: LD_VAR 0 6
65775: ARRAY
65776: PUSH
65777: LD_INT 2
65779: ARRAY
65780: PUSH
65781: EMPTY
65782: LIST
65783: LIST
65784: PUSH
65785: LD_VAR 0 16
65789: IN
65790: IFFALSE 65808
// temp_list_2 = temp_list_2 ^ i ;
65792: LD_ADDR_VAR 0 12
65796: PUSH
65797: LD_VAR 0 12
65801: PUSH
65802: LD_VAR 0 6
65806: ADD
65807: ST_TO_ADDR
65808: GO 65736
65810: POP
65811: POP
// for i in temp_list_2 do
65812: LD_ADDR_VAR 0 6
65816: PUSH
65817: LD_VAR 0 12
65821: PUSH
65822: FOR_IN
65823: IFFALSE 66242
// begin if currently_needed = 0 then
65825: LD_VAR 0 15
65829: PUSH
65830: LD_INT 0
65832: EQUAL
65833: IFFALSE 65837
// break ;
65835: GO 66242
// if not ai_buildings_locations [ base ] [ i ] [ 4 ] in all_needed then
65837: LD_EXP 61
65841: PUSH
65842: LD_VAR 0 5
65846: ARRAY
65847: PUSH
65848: LD_VAR 0 6
65852: ARRAY
65853: PUSH
65854: LD_INT 4
65856: ARRAY
65857: PUSH
65858: LD_VAR 0 14
65862: IN
65863: NOT
65864: IFFALSE 66240
// begin un = HexInfo ( ai_buildings_locations [ base ] [ i ] [ 1 ] , ai_buildings_locations [ base ] [ i ] [ 2 ] ) ;
65866: LD_ADDR_VAR 0 8
65870: PUSH
65871: LD_EXP 61
65875: PUSH
65876: LD_VAR 0 5
65880: ARRAY
65881: PUSH
65882: LD_VAR 0 6
65886: ARRAY
65887: PUSH
65888: LD_INT 1
65890: ARRAY
65891: PPUSH
65892: LD_EXP 61
65896: PUSH
65897: LD_VAR 0 5
65901: ARRAY
65902: PUSH
65903: LD_VAR 0 6
65907: ARRAY
65908: PUSH
65909: LD_INT 2
65911: ARRAY
65912: PPUSH
65913: CALL_OW 428
65917: ST_TO_ADDR
// if un > 0 then
65918: LD_VAR 0 8
65922: PUSH
65923: LD_INT 0
65925: GREATER
65926: IFFALSE 66222
// if GetType ( un ) = unit_building and not IsConstructed ( un ) then
65928: LD_VAR 0 8
65932: PPUSH
65933: CALL_OW 247
65937: PUSH
65938: LD_INT 3
65940: EQUAL
65941: PUSH
65942: LD_VAR 0 8
65946: PPUSH
65947: CALL_OW 304
65951: NOT
65952: AND
65953: IFFALSE 66222
// begin temp_list = Replace ( ai_buildings_locations [ base ] [ i ] , 4 , currently_needed [ 1 ] ) ;
65955: LD_ADDR_VAR 0 7
65959: PUSH
65960: LD_EXP 61
65964: PUSH
65965: LD_VAR 0 5
65969: ARRAY
65970: PUSH
65971: LD_VAR 0 6
65975: ARRAY
65976: PPUSH
65977: LD_INT 4
65979: PPUSH
65980: LD_VAR 0 15
65984: PUSH
65985: LD_INT 1
65987: ARRAY
65988: PPUSH
65989: CALL_OW 1
65993: ST_TO_ADDR
// temp_list = Replace ( ai_buildings_locations [ base ] , i , temp_list ) ;
65994: LD_ADDR_VAR 0 7
65998: PUSH
65999: LD_EXP 61
66003: PUSH
66004: LD_VAR 0 5
66008: ARRAY
66009: PPUSH
66010: LD_VAR 0 6
66014: PPUSH
66015: LD_VAR 0 7
66019: PPUSH
66020: CALL_OW 1
66024: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
66025: LD_ADDR_EXP 61
66029: PUSH
66030: LD_EXP 61
66034: PPUSH
66035: LD_VAR 0 5
66039: PPUSH
66040: LD_VAR 0 7
66044: PPUSH
66045: CALL_OW 1
66049: ST_TO_ADDR
// temp_list = ai_dismantle_these_buildings [ base ] ^ un ;
66050: LD_ADDR_VAR 0 7
66054: PUSH
66055: LD_EXP 99
66059: PUSH
66060: LD_VAR 0 5
66064: ARRAY
66065: PUSH
66066: LD_VAR 0 8
66070: ADD
66071: ST_TO_ADDR
// ai_dismantle_these_buildings = Replace ( ai_dismantle_these_buildings , base , temp_list ) ;
66072: LD_ADDR_EXP 99
66076: PUSH
66077: LD_EXP 99
66081: PPUSH
66082: LD_VAR 0 5
66086: PPUSH
66087: LD_VAR 0 7
66091: PPUSH
66092: CALL_OW 1
66096: ST_TO_ADDR
// if ai_facts_with_ext_rebuild_map < fact then
66097: LD_EXP 108
66101: PUSH
66102: LD_VAR 0 1
66106: LESS
66107: IFFALSE 66131
// ai_facts_with_ext_rebuild_map = Replace ( ai_facts_with_ext_rebuild_map , fact , [ ] ) ;
66109: LD_ADDR_EXP 108
66113: PUSH
66114: LD_EXP 108
66118: PPUSH
66119: LD_VAR 0 1
66123: PPUSH
66124: EMPTY
66125: PPUSH
66126: CALL_OW 1
66130: ST_TO_ADDR
// temp_list = ai_facts_with_ext_rebuild_map [ fact ] ^ [ [ ai_buildings_locations [ base ] [ i ] [ 1 ] , ai_buildings_locations [ base ] [ i ] [ 2 ] ] ] ;
66131: LD_ADDR_VAR 0 7
66135: PUSH
66136: LD_EXP 108
66140: PUSH
66141: LD_VAR 0 1
66145: ARRAY
66146: PUSH
66147: LD_EXP 61
66151: PUSH
66152: LD_VAR 0 5
66156: ARRAY
66157: PUSH
66158: LD_VAR 0 6
66162: ARRAY
66163: PUSH
66164: LD_INT 1
66166: ARRAY
66167: PUSH
66168: LD_EXP 61
66172: PUSH
66173: LD_VAR 0 5
66177: ARRAY
66178: PUSH
66179: LD_VAR 0 6
66183: ARRAY
66184: PUSH
66185: LD_INT 2
66187: ARRAY
66188: PUSH
66189: EMPTY
66190: LIST
66191: LIST
66192: PUSH
66193: EMPTY
66194: LIST
66195: ADD
66196: ST_TO_ADDR
// ai_facts_with_ext_rebuild_map = Replace ( ai_facts_with_ext_rebuild_map , fact , temp_list ) ;
66197: LD_ADDR_EXP 108
66201: PUSH
66202: LD_EXP 108
66206: PPUSH
66207: LD_VAR 0 1
66211: PPUSH
66212: LD_VAR 0 7
66216: PPUSH
66217: CALL_OW 1
66221: ST_TO_ADDR
// end ; currently_needed = Delete ( currently_needed , 1 ) ;
66222: LD_ADDR_VAR 0 15
66226: PUSH
66227: LD_VAR 0 15
66231: PPUSH
66232: LD_INT 1
66234: PPUSH
66235: CALL_OW 3
66239: ST_TO_ADDR
// end ; end ;
66240: GO 65822
66242: POP
66243: POP
// if temp_list_2 >= 2 then
66244: LD_VAR 0 12
66248: PUSH
66249: LD_INT 2
66251: GREATEREQUAL
66252: IFFALSE 66429
// begin temp_list_3 = ai_buildings_locations [ base ] ;
66254: LD_ADDR_VAR 0 13
66258: PUSH
66259: LD_EXP 61
66263: PUSH
66264: LD_VAR 0 5
66268: ARRAY
66269: ST_TO_ADDR
// temp_list = ai_buildings_locations [ base ] [ temp_list_2 [ 1 ] ] ;
66270: LD_ADDR_VAR 0 7
66274: PUSH
66275: LD_EXP 61
66279: PUSH
66280: LD_VAR 0 5
66284: ARRAY
66285: PUSH
66286: LD_VAR 0 12
66290: PUSH
66291: LD_INT 1
66293: ARRAY
66294: ARRAY
66295: ST_TO_ADDR
// for i = 2 to temp_list_2 + 0 do
66296: LD_ADDR_VAR 0 6
66300: PUSH
66301: DOUBLE
66302: LD_INT 2
66304: DEC
66305: ST_TO_ADDR
66306: LD_VAR 0 12
66310: PUSH
66311: LD_INT 0
66313: PLUS
66314: PUSH
66315: FOR_TO
66316: IFFALSE 66367
// begin temp_list_3 = Replace ( temp_list_3 , temp_list_2 [ i - 1 ] , temp_list_3 [ temp_list_2 [ i ] ] ) ;
66318: LD_ADDR_VAR 0 13
66322: PUSH
66323: LD_VAR 0 13
66327: PPUSH
66328: LD_VAR 0 12
66332: PUSH
66333: LD_VAR 0 6
66337: PUSH
66338: LD_INT 1
66340: MINUS
66341: ARRAY
66342: PPUSH
66343: LD_VAR 0 13
66347: PUSH
66348: LD_VAR 0 12
66352: PUSH
66353: LD_VAR 0 6
66357: ARRAY
66358: ARRAY
66359: PPUSH
66360: CALL_OW 1
66364: ST_TO_ADDR
// end ;
66365: GO 66315
66367: POP
66368: POP
// temp_list_3 = Replace ( temp_list_3 , temp_list_2 [ temp_list_2 + 0 ] , temp_list ) ;
66369: LD_ADDR_VAR 0 13
66373: PUSH
66374: LD_VAR 0 13
66378: PPUSH
66379: LD_VAR 0 12
66383: PUSH
66384: LD_VAR 0 12
66388: PUSH
66389: LD_INT 0
66391: PLUS
66392: ARRAY
66393: PPUSH
66394: LD_VAR 0 7
66398: PPUSH
66399: CALL_OW 1
66403: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list_3 ) ;
66404: LD_ADDR_EXP 61
66408: PUSH
66409: LD_EXP 61
66413: PPUSH
66414: LD_VAR 0 5
66418: PPUSH
66419: LD_VAR 0 13
66423: PPUSH
66424: CALL_OW 1
66428: ST_TO_ADDR
// end ; if currently_needed = 0 then
66429: LD_VAR 0 15
66433: PUSH
66434: LD_INT 0
66436: EQUAL
66437: IFFALSE 66449
// result = 0 else
66439: LD_ADDR_VAR 0 4
66443: PUSH
66444: LD_INT 0
66446: ST_TO_ADDR
66447: GO 66457
// result = 2 ;
66449: LD_ADDR_VAR 0 4
66453: PUSH
66454: LD_INT 2
66456: ST_TO_ADDR
// end ; end ;
66457: LD_VAR 0 4
66461: RET
// on VehicleCaptured ( new_identifier , old_identifier , old_side , capturing_unit ) do var temp_list , base ;
66462: LD_INT 0
66464: PPUSH
66465: PPUSH
// begin if old_side = you then
66466: LD_VAR 0 3
66470: PUSH
66471: LD_EXP 2
66475: EQUAL
66476: IFFALSE 66480
// exit ;
66478: GO 66511
// for base in ai_bases do
66480: LD_ADDR_VAR 0 6
66484: PUSH
66485: LD_EXP 39
66489: PUSH
66490: FOR_IN
66491: IFFALSE 66509
// RemoveVehicleFromVariables ( base , old_identifier ) ;
66493: LD_VAR 0 6
66497: PPUSH
66498: LD_VAR 0 2
66502: PPUSH
66503: CALL 22584 0 2
66507: GO 66490
66509: POP
66510: POP
// end ;
66511: PPOPN 6
66513: END
// on VehicleConstructed ( vehicle , factory ) do var side , temp_list , base , un ;
66514: LD_INT 0
66516: PPUSH
66517: PPUSH
66518: PPUSH
66519: PPUSH
// begin side = GetSide ( vehicle ) ;
66520: LD_ADDR_VAR 0 3
66524: PUSH
66525: LD_VAR 0 1
66529: PPUSH
66530: CALL_OW 255
66534: ST_TO_ADDR
// if side = you then
66535: LD_VAR 0 3
66539: PUSH
66540: LD_EXP 2
66544: EQUAL
66545: IFFALSE 66579
// begin if GetWeapon ( vehicle ) in [ ru_siberium_rocket , us_siberium_rocket ] then
66547: LD_VAR 0 1
66551: PPUSH
66552: CALL_OW 264
66556: PUSH
66557: LD_INT 48
66559: PUSH
66560: LD_INT 8
66562: PUSH
66563: EMPTY
66564: LIST
66565: LIST
66566: IN
66567: IFFALSE 66577
// player_has_built_sib_bomb = true ;
66569: LD_ADDR_EXP 151
66573: PUSH
66574: LD_INT 1
66576: ST_TO_ADDR
// exit ;
66577: GO 67038
// end ; base = FindBase ( vehicle ) ;
66579: LD_ADDR_VAR 0 5
66583: PUSH
66584: LD_VAR 0 1
66588: PPUSH
66589: CALL 25073 0 1
66593: ST_TO_ADDR
// if base = 0 then
66594: LD_VAR 0 5
66598: PUSH
66599: LD_INT 0
66601: EQUAL
66602: IFFALSE 66606
// exit ;
66604: GO 67038
// case GetWeapon ( vehicle ) of us_cargo_bay , ar_cargo_bay , ru_cargo_bay :
66606: LD_VAR 0 1
66610: PPUSH
66611: CALL_OW 264
66615: PUSH
66616: LD_INT 12
66618: DOUBLE
66619: EQUAL
66620: IFTRUE 66636
66622: LD_INT 32
66624: DOUBLE
66625: EQUAL
66626: IFTRUE 66636
66628: LD_INT 51
66630: DOUBLE
66631: EQUAL
66632: IFTRUE 66636
66634: GO 66687
66636: POP
// begin ai_cargo_bay = Replace ( ai_cargo_bay , base , vehicle ) ;
66637: LD_ADDR_EXP 85
66641: PUSH
66642: LD_EXP 85
66646: PPUSH
66647: LD_VAR 0 5
66651: PPUSH
66652: LD_VAR 0 1
66656: PPUSH
66657: CALL_OW 1
66661: ST_TO_ADDR
// ai_cargo_bay_under_construction = Replace ( ai_cargo_bay_under_construction , base , false ) ;
66662: LD_ADDR_EXP 86
66666: PUSH
66667: LD_EXP 86
66671: PPUSH
66672: LD_VAR 0 5
66676: PPUSH
66677: LD_INT 0
66679: PPUSH
66680: CALL_OW 1
66684: ST_TO_ADDR
// end ; us_crane , ru_crane :
66685: GO 67038
66687: LD_INT 13
66689: DOUBLE
66690: EQUAL
66691: IFTRUE 66701
66693: LD_INT 52
66695: DOUBLE
66696: EQUAL
66697: IFTRUE 66701
66699: GO 66752
66701: POP
// begin ai_crane = Replace ( ai_crane , base , vehicle ) ;
66702: LD_ADDR_EXP 88
66706: PUSH
66707: LD_EXP 88
66711: PPUSH
66712: LD_VAR 0 5
66716: PPUSH
66717: LD_VAR 0 1
66721: PPUSH
66722: CALL_OW 1
66726: ST_TO_ADDR
// ai_crane_under_construction = Replace ( ai_crane_under_construction , base , false ) ;
66727: LD_ADDR_EXP 89
66731: PUSH
66732: LD_EXP 89
66736: PPUSH
66737: LD_VAR 0 5
66741: PPUSH
66742: LD_INT 0
66744: PPUSH
66745: CALL_OW 1
66749: ST_TO_ADDR
// end ; ar_control_tower :
66750: GO 67038
66752: LD_INT 31
66754: DOUBLE
66755: EQUAL
66756: IFTRUE 66760
66758: GO 66810
66760: POP
// begin temp_list = ai_control_tower_vehicles [ base ] ^ vehicle ;
66761: LD_ADDR_VAR 0 4
66765: PUSH
66766: LD_EXP 95
66770: PUSH
66771: LD_VAR 0 5
66775: ARRAY
66776: PUSH
66777: LD_VAR 0 1
66781: ADD
66782: ST_TO_ADDR
// ai_control_tower_vehicles = Replace ( ai_control_tower_vehicles , base , temp_list ) ;
66783: LD_ADDR_EXP 95
66787: PUSH
66788: LD_EXP 95
66792: PPUSH
66793: LD_VAR 0 5
66797: PPUSH
66798: LD_VAR 0 4
66802: PPUSH
66803: CALL_OW 1
66807: ST_TO_ADDR
// end ; ar_selfpropelled_bomb :
66808: GO 67038
66810: LD_INT 29
66812: DOUBLE
66813: EQUAL
66814: IFTRUE 66818
66816: GO 66868
66818: POP
// begin temp_list = ai_implosion_vehicles [ base ] ^ vehicle ;
66819: LD_ADDR_VAR 0 4
66823: PUSH
66824: LD_EXP 101
66828: PUSH
66829: LD_VAR 0 5
66833: ARRAY
66834: PUSH
66835: LD_VAR 0 1
66839: ADD
66840: ST_TO_ADDR
// ai_implosion_vehicles = Replace ( ai_implosion_vehicles , base , temp_list ) ;
66841: LD_ADDR_EXP 101
66845: PUSH
66846: LD_EXP 101
66850: PPUSH
66851: LD_VAR 0 5
66855: PPUSH
66856: LD_VAR 0 4
66860: PPUSH
66861: CALL_OW 1
66865: ST_TO_ADDR
// end ; ru_time_lapser :
66866: GO 67038
66868: LD_INT 49
66870: DOUBLE
66871: EQUAL
66872: IFTRUE 66876
66874: GO 66926
66876: POP
// begin temp_list = ai_taufield_vehicles [ base ] ^ vehicle ;
66877: LD_ADDR_VAR 0 4
66881: PUSH
66882: LD_EXP 100
66886: PUSH
66887: LD_VAR 0 5
66891: ARRAY
66892: PUSH
66893: LD_VAR 0 1
66897: ADD
66898: ST_TO_ADDR
// ai_taufield_vehicles = Replace ( ai_taufield_vehicles , base , temp_list ) ;
66899: LD_ADDR_EXP 100
66903: PUSH
66904: LD_EXP 100
66908: PPUSH
66909: LD_VAR 0 5
66913: PPUSH
66914: LD_VAR 0 4
66918: PPUSH
66919: CALL_OW 1
66923: ST_TO_ADDR
// end ; ru_siberium_rocket , us_siberium_rocket :
66924: GO 67038
66926: LD_INT 48
66928: DOUBLE
66929: EQUAL
66930: IFTRUE 66940
66932: LD_INT 8
66934: DOUBLE
66935: EQUAL
66936: IFTRUE 66940
66938: GO 66990
66940: POP
// begin temp_list = ai_sib_bomb_vehicles [ base ] ^ vehicle ;
66941: LD_ADDR_VAR 0 4
66945: PUSH
66946: LD_EXP 107
66950: PUSH
66951: LD_VAR 0 5
66955: ARRAY
66956: PUSH
66957: LD_VAR 0 1
66961: ADD
66962: ST_TO_ADDR
// ai_sib_bomb_vehicles = Replace ( ai_sib_bomb_vehicles , base , temp_list ) ;
66963: LD_ADDR_EXP 107
66967: PUSH
66968: LD_EXP 107
66972: PPUSH
66973: LD_VAR 0 5
66977: PPUSH
66978: LD_VAR 0 4
66982: PPUSH
66983: CALL_OW 1
66987: ST_TO_ADDR
// end ; else
66988: GO 67038
66990: POP
// begin temp_list = ai_vehicles_defend [ base ] ^ vehicle ;
66991: LD_ADDR_VAR 0 4
66995: PUSH
66996: LD_EXP 67
67000: PUSH
67001: LD_VAR 0 5
67005: ARRAY
67006: PUSH
67007: LD_VAR 0 1
67011: ADD
67012: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
67013: LD_ADDR_EXP 67
67017: PUSH
67018: LD_EXP 67
67022: PPUSH
67023: LD_VAR 0 5
67027: PPUSH
67028: LD_VAR 0 4
67032: PPUSH
67033: CALL_OW 1
67037: ST_TO_ADDR
// end ; end ; end ;
67038: PPOPN 6
67040: END
// on BehemothConstructed ( behe ) do var side , base , temp_list , i ;
67041: LD_INT 0
67043: PPUSH
67044: PPUSH
67045: PPUSH
67046: PPUSH
// begin side = GetSide ( behe ) ;
67047: LD_ADDR_VAR 0 2
67051: PUSH
67052: LD_VAR 0 1
67056: PPUSH
67057: CALL_OW 255
67061: ST_TO_ADDR
// if side = you then
67062: LD_VAR 0 2
67066: PUSH
67067: LD_EXP 2
67071: EQUAL
67072: IFFALSE 67076
// exit ;
67074: GO 67226
// base = 0 ;
67076: LD_ADDR_VAR 0 3
67080: PUSH
67081: LD_INT 0
67083: ST_TO_ADDR
// for i in ai_bases do
67084: LD_ADDR_VAR 0 5
67088: PUSH
67089: LD_EXP 39
67093: PUSH
67094: FOR_IN
67095: IFFALSE 67165
// if GetX ( behe ) = ai_behemoth_construction_hex [ i ] [ 1 ] and GetY ( behe ) = ai_behemoth_construction_hex [ i ] [ 2 ] then
67097: LD_VAR 0 1
67101: PPUSH
67102: CALL_OW 250
67106: PUSH
67107: LD_EXP 105
67111: PUSH
67112: LD_VAR 0 5
67116: ARRAY
67117: PUSH
67118: LD_INT 1
67120: ARRAY
67121: EQUAL
67122: PUSH
67123: LD_VAR 0 1
67127: PPUSH
67128: CALL_OW 251
67132: PUSH
67133: LD_EXP 105
67137: PUSH
67138: LD_VAR 0 5
67142: ARRAY
67143: PUSH
67144: LD_INT 2
67146: ARRAY
67147: EQUAL
67148: AND
67149: IFFALSE 67163
// begin base = i ;
67151: LD_ADDR_VAR 0 3
67155: PUSH
67156: LD_VAR 0 5
67160: ST_TO_ADDR
// break ;
67161: GO 67165
// end ;
67163: GO 67094
67165: POP
67166: POP
// if base = 0 then
67167: LD_VAR 0 3
67171: PUSH
67172: LD_INT 0
67174: EQUAL
67175: IFFALSE 67179
// exit ;
67177: GO 67226
// temp_list = ai_behemoths [ base ] ^ behe ;
67179: LD_ADDR_VAR 0 4
67183: PUSH
67184: LD_EXP 103
67188: PUSH
67189: LD_VAR 0 3
67193: ARRAY
67194: PUSH
67195: LD_VAR 0 1
67199: ADD
67200: ST_TO_ADDR
// ai_behemoths = Replace ( ai_behemoths , base , temp_list ) ;
67201: LD_ADDR_EXP 103
67205: PUSH
67206: LD_EXP 103
67210: PPUSH
67211: LD_VAR 0 3
67215: PPUSH
67216: LD_VAR 0 4
67220: PPUSH
67221: CALL_OW 1
67225: ST_TO_ADDR
// end ;
67226: PPOPN 5
67228: END
// every 0 0$1 + 0 0$0.3 do var val , i , b , temp_list , temp_list_2 , temp_list_3 , temp_list_4 , base_list , base ; var am_ar_cooperation_determined ;
67229: GO 67231
67231: DISABLE
67232: LD_INT 0
67234: PPUSH
67235: PPUSH
67236: PPUSH
67237: PPUSH
67238: PPUSH
67239: PPUSH
67240: PPUSH
67241: PPUSH
67242: PPUSH
67243: PPUSH
// begin am_ar_cooperation_determined = false ;
67244: LD_ADDR_VAR 0 10
67248: PUSH
67249: LD_INT 0
67251: ST_TO_ADDR
// repeat if ( ai_bases diff 2 ) = 0 then
67252: LD_EXP 39
67256: PUSH
67257: LD_INT 2
67259: DIFF
67260: PUSH
67261: LD_INT 0
67263: EQUAL
67264: IFFALSE 67268
// exit ;
67266: GO 69733
// wait ( 0 0$1 mod ( ai_bases diff 2 ) ) ;
67268: LD_INT 35
67270: PUSH
67271: LD_EXP 39
67275: PUSH
67276: LD_INT 2
67278: DIFF
67279: MOD
67280: PPUSH
67281: CALL_OW 67
// for base in ( ai_bases diff 2 ) do
67285: LD_ADDR_VAR 0 9
67289: PUSH
67290: LD_EXP 39
67294: PUSH
67295: LD_INT 2
67297: DIFF
67298: PUSH
67299: FOR_IN
67300: IFFALSE 69727
// begin wait ( 0 0$1 div ( ai_bases diff 2 ) ) ;
67302: LD_INT 35
67304: PUSH
67305: LD_EXP 39
67309: PUSH
67310: LD_INT 2
67312: DIFF
67313: DIV
67314: PPUSH
67315: CALL_OW 67
// if american_arabian_alliance and base = 3 then
67319: LD_EXP 123
67323: PUSH
67324: LD_VAR 0 9
67328: PUSH
67329: LD_INT 3
67331: EQUAL
67332: AND
67333: IFFALSE 67337
// continue ;
67335: GO 67299
// if UnitFilter ( ai_vehicles_attack [ base ] , [ f_ok ] ) > 0 or UnitFilter ( ai_mechanics_attack [ base ] , [ f_ok ] ) > 0 or ( base = 4 and american_arabian_alliance and ( UnitFilter ( ai_vehicles_attack [ 3 ] , [ f_ok ] ) > 0 or UnitFilter ( ai_mechanics_attack [ 3 ] , [ f_ok ] ) > 0 ) ) then
67337: LD_EXP 68
67341: PUSH
67342: LD_VAR 0 9
67346: ARRAY
67347: PPUSH
67348: LD_INT 50
67350: PUSH
67351: EMPTY
67352: LIST
67353: PPUSH
67354: CALL_OW 72
67358: PUSH
67359: LD_INT 0
67361: GREATER
67362: PUSH
67363: LD_EXP 44
67367: PUSH
67368: LD_VAR 0 9
67372: ARRAY
67373: PPUSH
67374: LD_INT 50
67376: PUSH
67377: EMPTY
67378: LIST
67379: PPUSH
67380: CALL_OW 72
67384: PUSH
67385: LD_INT 0
67387: GREATER
67388: OR
67389: PUSH
67390: LD_VAR 0 9
67394: PUSH
67395: LD_INT 4
67397: EQUAL
67398: PUSH
67399: LD_EXP 123
67403: AND
67404: PUSH
67405: LD_EXP 68
67409: PUSH
67410: LD_INT 3
67412: ARRAY
67413: PPUSH
67414: LD_INT 50
67416: PUSH
67417: EMPTY
67418: LIST
67419: PPUSH
67420: CALL_OW 72
67424: PUSH
67425: LD_INT 0
67427: GREATER
67428: PUSH
67429: LD_EXP 44
67433: PUSH
67434: LD_INT 3
67436: ARRAY
67437: PPUSH
67438: LD_INT 50
67440: PUSH
67441: EMPTY
67442: LIST
67443: PPUSH
67444: CALL_OW 72
67448: PUSH
67449: LD_INT 0
67451: GREATER
67452: OR
67453: AND
67454: OR
67455: IFFALSE 67459
// continue ;
67457: GO 67299
// if base = 4 and american_arabian_alliance and not am_ar_cooperation_determined then
67459: LD_VAR 0 9
67463: PUSH
67464: LD_INT 4
67466: EQUAL
67467: PUSH
67468: LD_EXP 123
67472: AND
67473: PUSH
67474: LD_VAR 0 10
67478: NOT
67479: AND
67480: IFFALSE 67538
// begin am_ar_cooperation_determined = true ;
67482: LD_ADDR_VAR 0 10
67486: PUSH
67487: LD_INT 1
67489: ST_TO_ADDR
// if not am_ar_attack_alli_together then
67490: LD_EXP 126
67494: NOT
67495: IFFALSE 67507
// am_ar_attack_alli_together = true else
67497: LD_ADDR_EXP 126
67501: PUSH
67502: LD_INT 1
67504: ST_TO_ADDR
67505: GO 67538
// am_ar_attack_alli_together = [ false , false , true ] [ Rand ( 1 , 3 ) ] ;
67507: LD_ADDR_EXP 126
67511: PUSH
67512: LD_INT 0
67514: PUSH
67515: LD_INT 0
67517: PUSH
67518: LD_INT 1
67520: PUSH
67521: EMPTY
67522: LIST
67523: LIST
67524: LIST
67525: PUSH
67526: LD_INT 1
67528: PPUSH
67529: LD_INT 3
67531: PPUSH
67532: CALL_OW 12
67536: ARRAY
67537: ST_TO_ADDR
// end ; ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , base , ai_vehicle_attack_delay [ base ] - 0 0$1 ) ;
67538: LD_ADDR_EXP 83
67542: PUSH
67543: LD_EXP 83
67547: PPUSH
67548: LD_VAR 0 9
67552: PPUSH
67553: LD_EXP 83
67557: PUSH
67558: LD_VAR 0 9
67562: ARRAY
67563: PUSH
67564: LD_INT 35
67566: MINUS
67567: PPUSH
67568: CALL_OW 1
67572: ST_TO_ADDR
// if ai_vehicle_attack_delay [ base ] > 0 0$0 then
67573: LD_EXP 83
67577: PUSH
67578: LD_VAR 0 9
67582: ARRAY
67583: PUSH
67584: LD_INT 0
67586: GREATER
67587: IFFALSE 67591
// continue ;
67589: GO 67299
// if BaseUnderAttack ( base , - 1 ) then
67591: LD_VAR 0 9
67595: PPUSH
67596: LD_INT 1
67598: NEG
67599: PPUSH
67600: CALL 45321 0 2
67604: IFFALSE 67608
// continue ;
67606: GO 67299
// if ai_vehicles_defend [ base ] < MaxNumWarVehiclesAttack ( base ) or ( base = 4 and american_arabian_alliance and ai_vehicles_defend [ 3 ] < MaxNumWarVehiclesAttack ( 3 ) ) then
67608: LD_EXP 67
67612: PUSH
67613: LD_VAR 0 9
67617: ARRAY
67618: PUSH
67619: LD_VAR 0 9
67623: PPUSH
67624: CALL 60012 0 1
67628: LESS
67629: PUSH
67630: LD_VAR 0 9
67634: PUSH
67635: LD_INT 4
67637: EQUAL
67638: PUSH
67639: LD_EXP 123
67643: AND
67644: PUSH
67645: LD_EXP 67
67649: PUSH
67650: LD_INT 3
67652: ARRAY
67653: PUSH
67654: LD_INT 3
67656: PPUSH
67657: CALL 60012 0 1
67661: LESS
67662: AND
67663: OR
67664: IFFALSE 67668
// continue ;
67666: GO 67299
// if ai_taufield_vehicles [ base ] < MaxNumTaufieldVehicles ( base ) and ( ai_facts [ base ] diff ai_sib_bomb_fact [ base ] ) > 0 then
67668: LD_EXP 100
67672: PUSH
67673: LD_VAR 0 9
67677: ARRAY
67678: PUSH
67679: LD_VAR 0 9
67683: PPUSH
67684: CALL 60453 0 1
67688: LESS
67689: PUSH
67690: LD_EXP 51
67694: PUSH
67695: LD_VAR 0 9
67699: ARRAY
67700: PUSH
67701: LD_EXP 63
67705: PUSH
67706: LD_VAR 0 9
67710: ARRAY
67711: DIFF
67712: PUSH
67713: LD_INT 0
67715: GREATER
67716: AND
67717: IFFALSE 67764
// if CanFactConstructThis ( ( ai_facts [ base ] diff ai_sib_bomb_fact [ base ] ) [ 1 ] , ru_time_lapser , false ) <> 2 then
67719: LD_EXP 51
67723: PUSH
67724: LD_VAR 0 9
67728: ARRAY
67729: PUSH
67730: LD_EXP 63
67734: PUSH
67735: LD_VAR 0 9
67739: ARRAY
67740: DIFF
67741: PUSH
67742: LD_INT 1
67744: ARRAY
67745: PPUSH
67746: LD_INT 49
67748: PPUSH
67749: LD_INT 0
67751: PPUSH
67752: CALL 64387 0 3
67756: PUSH
67757: LD_INT 2
67759: NONEQUAL
67760: IFFALSE 67764
// continue ;
67762: GO 67299
// if ai_implosion_vehicles [ base ] < MaxNumImplosionVehicles ( base ) and ( ai_facts [ base ] diff ai_sib_bomb_fact [ base ] ) > 0 then
67764: LD_EXP 101
67768: PUSH
67769: LD_VAR 0 9
67773: ARRAY
67774: PUSH
67775: LD_VAR 0 9
67779: PPUSH
67780: CALL 60640 0 1
67784: LESS
67785: PUSH
67786: LD_EXP 51
67790: PUSH
67791: LD_VAR 0 9
67795: ARRAY
67796: PUSH
67797: LD_EXP 63
67801: PUSH
67802: LD_VAR 0 9
67806: ARRAY
67807: DIFF
67808: PUSH
67809: LD_INT 0
67811: GREATER
67812: AND
67813: IFFALSE 67860
// if CanFactConstructThis ( ( ai_facts [ base ] diff ai_sib_bomb_fact [ base ] ) [ 1 ] , ar_selfpropelled_bomb , false ) <> 2 then
67815: LD_EXP 51
67819: PUSH
67820: LD_VAR 0 9
67824: ARRAY
67825: PUSH
67826: LD_EXP 63
67830: PUSH
67831: LD_VAR 0 9
67835: ARRAY
67836: DIFF
67837: PUSH
67838: LD_INT 1
67840: ARRAY
67841: PPUSH
67842: LD_INT 29
67844: PPUSH
67845: LD_INT 0
67847: PPUSH
67848: CALL 64387 0 3
67852: PUSH
67853: LD_INT 2
67855: NONEQUAL
67856: IFFALSE 67860
// continue ;
67858: GO 67299
// if base = 4 and american_arabian_alliance then
67860: LD_VAR 0 9
67864: PUSH
67865: LD_INT 4
67867: EQUAL
67868: PUSH
67869: LD_EXP 123
67873: AND
67874: IFFALSE 67960
// if ai_implosion_vehicles [ 3 ] < MaxNumImplosionVehicles ( 3 ) and ( ai_facts [ 3 ] diff ai_sib_bomb_fact [ 3 ] ) > 0 then
67876: LD_EXP 101
67880: PUSH
67881: LD_INT 3
67883: ARRAY
67884: PUSH
67885: LD_INT 3
67887: PPUSH
67888: CALL 60640 0 1
67892: LESS
67893: PUSH
67894: LD_EXP 51
67898: PUSH
67899: LD_INT 3
67901: ARRAY
67902: PUSH
67903: LD_EXP 63
67907: PUSH
67908: LD_INT 3
67910: ARRAY
67911: DIFF
67912: PUSH
67913: LD_INT 0
67915: GREATER
67916: AND
67917: IFFALSE 67960
// if CanFactConstructThis ( ( ai_facts [ 3 ] diff ai_sib_bomb_fact [ 3 ] ) [ 1 ] , ar_selfpropelled_bomb , false ) <> 2 then
67919: LD_EXP 51
67923: PUSH
67924: LD_INT 3
67926: ARRAY
67927: PUSH
67928: LD_EXP 63
67932: PUSH
67933: LD_INT 3
67935: ARRAY
67936: DIFF
67937: PUSH
67938: LD_INT 1
67940: ARRAY
67941: PPUSH
67942: LD_INT 29
67944: PPUSH
67945: LD_INT 0
67947: PPUSH
67948: CALL 64387 0 3
67952: PUSH
67953: LD_INT 2
67955: NONEQUAL
67956: IFFALSE 67960
// continue ;
67958: GO 67299
// base_list = [ base ] ;
67960: LD_ADDR_VAR 0 8
67964: PUSH
67965: LD_VAR 0 9
67969: PUSH
67970: EMPTY
67971: LIST
67972: ST_TO_ADDR
// if base = 4 and american_arabian_alliance then
67973: LD_VAR 0 9
67977: PUSH
67978: LD_INT 4
67980: EQUAL
67981: PUSH
67982: LD_EXP 123
67986: AND
67987: IFFALSE 68003
// base_list = base_list ^ 3 ;
67989: LD_ADDR_VAR 0 8
67993: PUSH
67994: LD_VAR 0 8
67998: PUSH
67999: LD_INT 3
68001: ADD
68002: ST_TO_ADDR
// for b in base_list do
68003: LD_ADDR_VAR 0 3
68007: PUSH
68008: LD_VAR 0 8
68012: PUSH
68013: FOR_IN
68014: IFFALSE 68217
// begin temp_list = base_in_area_map [ b ] ;
68016: LD_ADDR_VAR 0 4
68020: PUSH
68021: LD_EXP 143
68025: PUSH
68026: LD_VAR 0 3
68030: ARRAY
68031: ST_TO_ADDR
// for i in [ Ru_base , Alliance_base , Ar_base , Am_base , north_east_corner_area , player_base_area ] do
68032: LD_ADDR_VAR 0 2
68036: PUSH
68037: LD_INT 2
68039: PUSH
68040: LD_INT 3
68042: PUSH
68043: LD_INT 4
68045: PUSH
68046: LD_INT 5
68048: PUSH
68049: LD_INT 24
68051: PUSH
68052: LD_INT 25
68054: PUSH
68055: EMPTY
68056: LIST
68057: LIST
68058: LIST
68059: LIST
68060: LIST
68061: LIST
68062: PUSH
68063: FOR_IN
68064: IFFALSE 68188
// if FilterAllUnits ( [ [ f_enemy , GetBaseSide ( b ) ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_inarea , i ] ] ) > 0 then
68066: LD_INT 81
68068: PUSH
68069: LD_VAR 0 3
68073: PPUSH
68074: CALL 24885 0 1
68078: PUSH
68079: EMPTY
68080: LIST
68081: LIST
68082: PUSH
68083: LD_INT 2
68085: PUSH
68086: LD_INT 30
68088: PUSH
68089: LD_INT 0
68091: PUSH
68092: EMPTY
68093: LIST
68094: LIST
68095: PUSH
68096: LD_INT 30
68098: PUSH
68099: LD_INT 1
68101: PUSH
68102: EMPTY
68103: LIST
68104: LIST
68105: PUSH
68106: EMPTY
68107: LIST
68108: LIST
68109: LIST
68110: PUSH
68111: LD_INT 95
68113: PUSH
68114: LD_VAR 0 2
68118: PUSH
68119: EMPTY
68120: LIST
68121: LIST
68122: PUSH
68123: EMPTY
68124: LIST
68125: LIST
68126: LIST
68127: PPUSH
68128: CALL_OW 69
68132: PUSH
68133: LD_INT 0
68135: GREATER
68136: IFFALSE 68163
// temp_list = Replace ( temp_list , i , true ) else
68138: LD_ADDR_VAR 0 4
68142: PUSH
68143: LD_VAR 0 4
68147: PPUSH
68148: LD_VAR 0 2
68152: PPUSH
68153: LD_INT 1
68155: PPUSH
68156: CALL_OW 1
68160: ST_TO_ADDR
68161: GO 68186
// temp_list = Replace ( temp_list , i , false ) ;
68163: LD_ADDR_VAR 0 4
68167: PUSH
68168: LD_VAR 0 4
68172: PPUSH
68173: LD_VAR 0 2
68177: PPUSH
68178: LD_INT 0
68180: PPUSH
68181: CALL_OW 1
68185: ST_TO_ADDR
68186: GO 68063
68188: POP
68189: POP
// base_in_area_map = Replace ( base_in_area_map , b , temp_list ) ;
68190: LD_ADDR_EXP 143
68194: PUSH
68195: LD_EXP 143
68199: PPUSH
68200: LD_VAR 0 3
68204: PPUSH
68205: LD_VAR 0 4
68209: PPUSH
68210: CALL_OW 1
68214: ST_TO_ADDR
// end ;
68215: GO 68013
68217: POP
68218: POP
// case base of 1 :
68219: LD_VAR 0 9
68223: PUSH
68224: LD_INT 1
68226: DOUBLE
68227: EQUAL
68228: IFTRUE 68232
68230: GO 68689
68232: POP
// begin if FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] , [ f_inarea , south_motherlode_area ] ] ) then
68233: LD_INT 22
68235: PUSH
68236: LD_EXP 2
68240: PUSH
68241: EMPTY
68242: LIST
68243: LIST
68244: PUSH
68245: LD_INT 21
68247: PUSH
68248: LD_INT 3
68250: PUSH
68251: EMPTY
68252: LIST
68253: LIST
68254: PUSH
68255: LD_INT 95
68257: PUSH
68258: LD_INT 16
68260: PUSH
68261: EMPTY
68262: LIST
68263: LIST
68264: PUSH
68265: EMPTY
68266: LIST
68267: LIST
68268: LIST
68269: PPUSH
68270: CALL_OW 69
68274: IFFALSE 68320
// ai_attack_strategy = Replace ( ai_attack_strategy , base , [ 1 , 4 ] [ Rand ( 1 , 2 ) ] ) else
68276: LD_ADDR_EXP 102
68280: PUSH
68281: LD_EXP 102
68285: PPUSH
68286: LD_VAR 0 9
68290: PPUSH
68291: LD_INT 1
68293: PUSH
68294: LD_INT 4
68296: PUSH
68297: EMPTY
68298: LIST
68299: LIST
68300: PUSH
68301: LD_INT 1
68303: PPUSH
68304: LD_INT 2
68306: PPUSH
68307: CALL_OW 12
68311: ARRAY
68312: PPUSH
68313: CALL_OW 1
68317: ST_TO_ADDR
68318: GO 68687
// if alliance_deal_status = 2 and base_in_area_map [ base ] [ Alliance_base ] then
68320: LD_EXP 131
68324: PUSH
68325: LD_INT 2
68327: EQUAL
68328: PUSH
68329: LD_EXP 143
68333: PUSH
68334: LD_VAR 0 9
68338: ARRAY
68339: PUSH
68340: LD_INT 3
68342: ARRAY
68343: AND
68344: IFFALSE 68479
// begin if russians_dont_attack_player then
68346: LD_EXP 122
68350: IFFALSE 68354
// continue ;
68352: GO 67299
// if base_in_area_map [ base ] [ Ar_base ] or base_in_area_map [ base ] [ north_east_corner_area ] or base_in_area_map [ base ] [ player_base_area ] then
68354: LD_EXP 143
68358: PUSH
68359: LD_VAR 0 9
68363: ARRAY
68364: PUSH
68365: LD_INT 4
68367: ARRAY
68368: PUSH
68369: LD_EXP 143
68373: PUSH
68374: LD_VAR 0 9
68378: ARRAY
68379: PUSH
68380: LD_INT 24
68382: ARRAY
68383: OR
68384: PUSH
68385: LD_EXP 143
68389: PUSH
68390: LD_VAR 0 9
68394: ARRAY
68395: PUSH
68396: LD_INT 25
68398: ARRAY
68399: OR
68400: IFFALSE 68454
// ai_attack_strategy = Replace ( ai_attack_strategy , base , [ 1 , 2 , 3 , 3 ] [ Rand ( 1 , 4 ) ] ) else
68402: LD_ADDR_EXP 102
68406: PUSH
68407: LD_EXP 102
68411: PPUSH
68412: LD_VAR 0 9
68416: PPUSH
68417: LD_INT 1
68419: PUSH
68420: LD_INT 2
68422: PUSH
68423: LD_INT 3
68425: PUSH
68426: LD_INT 3
68428: PUSH
68429: EMPTY
68430: LIST
68431: LIST
68432: LIST
68433: LIST
68434: PUSH
68435: LD_INT 1
68437: PPUSH
68438: LD_INT 4
68440: PPUSH
68441: CALL_OW 12
68445: ARRAY
68446: PPUSH
68447: CALL_OW 1
68451: ST_TO_ADDR
68452: GO 68477
// ai_attack_strategy = Replace ( ai_attack_strategy , base , 3 ) ;
68454: LD_ADDR_EXP 102
68458: PUSH
68459: LD_EXP 102
68463: PPUSH
68464: LD_VAR 0 9
68468: PPUSH
68469: LD_INT 3
68471: PPUSH
68472: CALL_OW 1
68476: ST_TO_ADDR
// end else
68477: GO 68687
// if not 2 in ai_bases and IsLive ( Powell ) then
68479: LD_INT 2
68481: PUSH
68482: LD_EXP 39
68486: IN
68487: NOT
68488: PUSH
68489: LD_EXP 31
68493: PPUSH
68494: CALL_OW 300
68498: AND
68499: IFFALSE 68526
// ai_attack_strategy = Replace ( ai_attack_strategy , base , 3 ) else
68501: LD_ADDR_EXP 102
68505: PUSH
68506: LD_EXP 102
68510: PPUSH
68511: LD_VAR 0 9
68515: PPUSH
68516: LD_INT 3
68518: PPUSH
68519: CALL_OW 1
68523: ST_TO_ADDR
68524: GO 68687
// begin if russians_dont_attack_player then
68526: LD_EXP 122
68530: IFFALSE 68534
// continue ;
68532: GO 67299
// if base_in_area_map [ base ] [ Ar_base ] or base_in_area_map [ base ] [ north_east_corner_area ] or base_in_area_map [ base ] [ player_base_area ] then
68534: LD_EXP 143
68538: PUSH
68539: LD_VAR 0 9
68543: ARRAY
68544: PUSH
68545: LD_INT 4
68547: ARRAY
68548: PUSH
68549: LD_EXP 143
68553: PUSH
68554: LD_VAR 0 9
68558: ARRAY
68559: PUSH
68560: LD_INT 24
68562: ARRAY
68563: OR
68564: PUSH
68565: LD_EXP 143
68569: PUSH
68570: LD_VAR 0 9
68574: ARRAY
68575: PUSH
68576: LD_INT 25
68578: ARRAY
68579: OR
68580: IFFALSE 68615
// ai_attack_strategy = Replace ( ai_attack_strategy , base , Rand ( 1 , 2 ) ) else
68582: LD_ADDR_EXP 102
68586: PUSH
68587: LD_EXP 102
68591: PPUSH
68592: LD_VAR 0 9
68596: PPUSH
68597: LD_INT 1
68599: PPUSH
68600: LD_INT 2
68602: PPUSH
68603: CALL_OW 12
68607: PPUSH
68608: CALL_OW 1
68612: ST_TO_ADDR
68613: GO 68687
// if base_in_area_map [ base ] [ Alliance_base ] then
68615: LD_EXP 143
68619: PUSH
68620: LD_VAR 0 9
68624: ARRAY
68625: PUSH
68626: LD_INT 3
68628: ARRAY
68629: IFFALSE 68656
// ai_attack_strategy = Replace ( ai_attack_strategy , base , 3 ) else
68631: LD_ADDR_EXP 102
68635: PUSH
68636: LD_EXP 102
68640: PPUSH
68641: LD_VAR 0 9
68645: PPUSH
68646: LD_INT 3
68648: PPUSH
68649: CALL_OW 1
68653: ST_TO_ADDR
68654: GO 68687
// ai_attack_strategy = Replace ( ai_attack_strategy , base , Rand ( 1 , 3 ) ) ;
68656: LD_ADDR_EXP 102
68660: PUSH
68661: LD_EXP 102
68665: PPUSH
68666: LD_VAR 0 9
68670: PPUSH
68671: LD_INT 1
68673: PPUSH
68674: LD_INT 3
68676: PPUSH
68677: CALL_OW 12
68681: PPUSH
68682: CALL_OW 1
68686: ST_TO_ADDR
// end ; end ; 2 :
68687: GO 68857
68689: LD_INT 2
68691: DOUBLE
68692: EQUAL
68693: IFTRUE 68697
68695: GO 68700
68697: POP
// begin end ; 3 :
68698: GO 68857
68700: LD_INT 3
68702: DOUBLE
68703: EQUAL
68704: IFTRUE 68708
68706: GO 68742
68708: POP
// begin ai_attack_strategy = Replace ( ai_attack_strategy , base , Rand ( 1 , 2 ) ) ;
68709: LD_ADDR_EXP 102
68713: PUSH
68714: LD_EXP 102
68718: PPUSH
68719: LD_VAR 0 9
68723: PPUSH
68724: LD_INT 1
68726: PPUSH
68727: LD_INT 2
68729: PPUSH
68730: CALL_OW 12
68734: PPUSH
68735: CALL_OW 1
68739: ST_TO_ADDR
// end ; 4 :
68740: GO 68857
68742: LD_INT 4
68744: DOUBLE
68745: EQUAL
68746: IFTRUE 68750
68748: GO 68856
68750: POP
// begin if base_in_area_map [ base ] [ Alliance_base ] then
68751: LD_EXP 143
68755: PUSH
68756: LD_VAR 0 9
68760: ARRAY
68761: PUSH
68762: LD_INT 3
68764: ARRAY
68765: IFFALSE 68823
// begin if am_ar_attack_alli_together then
68767: LD_EXP 126
68771: IFFALSE 68798
// ai_attack_strategy = Replace ( ai_attack_strategy , base , 2 ) else
68773: LD_ADDR_EXP 102
68777: PUSH
68778: LD_EXP 102
68782: PPUSH
68783: LD_VAR 0 9
68787: PPUSH
68788: LD_INT 2
68790: PPUSH
68791: CALL_OW 1
68795: ST_TO_ADDR
68796: GO 68821
// ai_attack_strategy = Replace ( ai_attack_strategy , base , 1 ) ;
68798: LD_ADDR_EXP 102
68802: PUSH
68803: LD_EXP 102
68807: PPUSH
68808: LD_VAR 0 9
68812: PPUSH
68813: LD_INT 1
68815: PPUSH
68816: CALL_OW 1
68820: ST_TO_ADDR
// end else
68821: GO 68854
// ai_attack_strategy = Replace ( ai_attack_strategy , base , Rand ( 3 , 4 ) ) ;
68823: LD_ADDR_EXP 102
68827: PUSH
68828: LD_EXP 102
68832: PPUSH
68833: LD_VAR 0 9
68837: PPUSH
68838: LD_INT 3
68840: PPUSH
68841: LD_INT 4
68843: PPUSH
68844: CALL_OW 12
68848: PPUSH
68849: CALL_OW 1
68853: ST_TO_ADDR
// end ; end ;
68854: GO 68857
68856: POP
// base_list = [ base ] ;
68857: LD_ADDR_VAR 0 8
68861: PUSH
68862: LD_VAR 0 9
68866: PUSH
68867: EMPTY
68868: LIST
68869: ST_TO_ADDR
// if base = 4 and american_arabian_alliance then
68870: LD_VAR 0 9
68874: PUSH
68875: LD_INT 4
68877: EQUAL
68878: PUSH
68879: LD_EXP 123
68883: AND
68884: IFFALSE 68900
// base_list = base_list ^ 3 ;
68886: LD_ADDR_VAR 0 8
68890: PUSH
68891: LD_VAR 0 8
68895: PUSH
68896: LD_INT 3
68898: ADD
68899: ST_TO_ADDR
// for b in base_list do
68900: LD_ADDR_VAR 0 3
68904: PUSH
68905: LD_VAR 0 8
68909: PUSH
68910: FOR_IN
68911: IFFALSE 69493
// begin temp_list = [ ] ;
68913: LD_ADDR_VAR 0 4
68917: PUSH
68918: EMPTY
68919: ST_TO_ADDR
// temp_list_2 = ai_vehicles_defend [ b ] ;
68920: LD_ADDR_VAR 0 5
68924: PUSH
68925: LD_EXP 67
68929: PUSH
68930: LD_VAR 0 3
68934: ARRAY
68935: ST_TO_ADDR
// temp_list_3 = [ ] ;
68936: LD_ADDR_VAR 0 6
68940: PUSH
68941: EMPTY
68942: ST_TO_ADDR
// temp_list_4 = ai_mechanics_defend [ b ] diff ai_crane_driver [ b ] ;
68943: LD_ADDR_VAR 0 7
68947: PUSH
68948: LD_EXP 43
68952: PUSH
68953: LD_VAR 0 3
68957: ARRAY
68958: PUSH
68959: LD_EXP 92
68963: PUSH
68964: LD_VAR 0 3
68968: ARRAY
68969: DIFF
68970: ST_TO_ADDR
// for i = 1 to MaxNumWarVehiclesAttack ( b ) do
68971: LD_ADDR_VAR 0 2
68975: PUSH
68976: DOUBLE
68977: LD_INT 1
68979: DEC
68980: ST_TO_ADDR
68981: LD_VAR 0 3
68985: PPUSH
68986: CALL 60012 0 1
68990: PUSH
68991: FOR_TO
68992: IFFALSE 69154
// begin if temp_list_2 = 0 then
68994: LD_VAR 0 5
68998: PUSH
68999: LD_INT 0
69001: EQUAL
69002: IFFALSE 69006
// break ;
69004: GO 69154
// if GetControl ( temp_list_2 [ 1 ] ) = control_manual then
69006: LD_VAR 0 5
69010: PUSH
69011: LD_INT 1
69013: ARRAY
69014: PPUSH
69015: CALL_OW 263
69019: PUSH
69020: LD_INT 1
69022: EQUAL
69023: IFFALSE 69096
// begin if temp_list_4 = 0 then
69025: LD_VAR 0 7
69029: PUSH
69030: LD_INT 0
69032: EQUAL
69033: IFFALSE 69037
// continue ;
69035: GO 68991
// temp_list_3 = temp_list_3 ^ temp_list_4 [ 1 ] ;
69037: LD_ADDR_VAR 0 6
69041: PUSH
69042: LD_VAR 0 6
69046: PUSH
69047: LD_VAR 0 7
69051: PUSH
69052: LD_INT 1
69054: ARRAY
69055: ADD
69056: ST_TO_ADDR
// RemoveHumanFromVariables ( b , temp_list_4 [ 1 ] , false ) ;
69057: LD_VAR 0 3
69061: PPUSH
69062: LD_VAR 0 7
69066: PUSH
69067: LD_INT 1
69069: ARRAY
69070: PPUSH
69071: LD_INT 0
69073: PPUSH
69074: CALL 23625 0 3
// temp_list_4 = Delete ( temp_list_4 , 1 ) ;
69078: LD_ADDR_VAR 0 7
69082: PUSH
69083: LD_VAR 0 7
69087: PPUSH
69088: LD_INT 1
69090: PPUSH
69091: CALL_OW 3
69095: ST_TO_ADDR
// end ; temp_list = temp_list ^ temp_list_2 [ 1 ] ;
69096: LD_ADDR_VAR 0 4
69100: PUSH
69101: LD_VAR 0 4
69105: PUSH
69106: LD_VAR 0 5
69110: PUSH
69111: LD_INT 1
69113: ARRAY
69114: ADD
69115: ST_TO_ADDR
// RemoveVehicleFromVariables ( b , temp_list_2 [ 1 ] ) ;
69116: LD_VAR 0 3
69120: PPUSH
69121: LD_VAR 0 5
69125: PUSH
69126: LD_INT 1
69128: ARRAY
69129: PPUSH
69130: CALL 22584 0 2
// temp_list_2 = Delete ( temp_list_2 , 1 ) ;
69134: LD_ADDR_VAR 0 5
69138: PUSH
69139: LD_VAR 0 5
69143: PPUSH
69144: LD_INT 1
69146: PPUSH
69147: CALL_OW 3
69151: ST_TO_ADDR
// end ;
69152: GO 68991
69154: POP
69155: POP
// temp_list = temp_list ^ ai_taufield_vehicles [ b ] ^ ai_implosion_vehicles [ b ] ;
69156: LD_ADDR_VAR 0 4
69160: PUSH
69161: LD_VAR 0 4
69165: PUSH
69166: LD_EXP 100
69170: PUSH
69171: LD_VAR 0 3
69175: ARRAY
69176: ADD
69177: PUSH
69178: LD_EXP 101
69182: PUSH
69183: LD_VAR 0 3
69187: ARRAY
69188: ADD
69189: ST_TO_ADDR
// for i in ai_taufield_vehicles [ b ] ^ ai_implosion_vehicles [ b ] do
69190: LD_ADDR_VAR 0 2
69194: PUSH
69195: LD_EXP 100
69199: PUSH
69200: LD_VAR 0 3
69204: ARRAY
69205: PUSH
69206: LD_EXP 101
69210: PUSH
69211: LD_VAR 0 3
69215: ARRAY
69216: ADD
69217: PUSH
69218: FOR_IN
69219: IFFALSE 69237
// RemoveVehicleFromVariables ( b , i ) ;
69221: LD_VAR 0 3
69225: PPUSH
69226: LD_VAR 0 2
69230: PPUSH
69231: CALL 22584 0 2
69235: GO 69218
69237: POP
69238: POP
// if b = 1 and ai_attack_strategy [ b ] in [ 1 , 2 , 4 ] then
69239: LD_VAR 0 3
69243: PUSH
69244: LD_INT 1
69246: EQUAL
69247: PUSH
69248: LD_EXP 102
69252: PUSH
69253: LD_VAR 0 3
69257: ARRAY
69258: PUSH
69259: LD_INT 1
69261: PUSH
69262: LD_INT 2
69264: PUSH
69265: LD_INT 4
69267: PUSH
69268: EMPTY
69269: LIST
69270: LIST
69271: LIST
69272: IN
69273: AND
69274: IFFALSE 69335
// begin temp_list = temp_list ^ ai_behemoths [ b ] ;
69276: LD_ADDR_VAR 0 4
69280: PUSH
69281: LD_VAR 0 4
69285: PUSH
69286: LD_EXP 103
69290: PUSH
69291: LD_VAR 0 3
69295: ARRAY
69296: ADD
69297: ST_TO_ADDR
// for i in ai_behemoths [ b ] do
69298: LD_ADDR_VAR 0 2
69302: PUSH
69303: LD_EXP 103
69307: PUSH
69308: LD_VAR 0 3
69312: ARRAY
69313: PUSH
69314: FOR_IN
69315: IFFALSE 69333
// RemoveVehicleFromVariables ( b , i ) ;
69317: LD_VAR 0 3
69321: PPUSH
69322: LD_VAR 0 2
69326: PPUSH
69327: CALL 22584 0 2
69331: GO 69314
69333: POP
69334: POP
// end ; ai_vehicles_attack = Replace ( ai_vehicles_attack , b , temp_list ) ;
69335: LD_ADDR_EXP 68
69339: PUSH
69340: LD_EXP 68
69344: PPUSH
69345: LD_VAR 0 3
69349: PPUSH
69350: LD_VAR 0 4
69354: PPUSH
69355: CALL_OW 1
69359: ST_TO_ADDR
// ai_mechanics_attack = Replace ( ai_mechanics_attack , b , temp_list_3 ) ;
69360: LD_ADDR_EXP 44
69364: PUSH
69365: LD_EXP 44
69369: PPUSH
69370: LD_VAR 0 3
69374: PPUSH
69375: LD_VAR 0 6
69379: PPUSH
69380: CALL_OW 1
69384: ST_TO_ADDR
// for i in ai_vehicles_attack [ b ] do
69385: LD_ADDR_VAR 0 2
69389: PUSH
69390: LD_EXP 68
69394: PUSH
69395: LD_VAR 0 3
69399: ARRAY
69400: PUSH
69401: FOR_IN
69402: IFFALSE 69429
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , i , 1 ) ;
69404: LD_ADDR_EXP 93
69408: PUSH
69409: LD_EXP 93
69413: PPUSH
69414: LD_VAR 0 2
69418: PPUSH
69419: LD_INT 1
69421: PPUSH
69422: CALL_OW 1
69426: ST_TO_ADDR
69427: GO 69401
69429: POP
69430: POP
// attacked_times = Replace ( attacked_times , b , attacked_times [ b ] ^ tick ) ;
69431: LD_ADDR_EXP 132
69435: PUSH
69436: LD_EXP 132
69440: PPUSH
69441: LD_VAR 0 3
69445: PPUSH
69446: LD_EXP 132
69450: PUSH
69451: LD_VAR 0 3
69455: ARRAY
69456: PUSH
69457: LD_OWVAR 1
69461: ADD
69462: PPUSH
69463: CALL_OW 1
69467: ST_TO_ADDR
// ai_new_attack_commencing = Replace ( ai_new_attack_commencing , b , true ) ;
69468: LD_ADDR_EXP 106
69472: PUSH
69473: LD_EXP 106
69477: PPUSH
69478: LD_VAR 0 3
69482: PPUSH
69483: LD_INT 1
69485: PPUSH
69486: CALL_OW 1
69490: ST_TO_ADDR
// end ;
69491: GO 68910
69493: POP
69494: POP
// if base = 4 and american_arabian_alliance then
69495: LD_VAR 0 9
69499: PUSH
69500: LD_INT 4
69502: EQUAL
69503: PUSH
69504: LD_EXP 123
69508: AND
69509: IFFALSE 69519
// am_ar_cooperation_determined = false ;
69511: LD_ADDR_VAR 0 10
69515: PUSH
69516: LD_INT 0
69518: ST_TO_ADDR
// if base = 4 and american_arabian_alliance and not am_ar_attack_alli_together then
69519: LD_VAR 0 9
69523: PUSH
69524: LD_INT 4
69526: EQUAL
69527: PUSH
69528: LD_EXP 123
69532: AND
69533: PUSH
69534: LD_EXP 126
69538: NOT
69539: AND
69540: IFFALSE 69571
// ai_attack_strategy = Replace ( ai_attack_strategy , 3 , Rand ( 1 , 2 ) ) ;
69542: LD_ADDR_EXP 102
69546: PUSH
69547: LD_EXP 102
69551: PPUSH
69552: LD_INT 3
69554: PPUSH
69555: LD_INT 1
69557: PPUSH
69558: LD_INT 2
69560: PPUSH
69561: CALL_OW 12
69565: PPUSH
69566: CALL_OW 1
69570: ST_TO_ADDR
// if base = 4 and american_arabian_alliance and am_ar_attack_alli_together then
69571: LD_VAR 0 9
69575: PUSH
69576: LD_INT 4
69578: EQUAL
69579: PUSH
69580: LD_EXP 123
69584: AND
69585: PUSH
69586: LD_EXP 126
69590: AND
69591: IFFALSE 69639
// for i in ai_vehicles_attack [ base ] do
69593: LD_ADDR_VAR 0 2
69597: PUSH
69598: LD_EXP 68
69602: PUSH
69603: LD_VAR 0 9
69607: ARRAY
69608: PUSH
69609: FOR_IN
69610: IFFALSE 69637
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , i , 8 ) ;
69612: LD_ADDR_EXP 93
69616: PUSH
69617: LD_EXP 93
69621: PPUSH
69622: LD_VAR 0 2
69626: PPUSH
69627: LD_INT 8
69629: PPUSH
69630: CALL_OW 1
69634: ST_TO_ADDR
69635: GO 69609
69637: POP
69638: POP
// if base = 4 and american_arabian_alliance and am_ar_attack_alli_together then
69639: LD_VAR 0 9
69643: PUSH
69644: LD_INT 4
69646: EQUAL
69647: PUSH
69648: LD_EXP 123
69652: AND
69653: PUSH
69654: LD_EXP 126
69658: AND
69659: IFFALSE 69675
// num_attacks_ar_on_alli = num_attacks_ar_on_alli + 1 ;
69661: LD_ADDR_EXP 133
69665: PUSH
69666: LD_EXP 133
69670: PUSH
69671: LD_INT 1
69673: PLUS
69674: ST_TO_ADDR
// if base = 3 or ( base = 4 and american_arabian_alliance and not am_ar_attack_alli_together ) then
69675: LD_VAR 0 9
69679: PUSH
69680: LD_INT 3
69682: EQUAL
69683: PUSH
69684: LD_VAR 0 9
69688: PUSH
69689: LD_INT 4
69691: EQUAL
69692: PUSH
69693: LD_EXP 123
69697: AND
69698: PUSH
69699: LD_EXP 126
69703: NOT
69704: AND
69705: OR
69706: IFFALSE 69716
// ar_attack_commenced = true ;
69708: LD_ADDR_EXP 127
69712: PUSH
69713: LD_INT 1
69715: ST_TO_ADDR
// ResetVehicleAttackDelay ( base ) ;
69716: LD_VAR 0 9
69720: PPUSH
69721: CALL 69736 0 1
// end ;
69725: GO 67299
69727: POP
69728: POP
// until false ;
69729: LD_INT 0
69731: IFFALSE 67252
// end ;
69733: PPOPN 10
69735: END
// export function ResetVehicleAttackDelay ( base ) ; var time ; begin
69736: LD_INT 0
69738: PPUSH
69739: PPUSH
// time = [ 5 5$15 , 4 4$30 , 3 3$45 ] [ difficulty ] ;
69740: LD_ADDR_VAR 0 3
69744: PUSH
69745: LD_INT 11025
69747: PUSH
69748: LD_INT 9450
69750: PUSH
69751: LD_INT 7875
69753: PUSH
69754: EMPTY
69755: LIST
69756: LIST
69757: LIST
69758: PUSH
69759: LD_OWVAR 67
69763: ARRAY
69764: ST_TO_ADDR
// if base = 1 and Rand ( 1 , 3 ) < 3 and american_deal_status <> 2 and alliance_deal_status <> 2 then
69765: LD_VAR 0 1
69769: PUSH
69770: LD_INT 1
69772: EQUAL
69773: PUSH
69774: LD_INT 1
69776: PPUSH
69777: LD_INT 3
69779: PPUSH
69780: CALL_OW 12
69784: PUSH
69785: LD_INT 3
69787: LESS
69788: AND
69789: PUSH
69790: LD_EXP 128
69794: PUSH
69795: LD_INT 2
69797: NONEQUAL
69798: AND
69799: PUSH
69800: LD_EXP 131
69804: PUSH
69805: LD_INT 2
69807: NONEQUAL
69808: AND
69809: IFFALSE 69825
// time = time - 0 0$30 ;
69811: LD_ADDR_VAR 0 3
69815: PUSH
69816: LD_VAR 0 3
69820: PUSH
69821: LD_INT 1050
69823: MINUS
69824: ST_TO_ADDR
// if base = 4 and not 2 in ai_bases and 1 in ai_bases then
69825: LD_VAR 0 1
69829: PUSH
69830: LD_INT 4
69832: EQUAL
69833: PUSH
69834: LD_INT 2
69836: PUSH
69837: LD_EXP 39
69841: IN
69842: NOT
69843: AND
69844: PUSH
69845: LD_INT 1
69847: PUSH
69848: LD_EXP 39
69852: IN
69853: AND
69854: IFFALSE 69864
// time = 0 0$0 ;
69856: LD_ADDR_VAR 0 3
69860: PUSH
69861: LD_INT 0
69863: ST_TO_ADDR
// ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , base , Rand ( time , time + 0 0$30 ) ) ;
69864: LD_ADDR_EXP 83
69868: PUSH
69869: LD_EXP 83
69873: PPUSH
69874: LD_VAR 0 1
69878: PPUSH
69879: LD_VAR 0 3
69883: PPUSH
69884: LD_VAR 0 3
69888: PUSH
69889: LD_INT 1050
69891: PLUS
69892: PPUSH
69893: CALL_OW 12
69897: PPUSH
69898: CALL_OW 1
69902: ST_TO_ADDR
// end ;
69903: LD_VAR 0 2
69907: RET
// export function ResetHumanAttackDelay ( base ) ; begin
69908: LD_INT 0
69910: PPUSH
// end ;
69911: LD_VAR 0 2
69915: RET
// every 0 0$1 do var base , init_attack_hexes , attack_hexes , k , i , g , temp_list_3 , a ; var temp_unit , temp_list , temp_list_2 , dist , temp_value , inside_ok , attacking_vehicles , behe_in_pos , one_nonbehe_in_pos ; var vehicle_dist , all_are_ready , retreat_vehicles_list , retreat_mechanics_list , behemoth_dist , behemoth_attack_hexes ; var behemoths_in_position , nonbehemoths_in_position , behemoth_lineup_hexes_indexes ; var nonbehemoth_wait_for_behemoth_hexes , behemoth_wait_for_nonbehemoth_hexes , in_position_target ; var vehicle_dist_base ;
69916: GO 69918
69918: DISABLE
69919: LD_INT 0
69921: PPUSH
69922: PPUSH
69923: PPUSH
69924: PPUSH
69925: PPUSH
69926: PPUSH
69927: PPUSH
69928: PPUSH
69929: PPUSH
69930: PPUSH
69931: PPUSH
69932: PPUSH
69933: PPUSH
69934: PPUSH
69935: PPUSH
69936: PPUSH
69937: PPUSH
69938: PPUSH
69939: PPUSH
69940: PPUSH
69941: PPUSH
69942: PPUSH
69943: PPUSH
69944: PPUSH
69945: PPUSH
69946: PPUSH
69947: PPUSH
69948: PPUSH
69949: PPUSH
69950: PPUSH
// begin vehicle_dist_base = 7 ;
69951: LD_ADDR_VAR 0 30
69955: PUSH
69956: LD_INT 7
69958: ST_TO_ADDR
// behemoth_dist = 7 ;
69959: LD_ADDR_VAR 0 22
69963: PUSH
69964: LD_INT 7
69966: ST_TO_ADDR
// retreat_vehicles_list = [ [ ] , [ ] , [ ] , [ ] ] ;
69967: LD_ADDR_VAR 0 20
69971: PUSH
69972: EMPTY
69973: PUSH
69974: EMPTY
69975: PUSH
69976: EMPTY
69977: PUSH
69978: EMPTY
69979: PUSH
69980: EMPTY
69981: LIST
69982: LIST
69983: LIST
69984: LIST
69985: ST_TO_ADDR
// retreat_mechanics_list = [ [ ] , [ ] , [ ] , [ ] ] ;
69986: LD_ADDR_VAR 0 21
69990: PUSH
69991: EMPTY
69992: PUSH
69993: EMPTY
69994: PUSH
69995: EMPTY
69996: PUSH
69997: EMPTY
69998: PUSH
69999: EMPTY
70000: LIST
70001: LIST
70002: LIST
70003: LIST
70004: ST_TO_ADDR
// all_are_ready = [ false , false , false , false ] ;
70005: LD_ADDR_VAR 0 19
70009: PUSH
70010: LD_INT 0
70012: PUSH
70013: LD_INT 0
70015: PUSH
70016: LD_INT 0
70018: PUSH
70019: LD_INT 0
70021: PUSH
70022: EMPTY
70023: LIST
70024: LIST
70025: LIST
70026: LIST
70027: ST_TO_ADDR
// behemoths_in_position = [ 0 , 0 , 0 , 0 ] ;
70028: LD_ADDR_VAR 0 24
70032: PUSH
70033: LD_INT 0
70035: PUSH
70036: LD_INT 0
70038: PUSH
70039: LD_INT 0
70041: PUSH
70042: LD_INT 0
70044: PUSH
70045: EMPTY
70046: LIST
70047: LIST
70048: LIST
70049: LIST
70050: ST_TO_ADDR
// nonbehemoths_in_position = [ 0 , 0 , 0 , 0 ] ;
70051: LD_ADDR_VAR 0 25
70055: PUSH
70056: LD_INT 0
70058: PUSH
70059: LD_INT 0
70061: PUSH
70062: LD_INT 0
70064: PUSH
70065: LD_INT 0
70067: PUSH
70068: EMPTY
70069: LIST
70070: LIST
70071: LIST
70072: LIST
70073: ST_TO_ADDR
// in_position_target = [ 1 , 1 , 1 , 1 ] ;
70074: LD_ADDR_VAR 0 29
70078: PUSH
70079: LD_INT 1
70081: PUSH
70082: LD_INT 1
70084: PUSH
70085: LD_INT 1
70087: PUSH
70088: LD_INT 1
70090: PUSH
70091: EMPTY
70092: LIST
70093: LIST
70094: LIST
70095: LIST
70096: ST_TO_ADDR
// behemoth_lineup_hexes_indexes = [ [ ] , [ ] , [ ] , [ ] ] ;
70097: LD_ADDR_VAR 0 26
70101: PUSH
70102: EMPTY
70103: PUSH
70104: EMPTY
70105: PUSH
70106: EMPTY
70107: PUSH
70108: EMPTY
70109: PUSH
70110: EMPTY
70111: LIST
70112: LIST
70113: LIST
70114: LIST
70115: ST_TO_ADDR
// nonbehemoth_wait_for_behemoth_hexes = [ [ ] , [ ] , [ ] , [ ] ] ;
70116: LD_ADDR_VAR 0 27
70120: PUSH
70121: EMPTY
70122: PUSH
70123: EMPTY
70124: PUSH
70125: EMPTY
70126: PUSH
70127: EMPTY
70128: PUSH
70129: EMPTY
70130: LIST
70131: LIST
70132: LIST
70133: LIST
70134: ST_TO_ADDR
// behemoth_wait_for_nonbehemoth_hexes = [ [ ] , [ ] , [ ] , [ ] ] ;
70135: LD_ADDR_VAR 0 28
70139: PUSH
70140: EMPTY
70141: PUSH
70142: EMPTY
70143: PUSH
70144: EMPTY
70145: PUSH
70146: EMPTY
70147: PUSH
70148: EMPTY
70149: LIST
70150: LIST
70151: LIST
70152: LIST
70153: ST_TO_ADDR
// behemoth_attack_hexes = [ ] ;
70154: LD_ADDR_VAR 0 23
70158: PUSH
70159: EMPTY
70160: ST_TO_ADDR
// repeat if ai_bases = 0 then
70161: LD_EXP 39
70165: PUSH
70166: LD_INT 0
70168: EQUAL
70169: IFFALSE 70173
// exit ;
70171: GO 81819
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
70173: LD_INT 35
70175: PUSH
70176: LD_EXP 39
70180: PUSH
70181: LD_INT 0
70183: PLUS
70184: MOD
70185: PPUSH
70186: CALL_OW 67
// for base in ai_bases do
70190: LD_ADDR_VAR 0 1
70194: PUSH
70195: LD_EXP 39
70199: PUSH
70200: FOR_IN
70201: IFFALSE 81813
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
70203: LD_INT 35
70205: PUSH
70206: LD_EXP 39
70210: PUSH
70211: LD_INT 0
70213: PLUS
70214: DIV
70215: PPUSH
70216: CALL_OW 67
// if base = 2 then
70220: LD_VAR 0 1
70224: PUSH
70225: LD_INT 2
70227: EQUAL
70228: IFFALSE 70232
// continue ;
70230: GO 70200
// temp_list = ai_vehicles_attack [ base ] ^ ai_mechanics_attack [ base ] ;
70232: LD_ADDR_VAR 0 10
70236: PUSH
70237: LD_EXP 68
70241: PUSH
70242: LD_VAR 0 1
70246: ARRAY
70247: PUSH
70248: LD_EXP 44
70252: PUSH
70253: LD_VAR 0 1
70257: ARRAY
70258: ADD
70259: ST_TO_ADDR
// if base in [ 3 , 4 ] and american_arabian_alliance and am_ar_attack_alli_together then
70260: LD_VAR 0 1
70264: PUSH
70265: LD_INT 3
70267: PUSH
70268: LD_INT 4
70270: PUSH
70271: EMPTY
70272: LIST
70273: LIST
70274: IN
70275: PUSH
70276: LD_EXP 123
70280: AND
70281: PUSH
70282: LD_EXP 126
70286: AND
70287: IFFALSE 70351
// begin if base = 3 then
70289: LD_VAR 0 1
70293: PUSH
70294: LD_INT 3
70296: EQUAL
70297: IFFALSE 70309
// k = 4 else
70299: LD_ADDR_VAR 0 4
70303: PUSH
70304: LD_INT 4
70306: ST_TO_ADDR
70307: GO 70317
// k = 3 ;
70309: LD_ADDR_VAR 0 4
70313: PUSH
70314: LD_INT 3
70316: ST_TO_ADDR
// temp_list = temp_list ^ ai_vehicles_attack [ k ] ^ ai_mechanics_attack [ k ] ;
70317: LD_ADDR_VAR 0 10
70321: PUSH
70322: LD_VAR 0 10
70326: PUSH
70327: LD_EXP 68
70331: PUSH
70332: LD_VAR 0 4
70336: ARRAY
70337: ADD
70338: PUSH
70339: LD_EXP 44
70343: PUSH
70344: LD_VAR 0 4
70348: ARRAY
70349: ADD
70350: ST_TO_ADDR
// end ; if temp_list + 0 = 0 then
70351: LD_VAR 0 10
70355: PUSH
70356: LD_INT 0
70358: PLUS
70359: PUSH
70360: LD_INT 0
70362: EQUAL
70363: IFFALSE 70367
// continue ;
70365: GO 70200
// if ai_new_attack_commencing [ base ] then
70367: LD_EXP 106
70371: PUSH
70372: LD_VAR 0 1
70376: ARRAY
70377: IFFALSE 70577
// begin all_are_ready = Replace ( all_are_ready , base , false ) ;
70379: LD_ADDR_VAR 0 19
70383: PUSH
70384: LD_VAR 0 19
70388: PPUSH
70389: LD_VAR 0 1
70393: PPUSH
70394: LD_INT 0
70396: PPUSH
70397: CALL_OW 1
70401: ST_TO_ADDR
// behemoths_in_position = Replace ( behemoths_in_position , base , 0 ) ;
70402: LD_ADDR_VAR 0 24
70406: PUSH
70407: LD_VAR 0 24
70411: PPUSH
70412: LD_VAR 0 1
70416: PPUSH
70417: LD_INT 0
70419: PPUSH
70420: CALL_OW 1
70424: ST_TO_ADDR
// nonbehemoths_in_position = Replace ( nonbehemoths_in_position , base , 0 ) ;
70425: LD_ADDR_VAR 0 25
70429: PUSH
70430: LD_VAR 0 25
70434: PPUSH
70435: LD_VAR 0 1
70439: PPUSH
70440: LD_INT 0
70442: PPUSH
70443: CALL_OW 1
70447: ST_TO_ADDR
// in_position_target = Replace ( in_position_target , base , 1 ) ;
70448: LD_ADDR_VAR 0 29
70452: PUSH
70453: LD_VAR 0 29
70457: PPUSH
70458: LD_VAR 0 1
70462: PPUSH
70463: LD_INT 1
70465: PPUSH
70466: CALL_OW 1
70470: ST_TO_ADDR
// behemoth_lineup_hexes_indexes = Replace ( behemoth_lineup_hexes_indexes , base , [ ] ) ;
70471: LD_ADDR_VAR 0 26
70475: PUSH
70476: LD_VAR 0 26
70480: PPUSH
70481: LD_VAR 0 1
70485: PPUSH
70486: EMPTY
70487: PPUSH
70488: CALL_OW 1
70492: ST_TO_ADDR
// nonbehemoth_wait_for_behemoth_hexes = Replace ( nonbehemoth_wait_for_behemoth_hexes , base , [ ] ) ;
70493: LD_ADDR_VAR 0 27
70497: PUSH
70498: LD_VAR 0 27
70502: PPUSH
70503: LD_VAR 0 1
70507: PPUSH
70508: EMPTY
70509: PPUSH
70510: CALL_OW 1
70514: ST_TO_ADDR
// behemoth_wait_for_nonbehemoth_hexes = Replace ( behemoth_wait_for_nonbehemoth_hexes , base , [ ] ) ;
70515: LD_ADDR_VAR 0 28
70519: PUSH
70520: LD_VAR 0 28
70524: PPUSH
70525: LD_VAR 0 1
70529: PPUSH
70530: EMPTY
70531: PPUSH
70532: CALL_OW 1
70536: ST_TO_ADDR
// if base = 1 then
70537: LD_VAR 0 1
70541: PUSH
70542: LD_INT 1
70544: EQUAL
70545: IFFALSE 70554
// begin behemoth_attack_hexes = [ ] ;
70547: LD_ADDR_VAR 0 23
70551: PUSH
70552: EMPTY
70553: ST_TO_ADDR
// end ; ai_new_attack_commencing = Replace ( ai_new_attack_commencing , base , false ) ;
70554: LD_ADDR_EXP 106
70558: PUSH
70559: LD_EXP 106
70563: PPUSH
70564: LD_VAR 0 1
70568: PPUSH
70569: LD_INT 0
70571: PPUSH
70572: CALL_OW 1
70576: ST_TO_ADDR
// end ; if not ( base = 3 and american_arabian_alliance and am_ar_attack_alli_together ) then
70577: LD_VAR 0 1
70581: PUSH
70582: LD_INT 3
70584: EQUAL
70585: PUSH
70586: LD_EXP 123
70590: AND
70591: PUSH
70592: LD_EXP 126
70596: AND
70597: NOT
70598: IFFALSE 75691
// case base of 1 :
70600: LD_VAR 0 1
70604: PUSH
70605: LD_INT 1
70607: DOUBLE
70608: EQUAL
70609: IFTRUE 70613
70611: GO 72989
70613: POP
// begin init_attack_hexes = [ [ 44 , 17 ] , [ 72 , 29 ] , [ 72 , 29 ] ] ;
70614: LD_ADDR_VAR 0 2
70618: PUSH
70619: LD_INT 44
70621: PUSH
70622: LD_INT 17
70624: PUSH
70625: EMPTY
70626: LIST
70627: LIST
70628: PUSH
70629: LD_INT 72
70631: PUSH
70632: LD_INT 29
70634: PUSH
70635: EMPTY
70636: LIST
70637: LIST
70638: PUSH
70639: LD_INT 72
70641: PUSH
70642: LD_INT 29
70644: PUSH
70645: EMPTY
70646: LIST
70647: LIST
70648: PUSH
70649: EMPTY
70650: LIST
70651: LIST
70652: LIST
70653: ST_TO_ADDR
// attack_hexes = init_attack_hexes ;
70654: LD_ADDR_VAR 0 3
70658: PUSH
70659: LD_VAR 0 2
70663: ST_TO_ADDR
// if ai_attack_strategy [ base ] = 3 then
70664: LD_EXP 102
70668: PUSH
70669: LD_VAR 0 1
70673: ARRAY
70674: PUSH
70675: LD_INT 3
70677: EQUAL
70678: IFFALSE 71084
// begin attack_hexes = attack_hexes ^ [ [ 69 , 37 ] , [ 67 , 46 ] , [ 59 , 55 ] , [ 56 , 66 ] , [ 64 , 84 ] , [ 67 , 99 ] ] ;
70680: LD_ADDR_VAR 0 3
70684: PUSH
70685: LD_VAR 0 3
70689: PUSH
70690: LD_INT 69
70692: PUSH
70693: LD_INT 37
70695: PUSH
70696: EMPTY
70697: LIST
70698: LIST
70699: PUSH
70700: LD_INT 67
70702: PUSH
70703: LD_INT 46
70705: PUSH
70706: EMPTY
70707: LIST
70708: LIST
70709: PUSH
70710: LD_INT 59
70712: PUSH
70713: LD_INT 55
70715: PUSH
70716: EMPTY
70717: LIST
70718: LIST
70719: PUSH
70720: LD_INT 56
70722: PUSH
70723: LD_INT 66
70725: PUSH
70726: EMPTY
70727: LIST
70728: LIST
70729: PUSH
70730: LD_INT 64
70732: PUSH
70733: LD_INT 84
70735: PUSH
70736: EMPTY
70737: LIST
70738: LIST
70739: PUSH
70740: LD_INT 67
70742: PUSH
70743: LD_INT 99
70745: PUSH
70746: EMPTY
70747: LIST
70748: LIST
70749: PUSH
70750: EMPTY
70751: LIST
70752: LIST
70753: LIST
70754: LIST
70755: LIST
70756: LIST
70757: ADD
70758: ST_TO_ADDR
// if base_in_area_map [ base ] [ Alliance_base ] then
70759: LD_EXP 143
70763: PUSH
70764: LD_VAR 0 1
70768: ARRAY
70769: PUSH
70770: LD_INT 3
70772: ARRAY
70773: IFFALSE 70834
// attack_hexes = attack_hexes ^ [ [ 62 , 110 ] , [ 71 , 123 ] , [ 76 , 113 ] , [ 89 , 122 ] ] else
70775: LD_ADDR_VAR 0 3
70779: PUSH
70780: LD_VAR 0 3
70784: PUSH
70785: LD_INT 62
70787: PUSH
70788: LD_INT 110
70790: PUSH
70791: EMPTY
70792: LIST
70793: LIST
70794: PUSH
70795: LD_INT 71
70797: PUSH
70798: LD_INT 123
70800: PUSH
70801: EMPTY
70802: LIST
70803: LIST
70804: PUSH
70805: LD_INT 76
70807: PUSH
70808: LD_INT 113
70810: PUSH
70811: EMPTY
70812: LIST
70813: LIST
70814: PUSH
70815: LD_INT 89
70817: PUSH
70818: LD_INT 122
70820: PUSH
70821: EMPTY
70822: LIST
70823: LIST
70824: PUSH
70825: EMPTY
70826: LIST
70827: LIST
70828: LIST
70829: LIST
70830: ADD
70831: ST_TO_ADDR
70832: GO 70869
// attack_hexes = attack_hexes ^ [ [ 76 , 113 ] , [ 86 , 126 ] ] ;
70834: LD_ADDR_VAR 0 3
70838: PUSH
70839: LD_VAR 0 3
70843: PUSH
70844: LD_INT 76
70846: PUSH
70847: LD_INT 113
70849: PUSH
70850: EMPTY
70851: LIST
70852: LIST
70853: PUSH
70854: LD_INT 86
70856: PUSH
70857: LD_INT 126
70859: PUSH
70860: EMPTY
70861: LIST
70862: LIST
70863: PUSH
70864: EMPTY
70865: LIST
70866: LIST
70867: ADD
70868: ST_TO_ADDR
// attack_hexes = attack_hexes ^ [ [ 97 , 137 ] , [ 103 , 144 ] , [ 121 , 163 ] , [ 134 , 179 ] , [ 128 , 184 ] , [ 116 , 183 ] , [ 100 , 181 ] ] ;
70869: LD_ADDR_VAR 0 3
70873: PUSH
70874: LD_VAR 0 3
70878: PUSH
70879: LD_INT 97
70881: PUSH
70882: LD_INT 137
70884: PUSH
70885: EMPTY
70886: LIST
70887: LIST
70888: PUSH
70889: LD_INT 103
70891: PUSH
70892: LD_INT 144
70894: PUSH
70895: EMPTY
70896: LIST
70897: LIST
70898: PUSH
70899: LD_INT 121
70901: PUSH
70902: LD_INT 163
70904: PUSH
70905: EMPTY
70906: LIST
70907: LIST
70908: PUSH
70909: LD_INT 134
70911: PUSH
70912: LD_INT 179
70914: PUSH
70915: EMPTY
70916: LIST
70917: LIST
70918: PUSH
70919: LD_INT 128
70921: PUSH
70922: LD_INT 184
70924: PUSH
70925: EMPTY
70926: LIST
70927: LIST
70928: PUSH
70929: LD_INT 116
70931: PUSH
70932: LD_INT 183
70934: PUSH
70935: EMPTY
70936: LIST
70937: LIST
70938: PUSH
70939: LD_INT 100
70941: PUSH
70942: LD_INT 181
70944: PUSH
70945: EMPTY
70946: LIST
70947: LIST
70948: PUSH
70949: EMPTY
70950: LIST
70951: LIST
70952: LIST
70953: LIST
70954: LIST
70955: LIST
70956: LIST
70957: ADD
70958: ST_TO_ADDR
// attack_hexes = attack_hexes ^ [ [ 95 , 159 ] , [ 95 , 147 ] , [ 86 , 130 ] , [ 76 , 113 ] , [ 67 , 99 ] , [ 64 , 84 ] , [ 56 , 66 ] , [ 59 , 55 ] , [ 67 , 46 ] , [ 69 , 37 ] ] ;
70959: LD_ADDR_VAR 0 3
70963: PUSH
70964: LD_VAR 0 3
70968: PUSH
70969: LD_INT 95
70971: PUSH
70972: LD_INT 159
70974: PUSH
70975: EMPTY
70976: LIST
70977: LIST
70978: PUSH
70979: LD_INT 95
70981: PUSH
70982: LD_INT 147
70984: PUSH
70985: EMPTY
70986: LIST
70987: LIST
70988: PUSH
70989: LD_INT 86
70991: PUSH
70992: LD_INT 130
70994: PUSH
70995: EMPTY
70996: LIST
70997: LIST
70998: PUSH
70999: LD_INT 76
71001: PUSH
71002: LD_INT 113
71004: PUSH
71005: EMPTY
71006: LIST
71007: LIST
71008: PUSH
71009: LD_INT 67
71011: PUSH
71012: LD_INT 99
71014: PUSH
71015: EMPTY
71016: LIST
71017: LIST
71018: PUSH
71019: LD_INT 64
71021: PUSH
71022: LD_INT 84
71024: PUSH
71025: EMPTY
71026: LIST
71027: LIST
71028: PUSH
71029: LD_INT 56
71031: PUSH
71032: LD_INT 66
71034: PUSH
71035: EMPTY
71036: LIST
71037: LIST
71038: PUSH
71039: LD_INT 59
71041: PUSH
71042: LD_INT 55
71044: PUSH
71045: EMPTY
71046: LIST
71047: LIST
71048: PUSH
71049: LD_INT 67
71051: PUSH
71052: LD_INT 46
71054: PUSH
71055: EMPTY
71056: LIST
71057: LIST
71058: PUSH
71059: LD_INT 69
71061: PUSH
71062: LD_INT 37
71064: PUSH
71065: EMPTY
71066: LIST
71067: LIST
71068: PUSH
71069: EMPTY
71070: LIST
71071: LIST
71072: LIST
71073: LIST
71074: LIST
71075: LIST
71076: LIST
71077: LIST
71078: LIST
71079: LIST
71080: ADD
71081: ST_TO_ADDR
// end else
71082: GO 72055
// begin if ai_attack_strategy [ base ] = 4 then
71084: LD_EXP 102
71088: PUSH
71089: LD_VAR 0 1
71093: ARRAY
71094: PUSH
71095: LD_INT 4
71097: EQUAL
71098: IFFALSE 71225
// attack_hexes = attack_hexes ^ [ [ 69 , 37 ] , [ 67 , 46 ] , [ 61 , 52 ] , [ 59 , 60 ] , [ 52 , 68 ] , [ 37 , 57 ] , [ 46 , 55 ] , [ 54 , 54 ] , [ 61 , 52 ] , [ 67 , 46 ] ] else
71100: LD_ADDR_VAR 0 3
71104: PUSH
71105: LD_VAR 0 3
71109: PUSH
71110: LD_INT 69
71112: PUSH
71113: LD_INT 37
71115: PUSH
71116: EMPTY
71117: LIST
71118: LIST
71119: PUSH
71120: LD_INT 67
71122: PUSH
71123: LD_INT 46
71125: PUSH
71126: EMPTY
71127: LIST
71128: LIST
71129: PUSH
71130: LD_INT 61
71132: PUSH
71133: LD_INT 52
71135: PUSH
71136: EMPTY
71137: LIST
71138: LIST
71139: PUSH
71140: LD_INT 59
71142: PUSH
71143: LD_INT 60
71145: PUSH
71146: EMPTY
71147: LIST
71148: LIST
71149: PUSH
71150: LD_INT 52
71152: PUSH
71153: LD_INT 68
71155: PUSH
71156: EMPTY
71157: LIST
71158: LIST
71159: PUSH
71160: LD_INT 37
71162: PUSH
71163: LD_INT 57
71165: PUSH
71166: EMPTY
71167: LIST
71168: LIST
71169: PUSH
71170: LD_INT 46
71172: PUSH
71173: LD_INT 55
71175: PUSH
71176: EMPTY
71177: LIST
71178: LIST
71179: PUSH
71180: LD_INT 54
71182: PUSH
71183: LD_INT 54
71185: PUSH
71186: EMPTY
71187: LIST
71188: LIST
71189: PUSH
71190: LD_INT 61
71192: PUSH
71193: LD_INT 52
71195: PUSH
71196: EMPTY
71197: LIST
71198: LIST
71199: PUSH
71200: LD_INT 67
71202: PUSH
71203: LD_INT 46
71205: PUSH
71206: EMPTY
71207: LIST
71208: LIST
71209: PUSH
71210: EMPTY
71211: LIST
71212: LIST
71213: LIST
71214: LIST
71215: LIST
71216: LIST
71217: LIST
71218: LIST
71219: LIST
71220: LIST
71221: ADD
71222: ST_TO_ADDR
71223: GO 71282
// if ai_attack_strategy [ base ] = 2 and not base_in_area_map [ base ] [ north_east_corner_area ] then
71225: LD_EXP 102
71229: PUSH
71230: LD_VAR 0 1
71234: ARRAY
71235: PUSH
71236: LD_INT 2
71238: EQUAL
71239: PUSH
71240: LD_EXP 143
71244: PUSH
71245: LD_VAR 0 1
71249: ARRAY
71250: PUSH
71251: LD_INT 24
71253: ARRAY
71254: NOT
71255: AND
71256: IFFALSE 71282
// attack_hexes = attack_hexes ^ [ [ 69 , 37 ] ] ;
71258: LD_ADDR_VAR 0 3
71262: PUSH
71263: LD_VAR 0 3
71267: PUSH
71268: LD_INT 69
71270: PUSH
71271: LD_INT 37
71273: PUSH
71274: EMPTY
71275: LIST
71276: LIST
71277: PUSH
71278: EMPTY
71279: LIST
71280: ADD
71281: ST_TO_ADDR
// if base_in_area_map [ base ] [ north_east_corner_area ] then
71282: LD_EXP 143
71286: PUSH
71287: LD_VAR 0 1
71291: ARRAY
71292: PUSH
71293: LD_INT 24
71295: ARRAY
71296: IFFALSE 71452
// begin if ai_attack_strategy [ base ] = 4 then
71298: LD_EXP 102
71302: PUSH
71303: LD_VAR 0 1
71307: ARRAY
71308: PUSH
71309: LD_INT 4
71311: EQUAL
71312: IFFALSE 71349
// attack_hexes = attack_hexes ^ [ [ 69 , 37 ] , [ 72 , 29 ] ] ;
71314: LD_ADDR_VAR 0 3
71318: PUSH
71319: LD_VAR 0 3
71323: PUSH
71324: LD_INT 69
71326: PUSH
71327: LD_INT 37
71329: PUSH
71330: EMPTY
71331: LIST
71332: LIST
71333: PUSH
71334: LD_INT 72
71336: PUSH
71337: LD_INT 29
71339: PUSH
71340: EMPTY
71341: LIST
71342: LIST
71343: PUSH
71344: EMPTY
71345: LIST
71346: LIST
71347: ADD
71348: ST_TO_ADDR
// attack_hexes = attack_hexes ^ [ [ 76 , 21 ] , [ 84 , 18 ] , [ 92 , 15 ] , [ 103 , 14 ] , [ 115 , 22 ] , [ 122 , 35 ] , [ 111 , 34 ] , [ 105 , 40 ] ] ;
71349: LD_ADDR_VAR 0 3
71353: PUSH
71354: LD_VAR 0 3
71358: PUSH
71359: LD_INT 76
71361: PUSH
71362: LD_INT 21
71364: PUSH
71365: EMPTY
71366: LIST
71367: LIST
71368: PUSH
71369: LD_INT 84
71371: PUSH
71372: LD_INT 18
71374: PUSH
71375: EMPTY
71376: LIST
71377: LIST
71378: PUSH
71379: LD_INT 92
71381: PUSH
71382: LD_INT 15
71384: PUSH
71385: EMPTY
71386: LIST
71387: LIST
71388: PUSH
71389: LD_INT 103
71391: PUSH
71392: LD_INT 14
71394: PUSH
71395: EMPTY
71396: LIST
71397: LIST
71398: PUSH
71399: LD_INT 115
71401: PUSH
71402: LD_INT 22
71404: PUSH
71405: EMPTY
71406: LIST
71407: LIST
71408: PUSH
71409: LD_INT 122
71411: PUSH
71412: LD_INT 35
71414: PUSH
71415: EMPTY
71416: LIST
71417: LIST
71418: PUSH
71419: LD_INT 111
71421: PUSH
71422: LD_INT 34
71424: PUSH
71425: EMPTY
71426: LIST
71427: LIST
71428: PUSH
71429: LD_INT 105
71431: PUSH
71432: LD_INT 40
71434: PUSH
71435: EMPTY
71436: LIST
71437: LIST
71438: PUSH
71439: EMPTY
71440: LIST
71441: LIST
71442: LIST
71443: LIST
71444: LIST
71445: LIST
71446: LIST
71447: LIST
71448: ADD
71449: ST_TO_ADDR
// end else
71450: GO 71658
// if ai_attack_strategy [ base ] in [ 2 , 4 ] then
71452: LD_EXP 102
71456: PUSH
71457: LD_VAR 0 1
71461: ARRAY
71462: PUSH
71463: LD_INT 2
71465: PUSH
71466: LD_INT 4
71468: PUSH
71469: EMPTY
71470: LIST
71471: LIST
71472: IN
71473: IFFALSE 71607
// begin attack_hexes = attack_hexes ^ [ [ 76 , 49 ] , [ 87 , 62 ] , [ 105 , 75 ] ] ;
71475: LD_ADDR_VAR 0 3
71479: PUSH
71480: LD_VAR 0 3
71484: PUSH
71485: LD_INT 76
71487: PUSH
71488: LD_INT 49
71490: PUSH
71491: EMPTY
71492: LIST
71493: LIST
71494: PUSH
71495: LD_INT 87
71497: PUSH
71498: LD_INT 62
71500: PUSH
71501: EMPTY
71502: LIST
71503: LIST
71504: PUSH
71505: LD_INT 105
71507: PUSH
71508: LD_INT 75
71510: PUSH
71511: EMPTY
71512: LIST
71513: LIST
71514: PUSH
71515: EMPTY
71516: LIST
71517: LIST
71518: LIST
71519: ADD
71520: ST_TO_ADDR
// if base_in_area_map [ base ] [ player_base_area ] then
71521: LD_EXP 143
71525: PUSH
71526: LD_VAR 0 1
71530: ARRAY
71531: PUSH
71532: LD_INT 25
71534: ARRAY
71535: IFFALSE 71605
// attack_hexes = attack_hexes ^ [ [ 118 , 77 ] , [ 131 , 77 ] , [ 142 , 72 ] , [ 125 , 62 ] , [ 111 , 61 ] ] ;
71537: LD_ADDR_VAR 0 3
71541: PUSH
71542: LD_VAR 0 3
71546: PUSH
71547: LD_INT 118
71549: PUSH
71550: LD_INT 77
71552: PUSH
71553: EMPTY
71554: LIST
71555: LIST
71556: PUSH
71557: LD_INT 131
71559: PUSH
71560: LD_INT 77
71562: PUSH
71563: EMPTY
71564: LIST
71565: LIST
71566: PUSH
71567: LD_INT 142
71569: PUSH
71570: LD_INT 72
71572: PUSH
71573: EMPTY
71574: LIST
71575: LIST
71576: PUSH
71577: LD_INT 125
71579: PUSH
71580: LD_INT 62
71582: PUSH
71583: EMPTY
71584: LIST
71585: LIST
71586: PUSH
71587: LD_INT 111
71589: PUSH
71590: LD_INT 61
71592: PUSH
71593: EMPTY
71594: LIST
71595: LIST
71596: PUSH
71597: EMPTY
71598: LIST
71599: LIST
71600: LIST
71601: LIST
71602: LIST
71603: ADD
71604: ST_TO_ADDR
// end else
71605: GO 71658
// if ai_attack_strategy [ base ] = 1 then
71607: LD_EXP 102
71611: PUSH
71612: LD_VAR 0 1
71616: ARRAY
71617: PUSH
71618: LD_INT 1
71620: EQUAL
71621: IFFALSE 71658
// attack_hexes = attack_hexes ^ [ [ 82 , 30 ] , [ 91 , 39 ] ] ;
71623: LD_ADDR_VAR 0 3
71627: PUSH
71628: LD_VAR 0 3
71632: PUSH
71633: LD_INT 82
71635: PUSH
71636: LD_INT 30
71638: PUSH
71639: EMPTY
71640: LIST
71641: LIST
71642: PUSH
71643: LD_INT 91
71645: PUSH
71646: LD_INT 39
71648: PUSH
71649: EMPTY
71650: LIST
71651: LIST
71652: PUSH
71653: EMPTY
71654: LIST
71655: LIST
71656: ADD
71657: ST_TO_ADDR
// if ai_attack_strategy [ base ] = 1 or base_in_area_map [ base ] [ north_east_corner_area ] then
71658: LD_EXP 102
71662: PUSH
71663: LD_VAR 0 1
71667: ARRAY
71668: PUSH
71669: LD_INT 1
71671: EQUAL
71672: PUSH
71673: LD_EXP 143
71677: PUSH
71678: LD_VAR 0 1
71682: ARRAY
71683: PUSH
71684: LD_INT 24
71686: ARRAY
71687: OR
71688: IFFALSE 71809
// begin attack_hexes = attack_hexes ^ [ [ 100 , 48 ] , [ 111 , 61 ] ] ;
71690: LD_ADDR_VAR 0 3
71694: PUSH
71695: LD_VAR 0 3
71699: PUSH
71700: LD_INT 100
71702: PUSH
71703: LD_INT 48
71705: PUSH
71706: EMPTY
71707: LIST
71708: LIST
71709: PUSH
71710: LD_INT 111
71712: PUSH
71713: LD_INT 61
71715: PUSH
71716: EMPTY
71717: LIST
71718: LIST
71719: PUSH
71720: EMPTY
71721: LIST
71722: LIST
71723: ADD
71724: ST_TO_ADDR
// if base_in_area_map [ base ] [ player_base_area ] then
71725: LD_EXP 143
71729: PUSH
71730: LD_VAR 0 1
71734: ARRAY
71735: PUSH
71736: LD_INT 25
71738: ARRAY
71739: IFFALSE 71809
// attack_hexes = attack_hexes ^ [ [ 125 , 62 ] , [ 142 , 72 ] , [ 131 , 77 ] , [ 118 , 77 ] , [ 105 , 75 ] ] ;
71741: LD_ADDR_VAR 0 3
71745: PUSH
71746: LD_VAR 0 3
71750: PUSH
71751: LD_INT 125
71753: PUSH
71754: LD_INT 62
71756: PUSH
71757: EMPTY
71758: LIST
71759: LIST
71760: PUSH
71761: LD_INT 142
71763: PUSH
71764: LD_INT 72
71766: PUSH
71767: EMPTY
71768: LIST
71769: LIST
71770: PUSH
71771: LD_INT 131
71773: PUSH
71774: LD_INT 77
71776: PUSH
71777: EMPTY
71778: LIST
71779: LIST
71780: PUSH
71781: LD_INT 118
71783: PUSH
71784: LD_INT 77
71786: PUSH
71787: EMPTY
71788: LIST
71789: LIST
71790: PUSH
71791: LD_INT 105
71793: PUSH
71794: LD_INT 75
71796: PUSH
71797: EMPTY
71798: LIST
71799: LIST
71800: PUSH
71801: EMPTY
71802: LIST
71803: LIST
71804: LIST
71805: LIST
71806: LIST
71807: ADD
71808: ST_TO_ADDR
// end ; attack_hexes = attack_hexes ^ [ [ 117 , 77 ] , [ 130 , 93 ] , [ 139 , 104 ] , [ 148 , 113 ] , [ 158 , 124 ] , [ 168 , 141 ] , [ 177 , 156 ] , [ 184 , 174 ] , [ 169 , 160 ] , [ 157 , 150 ] , [ 159 , 141 ] ] ;
71809: LD_ADDR_VAR 0 3
71813: PUSH
71814: LD_VAR 0 3
71818: PUSH
71819: LD_INT 117
71821: PUSH
71822: LD_INT 77
71824: PUSH
71825: EMPTY
71826: LIST
71827: LIST
71828: PUSH
71829: LD_INT 130
71831: PUSH
71832: LD_INT 93
71834: PUSH
71835: EMPTY
71836: LIST
71837: LIST
71838: PUSH
71839: LD_INT 139
71841: PUSH
71842: LD_INT 104
71844: PUSH
71845: EMPTY
71846: LIST
71847: LIST
71848: PUSH
71849: LD_INT 148
71851: PUSH
71852: LD_INT 113
71854: PUSH
71855: EMPTY
71856: LIST
71857: LIST
71858: PUSH
71859: LD_INT 158
71861: PUSH
71862: LD_INT 124
71864: PUSH
71865: EMPTY
71866: LIST
71867: LIST
71868: PUSH
71869: LD_INT 168
71871: PUSH
71872: LD_INT 141
71874: PUSH
71875: EMPTY
71876: LIST
71877: LIST
71878: PUSH
71879: LD_INT 177
71881: PUSH
71882: LD_INT 156
71884: PUSH
71885: EMPTY
71886: LIST
71887: LIST
71888: PUSH
71889: LD_INT 184
71891: PUSH
71892: LD_INT 174
71894: PUSH
71895: EMPTY
71896: LIST
71897: LIST
71898: PUSH
71899: LD_INT 169
71901: PUSH
71902: LD_INT 160
71904: PUSH
71905: EMPTY
71906: LIST
71907: LIST
71908: PUSH
71909: LD_INT 157
71911: PUSH
71912: LD_INT 150
71914: PUSH
71915: EMPTY
71916: LIST
71917: LIST
71918: PUSH
71919: LD_INT 159
71921: PUSH
71922: LD_INT 141
71924: PUSH
71925: EMPTY
71926: LIST
71927: LIST
71928: PUSH
71929: EMPTY
71930: LIST
71931: LIST
71932: LIST
71933: LIST
71934: LIST
71935: LIST
71936: LIST
71937: LIST
71938: LIST
71939: LIST
71940: LIST
71941: ADD
71942: ST_TO_ADDR
// attack_hexes = attack_hexes ^ [ [ 156 , 129 ] , [ 142 , 120 ] , [ 131 , 113 ] , [ 118 , 102 ] , [ 104 , 90 ] , [ 90 , 75 ] , [ 87 , 62 ] , [ 76 , 49 ] , [ 73 , 35 ] ] ;
71943: LD_ADDR_VAR 0 3
71947: PUSH
71948: LD_VAR 0 3
71952: PUSH
71953: LD_INT 156
71955: PUSH
71956: LD_INT 129
71958: PUSH
71959: EMPTY
71960: LIST
71961: LIST
71962: PUSH
71963: LD_INT 142
71965: PUSH
71966: LD_INT 120
71968: PUSH
71969: EMPTY
71970: LIST
71971: LIST
71972: PUSH
71973: LD_INT 131
71975: PUSH
71976: LD_INT 113
71978: PUSH
71979: EMPTY
71980: LIST
71981: LIST
71982: PUSH
71983: LD_INT 118
71985: PUSH
71986: LD_INT 102
71988: PUSH
71989: EMPTY
71990: LIST
71991: LIST
71992: PUSH
71993: LD_INT 104
71995: PUSH
71996: LD_INT 90
71998: PUSH
71999: EMPTY
72000: LIST
72001: LIST
72002: PUSH
72003: LD_INT 90
72005: PUSH
72006: LD_INT 75
72008: PUSH
72009: EMPTY
72010: LIST
72011: LIST
72012: PUSH
72013: LD_INT 87
72015: PUSH
72016: LD_INT 62
72018: PUSH
72019: EMPTY
72020: LIST
72021: LIST
72022: PUSH
72023: LD_INT 76
72025: PUSH
72026: LD_INT 49
72028: PUSH
72029: EMPTY
72030: LIST
72031: LIST
72032: PUSH
72033: LD_INT 73
72035: PUSH
72036: LD_INT 35
72038: PUSH
72039: EMPTY
72040: LIST
72041: LIST
72042: PUSH
72043: EMPTY
72044: LIST
72045: LIST
72046: LIST
72047: LIST
72048: LIST
72049: LIST
72050: LIST
72051: LIST
72052: LIST
72053: ADD
72054: ST_TO_ADDR
// end ; if behemoth_attack_hexes = 0 then
72055: LD_VAR 0 23
72059: PUSH
72060: LD_INT 0
72062: EQUAL
72063: IFFALSE 72987
// begin temp_list = UnitFilter ( ai_vehicles_attack [ base ] , [ f_weapon , 59 ] ) ;
72065: LD_ADDR_VAR 0 10
72069: PUSH
72070: LD_EXP 68
72074: PUSH
72075: LD_VAR 0 1
72079: ARRAY
72080: PPUSH
72081: LD_INT 34
72083: PUSH
72084: LD_INT 59
72086: PUSH
72087: EMPTY
72088: LIST
72089: LIST
72090: PPUSH
72091: CALL_OW 72
72095: ST_TO_ADDR
// if temp_list > 0 then
72096: LD_VAR 0 10
72100: PUSH
72101: LD_INT 0
72103: GREATER
72104: IFFALSE 72956
// begin temp_list_2 = [ [ [ 84 , 26 ] , [ 98 , 40 ] , [ 111 , 61 ] , [ 127 , 77 ] , [ 123 , 103 ] , [ 166 , 137 ] , [ 189 , 166 ] , [ 159 , 152 ] , [ 166 , 137 ] , [ 147 , 122 ] , [ 127 , 108 ] , [ 105 , 92 ] , [ 87 , 69 ] , [ 75 , 42 ] ] , [ [ 80 , 33 ] , [ 93 , 46 ] , [ 111 , 61 ] , [ 127 , 77 ] , [ 133 , 103 ] , [ 166 , 137 ] , [ 189 , 166 ] , [ 159 , 152 ] , [ 166 , 137 ] , [ 147 , 122 ] , [ 127 , 108 ] , [ 105 , 92 ] , [ 87 , 69 ] , [ 75 , 42 ] ] , [ [ 75 , 40 ] , [ 88 , 53 ] , [ 111 , 61 ] , [ 127 , 77 ] , [ 143 , 103 ] , [ 166 , 137 ] , [ 189 , 166 ] , [ 159 , 152 ] , [ 166 , 137 ] , [ 147 , 122 ] , [ 127 , 108 ] , [ 105 , 92 ] , [ 87 , 69 ] , [ 75 , 42 ] ] ] ;
72106: LD_ADDR_VAR 0 11
72110: PUSH
72111: LD_INT 84
72113: PUSH
72114: LD_INT 26
72116: PUSH
72117: EMPTY
72118: LIST
72119: LIST
72120: PUSH
72121: LD_INT 98
72123: PUSH
72124: LD_INT 40
72126: PUSH
72127: EMPTY
72128: LIST
72129: LIST
72130: PUSH
72131: LD_INT 111
72133: PUSH
72134: LD_INT 61
72136: PUSH
72137: EMPTY
72138: LIST
72139: LIST
72140: PUSH
72141: LD_INT 127
72143: PUSH
72144: LD_INT 77
72146: PUSH
72147: EMPTY
72148: LIST
72149: LIST
72150: PUSH
72151: LD_INT 123
72153: PUSH
72154: LD_INT 103
72156: PUSH
72157: EMPTY
72158: LIST
72159: LIST
72160: PUSH
72161: LD_INT 166
72163: PUSH
72164: LD_INT 137
72166: PUSH
72167: EMPTY
72168: LIST
72169: LIST
72170: PUSH
72171: LD_INT 189
72173: PUSH
72174: LD_INT 166
72176: PUSH
72177: EMPTY
72178: LIST
72179: LIST
72180: PUSH
72181: LD_INT 159
72183: PUSH
72184: LD_INT 152
72186: PUSH
72187: EMPTY
72188: LIST
72189: LIST
72190: PUSH
72191: LD_INT 166
72193: PUSH
72194: LD_INT 137
72196: PUSH
72197: EMPTY
72198: LIST
72199: LIST
72200: PUSH
72201: LD_INT 147
72203: PUSH
72204: LD_INT 122
72206: PUSH
72207: EMPTY
72208: LIST
72209: LIST
72210: PUSH
72211: LD_INT 127
72213: PUSH
72214: LD_INT 108
72216: PUSH
72217: EMPTY
72218: LIST
72219: LIST
72220: PUSH
72221: LD_INT 105
72223: PUSH
72224: LD_INT 92
72226: PUSH
72227: EMPTY
72228: LIST
72229: LIST
72230: PUSH
72231: LD_INT 87
72233: PUSH
72234: LD_INT 69
72236: PUSH
72237: EMPTY
72238: LIST
72239: LIST
72240: PUSH
72241: LD_INT 75
72243: PUSH
72244: LD_INT 42
72246: PUSH
72247: EMPTY
72248: LIST
72249: LIST
72250: PUSH
72251: EMPTY
72252: LIST
72253: LIST
72254: LIST
72255: LIST
72256: LIST
72257: LIST
72258: LIST
72259: LIST
72260: LIST
72261: LIST
72262: LIST
72263: LIST
72264: LIST
72265: LIST
72266: PUSH
72267: LD_INT 80
72269: PUSH
72270: LD_INT 33
72272: PUSH
72273: EMPTY
72274: LIST
72275: LIST
72276: PUSH
72277: LD_INT 93
72279: PUSH
72280: LD_INT 46
72282: PUSH
72283: EMPTY
72284: LIST
72285: LIST
72286: PUSH
72287: LD_INT 111
72289: PUSH
72290: LD_INT 61
72292: PUSH
72293: EMPTY
72294: LIST
72295: LIST
72296: PUSH
72297: LD_INT 127
72299: PUSH
72300: LD_INT 77
72302: PUSH
72303: EMPTY
72304: LIST
72305: LIST
72306: PUSH
72307: LD_INT 133
72309: PUSH
72310: LD_INT 103
72312: PUSH
72313: EMPTY
72314: LIST
72315: LIST
72316: PUSH
72317: LD_INT 166
72319: PUSH
72320: LD_INT 137
72322: PUSH
72323: EMPTY
72324: LIST
72325: LIST
72326: PUSH
72327: LD_INT 189
72329: PUSH
72330: LD_INT 166
72332: PUSH
72333: EMPTY
72334: LIST
72335: LIST
72336: PUSH
72337: LD_INT 159
72339: PUSH
72340: LD_INT 152
72342: PUSH
72343: EMPTY
72344: LIST
72345: LIST
72346: PUSH
72347: LD_INT 166
72349: PUSH
72350: LD_INT 137
72352: PUSH
72353: EMPTY
72354: LIST
72355: LIST
72356: PUSH
72357: LD_INT 147
72359: PUSH
72360: LD_INT 122
72362: PUSH
72363: EMPTY
72364: LIST
72365: LIST
72366: PUSH
72367: LD_INT 127
72369: PUSH
72370: LD_INT 108
72372: PUSH
72373: EMPTY
72374: LIST
72375: LIST
72376: PUSH
72377: LD_INT 105
72379: PUSH
72380: LD_INT 92
72382: PUSH
72383: EMPTY
72384: LIST
72385: LIST
72386: PUSH
72387: LD_INT 87
72389: PUSH
72390: LD_INT 69
72392: PUSH
72393: EMPTY
72394: LIST
72395: LIST
72396: PUSH
72397: LD_INT 75
72399: PUSH
72400: LD_INT 42
72402: PUSH
72403: EMPTY
72404: LIST
72405: LIST
72406: PUSH
72407: EMPTY
72408: LIST
72409: LIST
72410: LIST
72411: LIST
72412: LIST
72413: LIST
72414: LIST
72415: LIST
72416: LIST
72417: LIST
72418: LIST
72419: LIST
72420: LIST
72421: LIST
72422: PUSH
72423: LD_INT 75
72425: PUSH
72426: LD_INT 40
72428: PUSH
72429: EMPTY
72430: LIST
72431: LIST
72432: PUSH
72433: LD_INT 88
72435: PUSH
72436: LD_INT 53
72438: PUSH
72439: EMPTY
72440: LIST
72441: LIST
72442: PUSH
72443: LD_INT 111
72445: PUSH
72446: LD_INT 61
72448: PUSH
72449: EMPTY
72450: LIST
72451: LIST
72452: PUSH
72453: LD_INT 127
72455: PUSH
72456: LD_INT 77
72458: PUSH
72459: EMPTY
72460: LIST
72461: LIST
72462: PUSH
72463: LD_INT 143
72465: PUSH
72466: LD_INT 103
72468: PUSH
72469: EMPTY
72470: LIST
72471: LIST
72472: PUSH
72473: LD_INT 166
72475: PUSH
72476: LD_INT 137
72478: PUSH
72479: EMPTY
72480: LIST
72481: LIST
72482: PUSH
72483: LD_INT 189
72485: PUSH
72486: LD_INT 166
72488: PUSH
72489: EMPTY
72490: LIST
72491: LIST
72492: PUSH
72493: LD_INT 159
72495: PUSH
72496: LD_INT 152
72498: PUSH
72499: EMPTY
72500: LIST
72501: LIST
72502: PUSH
72503: LD_INT 166
72505: PUSH
72506: LD_INT 137
72508: PUSH
72509: EMPTY
72510: LIST
72511: LIST
72512: PUSH
72513: LD_INT 147
72515: PUSH
72516: LD_INT 122
72518: PUSH
72519: EMPTY
72520: LIST
72521: LIST
72522: PUSH
72523: LD_INT 127
72525: PUSH
72526: LD_INT 108
72528: PUSH
72529: EMPTY
72530: LIST
72531: LIST
72532: PUSH
72533: LD_INT 105
72535: PUSH
72536: LD_INT 92
72538: PUSH
72539: EMPTY
72540: LIST
72541: LIST
72542: PUSH
72543: LD_INT 87
72545: PUSH
72546: LD_INT 69
72548: PUSH
72549: EMPTY
72550: LIST
72551: LIST
72552: PUSH
72553: LD_INT 75
72555: PUSH
72556: LD_INT 42
72558: PUSH
72559: EMPTY
72560: LIST
72561: LIST
72562: PUSH
72563: EMPTY
72564: LIST
72565: LIST
72566: LIST
72567: LIST
72568: LIST
72569: LIST
72570: LIST
72571: LIST
72572: LIST
72573: LIST
72574: LIST
72575: LIST
72576: LIST
72577: LIST
72578: PUSH
72579: EMPTY
72580: LIST
72581: LIST
72582: LIST
72583: ST_TO_ADDR
// behemoth_lineup_hexes_indexes = Replace ( behemoth_lineup_hexes_indexes , base , [ 1 , 5 ] ) ;
72584: LD_ADDR_VAR 0 26
72588: PUSH
72589: LD_VAR 0 26
72593: PPUSH
72594: LD_VAR 0 1
72598: PPUSH
72599: LD_INT 1
72601: PUSH
72602: LD_INT 5
72604: PUSH
72605: EMPTY
72606: LIST
72607: LIST
72608: PPUSH
72609: CALL_OW 1
72613: ST_TO_ADDR
// nonbehemoth_wait_for_behemoth_hexes = Replace ( nonbehemoth_wait_for_behemoth_hexes , base , [ [ 44 , 17 ] , [ 117 , 77 ] ] ) ;
72614: LD_ADDR_VAR 0 27
72618: PUSH
72619: LD_VAR 0 27
72623: PPUSH
72624: LD_VAR 0 1
72628: PPUSH
72629: LD_INT 44
72631: PUSH
72632: LD_INT 17
72634: PUSH
72635: EMPTY
72636: LIST
72637: LIST
72638: PUSH
72639: LD_INT 117
72641: PUSH
72642: LD_INT 77
72644: PUSH
72645: EMPTY
72646: LIST
72647: LIST
72648: PUSH
72649: EMPTY
72650: LIST
72651: LIST
72652: PPUSH
72653: CALL_OW 1
72657: ST_TO_ADDR
// behemoth_wait_for_nonbehemoth_hexes = Replace ( behemoth_wait_for_nonbehemoth_hexes , base , [ attack_hexes [ 4 ] , [ 148 , 113 ] ] ) ;
72658: LD_ADDR_VAR 0 28
72662: PUSH
72663: LD_VAR 0 28
72667: PPUSH
72668: LD_VAR 0 1
72672: PPUSH
72673: LD_VAR 0 3
72677: PUSH
72678: LD_INT 4
72680: ARRAY
72681: PUSH
72682: LD_INT 148
72684: PUSH
72685: LD_INT 113
72687: PUSH
72688: EMPTY
72689: LIST
72690: LIST
72691: PUSH
72692: EMPTY
72693: LIST
72694: LIST
72695: PPUSH
72696: CALL_OW 1
72700: ST_TO_ADDR
// temp_list_3 = ai_behemoth_parking_hexes [ base ] ;
72701: LD_ADDR_VAR 0 7
72705: PUSH
72706: LD_EXP 104
72710: PUSH
72711: LD_VAR 0 1
72715: ARRAY
72716: ST_TO_ADDR
// for i in temp_list do
72717: LD_ADDR_VAR 0 5
72721: PUSH
72722: LD_VAR 0 10
72726: PUSH
72727: FOR_IN
72728: IFFALSE 72952
// begin if temp_list_3 = 0 then
72730: LD_VAR 0 7
72734: PUSH
72735: LD_INT 0
72737: EQUAL
72738: IFFALSE 72742
// break ;
72740: GO 72952
// dist = 9999999 ;
72742: LD_ADDR_VAR 0 12
72746: PUSH
72747: LD_INT 9999999
72749: ST_TO_ADDR
// temp_unit = 0 ;
72750: LD_ADDR_VAR 0 9
72754: PUSH
72755: LD_INT 0
72757: ST_TO_ADDR
// a = 0 ;
72758: LD_ADDR_VAR 0 8
72762: PUSH
72763: LD_INT 0
72765: ST_TO_ADDR
// for g = 1 to temp_list_3 + 0 do
72766: LD_ADDR_VAR 0 6
72770: PUSH
72771: DOUBLE
72772: LD_INT 1
72774: DEC
72775: ST_TO_ADDR
72776: LD_VAR 0 7
72780: PUSH
72781: LD_INT 0
72783: PLUS
72784: PUSH
72785: FOR_TO
72786: IFFALSE 72895
// begin if temp_list_3 [ g ] = 0 then
72788: LD_VAR 0 7
72792: PUSH
72793: LD_VAR 0 6
72797: ARRAY
72798: PUSH
72799: LD_INT 0
72801: EQUAL
72802: IFFALSE 72806
// continue ;
72804: GO 72785
// k = GetDistUnitXY ( i , temp_list_3 [ g ] [ 1 ] , temp_list_3 [ g ] [ 2 ] ) ;
72806: LD_ADDR_VAR 0 4
72810: PUSH
72811: LD_VAR 0 5
72815: PPUSH
72816: LD_VAR 0 7
72820: PUSH
72821: LD_VAR 0 6
72825: ARRAY
72826: PUSH
72827: LD_INT 1
72829: ARRAY
72830: PPUSH
72831: LD_VAR 0 7
72835: PUSH
72836: LD_VAR 0 6
72840: ARRAY
72841: PUSH
72842: LD_INT 2
72844: ARRAY
72845: PPUSH
72846: CALL_OW 297
72850: ST_TO_ADDR
// if k < dist then
72851: LD_VAR 0 4
72855: PUSH
72856: LD_VAR 0 12
72860: LESS
72861: IFFALSE 72893
// begin dist = k ;
72863: LD_ADDR_VAR 0 12
72867: PUSH
72868: LD_VAR 0 4
72872: ST_TO_ADDR
// temp_unit = i ;
72873: LD_ADDR_VAR 0 9
72877: PUSH
72878: LD_VAR 0 5
72882: ST_TO_ADDR
// a = g ;
72883: LD_ADDR_VAR 0 8
72887: PUSH
72888: LD_VAR 0 6
72892: ST_TO_ADDR
// end ; end ;
72893: GO 72785
72895: POP
72896: POP
// behemoth_attack_hexes = Replace ( behemoth_attack_hexes , temp_unit , temp_list_2 [ a ] ) ;
72897: LD_ADDR_VAR 0 23
72901: PUSH
72902: LD_VAR 0 23
72906: PPUSH
72907: LD_VAR 0 9
72911: PPUSH
72912: LD_VAR 0 11
72916: PUSH
72917: LD_VAR 0 8
72921: ARRAY
72922: PPUSH
72923: CALL_OW 1
72927: ST_TO_ADDR
// temp_list_3 = Replace ( temp_list_3 , a , [ ] ) ;
72928: LD_ADDR_VAR 0 7
72932: PUSH
72933: LD_VAR 0 7
72937: PPUSH
72938: LD_VAR 0 8
72942: PPUSH
72943: EMPTY
72944: PPUSH
72945: CALL_OW 1
72949: ST_TO_ADDR
// end ;
72950: GO 72727
72952: POP
72953: POP
// end else
72954: GO 72987
// behemoths_in_position = Replace ( behemoths_in_position , base , in_position_target [ base ] ) ;
72956: LD_ADDR_VAR 0 24
72960: PUSH
72961: LD_VAR 0 24
72965: PPUSH
72966: LD_VAR 0 1
72970: PPUSH
72971: LD_VAR 0 29
72975: PUSH
72976: LD_VAR 0 1
72980: ARRAY
72981: PPUSH
72982: CALL_OW 1
72986: ST_TO_ADDR
// end ; end ; 2 :
72987: GO 75691
72989: LD_INT 2
72991: DOUBLE
72992: EQUAL
72993: IFTRUE 72997
72995: GO 73000
72997: POP
// begin end ; 3 :
72998: GO 75691
73000: LD_INT 3
73002: DOUBLE
73003: EQUAL
73004: IFTRUE 73008
73006: GO 73892
73008: POP
// begin init_attack_hexes = [ [ 170 , 146 ] ] ;
73009: LD_ADDR_VAR 0 2
73013: PUSH
73014: LD_INT 170
73016: PUSH
73017: LD_INT 146
73019: PUSH
73020: EMPTY
73021: LIST
73022: LIST
73023: PUSH
73024: EMPTY
73025: LIST
73026: ST_TO_ADDR
// if ai_attack_strategy [ base ] = 1 then
73027: LD_EXP 102
73031: PUSH
73032: LD_VAR 0 1
73036: ARRAY
73037: PUSH
73038: LD_INT 1
73040: EQUAL
73041: IFFALSE 73080
// init_attack_hexes = init_attack_hexes ^ [ [ 167 , 135 ] , [ 167 , 135 ] ] else
73043: LD_ADDR_VAR 0 2
73047: PUSH
73048: LD_VAR 0 2
73052: PUSH
73053: LD_INT 167
73055: PUSH
73056: LD_INT 135
73058: PUSH
73059: EMPTY
73060: LIST
73061: LIST
73062: PUSH
73063: LD_INT 167
73065: PUSH
73066: LD_INT 135
73068: PUSH
73069: EMPTY
73070: LIST
73071: LIST
73072: PUSH
73073: EMPTY
73074: LIST
73075: LIST
73076: ADD
73077: ST_TO_ADDR
73078: GO 73115
// init_attack_hexes = init_attack_hexes ^ [ [ 159 , 134 ] , [ 159 , 134 ] ] ;
73080: LD_ADDR_VAR 0 2
73084: PUSH
73085: LD_VAR 0 2
73089: PUSH
73090: LD_INT 159
73092: PUSH
73093: LD_INT 134
73095: PUSH
73096: EMPTY
73097: LIST
73098: LIST
73099: PUSH
73100: LD_INT 159
73102: PUSH
73103: LD_INT 134
73105: PUSH
73106: EMPTY
73107: LIST
73108: LIST
73109: PUSH
73110: EMPTY
73111: LIST
73112: LIST
73113: ADD
73114: ST_TO_ADDR
// attack_hexes = init_attack_hexes ;
73115: LD_ADDR_VAR 0 3
73119: PUSH
73120: LD_VAR 0 2
73124: ST_TO_ADDR
// if ai_attack_strategy [ base ] = 1 then
73125: LD_EXP 102
73129: PUSH
73130: LD_VAR 0 1
73134: ARRAY
73135: PUSH
73136: LD_INT 1
73138: EQUAL
73139: IFFALSE 73332
// begin attack_hexes = attack_hexes ^ [ [ 164 , 123 ] , [ 159 , 113 ] , [ 153 , 100 ] , [ 142 , 81 ] ] ;
73141: LD_ADDR_VAR 0 3
73145: PUSH
73146: LD_VAR 0 3
73150: PUSH
73151: LD_INT 164
73153: PUSH
73154: LD_INT 123
73156: PUSH
73157: EMPTY
73158: LIST
73159: LIST
73160: PUSH
73161: LD_INT 159
73163: PUSH
73164: LD_INT 113
73166: PUSH
73167: EMPTY
73168: LIST
73169: LIST
73170: PUSH
73171: LD_INT 153
73173: PUSH
73174: LD_INT 100
73176: PUSH
73177: EMPTY
73178: LIST
73179: LIST
73180: PUSH
73181: LD_INT 142
73183: PUSH
73184: LD_INT 81
73186: PUSH
73187: EMPTY
73188: LIST
73189: LIST
73190: PUSH
73191: EMPTY
73192: LIST
73193: LIST
73194: LIST
73195: LIST
73196: ADD
73197: ST_TO_ADDR
// if base_in_area_map [ base ] [ player_base_area ] then
73198: LD_EXP 143
73202: PUSH
73203: LD_VAR 0 1
73207: ARRAY
73208: PUSH
73209: LD_INT 25
73211: ARRAY
73212: IFFALSE 73295
// attack_hexes = attack_hexes ^ [ [ 129 , 64 ] , [ 116 , 67 ] , [ 126 , 82 ] , [ 107 , 76 ] , [ 93 , 71 ] , [ 82 , 67 ] ] else
73214: LD_ADDR_VAR 0 3
73218: PUSH
73219: LD_VAR 0 3
73223: PUSH
73224: LD_INT 129
73226: PUSH
73227: LD_INT 64
73229: PUSH
73230: EMPTY
73231: LIST
73232: LIST
73233: PUSH
73234: LD_INT 116
73236: PUSH
73237: LD_INT 67
73239: PUSH
73240: EMPTY
73241: LIST
73242: LIST
73243: PUSH
73244: LD_INT 126
73246: PUSH
73247: LD_INT 82
73249: PUSH
73250: EMPTY
73251: LIST
73252: LIST
73253: PUSH
73254: LD_INT 107
73256: PUSH
73257: LD_INT 76
73259: PUSH
73260: EMPTY
73261: LIST
73262: LIST
73263: PUSH
73264: LD_INT 93
73266: PUSH
73267: LD_INT 71
73269: PUSH
73270: EMPTY
73271: LIST
73272: LIST
73273: PUSH
73274: LD_INT 82
73276: PUSH
73277: LD_INT 67
73279: PUSH
73280: EMPTY
73281: LIST
73282: LIST
73283: PUSH
73284: EMPTY
73285: LIST
73286: LIST
73287: LIST
73288: LIST
73289: LIST
73290: LIST
73291: ADD
73292: ST_TO_ADDR
73293: GO 73330
// attack_hexes = attack_hexes ^ [ [ 129 , 74 ] , [ 116 , 67 ] ] ;
73295: LD_ADDR_VAR 0 3
73299: PUSH
73300: LD_VAR 0 3
73304: PUSH
73305: LD_INT 129
73307: PUSH
73308: LD_INT 74
73310: PUSH
73311: EMPTY
73312: LIST
73313: LIST
73314: PUSH
73315: LD_INT 116
73317: PUSH
73318: LD_INT 67
73320: PUSH
73321: EMPTY
73322: LIST
73323: LIST
73324: PUSH
73325: EMPTY
73326: LIST
73327: LIST
73328: ADD
73329: ST_TO_ADDR
// end else
73330: GO 73521
// begin attack_hexes = attack_hexes ^ [ [ 147 , 122 ] , [ 140 , 113 ] , [ 134 , 102 ] , [ 125 , 84 ] ] ;
73332: LD_ADDR_VAR 0 3
73336: PUSH
73337: LD_VAR 0 3
73341: PUSH
73342: LD_INT 147
73344: PUSH
73345: LD_INT 122
73347: PUSH
73348: EMPTY
73349: LIST
73350: LIST
73351: PUSH
73352: LD_INT 140
73354: PUSH
73355: LD_INT 113
73357: PUSH
73358: EMPTY
73359: LIST
73360: LIST
73361: PUSH
73362: LD_INT 134
73364: PUSH
73365: LD_INT 102
73367: PUSH
73368: EMPTY
73369: LIST
73370: LIST
73371: PUSH
73372: LD_INT 125
73374: PUSH
73375: LD_INT 84
73377: PUSH
73378: EMPTY
73379: LIST
73380: LIST
73381: PUSH
73382: EMPTY
73383: LIST
73384: LIST
73385: LIST
73386: LIST
73387: ADD
73388: ST_TO_ADDR
// if base_in_area_map [ base ] [ player_base_area ] then
73389: LD_EXP 143
73393: PUSH
73394: LD_VAR 0 1
73398: ARRAY
73399: PUSH
73400: LD_INT 25
73402: ARRAY
73403: IFFALSE 73497
// attack_hexes = attack_hexes ^ [ [ 133 , 77 ] , [ 137 , 65 ] , [ 122 , 64 ] , [ 113 , 69 ] , [ 107 , 76 ] , [ 93 , 71 ] , [ 82 , 67 ] ] else
73405: LD_ADDR_VAR 0 3
73409: PUSH
73410: LD_VAR 0 3
73414: PUSH
73415: LD_INT 133
73417: PUSH
73418: LD_INT 77
73420: PUSH
73421: EMPTY
73422: LIST
73423: LIST
73424: PUSH
73425: LD_INT 137
73427: PUSH
73428: LD_INT 65
73430: PUSH
73431: EMPTY
73432: LIST
73433: LIST
73434: PUSH
73435: LD_INT 122
73437: PUSH
73438: LD_INT 64
73440: PUSH
73441: EMPTY
73442: LIST
73443: LIST
73444: PUSH
73445: LD_INT 113
73447: PUSH
73448: LD_INT 69
73450: PUSH
73451: EMPTY
73452: LIST
73453: LIST
73454: PUSH
73455: LD_INT 107
73457: PUSH
73458: LD_INT 76
73460: PUSH
73461: EMPTY
73462: LIST
73463: LIST
73464: PUSH
73465: LD_INT 93
73467: PUSH
73468: LD_INT 71
73470: PUSH
73471: EMPTY
73472: LIST
73473: LIST
73474: PUSH
73475: LD_INT 82
73477: PUSH
73478: LD_INT 67
73480: PUSH
73481: EMPTY
73482: LIST
73483: LIST
73484: PUSH
73485: EMPTY
73486: LIST
73487: LIST
73488: LIST
73489: LIST
73490: LIST
73491: LIST
73492: LIST
73493: ADD
73494: ST_TO_ADDR
73495: GO 73521
// attack_hexes = attack_hexes ^ [ [ 116 , 67 ] ] ;
73497: LD_ADDR_VAR 0 3
73501: PUSH
73502: LD_VAR 0 3
73506: PUSH
73507: LD_INT 116
73509: PUSH
73510: LD_INT 67
73512: PUSH
73513: EMPTY
73514: LIST
73515: LIST
73516: PUSH
73517: EMPTY
73518: LIST
73519: ADD
73520: ST_TO_ADDR
// end ; if base_in_area_map [ base ] [ north_east_corner_area ] then
73521: LD_EXP 143
73525: PUSH
73526: LD_VAR 0 1
73530: ARRAY
73531: PUSH
73532: LD_INT 24
73534: ARRAY
73535: IFFALSE 73750
// begin if base_in_area_map [ base ] [ player_base_area ] then
73537: LD_EXP 143
73541: PUSH
73542: LD_VAR 0 1
73546: ARRAY
73547: PUSH
73548: LD_INT 25
73550: ARRAY
73551: IFFALSE 73601
// attack_hexes = attack_hexes ^ [ [ 85 , 56 ] , [ 89 , 49 ] , [ 94 , 43 ] ] else
73553: LD_ADDR_VAR 0 3
73557: PUSH
73558: LD_VAR 0 3
73562: PUSH
73563: LD_INT 85
73565: PUSH
73566: LD_INT 56
73568: PUSH
73569: EMPTY
73570: LIST
73571: LIST
73572: PUSH
73573: LD_INT 89
73575: PUSH
73576: LD_INT 49
73578: PUSH
73579: EMPTY
73580: LIST
73581: LIST
73582: PUSH
73583: LD_INT 94
73585: PUSH
73586: LD_INT 43
73588: PUSH
73589: EMPTY
73590: LIST
73591: LIST
73592: PUSH
73593: EMPTY
73594: LIST
73595: LIST
73596: LIST
73597: ADD
73598: ST_TO_ADDR
73599: GO 73636
// attack_hexes = attack_hexes ^ [ [ 106 , 56 ] , [ 94 , 43 ] ] ;
73601: LD_ADDR_VAR 0 3
73605: PUSH
73606: LD_VAR 0 3
73610: PUSH
73611: LD_INT 106
73613: PUSH
73614: LD_INT 56
73616: PUSH
73617: EMPTY
73618: LIST
73619: LIST
73620: PUSH
73621: LD_INT 94
73623: PUSH
73624: LD_INT 43
73626: PUSH
73627: EMPTY
73628: LIST
73629: LIST
73630: PUSH
73631: EMPTY
73632: LIST
73633: LIST
73634: ADD
73635: ST_TO_ADDR
// attack_hexes = attack_hexes ^ [ [ 105 , 40 ] , [ 111 , 34 ] , [ 115 , 22 ] , [ 103 , 14 ] , [ 102 , 26 ] , [ 105 , 40 ] , [ 106 , 56 ] , [ 107 , 66 ] , [ 107 , 76 ] ] ;
73636: LD_ADDR_VAR 0 3
73640: PUSH
73641: LD_VAR 0 3
73645: PUSH
73646: LD_INT 105
73648: PUSH
73649: LD_INT 40
73651: PUSH
73652: EMPTY
73653: LIST
73654: LIST
73655: PUSH
73656: LD_INT 111
73658: PUSH
73659: LD_INT 34
73661: PUSH
73662: EMPTY
73663: LIST
73664: LIST
73665: PUSH
73666: LD_INT 115
73668: PUSH
73669: LD_INT 22
73671: PUSH
73672: EMPTY
73673: LIST
73674: LIST
73675: PUSH
73676: LD_INT 103
73678: PUSH
73679: LD_INT 14
73681: PUSH
73682: EMPTY
73683: LIST
73684: LIST
73685: PUSH
73686: LD_INT 102
73688: PUSH
73689: LD_INT 26
73691: PUSH
73692: EMPTY
73693: LIST
73694: LIST
73695: PUSH
73696: LD_INT 105
73698: PUSH
73699: LD_INT 40
73701: PUSH
73702: EMPTY
73703: LIST
73704: LIST
73705: PUSH
73706: LD_INT 106
73708: PUSH
73709: LD_INT 56
73711: PUSH
73712: EMPTY
73713: LIST
73714: LIST
73715: PUSH
73716: LD_INT 107
73718: PUSH
73719: LD_INT 66
73721: PUSH
73722: EMPTY
73723: LIST
73724: LIST
73725: PUSH
73726: LD_INT 107
73728: PUSH
73729: LD_INT 76
73731: PUSH
73732: EMPTY
73733: LIST
73734: LIST
73735: PUSH
73736: EMPTY
73737: LIST
73738: LIST
73739: LIST
73740: LIST
73741: LIST
73742: LIST
73743: LIST
73744: LIST
73745: LIST
73746: ADD
73747: ST_TO_ADDR
// end else
73748: GO 73791
// if not base_in_area_map [ base ] [ player_base_area ] then
73750: LD_EXP 143
73754: PUSH
73755: LD_VAR 0 1
73759: ARRAY
73760: PUSH
73761: LD_INT 25
73763: ARRAY
73764: NOT
73765: IFFALSE 73791
// attack_hexes = attack_hexes ^ [ [ 107 , 76 ] ] ;
73767: LD_ADDR_VAR 0 3
73771: PUSH
73772: LD_VAR 0 3
73776: PUSH
73777: LD_INT 107
73779: PUSH
73780: LD_INT 76
73782: PUSH
73783: EMPTY
73784: LIST
73785: LIST
73786: PUSH
73787: EMPTY
73788: LIST
73789: ADD
73790: ST_TO_ADDR
// attack_hexes = attack_hexes ^ [ [ 98 , 84 ] , [ 117 , 101 ] , [ 130 , 110 ] , [ 142 , 119 ] , [ 153 , 127 ] ] ;
73791: LD_ADDR_VAR 0 3
73795: PUSH
73796: LD_VAR 0 3
73800: PUSH
73801: LD_INT 98
73803: PUSH
73804: LD_INT 84
73806: PUSH
73807: EMPTY
73808: LIST
73809: LIST
73810: PUSH
73811: LD_INT 117
73813: PUSH
73814: LD_INT 101
73816: PUSH
73817: EMPTY
73818: LIST
73819: LIST
73820: PUSH
73821: LD_INT 130
73823: PUSH
73824: LD_INT 110
73826: PUSH
73827: EMPTY
73828: LIST
73829: LIST
73830: PUSH
73831: LD_INT 142
73833: PUSH
73834: LD_INT 119
73836: PUSH
73837: EMPTY
73838: LIST
73839: LIST
73840: PUSH
73841: LD_INT 153
73843: PUSH
73844: LD_INT 127
73846: PUSH
73847: EMPTY
73848: LIST
73849: LIST
73850: PUSH
73851: EMPTY
73852: LIST
73853: LIST
73854: LIST
73855: LIST
73856: LIST
73857: ADD
73858: ST_TO_ADDR
// behemoths_in_position = Replace ( behemoths_in_position , base , in_position_target [ base ] ) ;
73859: LD_ADDR_VAR 0 24
73863: PUSH
73864: LD_VAR 0 24
73868: PPUSH
73869: LD_VAR 0 1
73873: PPUSH
73874: LD_VAR 0 29
73878: PUSH
73879: LD_VAR 0 1
73883: ARRAY
73884: PPUSH
73885: CALL_OW 1
73889: ST_TO_ADDR
// end ; 4 :
73890: GO 75691
73892: LD_INT 4
73894: DOUBLE
73895: EQUAL
73896: IFTRUE 73900
73898: GO 75690
73900: POP
// begin case ai_attack_strategy [ base ] of 1 , 3 , 4 :
73901: LD_EXP 102
73905: PUSH
73906: LD_VAR 0 1
73910: ARRAY
73911: PUSH
73912: LD_INT 1
73914: DOUBLE
73915: EQUAL
73916: IFTRUE 73932
73918: LD_INT 3
73920: DOUBLE
73921: EQUAL
73922: IFTRUE 73932
73924: LD_INT 4
73926: DOUBLE
73927: EQUAL
73928: IFTRUE 73932
73930: GO 73992
73932: POP
// begin attack_hexes = [ [ 117 , 158 ] , [ 117 , 158 ] , [ 97 , 137 ] ] ;
73933: LD_ADDR_VAR 0 3
73937: PUSH
73938: LD_INT 117
73940: PUSH
73941: LD_INT 158
73943: PUSH
73944: EMPTY
73945: LIST
73946: LIST
73947: PUSH
73948: LD_INT 117
73950: PUSH
73951: LD_INT 158
73953: PUSH
73954: EMPTY
73955: LIST
73956: LIST
73957: PUSH
73958: LD_INT 97
73960: PUSH
73961: LD_INT 137
73963: PUSH
73964: EMPTY
73965: LIST
73966: LIST
73967: PUSH
73968: EMPTY
73969: LIST
73970: LIST
73971: LIST
73972: ST_TO_ADDR
// init_attack_hexes = [ attack_hexes [ 1 ] ] ;
73973: LD_ADDR_VAR 0 2
73977: PUSH
73978: LD_VAR 0 3
73982: PUSH
73983: LD_INT 1
73985: ARRAY
73986: PUSH
73987: EMPTY
73988: LIST
73989: ST_TO_ADDR
// end ; 2 :
73990: GO 74348
73992: LD_INT 2
73994: DOUBLE
73995: EQUAL
73996: IFTRUE 74000
73998: GO 74147
74000: POP
// begin attack_hexes = [ [ 168 , 141 ] , [ 156 , 129 ] , [ 145 , 129 ] , [ 138 , 134 ] , [ 137 , 146 ] , [ 140 , 158 ] , [ 128 , 159 ] , [ 128 , 159 ] , [ 112 , 148 ] , [ 97 , 137 ] ] ;
74001: LD_ADDR_VAR 0 3
74005: PUSH
74006: LD_INT 168
74008: PUSH
74009: LD_INT 141
74011: PUSH
74012: EMPTY
74013: LIST
74014: LIST
74015: PUSH
74016: LD_INT 156
74018: PUSH
74019: LD_INT 129
74021: PUSH
74022: EMPTY
74023: LIST
74024: LIST
74025: PUSH
74026: LD_INT 145
74028: PUSH
74029: LD_INT 129
74031: PUSH
74032: EMPTY
74033: LIST
74034: LIST
74035: PUSH
74036: LD_INT 138
74038: PUSH
74039: LD_INT 134
74041: PUSH
74042: EMPTY
74043: LIST
74044: LIST
74045: PUSH
74046: LD_INT 137
74048: PUSH
74049: LD_INT 146
74051: PUSH
74052: EMPTY
74053: LIST
74054: LIST
74055: PUSH
74056: LD_INT 140
74058: PUSH
74059: LD_INT 158
74061: PUSH
74062: EMPTY
74063: LIST
74064: LIST
74065: PUSH
74066: LD_INT 128
74068: PUSH
74069: LD_INT 159
74071: PUSH
74072: EMPTY
74073: LIST
74074: LIST
74075: PUSH
74076: LD_INT 128
74078: PUSH
74079: LD_INT 159
74081: PUSH
74082: EMPTY
74083: LIST
74084: LIST
74085: PUSH
74086: LD_INT 112
74088: PUSH
74089: LD_INT 148
74091: PUSH
74092: EMPTY
74093: LIST
74094: LIST
74095: PUSH
74096: LD_INT 97
74098: PUSH
74099: LD_INT 137
74101: PUSH
74102: EMPTY
74103: LIST
74104: LIST
74105: PUSH
74106: EMPTY
74107: LIST
74108: LIST
74109: LIST
74110: LIST
74111: LIST
74112: LIST
74113: LIST
74114: LIST
74115: LIST
74116: LIST
74117: ST_TO_ADDR
// init_attack_hexes = [ attack_hexes [ 1 ] , attack_hexes [ 2 ] ] ;
74118: LD_ADDR_VAR 0 2
74122: PUSH
74123: LD_VAR 0 3
74127: PUSH
74128: LD_INT 1
74130: ARRAY
74131: PUSH
74132: LD_VAR 0 3
74136: PUSH
74137: LD_INT 2
74139: ARRAY
74140: PUSH
74141: EMPTY
74142: LIST
74143: LIST
74144: ST_TO_ADDR
// end ; 5 :
74145: GO 74348
74147: LD_INT 5
74149: DOUBLE
74150: EQUAL
74151: IFTRUE 74155
74153: GO 74347
74155: POP
// begin attack_hexes = [ [ 128 , 159 ] , [ 128 , 159 ] , [ 140 , 158 ] , [ 137 , 146 ] , [ 138 , 134 ] , [ 134 , 118 ] , [ 119 , 103 ] , [ 103 , 89 ] , [ 93 , 72 ] , [ 91 , 58 ] , [ 92 , 44 ] , [ 92 , 30 ] , [ 87 , 17 ] , [ 87 , 17 ] , [ 70 , 15 ] ] ;
74156: LD_ADDR_VAR 0 3
74160: PUSH
74161: LD_INT 128
74163: PUSH
74164: LD_INT 159
74166: PUSH
74167: EMPTY
74168: LIST
74169: LIST
74170: PUSH
74171: LD_INT 128
74173: PUSH
74174: LD_INT 159
74176: PUSH
74177: EMPTY
74178: LIST
74179: LIST
74180: PUSH
74181: LD_INT 140
74183: PUSH
74184: LD_INT 158
74186: PUSH
74187: EMPTY
74188: LIST
74189: LIST
74190: PUSH
74191: LD_INT 137
74193: PUSH
74194: LD_INT 146
74196: PUSH
74197: EMPTY
74198: LIST
74199: LIST
74200: PUSH
74201: LD_INT 138
74203: PUSH
74204: LD_INT 134
74206: PUSH
74207: EMPTY
74208: LIST
74209: LIST
74210: PUSH
74211: LD_INT 134
74213: PUSH
74214: LD_INT 118
74216: PUSH
74217: EMPTY
74218: LIST
74219: LIST
74220: PUSH
74221: LD_INT 119
74223: PUSH
74224: LD_INT 103
74226: PUSH
74227: EMPTY
74228: LIST
74229: LIST
74230: PUSH
74231: LD_INT 103
74233: PUSH
74234: LD_INT 89
74236: PUSH
74237: EMPTY
74238: LIST
74239: LIST
74240: PUSH
74241: LD_INT 93
74243: PUSH
74244: LD_INT 72
74246: PUSH
74247: EMPTY
74248: LIST
74249: LIST
74250: PUSH
74251: LD_INT 91
74253: PUSH
74254: LD_INT 58
74256: PUSH
74257: EMPTY
74258: LIST
74259: LIST
74260: PUSH
74261: LD_INT 92
74263: PUSH
74264: LD_INT 44
74266: PUSH
74267: EMPTY
74268: LIST
74269: LIST
74270: PUSH
74271: LD_INT 92
74273: PUSH
74274: LD_INT 30
74276: PUSH
74277: EMPTY
74278: LIST
74279: LIST
74280: PUSH
74281: LD_INT 87
74283: PUSH
74284: LD_INT 17
74286: PUSH
74287: EMPTY
74288: LIST
74289: LIST
74290: PUSH
74291: LD_INT 87
74293: PUSH
74294: LD_INT 17
74296: PUSH
74297: EMPTY
74298: LIST
74299: LIST
74300: PUSH
74301: LD_INT 70
74303: PUSH
74304: LD_INT 15
74306: PUSH
74307: EMPTY
74308: LIST
74309: LIST
74310: PUSH
74311: EMPTY
74312: LIST
74313: LIST
74314: LIST
74315: LIST
74316: LIST
74317: LIST
74318: LIST
74319: LIST
74320: LIST
74321: LIST
74322: LIST
74323: LIST
74324: LIST
74325: LIST
74326: LIST
74327: ST_TO_ADDR
// init_attack_hexes = [ attack_hexes [ 1 ] ] ;
74328: LD_ADDR_VAR 0 2
74332: PUSH
74333: LD_VAR 0 3
74337: PUSH
74338: LD_INT 1
74340: ARRAY
74341: PUSH
74342: EMPTY
74343: LIST
74344: ST_TO_ADDR
// end ; end ;
74345: GO 74348
74347: POP
// if ai_attack_strategy [ base ] in [ 1 , 2 , 3 , 4 ] then
74348: LD_EXP 102
74352: PUSH
74353: LD_VAR 0 1
74357: ARRAY
74358: PUSH
74359: LD_INT 1
74361: PUSH
74362: LD_INT 2
74364: PUSH
74365: LD_INT 3
74367: PUSH
74368: LD_INT 4
74370: PUSH
74371: EMPTY
74372: LIST
74373: LIST
74374: LIST
74375: LIST
74376: IN
74377: IFFALSE 74597
// begin if ai_attack_strategy [ base ] in [ 1 , 2 ] then
74379: LD_EXP 102
74383: PUSH
74384: LD_VAR 0 1
74388: ARRAY
74389: PUSH
74390: LD_INT 1
74392: PUSH
74393: LD_INT 2
74395: PUSH
74396: EMPTY
74397: LIST
74398: LIST
74399: IN
74400: IFFALSE 74461
// attack_hexes = attack_hexes ^ [ [ 89 , 122 ] , [ 76 , 113 ] , [ 71 , 123 ] , [ 62 , 110 ] ] else
74402: LD_ADDR_VAR 0 3
74406: PUSH
74407: LD_VAR 0 3
74411: PUSH
74412: LD_INT 89
74414: PUSH
74415: LD_INT 122
74417: PUSH
74418: EMPTY
74419: LIST
74420: LIST
74421: PUSH
74422: LD_INT 76
74424: PUSH
74425: LD_INT 113
74427: PUSH
74428: EMPTY
74429: LIST
74430: LIST
74431: PUSH
74432: LD_INT 71
74434: PUSH
74435: LD_INT 123
74437: PUSH
74438: EMPTY
74439: LIST
74440: LIST
74441: PUSH
74442: LD_INT 62
74444: PUSH
74445: LD_INT 110
74447: PUSH
74448: EMPTY
74449: LIST
74450: LIST
74451: PUSH
74452: EMPTY
74453: LIST
74454: LIST
74455: LIST
74456: LIST
74457: ADD
74458: ST_TO_ADDR
74459: GO 74496
// attack_hexes = attack_hexes ^ [ [ 86 , 126 ] , [ 76 , 113 ] ] ;
74461: LD_ADDR_VAR 0 3
74465: PUSH
74466: LD_VAR 0 3
74470: PUSH
74471: LD_INT 86
74473: PUSH
74474: LD_INT 126
74476: PUSH
74477: EMPTY
74478: LIST
74479: LIST
74480: PUSH
74481: LD_INT 76
74483: PUSH
74484: LD_INT 113
74486: PUSH
74487: EMPTY
74488: LIST
74489: LIST
74490: PUSH
74491: EMPTY
74492: LIST
74493: LIST
74494: ADD
74495: ST_TO_ADDR
// attack_hexes = attack_hexes ^ [ [ 68 , 100 ] , [ 65 , 86 ] , [ 56 , 67 ] , [ 56 , 67 ] , [ 57 , 57 ] , [ 64 , 52 ] , [ 70 , 46 ] , [ 70 , 37 ] ] ;
74496: LD_ADDR_VAR 0 3
74500: PUSH
74501: LD_VAR 0 3
74505: PUSH
74506: LD_INT 68
74508: PUSH
74509: LD_INT 100
74511: PUSH
74512: EMPTY
74513: LIST
74514: LIST
74515: PUSH
74516: LD_INT 65
74518: PUSH
74519: LD_INT 86
74521: PUSH
74522: EMPTY
74523: LIST
74524: LIST
74525: PUSH
74526: LD_INT 56
74528: PUSH
74529: LD_INT 67
74531: PUSH
74532: EMPTY
74533: LIST
74534: LIST
74535: PUSH
74536: LD_INT 56
74538: PUSH
74539: LD_INT 67
74541: PUSH
74542: EMPTY
74543: LIST
74544: LIST
74545: PUSH
74546: LD_INT 57
74548: PUSH
74549: LD_INT 57
74551: PUSH
74552: EMPTY
74553: LIST
74554: LIST
74555: PUSH
74556: LD_INT 64
74558: PUSH
74559: LD_INT 52
74561: PUSH
74562: EMPTY
74563: LIST
74564: LIST
74565: PUSH
74566: LD_INT 70
74568: PUSH
74569: LD_INT 46
74571: PUSH
74572: EMPTY
74573: LIST
74574: LIST
74575: PUSH
74576: LD_INT 70
74578: PUSH
74579: LD_INT 37
74581: PUSH
74582: EMPTY
74583: LIST
74584: LIST
74585: PUSH
74586: EMPTY
74587: LIST
74588: LIST
74589: LIST
74590: LIST
74591: LIST
74592: LIST
74593: LIST
74594: LIST
74595: ADD
74596: ST_TO_ADDR
// end ; if ai_attack_strategy [ base ] in [ 1 , 2 , 3 , 4 ] then
74597: LD_EXP 102
74601: PUSH
74602: LD_VAR 0 1
74606: ARRAY
74607: PUSH
74608: LD_INT 1
74610: PUSH
74611: LD_INT 2
74613: PUSH
74614: LD_INT 3
74616: PUSH
74617: LD_INT 4
74619: PUSH
74620: EMPTY
74621: LIST
74622: LIST
74623: LIST
74624: LIST
74625: IN
74626: IFFALSE 74795
// begin if base_in_area_map [ base ] [ Ru_base ] then
74628: LD_EXP 143
74632: PUSH
74633: LD_VAR 0 1
74637: ARRAY
74638: PUSH
74639: LD_INT 2
74641: ARRAY
74642: IFFALSE 74769
// attack_hexes = attack_hexes ^ [ [ 63 , 24 ] , [ 52 , 14 ] , [ 41 , 15 ] , [ 46 , 30 ] , [ 31 , 31 ] , [ 11 , 11 ] , [ 27 , 10 ] , [ 41 , 15 ] , [ 53 , 18 ] , [ 72 , 29 ] ] else
74644: LD_ADDR_VAR 0 3
74648: PUSH
74649: LD_VAR 0 3
74653: PUSH
74654: LD_INT 63
74656: PUSH
74657: LD_INT 24
74659: PUSH
74660: EMPTY
74661: LIST
74662: LIST
74663: PUSH
74664: LD_INT 52
74666: PUSH
74667: LD_INT 14
74669: PUSH
74670: EMPTY
74671: LIST
74672: LIST
74673: PUSH
74674: LD_INT 41
74676: PUSH
74677: LD_INT 15
74679: PUSH
74680: EMPTY
74681: LIST
74682: LIST
74683: PUSH
74684: LD_INT 46
74686: PUSH
74687: LD_INT 30
74689: PUSH
74690: EMPTY
74691: LIST
74692: LIST
74693: PUSH
74694: LD_INT 31
74696: PUSH
74697: LD_INT 31
74699: PUSH
74700: EMPTY
74701: LIST
74702: LIST
74703: PUSH
74704: LD_INT 11
74706: PUSH
74707: LD_INT 11
74709: PUSH
74710: EMPTY
74711: LIST
74712: LIST
74713: PUSH
74714: LD_INT 27
74716: PUSH
74717: LD_INT 10
74719: PUSH
74720: EMPTY
74721: LIST
74722: LIST
74723: PUSH
74724: LD_INT 41
74726: PUSH
74727: LD_INT 15
74729: PUSH
74730: EMPTY
74731: LIST
74732: LIST
74733: PUSH
74734: LD_INT 53
74736: PUSH
74737: LD_INT 18
74739: PUSH
74740: EMPTY
74741: LIST
74742: LIST
74743: PUSH
74744: LD_INT 72
74746: PUSH
74747: LD_INT 29
74749: PUSH
74750: EMPTY
74751: LIST
74752: LIST
74753: PUSH
74754: EMPTY
74755: LIST
74756: LIST
74757: LIST
74758: LIST
74759: LIST
74760: LIST
74761: LIST
74762: LIST
74763: LIST
74764: LIST
74765: ADD
74766: ST_TO_ADDR
74767: GO 74793
// attack_hexes = attack_hexes ^ [ [ 72 , 29 ] ] ;
74769: LD_ADDR_VAR 0 3
74773: PUSH
74774: LD_VAR 0 3
74778: PUSH
74779: LD_INT 72
74781: PUSH
74782: LD_INT 29
74784: PUSH
74785: EMPTY
74786: LIST
74787: LIST
74788: PUSH
74789: EMPTY
74790: LIST
74791: ADD
74792: ST_TO_ADDR
// end else
74793: GO 74923
// if ai_attack_strategy [ base ] = 5 then
74795: LD_EXP 102
74799: PUSH
74800: LD_VAR 0 1
74804: ARRAY
74805: PUSH
74806: LD_INT 5
74808: EQUAL
74809: IFFALSE 74923
// attack_hexes = attack_hexes ^ [ [ 52 , 14 ] , [ 41 , 15 ] , [ 46 , 30 ] , [ 31 , 31 ] , [ 11 , 11 ] , [ 27 , 10 ] , [ 41 , 15 ] , [ 53 , 18 ] , [ 72 , 29 ] ] ;
74811: LD_ADDR_VAR 0 3
74815: PUSH
74816: LD_VAR 0 3
74820: PUSH
74821: LD_INT 52
74823: PUSH
74824: LD_INT 14
74826: PUSH
74827: EMPTY
74828: LIST
74829: LIST
74830: PUSH
74831: LD_INT 41
74833: PUSH
74834: LD_INT 15
74836: PUSH
74837: EMPTY
74838: LIST
74839: LIST
74840: PUSH
74841: LD_INT 46
74843: PUSH
74844: LD_INT 30
74846: PUSH
74847: EMPTY
74848: LIST
74849: LIST
74850: PUSH
74851: LD_INT 31
74853: PUSH
74854: LD_INT 31
74856: PUSH
74857: EMPTY
74858: LIST
74859: LIST
74860: PUSH
74861: LD_INT 11
74863: PUSH
74864: LD_INT 11
74866: PUSH
74867: EMPTY
74868: LIST
74869: LIST
74870: PUSH
74871: LD_INT 27
74873: PUSH
74874: LD_INT 10
74876: PUSH
74877: EMPTY
74878: LIST
74879: LIST
74880: PUSH
74881: LD_INT 41
74883: PUSH
74884: LD_INT 15
74886: PUSH
74887: EMPTY
74888: LIST
74889: LIST
74890: PUSH
74891: LD_INT 53
74893: PUSH
74894: LD_INT 18
74896: PUSH
74897: EMPTY
74898: LIST
74899: LIST
74900: PUSH
74901: LD_INT 72
74903: PUSH
74904: LD_INT 29
74906: PUSH
74907: EMPTY
74908: LIST
74909: LIST
74910: PUSH
74911: EMPTY
74912: LIST
74913: LIST
74914: LIST
74915: LIST
74916: LIST
74917: LIST
74918: LIST
74919: LIST
74920: LIST
74921: ADD
74922: ST_TO_ADDR
// if base_in_area_map [ base ] [ north_east_corner_area ] then
74923: LD_EXP 143
74927: PUSH
74928: LD_VAR 0 1
74932: ARRAY
74933: PUSH
74934: LD_INT 24
74936: ARRAY
74937: IFFALSE 75042
// begin attack_hexes = attack_hexes ^ [ [ 76 , 21 ] , [ 84 , 18 ] , [ 92 , 15 ] , [ 103 , 14 ] , [ 115 , 22 ] , [ 122 , 35 ] , [ 111 , 34 ] , [ 105 , 40 ] ] ;
74939: LD_ADDR_VAR 0 3
74943: PUSH
74944: LD_VAR 0 3
74948: PUSH
74949: LD_INT 76
74951: PUSH
74952: LD_INT 21
74954: PUSH
74955: EMPTY
74956: LIST
74957: LIST
74958: PUSH
74959: LD_INT 84
74961: PUSH
74962: LD_INT 18
74964: PUSH
74965: EMPTY
74966: LIST
74967: LIST
74968: PUSH
74969: LD_INT 92
74971: PUSH
74972: LD_INT 15
74974: PUSH
74975: EMPTY
74976: LIST
74977: LIST
74978: PUSH
74979: LD_INT 103
74981: PUSH
74982: LD_INT 14
74984: PUSH
74985: EMPTY
74986: LIST
74987: LIST
74988: PUSH
74989: LD_INT 115
74991: PUSH
74992: LD_INT 22
74994: PUSH
74995: EMPTY
74996: LIST
74997: LIST
74998: PUSH
74999: LD_INT 122
75001: PUSH
75002: LD_INT 35
75004: PUSH
75005: EMPTY
75006: LIST
75007: LIST
75008: PUSH
75009: LD_INT 111
75011: PUSH
75012: LD_INT 34
75014: PUSH
75015: EMPTY
75016: LIST
75017: LIST
75018: PUSH
75019: LD_INT 105
75021: PUSH
75022: LD_INT 40
75024: PUSH
75025: EMPTY
75026: LIST
75027: LIST
75028: PUSH
75029: EMPTY
75030: LIST
75031: LIST
75032: LIST
75033: LIST
75034: LIST
75035: LIST
75036: LIST
75037: LIST
75038: ADD
75039: ST_TO_ADDR
// end else
75040: GO 75267
// if ai_attack_strategy [ base ] = 4 then
75042: LD_EXP 102
75046: PUSH
75047: LD_VAR 0 1
75051: ARRAY
75052: PUSH
75053: LD_INT 4
75055: EQUAL
75056: IFFALSE 75201
// begin attack_hexes = attack_hexes ^ [ [ 69 , 37 ] , [ 76 , 49 ] , [ 87 , 62 ] , [ 105 , 75 ] ] ;
75058: LD_ADDR_VAR 0 3
75062: PUSH
75063: LD_VAR 0 3
75067: PUSH
75068: LD_INT 69
75070: PUSH
75071: LD_INT 37
75073: PUSH
75074: EMPTY
75075: LIST
75076: LIST
75077: PUSH
75078: LD_INT 76
75080: PUSH
75081: LD_INT 49
75083: PUSH
75084: EMPTY
75085: LIST
75086: LIST
75087: PUSH
75088: LD_INT 87
75090: PUSH
75091: LD_INT 62
75093: PUSH
75094: EMPTY
75095: LIST
75096: LIST
75097: PUSH
75098: LD_INT 105
75100: PUSH
75101: LD_INT 75
75103: PUSH
75104: EMPTY
75105: LIST
75106: LIST
75107: PUSH
75108: EMPTY
75109: LIST
75110: LIST
75111: LIST
75112: LIST
75113: ADD
75114: ST_TO_ADDR
// if base_in_area_map [ base ] [ player_base_area ] then
75115: LD_EXP 143
75119: PUSH
75120: LD_VAR 0 1
75124: ARRAY
75125: PUSH
75126: LD_INT 25
75128: ARRAY
75129: IFFALSE 75199
// attack_hexes = attack_hexes ^ [ [ 117 , 77 ] , [ 131 , 77 ] , [ 142 , 72 ] , [ 125 , 62 ] , [ 111 , 61 ] ] ;
75131: LD_ADDR_VAR 0 3
75135: PUSH
75136: LD_VAR 0 3
75140: PUSH
75141: LD_INT 117
75143: PUSH
75144: LD_INT 77
75146: PUSH
75147: EMPTY
75148: LIST
75149: LIST
75150: PUSH
75151: LD_INT 131
75153: PUSH
75154: LD_INT 77
75156: PUSH
75157: EMPTY
75158: LIST
75159: LIST
75160: PUSH
75161: LD_INT 142
75163: PUSH
75164: LD_INT 72
75166: PUSH
75167: EMPTY
75168: LIST
75169: LIST
75170: PUSH
75171: LD_INT 125
75173: PUSH
75174: LD_INT 62
75176: PUSH
75177: EMPTY
75178: LIST
75179: LIST
75180: PUSH
75181: LD_INT 111
75183: PUSH
75184: LD_INT 61
75186: PUSH
75187: EMPTY
75188: LIST
75189: LIST
75190: PUSH
75191: EMPTY
75192: LIST
75193: LIST
75194: LIST
75195: LIST
75196: LIST
75197: ADD
75198: ST_TO_ADDR
// end else
75199: GO 75267
// if ai_attack_strategy [ base ] in [ 1 , 2 , 3 , 5 ] then
75201: LD_EXP 102
75205: PUSH
75206: LD_VAR 0 1
75210: ARRAY
75211: PUSH
75212: LD_INT 1
75214: PUSH
75215: LD_INT 2
75217: PUSH
75218: LD_INT 3
75220: PUSH
75221: LD_INT 5
75223: PUSH
75224: EMPTY
75225: LIST
75226: LIST
75227: LIST
75228: LIST
75229: IN
75230: IFFALSE 75267
// attack_hexes = attack_hexes ^ [ [ 82 , 30 ] , [ 91 , 39 ] ] ;
75232: LD_ADDR_VAR 0 3
75236: PUSH
75237: LD_VAR 0 3
75241: PUSH
75242: LD_INT 82
75244: PUSH
75245: LD_INT 30
75247: PUSH
75248: EMPTY
75249: LIST
75250: LIST
75251: PUSH
75252: LD_INT 91
75254: PUSH
75255: LD_INT 39
75257: PUSH
75258: EMPTY
75259: LIST
75260: LIST
75261: PUSH
75262: EMPTY
75263: LIST
75264: LIST
75265: ADD
75266: ST_TO_ADDR
// if ai_attack_strategy [ base ] in [ 1 , 2 , 3 , 5 ] or base_in_area_map [ base ] [ north_east_corner_area ] then
75267: LD_EXP 102
75271: PUSH
75272: LD_VAR 0 1
75276: ARRAY
75277: PUSH
75278: LD_INT 1
75280: PUSH
75281: LD_INT 2
75283: PUSH
75284: LD_INT 3
75286: PUSH
75287: LD_INT 5
75289: PUSH
75290: EMPTY
75291: LIST
75292: LIST
75293: LIST
75294: LIST
75295: IN
75296: PUSH
75297: LD_EXP 143
75301: PUSH
75302: LD_VAR 0 1
75306: ARRAY
75307: PUSH
75308: LD_INT 24
75310: ARRAY
75311: OR
75312: IFFALSE 75433
// begin attack_hexes = attack_hexes ^ [ [ 100 , 48 ] , [ 111 , 61 ] ] ;
75314: LD_ADDR_VAR 0 3
75318: PUSH
75319: LD_VAR 0 3
75323: PUSH
75324: LD_INT 100
75326: PUSH
75327: LD_INT 48
75329: PUSH
75330: EMPTY
75331: LIST
75332: LIST
75333: PUSH
75334: LD_INT 111
75336: PUSH
75337: LD_INT 61
75339: PUSH
75340: EMPTY
75341: LIST
75342: LIST
75343: PUSH
75344: EMPTY
75345: LIST
75346: LIST
75347: ADD
75348: ST_TO_ADDR
// if base_in_area_map [ base ] [ player_base_area ] then
75349: LD_EXP 143
75353: PUSH
75354: LD_VAR 0 1
75358: ARRAY
75359: PUSH
75360: LD_INT 25
75362: ARRAY
75363: IFFALSE 75433
// attack_hexes = attack_hexes ^ [ [ 125 , 62 ] , [ 142 , 72 ] , [ 131 , 77 ] , [ 117 , 77 ] , [ 105 , 75 ] ] ;
75365: LD_ADDR_VAR 0 3
75369: PUSH
75370: LD_VAR 0 3
75374: PUSH
75375: LD_INT 125
75377: PUSH
75378: LD_INT 62
75380: PUSH
75381: EMPTY
75382: LIST
75383: LIST
75384: PUSH
75385: LD_INT 142
75387: PUSH
75388: LD_INT 72
75390: PUSH
75391: EMPTY
75392: LIST
75393: LIST
75394: PUSH
75395: LD_INT 131
75397: PUSH
75398: LD_INT 77
75400: PUSH
75401: EMPTY
75402: LIST
75403: LIST
75404: PUSH
75405: LD_INT 117
75407: PUSH
75408: LD_INT 77
75410: PUSH
75411: EMPTY
75412: LIST
75413: LIST
75414: PUSH
75415: LD_INT 105
75417: PUSH
75418: LD_INT 75
75420: PUSH
75421: EMPTY
75422: LIST
75423: LIST
75424: PUSH
75425: EMPTY
75426: LIST
75427: LIST
75428: LIST
75429: LIST
75430: LIST
75431: ADD
75432: ST_TO_ADDR
// end ; attack_hexes = attack_hexes ^ [ [ 117 , 77 ] , [ 130 , 93 ] , [ 130 , 93 ] , [ 139 , 104 ] , [ 148 , 113 ] , [ 158 , 124 ] , [ 168 , 141 ] , [ 177 , 156 ] , [ 184 , 174 ] , [ 169 , 160 ] , [ 157 , 150 ] , [ 159 , 141 ] ] ;
75433: LD_ADDR_VAR 0 3
75437: PUSH
75438: LD_VAR 0 3
75442: PUSH
75443: LD_INT 117
75445: PUSH
75446: LD_INT 77
75448: PUSH
75449: EMPTY
75450: LIST
75451: LIST
75452: PUSH
75453: LD_INT 130
75455: PUSH
75456: LD_INT 93
75458: PUSH
75459: EMPTY
75460: LIST
75461: LIST
75462: PUSH
75463: LD_INT 130
75465: PUSH
75466: LD_INT 93
75468: PUSH
75469: EMPTY
75470: LIST
75471: LIST
75472: PUSH
75473: LD_INT 139
75475: PUSH
75476: LD_INT 104
75478: PUSH
75479: EMPTY
75480: LIST
75481: LIST
75482: PUSH
75483: LD_INT 148
75485: PUSH
75486: LD_INT 113
75488: PUSH
75489: EMPTY
75490: LIST
75491: LIST
75492: PUSH
75493: LD_INT 158
75495: PUSH
75496: LD_INT 124
75498: PUSH
75499: EMPTY
75500: LIST
75501: LIST
75502: PUSH
75503: LD_INT 168
75505: PUSH
75506: LD_INT 141
75508: PUSH
75509: EMPTY
75510: LIST
75511: LIST
75512: PUSH
75513: LD_INT 177
75515: PUSH
75516: LD_INT 156
75518: PUSH
75519: EMPTY
75520: LIST
75521: LIST
75522: PUSH
75523: LD_INT 184
75525: PUSH
75526: LD_INT 174
75528: PUSH
75529: EMPTY
75530: LIST
75531: LIST
75532: PUSH
75533: LD_INT 169
75535: PUSH
75536: LD_INT 160
75538: PUSH
75539: EMPTY
75540: LIST
75541: LIST
75542: PUSH
75543: LD_INT 157
75545: PUSH
75546: LD_INT 150
75548: PUSH
75549: EMPTY
75550: LIST
75551: LIST
75552: PUSH
75553: LD_INT 159
75555: PUSH
75556: LD_INT 141
75558: PUSH
75559: EMPTY
75560: LIST
75561: LIST
75562: PUSH
75563: EMPTY
75564: LIST
75565: LIST
75566: LIST
75567: LIST
75568: LIST
75569: LIST
75570: LIST
75571: LIST
75572: LIST
75573: LIST
75574: LIST
75575: LIST
75576: ADD
75577: ST_TO_ADDR
// attack_hexes = attack_hexes ^ [ [ 145 , 129 ] , [ 138 , 134 ] , [ 137 , 146 ] , [ 140 , 158 ] , [ 130 , 161 ] , [ 120 , 162 ] ] ;
75578: LD_ADDR_VAR 0 3
75582: PUSH
75583: LD_VAR 0 3
75587: PUSH
75588: LD_INT 145
75590: PUSH
75591: LD_INT 129
75593: PUSH
75594: EMPTY
75595: LIST
75596: LIST
75597: PUSH
75598: LD_INT 138
75600: PUSH
75601: LD_INT 134
75603: PUSH
75604: EMPTY
75605: LIST
75606: LIST
75607: PUSH
75608: LD_INT 137
75610: PUSH
75611: LD_INT 146
75613: PUSH
75614: EMPTY
75615: LIST
75616: LIST
75617: PUSH
75618: LD_INT 140
75620: PUSH
75621: LD_INT 158
75623: PUSH
75624: EMPTY
75625: LIST
75626: LIST
75627: PUSH
75628: LD_INT 130
75630: PUSH
75631: LD_INT 161
75633: PUSH
75634: EMPTY
75635: LIST
75636: LIST
75637: PUSH
75638: LD_INT 120
75640: PUSH
75641: LD_INT 162
75643: PUSH
75644: EMPTY
75645: LIST
75646: LIST
75647: PUSH
75648: EMPTY
75649: LIST
75650: LIST
75651: LIST
75652: LIST
75653: LIST
75654: LIST
75655: ADD
75656: ST_TO_ADDR
// behemoths_in_position = Replace ( behemoths_in_position , base , in_position_target [ base ] ) ;
75657: LD_ADDR_VAR 0 24
75661: PUSH
75662: LD_VAR 0 24
75666: PPUSH
75667: LD_VAR 0 1
75671: PPUSH
75672: LD_VAR 0 29
75676: PUSH
75677: LD_VAR 0 1
75681: ARRAY
75682: PPUSH
75683: CALL_OW 1
75687: ST_TO_ADDR
// end ; end ;
75688: GO 75691
75690: POP
// temp_list = UnitFilter ( retreat_vehicles_list [ base ] , [ f_alive ] ) ;
75691: LD_ADDR_VAR 0 10
75695: PUSH
75696: LD_VAR 0 20
75700: PUSH
75701: LD_VAR 0 1
75705: ARRAY
75706: PPUSH
75707: LD_INT 51
75709: PUSH
75710: EMPTY
75711: LIST
75712: PPUSH
75713: CALL_OW 72
75717: ST_TO_ADDR
// k = Researched ( GetBaseSide ( base ) , tech_Limteleport ) ;
75718: LD_ADDR_VAR 0 4
75722: PUSH
75723: LD_VAR 0 1
75727: PPUSH
75728: CALL 24885 0 1
75732: PPUSH
75733: LD_INT 37
75735: PPUSH
75736: CALL_OW 325
75740: ST_TO_ADDR
// for i in UnitFilter ( ai_vehicles_attack [ base ] , [ f_control , control_manual ] ) diff retreat_vehicles_list [ base ] do
75741: LD_ADDR_VAR 0 5
75745: PUSH
75746: LD_EXP 68
75750: PUSH
75751: LD_VAR 0 1
75755: ARRAY
75756: PPUSH
75757: LD_INT 33
75759: PUSH
75760: LD_INT 1
75762: PUSH
75763: EMPTY
75764: LIST
75765: LIST
75766: PPUSH
75767: CALL_OW 72
75771: PUSH
75772: LD_VAR 0 20
75776: PUSH
75777: LD_VAR 0 1
75781: ARRAY
75782: DIFF
75783: PUSH
75784: FOR_IN
75785: IFFALSE 75842
// if GetLives ( i ) <= 250 or ( not k and GetLives ( i ) <= 400 ) then
75787: LD_VAR 0 5
75791: PPUSH
75792: CALL_OW 256
75796: PUSH
75797: LD_INT 250
75799: LESSEQUAL
75800: PUSH
75801: LD_VAR 0 4
75805: NOT
75806: PUSH
75807: LD_VAR 0 5
75811: PPUSH
75812: CALL_OW 256
75816: PUSH
75817: LD_INT 400
75819: LESSEQUAL
75820: AND
75821: OR
75822: IFFALSE 75840
// temp_list = temp_list ^ i ;
75824: LD_ADDR_VAR 0 10
75828: PUSH
75829: LD_VAR 0 10
75833: PUSH
75834: LD_VAR 0 5
75838: ADD
75839: ST_TO_ADDR
75840: GO 75784
75842: POP
75843: POP
// retreat_vehicles_list = Replace ( retreat_vehicles_list , base , temp_list ) ;
75844: LD_ADDR_VAR 0 20
75848: PUSH
75849: LD_VAR 0 20
75853: PPUSH
75854: LD_VAR 0 1
75858: PPUSH
75859: LD_VAR 0 10
75863: PPUSH
75864: CALL_OW 1
75868: ST_TO_ADDR
// temp_list = UnitFilter ( retreat_mechanics_list [ base ] , [ f_alive ] ) ;
75869: LD_ADDR_VAR 0 10
75873: PUSH
75874: LD_VAR 0 21
75878: PUSH
75879: LD_VAR 0 1
75883: ARRAY
75884: PPUSH
75885: LD_INT 51
75887: PUSH
75888: EMPTY
75889: LIST
75890: PPUSH
75891: CALL_OW 72
75895: ST_TO_ADDR
// temp_list_2 = ai_mechanics_attack [ base ] diff retreat_mechanics_list [ base ] ;
75896: LD_ADDR_VAR 0 11
75900: PUSH
75901: LD_EXP 44
75905: PUSH
75906: LD_VAR 0 1
75910: ARRAY
75911: PUSH
75912: LD_VAR 0 21
75916: PUSH
75917: LD_VAR 0 1
75921: ARRAY
75922: DIFF
75923: ST_TO_ADDR
// for i = 1 to temp_list_2 - UnitFilter ( ai_vehicles_attack [ base ] , [ [ f_control , control_manual ] , [ f_ok ] ] ) do
75924: LD_ADDR_VAR 0 5
75928: PUSH
75929: DOUBLE
75930: LD_INT 1
75932: DEC
75933: ST_TO_ADDR
75934: LD_VAR 0 11
75938: PUSH
75939: LD_EXP 68
75943: PUSH
75944: LD_VAR 0 1
75948: ARRAY
75949: PPUSH
75950: LD_INT 33
75952: PUSH
75953: LD_INT 1
75955: PUSH
75956: EMPTY
75957: LIST
75958: LIST
75959: PUSH
75960: LD_INT 50
75962: PUSH
75963: EMPTY
75964: LIST
75965: PUSH
75966: EMPTY
75967: LIST
75968: LIST
75969: PPUSH
75970: CALL_OW 72
75974: MINUS
75975: PUSH
75976: FOR_TO
75977: IFFALSE 76068
// begin temp_unit = 0 ;
75979: LD_ADDR_VAR 0 9
75983: PUSH
75984: LD_INT 0
75986: ST_TO_ADDR
// for k in temp_list_2 do
75987: LD_ADDR_VAR 0 4
75991: PUSH
75992: LD_VAR 0 11
75996: PUSH
75997: FOR_IN
75998: IFFALSE 76038
// if not IsInUnit ( k ) in ai_vehicles_attack [ base ] then
76000: LD_VAR 0 4
76004: PPUSH
76005: CALL_OW 310
76009: PUSH
76010: LD_EXP 68
76014: PUSH
76015: LD_VAR 0 1
76019: ARRAY
76020: IN
76021: NOT
76022: IFFALSE 76036
// begin temp_unit = k ;
76024: LD_ADDR_VAR 0 9
76028: PUSH
76029: LD_VAR 0 4
76033: ST_TO_ADDR
// break ;
76034: GO 76038
// end ;
76036: GO 75997
76038: POP
76039: POP
// if temp_unit > 0 then
76040: LD_VAR 0 9
76044: PUSH
76045: LD_INT 0
76047: GREATER
76048: IFFALSE 76066
// begin temp_list = temp_list ^ temp_unit ;
76050: LD_ADDR_VAR 0 10
76054: PUSH
76055: LD_VAR 0 10
76059: PUSH
76060: LD_VAR 0 9
76064: ADD
76065: ST_TO_ADDR
// end ; end ;
76066: GO 75976
76068: POP
76069: POP
// retreat_mechanics_list = Replace ( retreat_mechanics_list , base , temp_list ) ;
76070: LD_ADDR_VAR 0 21
76074: PUSH
76075: LD_VAR 0 21
76079: PPUSH
76080: LD_VAR 0 1
76084: PPUSH
76085: LD_VAR 0 10
76089: PPUSH
76090: CALL_OW 1
76094: ST_TO_ADDR
// for i in retreat_vehicles_list [ base ] ^ retreat_mechanics_list [ base ] do
76095: LD_ADDR_VAR 0 5
76099: PUSH
76100: LD_VAR 0 20
76104: PUSH
76105: LD_VAR 0 1
76109: ARRAY
76110: PUSH
76111: LD_VAR 0 21
76115: PUSH
76116: LD_VAR 0 1
76120: ARRAY
76121: ADD
76122: PUSH
76123: FOR_IN
76124: IFFALSE 76697
// if IsInArea ( i , GetBaseArea ( base ) ) then
76126: LD_VAR 0 5
76130: PPUSH
76131: LD_VAR 0 1
76135: PPUSH
76136: CALL 24795 0 1
76140: PPUSH
76141: CALL_OW 308
76145: IFFALSE 76656
// begin if GetType ( i ) = unit_vehicle then
76147: LD_VAR 0 5
76151: PPUSH
76152: CALL_OW 247
76156: PUSH
76157: LD_INT 2
76159: EQUAL
76160: IFFALSE 76503
// begin temp_list = ai_vehicles_attack [ base ] diff i ;
76162: LD_ADDR_VAR 0 10
76166: PUSH
76167: LD_EXP 68
76171: PUSH
76172: LD_VAR 0 1
76176: ARRAY
76177: PUSH
76178: LD_VAR 0 5
76182: DIFF
76183: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
76184: LD_ADDR_EXP 68
76188: PUSH
76189: LD_EXP 68
76193: PPUSH
76194: LD_VAR 0 1
76198: PPUSH
76199: LD_VAR 0 10
76203: PPUSH
76204: CALL_OW 1
76208: ST_TO_ADDR
// case GetWeapon ( i ) of ru_time_lapser :
76209: LD_VAR 0 5
76213: PPUSH
76214: CALL_OW 264
76218: PUSH
76219: LD_INT 49
76221: DOUBLE
76222: EQUAL
76223: IFTRUE 76227
76225: GO 76277
76227: POP
// begin temp_list = ai_taufield_vehicles [ base ] ^ i ;
76228: LD_ADDR_VAR 0 10
76232: PUSH
76233: LD_EXP 100
76237: PUSH
76238: LD_VAR 0 1
76242: ARRAY
76243: PUSH
76244: LD_VAR 0 5
76248: ADD
76249: ST_TO_ADDR
// ai_taufield_vehicles = Replace ( ai_taufield_vehicles , base , temp_list ) ;
76250: LD_ADDR_EXP 100
76254: PUSH
76255: LD_EXP 100
76259: PPUSH
76260: LD_VAR 0 1
76264: PPUSH
76265: LD_VAR 0 10
76269: PPUSH
76270: CALL_OW 1
76274: ST_TO_ADDR
// end ; ar_selfpropelled_bomb :
76275: GO 76441
76277: LD_INT 29
76279: DOUBLE
76280: EQUAL
76281: IFTRUE 76285
76283: GO 76335
76285: POP
// begin temp_list = ai_implosion_vehicles [ base ] ^ i ;
76286: LD_ADDR_VAR 0 10
76290: PUSH
76291: LD_EXP 101
76295: PUSH
76296: LD_VAR 0 1
76300: ARRAY
76301: PUSH
76302: LD_VAR 0 5
76306: ADD
76307: ST_TO_ADDR
// ai_implosion_vehicles = Replace ( ai_implosion_vehicles , base , temp_list ) ;
76308: LD_ADDR_EXP 101
76312: PUSH
76313: LD_EXP 101
76317: PPUSH
76318: LD_VAR 0 1
76322: PPUSH
76323: LD_VAR 0 10
76327: PPUSH
76328: CALL_OW 1
76332: ST_TO_ADDR
// end ; 59 :
76333: GO 76441
76335: LD_INT 59
76337: DOUBLE
76338: EQUAL
76339: IFTRUE 76343
76341: GO 76393
76343: POP
// begin temp_list = ai_behemoths [ base ] ^ i ;
76344: LD_ADDR_VAR 0 10
76348: PUSH
76349: LD_EXP 103
76353: PUSH
76354: LD_VAR 0 1
76358: ARRAY
76359: PUSH
76360: LD_VAR 0 5
76364: ADD
76365: ST_TO_ADDR
// ai_behemoths = Replace ( ai_behemoths , base , temp_list ) ;
76366: LD_ADDR_EXP 103
76370: PUSH
76371: LD_EXP 103
76375: PPUSH
76376: LD_VAR 0 1
76380: PPUSH
76381: LD_VAR 0 10
76385: PPUSH
76386: CALL_OW 1
76390: ST_TO_ADDR
// end ; else
76391: GO 76441
76393: POP
// begin temp_list = ai_vehicles_defend [ base ] ^ i ;
76394: LD_ADDR_VAR 0 10
76398: PUSH
76399: LD_EXP 67
76403: PUSH
76404: LD_VAR 0 1
76408: ARRAY
76409: PUSH
76410: LD_VAR 0 5
76414: ADD
76415: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
76416: LD_ADDR_EXP 67
76420: PUSH
76421: LD_EXP 67
76425: PPUSH
76426: LD_VAR 0 1
76430: PPUSH
76431: LD_VAR 0 10
76435: PPUSH
76436: CALL_OW 1
76440: ST_TO_ADDR
// end ; end ; temp_list = retreat_vehicles_list [ base ] diff i ;
76441: LD_ADDR_VAR 0 10
76445: PUSH
76446: LD_VAR 0 20
76450: PUSH
76451: LD_VAR 0 1
76455: ARRAY
76456: PUSH
76457: LD_VAR 0 5
76461: DIFF
76462: ST_TO_ADDR
// retreat_vehicles_list = Replace ( retreat_vehicles_list , base , temp_list ) ;
76463: LD_ADDR_VAR 0 20
76467: PUSH
76468: LD_VAR 0 20
76472: PPUSH
76473: LD_VAR 0 1
76477: PPUSH
76478: LD_VAR 0 10
76482: PPUSH
76483: CALL_OW 1
76487: ST_TO_ADDR
// i = UnitsInside ( i ) ;
76488: LD_ADDR_VAR 0 5
76492: PUSH
76493: LD_VAR 0 5
76497: PPUSH
76498: CALL_OW 313
76502: ST_TO_ADDR
// end ; if i > 0 then
76503: LD_VAR 0 5
76507: PUSH
76508: LD_INT 0
76510: GREATER
76511: IFFALSE 76654
// begin temp_list = ai_mechanics_attack [ base ] diff i ;
76513: LD_ADDR_VAR 0 10
76517: PUSH
76518: LD_EXP 44
76522: PUSH
76523: LD_VAR 0 1
76527: ARRAY
76528: PUSH
76529: LD_VAR 0 5
76533: DIFF
76534: ST_TO_ADDR
// ai_mechanics_attack = Replace ( ai_mechanics_attack , base , temp_list ) ;
76535: LD_ADDR_EXP 44
76539: PUSH
76540: LD_EXP 44
76544: PPUSH
76545: LD_VAR 0 1
76549: PPUSH
76550: LD_VAR 0 10
76554: PPUSH
76555: CALL_OW 1
76559: ST_TO_ADDR
// temp_list = ai_mechanics_defend [ base ] ^ i ;
76560: LD_ADDR_VAR 0 10
76564: PUSH
76565: LD_EXP 43
76569: PUSH
76570: LD_VAR 0 1
76574: ARRAY
76575: PUSH
76576: LD_VAR 0 5
76580: ADD
76581: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , temp_list ) ;
76582: LD_ADDR_EXP 43
76586: PUSH
76587: LD_EXP 43
76591: PPUSH
76592: LD_VAR 0 1
76596: PPUSH
76597: LD_VAR 0 10
76601: PPUSH
76602: CALL_OW 1
76606: ST_TO_ADDR
// temp_list = retreat_mechanics_list [ base ] diff i ;
76607: LD_ADDR_VAR 0 10
76611: PUSH
76612: LD_VAR 0 21
76616: PUSH
76617: LD_VAR 0 1
76621: ARRAY
76622: PUSH
76623: LD_VAR 0 5
76627: DIFF
76628: ST_TO_ADDR
// retreat_mechanics_list = Replace ( retreat_mechanics_list , base , temp_list ) ;
76629: LD_ADDR_VAR 0 21
76633: PUSH
76634: LD_VAR 0 21
76638: PPUSH
76639: LD_VAR 0 1
76643: PPUSH
76644: LD_VAR 0 10
76648: PPUSH
76649: CALL_OW 1
76653: ST_TO_ADDR
// end ; end else
76654: GO 76695
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
76656: LD_VAR 0 5
76660: PPUSH
76661: LD_EXP 73
76665: PUSH
76666: LD_VAR 0 1
76670: ARRAY
76671: PUSH
76672: LD_INT 1
76674: ARRAY
76675: PPUSH
76676: LD_EXP 73
76680: PUSH
76681: LD_VAR 0 1
76685: ARRAY
76686: PUSH
76687: LD_INT 2
76689: ARRAY
76690: PPUSH
76691: CALL_OW 111
76695: GO 76123
76697: POP
76698: POP
// inside_ok = true ;
76699: LD_ADDR_VAR 0 14
76703: PUSH
76704: LD_INT 1
76706: ST_TO_ADDR
// for i in UnitFilter ( ai_vehicles_attack [ base ] diff retreat_vehicles_list [ base ] , [ [ f_control , control_manual ] , [ f_not , [ f_empty ] ] ] ) do
76707: LD_ADDR_VAR 0 5
76711: PUSH
76712: LD_EXP 68
76716: PUSH
76717: LD_VAR 0 1
76721: ARRAY
76722: PUSH
76723: LD_VAR 0 20
76727: PUSH
76728: LD_VAR 0 1
76732: ARRAY
76733: DIFF
76734: PPUSH
76735: LD_INT 33
76737: PUSH
76738: LD_INT 1
76740: PUSH
76741: EMPTY
76742: LIST
76743: LIST
76744: PUSH
76745: LD_INT 3
76747: PUSH
76748: LD_INT 58
76750: PUSH
76751: EMPTY
76752: LIST
76753: PUSH
76754: EMPTY
76755: LIST
76756: LIST
76757: PUSH
76758: EMPTY
76759: LIST
76760: LIST
76761: PPUSH
76762: CALL_OW 72
76766: PUSH
76767: FOR_IN
76768: IFFALSE 76827
// begin temp_unit = UnitsInside ( i ) [ 1 ] ;
76770: LD_ADDR_VAR 0 9
76774: PUSH
76775: LD_VAR 0 5
76779: PPUSH
76780: CALL_OW 313
76784: PUSH
76785: LD_INT 1
76787: ARRAY
76788: ST_TO_ADDR
// if not temp_unit in ai_mechanics_attack [ base ] then
76789: LD_VAR 0 9
76793: PUSH
76794: LD_EXP 44
76798: PUSH
76799: LD_VAR 0 1
76803: ARRAY
76804: IN
76805: NOT
76806: IFFALSE 76825
// begin ComExitVehicle ( temp_unit ) ;
76808: LD_VAR 0 9
76812: PPUSH
76813: CALL_OW 121
// inside_ok = false ;
76817: LD_ADDR_VAR 0 14
76821: PUSH
76822: LD_INT 0
76824: ST_TO_ADDR
// end ; end ;
76825: GO 76767
76827: POP
76828: POP
// temp_list = UnitFilter ( ai_vehicles_attack [ base ] , [ [ f_control , control_manual ] , [ f_ok ] , [ f_empty ] ] ) ;
76829: LD_ADDR_VAR 0 10
76833: PUSH
76834: LD_EXP 68
76838: PUSH
76839: LD_VAR 0 1
76843: ARRAY
76844: PPUSH
76845: LD_INT 33
76847: PUSH
76848: LD_INT 1
76850: PUSH
76851: EMPTY
76852: LIST
76853: LIST
76854: PUSH
76855: LD_INT 50
76857: PUSH
76858: EMPTY
76859: LIST
76860: PUSH
76861: LD_INT 58
76863: PUSH
76864: EMPTY
76865: LIST
76866: PUSH
76867: EMPTY
76868: LIST
76869: LIST
76870: LIST
76871: PPUSH
76872: CALL_OW 72
76876: ST_TO_ADDR
// if temp_list > 0 then
76877: LD_VAR 0 10
76881: PUSH
76882: LD_INT 0
76884: GREATER
76885: IFFALSE 77104
// begin temp_list_2 = UnitFilter ( ai_mechanics_attack [ base ] diff retreat_mechanics_list [ base ] , [ f_not , [ f_driving ] ] ) ;
76887: LD_ADDR_VAR 0 11
76891: PUSH
76892: LD_EXP 44
76896: PUSH
76897: LD_VAR 0 1
76901: ARRAY
76902: PUSH
76903: LD_VAR 0 21
76907: PUSH
76908: LD_VAR 0 1
76912: ARRAY
76913: DIFF
76914: PPUSH
76915: LD_INT 3
76917: PUSH
76918: LD_INT 55
76920: PUSH
76921: EMPTY
76922: LIST
76923: PUSH
76924: EMPTY
76925: LIST
76926: LIST
76927: PPUSH
76928: CALL_OW 72
76932: ST_TO_ADDR
// for i in temp_list do
76933: LD_ADDR_VAR 0 5
76937: PUSH
76938: LD_VAR 0 10
76942: PUSH
76943: FOR_IN
76944: IFFALSE 77100
// begin if temp_list_2 = 0 then
76946: LD_VAR 0 11
76950: PUSH
76951: LD_INT 0
76953: EQUAL
76954: IFFALSE 76958
// break ;
76956: GO 77100
// temp_unit = AllNearestUnitToUnit ( temp_list_2 , i ) ;
76958: LD_ADDR_VAR 0 9
76962: PUSH
76963: LD_VAR 0 11
76967: PPUSH
76968: LD_VAR 0 5
76972: PPUSH
76973: CALL_OW 75
76977: ST_TO_ADDR
// k = IsInUnit ( temp_unit ) ;
76978: LD_ADDR_VAR 0 4
76982: PUSH
76983: LD_VAR 0 9
76987: PPUSH
76988: CALL_OW 310
76992: ST_TO_ADDR
// if k <> i then
76993: LD_VAR 0 4
76997: PUSH
76998: LD_VAR 0 5
77002: NONEQUAL
77003: IFFALSE 77082
// if k > 0 then
77005: LD_VAR 0 4
77009: PUSH
77010: LD_INT 0
77012: GREATER
77013: IFFALSE 77068
// case GetType ( k ) of unit_vehicle :
77015: LD_VAR 0 4
77019: PPUSH
77020: CALL_OW 247
77024: PUSH
77025: LD_INT 2
77027: DOUBLE
77028: EQUAL
77029: IFTRUE 77033
77031: GO 77045
77033: POP
// ComExitVehicle ( temp_unit ) ; unit_building :
77034: LD_VAR 0 9
77038: PPUSH
77039: CALL_OW 121
77043: GO 77066
77045: LD_INT 3
77047: DOUBLE
77048: EQUAL
77049: IFTRUE 77053
77051: GO 77065
77053: POP
// ComExitBuilding ( temp_unit ) ; end else
77054: LD_VAR 0 9
77058: PPUSH
77059: CALL_OW 122
77063: GO 77066
77065: POP
77066: GO 77082
// ComEnterUnit ( temp_unit , i ) ;
77068: LD_VAR 0 9
77072: PPUSH
77073: LD_VAR 0 5
77077: PPUSH
77078: CALL_OW 120
// temp_list_2 = temp_list_2 diff temp_unit ;
77082: LD_ADDR_VAR 0 11
77086: PUSH
77087: LD_VAR 0 11
77091: PUSH
77092: LD_VAR 0 9
77096: DIFF
77097: ST_TO_ADDR
// end ;
77098: GO 76943
77100: POP
77101: POP
// end else
77102: GO 77133
// if inside_ok then
77104: LD_VAR 0 14
77108: IFFALSE 77133
// all_are_ready = Replace ( all_are_ready , base , true ) ;
77110: LD_ADDR_VAR 0 19
77114: PUSH
77115: LD_VAR 0 19
77119: PPUSH
77120: LD_VAR 0 1
77124: PPUSH
77125: LD_INT 1
77127: PPUSH
77128: CALL_OW 1
77132: ST_TO_ADDR
// if not all_are_ready [ base ] then
77133: LD_VAR 0 19
77137: PUSH
77138: LD_VAR 0 1
77142: ARRAY
77143: NOT
77144: IFFALSE 77148
// continue ;
77146: GO 70200
// if base = 3 and american_arabian_alliance and am_ar_attack_alli_together then
77148: LD_VAR 0 1
77152: PUSH
77153: LD_INT 3
77155: EQUAL
77156: PUSH
77157: LD_EXP 123
77161: AND
77162: PUSH
77163: LD_EXP 126
77167: AND
77168: IFFALSE 77172
// continue ;
77170: GO 70200
// if base = 4 and american_arabian_alliance and am_ar_attack_alli_together and not all_are_ready [ 3 ] then
77172: LD_VAR 0 1
77176: PUSH
77177: LD_INT 4
77179: EQUAL
77180: PUSH
77181: LD_EXP 123
77185: AND
77186: PUSH
77187: LD_EXP 126
77191: AND
77192: PUSH
77193: LD_VAR 0 19
77197: PUSH
77198: LD_INT 3
77200: ARRAY
77201: NOT
77202: AND
77203: IFFALSE 77207
// continue ;
77205: GO 70200
// if base = 4 and american_arabian_alliance and am_ar_attack_alli_together then
77207: LD_VAR 0 1
77211: PUSH
77212: LD_INT 4
77214: EQUAL
77215: PUSH
77216: LD_EXP 123
77220: AND
77221: PUSH
77222: LD_EXP 126
77226: AND
77227: IFFALSE 77275
// attacking_vehicles = ( ai_vehicles_attack [ 3 ] ^ ai_vehicles_attack [ 4 ] ) diff ( retreat_vehicles_list [ 3 ] ^ retreat_vehicles_list [ 4 ] ) else
77229: LD_ADDR_VAR 0 15
77233: PUSH
77234: LD_EXP 68
77238: PUSH
77239: LD_INT 3
77241: ARRAY
77242: PUSH
77243: LD_EXP 68
77247: PUSH
77248: LD_INT 4
77250: ARRAY
77251: ADD
77252: PUSH
77253: LD_VAR 0 20
77257: PUSH
77258: LD_INT 3
77260: ARRAY
77261: PUSH
77262: LD_VAR 0 20
77266: PUSH
77267: LD_INT 4
77269: ARRAY
77270: ADD
77271: DIFF
77272: ST_TO_ADDR
77273: GO 77303
// attacking_vehicles = ai_vehicles_attack [ base ] diff retreat_vehicles_list [ base ] ;
77275: LD_ADDR_VAR 0 15
77279: PUSH
77280: LD_EXP 68
77284: PUSH
77285: LD_VAR 0 1
77289: ARRAY
77290: PUSH
77291: LD_VAR 0 20
77295: PUSH
77296: LD_VAR 0 1
77300: ARRAY
77301: DIFF
77302: ST_TO_ADDR
// attacking_vehicles = UnitFilter ( attacking_vehicles , [ f_ok ] ) ;
77303: LD_ADDR_VAR 0 15
77307: PUSH
77308: LD_VAR 0 15
77312: PPUSH
77313: LD_INT 50
77315: PUSH
77316: EMPTY
77317: LIST
77318: PPUSH
77319: CALL_OW 72
77323: ST_TO_ADDR
// if UnitFilter ( attacking_vehicles , [ f_not , [ f_weapon , 59 ] ] ) > 6 then
77324: LD_VAR 0 15
77328: PPUSH
77329: LD_INT 3
77331: PUSH
77332: LD_INT 34
77334: PUSH
77335: LD_INT 59
77337: PUSH
77338: EMPTY
77339: LIST
77340: LIST
77341: PUSH
77342: EMPTY
77343: LIST
77344: LIST
77345: PPUSH
77346: CALL_OW 72
77350: PUSH
77351: LD_INT 6
77353: GREATER
77354: IFFALSE 77372
// vehicle_dist = vehicle_dist_base + 2 else
77356: LD_ADDR_VAR 0 18
77360: PUSH
77361: LD_VAR 0 30
77365: PUSH
77366: LD_INT 2
77368: PLUS
77369: ST_TO_ADDR
77370: GO 77382
// vehicle_dist = vehicle_dist_base ;
77372: LD_ADDR_VAR 0 18
77376: PUSH
77377: LD_VAR 0 30
77381: ST_TO_ADDR
// temp_list_2 = [ 9999999 , 9999999 , 9999999 ] ;
77382: LD_ADDR_VAR 0 11
77386: PUSH
77387: LD_INT 9999999
77389: PUSH
77390: LD_INT 9999999
77392: PUSH
77393: LD_INT 9999999
77395: PUSH
77396: EMPTY
77397: LIST
77398: LIST
77399: LIST
77400: ST_TO_ADDR
// for i in UnitFilter ( attacking_vehicles , [ [ f_not , [ f_weapon , ru_time_lapser ] ] , [ f_not , [ f_weapon , ar_selfpropelled_bomb ] , [ f_not , [ f_weapon , ru_rocket ] ] , [ f_not , [ f_weapon , 59 ] ] ] ] ) do
77401: LD_ADDR_VAR 0 5
77405: PUSH
77406: LD_VAR 0 15
77410: PPUSH
77411: LD_INT 3
77413: PUSH
77414: LD_INT 34
77416: PUSH
77417: LD_INT 49
77419: PUSH
77420: EMPTY
77421: LIST
77422: LIST
77423: PUSH
77424: EMPTY
77425: LIST
77426: LIST
77427: PUSH
77428: LD_INT 3
77430: PUSH
77431: LD_INT 34
77433: PUSH
77434: LD_INT 29
77436: PUSH
77437: EMPTY
77438: LIST
77439: LIST
77440: PUSH
77441: LD_INT 3
77443: PUSH
77444: LD_INT 34
77446: PUSH
77447: LD_INT 47
77449: PUSH
77450: EMPTY
77451: LIST
77452: LIST
77453: PUSH
77454: EMPTY
77455: LIST
77456: LIST
77457: PUSH
77458: LD_INT 3
77460: PUSH
77461: LD_INT 34
77463: PUSH
77464: LD_INT 59
77466: PUSH
77467: EMPTY
77468: LIST
77469: LIST
77470: PUSH
77471: EMPTY
77472: LIST
77473: LIST
77474: PUSH
77475: EMPTY
77476: LIST
77477: LIST
77478: LIST
77479: LIST
77480: PUSH
77481: EMPTY
77482: LIST
77483: LIST
77484: PPUSH
77485: CALL_OW 72
77489: PUSH
77490: FOR_IN
77491: IFFALSE 77546
// if ai_attacking_unit_hex_index [ i ] < temp_list_2 [ 1 ] then
77493: LD_EXP 93
77497: PUSH
77498: LD_VAR 0 5
77502: ARRAY
77503: PUSH
77504: LD_VAR 0 11
77508: PUSH
77509: LD_INT 1
77511: ARRAY
77512: LESS
77513: IFFALSE 77544
// temp_list_2 = Replace ( temp_list_2 , 1 , ai_attacking_unit_hex_index [ i ] ) ;
77515: LD_ADDR_VAR 0 11
77519: PUSH
77520: LD_VAR 0 11
77524: PPUSH
77525: LD_INT 1
77527: PPUSH
77528: LD_EXP 93
77532: PUSH
77533: LD_VAR 0 5
77537: ARRAY
77538: PPUSH
77539: CALL_OW 1
77543: ST_TO_ADDR
77544: GO 77490
77546: POP
77547: POP
// for i in UnitFilter ( attacking_vehicles , [ [ f_or , [ f_weapon , ru_time_lapser ] , [ f_weapon , ar_selfpropelled_bomb ] ] ] ) do
77548: LD_ADDR_VAR 0 5
77552: PUSH
77553: LD_VAR 0 15
77557: PPUSH
77558: LD_INT 2
77560: PUSH
77561: LD_INT 34
77563: PUSH
77564: LD_INT 49
77566: PUSH
77567: EMPTY
77568: LIST
77569: LIST
77570: PUSH
77571: LD_INT 34
77573: PUSH
77574: LD_INT 29
77576: PUSH
77577: EMPTY
77578: LIST
77579: LIST
77580: PUSH
77581: EMPTY
77582: LIST
77583: LIST
77584: LIST
77585: PUSH
77586: EMPTY
77587: LIST
77588: PPUSH
77589: CALL_OW 72
77593: PUSH
77594: FOR_IN
77595: IFFALSE 77650
// if ai_attacking_unit_hex_index [ i ] < temp_list_2 [ 2 ] then
77597: LD_EXP 93
77601: PUSH
77602: LD_VAR 0 5
77606: ARRAY
77607: PUSH
77608: LD_VAR 0 11
77612: PUSH
77613: LD_INT 2
77615: ARRAY
77616: LESS
77617: IFFALSE 77648
// temp_list_2 = Replace ( temp_list_2 , 2 , ai_attacking_unit_hex_index [ i ] ) ;
77619: LD_ADDR_VAR 0 11
77623: PUSH
77624: LD_VAR 0 11
77628: PPUSH
77629: LD_INT 2
77631: PPUSH
77632: LD_EXP 93
77636: PUSH
77637: LD_VAR 0 5
77641: ARRAY
77642: PPUSH
77643: CALL_OW 1
77647: ST_TO_ADDR
77648: GO 77594
77650: POP
77651: POP
// temp_list_3 = [ ] ;
77652: LD_ADDR_VAR 0 7
77656: PUSH
77657: EMPTY
77658: ST_TO_ADDR
// if temp_list_2 [ 2 ] <= attack_hexes and temp_list_2 [ 2 ] > 1 then
77659: LD_VAR 0 11
77663: PUSH
77664: LD_INT 2
77666: ARRAY
77667: PUSH
77668: LD_VAR 0 3
77672: LESSEQUAL
77673: PUSH
77674: LD_VAR 0 11
77678: PUSH
77679: LD_INT 2
77681: ARRAY
77682: PUSH
77683: LD_INT 1
77685: GREATER
77686: AND
77687: IFFALSE 77954
// begin temp_list = [ attack_hexes [ temp_list_2 [ 2 ] - 1 ] , attack_hexes [ temp_list_2 [ 2 ] ] ] ;
77689: LD_ADDR_VAR 0 10
77693: PUSH
77694: LD_VAR 0 3
77698: PUSH
77699: LD_VAR 0 11
77703: PUSH
77704: LD_INT 2
77706: ARRAY
77707: PUSH
77708: LD_INT 1
77710: MINUS
77711: ARRAY
77712: PUSH
77713: LD_VAR 0 3
77717: PUSH
77718: LD_VAR 0 11
77722: PUSH
77723: LD_INT 2
77725: ARRAY
77726: ARRAY
77727: PUSH
77728: EMPTY
77729: LIST
77730: LIST
77731: ST_TO_ADDR
// k = AI_GetTurnDirection ( temp_list [ 1 ] [ 1 ] , temp_list [ 1 ] [ 2 ] , temp_list [ 2 ] [ 1 ] , temp_list [ 2 ] [ 2 ] ) ;
77732: LD_ADDR_VAR 0 4
77736: PUSH
77737: LD_VAR 0 10
77741: PUSH
77742: LD_INT 1
77744: ARRAY
77745: PUSH
77746: LD_INT 1
77748: ARRAY
77749: PPUSH
77750: LD_VAR 0 10
77754: PUSH
77755: LD_INT 1
77757: ARRAY
77758: PUSH
77759: LD_INT 2
77761: ARRAY
77762: PPUSH
77763: LD_VAR 0 10
77767: PUSH
77768: LD_INT 2
77770: ARRAY
77771: PUSH
77772: LD_INT 1
77774: ARRAY
77775: PPUSH
77776: LD_VAR 0 10
77780: PUSH
77781: LD_INT 2
77783: ARRAY
77784: PUSH
77785: LD_INT 2
77787: ARRAY
77788: PPUSH
77789: CALL 18897 0 4
77793: ST_TO_ADDR
// dist = - 1 ;
77794: LD_ADDR_VAR 0 12
77798: PUSH
77799: LD_INT 1
77801: NEG
77802: ST_TO_ADDR
// for i in UnitFilter ( attacking_vehicles , [ [ f_or , [ f_weapon , ru_time_lapser ] , [ f_weapon , ar_selfpropelled_bomb ] ] ] ) do
77803: LD_ADDR_VAR 0 5
77807: PUSH
77808: LD_VAR 0 15
77812: PPUSH
77813: LD_INT 2
77815: PUSH
77816: LD_INT 34
77818: PUSH
77819: LD_INT 49
77821: PUSH
77822: EMPTY
77823: LIST
77824: LIST
77825: PUSH
77826: LD_INT 34
77828: PUSH
77829: LD_INT 29
77831: PUSH
77832: EMPTY
77833: LIST
77834: LIST
77835: PUSH
77836: EMPTY
77837: LIST
77838: LIST
77839: LIST
77840: PUSH
77841: EMPTY
77842: LIST
77843: PPUSH
77844: CALL_OW 72
77848: PUSH
77849: FOR_IN
77850: IFFALSE 77952
// begin g = GetDistUnitXY ( i , temp_list [ 2 ] [ 1 ] , temp_list [ 2 ] [ 2 ] ) ;
77852: LD_ADDR_VAR 0 6
77856: PUSH
77857: LD_VAR 0 5
77861: PPUSH
77862: LD_VAR 0 10
77866: PUSH
77867: LD_INT 2
77869: ARRAY
77870: PUSH
77871: LD_INT 1
77873: ARRAY
77874: PPUSH
77875: LD_VAR 0 10
77879: PUSH
77880: LD_INT 2
77882: ARRAY
77883: PUSH
77884: LD_INT 2
77886: ARRAY
77887: PPUSH
77888: CALL_OW 297
77892: ST_TO_ADDR
// if g > dist then
77893: LD_VAR 0 6
77897: PUSH
77898: LD_VAR 0 12
77902: GREATER
77903: IFFALSE 77950
// begin dist = g ;
77905: LD_ADDR_VAR 0 12
77909: PUSH
77910: LD_VAR 0 6
77914: ST_TO_ADDR
// temp_list_3 = [ GetX ( i ) , GetY ( i ) , k ] ;
77915: LD_ADDR_VAR 0 7
77919: PUSH
77920: LD_VAR 0 5
77924: PPUSH
77925: CALL_OW 250
77929: PUSH
77930: LD_VAR 0 5
77934: PPUSH
77935: CALL_OW 251
77939: PUSH
77940: LD_VAR 0 4
77944: PUSH
77945: EMPTY
77946: LIST
77947: LIST
77948: LIST
77949: ST_TO_ADDR
// end ; end ;
77950: GO 77849
77952: POP
77953: POP
// end ; behe_in_pos = true ;
77954: LD_ADDR_VAR 0 16
77958: PUSH
77959: LD_INT 1
77961: ST_TO_ADDR
// one_nonbehe_in_pos = false ;
77962: LD_ADDR_VAR 0 17
77966: PUSH
77967: LD_INT 0
77969: ST_TO_ADDR
// for i in attacking_vehicles do
77970: LD_ADDR_VAR 0 5
77974: PUSH
77975: LD_VAR 0 15
77979: PUSH
77980: FOR_IN
77981: IFFALSE 79913
// if GetWeapon ( i ) = 59 then
77983: LD_VAR 0 5
77987: PPUSH
77988: CALL_OW 264
77992: PUSH
77993: LD_INT 59
77995: EQUAL
77996: IFFALSE 78604
// begin if ai_attacking_unit_hex_index [ i ] + 1 <= behemoth_lineup_hexes_indexes [ base ] [ in_position_target [ base ] ] or ( behemoths_in_position [ base ] = in_position_target [ base ] and nonbehemoths_in_position [ base ] = in_position_target [ base ] ) then
77998: LD_EXP 93
78002: PUSH
78003: LD_VAR 0 5
78007: ARRAY
78008: PUSH
78009: LD_INT 1
78011: PLUS
78012: PUSH
78013: LD_VAR 0 26
78017: PUSH
78018: LD_VAR 0 1
78022: ARRAY
78023: PUSH
78024: LD_VAR 0 29
78028: PUSH
78029: LD_VAR 0 1
78033: ARRAY
78034: ARRAY
78035: LESSEQUAL
78036: PUSH
78037: LD_VAR 0 24
78041: PUSH
78042: LD_VAR 0 1
78046: ARRAY
78047: PUSH
78048: LD_VAR 0 29
78052: PUSH
78053: LD_VAR 0 1
78057: ARRAY
78058: EQUAL
78059: PUSH
78060: LD_VAR 0 25
78064: PUSH
78065: LD_VAR 0 1
78069: ARRAY
78070: PUSH
78071: LD_VAR 0 29
78075: PUSH
78076: LD_VAR 0 1
78080: ARRAY
78081: EQUAL
78082: AND
78083: OR
78084: IFFALSE 78455
// begin if GetDistUnitXY ( i , behemoth_attack_hexes [ i ] [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , behemoth_attack_hexes [ i ] [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) <= behemoth_dist then
78086: LD_VAR 0 5
78090: PPUSH
78091: LD_VAR 0 23
78095: PUSH
78096: LD_VAR 0 5
78100: ARRAY
78101: PUSH
78102: LD_EXP 93
78106: PUSH
78107: LD_VAR 0 5
78111: ARRAY
78112: ARRAY
78113: PUSH
78114: LD_INT 1
78116: ARRAY
78117: PPUSH
78118: LD_VAR 0 23
78122: PUSH
78123: LD_VAR 0 5
78127: ARRAY
78128: PUSH
78129: LD_EXP 93
78133: PUSH
78134: LD_VAR 0 5
78138: ARRAY
78139: ARRAY
78140: PUSH
78141: LD_INT 2
78143: ARRAY
78144: PPUSH
78145: CALL_OW 297
78149: PUSH
78150: LD_VAR 0 22
78154: LESSEQUAL
78155: IFFALSE 78455
// begin ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , i , ai_attacking_unit_hex_index [ i ] + 1 ) ;
78157: LD_ADDR_EXP 93
78161: PUSH
78162: LD_EXP 93
78166: PPUSH
78167: LD_VAR 0 5
78171: PPUSH
78172: LD_EXP 93
78176: PUSH
78177: LD_VAR 0 5
78181: ARRAY
78182: PUSH
78183: LD_INT 1
78185: PLUS
78186: PPUSH
78187: CALL_OW 1
78191: ST_TO_ADDR
// if ai_attacking_unit_hex_index [ i ] > behemoth_attack_hexes [ i ] then
78192: LD_EXP 93
78196: PUSH
78197: LD_VAR 0 5
78201: ARRAY
78202: PUSH
78203: LD_VAR 0 23
78207: PUSH
78208: LD_VAR 0 5
78212: ARRAY
78213: GREATER
78214: IFFALSE 78328
// begin temp_list = ai_vehicles_attack [ base ] diff i ;
78216: LD_ADDR_VAR 0 10
78220: PUSH
78221: LD_EXP 68
78225: PUSH
78226: LD_VAR 0 1
78230: ARRAY
78231: PUSH
78232: LD_VAR 0 5
78236: DIFF
78237: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
78238: LD_ADDR_EXP 68
78242: PUSH
78243: LD_EXP 68
78247: PPUSH
78248: LD_VAR 0 1
78252: PPUSH
78253: LD_VAR 0 10
78257: PPUSH
78258: CALL_OW 1
78262: ST_TO_ADDR
// attacking_vehicles = attacking_vehicles diff i ;
78263: LD_ADDR_VAR 0 15
78267: PUSH
78268: LD_VAR 0 15
78272: PUSH
78273: LD_VAR 0 5
78277: DIFF
78278: ST_TO_ADDR
// temp_list = ai_behemoths [ base ] ^ i ;
78279: LD_ADDR_VAR 0 10
78283: PUSH
78284: LD_EXP 103
78288: PUSH
78289: LD_VAR 0 1
78293: ARRAY
78294: PUSH
78295: LD_VAR 0 5
78299: ADD
78300: ST_TO_ADDR
// ai_behemoths = Replace ( ai_behemoths , base , temp_list ) ;
78301: LD_ADDR_EXP 103
78305: PUSH
78306: LD_EXP 103
78310: PPUSH
78311: LD_VAR 0 1
78315: PPUSH
78316: LD_VAR 0 10
78320: PPUSH
78321: CALL_OW 1
78325: ST_TO_ADDR
// continue ;
78326: GO 77980
// end ; if behemoths_in_position [ base ] = in_position_target [ base ] and behemoth_lineup_hexes_indexes [ base ] >= in_position_target [ base ] + 1 then
78328: LD_VAR 0 24
78332: PUSH
78333: LD_VAR 0 1
78337: ARRAY
78338: PUSH
78339: LD_VAR 0 29
78343: PUSH
78344: LD_VAR 0 1
78348: ARRAY
78349: EQUAL
78350: PUSH
78351: LD_VAR 0 26
78355: PUSH
78356: LD_VAR 0 1
78360: ARRAY
78361: PUSH
78362: LD_VAR 0 29
78366: PUSH
78367: LD_VAR 0 1
78371: ARRAY
78372: PUSH
78373: LD_INT 1
78375: PLUS
78376: GREATEREQUAL
78377: AND
78378: IFFALSE 78455
// if ai_attacking_unit_hex_index [ i ] = behemoth_lineup_hexes_indexes [ base ] [ in_position_target [ base ] + 1 ] then
78380: LD_EXP 93
78384: PUSH
78385: LD_VAR 0 5
78389: ARRAY
78390: PUSH
78391: LD_VAR 0 26
78395: PUSH
78396: LD_VAR 0 1
78400: ARRAY
78401: PUSH
78402: LD_VAR 0 29
78406: PUSH
78407: LD_VAR 0 1
78411: ARRAY
78412: PUSH
78413: LD_INT 1
78415: PLUS
78416: ARRAY
78417: EQUAL
78418: IFFALSE 78455
// begin in_position_target = Replace ( in_position_target , base , in_position_target [ base ] + 1 ) ;
78420: LD_ADDR_VAR 0 29
78424: PUSH
78425: LD_VAR 0 29
78429: PPUSH
78430: LD_VAR 0 1
78434: PPUSH
78435: LD_VAR 0 29
78439: PUSH
78440: LD_VAR 0 1
78444: ARRAY
78445: PUSH
78446: LD_INT 1
78448: PLUS
78449: PPUSH
78450: CALL_OW 1
78454: ST_TO_ADDR
// end ; end ; end ; if behemoths_in_position [ base ] <> in_position_target [ base ] then
78455: LD_VAR 0 24
78459: PUSH
78460: LD_VAR 0 1
78464: ARRAY
78465: PUSH
78466: LD_VAR 0 29
78470: PUSH
78471: LD_VAR 0 1
78475: ARRAY
78476: NONEQUAL
78477: IFFALSE 78602
// begin if ai_attacking_unit_hex_index [ i ] <> behemoth_lineup_hexes_indexes [ base ] [ in_position_target [ base ] ] then
78479: LD_EXP 93
78483: PUSH
78484: LD_VAR 0 5
78488: ARRAY
78489: PUSH
78490: LD_VAR 0 26
78494: PUSH
78495: LD_VAR 0 1
78499: ARRAY
78500: PUSH
78501: LD_VAR 0 29
78505: PUSH
78506: LD_VAR 0 1
78510: ARRAY
78511: ARRAY
78512: NONEQUAL
78513: IFFALSE 78525
// behe_in_pos = false else
78515: LD_ADDR_VAR 0 16
78519: PUSH
78520: LD_INT 0
78522: ST_TO_ADDR
78523: GO 78602
// if GetDistUnitXY ( i , behemoth_attack_hexes [ i ] [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , behemoth_attack_hexes [ i ] [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) > 2 then
78525: LD_VAR 0 5
78529: PPUSH
78530: LD_VAR 0 23
78534: PUSH
78535: LD_VAR 0 5
78539: ARRAY
78540: PUSH
78541: LD_EXP 93
78545: PUSH
78546: LD_VAR 0 5
78550: ARRAY
78551: ARRAY
78552: PUSH
78553: LD_INT 1
78555: ARRAY
78556: PPUSH
78557: LD_VAR 0 23
78561: PUSH
78562: LD_VAR 0 5
78566: ARRAY
78567: PUSH
78568: LD_EXP 93
78572: PUSH
78573: LD_VAR 0 5
78577: ARRAY
78578: ARRAY
78579: PUSH
78580: LD_INT 2
78582: ARRAY
78583: PPUSH
78584: CALL_OW 297
78588: PUSH
78589: LD_INT 2
78591: GREATER
78592: IFFALSE 78602
// behe_in_pos = false ;
78594: LD_ADDR_VAR 0 16
78598: PUSH
78599: LD_INT 0
78601: ST_TO_ADDR
// end ; end else
78602: GO 79911
// if ai_attacking_unit_hex_index [ i ] <= attack_hexes then
78604: LD_EXP 93
78608: PUSH
78609: LD_VAR 0 5
78613: ARRAY
78614: PUSH
78615: LD_VAR 0 3
78619: LESSEQUAL
78620: IFFALSE 79911
// begin if behemoths_in_position [ base ] <> in_position_target [ base ] then
78622: LD_VAR 0 24
78626: PUSH
78627: LD_VAR 0 1
78631: ARRAY
78632: PUSH
78633: LD_VAR 0 29
78637: PUSH
78638: LD_VAR 0 1
78642: ARRAY
78643: NONEQUAL
78644: IFFALSE 78748
// if attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] = nonbehemoth_wait_for_behemoth_hexes [ base ] [ in_position_target [ base ] ] [ 1 ] and attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] = nonbehemoth_wait_for_behemoth_hexes [ base ] [ in_position_target [ base ] ] [ 2 ] then
78646: LD_VAR 0 3
78650: PUSH
78651: LD_EXP 93
78655: PUSH
78656: LD_VAR 0 5
78660: ARRAY
78661: ARRAY
78662: PUSH
78663: LD_INT 1
78665: ARRAY
78666: PUSH
78667: LD_VAR 0 27
78671: PUSH
78672: LD_VAR 0 1
78676: ARRAY
78677: PUSH
78678: LD_VAR 0 29
78682: PUSH
78683: LD_VAR 0 1
78687: ARRAY
78688: ARRAY
78689: PUSH
78690: LD_INT 1
78692: ARRAY
78693: EQUAL
78694: PUSH
78695: LD_VAR 0 3
78699: PUSH
78700: LD_EXP 93
78704: PUSH
78705: LD_VAR 0 5
78709: ARRAY
78710: ARRAY
78711: PUSH
78712: LD_INT 2
78714: ARRAY
78715: PUSH
78716: LD_VAR 0 27
78720: PUSH
78721: LD_VAR 0 1
78725: ARRAY
78726: PUSH
78727: LD_VAR 0 29
78731: PUSH
78732: LD_VAR 0 1
78736: ARRAY
78737: ARRAY
78738: PUSH
78739: LD_INT 2
78741: ARRAY
78742: EQUAL
78743: AND
78744: IFFALSE 78748
// continue ;
78746: GO 77980
// temp_value = false ;
78748: LD_ADDR_VAR 0 13
78752: PUSH
78753: LD_INT 0
78755: ST_TO_ADDR
// if not temp_value and ai_attacking_unit_hex_index [ i ] + 1 <= attack_hexes then
78756: LD_VAR 0 13
78760: NOT
78761: PUSH
78762: LD_EXP 93
78766: PUSH
78767: LD_VAR 0 5
78771: ARRAY
78772: PUSH
78773: LD_INT 1
78775: PLUS
78776: PUSH
78777: LD_VAR 0 3
78781: LESSEQUAL
78782: AND
78783: IFFALSE 78821
// if attack_hexes [ ai_attacking_unit_hex_index [ i ] + 1 ] in init_attack_hexes then
78785: LD_VAR 0 3
78789: PUSH
78790: LD_EXP 93
78794: PUSH
78795: LD_VAR 0 5
78799: ARRAY
78800: PUSH
78801: LD_INT 1
78803: PLUS
78804: ARRAY
78805: PUSH
78806: LD_VAR 0 2
78810: IN
78811: IFFALSE 78821
// temp_value = true ;
78813: LD_ADDR_VAR 0 13
78817: PUSH
78818: LD_INT 1
78820: ST_TO_ADDR
// if not temp_value then
78821: LD_VAR 0 13
78825: NOT
78826: IFFALSE 79169
// begin case GetWeapon ( i ) of ru_time_lapser , ar_selfpropelled_bomb :
78828: LD_VAR 0 5
78832: PPUSH
78833: CALL_OW 264
78837: PUSH
78838: LD_INT 49
78840: DOUBLE
78841: EQUAL
78842: IFTRUE 78852
78844: LD_INT 29
78846: DOUBLE
78847: EQUAL
78848: IFTRUE 78852
78850: GO 78919
78852: POP
// 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 ] + 1 ;
78853: LD_ADDR_VAR 0 13
78857: PUSH
78858: LD_EXP 93
78862: PUSH
78863: LD_VAR 0 5
78867: ARRAY
78868: PUSH
78869: LD_INT 1
78871: PLUS
78872: PUSH
78873: LD_VAR 0 11
78877: PUSH
78878: LD_INT 1
78880: ARRAY
78881: PUSH
78882: LD_INT 1
78884: PLUS
78885: LESSEQUAL
78886: PUSH
78887: LD_EXP 93
78891: PUSH
78892: LD_VAR 0 5
78896: ARRAY
78897: PUSH
78898: LD_INT 1
78900: PLUS
78901: PUSH
78902: LD_VAR 0 11
78906: PUSH
78907: LD_INT 2
78909: ARRAY
78910: PUSH
78911: LD_INT 1
78913: PLUS
78914: LESSEQUAL
78915: AND
78916: ST_TO_ADDR
// end ; else
78917: GO 79169
78919: POP
// 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 ] ;
78920: LD_ADDR_VAR 0 13
78924: PUSH
78925: LD_EXP 93
78929: PUSH
78930: LD_VAR 0 5
78934: ARRAY
78935: PUSH
78936: LD_INT 1
78938: PLUS
78939: PUSH
78940: LD_VAR 0 11
78944: PUSH
78945: LD_INT 1
78947: ARRAY
78948: PUSH
78949: LD_INT 1
78951: PLUS
78952: LESSEQUAL
78953: PUSH
78954: LD_EXP 93
78958: PUSH
78959: LD_VAR 0 5
78963: ARRAY
78964: PUSH
78965: LD_INT 1
78967: PLUS
78968: PUSH
78969: LD_VAR 0 11
78973: PUSH
78974: LD_INT 2
78976: ARRAY
78977: LESSEQUAL
78978: AND
78979: ST_TO_ADDR
// if temp_value and ai_attacking_unit_hex_index [ i ] + 1 = temp_list_2 [ 2 ] and temp_list_3 > 0 then
78980: LD_VAR 0 13
78984: PUSH
78985: LD_EXP 93
78989: PUSH
78990: LD_VAR 0 5
78994: ARRAY
78995: PUSH
78996: LD_INT 1
78998: PLUS
78999: PUSH
79000: LD_VAR 0 11
79004: PUSH
79005: LD_INT 2
79007: ARRAY
79008: EQUAL
79009: AND
79010: PUSH
79011: LD_VAR 0 7
79015: PUSH
79016: LD_INT 0
79018: GREATER
79019: AND
79020: IFFALSE 79169
// begin if not BehindLine ( i , temp_list_3 [ 1 ] , temp_list_3 [ 2 ] , temp_list_3 [ 3 ] , 4 ) and not ( attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] = attack_hexes [ ai_attacking_unit_hex_index [ i ] + 1 ] [ 1 ] and attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] = attack_hexes [ ai_attacking_unit_hex_index [ i ] + 1 ] [ 2 ] ) then
79022: LD_VAR 0 5
79026: PPUSH
79027: LD_VAR 0 7
79031: PUSH
79032: LD_INT 1
79034: ARRAY
79035: PPUSH
79036: LD_VAR 0 7
79040: PUSH
79041: LD_INT 2
79043: ARRAY
79044: PPUSH
79045: LD_VAR 0 7
79049: PUSH
79050: LD_INT 3
79052: ARRAY
79053: PPUSH
79054: LD_INT 4
79056: PPUSH
79057: CALL 19172 0 5
79061: NOT
79062: PUSH
79063: LD_VAR 0 3
79067: PUSH
79068: LD_EXP 93
79072: PUSH
79073: LD_VAR 0 5
79077: ARRAY
79078: ARRAY
79079: PUSH
79080: LD_INT 1
79082: ARRAY
79083: PUSH
79084: LD_VAR 0 3
79088: PUSH
79089: LD_EXP 93
79093: PUSH
79094: LD_VAR 0 5
79098: ARRAY
79099: PUSH
79100: LD_INT 1
79102: PLUS
79103: ARRAY
79104: PUSH
79105: LD_INT 1
79107: ARRAY
79108: EQUAL
79109: PUSH
79110: LD_VAR 0 3
79114: PUSH
79115: LD_EXP 93
79119: PUSH
79120: LD_VAR 0 5
79124: ARRAY
79125: ARRAY
79126: PUSH
79127: LD_INT 2
79129: ARRAY
79130: PUSH
79131: LD_VAR 0 3
79135: PUSH
79136: LD_EXP 93
79140: PUSH
79141: LD_VAR 0 5
79145: ARRAY
79146: PUSH
79147: LD_INT 1
79149: PLUS
79150: ARRAY
79151: PUSH
79152: LD_INT 2
79154: ARRAY
79155: EQUAL
79156: AND
79157: NOT
79158: AND
79159: IFFALSE 79169
// temp_value = false ;
79161: LD_ADDR_VAR 0 13
79165: PUSH
79166: LD_INT 0
79168: ST_TO_ADDR
// end ; end ; end ; end ; if ai_attacking_unit_hex_index [ i ] + 1 <= attack_hexes then
79169: LD_EXP 93
79173: PUSH
79174: LD_VAR 0 5
79178: ARRAY
79179: PUSH
79180: LD_INT 1
79182: PLUS
79183: PUSH
79184: LD_VAR 0 3
79188: LESSEQUAL
79189: IFFALSE 79265
// if base = 3 and not contaminate_scis_ready and not attack_hexes [ ai_attacking_unit_hex_index [ i ] + 1 ] in init_attack_hexes and ContactTime ( GetBaseSide ( base ) ) > 0 0$2 then
79191: LD_VAR 0 1
79195: PUSH
79196: LD_INT 3
79198: EQUAL
79199: PUSH
79200: LD_EXP 124
79204: NOT
79205: AND
79206: PUSH
79207: LD_VAR 0 3
79211: PUSH
79212: LD_EXP 93
79216: PUSH
79217: LD_VAR 0 5
79221: ARRAY
79222: PUSH
79223: LD_INT 1
79225: PLUS
79226: ARRAY
79227: PUSH
79228: LD_VAR 0 2
79232: IN
79233: NOT
79234: AND
79235: PUSH
79236: LD_VAR 0 1
79240: PPUSH
79241: CALL 24885 0 1
79245: PPUSH
79246: CALL_OW 462
79250: PUSH
79251: LD_INT 70
79253: GREATER
79254: AND
79255: IFFALSE 79265
// temp_value = false ;
79257: LD_ADDR_VAR 0 13
79261: PUSH
79262: LD_INT 0
79264: ST_TO_ADDR
// if temp_value then
79265: LD_VAR 0 13
79269: IFFALSE 79911
// begin if GetDistUnitXY ( i , attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) <= vehicle_dist then
79271: LD_VAR 0 5
79275: PPUSH
79276: LD_VAR 0 3
79280: PUSH
79281: LD_EXP 93
79285: PUSH
79286: LD_VAR 0 5
79290: ARRAY
79291: ARRAY
79292: PUSH
79293: LD_INT 1
79295: ARRAY
79296: PPUSH
79297: LD_VAR 0 3
79301: PUSH
79302: LD_EXP 93
79306: PUSH
79307: LD_VAR 0 5
79311: ARRAY
79312: ARRAY
79313: PUSH
79314: LD_INT 2
79316: ARRAY
79317: PPUSH
79318: CALL_OW 297
79322: PUSH
79323: LD_VAR 0 18
79327: LESSEQUAL
79328: IFFALSE 79911
// begin ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , i , ai_attacking_unit_hex_index [ i ] + 1 ) ;
79330: LD_ADDR_EXP 93
79334: PUSH
79335: LD_EXP 93
79339: PPUSH
79340: LD_VAR 0 5
79344: PPUSH
79345: LD_EXP 93
79349: PUSH
79350: LD_VAR 0 5
79354: ARRAY
79355: PUSH
79356: LD_INT 1
79358: PLUS
79359: PPUSH
79360: CALL_OW 1
79364: ST_TO_ADDR
// if ai_attacking_unit_hex_index [ i ] > attack_hexes then
79365: LD_EXP 93
79369: PUSH
79370: LD_VAR 0 5
79374: ARRAY
79375: PUSH
79376: LD_VAR 0 3
79380: GREATER
79381: IFFALSE 79756
// begin if GetType ( i ) = unit_vehicle then
79383: LD_VAR 0 5
79387: PPUSH
79388: CALL_OW 247
79392: PUSH
79393: LD_INT 2
79395: EQUAL
79396: IFFALSE 79650
// begin temp_list = ai_vehicles_attack [ base ] diff i ;
79398: LD_ADDR_VAR 0 10
79402: PUSH
79403: LD_EXP 68
79407: PUSH
79408: LD_VAR 0 1
79412: ARRAY
79413: PUSH
79414: LD_VAR 0 5
79418: DIFF
79419: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
79420: LD_ADDR_EXP 68
79424: PUSH
79425: LD_EXP 68
79429: PPUSH
79430: LD_VAR 0 1
79434: PPUSH
79435: LD_VAR 0 10
79439: PPUSH
79440: CALL_OW 1
79444: ST_TO_ADDR
// attacking_vehicles = attacking_vehicles diff i ;
79445: LD_ADDR_VAR 0 15
79449: PUSH
79450: LD_VAR 0 15
79454: PUSH
79455: LD_VAR 0 5
79459: DIFF
79460: ST_TO_ADDR
// case GetWeapon ( i ) of ru_time_lapser :
79461: LD_VAR 0 5
79465: PPUSH
79466: CALL_OW 264
79470: PUSH
79471: LD_INT 49
79473: DOUBLE
79474: EQUAL
79475: IFTRUE 79479
79477: GO 79529
79479: POP
// begin temp_list = ai_taufield_vehicles [ base ] ^ i ;
79480: LD_ADDR_VAR 0 10
79484: PUSH
79485: LD_EXP 100
79489: PUSH
79490: LD_VAR 0 1
79494: ARRAY
79495: PUSH
79496: LD_VAR 0 5
79500: ADD
79501: ST_TO_ADDR
// ai_taufield_vehicles = Replace ( ai_taufield_vehicles , base , temp_list ) ;
79502: LD_ADDR_EXP 100
79506: PUSH
79507: LD_EXP 100
79511: PPUSH
79512: LD_VAR 0 1
79516: PPUSH
79517: LD_VAR 0 10
79521: PPUSH
79522: CALL_OW 1
79526: ST_TO_ADDR
// end ; ar_selfpropelled_bomb :
79527: GO 79635
79529: LD_INT 29
79531: DOUBLE
79532: EQUAL
79533: IFTRUE 79537
79535: GO 79587
79537: POP
// begin temp_list = ai_implosion_vehicles [ base ] ^ i ;
79538: LD_ADDR_VAR 0 10
79542: PUSH
79543: LD_EXP 101
79547: PUSH
79548: LD_VAR 0 1
79552: ARRAY
79553: PUSH
79554: LD_VAR 0 5
79558: ADD
79559: ST_TO_ADDR
// ai_implosion_vehicles = Replace ( ai_implosion_vehicles , base , temp_list ) ;
79560: LD_ADDR_EXP 101
79564: PUSH
79565: LD_EXP 101
79569: PPUSH
79570: LD_VAR 0 1
79574: PPUSH
79575: LD_VAR 0 10
79579: PPUSH
79580: CALL_OW 1
79584: ST_TO_ADDR
// end ; else
79585: GO 79635
79587: POP
// begin temp_list = ai_vehicles_defend [ base ] ^ i ;
79588: LD_ADDR_VAR 0 10
79592: PUSH
79593: LD_EXP 67
79597: PUSH
79598: LD_VAR 0 1
79602: ARRAY
79603: PUSH
79604: LD_VAR 0 5
79608: ADD
79609: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
79610: LD_ADDR_EXP 67
79614: PUSH
79615: LD_EXP 67
79619: PPUSH
79620: LD_VAR 0 1
79624: PPUSH
79625: LD_VAR 0 10
79629: PPUSH
79630: CALL_OW 1
79634: ST_TO_ADDR
// end ; end ; i = UnitsInside ( i ) ;
79635: LD_ADDR_VAR 0 5
79639: PUSH
79640: LD_VAR 0 5
79644: PPUSH
79645: CALL_OW 313
79649: ST_TO_ADDR
// end ; if i > 0 then
79650: LD_VAR 0 5
79654: PUSH
79655: LD_INT 0
79657: GREATER
79658: IFFALSE 79754
// begin temp_list = ai_mechanics_attack [ base ] diff i ;
79660: LD_ADDR_VAR 0 10
79664: PUSH
79665: LD_EXP 44
79669: PUSH
79670: LD_VAR 0 1
79674: ARRAY
79675: PUSH
79676: LD_VAR 0 5
79680: DIFF
79681: ST_TO_ADDR
// ai_mechanics_attack = Replace ( ai_mechanics_attack , base , temp_list ) ;
79682: LD_ADDR_EXP 44
79686: PUSH
79687: LD_EXP 44
79691: PPUSH
79692: LD_VAR 0 1
79696: PPUSH
79697: LD_VAR 0 10
79701: PPUSH
79702: CALL_OW 1
79706: ST_TO_ADDR
// temp_list = ai_mechanics_defend [ base ] ^ i ;
79707: LD_ADDR_VAR 0 10
79711: PUSH
79712: LD_EXP 43
79716: PUSH
79717: LD_VAR 0 1
79721: ARRAY
79722: PUSH
79723: LD_VAR 0 5
79727: ADD
79728: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , temp_list ) ;
79729: LD_ADDR_EXP 43
79733: PUSH
79734: LD_EXP 43
79738: PPUSH
79739: LD_VAR 0 1
79743: PPUSH
79744: LD_VAR 0 10
79748: PPUSH
79749: CALL_OW 1
79753: ST_TO_ADDR
// end ; continue ;
79754: GO 77980
// end ; if nonbehemoths_in_position [ base ] = in_position_target [ base ] and behemoth_lineup_hexes_indexes [ base ] >= in_position_target [ base ] + 1 and attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in nonbehemoth_wait_for_behemoth_hexes [ base ] then
79756: LD_VAR 0 25
79760: PUSH
79761: LD_VAR 0 1
79765: ARRAY
79766: PUSH
79767: LD_VAR 0 29
79771: PUSH
79772: LD_VAR 0 1
79776: ARRAY
79777: EQUAL
79778: PUSH
79779: LD_VAR 0 26
79783: PUSH
79784: LD_VAR 0 1
79788: ARRAY
79789: PUSH
79790: LD_VAR 0 29
79794: PUSH
79795: LD_VAR 0 1
79799: ARRAY
79800: PUSH
79801: LD_INT 1
79803: PLUS
79804: GREATEREQUAL
79805: AND
79806: PUSH
79807: LD_VAR 0 3
79811: PUSH
79812: LD_EXP 93
79816: PUSH
79817: LD_VAR 0 5
79821: ARRAY
79822: ARRAY
79823: PUSH
79824: LD_VAR 0 27
79828: PUSH
79829: LD_VAR 0 1
79833: ARRAY
79834: IN
79835: AND
79836: IFFALSE 79873
// begin in_position_target = Replace ( in_position_target , base , in_position_target [ base ] + 1 ) ;
79838: LD_ADDR_VAR 0 29
79842: PUSH
79843: LD_VAR 0 29
79847: PPUSH
79848: LD_VAR 0 1
79852: PPUSH
79853: LD_VAR 0 29
79857: PUSH
79858: LD_VAR 0 1
79862: ARRAY
79863: PUSH
79864: LD_INT 1
79866: PLUS
79867: PPUSH
79868: CALL_OW 1
79872: ST_TO_ADDR
// end ; if attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in behemoth_wait_for_nonbehemoth_hexes [ base ] then
79873: LD_VAR 0 3
79877: PUSH
79878: LD_EXP 93
79882: PUSH
79883: LD_VAR 0 5
79887: ARRAY
79888: ARRAY
79889: PUSH
79890: LD_VAR 0 28
79894: PUSH
79895: LD_VAR 0 1
79899: ARRAY
79900: IN
79901: IFFALSE 79911
// one_nonbehe_in_pos = true ;
79903: LD_ADDR_VAR 0 17
79907: PUSH
79908: LD_INT 1
79910: ST_TO_ADDR
// end ; end ; end ;
79911: GO 77980
79913: POP
79914: POP
// if behe_in_pos then
79915: LD_VAR 0 16
79919: IFFALSE 79952
// behemoths_in_position = Replace ( behemoths_in_position , base , in_position_target [ base ] ) ;
79921: LD_ADDR_VAR 0 24
79925: PUSH
79926: LD_VAR 0 24
79930: PPUSH
79931: LD_VAR 0 1
79935: PPUSH
79936: LD_VAR 0 29
79940: PUSH
79941: LD_VAR 0 1
79945: ARRAY
79946: PPUSH
79947: CALL_OW 1
79951: ST_TO_ADDR
// if one_nonbehe_in_pos or UnitFilter ( attacking_vehicles , [ f_not , [ f_weapon , 59 ] ] ) = 0 then
79952: LD_VAR 0 17
79956: PUSH
79957: LD_VAR 0 15
79961: PPUSH
79962: LD_INT 3
79964: PUSH
79965: LD_INT 34
79967: PUSH
79968: LD_INT 59
79970: PUSH
79971: EMPTY
79972: LIST
79973: LIST
79974: PUSH
79975: EMPTY
79976: LIST
79977: LIST
79978: PPUSH
79979: CALL_OW 72
79983: PUSH
79984: LD_INT 0
79986: EQUAL
79987: OR
79988: IFFALSE 80021
// nonbehemoths_in_position = Replace ( nonbehemoths_in_position , base , in_position_target [ base ] ) ;
79990: LD_ADDR_VAR 0 25
79994: PUSH
79995: LD_VAR 0 25
79999: PPUSH
80000: LD_VAR 0 1
80004: PPUSH
80005: LD_VAR 0 29
80009: PUSH
80010: LD_VAR 0 1
80014: ARRAY
80015: PPUSH
80016: CALL_OW 1
80020: ST_TO_ADDR
// for i in attacking_vehicles do
80021: LD_ADDR_VAR 0 5
80025: PUSH
80026: LD_VAR 0 15
80030: PUSH
80031: FOR_IN
80032: IFFALSE 81809
// begin if GetWeapon ( i ) = ru_rocket then
80034: LD_VAR 0 5
80038: PPUSH
80039: CALL_OW 264
80043: PUSH
80044: LD_INT 47
80046: EQUAL
80047: IFFALSE 80197
// if not attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in init_attack_hexes then
80049: LD_VAR 0 3
80053: PUSH
80054: LD_EXP 93
80058: PUSH
80059: LD_VAR 0 5
80063: ARRAY
80064: ARRAY
80065: PUSH
80066: LD_VAR 0 2
80070: IN
80071: NOT
80072: IFFALSE 80197
// begin temp_list = FilterAllUnits ( [ [ f_enemy , GetBaseSide ( base ) ] , [ f_type , unit_building ] , [ f_dist , i , 30 ] ] ) diff alien_tower ;
80074: LD_ADDR_VAR 0 10
80078: PUSH
80079: LD_INT 81
80081: PUSH
80082: LD_VAR 0 1
80086: PPUSH
80087: CALL 24885 0 1
80091: PUSH
80092: EMPTY
80093: LIST
80094: LIST
80095: PUSH
80096: LD_INT 21
80098: PUSH
80099: LD_INT 3
80101: PUSH
80102: EMPTY
80103: LIST
80104: LIST
80105: PUSH
80106: LD_INT 91
80108: PUSH
80109: LD_VAR 0 5
80113: PUSH
80114: LD_INT 30
80116: PUSH
80117: EMPTY
80118: LIST
80119: LIST
80120: LIST
80121: PUSH
80122: EMPTY
80123: LIST
80124: LIST
80125: LIST
80126: PPUSH
80127: CALL_OW 69
80131: PUSH
80132: LD_INT 1
80134: DIFF
80135: ST_TO_ADDR
// if temp_list > 0 then
80136: LD_VAR 0 10
80140: PUSH
80141: LD_INT 0
80143: GREATER
80144: IFFALSE 80197
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
80146: LD_ADDR_VAR 0 9
80150: PUSH
80151: LD_VAR 0 10
80155: PPUSH
80156: LD_VAR 0 5
80160: PPUSH
80161: CALL_OW 75
80165: ST_TO_ADDR
// ComAttackPlace ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
80166: LD_VAR 0 5
80170: PPUSH
80171: LD_VAR 0 9
80175: PPUSH
80176: CALL_OW 250
80180: PPUSH
80181: LD_VAR 0 9
80185: PPUSH
80186: CALL_OW 251
80190: PPUSH
80191: CALL_OW 116
// continue ;
80195: GO 80031
// end ; end ; if GetWeapon ( i ) = 59 then
80197: LD_VAR 0 5
80201: PPUSH
80202: CALL_OW 264
80206: PUSH
80207: LD_INT 59
80209: EQUAL
80210: IFFALSE 80243
// k := not ai_attacking_unit_hex_index [ i ] in behemoth_lineup_hexes_indexes [ base ] else
80212: LD_ADDR_VAR 0 4
80216: PUSH
80217: LD_EXP 93
80221: PUSH
80222: LD_VAR 0 5
80226: ARRAY
80227: PUSH
80228: LD_VAR 0 26
80232: PUSH
80233: LD_VAR 0 1
80237: ARRAY
80238: IN
80239: NOT
80240: ST_TO_ADDR
80241: GO 80292
// k := not attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in init_attack_hexes or ContactTime ( GetBaseSide ( base ) ) <= 0 0$2 ;
80243: LD_ADDR_VAR 0 4
80247: PUSH
80248: LD_VAR 0 3
80252: PUSH
80253: LD_EXP 93
80257: PUSH
80258: LD_VAR 0 5
80262: ARRAY
80263: ARRAY
80264: PUSH
80265: LD_VAR 0 2
80269: IN
80270: NOT
80271: PUSH
80272: LD_VAR 0 1
80276: PPUSH
80277: CALL 24885 0 1
80281: PPUSH
80282: CALL_OW 462
80286: PUSH
80287: LD_INT 70
80289: LESSEQUAL
80290: OR
80291: ST_TO_ADDR
// if k then
80292: LD_VAR 0 4
80296: IFFALSE 81425
// begin temp_list = FilterAllUnits ( [ [ f_enemy , GetBaseSide ( base ) ] , [ f_type , unit_human ] , [ f_dist , i , 25 ] , [ f_see , GetBaseSide ( base ) ] ] ) ;
80298: LD_ADDR_VAR 0 10
80302: PUSH
80303: LD_INT 81
80305: PUSH
80306: LD_VAR 0 1
80310: PPUSH
80311: CALL 24885 0 1
80315: PUSH
80316: EMPTY
80317: LIST
80318: LIST
80319: PUSH
80320: LD_INT 21
80322: PUSH
80323: LD_INT 1
80325: PUSH
80326: EMPTY
80327: LIST
80328: LIST
80329: PUSH
80330: LD_INT 91
80332: PUSH
80333: LD_VAR 0 5
80337: PUSH
80338: LD_INT 25
80340: PUSH
80341: EMPTY
80342: LIST
80343: LIST
80344: LIST
80345: PUSH
80346: LD_INT 101
80348: PUSH
80349: LD_VAR 0 1
80353: PPUSH
80354: CALL 24885 0 1
80358: PUSH
80359: EMPTY
80360: LIST
80361: LIST
80362: PUSH
80363: EMPTY
80364: LIST
80365: LIST
80366: LIST
80367: LIST
80368: PPUSH
80369: CALL_OW 69
80373: ST_TO_ADDR
// if temp_list > 0 then
80374: LD_VAR 0 10
80378: PUSH
80379: LD_INT 0
80381: GREATER
80382: IFFALSE 80788
// begin temp_list_2 = UnitFilter ( temp_list , [ f_not , [ f_lives , 250 ] ] ) ;
80384: LD_ADDR_VAR 0 11
80388: PUSH
80389: LD_VAR 0 10
80393: PPUSH
80394: LD_INT 3
80396: PUSH
80397: LD_INT 24
80399: PUSH
80400: LD_INT 250
80402: PUSH
80403: EMPTY
80404: LIST
80405: LIST
80406: PUSH
80407: EMPTY
80408: LIST
80409: LIST
80410: PPUSH
80411: CALL_OW 72
80415: ST_TO_ADDR
// if temp_list_2 > 0 then
80416: LD_VAR 0 11
80420: PUSH
80421: LD_INT 0
80423: GREATER
80424: IFFALSE 80436
// temp_list = temp_list_2 ;
80426: LD_ADDR_VAR 0 10
80430: PUSH
80431: LD_VAR 0 11
80435: ST_TO_ADDR
// temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
80436: LD_ADDR_VAR 0 9
80440: PUSH
80441: LD_VAR 0 10
80445: PPUSH
80446: LD_VAR 0 5
80450: PPUSH
80451: CALL_OW 75
80455: ST_TO_ADDR
// case GetWeapon ( i ) of ar_selfpropelled_bomb :
80456: LD_VAR 0 5
80460: PPUSH
80461: CALL_OW 264
80465: PUSH
80466: LD_INT 29
80468: DOUBLE
80469: EQUAL
80470: IFTRUE 80474
80472: GO 80491
80474: POP
// begin ComAttackUnit ( i , temp_unit ) ;
80475: LD_VAR 0 5
80479: PPUSH
80480: LD_VAR 0 9
80484: PPUSH
80485: CALL_OW 115
// end ; ru_time_lapser :
80489: GO 80786
80491: LD_INT 49
80493: DOUBLE
80494: EQUAL
80495: IFTRUE 80499
80497: GO 80608
80499: POP
// begin dist = GetDistUnits ( i , temp_unit ) ;
80500: LD_ADDR_VAR 0 12
80504: PUSH
80505: LD_VAR 0 5
80509: PPUSH
80510: LD_VAR 0 9
80514: PPUSH
80515: CALL_OW 296
80519: ST_TO_ADDR
// if dist > 8 then
80520: LD_VAR 0 12
80524: PUSH
80525: LD_INT 8
80527: GREATER
80528: IFFALSE 80561
// ComMoveXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
80530: LD_VAR 0 5
80534: PPUSH
80535: LD_VAR 0 9
80539: PPUSH
80540: CALL_OW 250
80544: PPUSH
80545: LD_VAR 0 9
80549: PPUSH
80550: CALL_OW 251
80554: PPUSH
80555: CALL_OW 111
80559: GO 80606
// if dist < 6 then
80561: LD_VAR 0 12
80565: PUSH
80566: LD_INT 6
80568: LESS
80569: IFFALSE 80606
// AI_GetAwayFromXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) , 6 , false ) ;
80571: LD_VAR 0 5
80575: PPUSH
80576: LD_VAR 0 9
80580: PPUSH
80581: CALL_OW 250
80585: PPUSH
80586: LD_VAR 0 9
80590: PPUSH
80591: CALL_OW 251
80595: PPUSH
80596: LD_INT 6
80598: PPUSH
80599: LD_INT 0
80601: PPUSH
80602: CALL 17235 0 5
// end ; 59 :
80606: GO 80786
80608: LD_INT 59
80610: DOUBLE
80611: EQUAL
80612: IFTRUE 80616
80614: GO 80725
80616: POP
// begin dist = GetDistUnits ( i , temp_unit ) ;
80617: LD_ADDR_VAR 0 12
80621: PUSH
80622: LD_VAR 0 5
80626: PPUSH
80627: LD_VAR 0 9
80631: PPUSH
80632: CALL_OW 296
80636: ST_TO_ADDR
// if dist > 10 then
80637: LD_VAR 0 12
80641: PUSH
80642: LD_INT 10
80644: GREATER
80645: IFFALSE 80678
// ComMoveXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
80647: LD_VAR 0 5
80651: PPUSH
80652: LD_VAR 0 9
80656: PPUSH
80657: CALL_OW 250
80661: PPUSH
80662: LD_VAR 0 9
80666: PPUSH
80667: CALL_OW 251
80671: PPUSH
80672: CALL_OW 111
80676: GO 80723
// if dist < 6 then
80678: LD_VAR 0 12
80682: PUSH
80683: LD_INT 6
80685: LESS
80686: IFFALSE 80723
// AI_GetAwayFromXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) , 6 , false ) ;
80688: LD_VAR 0 5
80692: PPUSH
80693: LD_VAR 0 9
80697: PPUSH
80698: CALL_OW 250
80702: PPUSH
80703: LD_VAR 0 9
80707: PPUSH
80708: CALL_OW 251
80712: PPUSH
80713: LD_INT 6
80715: PPUSH
80716: LD_INT 0
80718: PPUSH
80719: CALL 17235 0 5
// end ; else
80723: GO 80786
80725: POP
// begin if GetLives ( temp_unit ) > 250 then
80726: LD_VAR 0 9
80730: PPUSH
80731: CALL_OW 256
80735: PUSH
80736: LD_INT 250
80738: GREATER
80739: IFFALSE 80772
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
80741: LD_VAR 0 5
80745: PPUSH
80746: LD_VAR 0 9
80750: PPUSH
80751: CALL_OW 250
80755: PPUSH
80756: LD_VAR 0 9
80760: PPUSH
80761: CALL_OW 251
80765: PPUSH
80766: CALL_OW 114
80770: GO 80786
// ComAttackUnit ( i , temp_unit ) ;
80772: LD_VAR 0 5
80776: PPUSH
80777: LD_VAR 0 9
80781: PPUSH
80782: CALL_OW 115
// end ; end ; end else
80786: GO 81417
// begin temp_list = FindNonhumansNearUnit ( GetBaseSide ( base ) , i , 25 , true ) ;
80788: LD_ADDR_VAR 0 10
80792: PUSH
80793: LD_VAR 0 1
80797: PPUSH
80798: CALL 24885 0 1
80802: PPUSH
80803: LD_VAR 0 5
80807: PPUSH
80808: LD_INT 25
80810: PPUSH
80811: LD_INT 1
80813: PPUSH
80814: CALL 81822 0 4
80818: ST_TO_ADDR
// if temp_list > 0 then
80819: LD_VAR 0 10
80823: PUSH
80824: LD_INT 0
80826: GREATER
80827: IFFALSE 81150
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
80829: LD_ADDR_VAR 0 9
80833: PUSH
80834: LD_VAR 0 10
80838: PPUSH
80839: LD_VAR 0 5
80843: PPUSH
80844: CALL_OW 75
80848: ST_TO_ADDR
// case GetWeapon ( i ) of ar_selfpropelled_bomb :
80849: LD_VAR 0 5
80853: PPUSH
80854: CALL_OW 264
80858: PUSH
80859: LD_INT 29
80861: DOUBLE
80862: EQUAL
80863: IFTRUE 80867
80865: GO 80884
80867: POP
// begin ComAttackUnit ( i , temp_unit ) ;
80868: LD_VAR 0 5
80872: PPUSH
80873: LD_VAR 0 9
80877: PPUSH
80878: CALL_OW 115
// end ; ru_time_lapser :
80882: GO 81148
80884: LD_INT 49
80886: DOUBLE
80887: EQUAL
80888: IFTRUE 80892
80890: GO 81001
80892: POP
// begin dist = GetDistUnits ( i , temp_unit ) ;
80893: LD_ADDR_VAR 0 12
80897: PUSH
80898: LD_VAR 0 5
80902: PPUSH
80903: LD_VAR 0 9
80907: PPUSH
80908: CALL_OW 296
80912: ST_TO_ADDR
// if dist > 8 then
80913: LD_VAR 0 12
80917: PUSH
80918: LD_INT 8
80920: GREATER
80921: IFFALSE 80954
// ComMoveXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
80923: LD_VAR 0 5
80927: PPUSH
80928: LD_VAR 0 9
80932: PPUSH
80933: CALL_OW 250
80937: PPUSH
80938: LD_VAR 0 9
80942: PPUSH
80943: CALL_OW 251
80947: PPUSH
80948: CALL_OW 111
80952: GO 80999
// if dist < 6 then
80954: LD_VAR 0 12
80958: PUSH
80959: LD_INT 6
80961: LESS
80962: IFFALSE 80999
// AI_GetAwayFromXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) , 6 , false ) ;
80964: LD_VAR 0 5
80968: PPUSH
80969: LD_VAR 0 9
80973: PPUSH
80974: CALL_OW 250
80978: PPUSH
80979: LD_VAR 0 9
80983: PPUSH
80984: CALL_OW 251
80988: PPUSH
80989: LD_INT 6
80991: PPUSH
80992: LD_INT 0
80994: PPUSH
80995: CALL 17235 0 5
// end ; 59 :
80999: GO 81148
81001: LD_INT 59
81003: DOUBLE
81004: EQUAL
81005: IFTRUE 81009
81007: GO 81118
81009: POP
// begin dist = GetDistUnits ( i , temp_unit ) ;
81010: LD_ADDR_VAR 0 12
81014: PUSH
81015: LD_VAR 0 5
81019: PPUSH
81020: LD_VAR 0 9
81024: PPUSH
81025: CALL_OW 296
81029: ST_TO_ADDR
// if dist > 10 then
81030: LD_VAR 0 12
81034: PUSH
81035: LD_INT 10
81037: GREATER
81038: IFFALSE 81071
// ComMoveXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
81040: LD_VAR 0 5
81044: PPUSH
81045: LD_VAR 0 9
81049: PPUSH
81050: CALL_OW 250
81054: PPUSH
81055: LD_VAR 0 9
81059: PPUSH
81060: CALL_OW 251
81064: PPUSH
81065: CALL_OW 111
81069: GO 81116
// if dist < 6 then
81071: LD_VAR 0 12
81075: PUSH
81076: LD_INT 6
81078: LESS
81079: IFFALSE 81116
// AI_GetAwayFromXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) , 6 , false ) ;
81081: LD_VAR 0 5
81085: PPUSH
81086: LD_VAR 0 9
81090: PPUSH
81091: CALL_OW 250
81095: PPUSH
81096: LD_VAR 0 9
81100: PPUSH
81101: CALL_OW 251
81105: PPUSH
81106: LD_INT 6
81108: PPUSH
81109: LD_INT 0
81111: PPUSH
81112: CALL 17235 0 5
// end ; else
81116: GO 81148
81118: POP
// begin ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
81119: LD_VAR 0 5
81123: PPUSH
81124: LD_VAR 0 9
81128: PPUSH
81129: CALL_OW 250
81133: PPUSH
81134: LD_VAR 0 9
81138: PPUSH
81139: CALL_OW 251
81143: PPUSH
81144: CALL_OW 114
// end ; end ; end else
81148: GO 81417
// begin temp_list = FindNonhumansNearUnit ( GetBaseSide ( base ) , i , 25 , false ) diff alien_tower ;
81150: LD_ADDR_VAR 0 10
81154: PUSH
81155: LD_VAR 0 1
81159: PPUSH
81160: CALL 24885 0 1
81164: PPUSH
81165: LD_VAR 0 5
81169: PPUSH
81170: LD_INT 25
81172: PPUSH
81173: LD_INT 0
81175: PPUSH
81176: CALL 81822 0 4
81180: PUSH
81181: LD_INT 1
81183: DIFF
81184: ST_TO_ADDR
// if temp_list > 0 then
81185: LD_VAR 0 10
81189: PUSH
81190: LD_INT 0
81192: GREATER
81193: IFFALSE 81409
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
81195: LD_ADDR_VAR 0 9
81199: PUSH
81200: LD_VAR 0 10
81204: PPUSH
81205: LD_VAR 0 5
81209: PPUSH
81210: CALL_OW 75
81214: ST_TO_ADDR
// case GetWeapon ( i ) of ar_selfpropelled_bomb :
81215: LD_VAR 0 5
81219: PPUSH
81220: CALL_OW 264
81224: PUSH
81225: LD_INT 29
81227: DOUBLE
81228: EQUAL
81229: IFTRUE 81233
81231: GO 81250
81233: POP
// begin ComAttackUnit ( i , temp_unit ) ;
81234: LD_VAR 0 5
81238: PPUSH
81239: LD_VAR 0 9
81243: PPUSH
81244: CALL_OW 115
// end ; ru_time_lapser :
81248: GO 81407
81250: LD_INT 49
81252: DOUBLE
81253: EQUAL
81254: IFTRUE 81258
81256: GO 81367
81258: POP
// begin dist = GetDistUnits ( i , temp_unit ) ;
81259: LD_ADDR_VAR 0 12
81263: PUSH
81264: LD_VAR 0 5
81268: PPUSH
81269: LD_VAR 0 9
81273: PPUSH
81274: CALL_OW 296
81278: ST_TO_ADDR
// if dist > 8 then
81279: LD_VAR 0 12
81283: PUSH
81284: LD_INT 8
81286: GREATER
81287: IFFALSE 81320
// ComMoveXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
81289: LD_VAR 0 5
81293: PPUSH
81294: LD_VAR 0 9
81298: PPUSH
81299: CALL_OW 250
81303: PPUSH
81304: LD_VAR 0 9
81308: PPUSH
81309: CALL_OW 251
81313: PPUSH
81314: CALL_OW 111
81318: GO 81365
// if dist < 6 then
81320: LD_VAR 0 12
81324: PUSH
81325: LD_INT 6
81327: LESS
81328: IFFALSE 81365
// AI_GetAwayFromXY ( i , GetX ( temp_unit ) , GetY ( temp_unit ) , 6 , false ) ;
81330: LD_VAR 0 5
81334: PPUSH
81335: LD_VAR 0 9
81339: PPUSH
81340: CALL_OW 250
81344: PPUSH
81345: LD_VAR 0 9
81349: PPUSH
81350: CALL_OW 251
81354: PPUSH
81355: LD_INT 6
81357: PPUSH
81358: LD_INT 0
81360: PPUSH
81361: CALL 17235 0 5
// end ; 59 :
81365: GO 81407
81367: LD_INT 59
81369: DOUBLE
81370: EQUAL
81371: IFTRUE 81375
81373: GO 81392
81375: POP
// begin ComAttackUnit ( i , temp_unit ) ;
81376: LD_VAR 0 5
81380: PPUSH
81381: LD_VAR 0 9
81385: PPUSH
81386: CALL_OW 115
// end ; else
81390: GO 81407
81392: POP
// begin ComAttackUnit ( i , temp_unit ) ;
81393: LD_VAR 0 5
81397: PPUSH
81398: LD_VAR 0 9
81402: PPUSH
81403: CALL_OW 115
// end ; end ; end else
81407: GO 81417
// k = false ;
81409: LD_ADDR_VAR 0 4
81413: PUSH
81414: LD_INT 0
81416: ST_TO_ADDR
// end ; end ; if k then
81417: LD_VAR 0 4
81421: IFFALSE 81425
// continue ;
81423: GO 80031
// end ; if GetWeapon ( i ) = 59 then
81425: LD_VAR 0 5
81429: PPUSH
81430: CALL_OW 264
81434: PUSH
81435: LD_INT 59
81437: EQUAL
81438: IFFALSE 81595
// begin if not ai_attacking_unit_hex_index [ i ] in behemoth_lineup_hexes_indexes [ base ] then
81440: LD_EXP 93
81444: PUSH
81445: LD_VAR 0 5
81449: ARRAY
81450: PUSH
81451: LD_VAR 0 26
81455: PUSH
81456: LD_VAR 0 1
81460: ARRAY
81461: IN
81462: NOT
81463: IFFALSE 81530
// ComAgressiveMove ( i , behemoth_attack_hexes [ i ] [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , behemoth_attack_hexes [ i ] [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) else
81465: LD_VAR 0 5
81469: PPUSH
81470: LD_VAR 0 23
81474: PUSH
81475: LD_VAR 0 5
81479: ARRAY
81480: PUSH
81481: LD_EXP 93
81485: PUSH
81486: LD_VAR 0 5
81490: ARRAY
81491: ARRAY
81492: PUSH
81493: LD_INT 1
81495: ARRAY
81496: PPUSH
81497: LD_VAR 0 23
81501: PUSH
81502: LD_VAR 0 5
81506: ARRAY
81507: PUSH
81508: LD_EXP 93
81512: PUSH
81513: LD_VAR 0 5
81517: ARRAY
81518: ARRAY
81519: PUSH
81520: LD_INT 2
81522: ARRAY
81523: PPUSH
81524: CALL_OW 114
81528: GO 81593
// ComMoveXY ( i , behemoth_attack_hexes [ i ] [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , behemoth_attack_hexes [ i ] [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) ;
81530: LD_VAR 0 5
81534: PPUSH
81535: LD_VAR 0 23
81539: PUSH
81540: LD_VAR 0 5
81544: ARRAY
81545: PUSH
81546: LD_EXP 93
81550: PUSH
81551: LD_VAR 0 5
81555: ARRAY
81556: ARRAY
81557: PUSH
81558: LD_INT 1
81560: ARRAY
81561: PPUSH
81562: LD_VAR 0 23
81566: PUSH
81567: LD_VAR 0 5
81571: ARRAY
81572: PUSH
81573: LD_EXP 93
81577: PUSH
81578: LD_VAR 0 5
81582: ARRAY
81583: ARRAY
81584: PUSH
81585: LD_INT 2
81587: ARRAY
81588: PPUSH
81589: CALL_OW 111
// end else
81593: GO 81807
// if GetDistUnitXY ( i , attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) > vehicle_dist - 2 then
81595: LD_VAR 0 5
81599: PPUSH
81600: LD_VAR 0 3
81604: PUSH
81605: LD_EXP 93
81609: PUSH
81610: LD_VAR 0 5
81614: ARRAY
81615: ARRAY
81616: PUSH
81617: LD_INT 1
81619: ARRAY
81620: PPUSH
81621: LD_VAR 0 3
81625: PUSH
81626: LD_EXP 93
81630: PUSH
81631: LD_VAR 0 5
81635: ARRAY
81636: ARRAY
81637: PUSH
81638: LD_INT 2
81640: ARRAY
81641: PPUSH
81642: CALL_OW 297
81646: PUSH
81647: LD_VAR 0 18
81651: PUSH
81652: LD_INT 2
81654: MINUS
81655: GREATER
81656: IFFALSE 81807
// if not attack_hexes [ ai_attacking_unit_hex_index [ i ] ] in init_attack_hexes or ContactTime ( GetBaseSide ( base ) ) <= 0 0$2 then
81658: LD_VAR 0 3
81662: PUSH
81663: LD_EXP 93
81667: PUSH
81668: LD_VAR 0 5
81672: ARRAY
81673: ARRAY
81674: PUSH
81675: LD_VAR 0 2
81679: IN
81680: NOT
81681: PUSH
81682: LD_VAR 0 1
81686: PPUSH
81687: CALL 24885 0 1
81691: PPUSH
81692: CALL_OW 462
81696: PUSH
81697: LD_INT 70
81699: LESSEQUAL
81700: OR
81701: IFFALSE 81756
// ComAgressiveMove ( i , attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) else
81703: LD_VAR 0 5
81707: PPUSH
81708: LD_VAR 0 3
81712: PUSH
81713: LD_EXP 93
81717: PUSH
81718: LD_VAR 0 5
81722: ARRAY
81723: ARRAY
81724: PUSH
81725: LD_INT 1
81727: ARRAY
81728: PPUSH
81729: LD_VAR 0 3
81733: PUSH
81734: LD_EXP 93
81738: PUSH
81739: LD_VAR 0 5
81743: ARRAY
81744: ARRAY
81745: PUSH
81746: LD_INT 2
81748: ARRAY
81749: PPUSH
81750: CALL_OW 114
81754: GO 81807
// ComMoveXY ( i , attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ i ] ] [ 2 ] ) ;
81756: LD_VAR 0 5
81760: PPUSH
81761: LD_VAR 0 3
81765: PUSH
81766: LD_EXP 93
81770: PUSH
81771: LD_VAR 0 5
81775: ARRAY
81776: ARRAY
81777: PUSH
81778: LD_INT 1
81780: ARRAY
81781: PPUSH
81782: LD_VAR 0 3
81786: PUSH
81787: LD_EXP 93
81791: PUSH
81792: LD_VAR 0 5
81796: ARRAY
81797: ARRAY
81798: PUSH
81799: LD_INT 2
81801: ARRAY
81802: PPUSH
81803: CALL_OW 111
// end ;
81807: GO 80031
81809: POP
81810: POP
// end ;
81811: GO 70200
81813: POP
81814: POP
// until false ;
81815: LD_INT 0
81817: IFFALSE 70161
// end ;
81819: PPOPN 30
81821: END
// export function FindNonhumansNearUnit ( side , un , dist , only_dangerous ) ; var weapon_list , temp_list , i , btype , b , val ; begin
81822: LD_INT 0
81824: PPUSH
81825: PPUSH
81826: PPUSH
81827: PPUSH
81828: PPUSH
81829: PPUSH
81830: PPUSH
// temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_not , [ f_type , unit_human ] ] , [ f_dist , un , dist ] , [ f_see , side ] ] ) ;
81831: LD_ADDR_VAR 0 7
81835: PUSH
81836: LD_INT 81
81838: PUSH
81839: LD_VAR 0 1
81843: PUSH
81844: EMPTY
81845: LIST
81846: LIST
81847: PUSH
81848: LD_INT 3
81850: PUSH
81851: LD_INT 21
81853: PUSH
81854: LD_INT 1
81856: PUSH
81857: EMPTY
81858: LIST
81859: LIST
81860: PUSH
81861: EMPTY
81862: LIST
81863: LIST
81864: PUSH
81865: LD_INT 91
81867: PUSH
81868: LD_VAR 0 2
81872: PUSH
81873: LD_VAR 0 3
81877: PUSH
81878: EMPTY
81879: LIST
81880: LIST
81881: LIST
81882: PUSH
81883: LD_INT 101
81885: PUSH
81886: LD_VAR 0 1
81890: PUSH
81891: EMPTY
81892: LIST
81893: LIST
81894: PUSH
81895: EMPTY
81896: LIST
81897: LIST
81898: LIST
81899: LIST
81900: PPUSH
81901: CALL_OW 69
81905: ST_TO_ADDR
// if only_dangerous then
81906: LD_VAR 0 4
81910: IFFALSE 81929
// begin result = DangerousUnits ( temp_list ) ;
81912: LD_ADDR_VAR 0 5
81916: PUSH
81917: LD_VAR 0 7
81921: PPUSH
81922: CALL 81944 0 1
81926: ST_TO_ADDR
// end else
81927: GO 81939
// result = temp_list end ;
81929: LD_ADDR_VAR 0 5
81933: PUSH
81934: LD_VAR 0 7
81938: ST_TO_ADDR
81939: LD_VAR 0 5
81943: RET
// function DangerousUnits ( list ) ; var weapon_list , i , btype , b , val ; begin
81944: LD_INT 0
81946: PPUSH
81947: PPUSH
81948: PPUSH
81949: PPUSH
81950: PPUSH
81951: 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 ] ;
81952: LD_ADDR_VAR 0 3
81956: PUSH
81957: LD_INT 2
81959: PUSH
81960: LD_INT 3
81962: PUSH
81963: LD_INT 4
81965: PUSH
81966: LD_INT 5
81968: PUSH
81969: LD_INT 6
81971: PUSH
81972: LD_INT 7
81974: PUSH
81975: LD_INT 8
81977: PUSH
81978: LD_INT 9
81980: PUSH
81981: LD_INT 10
81983: PUSH
81984: LD_INT 22
81986: PUSH
81987: LD_INT 23
81989: PUSH
81990: LD_INT 24
81992: PUSH
81993: LD_INT 25
81995: PUSH
81996: LD_INT 26
81998: PUSH
81999: LD_INT 27
82001: PUSH
82002: LD_INT 28
82004: PUSH
82005: LD_INT 29
82007: PUSH
82008: LD_INT 42
82010: PUSH
82011: LD_INT 43
82013: PUSH
82014: LD_INT 44
82016: PUSH
82017: LD_INT 45
82019: PUSH
82020: LD_INT 46
82022: PUSH
82023: LD_INT 47
82025: PUSH
82026: LD_INT 48
82028: PUSH
82029: LD_INT 49
82031: PUSH
82032: EMPTY
82033: LIST
82034: LIST
82035: LIST
82036: LIST
82037: LIST
82038: LIST
82039: LIST
82040: LIST
82041: LIST
82042: LIST
82043: LIST
82044: LIST
82045: LIST
82046: LIST
82047: LIST
82048: LIST
82049: LIST
82050: LIST
82051: LIST
82052: LIST
82053: LIST
82054: LIST
82055: LIST
82056: LIST
82057: LIST
82058: ST_TO_ADDR
// result = [ ] ;
82059: LD_ADDR_VAR 0 2
82063: PUSH
82064: EMPTY
82065: ST_TO_ADDR
// for i in list do
82066: LD_ADDR_VAR 0 4
82070: PUSH
82071: LD_VAR 0 1
82075: PUSH
82076: FOR_IN
82077: IFFALSE 82525
// case GetType ( i ) of unit_human :
82079: LD_VAR 0 4
82083: PPUSH
82084: CALL_OW 247
82088: PUSH
82089: LD_INT 1
82091: DOUBLE
82092: EQUAL
82093: IFTRUE 82097
82095: GO 82130
82097: POP
// begin if not IsOk ( i ) then
82098: LD_VAR 0 4
82102: PPUSH
82103: CALL_OW 302
82107: NOT
82108: IFFALSE 82112
// continue ;
82110: GO 82076
// result = result ^ i ;
82112: LD_ADDR_VAR 0 2
82116: PUSH
82117: LD_VAR 0 2
82121: PUSH
82122: LD_VAR 0 4
82126: ADD
82127: ST_TO_ADDR
// end ; unit_vehicle :
82128: GO 82523
82130: LD_INT 2
82132: DOUBLE
82133: EQUAL
82134: IFTRUE 82138
82136: GO 82278
82138: POP
// begin if not IsOk ( i ) then
82139: LD_VAR 0 4
82143: PPUSH
82144: CALL_OW 302
82148: NOT
82149: IFFALSE 82153
// continue ;
82151: GO 82076
// case GetControl ( i ) of control_manual , control_rider :
82153: LD_VAR 0 4
82157: PPUSH
82158: CALL_OW 263
82162: PUSH
82163: LD_INT 1
82165: DOUBLE
82166: EQUAL
82167: IFTRUE 82177
82169: LD_INT 4
82171: DOUBLE
82172: EQUAL
82173: IFTRUE 82177
82175: GO 82197
82177: POP
// begin if UnitsInside ( i ) = 0 then
82178: LD_VAR 0 4
82182: PPUSH
82183: CALL_OW 313
82187: PUSH
82188: LD_INT 0
82190: EQUAL
82191: IFFALSE 82195
// continue ;
82193: GO 82076
// end ; control_remote :
82195: GO 82243
82197: LD_INT 2
82199: DOUBLE
82200: EQUAL
82201: IFTRUE 82205
82203: GO 82225
82205: POP
// begin if IsControledBy ( i ) = 0 then
82206: LD_VAR 0 4
82210: PPUSH
82211: CALL_OW 312
82215: PUSH
82216: LD_INT 0
82218: EQUAL
82219: IFFALSE 82223
// continue ;
82221: GO 82076
// end ; control_computer , control_apeman :
82223: GO 82243
82225: LD_INT 3
82227: DOUBLE
82228: EQUAL
82229: IFTRUE 82239
82231: LD_INT 5
82233: DOUBLE
82234: EQUAL
82235: IFTRUE 82239
82237: GO 82242
82239: POP
// begin end ; end ;
82240: GO 82243
82242: POP
// if GetWeapon ( i ) in weapon_list then
82243: LD_VAR 0 4
82247: PPUSH
82248: CALL_OW 264
82252: PUSH
82253: LD_VAR 0 3
82257: IN
82258: IFFALSE 82276
// result = result ^ i ;
82260: LD_ADDR_VAR 0 2
82264: PUSH
82265: LD_VAR 0 2
82269: PUSH
82270: LD_VAR 0 4
82274: ADD
82275: ST_TO_ADDR
// end ; unit_building :
82276: GO 82523
82278: LD_INT 3
82280: DOUBLE
82281: EQUAL
82282: IFTRUE 82286
82284: GO 82522
82286: POP
// begin if not IsOk ( i ) then
82287: LD_VAR 0 4
82291: PPUSH
82292: CALL_OW 302
82296: NOT
82297: IFFALSE 82301
// continue ;
82299: GO 82076
// btype = GetBType ( i ) ;
82301: LD_ADDR_VAR 0 5
82305: PUSH
82306: LD_VAR 0 4
82310: PPUSH
82311: CALL_OW 266
82315: ST_TO_ADDR
// case btype of b_turret :
82316: LD_VAR 0 5
82320: PUSH
82321: LD_INT 33
82323: DOUBLE
82324: EQUAL
82325: IFTRUE 82329
82327: GO 82332
82329: POP
// begin end ; b_bunker , b_breastwork , b_armoury , b_barracks , b_fort :
82330: GO 82387
82332: LD_INT 32
82334: DOUBLE
82335: EQUAL
82336: IFTRUE 82364
82338: LD_INT 31
82340: DOUBLE
82341: EQUAL
82342: IFTRUE 82364
82344: LD_INT 4
82346: DOUBLE
82347: EQUAL
82348: IFTRUE 82364
82350: LD_INT 5
82352: DOUBLE
82353: EQUAL
82354: IFTRUE 82364
82356: LD_INT 35
82358: DOUBLE
82359: EQUAL
82360: IFTRUE 82364
82362: GO 82384
82364: POP
// begin if UnitsInside ( i ) = 0 then
82365: LD_VAR 0 4
82369: PPUSH
82370: CALL_OW 313
82374: PUSH
82375: LD_INT 0
82377: EQUAL
82378: IFFALSE 82382
// continue ;
82380: GO 82076
// end ; else
82382: GO 82387
82384: POP
// continue ; end ;
82385: GO 82076
// if btype in [ b_bunker , b_turret ] then
82387: LD_VAR 0 5
82391: PUSH
82392: LD_INT 32
82394: PUSH
82395: LD_INT 33
82397: PUSH
82398: EMPTY
82399: LIST
82400: LIST
82401: IN
82402: IFFALSE 82504
// if not GetBWeapon ( i ) in weapon_list then
82404: LD_VAR 0 4
82408: PPUSH
82409: CALL_OW 269
82413: PUSH
82414: LD_VAR 0 3
82418: IN
82419: NOT
82420: IFFALSE 82426
// continue else
82422: GO 82076
82424: GO 82504
// begin b = GetBase ( i ) ;
82426: LD_ADDR_VAR 0 6
82430: PUSH
82431: LD_VAR 0 4
82435: PPUSH
82436: CALL_OW 274
82440: ST_TO_ADDR
// val = false ;
82441: LD_ADDR_VAR 0 7
82445: PUSH
82446: LD_INT 0
82448: ST_TO_ADDR
// if b = 0 then
82449: LD_VAR 0 6
82453: PUSH
82454: LD_INT 0
82456: EQUAL
82457: IFFALSE 82469
// val = true else
82459: LD_ADDR_VAR 0 7
82463: PUSH
82464: LD_INT 1
82466: ST_TO_ADDR
82467: GO 82496
// if GetEnergy ( b ) [ 4 ] = 0 then
82469: LD_VAR 0 6
82473: PPUSH
82474: CALL_OW 278
82478: PUSH
82479: LD_INT 4
82481: ARRAY
82482: PUSH
82483: LD_INT 0
82485: EQUAL
82486: IFFALSE 82496
// val = true ;
82488: LD_ADDR_VAR 0 7
82492: PUSH
82493: LD_INT 1
82495: ST_TO_ADDR
// if val then
82496: LD_VAR 0 7
82500: IFFALSE 82504
// continue ;
82502: GO 82076
// end ; result = result ^ i ;
82504: LD_ADDR_VAR 0 2
82508: PUSH
82509: LD_VAR 0 2
82513: PUSH
82514: LD_VAR 0 4
82518: ADD
82519: ST_TO_ADDR
// end ; end ;
82520: GO 82523
82522: POP
82523: GO 82076
82525: POP
82526: POP
// end ;
82527: LD_VAR 0 2
82531: RET
// every 0 0$5 do var base , i ;
82532: GO 82534
82534: DISABLE
82535: LD_INT 0
82537: PPUSH
82538: PPUSH
// begin for base in ai_bases do
82539: LD_ADDR_VAR 0 1
82543: PUSH
82544: LD_EXP 39
82548: PUSH
82549: FOR_IN
82550: IFFALSE 82707
// 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
82552: LD_ADDR_VAR 0 2
82556: PUSH
82557: LD_EXP 68
82561: PUSH
82562: LD_VAR 0 1
82566: ARRAY
82567: PUSH
82568: LD_EXP 67
82572: PUSH
82573: LD_VAR 0 1
82577: ARRAY
82578: ADD
82579: PUSH
82580: LD_EXP 85
82584: PUSH
82585: LD_VAR 0 1
82589: ARRAY
82590: ADD
82591: PUSH
82592: LD_EXP 88
82596: PUSH
82597: LD_VAR 0 1
82601: ARRAY
82602: ADD
82603: PUSH
82604: LD_EXP 100
82608: PUSH
82609: LD_VAR 0 1
82613: ARRAY
82614: ADD
82615: PUSH
82616: LD_EXP 101
82620: PUSH
82621: LD_VAR 0 1
82625: ARRAY
82626: ADD
82627: PUSH
82628: LD_EXP 95
82632: PUSH
82633: LD_VAR 0 1
82637: ARRAY
82638: ADD
82639: PUSH
82640: LD_EXP 107
82644: PUSH
82645: LD_VAR 0 1
82649: ARRAY
82650: ADD
82651: PUSH
82652: LD_INT 0
82654: DIFF
82655: PUSH
82656: FOR_IN
82657: IFFALSE 82703
// if GetFuel ( i ) < 10 and GetEngine ( i ) = engine_combustion then
82659: LD_VAR 0 2
82663: PPUSH
82664: CALL_OW 261
82668: PUSH
82669: LD_INT 10
82671: LESS
82672: PUSH
82673: LD_VAR 0 2
82677: PPUSH
82678: CALL_OW 262
82682: PUSH
82683: LD_INT 1
82685: EQUAL
82686: AND
82687: IFFALSE 82701
// SetFuel ( i , 10 ) ;
82689: LD_VAR 0 2
82693: PPUSH
82694: LD_INT 10
82696: PPUSH
82697: CALL_OW 240
82701: GO 82656
82703: POP
82704: POP
82705: GO 82549
82707: POP
82708: POP
// enable ;
82709: ENABLE
// end ;
82710: PPOPN 2
82712: END
// every 0 0$1.4 do var base , i , val , area , un ; var veh_hex_map ;
82713: GO 82715
82715: DISABLE
82716: LD_INT 0
82718: PPUSH
82719: PPUSH
82720: PPUSH
82721: PPUSH
82722: PPUSH
82723: PPUSH
// begin base = 1 ;
82724: LD_ADDR_VAR 0 1
82728: PUSH
82729: LD_INT 1
82731: ST_TO_ADDR
// veh_hex_map = [ ] ;
82732: LD_ADDR_VAR 0 6
82736: PUSH
82737: EMPTY
82738: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
82739: LD_INT 35
82741: PPUSH
82742: CALL_OW 67
// for base in ai_bases do
82746: LD_ADDR_VAR 0 1
82750: PUSH
82751: LD_EXP 39
82755: PUSH
82756: FOR_IN
82757: IFFALSE 83789
// begin if not base in [ 1 , 4 ] then
82759: LD_VAR 0 1
82763: PUSH
82764: LD_INT 1
82766: PUSH
82767: LD_INT 4
82769: PUSH
82770: EMPTY
82771: LIST
82772: LIST
82773: IN
82774: NOT
82775: IFFALSE 82779
// continue ;
82777: GO 82756
// case base of 1 :
82779: LD_VAR 0 1
82783: PUSH
82784: LD_INT 1
82786: DOUBLE
82787: EQUAL
82788: IFTRUE 82792
82790: GO 82803
82792: POP
// area = ru_veh_stuck_area ; 4 :
82793: LD_ADDR_VAR 0 4
82797: PUSH
82798: LD_INT 29
82800: ST_TO_ADDR
82801: GO 82823
82803: LD_INT 4
82805: DOUBLE
82806: EQUAL
82807: IFTRUE 82811
82809: GO 82822
82811: POP
// area = am_veh_stuck_area ; end ;
82812: LD_ADDR_VAR 0 4
82816: PUSH
82817: LD_INT 28
82819: ST_TO_ADDR
82820: GO 82823
82822: POP
// for i in ( ai_vehicles_attack [ base ] ^ ai_vehicles_defend [ base ] ^ ai_cargo_bay [ base ] ^ ai_crane [ base ] ^ ai_taufield_vehicles [ base ] ^ ai_implosion_vehicles [ base ] ^ ai_control_tower_vehicles [ base ] ) diff 0 do
82823: LD_ADDR_VAR 0 2
82827: PUSH
82828: LD_EXP 68
82832: PUSH
82833: LD_VAR 0 1
82837: ARRAY
82838: PUSH
82839: LD_EXP 67
82843: PUSH
82844: LD_VAR 0 1
82848: ARRAY
82849: ADD
82850: PUSH
82851: LD_EXP 85
82855: PUSH
82856: LD_VAR 0 1
82860: ARRAY
82861: ADD
82862: PUSH
82863: LD_EXP 88
82867: PUSH
82868: LD_VAR 0 1
82872: ARRAY
82873: ADD
82874: PUSH
82875: LD_EXP 100
82879: PUSH
82880: LD_VAR 0 1
82884: ARRAY
82885: ADD
82886: PUSH
82887: LD_EXP 101
82891: PUSH
82892: LD_VAR 0 1
82896: ARRAY
82897: ADD
82898: PUSH
82899: LD_EXP 95
82903: PUSH
82904: LD_VAR 0 1
82908: ARRAY
82909: ADD
82910: PUSH
82911: LD_INT 0
82913: DIFF
82914: PUSH
82915: FOR_IN
82916: IFFALSE 83785
// begin val = false ;
82918: LD_ADDR_VAR 0 3
82922: PUSH
82923: LD_INT 0
82925: ST_TO_ADDR
// if veh_hex_map < i then
82926: LD_VAR 0 6
82930: PUSH
82931: LD_VAR 0 2
82935: LESS
82936: IFFALSE 82948
// val = true else
82938: LD_ADDR_VAR 0 3
82942: PUSH
82943: LD_INT 1
82945: ST_TO_ADDR
82946: GO 82972
// if veh_hex_map [ i ] = 0 then
82948: LD_VAR 0 6
82952: PUSH
82953: LD_VAR 0 2
82957: ARRAY
82958: PUSH
82959: LD_INT 0
82961: EQUAL
82962: IFFALSE 82972
// val = true ;
82964: LD_ADDR_VAR 0 3
82968: PUSH
82969: LD_INT 1
82971: ST_TO_ADDR
// if val then
82972: LD_VAR 0 3
82976: IFFALSE 83012
// veh_hex_map = Replace ( veh_hex_map , i , [ 0 , 0 , 0 0$0 ] ) ;
82978: LD_ADDR_VAR 0 6
82982: PUSH
82983: LD_VAR 0 6
82987: PPUSH
82988: LD_VAR 0 2
82992: PPUSH
82993: LD_INT 0
82995: PUSH
82996: LD_INT 0
82998: PUSH
82999: LD_INT 0
83001: PUSH
83002: EMPTY
83003: LIST
83004: LIST
83005: LIST
83006: PPUSH
83007: CALL_OW 1
83011: ST_TO_ADDR
// if IsInArea ( i , area ) then
83012: LD_VAR 0 2
83016: PPUSH
83017: LD_VAR 0 4
83021: PPUSH
83022: CALL_OW 308
83026: IFFALSE 83749
// begin if veh_hex_map [ i ] [ 1 ] = 0 and veh_hex_map [ i ] [ 2 ] = 0 then
83028: LD_VAR 0 6
83032: PUSH
83033: LD_VAR 0 2
83037: ARRAY
83038: PUSH
83039: LD_INT 1
83041: ARRAY
83042: PUSH
83043: LD_INT 0
83045: EQUAL
83046: PUSH
83047: LD_VAR 0 6
83051: PUSH
83052: LD_VAR 0 2
83056: ARRAY
83057: PUSH
83058: LD_INT 2
83060: ARRAY
83061: PUSH
83062: LD_INT 0
83064: EQUAL
83065: AND
83066: IFFALSE 83118
// veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) else
83068: LD_ADDR_VAR 0 6
83072: PUSH
83073: LD_VAR 0 6
83077: PPUSH
83078: LD_VAR 0 2
83082: PPUSH
83083: LD_VAR 0 2
83087: PPUSH
83088: CALL_OW 250
83092: PUSH
83093: LD_VAR 0 2
83097: PPUSH
83098: CALL_OW 251
83102: PUSH
83103: LD_INT 0
83105: PUSH
83106: EMPTY
83107: LIST
83108: LIST
83109: LIST
83110: PPUSH
83111: CALL_OW 1
83115: ST_TO_ADDR
83116: GO 83747
// if GetDistUnitXY ( i , veh_hex_map [ i ] [ 1 ] , veh_hex_map [ i ] [ 2 ] ) > 2 then
83118: LD_VAR 0 2
83122: PPUSH
83123: LD_VAR 0 6
83127: PUSH
83128: LD_VAR 0 2
83132: ARRAY
83133: PUSH
83134: LD_INT 1
83136: ARRAY
83137: PPUSH
83138: LD_VAR 0 6
83142: PUSH
83143: LD_VAR 0 2
83147: ARRAY
83148: PUSH
83149: LD_INT 2
83151: ARRAY
83152: PPUSH
83153: CALL_OW 297
83157: PUSH
83158: LD_INT 2
83160: GREATER
83161: IFFALSE 83213
// veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) else
83163: LD_ADDR_VAR 0 6
83167: PUSH
83168: LD_VAR 0 6
83172: PPUSH
83173: LD_VAR 0 2
83177: PPUSH
83178: LD_VAR 0 2
83182: PPUSH
83183: CALL_OW 250
83187: PUSH
83188: LD_VAR 0 2
83192: PPUSH
83193: CALL_OW 251
83197: PUSH
83198: LD_INT 0
83200: PUSH
83201: EMPTY
83202: LIST
83203: LIST
83204: LIST
83205: PPUSH
83206: CALL_OW 1
83210: ST_TO_ADDR
83211: GO 83747
// begin veh_hex_map = Replace ( veh_hex_map , i , [ veh_hex_map [ i ] [ 1 ] , veh_hex_map [ i ] [ 2 ] , veh_hex_map [ i ] [ 3 ] + 0 0$1 ] ) ;
83213: LD_ADDR_VAR 0 6
83217: PUSH
83218: LD_VAR 0 6
83222: PPUSH
83223: LD_VAR 0 2
83227: PPUSH
83228: LD_VAR 0 6
83232: PUSH
83233: LD_VAR 0 2
83237: ARRAY
83238: PUSH
83239: LD_INT 1
83241: ARRAY
83242: PUSH
83243: LD_VAR 0 6
83247: PUSH
83248: LD_VAR 0 2
83252: ARRAY
83253: PUSH
83254: LD_INT 2
83256: ARRAY
83257: PUSH
83258: LD_VAR 0 6
83262: PUSH
83263: LD_VAR 0 2
83267: ARRAY
83268: PUSH
83269: LD_INT 3
83271: ARRAY
83272: PUSH
83273: LD_INT 35
83275: PLUS
83276: PUSH
83277: EMPTY
83278: LIST
83279: LIST
83280: LIST
83281: PPUSH
83282: CALL_OW 1
83286: ST_TO_ADDR
// if veh_hex_map [ i ] [ 3 ] >= 0 0$8 and not See ( you , i ) then
83287: LD_VAR 0 6
83291: PUSH
83292: LD_VAR 0 2
83296: ARRAY
83297: PUSH
83298: LD_INT 3
83300: ARRAY
83301: PUSH
83302: LD_INT 280
83304: GREATEREQUAL
83305: PUSH
83306: LD_EXP 2
83310: PPUSH
83311: LD_VAR 0 2
83315: PPUSH
83316: CALL_OW 292
83320: NOT
83321: AND
83322: IFFALSE 83747
// begin val = GetTaskList ( i ) ;
83324: LD_ADDR_VAR 0 3
83328: PUSH
83329: LD_VAR 0 2
83333: PPUSH
83334: CALL_OW 437
83338: ST_TO_ADDR
// if val = 0 then
83339: LD_VAR 0 3
83343: PUSH
83344: LD_INT 0
83346: EQUAL
83347: IFFALSE 83399
// begin veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) ;
83349: LD_ADDR_VAR 0 6
83353: PUSH
83354: LD_VAR 0 6
83358: PPUSH
83359: LD_VAR 0 2
83363: PPUSH
83364: LD_VAR 0 2
83368: PPUSH
83369: CALL_OW 250
83373: PUSH
83374: LD_VAR 0 2
83378: PPUSH
83379: CALL_OW 251
83383: PUSH
83384: LD_INT 0
83386: PUSH
83387: EMPTY
83388: LIST
83389: LIST
83390: LIST
83391: PPUSH
83392: CALL_OW 1
83396: ST_TO_ADDR
// end else
83397: GO 83747
// begin if val [ 1 ] [ 2 ] = 0 and val [ 1 ] [ 3 ] = 0 then
83399: LD_VAR 0 3
83403: PUSH
83404: LD_INT 1
83406: ARRAY
83407: PUSH
83408: LD_INT 2
83410: ARRAY
83411: PUSH
83412: LD_INT 0
83414: EQUAL
83415: PUSH
83416: LD_VAR 0 3
83420: PUSH
83421: LD_INT 1
83423: ARRAY
83424: PUSH
83425: LD_INT 3
83427: ARRAY
83428: PUSH
83429: LD_INT 0
83431: EQUAL
83432: AND
83433: IFFALSE 83485
// begin veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) ;
83435: LD_ADDR_VAR 0 6
83439: PUSH
83440: LD_VAR 0 6
83444: PPUSH
83445: LD_VAR 0 2
83449: PPUSH
83450: LD_VAR 0 2
83454: PPUSH
83455: CALL_OW 250
83459: PUSH
83460: LD_VAR 0 2
83464: PPUSH
83465: CALL_OW 251
83469: PUSH
83470: LD_INT 0
83472: PUSH
83473: EMPTY
83474: LIST
83475: LIST
83476: LIST
83477: PPUSH
83478: CALL_OW 1
83482: ST_TO_ADDR
// end else
83483: GO 83747
// if not InArea ( val [ 1 ] [ 2 ] , val [ 1 ] [ 3 ] , GetBaseArea ( base ) ) then
83485: LD_VAR 0 3
83489: PUSH
83490: LD_INT 1
83492: ARRAY
83493: PUSH
83494: LD_INT 2
83496: ARRAY
83497: PPUSH
83498: LD_VAR 0 3
83502: PUSH
83503: LD_INT 1
83505: ARRAY
83506: PUSH
83507: LD_INT 3
83509: ARRAY
83510: PPUSH
83511: LD_VAR 0 1
83515: PPUSH
83516: CALL 24795 0 1
83520: PPUSH
83521: CALL_OW 309
83525: NOT
83526: IFFALSE 83578
// begin veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) ;
83528: LD_ADDR_VAR 0 6
83532: PUSH
83533: LD_VAR 0 6
83537: PPUSH
83538: LD_VAR 0 2
83542: PPUSH
83543: LD_VAR 0 2
83547: PPUSH
83548: CALL_OW 250
83552: PUSH
83553: LD_VAR 0 2
83557: PPUSH
83558: CALL_OW 251
83562: PUSH
83563: LD_INT 0
83565: PUSH
83566: EMPTY
83567: LIST
83568: LIST
83569: LIST
83570: PPUSH
83571: CALL_OW 1
83575: ST_TO_ADDR
// end else
83576: GO 83747
// begin RemoveUnit ( i ) ;
83578: LD_VAR 0 2
83582: PPUSH
83583: CALL_OW 64
// if not PlaceUnitXYR ( i , val [ 1 ] [ 2 ] , val [ 1 ] [ 3 ] , 7 , false ) then
83587: LD_VAR 0 2
83591: PPUSH
83592: LD_VAR 0 3
83596: PUSH
83597: LD_INT 1
83599: ARRAY
83600: PUSH
83601: LD_INT 2
83603: ARRAY
83604: PPUSH
83605: LD_VAR 0 3
83609: PUSH
83610: LD_INT 1
83612: ARRAY
83613: PUSH
83614: LD_INT 3
83616: ARRAY
83617: PPUSH
83618: LD_INT 7
83620: PPUSH
83621: LD_INT 0
83623: PPUSH
83624: CALL_OW 50
83628: NOT
83629: IFFALSE 83713
// begin un = UnitsInside ( i ) ;
83631: LD_ADDR_VAR 0 5
83635: PUSH
83636: LD_VAR 0 2
83640: PPUSH
83641: CALL_OW 313
83645: ST_TO_ADDR
// if un > 0 then
83646: LD_VAR 0 5
83650: PUSH
83651: LD_INT 0
83653: GREATER
83654: IFFALSE 83690
// begin RemoveHumanFromVariables ( base , un [ 1 ] , true ) ;
83656: LD_VAR 0 1
83660: PPUSH
83661: LD_VAR 0 5
83665: PUSH
83666: LD_INT 1
83668: ARRAY
83669: PPUSH
83670: LD_INT 1
83672: PPUSH
83673: CALL 23625 0 3
// DestroyUnit ( un [ 1 ] ) ;
83677: LD_VAR 0 5
83681: PUSH
83682: LD_INT 1
83684: ARRAY
83685: PPUSH
83686: CALL_OW 65
// end ; RemoveVehicleFromVariables ( base , i ) ;
83690: LD_VAR 0 1
83694: PPUSH
83695: LD_VAR 0 2
83699: PPUSH
83700: CALL 22584 0 2
// DestroyUnit ( i ) ;
83704: LD_VAR 0 2
83708: PPUSH
83709: CALL_OW 65
// end ; veh_hex_map = Replace ( veh_hex_map , i , [ 0 , 0 , 0 0$0 ] ) ;
83713: LD_ADDR_VAR 0 6
83717: PUSH
83718: LD_VAR 0 6
83722: PPUSH
83723: LD_VAR 0 2
83727: PPUSH
83728: LD_INT 0
83730: PUSH
83731: LD_INT 0
83733: PUSH
83734: LD_INT 0
83736: PUSH
83737: EMPTY
83738: LIST
83739: LIST
83740: LIST
83741: PPUSH
83742: CALL_OW 1
83746: ST_TO_ADDR
// end ; end ; end ; end ; end else
83747: GO 83783
// begin veh_hex_map = Replace ( veh_hex_map , i , [ 0 , 0 , 0 0$0 ] ) ;
83749: LD_ADDR_VAR 0 6
83753: PUSH
83754: LD_VAR 0 6
83758: PPUSH
83759: LD_VAR 0 2
83763: PPUSH
83764: LD_INT 0
83766: PUSH
83767: LD_INT 0
83769: PUSH
83770: LD_INT 0
83772: PUSH
83773: EMPTY
83774: LIST
83775: LIST
83776: LIST
83777: PPUSH
83778: CALL_OW 1
83782: ST_TO_ADDR
// end ; end ;
83783: GO 82915
83785: POP
83786: POP
// end ;
83787: GO 82756
83789: POP
83790: POP
// until false ;
83791: LD_INT 0
83793: IFFALSE 82739
// end ;
83795: PPOPN 6
83797: 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 ;
83798: GO 83800
83800: DISABLE
83801: LD_INT 0
83803: PPUSH
83804: PPUSH
83805: PPUSH
83806: PPUSH
83807: PPUSH
83808: PPUSH
83809: PPUSH
83810: PPUSH
83811: PPUSH
// begin refueling = [ false , false , false , false ] ;
83812: LD_ADDR_VAR 0 9
83816: PUSH
83817: LD_INT 0
83819: PUSH
83820: LD_INT 0
83822: PUSH
83823: LD_INT 0
83825: PUSH
83826: LD_INT 0
83828: PUSH
83829: EMPTY
83830: LIST
83831: LIST
83832: LIST
83833: LIST
83834: ST_TO_ADDR
// repeat if ai_bases = 0 then
83835: LD_EXP 39
83839: PUSH
83840: LD_INT 0
83842: EQUAL
83843: IFFALSE 83847
// exit ;
83845: GO 84757
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
83847: LD_INT 35
83849: PUSH
83850: LD_EXP 39
83854: PUSH
83855: LD_INT 0
83857: PLUS
83858: MOD
83859: PPUSH
83860: CALL_OW 67
// for base in ai_bases do
83864: LD_ADDR_VAR 0 1
83868: PUSH
83869: LD_EXP 39
83873: PUSH
83874: FOR_IN
83875: IFFALSE 84751
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
83877: LD_INT 35
83879: PUSH
83880: LD_EXP 39
83884: PUSH
83885: LD_INT 0
83887: PLUS
83888: DIV
83889: PPUSH
83890: CALL_OW 67
// if ai_cargo_bay [ base ] = 0 then
83894: LD_EXP 85
83898: PUSH
83899: LD_VAR 0 1
83903: ARRAY
83904: PUSH
83905: LD_INT 0
83907: EQUAL
83908: IFFALSE 83912
// continue ;
83910: GO 83874
// temp_value = GetLives ( ai_cargo_bay [ base ] ) ;
83912: LD_ADDR_VAR 0 8
83916: PUSH
83917: LD_EXP 85
83921: PUSH
83922: LD_VAR 0 1
83926: ARRAY
83927: PPUSH
83928: CALL_OW 256
83932: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
83933: LD_ADDR_VAR 0 3
83937: PUSH
83938: LD_VAR 0 1
83942: PPUSH
83943: CALL 24795 0 1
83947: ST_TO_ADDR
// if IsInArea ( ai_cargo_bay [ base ] , area ) then
83948: LD_EXP 85
83952: PUSH
83953: LD_VAR 0 1
83957: ARRAY
83958: PPUSH
83959: LD_VAR 0 3
83963: PPUSH
83964: CALL_OW 308
83968: IFFALSE 83984
// begin if temp_value < 1000 then
83970: LD_VAR 0 8
83974: PUSH
83975: LD_INT 1000
83977: LESS
83978: IFFALSE 83982
// continue ;
83980: GO 83874
// end else
83982: GO 84086
// if temp_value < 600 then
83984: LD_VAR 0 8
83988: PUSH
83989: LD_INT 600
83991: LESS
83992: IFFALSE 84086
// begin if IsLive ( ai_depot [ base ] ) then
83994: LD_EXP 49
83998: PUSH
83999: LD_VAR 0 1
84003: ARRAY
84004: PPUSH
84005: CALL_OW 300
84009: IFFALSE 84039
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) else
84011: LD_EXP 85
84015: PUSH
84016: LD_VAR 0 1
84020: ARRAY
84021: PPUSH
84022: LD_EXP 49
84026: PUSH
84027: LD_VAR 0 1
84031: ARRAY
84032: PPUSH
84033: CALL_OW 161
84037: GO 84084
// ComMoveXY ( ai_cargo_bay [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
84039: LD_EXP 85
84043: PUSH
84044: LD_VAR 0 1
84048: ARRAY
84049: PPUSH
84050: LD_EXP 73
84054: PUSH
84055: LD_VAR 0 1
84059: ARRAY
84060: PUSH
84061: LD_INT 1
84063: ARRAY
84064: PPUSH
84065: LD_EXP 73
84069: PUSH
84070: LD_VAR 0 1
84074: ARRAY
84075: PUSH
84076: LD_INT 2
84078: ARRAY
84079: PPUSH
84080: CALL_OW 111
// continue ;
84084: GO 83874
// end ; if GetEngine ( ai_cargo_bay [ base ] ) = engine_combustion then
84086: LD_EXP 85
84090: PUSH
84091: LD_VAR 0 1
84095: ARRAY
84096: PPUSH
84097: CALL_OW 262
84101: PUSH
84102: LD_INT 1
84104: EQUAL
84105: IFFALSE 84280
// begin c = GetFuel ( ai_cargo_bay [ base ] ) ;
84107: LD_ADDR_VAR 0 4
84111: PUSH
84112: LD_EXP 85
84116: PUSH
84117: LD_VAR 0 1
84121: ARRAY
84122: PPUSH
84123: CALL_OW 261
84127: ST_TO_ADDR
// if c > 90 or not IsOk ( ai_depot [ base ] ) then
84128: LD_VAR 0 4
84132: PUSH
84133: LD_INT 90
84135: GREATER
84136: PUSH
84137: LD_EXP 49
84141: PUSH
84142: LD_VAR 0 1
84146: ARRAY
84147: PPUSH
84148: CALL_OW 302
84152: NOT
84153: OR
84154: IFFALSE 84181
// refueling = Replace ( refueling , base , false ) else
84156: LD_ADDR_VAR 0 9
84160: PUSH
84161: LD_VAR 0 9
84165: PPUSH
84166: LD_VAR 0 1
84170: PPUSH
84171: LD_INT 0
84173: PPUSH
84174: CALL_OW 1
84178: ST_TO_ADDR
84179: GO 84280
// if c < 25 or refueling [ base ] then
84181: LD_VAR 0 4
84185: PUSH
84186: LD_INT 25
84188: LESS
84189: PUSH
84190: LD_VAR 0 9
84194: PUSH
84195: LD_VAR 0 1
84199: ARRAY
84200: OR
84201: IFFALSE 84280
// begin ComMoveUnit ( ai_cargo_bay [ base ] , ai_depot [ base ] ) ;
84203: LD_EXP 85
84207: PUSH
84208: LD_VAR 0 1
84212: ARRAY
84213: PPUSH
84214: LD_EXP 49
84218: PUSH
84219: LD_VAR 0 1
84223: ARRAY
84224: PPUSH
84225: CALL_OW 112
// AddComRefuel ( ai_cargo_bay [ base ] , ai_depot [ base ] ) ;
84229: LD_EXP 85
84233: PUSH
84234: LD_VAR 0 1
84238: ARRAY
84239: PPUSH
84240: LD_EXP 49
84244: PUSH
84245: LD_VAR 0 1
84249: ARRAY
84250: PPUSH
84251: CALL_OW 210
// refueling = Replace ( refueling , base , true ) ;
84255: LD_ADDR_VAR 0 9
84259: PUSH
84260: LD_VAR 0 9
84264: PPUSH
84265: LD_VAR 0 1
84269: PPUSH
84270: LD_INT 1
84272: PPUSH
84273: CALL_OW 1
84277: ST_TO_ADDR
// continue ;
84278: GO 83874
// end ; end ; case base of 1 :
84280: LD_VAR 0 1
84284: PUSH
84285: LD_INT 1
84287: DOUBLE
84288: EQUAL
84289: IFTRUE 84293
84291: GO 84307
84293: POP
// area_list = [ ru_crate_area ] ; 2 :
84294: LD_ADDR_VAR 0 2
84298: PUSH
84299: LD_INT 11
84301: PUSH
84302: EMPTY
84303: LIST
84304: ST_TO_ADDR
84305: GO 84374
84307: LD_INT 2
84309: DOUBLE
84310: EQUAL
84311: IFTRUE 84315
84313: GO 84329
84315: POP
// area_list = [ alli_crate_area ] ; 3 :
84316: LD_ADDR_VAR 0 2
84320: PUSH
84321: LD_INT 12
84323: PUSH
84324: EMPTY
84325: LIST
84326: ST_TO_ADDR
84327: GO 84374
84329: LD_INT 3
84331: DOUBLE
84332: EQUAL
84333: IFTRUE 84337
84335: GO 84351
84337: POP
// area_list = [ ar_crate_area ] ; 4 :
84338: LD_ADDR_VAR 0 2
84342: PUSH
84343: LD_INT 13
84345: PUSH
84346: EMPTY
84347: LIST
84348: ST_TO_ADDR
84349: GO 84374
84351: LD_INT 4
84353: DOUBLE
84354: EQUAL
84355: IFTRUE 84359
84357: GO 84373
84359: POP
// area_list = [ am_crate_area ] ; end ;
84360: LD_ADDR_VAR 0 2
84364: PUSH
84365: LD_INT 14
84367: PUSH
84368: EMPTY
84369: LIST
84370: ST_TO_ADDR
84371: GO 84374
84373: POP
// crates_list = [ ] ;
84374: LD_ADDR_VAR 0 6
84378: PUSH
84379: EMPTY
84380: ST_TO_ADDR
// for b in area_list do
84381: LD_ADDR_VAR 0 7
84385: PUSH
84386: LD_VAR 0 2
84390: PUSH
84391: FOR_IN
84392: IFFALSE 84422
// begin crates_list = crates_list ^ GetListOfCratesInArea_ForGathering ( base , b ) ;
84394: LD_ADDR_VAR 0 6
84398: PUSH
84399: LD_VAR 0 6
84403: PUSH
84404: LD_VAR 0 1
84408: PPUSH
84409: LD_VAR 0 7
84413: PPUSH
84414: CALL 16999 0 2
84418: ADD
84419: ST_TO_ADDR
// end ;
84420: GO 84391
84422: POP
84423: POP
// if crates_list > 0 and ai_depot [ base ] > 0 then
84424: LD_VAR 0 6
84428: PUSH
84429: LD_INT 0
84431: GREATER
84432: PUSH
84433: LD_EXP 49
84437: PUSH
84438: LD_VAR 0 1
84442: ARRAY
84443: PUSH
84444: LD_INT 0
84446: GREATER
84447: AND
84448: IFFALSE 84574
// begin temp_list = [ ] ;
84450: LD_ADDR_VAR 0 5
84454: PUSH
84455: EMPTY
84456: ST_TO_ADDR
// for c in crates_list do
84457: LD_ADDR_VAR 0 4
84461: PUSH
84462: LD_VAR 0 6
84466: PUSH
84467: FOR_IN
84468: IFFALSE 84517
// temp_list = temp_list ^ GetDistUnitXY ( ai_cargo_bay [ base ] , c [ 1 ] , c [ 2 ] ) ;
84470: LD_ADDR_VAR 0 5
84474: PUSH
84475: LD_VAR 0 5
84479: PUSH
84480: LD_EXP 85
84484: PUSH
84485: LD_VAR 0 1
84489: ARRAY
84490: PPUSH
84491: LD_VAR 0 4
84495: PUSH
84496: LD_INT 1
84498: ARRAY
84499: PPUSH
84500: LD_VAR 0 4
84504: PUSH
84505: LD_INT 2
84507: ARRAY
84508: PPUSH
84509: CALL_OW 297
84513: ADD
84514: ST_TO_ADDR
84515: GO 84467
84517: POP
84518: POP
// temp_list = WorstFromListByList ( crates_list , temp_list ) ;
84519: LD_ADDR_VAR 0 5
84523: PUSH
84524: LD_VAR 0 6
84528: PPUSH
84529: LD_VAR 0 5
84533: PPUSH
84534: CALL_OW 78
84538: ST_TO_ADDR
// ComCollect ( ai_cargo_bay [ base ] , temp_list [ 1 ] , temp_list [ 2 ] ) ;
84539: LD_EXP 85
84543: PUSH
84544: LD_VAR 0 1
84548: ARRAY
84549: PPUSH
84550: LD_VAR 0 5
84554: PUSH
84555: LD_INT 1
84557: ARRAY
84558: PPUSH
84559: LD_VAR 0 5
84563: PUSH
84564: LD_INT 2
84566: ARRAY
84567: PPUSH
84568: CALL_OW 117
// end else
84572: GO 84749
// if IsOk ( ai_depot [ base ] ) and Carry ( ai_cargo_bay [ base ] ) then
84574: LD_EXP 49
84578: PUSH
84579: LD_VAR 0 1
84583: ARRAY
84584: PPUSH
84585: CALL_OW 302
84589: PUSH
84590: LD_EXP 85
84594: PUSH
84595: LD_VAR 0 1
84599: ARRAY
84600: PPUSH
84601: CALL_OW 281
84605: AND
84606: IFFALSE 84636
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) else
84608: LD_EXP 85
84612: PUSH
84613: LD_VAR 0 1
84617: ARRAY
84618: PPUSH
84619: LD_EXP 49
84623: PUSH
84624: LD_VAR 0 1
84628: ARRAY
84629: PPUSH
84630: CALL_OW 161
84634: GO 84749
// if not IsInArea ( ai_cargo_bay [ base ] , area ) then
84636: LD_EXP 85
84640: PUSH
84641: LD_VAR 0 1
84645: ARRAY
84646: PPUSH
84647: LD_VAR 0 3
84651: PPUSH
84652: CALL_OW 308
84656: NOT
84657: IFFALSE 84749
// if IsOk ( ai_depot [ base ] ) then
84659: LD_EXP 49
84663: PUSH
84664: LD_VAR 0 1
84668: ARRAY
84669: PPUSH
84670: CALL_OW 302
84674: IFFALSE 84704
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) else
84676: LD_EXP 85
84680: PUSH
84681: LD_VAR 0 1
84685: ARRAY
84686: PPUSH
84687: LD_EXP 49
84691: PUSH
84692: LD_VAR 0 1
84696: ARRAY
84697: PPUSH
84698: CALL_OW 161
84702: GO 84749
// ComMoveXY ( ai_cargo_bay [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
84704: LD_EXP 85
84708: PUSH
84709: LD_VAR 0 1
84713: ARRAY
84714: PPUSH
84715: LD_EXP 73
84719: PUSH
84720: LD_VAR 0 1
84724: ARRAY
84725: PUSH
84726: LD_INT 1
84728: ARRAY
84729: PPUSH
84730: LD_EXP 73
84734: PUSH
84735: LD_VAR 0 1
84739: ARRAY
84740: PUSH
84741: LD_INT 2
84743: ARRAY
84744: PPUSH
84745: CALL_OW 111
// end ;
84749: GO 83874
84751: POP
84752: POP
// until false ;
84753: LD_INT 0
84755: IFFALSE 83835
// end ;
84757: PPOPN 9
84759: 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 ;
84760: GO 84762
84762: DISABLE
84763: LD_INT 0
84765: PPUSH
84766: PPUSH
84767: PPUSH
84768: PPUSH
84769: PPUSH
84770: PPUSH
84771: PPUSH
84772: PPUSH
84773: PPUSH
// begin repeat if ai_bases = 0 then
84774: LD_EXP 39
84778: PUSH
84779: LD_INT 0
84781: EQUAL
84782: IFFALSE 84786
// exit ;
84784: GO 85611
// wait ( 0 0$1 mod ( ai_bases + 0 ) ) ;
84786: LD_INT 35
84788: PUSH
84789: LD_EXP 39
84793: PUSH
84794: LD_INT 0
84796: PLUS
84797: MOD
84798: PPUSH
84799: CALL_OW 67
// for base in ai_bases do
84803: LD_ADDR_VAR 0 6
84807: PUSH
84808: LD_EXP 39
84812: PUSH
84813: FOR_IN
84814: IFFALSE 85605
// begin wait ( 0 0$1 div ( ai_bases + 0 ) ) ;
84816: LD_INT 35
84818: PUSH
84819: LD_EXP 39
84823: PUSH
84824: LD_INT 0
84826: PLUS
84827: DIV
84828: PPUSH
84829: CALL_OW 67
// side = GetBaseSide ( base ) ;
84833: LD_ADDR_VAR 0 1
84837: PUSH
84838: LD_VAR 0 6
84842: PPUSH
84843: CALL 24885 0 1
84847: ST_TO_ADDR
// scientists_list = ai_scientists [ base ] diff ai_heal_these_humans [ base ] ;
84848: LD_ADDR_VAR 0 3
84852: PUSH
84853: LD_EXP 45
84857: PUSH
84858: LD_VAR 0 6
84862: ARRAY
84863: PUSH
84864: LD_EXP 75
84868: PUSH
84869: LD_VAR 0 6
84873: ARRAY
84874: DIFF
84875: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
84876: LD_ADDR_VAR 0 4
84880: PUSH
84881: LD_EXP 75
84885: PUSH
84886: LD_VAR 0 6
84890: ARRAY
84891: ST_TO_ADDR
// i = 1 ;
84892: LD_ADDR_VAR 0 2
84896: PUSH
84897: LD_INT 1
84899: ST_TO_ADDR
// while i <= scientists_list do
84900: LD_VAR 0 2
84904: PUSH
84905: LD_VAR 0 3
84909: LESSEQUAL
84910: IFFALSE 84993
// begin if GetLives ( scientists_list [ i ] ) <= 700 then
84912: LD_VAR 0 3
84916: PUSH
84917: LD_VAR 0 2
84921: ARRAY
84922: PPUSH
84923: CALL_OW 256
84927: PUSH
84928: LD_INT 700
84930: LESSEQUAL
84931: IFFALSE 84977
// begin temp_list = temp_list ^ scientists_list [ i ] ;
84933: LD_ADDR_VAR 0 4
84937: PUSH
84938: LD_VAR 0 4
84942: PUSH
84943: LD_VAR 0 3
84947: PUSH
84948: LD_VAR 0 2
84952: ARRAY
84953: ADD
84954: ST_TO_ADDR
// scientists_list = Delete ( scientists_list , i ) ;
84955: LD_ADDR_VAR 0 3
84959: PUSH
84960: LD_VAR 0 3
84964: PPUSH
84965: LD_VAR 0 2
84969: PPUSH
84970: CALL_OW 3
84974: ST_TO_ADDR
// continue ;
84975: GO 84900
// end ; i = i + 1 ;
84977: LD_ADDR_VAR 0 2
84981: PUSH
84982: LD_VAR 0 2
84986: PUSH
84987: LD_INT 1
84989: PLUS
84990: ST_TO_ADDR
// end ;
84991: GO 84900
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
84993: LD_ADDR_EXP 75
84997: PUSH
84998: LD_EXP 75
85002: PPUSH
85003: LD_VAR 0 6
85007: PPUSH
85008: LD_VAR 0 4
85012: PPUSH
85013: CALL_OW 1
85017: ST_TO_ADDR
// temp_list = [ ] ;
85018: LD_ADDR_VAR 0 4
85022: PUSH
85023: EMPTY
85024: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
85025: LD_ADDR_VAR 0 2
85029: PUSH
85030: LD_EXP 75
85034: PUSH
85035: LD_VAR 0 6
85039: ARRAY
85040: PUSH
85041: FOR_IN
85042: IFFALSE 85092
// if GetLives ( i ) < 1000 and IsInUnit ( i ) = 0 then
85044: LD_VAR 0 2
85048: PPUSH
85049: CALL_OW 256
85053: PUSH
85054: LD_INT 1000
85056: LESS
85057: PUSH
85058: LD_VAR 0 2
85062: PPUSH
85063: CALL_OW 310
85067: PUSH
85068: LD_INT 0
85070: EQUAL
85071: AND
85072: IFFALSE 85090
// temp_list = temp_list ^ i ;
85074: LD_ADDR_VAR 0 4
85078: PUSH
85079: LD_VAR 0 4
85083: PUSH
85084: LD_VAR 0 2
85088: ADD
85089: ST_TO_ADDR
85090: GO 85041
85092: POP
85093: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
85094: LD_ADDR_EXP 75
85098: PUSH
85099: LD_EXP 75
85103: PPUSH
85104: LD_VAR 0 6
85108: PPUSH
85109: LD_VAR 0 4
85113: PPUSH
85114: CALL_OW 1
85118: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
85119: LD_ADDR_VAR 0 2
85123: PUSH
85124: LD_EXP 75
85128: PUSH
85129: LD_VAR 0 6
85133: ARRAY
85134: PUSH
85135: FOR_IN
85136: IFFALSE 85224
// begin if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
85138: LD_VAR 0 2
85142: PPUSH
85143: LD_EXP 73
85147: PUSH
85148: LD_VAR 0 6
85152: ARRAY
85153: PUSH
85154: LD_INT 1
85156: ARRAY
85157: PPUSH
85158: LD_EXP 73
85162: PUSH
85163: LD_VAR 0 6
85167: ARRAY
85168: PUSH
85169: LD_INT 2
85171: ARRAY
85172: PPUSH
85173: CALL_OW 297
85177: PUSH
85178: LD_INT 4
85180: GREATER
85181: IFFALSE 85222
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
85183: LD_VAR 0 2
85187: PPUSH
85188: LD_EXP 73
85192: PUSH
85193: LD_VAR 0 6
85197: ARRAY
85198: PUSH
85199: LD_INT 1
85201: ARRAY
85202: PPUSH
85203: LD_EXP 73
85207: PUSH
85208: LD_VAR 0 6
85212: ARRAY
85213: PUSH
85214: LD_INT 2
85216: ARRAY
85217: PPUSH
85218: CALL_OW 111
// end ;
85222: GO 85135
85224: POP
85225: POP
// if scientists_list = 0 then
85226: LD_VAR 0 3
85230: PUSH
85231: LD_INT 0
85233: EQUAL
85234: IFFALSE 85238
// continue ;
85236: GO 84813
// if ai_heal_these_humans [ base ] > 0 then
85238: LD_EXP 75
85242: PUSH
85243: LD_VAR 0 6
85247: ARRAY
85248: PUSH
85249: LD_INT 0
85251: GREATER
85252: IFFALSE 85538
// begin area = GetBaseArea ( base ) ;
85254: LD_ADDR_VAR 0 9
85258: PUSH
85259: LD_VAR 0 6
85263: PPUSH
85264: CALL 24795 0 1
85268: ST_TO_ADDR
// temp_list = UnitFilter ( ai_heal_these_humans [ base ] , [ f_inarea , area ] ) ;
85269: LD_ADDR_VAR 0 4
85273: PUSH
85274: LD_EXP 75
85278: PUSH
85279: LD_VAR 0 6
85283: ARRAY
85284: PPUSH
85285: LD_INT 95
85287: PUSH
85288: LD_VAR 0 9
85292: PUSH
85293: EMPTY
85294: LIST
85295: LIST
85296: PPUSH
85297: CALL_OW 72
85301: ST_TO_ADDR
// if temp_list > 0 then
85302: LD_VAR 0 4
85306: PUSH
85307: LD_INT 0
85309: GREATER
85310: IFFALSE 85538
// begin scientists_list = GetHumansOutOfUnits ( scientists_list ) ;
85312: LD_ADDR_VAR 0 3
85316: PUSH
85317: LD_VAR 0 3
85321: PPUSH
85322: CALL 45199 0 1
85326: ST_TO_ADDR
// if base = 2 and alliance_deal_status = 2 then
85327: LD_VAR 0 6
85331: PUSH
85332: LD_INT 2
85334: EQUAL
85335: PUSH
85336: LD_EXP 131
85340: PUSH
85341: LD_INT 2
85343: EQUAL
85344: AND
85345: IFFALSE 85401
// begin temp_list_3 = UnitFilter ( [ Joan , Roth , Gossudarov ] , [ f_alive ] ) ;
85347: LD_ADDR_VAR 0 8
85351: PUSH
85352: LD_EXP 28
85356: PUSH
85357: LD_EXP 26
85361: PUSH
85362: LD_EXP 27
85366: PUSH
85367: EMPTY
85368: LIST
85369: LIST
85370: LIST
85371: PPUSH
85372: LD_INT 51
85374: PUSH
85375: EMPTY
85376: LIST
85377: PPUSH
85378: CALL_OW 72
85382: ST_TO_ADDR
// scientists_list = scientists_list diff temp_list_3 ;
85383: LD_ADDR_VAR 0 3
85387: PUSH
85388: LD_VAR 0 3
85392: PUSH
85393: LD_VAR 0 8
85397: DIFF
85398: ST_TO_ADDR
// end else
85399: GO 85408
// temp_list_3 = [ ] ;
85401: LD_ADDR_VAR 0 8
85405: PUSH
85406: EMPTY
85407: ST_TO_ADDR
// repeat i = 1 ;
85408: LD_ADDR_VAR 0 2
85412: PUSH
85413: LD_INT 1
85415: ST_TO_ADDR
// while i <= temp_list do
85416: LD_VAR 0 2
85420: PUSH
85421: LD_VAR 0 4
85425: LESSEQUAL
85426: IFFALSE 85518
// begin if scientists_list = 0 then
85428: LD_VAR 0 3
85432: PUSH
85433: LD_INT 0
85435: EQUAL
85436: IFFALSE 85440
// break ;
85438: GO 85518
// temp_unit = NearestUnitToUnit ( scientists_list , temp_list [ i ] ) ;
85440: LD_ADDR_VAR 0 5
85444: PUSH
85445: LD_VAR 0 3
85449: PPUSH
85450: LD_VAR 0 4
85454: PUSH
85455: LD_VAR 0 2
85459: ARRAY
85460: PPUSH
85461: CALL_OW 74
85465: ST_TO_ADDR
// ComHeal ( temp_unit , temp_list [ i ] ) ;
85466: LD_VAR 0 5
85470: PPUSH
85471: LD_VAR 0 4
85475: PUSH
85476: LD_VAR 0 2
85480: ARRAY
85481: PPUSH
85482: CALL_OW 128
// scientists_list = scientists_list diff temp_unit ;
85486: LD_ADDR_VAR 0 3
85490: PUSH
85491: LD_VAR 0 3
85495: PUSH
85496: LD_VAR 0 5
85500: DIFF
85501: ST_TO_ADDR
// i = i + 1 ;
85502: LD_ADDR_VAR 0 2
85506: PUSH
85507: LD_VAR 0 2
85511: PUSH
85512: LD_INT 1
85514: PLUS
85515: ST_TO_ADDR
// end ;
85516: GO 85416
// until scientists_list = 0 ;
85518: LD_VAR 0 3
85522: PUSH
85523: LD_INT 0
85525: EQUAL
85526: IFFALSE 85408
// scientists_list = temp_list_3 ;
85528: LD_ADDR_VAR 0 3
85532: PUSH
85533: LD_VAR 0 8
85537: ST_TO_ADDR
// end ; end ; DistributeHumansToBuildings ( base , scientists_list , UnitFilter ( ai_labs [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_scientistic , 6 , true , false ) ;
85538: LD_VAR 0 6
85542: PPUSH
85543: LD_VAR 0 3
85547: PPUSH
85548: LD_EXP 50
85552: PUSH
85553: LD_VAR 0 6
85557: ARRAY
85558: PPUSH
85559: LD_INT 50
85561: PUSH
85562: EMPTY
85563: LIST
85564: PUSH
85565: LD_INT 3
85567: PUSH
85568: LD_INT 57
85570: PUSH
85571: EMPTY
85572: LIST
85573: PUSH
85574: EMPTY
85575: LIST
85576: LIST
85577: PUSH
85578: EMPTY
85579: LIST
85580: LIST
85581: PPUSH
85582: CALL_OW 72
85586: PPUSH
85587: LD_INT 4
85589: PPUSH
85590: LD_INT 6
85592: PPUSH
85593: LD_INT 1
85595: PPUSH
85596: LD_INT 0
85598: PPUSH
85599: CALL 34075 0 7
// end ;
85603: GO 84813
85605: POP
85606: POP
// until false ;
85607: LD_INT 0
85609: IFFALSE 84774
// end ; end_of_file
85611: PPOPN 9
85613: END
// export function StratGroupAUsed ; begin
85614: LD_INT 0
85616: PPUSH
// result := american_deal_status in [ 2 , 3 ] ;
85617: LD_ADDR_VAR 0 1
85621: PUSH
85622: LD_EXP 128
85626: PUSH
85627: LD_INT 2
85629: PUSH
85630: LD_INT 3
85632: PUSH
85633: EMPTY
85634: LIST
85635: LIST
85636: IN
85637: ST_TO_ADDR
// end ;
85638: LD_VAR 0 1
85642: RET
// export function StratGroupBUsed ; begin
85643: LD_INT 0
85645: PPUSH
// result := alliance_deal_status = 2 and 2 in ai_bases ;
85646: LD_ADDR_VAR 0 1
85650: PUSH
85651: LD_EXP 131
85655: PUSH
85656: LD_INT 2
85658: EQUAL
85659: PUSH
85660: LD_INT 2
85662: PUSH
85663: LD_EXP 39
85667: IN
85668: AND
85669: ST_TO_ADDR
// end ;
85670: LD_VAR 0 1
85674: RET
// export function StratGroupCUsed ; begin
85675: LD_INT 0
85677: PPUSH
// result := not StratGroupAUsed and not StratGroupBUsed ;
85678: LD_ADDR_VAR 0 1
85682: PUSH
85683: CALL 85614 0 0
85687: NOT
85688: PUSH
85689: CALL 85643 0 0
85693: NOT
85694: AND
85695: ST_TO_ADDR
// end ;
85696: LD_VAR 0 1
85700: RET
// export function AdjustTimeToDifficulty ( time ) ; begin
85701: LD_INT 0
85703: PPUSH
// result = RoundDouble ( time * [ 1.5 , 1.25 , 1 ] [ difficulty ] ) ;
85704: LD_ADDR_VAR 0 2
85708: PUSH
85709: LD_VAR 0 1
85713: PUSH
85714: LD_REAL  1.50000000000000E+0000
85717: PUSH
85718: LD_REAL  1.25000000000000E+0000
85721: PUSH
85722: LD_INT 1
85724: PUSH
85725: EMPTY
85726: LIST
85727: LIST
85728: LIST
85729: PUSH
85730: LD_OWVAR 67
85734: ARRAY
85735: MUL
85736: PPUSH
85737: CALL 20363 0 1
85741: ST_TO_ADDR
// end ;
85742: LD_VAR 0 2
85746: RET
// export function GetApes ( side ) ; begin
85747: LD_INT 0
85749: 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 ] ] ] ) ;
85750: LD_ADDR_VAR 0 2
85754: PUSH
85755: LD_INT 22
85757: PUSH
85758: LD_VAR 0 1
85762: PUSH
85763: EMPTY
85764: LIST
85765: LIST
85766: PUSH
85767: LD_INT 2
85769: PUSH
85770: LD_INT 25
85772: PUSH
85773: LD_INT 12
85775: PUSH
85776: EMPTY
85777: LIST
85778: LIST
85779: PUSH
85780: LD_INT 25
85782: PUSH
85783: LD_INT 15
85785: PUSH
85786: EMPTY
85787: LIST
85788: LIST
85789: PUSH
85790: LD_INT 25
85792: PUSH
85793: LD_INT 16
85795: PUSH
85796: EMPTY
85797: LIST
85798: LIST
85799: PUSH
85800: LD_INT 25
85802: PUSH
85803: LD_INT 17
85805: PUSH
85806: EMPTY
85807: LIST
85808: LIST
85809: PUSH
85810: EMPTY
85811: LIST
85812: LIST
85813: LIST
85814: LIST
85815: LIST
85816: PUSH
85817: EMPTY
85818: LIST
85819: LIST
85820: PPUSH
85821: CALL_OW 69
85825: ST_TO_ADDR
// end ;
85826: LD_VAR 0 2
85830: RET
// export function GetMainPlayerCharacters ; begin
85831: LD_INT 0
85833: PPUSH
// result = UnitFilter ( [ Heike , Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis , Khattam , Kozlov , player_scout , Kyouma ] , [ f_side , you ] ) ;
85834: LD_ADDR_VAR 0 1
85838: PUSH
85839: LD_EXP 10
85843: PUSH
85844: LD_EXP 11
85848: PUSH
85849: LD_EXP 12
85853: PUSH
85854: LD_EXP 13
85858: PUSH
85859: LD_EXP 14
85863: PUSH
85864: LD_EXP 15
85868: PUSH
85869: LD_EXP 16
85873: PUSH
85874: LD_EXP 17
85878: PUSH
85879: LD_EXP 18
85883: PUSH
85884: LD_EXP 19
85888: PUSH
85889: LD_EXP 20
85893: PUSH
85894: LD_EXP 21
85898: PUSH
85899: LD_EXP 22
85903: PUSH
85904: LD_EXP 23
85908: PUSH
85909: LD_EXP 24
85913: PUSH
85914: EMPTY
85915: LIST
85916: LIST
85917: LIST
85918: LIST
85919: LIST
85920: LIST
85921: LIST
85922: LIST
85923: LIST
85924: LIST
85925: LIST
85926: LIST
85927: LIST
85928: LIST
85929: LIST
85930: PPUSH
85931: LD_INT 22
85933: PUSH
85934: LD_EXP 2
85938: PUSH
85939: EMPTY
85940: LIST
85941: LIST
85942: PPUSH
85943: CALL_OW 72
85947: ST_TO_ADDR
// end ;
85948: LD_VAR 0 1
85952: RET
// export function GetNonmainPlayerCharacters ; begin
85953: LD_INT 0
85955: PPUSH
// result = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) diff ( GetApes ( you ) ^ GetMainPlayerCharacters ) ;
85956: LD_ADDR_VAR 0 1
85960: PUSH
85961: LD_INT 22
85963: PUSH
85964: LD_EXP 2
85968: PUSH
85969: EMPTY
85970: LIST
85971: LIST
85972: PUSH
85973: LD_INT 21
85975: PUSH
85976: LD_INT 1
85978: PUSH
85979: EMPTY
85980: LIST
85981: LIST
85982: PUSH
85983: EMPTY
85984: LIST
85985: LIST
85986: PPUSH
85987: CALL_OW 69
85991: PUSH
85992: LD_EXP 2
85996: PPUSH
85997: CALL 85747 0 1
86001: PUSH
86002: CALL 85831 0 0
86006: ADD
86007: DIFF
86008: ST_TO_ADDR
// end ;
86009: LD_VAR 0 1
86013: RET
// every 0 0$1.6 do var i , lab , base , timeout , val ; var sib_lab , penalty ;
86014: GO 86016
86016: DISABLE
86017: LD_INT 0
86019: PPUSH
86020: PPUSH
86021: PPUSH
86022: PPUSH
86023: PPUSH
86024: PPUSH
86025: PPUSH
// begin sib_lab = [ 0 , 0 , 0 , 0 ] ;
86026: LD_ADDR_VAR 0 6
86030: PUSH
86031: LD_INT 0
86033: PUSH
86034: LD_INT 0
86036: PUSH
86037: LD_INT 0
86039: PUSH
86040: LD_INT 0
86042: PUSH
86043: EMPTY
86044: LIST
86045: LIST
86046: LIST
86047: LIST
86048: ST_TO_ADDR
// penalty := LoadVariable ( Am_scientists_escaped_13a_cont , false ) ;
86049: LD_ADDR_VAR 0 7
86053: PUSH
86054: LD_STRING Am_scientists_escaped_13a_cont
86056: PPUSH
86057: LD_INT 0
86059: PPUSH
86060: CALL_OW 30
86064: ST_TO_ADDR
// for i in [ GetBaseSide ( 1 ) , GetBaseSide ( 4 ) ] do
86065: LD_ADDR_VAR 0 1
86069: PUSH
86070: LD_INT 1
86072: PPUSH
86073: CALL 24885 0 1
86077: PUSH
86078: LD_INT 4
86080: PPUSH
86081: CALL 24885 0 1
86085: PUSH
86086: EMPTY
86087: LIST
86088: LIST
86089: PUSH
86090: FOR_IN
86091: IFFALSE 86170
// begin SetTech ( tech_sibdet , i , state_researched ) ;
86093: LD_INT 20
86095: PPUSH
86096: LD_VAR 0 1
86100: PPUSH
86101: LD_INT 2
86103: PPUSH
86104: CALL_OW 322
// SetTech ( tech_sibpow , i , state_researched ) ;
86108: LD_INT 21
86110: PPUSH
86111: LD_VAR 0 1
86115: PPUSH
86116: LD_INT 2
86118: PPUSH
86119: CALL_OW 322
// SetTech ( tech_sibeng , i , state_researched ) ;
86123: LD_INT 22
86125: PPUSH
86126: LD_VAR 0 1
86130: PPUSH
86131: LD_INT 2
86133: PPUSH
86134: CALL_OW 322
// SetTech ( tech_gun , i , state_researched ) ;
86138: LD_INT 39
86140: PPUSH
86141: LD_VAR 0 1
86145: PPUSH
86146: LD_INT 2
86148: PPUSH
86149: CALL_OW 322
// SetTech ( tech_rocket , i , state_researched ) ;
86153: LD_INT 40
86155: PPUSH
86156: LD_VAR 0 1
86160: PPUSH
86161: LD_INT 2
86163: PPUSH
86164: CALL_OW 322
// end ;
86168: GO 86090
86170: POP
86171: POP
// repeat wait ( 0 0$3 ) ;
86172: LD_INT 105
86174: PPUSH
86175: CALL_OW 67
// if not 1 in ai_bases and not 4 in ai_bases then
86179: LD_INT 1
86181: PUSH
86182: LD_EXP 39
86186: IN
86187: NOT
86188: PUSH
86189: LD_INT 4
86191: PUSH
86192: LD_EXP 39
86196: IN
86197: NOT
86198: AND
86199: IFFALSE 86203
// exit ;
86201: GO 87009
// for base in [ 1 , 4 ] do
86203: LD_ADDR_VAR 0 3
86207: PUSH
86208: LD_INT 1
86210: PUSH
86211: LD_INT 4
86213: PUSH
86214: EMPTY
86215: LIST
86216: LIST
86217: PUSH
86218: FOR_IN
86219: IFFALSE 87003
// begin if not base in ai_bases then
86221: LD_VAR 0 3
86225: PUSH
86226: LD_EXP 39
86230: IN
86231: NOT
86232: IFFALSE 86236
// continue ;
86234: GO 86218
// case base of 1 :
86236: LD_VAR 0 3
86240: PUSH
86241: LD_INT 1
86243: DOUBLE
86244: EQUAL
86245: IFTRUE 86249
86247: GO 86292
86249: POP
// begin if StratGroupAUsed then
86250: CALL 85614 0 0
86254: IFFALSE 86266
// timeout = 75 75$0 else
86256: LD_ADDR_VAR 0 4
86260: PUSH
86261: LD_INT 157500
86263: ST_TO_ADDR
86264: GO 86290
// if StratGroupBUsed then
86266: CALL 85643 0 0
86270: IFFALSE 86282
// timeout = 85 85$0 else
86272: LD_ADDR_VAR 0 4
86276: PUSH
86277: LD_INT 178500
86279: ST_TO_ADDR
86280: GO 86290
// timeout = 65 65$0 ;
86282: LD_ADDR_VAR 0 4
86286: PUSH
86287: LD_INT 136500
86289: ST_TO_ADDR
// end ; 4 :
86290: GO 86517
86292: LD_INT 4
86294: DOUBLE
86295: EQUAL
86296: IFTRUE 86300
86298: GO 86516
86300: POP
// begin if StratGroupCUsed then
86301: CALL 85675 0 0
86305: IFFALSE 86317
// timeout = 45 45$0 else
86307: LD_ADDR_VAR 0 4
86311: PUSH
86312: LD_INT 94500
86314: ST_TO_ADDR
86315: GO 86494
// if StratGroupBUsed then
86317: CALL 85643 0 0
86321: IFFALSE 86333
// timeout = 55 55$0 else
86323: LD_ADDR_VAR 0 4
86327: PUSH
86328: LD_INT 115500
86330: ST_TO_ADDR
86331: GO 86494
// begin val = true ;
86333: LD_ADDR_VAR 0 5
86337: PUSH
86338: LD_INT 1
86340: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , russians ] , [ f_or , [ f_btype , b_bunker ] , [ f_btype , b_turret ] ] , [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) do
86341: LD_ADDR_VAR 0 1
86345: PUSH
86346: LD_INT 22
86348: PUSH
86349: LD_EXP 3
86353: PUSH
86354: EMPTY
86355: LIST
86356: LIST
86357: PUSH
86358: LD_INT 2
86360: PUSH
86361: LD_INT 30
86363: PUSH
86364: LD_INT 32
86366: PUSH
86367: EMPTY
86368: LIST
86369: LIST
86370: PUSH
86371: LD_INT 30
86373: PUSH
86374: LD_INT 33
86376: PUSH
86377: EMPTY
86378: LIST
86379: LIST
86380: PUSH
86381: EMPTY
86382: LIST
86383: LIST
86384: LIST
86385: PUSH
86386: LD_INT 50
86388: PUSH
86389: EMPTY
86390: LIST
86391: PUSH
86392: LD_INT 3
86394: PUSH
86395: LD_INT 57
86397: PUSH
86398: EMPTY
86399: LIST
86400: PUSH
86401: EMPTY
86402: LIST
86403: LIST
86404: PUSH
86405: EMPTY
86406: LIST
86407: LIST
86408: LIST
86409: LIST
86410: PPUSH
86411: CALL_OW 69
86415: PUSH
86416: FOR_IN
86417: IFFALSE 86461
// if GetY ( i ) >= 35 and GetY ( i ) <= 42 then
86419: LD_VAR 0 1
86423: PPUSH
86424: CALL_OW 251
86428: PUSH
86429: LD_INT 35
86431: GREATEREQUAL
86432: PUSH
86433: LD_VAR 0 1
86437: PPUSH
86438: CALL_OW 251
86442: PUSH
86443: LD_INT 42
86445: LESSEQUAL
86446: AND
86447: IFFALSE 86459
// begin val = false ;
86449: LD_ADDR_VAR 0 5
86453: PUSH
86454: LD_INT 0
86456: ST_TO_ADDR
// break ;
86457: GO 86461
// end ;
86459: GO 86416
86461: POP
86462: POP
// if StratGroupAUsed and not val then
86463: CALL 85614 0 0
86467: PUSH
86468: LD_VAR 0 5
86472: NOT
86473: AND
86474: IFFALSE 86486
// timeout = 55 55$0 else
86476: LD_ADDR_VAR 0 4
86480: PUSH
86481: LD_INT 115500
86483: ST_TO_ADDR
86484: GO 86494
// timeout = 75 75$0 ;
86486: LD_ADDR_VAR 0 4
86490: PUSH
86491: LD_INT 157500
86493: ST_TO_ADDR
// end ; if penalty then
86494: LD_VAR 0 7
86498: IFFALSE 86514
// timeout = timeout - 5 5$0 ;
86500: LD_ADDR_VAR 0 4
86504: PUSH
86505: LD_VAR 0 4
86509: PUSH
86510: LD_INT 10500
86512: MINUS
86513: ST_TO_ADDR
// end ; end ;
86514: GO 86517
86516: POP
// timeout = AdjustTimeToDifficulty ( timeout ) ;
86517: LD_ADDR_VAR 0 4
86521: PUSH
86522: LD_VAR 0 4
86526: PPUSH
86527: CALL 85701 0 1
86531: ST_TO_ADDR
// if not Researched ( GetBaseSide ( base ) , tech_sibfiss ) then
86532: LD_VAR 0 3
86536: PPUSH
86537: CALL 24885 0 1
86541: PPUSH
86542: LD_INT 25
86544: PPUSH
86545: CALL_OW 325
86549: NOT
86550: IFFALSE 86837
// begin if tick < timeout - 25 25$0 then
86552: LD_OWVAR 1
86556: PUSH
86557: LD_VAR 0 4
86561: PUSH
86562: LD_INT 52500
86564: MINUS
86565: LESS
86566: IFFALSE 86570
// continue ;
86568: GO 86218
// if IsDead ( sib_lab [ base ] ) or GetSide ( sib_lab [ base ] ) <> GetBaseSide ( base ) then
86570: LD_VAR 0 6
86574: PUSH
86575: LD_VAR 0 3
86579: ARRAY
86580: PPUSH
86581: CALL_OW 301
86585: PUSH
86586: LD_VAR 0 6
86590: PUSH
86591: LD_VAR 0 3
86595: ARRAY
86596: PPUSH
86597: CALL_OW 255
86601: PUSH
86602: LD_VAR 0 3
86606: PPUSH
86607: CALL 24885 0 1
86611: NONEQUAL
86612: OR
86613: IFFALSE 86638
// sib_lab = Replace ( sib_lab , base , 0 ) ;
86615: LD_ADDR_VAR 0 6
86619: PUSH
86620: LD_VAR 0 6
86624: PPUSH
86625: LD_VAR 0 3
86629: PPUSH
86630: LD_INT 0
86632: PPUSH
86633: CALL_OW 1
86637: ST_TO_ADDR
// if sib_lab [ base ] = 0 then
86638: LD_VAR 0 6
86642: PUSH
86643: LD_VAR 0 3
86647: ARRAY
86648: PUSH
86649: LD_INT 0
86651: EQUAL
86652: IFFALSE 86783
// 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
86654: LD_ADDR_VAR 0 1
86658: PUSH
86659: LD_EXP 76
86663: PUSH
86664: LD_VAR 0 3
86668: ARRAY
86669: PPUSH
86670: LD_INT 2
86672: PUSH
86673: LD_INT 30
86675: PUSH
86676: LD_INT 6
86678: PUSH
86679: EMPTY
86680: LIST
86681: LIST
86682: PUSH
86683: LD_INT 30
86685: PUSH
86686: LD_INT 7
86688: PUSH
86689: EMPTY
86690: LIST
86691: LIST
86692: PUSH
86693: LD_INT 30
86695: PUSH
86696: LD_INT 8
86698: PUSH
86699: EMPTY
86700: LIST
86701: LIST
86702: PUSH
86703: EMPTY
86704: LIST
86705: LIST
86706: LIST
86707: LIST
86708: PPUSH
86709: CALL_OW 72
86713: PUSH
86714: FOR_IN
86715: IFFALSE 86781
// if b_lab_siberium in [ GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) ] then
86717: LD_INT 11
86719: PUSH
86720: LD_VAR 0 1
86724: PPUSH
86725: LD_INT 1
86727: PPUSH
86728: CALL_OW 268
86732: PUSH
86733: LD_VAR 0 1
86737: PPUSH
86738: LD_INT 2
86740: PPUSH
86741: CALL_OW 268
86745: PUSH
86746: EMPTY
86747: LIST
86748: LIST
86749: IN
86750: IFFALSE 86779
// begin sib_lab = Replace ( sib_lab , base , i ) ;
86752: LD_ADDR_VAR 0 6
86756: PUSH
86757: LD_VAR 0 6
86761: PPUSH
86762: LD_VAR 0 3
86766: PPUSH
86767: LD_VAR 0 1
86771: PPUSH
86772: CALL_OW 1
86776: ST_TO_ADDR
// break ;
86777: GO 86781
// end ;
86779: GO 86714
86781: POP
86782: POP
// end ; if IsOk ( sib_lab [ base ] ) and IsIdle ( sib_lab [ base ] ) then
86783: LD_VAR 0 6
86787: PUSH
86788: LD_VAR 0 3
86792: ARRAY
86793: PPUSH
86794: CALL_OW 302
86798: PUSH
86799: LD_VAR 0 6
86803: PUSH
86804: LD_VAR 0 3
86808: ARRAY
86809: PPUSH
86810: CALL_OW 316
86814: AND
86815: IFFALSE 86835
// ComResearch ( sib_lab [ base ] , tech_sibfiss ) ;
86817: LD_VAR 0 6
86821: PUSH
86822: LD_VAR 0 3
86826: ARRAY
86827: PPUSH
86828: LD_INT 25
86830: PPUSH
86831: CALL_OW 124
// end else
86835: GO 87001
// begin if ai_sib_bomb_vehicles [ base ] = 0 then
86837: LD_EXP 107
86841: PUSH
86842: LD_VAR 0 3
86846: ARRAY
86847: PUSH
86848: LD_INT 0
86850: EQUAL
86851: IFFALSE 87001
// 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
86853: LD_EXP 63
86857: PUSH
86858: LD_VAR 0 3
86862: ARRAY
86863: PPUSH
86864: CALL_OW 302
86868: PUSH
86869: LD_EXP 63
86873: PUSH
86874: LD_VAR 0 3
86878: ARRAY
86879: PPUSH
86880: CALL_OW 266
86884: PUSH
86885: LD_INT 3
86887: EQUAL
86888: AND
86889: PUSH
86890: LD_EXP 63
86894: PUSH
86895: LD_VAR 0 3
86899: ARRAY
86900: PPUSH
86901: CALL_OW 316
86905: AND
86906: IFFALSE 87001
// case GetNation ( ai_sib_bomb_fact [ base ] ) of nation_american :
86908: LD_EXP 63
86912: PUSH
86913: LD_VAR 0 3
86917: ARRAY
86918: PPUSH
86919: CALL_OW 248
86923: PUSH
86924: LD_INT 1
86926: DOUBLE
86927: EQUAL
86928: IFTRUE 86932
86930: GO 86962
86932: POP
// ComConstruct ( ai_sib_bomb_fact [ base ] , us_heavy_tracked , engine_combustion , control_manual , us_siberium_rocket ) ; nation_russian :
86933: LD_EXP 63
86937: PUSH
86938: LD_VAR 0 3
86942: ARRAY
86943: PPUSH
86944: LD_INT 4
86946: PPUSH
86947: LD_INT 1
86949: PPUSH
86950: LD_INT 1
86952: PPUSH
86953: LD_INT 8
86955: PPUSH
86956: CALL_OW 125
86960: GO 87001
86962: LD_INT 3
86964: DOUBLE
86965: EQUAL
86966: IFTRUE 86970
86968: GO 87000
86970: POP
// ComConstruct ( ai_sib_bomb_fact [ base ] , ru_heavy_tracked , engine_combustion , control_manual , ru_siberium_rocket ) ; end ;
86971: LD_EXP 63
86975: PUSH
86976: LD_VAR 0 3
86980: ARRAY
86981: PPUSH
86982: LD_INT 24
86984: PPUSH
86985: LD_INT 1
86987: PPUSH
86988: LD_INT 1
86990: PPUSH
86991: LD_INT 48
86993: PPUSH
86994: CALL_OW 125
86998: GO 87001
87000: POP
// end ; end ; end ;
87001: GO 86218
87003: POP
87004: POP
// until false ;
87005: LD_INT 0
87007: IFFALSE 86172
// end ;
87009: PPOPN 7
87011: END
// every 0 0$5 do
87012: GO 87014
87014: DISABLE
// begin SetLives ( alien_tower , 1000 ) ;
87015: LD_INT 1
87017: PPUSH
87018: LD_INT 1000
87020: PPUSH
87021: CALL_OW 234
// enable ;
87025: ENABLE
// end ;
87026: END
// every 0 0$1 + 0 0$0.5 do var i , temp_list , temp_list_2 , temp_unit ; var vehicle_list ;
87027: GO 87029
87029: DISABLE
87030: LD_INT 0
87032: PPUSH
87033: PPUSH
87034: PPUSH
87035: PPUSH
87036: PPUSH
// begin InitUc ;
87037: CALL_OW 18
// InitVc ;
87041: CALL_OW 20
// uc_nation = nation_russian ;
87045: LD_ADDR_OWVAR 21
87049: PUSH
87050: LD_INT 3
87052: ST_TO_ADDR
// uc_side = russians ;
87053: LD_ADDR_OWVAR 20
87057: PUSH
87058: LD_EXP 3
87062: ST_TO_ADDR
// uc_direction = 2 ;
87063: LD_ADDR_OWVAR 24
87067: PUSH
87068: LD_INT 2
87070: ST_TO_ADDR
// vc_engine = engine_siberite ;
87071: LD_ADDR_OWVAR 39
87075: PUSH
87076: LD_INT 3
87078: ST_TO_ADDR
// vc_control = control_computer ;
87079: LD_ADDR_OWVAR 38
87083: PUSH
87084: LD_INT 3
87086: ST_TO_ADDR
// vc_chassis = ru_medium_tracked ;
87087: LD_ADDR_OWVAR 37
87091: PUSH
87092: LD_INT 22
87094: ST_TO_ADDR
// vc_weapon = ru_gatling_gun ;
87095: LD_ADDR_OWVAR 40
87099: PUSH
87100: LD_INT 43
87102: ST_TO_ADDR
// vehicle_list = [ ] ;
87103: LD_ADDR_VAR 0 5
87107: PUSH
87108: EMPTY
87109: ST_TO_ADDR
// for i = 1 to 2 do
87110: LD_ADDR_VAR 0 1
87114: PUSH
87115: DOUBLE
87116: LD_INT 1
87118: DEC
87119: ST_TO_ADDR
87120: LD_INT 2
87122: PUSH
87123: FOR_TO
87124: IFFALSE 87144
// vehicle_list = vehicle_list ^ CreateVehicle ;
87126: LD_ADDR_VAR 0 5
87130: PUSH
87131: LD_VAR 0 5
87135: PUSH
87136: CALL_OW 45
87140: ADD
87141: ST_TO_ADDR
87142: GO 87123
87144: POP
87145: POP
// for i in vehicle_list do
87146: LD_ADDR_VAR 0 1
87150: PUSH
87151: LD_VAR 0 5
87155: PUSH
87156: FOR_IN
87157: IFFALSE 87182
// PlaceUnitXYR ( i , 82 , 68 , 5 , false ) ;
87159: LD_VAR 0 1
87163: PPUSH
87164: LD_INT 82
87166: PPUSH
87167: LD_INT 68
87169: PPUSH
87170: LD_INT 5
87172: PPUSH
87173: LD_INT 0
87175: PPUSH
87176: CALL_OW 50
87180: GO 87156
87182: POP
87183: POP
// repeat wait ( 0 0$1 ) ;
87184: LD_INT 35
87186: PPUSH
87187: CALL_OW 67
// vehicle_list = UnitFilter ( vehicle_list , [ f_alive ] ) ;
87191: LD_ADDR_VAR 0 5
87195: PUSH
87196: LD_VAR 0 5
87200: PPUSH
87201: LD_INT 51
87203: PUSH
87204: EMPTY
87205: LIST
87206: PPUSH
87207: CALL_OW 72
87211: ST_TO_ADDR
// if vehicle_list = 0 then
87212: LD_VAR 0 5
87216: PUSH
87217: LD_INT 0
87219: EQUAL
87220: IFFALSE 87224
// exit ;
87222: GO 87484
// temp_unit = 0 ;
87224: LD_ADDR_VAR 0 4
87228: PUSH
87229: LD_INT 0
87231: ST_TO_ADDR
// temp_list = [ ] ;
87232: LD_ADDR_VAR 0 2
87236: PUSH
87237: EMPTY
87238: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , arabians ] , [ f_class , class_scientistic ] , [ f_see , russians ] ] ) do
87239: LD_ADDR_VAR 0 1
87243: PUSH
87244: LD_INT 22
87246: PUSH
87247: LD_EXP 6
87251: PUSH
87252: EMPTY
87253: LIST
87254: LIST
87255: PUSH
87256: LD_INT 25
87258: PUSH
87259: LD_INT 4
87261: PUSH
87262: EMPTY
87263: LIST
87264: LIST
87265: PUSH
87266: LD_INT 101
87268: PUSH
87269: LD_EXP 3
87273: PUSH
87274: EMPTY
87275: LIST
87276: LIST
87277: PUSH
87278: EMPTY
87279: LIST
87280: LIST
87281: LIST
87282: PPUSH
87283: CALL_OW 69
87287: PUSH
87288: FOR_IN
87289: IFFALSE 87327
// if GetDistUnitArea ( i , south_motherlode_area ) <= 10 then
87291: LD_VAR 0 1
87295: PPUSH
87296: LD_INT 16
87298: PPUSH
87299: CALL_OW 299
87303: PUSH
87304: LD_INT 10
87306: LESSEQUAL
87307: IFFALSE 87325
// temp_list = temp_list ^ i ;
87309: LD_ADDR_VAR 0 2
87313: PUSH
87314: LD_VAR 0 2
87318: PUSH
87319: LD_VAR 0 1
87323: ADD
87324: ST_TO_ADDR
87325: GO 87288
87327: POP
87328: POP
// if temp_list > 0 then
87329: LD_VAR 0 2
87333: PUSH
87334: LD_INT 0
87336: GREATER
87337: IFFALSE 87404
// begin temp_list_2 = [ ] ;
87339: LD_ADDR_VAR 0 3
87343: PUSH
87344: EMPTY
87345: ST_TO_ADDR
// for i in temp_list do
87346: LD_ADDR_VAR 0 1
87350: PUSH
87351: LD_VAR 0 2
87355: PUSH
87356: FOR_IN
87357: IFFALSE 87382
// temp_list_2 = temp_list_2 ^ GetLives ( i ) ;
87359: LD_ADDR_VAR 0 3
87363: PUSH
87364: LD_VAR 0 3
87368: PUSH
87369: LD_VAR 0 1
87373: PPUSH
87374: CALL_OW 256
87378: ADD
87379: ST_TO_ADDR
87380: GO 87356
87382: POP
87383: POP
// temp_unit = WorstFromListByList ( temp_list , temp_list_2 ) ;
87384: LD_ADDR_VAR 0 4
87388: PUSH
87389: LD_VAR 0 2
87393: PPUSH
87394: LD_VAR 0 3
87398: PPUSH
87399: CALL_OW 78
87403: ST_TO_ADDR
// end ; for i in vehicle_list do
87404: LD_ADDR_VAR 0 1
87408: PUSH
87409: LD_VAR 0 5
87413: PUSH
87414: FOR_IN
87415: IFFALSE 87478
// begin if GetDistUnitArea ( i , south_motherlode_area ) > 10 then
87417: LD_VAR 0 1
87421: PPUSH
87422: LD_INT 16
87424: PPUSH
87425: CALL_OW 299
87429: PUSH
87430: LD_INT 10
87432: GREATER
87433: IFFALSE 87452
// ComMoveXY ( i , 82 , 68 ) else
87435: LD_VAR 0 1
87439: PPUSH
87440: LD_INT 82
87442: PPUSH
87443: LD_INT 68
87445: PPUSH
87446: CALL_OW 111
87450: GO 87476
// if temp_unit > 0 then
87452: LD_VAR 0 4
87456: PUSH
87457: LD_INT 0
87459: GREATER
87460: IFFALSE 87476
// ComAttackUnit ( i , temp_unit ) ;
87462: LD_VAR 0 1
87466: PPUSH
87467: LD_VAR 0 4
87471: PPUSH
87472: CALL_OW 115
// end ;
87476: GO 87414
87478: POP
87479: POP
// until false ;
87480: LD_INT 0
87482: IFFALSE 87184
// end ;
87484: PPOPN 5
87486: END
// every 0 0$1.6 do
87487: GO 87489
87489: DISABLE
// begin wait ( 1 1$30 ) ;
87490: LD_INT 3150
87492: PPUSH
87493: CALL_OW 67
// init_dialogue_start = true ;
87497: LD_ADDR_EXP 152
87501: PUSH
87502: LD_INT 1
87504: ST_TO_ADDR
// wait ( 2 2$30 ) ;
87505: LD_INT 5250
87507: PPUSH
87508: CALL_OW 67
// powell_call_start = true ;
87512: LD_ADDR_EXP 153
87516: PUSH
87517: LD_INT 1
87519: ST_TO_ADDR
// wait ( 1 1$0 ) ;
87520: LD_INT 2100
87522: PPUSH
87523: CALL_OW 67
// intermediate_dialogue_start = true ;
87527: LD_ADDR_EXP 154
87531: PUSH
87532: LD_INT 1
87534: ST_TO_ADDR
// wait ( 2 2$0 ) ;
87535: LD_INT 4200
87537: PPUSH
87538: CALL_OW 67
// alliance_call_start = true ;
87542: LD_ADDR_EXP 155
87546: PUSH
87547: LD_INT 1
87549: ST_TO_ADDR
// end ;
87550: END
// every 0 0$1 trigger init_dialogue_start do var i , temp_list ;
87551: LD_EXP 152
87555: IFFALSE 88201
87557: GO 87559
87559: DISABLE
87560: LD_INT 0
87562: PPUSH
87563: PPUSH
// begin DialogueOn ;
87564: CALL_OW 6
// SayRadio ( Roth , D3-Ro-1 ) ;
87568: LD_EXP 26
87572: PPUSH
87573: LD_STRING D3-Ro-1
87575: PPUSH
87576: CALL_OW 94
// SayRadio ( Powell , D3-Po-1 ) ;
87580: LD_EXP 31
87584: PPUSH
87585: LD_STRING D3-Po-1
87587: PPUSH
87588: CALL_OW 94
// SayRadio ( Roth , D3-Ro-2 ) ;
87592: LD_EXP 26
87596: PPUSH
87597: LD_STRING D3-Ro-2
87599: PPUSH
87600: CALL_OW 94
// SayRadio ( Omar , D3-Om-1 ) ;
87604: LD_EXP 29
87608: PPUSH
87609: LD_STRING D3-Om-1
87611: PPUSH
87612: CALL_OW 94
// SayRadio ( Roth , D3-Ro-3 ) ;
87616: LD_EXP 26
87620: PPUSH
87621: LD_STRING D3-Ro-3
87623: PPUSH
87624: CALL_OW 94
// SayRadio ( Platonov , D3-Pla-1 ) ;
87628: LD_EXP 25
87632: PPUSH
87633: LD_STRING D3-Pla-1
87635: PPUSH
87636: CALL_OW 94
// SayRadio ( Roth , D3-Ro-4 ) ;
87640: LD_EXP 26
87644: PPUSH
87645: LD_STRING D3-Ro-4
87647: PPUSH
87648: CALL_OW 94
// SayRadio ( Powell , D3-Po-2 ) ;
87652: LD_EXP 31
87656: PPUSH
87657: LD_STRING D3-Po-2
87659: PPUSH
87660: CALL_OW 94
// SayRadio ( Roth , D3-Ro-5 ) ;
87664: LD_EXP 26
87668: PPUSH
87669: LD_STRING D3-Ro-5
87671: PPUSH
87672: CALL_OW 94
// SayRadio ( Powell , D3-Po-3 ) ;
87676: LD_EXP 31
87680: PPUSH
87681: LD_STRING D3-Po-3
87683: PPUSH
87684: CALL_OW 94
// SayRadio ( Roth , D3-Ro-6 ) ;
87688: LD_EXP 26
87692: PPUSH
87693: LD_STRING D3-Ro-6
87695: PPUSH
87696: CALL_OW 94
// SayRadio ( Platonov , D3-Pla-2 ) ;
87700: LD_EXP 25
87704: PPUSH
87705: LD_STRING D3-Pla-2
87707: PPUSH
87708: CALL_OW 94
// SayRadio ( Powell , D3-Po-4 ) ;
87712: LD_EXP 31
87716: PPUSH
87717: LD_STRING D3-Po-4
87719: PPUSH
87720: CALL_OW 94
// SayRadio ( Roth , D3-Ro-7 ) ;
87724: LD_EXP 26
87728: PPUSH
87729: LD_STRING D3-Ro-7
87731: PPUSH
87732: CALL_OW 94
// SayRadio ( Omar , D3-Om-2 ) ;
87736: LD_EXP 29
87740: PPUSH
87741: LD_STRING D3-Om-2
87743: PPUSH
87744: CALL_OW 94
// Say ( Heike , D3-H-1 ) ;
87748: LD_EXP 10
87752: PPUSH
87753: LD_STRING D3-H-1
87755: PPUSH
87756: CALL_OW 88
// if IsOk ( Oswald ) then
87760: LD_EXP 13
87764: PPUSH
87765: CALL_OW 302
87769: IFFALSE 87783
// Say ( Oswald , D3-Os-1 ) ;
87771: LD_EXP 13
87775: PPUSH
87776: LD_STRING D3-Os-1
87778: PPUSH
87779: CALL_OW 88
// if IsOk ( Kozlov ) then
87783: LD_EXP 22
87787: PPUSH
87788: CALL_OW 302
87792: IFFALSE 87808
// Say ( Kozlov , D3-Koz-1a ) else
87794: LD_EXP 22
87798: PPUSH
87799: LD_STRING D3-Koz-1a
87801: PPUSH
87802: CALL_OW 88
87806: GO 87820
// Say ( Heike , D3-H-2b ) ;
87808: LD_EXP 10
87812: PPUSH
87813: LD_STRING D3-H-2b
87815: PPUSH
87816: CALL_OW 88
// Say ( Heike , D3-H-3 ) ;
87820: LD_EXP 10
87824: PPUSH
87825: LD_STRING D3-H-3
87827: PPUSH
87828: CALL_OW 88
// temp_list = UnitFilter ( [ Sonya , MarkB , Kyouma ] , [ f_ok ] ) ;
87832: LD_ADDR_VAR 0 2
87836: PUSH
87837: LD_EXP 12
87841: PUSH
87842: LD_EXP 17
87846: PUSH
87847: LD_EXP 24
87851: PUSH
87852: EMPTY
87853: LIST
87854: LIST
87855: LIST
87856: PPUSH
87857: LD_INT 50
87859: PUSH
87860: EMPTY
87861: LIST
87862: PPUSH
87863: CALL_OW 72
87867: ST_TO_ADDR
// if temp_list > 0 then
87868: LD_VAR 0 2
87872: PUSH
87873: LD_INT 0
87875: GREATER
87876: IFFALSE 88183
// begin i = Rand ( 1 , temp_list + 0 ) ;
87878: LD_ADDR_VAR 0 1
87882: PUSH
87883: LD_INT 1
87885: PPUSH
87886: LD_VAR 0 2
87890: PUSH
87891: LD_INT 0
87893: PLUS
87894: PPUSH
87895: CALL_OW 12
87899: ST_TO_ADDR
// i = temp_list [ i ] ;
87900: LD_ADDR_VAR 0 1
87904: PUSH
87905: LD_VAR 0 2
87909: PUSH
87910: LD_VAR 0 1
87914: ARRAY
87915: ST_TO_ADDR
// case i of Sonya :
87916: LD_VAR 0 1
87920: PUSH
87921: LD_EXP 12
87925: DOUBLE
87926: EQUAL
87927: IFTRUE 87931
87929: GO 87946
87931: POP
// Say ( i , D3-So-1 ) ; MarkB :
87932: LD_VAR 0 1
87936: PPUSH
87937: LD_STRING D3-So-1
87939: PPUSH
87940: CALL_OW 88
87944: GO 87997
87946: LD_EXP 17
87950: DOUBLE
87951: EQUAL
87952: IFTRUE 87956
87954: GO 87971
87956: POP
// Say ( i , D3-Ma-1 ) ; Kyouma :
87957: LD_VAR 0 1
87961: PPUSH
87962: LD_STRING D3-Ma-1
87964: PPUSH
87965: CALL_OW 88
87969: GO 87997
87971: LD_EXP 24
87975: DOUBLE
87976: EQUAL
87977: IFTRUE 87981
87979: GO 87996
87981: POP
// Say ( i , D3-Kyo-1 ) ; end ;
87982: LD_VAR 0 1
87986: PPUSH
87987: LD_STRING D3-Kyo-1
87989: PPUSH
87990: CALL_OW 88
87994: GO 87997
87996: POP
// Say ( Heike , D3-H-4 ) ;
87997: LD_EXP 10
88001: PPUSH
88002: LD_STRING D3-H-4
88004: PPUSH
88005: CALL_OW 88
// case i of Sonya :
88009: LD_VAR 0 1
88013: PUSH
88014: LD_EXP 12
88018: DOUBLE
88019: EQUAL
88020: IFTRUE 88024
88022: GO 88039
88024: POP
// Say ( i , D3-So-2 ) ; MarkB :
88025: LD_VAR 0 1
88029: PPUSH
88030: LD_STRING D3-So-2
88032: PPUSH
88033: CALL_OW 88
88037: GO 88090
88039: LD_EXP 17
88043: DOUBLE
88044: EQUAL
88045: IFTRUE 88049
88047: GO 88064
88049: POP
// Say ( i , D3-Ma-2 ) ; Kyouma :
88050: LD_VAR 0 1
88054: PPUSH
88055: LD_STRING D3-Ma-2
88057: PPUSH
88058: CALL_OW 88
88062: GO 88090
88064: LD_EXP 24
88068: DOUBLE
88069: EQUAL
88070: IFTRUE 88074
88072: GO 88089
88074: POP
// Say ( i , D3-Kyo-2 ) ; end ;
88075: LD_VAR 0 1
88079: PPUSH
88080: LD_STRING D3-Kyo-2
88082: PPUSH
88083: CALL_OW 88
88087: GO 88090
88089: POP
// Say ( Heike , D3-H-5 ) ;
88090: LD_EXP 10
88094: PPUSH
88095: LD_STRING D3-H-5
88097: PPUSH
88098: CALL_OW 88
// case i of Sonya :
88102: LD_VAR 0 1
88106: PUSH
88107: LD_EXP 12
88111: DOUBLE
88112: EQUAL
88113: IFTRUE 88117
88115: GO 88132
88117: POP
// Say ( i , D3-So-3 ) ; MarkB :
88118: LD_VAR 0 1
88122: PPUSH
88123: LD_STRING D3-So-3
88125: PPUSH
88126: CALL_OW 88
88130: GO 88183
88132: LD_EXP 17
88136: DOUBLE
88137: EQUAL
88138: IFTRUE 88142
88140: GO 88157
88142: POP
// Say ( i , D3-Ma-3 ) ; Kyouma :
88143: LD_VAR 0 1
88147: PPUSH
88148: LD_STRING D3-Ma-3
88150: PPUSH
88151: CALL_OW 88
88155: GO 88183
88157: LD_EXP 24
88161: DOUBLE
88162: EQUAL
88163: IFTRUE 88167
88165: GO 88182
88167: POP
// Say ( i , D3-Kyo-3 ) ; end ;
88168: LD_VAR 0 1
88172: PPUSH
88173: LD_STRING D3-Kyo-3
88175: PPUSH
88176: CALL_OW 88
88180: GO 88183
88182: POP
// end ; dwait ( 0 0$0.2 ) ;
88183: LD_INT 7
88185: PPUSH
88186: CALL_OW 68
// ChangeMissionObjectives ( M2 ) ;
88190: LD_STRING M2
88192: PPUSH
88193: CALL_OW 337
// DialogueOff ;
88197: CALL_OW 7
// end ;
88201: PPOPN 2
88203: END
// every 0 0$1 + 0 0$0.5 do var vehicle_waypoints , on_foot_waypoints , vehicle_group_scis , vehicle_group_vehicles , un , i , temp_list , num_veh , num_sci ; var ar_base_num , on_foot_group , vehicle_group , sib_locs , waypoints1 , waypoints2 , waypoints3 , first_time , unit_hex_index , unit_sibloc_hex ; var parking_spots , unit_park_hex , vehicle_dist , human_dist , dialogue_played ;
88204: GO 88206
88206: DISABLE
88207: LD_INT 0
88209: PPUSH
88210: PPUSH
88211: PPUSH
88212: PPUSH
88213: PPUSH
88214: PPUSH
88215: PPUSH
88216: PPUSH
88217: PPUSH
88218: PPUSH
88219: PPUSH
88220: PPUSH
88221: PPUSH
88222: PPUSH
88223: PPUSH
88224: PPUSH
88225: PPUSH
88226: PPUSH
88227: PPUSH
88228: PPUSH
88229: PPUSH
88230: PPUSH
88231: PPUSH
88232: PPUSH
// begin ar_base_num = 3 ;
88233: LD_ADDR_VAR 0 10
88237: PUSH
88238: LD_INT 3
88240: ST_TO_ADDR
// on_foot_group = [ ] ;
88241: LD_ADDR_VAR 0 11
88245: PUSH
88246: EMPTY
88247: ST_TO_ADDR
// vehicle_group = [ ] ;
88248: LD_ADDR_VAR 0 12
88252: PUSH
88253: EMPTY
88254: ST_TO_ADDR
// vehicle_dist = 5 ;
88255: LD_ADDR_VAR 0 22
88259: PUSH
88260: LD_INT 5
88262: ST_TO_ADDR
// human_dist = 4 ;
88263: LD_ADDR_VAR 0 23
88267: PUSH
88268: LD_INT 4
88270: ST_TO_ADDR
// sib_locs = [ [ 53 , 67 ] ] ;
88271: LD_ADDR_VAR 0 13
88275: PUSH
88276: LD_INT 53
88278: PUSH
88279: LD_INT 67
88281: PUSH
88282: EMPTY
88283: LIST
88284: LIST
88285: PUSH
88286: EMPTY
88287: LIST
88288: ST_TO_ADDR
// waypoints1 = [ [ 170 , 146 ] , [ 159 , 134 ] , [ 143 , 118 ] , [ 130 , 108 ] , [ 115 , 98 ] , [ 99 , 84 ] ] ;
88289: LD_ADDR_VAR 0 14
88293: PUSH
88294: LD_INT 170
88296: PUSH
88297: LD_INT 146
88299: PUSH
88300: EMPTY
88301: LIST
88302: LIST
88303: PUSH
88304: LD_INT 159
88306: PUSH
88307: LD_INT 134
88309: PUSH
88310: EMPTY
88311: LIST
88312: LIST
88313: PUSH
88314: LD_INT 143
88316: PUSH
88317: LD_INT 118
88319: PUSH
88320: EMPTY
88321: LIST
88322: LIST
88323: PUSH
88324: LD_INT 130
88326: PUSH
88327: LD_INT 108
88329: PUSH
88330: EMPTY
88331: LIST
88332: LIST
88333: PUSH
88334: LD_INT 115
88336: PUSH
88337: LD_INT 98
88339: PUSH
88340: EMPTY
88341: LIST
88342: LIST
88343: PUSH
88344: LD_INT 99
88346: PUSH
88347: LD_INT 84
88349: PUSH
88350: EMPTY
88351: LIST
88352: LIST
88353: PUSH
88354: EMPTY
88355: LIST
88356: LIST
88357: LIST
88358: LIST
88359: LIST
88360: LIST
88361: ST_TO_ADDR
// waypoints2 = [ [ 170 , 146 ] , [ 159 , 134 ] , [ 144 , 126 ] , [ 133 , 120 ] , [ 122 , 108 ] , [ 110 , 96 ] , [ 99 , 84 ] ] ;
88362: LD_ADDR_VAR 0 15
88366: PUSH
88367: LD_INT 170
88369: PUSH
88370: LD_INT 146
88372: PUSH
88373: EMPTY
88374: LIST
88375: LIST
88376: PUSH
88377: LD_INT 159
88379: PUSH
88380: LD_INT 134
88382: PUSH
88383: EMPTY
88384: LIST
88385: LIST
88386: PUSH
88387: LD_INT 144
88389: PUSH
88390: LD_INT 126
88392: PUSH
88393: EMPTY
88394: LIST
88395: LIST
88396: PUSH
88397: LD_INT 133
88399: PUSH
88400: LD_INT 120
88402: PUSH
88403: EMPTY
88404: LIST
88405: LIST
88406: PUSH
88407: LD_INT 122
88409: PUSH
88410: LD_INT 108
88412: PUSH
88413: EMPTY
88414: LIST
88415: LIST
88416: PUSH
88417: LD_INT 110
88419: PUSH
88420: LD_INT 96
88422: PUSH
88423: EMPTY
88424: LIST
88425: LIST
88426: PUSH
88427: LD_INT 99
88429: PUSH
88430: LD_INT 84
88432: PUSH
88433: EMPTY
88434: LIST
88435: LIST
88436: PUSH
88437: EMPTY
88438: LIST
88439: LIST
88440: LIST
88441: LIST
88442: LIST
88443: LIST
88444: LIST
88445: ST_TO_ADDR
// waypoints3 = [ [ 170 , 146 ] , [ 159 , 134 ] , [ 144 , 126 ] , [ 133 , 120 ] , [ 119 , 116 ] , [ 108 , 104 ] , [ 98 , 94 ] , [ 90 , 84 ] , [ 81 , 72 ] ] ;
88446: LD_ADDR_VAR 0 16
88450: PUSH
88451: LD_INT 170
88453: PUSH
88454: LD_INT 146
88456: PUSH
88457: EMPTY
88458: LIST
88459: LIST
88460: PUSH
88461: LD_INT 159
88463: PUSH
88464: LD_INT 134
88466: PUSH
88467: EMPTY
88468: LIST
88469: LIST
88470: PUSH
88471: LD_INT 144
88473: PUSH
88474: LD_INT 126
88476: PUSH
88477: EMPTY
88478: LIST
88479: LIST
88480: PUSH
88481: LD_INT 133
88483: PUSH
88484: LD_INT 120
88486: PUSH
88487: EMPTY
88488: LIST
88489: LIST
88490: PUSH
88491: LD_INT 119
88493: PUSH
88494: LD_INT 116
88496: PUSH
88497: EMPTY
88498: LIST
88499: LIST
88500: PUSH
88501: LD_INT 108
88503: PUSH
88504: LD_INT 104
88506: PUSH
88507: EMPTY
88508: LIST
88509: LIST
88510: PUSH
88511: LD_INT 98
88513: PUSH
88514: LD_INT 94
88516: PUSH
88517: EMPTY
88518: LIST
88519: LIST
88520: PUSH
88521: LD_INT 90
88523: PUSH
88524: LD_INT 84
88526: PUSH
88527: EMPTY
88528: LIST
88529: LIST
88530: PUSH
88531: LD_INT 81
88533: PUSH
88534: LD_INT 72
88536: PUSH
88537: EMPTY
88538: LIST
88539: LIST
88540: PUSH
88541: EMPTY
88542: LIST
88543: LIST
88544: LIST
88545: LIST
88546: LIST
88547: LIST
88548: LIST
88549: LIST
88550: LIST
88551: ST_TO_ADDR
// parking_spots = [ [ 81 , 70 ] , [ 78 , 64 ] , [ 85 , 74 ] , [ 82 , 63 ] , [ 88 , 78 ] , [ 92 , 83 ] ] ;
88552: LD_ADDR_VAR 0 20
88556: PUSH
88557: LD_INT 81
88559: PUSH
88560: LD_INT 70
88562: PUSH
88563: EMPTY
88564: LIST
88565: LIST
88566: PUSH
88567: LD_INT 78
88569: PUSH
88570: LD_INT 64
88572: PUSH
88573: EMPTY
88574: LIST
88575: LIST
88576: PUSH
88577: LD_INT 85
88579: PUSH
88580: LD_INT 74
88582: PUSH
88583: EMPTY
88584: LIST
88585: LIST
88586: PUSH
88587: LD_INT 82
88589: PUSH
88590: LD_INT 63
88592: PUSH
88593: EMPTY
88594: LIST
88595: LIST
88596: PUSH
88597: LD_INT 88
88599: PUSH
88600: LD_INT 78
88602: PUSH
88603: EMPTY
88604: LIST
88605: LIST
88606: PUSH
88607: LD_INT 92
88609: PUSH
88610: LD_INT 83
88612: PUSH
88613: EMPTY
88614: LIST
88615: LIST
88616: PUSH
88617: EMPTY
88618: LIST
88619: LIST
88620: LIST
88621: LIST
88622: LIST
88623: LIST
88624: ST_TO_ADDR
// first_time = true ;
88625: LD_ADDR_VAR 0 17
88629: PUSH
88630: LD_INT 1
88632: ST_TO_ADDR
// unit_hex_index = [ ] ;
88633: LD_ADDR_VAR 0 18
88637: PUSH
88638: EMPTY
88639: ST_TO_ADDR
// unit_sibloc_hex = [ ] ;
88640: LD_ADDR_VAR 0 19
88644: PUSH
88645: EMPTY
88646: ST_TO_ADDR
// unit_park_hex = [ ] ;
88647: LD_ADDR_VAR 0 21
88651: PUSH
88652: EMPTY
88653: ST_TO_ADDR
// dialogue_played = false ;
88654: LD_ADDR_VAR 0 24
88658: PUSH
88659: LD_INT 0
88661: ST_TO_ADDR
// for i in sib_locs do
88662: LD_ADDR_VAR 0 6
88666: PUSH
88667: LD_VAR 0 13
88671: PUSH
88672: FOR_IN
88673: IFFALSE 88709
// SetResourceVisibility ( i [ 1 ] , i [ 2 ] , GetBaseSide ( ar_base_num ) ) ;
88675: LD_VAR 0 6
88679: PUSH
88680: LD_INT 1
88682: ARRAY
88683: PPUSH
88684: LD_VAR 0 6
88688: PUSH
88689: LD_INT 2
88691: ARRAY
88692: PPUSH
88693: LD_VAR 0 10
88697: PPUSH
88698: CALL 24885 0 1
88702: PPUSH
88703: CALL_OW 441
88707: GO 88672
88709: POP
88710: POP
// repeat wait ( 0 0$1 ) ;
88711: LD_INT 35
88713: PPUSH
88714: CALL_OW 67
// if not ar_base_num in ai_bases then
88718: LD_VAR 0 10
88722: PUSH
88723: LD_EXP 39
88727: IN
88728: NOT
88729: IFFALSE 88733
// exit ;
88731: GO 91333
// repeat wait ( 0 0$1 ) ;
88733: LD_INT 35
88735: PPUSH
88736: CALL_OW 67
// until ar_attack_commenced ;
88740: LD_EXP 127
88744: IFFALSE 88733
// contaminate_scis_ready = false ;
88746: LD_ADDR_EXP 124
88750: PUSH
88751: LD_INT 0
88753: ST_TO_ADDR
// ar_attack_commenced = false ;
88754: LD_ADDR_EXP 127
88758: PUSH
88759: LD_INT 0
88761: ST_TO_ADDR
// i = ( attacked_times [ 3 ] + 1 - num_attacks_ar_on_alli ) div 2 + [ 0 , 0 , 1 ] [ difficulty ] ;
88762: LD_ADDR_VAR 0 6
88766: PUSH
88767: LD_EXP 132
88771: PUSH
88772: LD_INT 3
88774: ARRAY
88775: PUSH
88776: LD_INT 1
88778: PLUS
88779: PUSH
88780: LD_EXP 133
88784: MINUS
88785: PUSH
88786: LD_INT 2
88788: DIV
88789: PUSH
88790: LD_INT 0
88792: PUSH
88793: LD_INT 0
88795: PUSH
88796: LD_INT 1
88798: PUSH
88799: EMPTY
88800: LIST
88801: LIST
88802: LIST
88803: PUSH
88804: LD_OWVAR 67
88808: ARRAY
88809: PLUS
88810: ST_TO_ADDR
// if i > [ 2 , 3 , 5 ] [ difficulty ] then
88811: LD_VAR 0 6
88815: PUSH
88816: LD_INT 2
88818: PUSH
88819: LD_INT 3
88821: PUSH
88822: LD_INT 5
88824: PUSH
88825: EMPTY
88826: LIST
88827: LIST
88828: LIST
88829: PUSH
88830: LD_OWVAR 67
88834: ARRAY
88835: GREATER
88836: IFFALSE 88863
// i = [ 2 , 3 , 5 ] [ difficulty ] ;
88838: LD_ADDR_VAR 0 6
88842: PUSH
88843: LD_INT 2
88845: PUSH
88846: LD_INT 3
88848: PUSH
88849: LD_INT 5
88851: PUSH
88852: EMPTY
88853: LIST
88854: LIST
88855: LIST
88856: PUSH
88857: LD_OWVAR 67
88861: ARRAY
88862: ST_TO_ADDR
// num_veh = ( i - 1 ) div 3 ;
88863: LD_ADDR_VAR 0 8
88867: PUSH
88868: LD_VAR 0 6
88872: PUSH
88873: LD_INT 1
88875: MINUS
88876: PUSH
88877: LD_INT 3
88879: DIV
88880: ST_TO_ADDR
// num_sci = i - 3 * num_veh ;
88881: LD_ADDR_VAR 0 9
88885: PUSH
88886: LD_VAR 0 6
88890: PUSH
88891: LD_INT 3
88893: PUSH
88894: LD_VAR 0 8
88898: MUL
88899: MINUS
88900: ST_TO_ADDR
// vehicle_group = CreateUnitsWithClass ( num_veh , class_scientistic , ar_base_num ) ;
88901: LD_ADDR_VAR 0 12
88905: PUSH
88906: LD_VAR 0 8
88910: PPUSH
88911: LD_INT 4
88913: PPUSH
88914: LD_VAR 0 10
88918: PPUSH
88919: CALL 13445 0 3
88923: ST_TO_ADDR
// temp_list = CreateArSciVehicles ( num_veh ) ;
88924: LD_ADDR_VAR 0 7
88928: PUSH
88929: LD_VAR 0 8
88933: PPUSH
88934: CALL 91336 0 1
88938: ST_TO_ADDR
// for i = 1 to vehicle_group + 0 do
88939: LD_ADDR_VAR 0 6
88943: PUSH
88944: DOUBLE
88945: LD_INT 1
88947: DEC
88948: ST_TO_ADDR
88949: LD_VAR 0 12
88953: PUSH
88954: LD_INT 0
88956: PLUS
88957: PUSH
88958: FOR_TO
88959: IFFALSE 88989
// PlaceHumanInUnit ( vehicle_group [ i ] , temp_list [ i ] ) ;
88961: LD_VAR 0 12
88965: PUSH
88966: LD_VAR 0 6
88970: ARRAY
88971: PPUSH
88972: LD_VAR 0 7
88976: PUSH
88977: LD_VAR 0 6
88981: ARRAY
88982: PPUSH
88983: CALL_OW 52
88987: GO 88958
88989: POP
88990: POP
// vehicle_group = vehicle_group ^ temp_list ;
88991: LD_ADDR_VAR 0 12
88995: PUSH
88996: LD_VAR 0 12
89000: PUSH
89001: LD_VAR 0 7
89005: ADD
89006: ST_TO_ADDR
// on_foot_group = CreateUnitsWithClass ( num_sci , class_scientistic , ar_base_num ) ;
89007: LD_ADDR_VAR 0 11
89011: PUSH
89012: LD_VAR 0 9
89016: PPUSH
89017: LD_INT 4
89019: PPUSH
89020: LD_VAR 0 10
89024: PPUSH
89025: CALL 13445 0 3
89029: ST_TO_ADDR
// if on_foot_group = 0 then
89030: LD_VAR 0 11
89034: PUSH
89035: LD_INT 0
89037: EQUAL
89038: IFFALSE 89048
// contaminate_scis_ready = true ;
89040: LD_ADDR_EXP 124
89044: PUSH
89045: LD_INT 1
89047: ST_TO_ADDR
// for i in vehicle_group ^ on_foot_group do
89048: LD_ADDR_VAR 0 6
89052: PUSH
89053: LD_VAR 0 12
89057: PUSH
89058: LD_VAR 0 11
89062: ADD
89063: PUSH
89064: FOR_IN
89065: IFFALSE 89104
// begin unit_hex_index = Replace ( unit_hex_index , i , 1 ) ;
89067: LD_ADDR_VAR 0 18
89071: PUSH
89072: LD_VAR 0 18
89076: PPUSH
89077: LD_VAR 0 6
89081: PPUSH
89082: LD_INT 1
89084: PPUSH
89085: CALL_OW 1
89089: ST_TO_ADDR
// SetDir ( i , 4 ) ;
89090: LD_VAR 0 6
89094: PPUSH
89095: LD_INT 4
89097: PPUSH
89098: CALL_OW 233
// end ;
89102: GO 89064
89104: POP
89105: POP
// for i in UnitFilter ( vehicle_group , [ f_type , unit_human ] ) ^ on_foot_group do
89106: LD_ADDR_VAR 0 6
89110: PUSH
89111: LD_VAR 0 12
89115: PPUSH
89116: LD_INT 21
89118: PUSH
89119: LD_INT 1
89121: PUSH
89122: EMPTY
89123: LIST
89124: LIST
89125: PPUSH
89126: CALL_OW 72
89130: PUSH
89131: LD_VAR 0 11
89135: ADD
89136: PUSH
89137: FOR_IN
89138: IFFALSE 89185
// unit_sibloc_hex = Replace ( unit_sibloc_hex , i , sib_locs [ Rand ( 1 , sib_locs + 0 ) ] ) ;
89140: LD_ADDR_VAR 0 19
89144: PUSH
89145: LD_VAR 0 19
89149: PPUSH
89150: LD_VAR 0 6
89154: PPUSH
89155: LD_VAR 0 13
89159: PUSH
89160: LD_INT 1
89162: PPUSH
89163: LD_VAR 0 13
89167: PUSH
89168: LD_INT 0
89170: PLUS
89171: PPUSH
89172: CALL_OW 12
89176: ARRAY
89177: PPUSH
89178: CALL_OW 1
89182: ST_TO_ADDR
89183: GO 89137
89185: POP
89186: POP
// for i in UnitFilter ( vehicle_group , [ f_type , unit_vehicle ] ) do
89187: LD_ADDR_VAR 0 6
89191: PUSH
89192: LD_VAR 0 12
89196: PPUSH
89197: LD_INT 21
89199: PUSH
89200: LD_INT 2
89202: PUSH
89203: EMPTY
89204: LIST
89205: LIST
89206: PPUSH
89207: CALL_OW 72
89211: PUSH
89212: FOR_IN
89213: IFFALSE 89232
// PlaceUnitArea ( i , ar_sci_enter_area , false ) ;
89215: LD_VAR 0 6
89219: PPUSH
89220: LD_INT 17
89222: PPUSH
89223: LD_INT 0
89225: PPUSH
89226: CALL_OW 49
89230: GO 89212
89232: POP
89233: POP
// for i in on_foot_group do
89234: LD_ADDR_VAR 0 6
89238: PUSH
89239: LD_VAR 0 11
89243: PUSH
89244: FOR_IN
89245: IFFALSE 89264
// PlaceUnitArea ( i , ar_sci_enter_area , false ) ;
89247: LD_VAR 0 6
89251: PPUSH
89252: LD_INT 17
89254: PPUSH
89255: LD_INT 0
89257: PPUSH
89258: CALL_OW 49
89262: GO 89244
89264: POP
89265: POP
// if first_time then
89266: LD_VAR 0 17
89270: IFFALSE 89302
// begin first_time = false ;
89272: LD_ADDR_VAR 0 17
89276: PUSH
89277: LD_INT 0
89279: ST_TO_ADDR
// vehicle_waypoints = waypoints1 ;
89280: LD_ADDR_VAR 0 1
89284: PUSH
89285: LD_VAR 0 14
89289: ST_TO_ADDR
// on_foot_waypoints = waypoints1 ;
89290: LD_ADDR_VAR 0 2
89294: PUSH
89295: LD_VAR 0 14
89299: ST_TO_ADDR
// end else
89300: GO 89378
// begin if Rand ( 1 , 2 ) = 1 then
89302: LD_INT 1
89304: PPUSH
89305: LD_INT 2
89307: PPUSH
89308: CALL_OW 12
89312: PUSH
89313: LD_INT 1
89315: EQUAL
89316: IFFALSE 89330
// vehicle_waypoints = waypoints1 else
89318: LD_ADDR_VAR 0 1
89322: PUSH
89323: LD_VAR 0 14
89327: ST_TO_ADDR
89328: GO 89340
// vehicle_waypoints = waypoints2 ;
89330: LD_ADDR_VAR 0 1
89334: PUSH
89335: LD_VAR 0 15
89339: ST_TO_ADDR
// if Rand ( 1 , 2 ) = 1 then
89340: LD_INT 1
89342: PPUSH
89343: LD_INT 2
89345: PPUSH
89346: CALL_OW 12
89350: PUSH
89351: LD_INT 1
89353: EQUAL
89354: IFFALSE 89368
// on_foot_waypoints = waypoints2 else
89356: LD_ADDR_VAR 0 2
89360: PUSH
89361: LD_VAR 0 15
89365: ST_TO_ADDR
89366: GO 89378
// on_foot_waypoints = waypoints3 ;
89368: LD_ADDR_VAR 0 2
89372: PUSH
89373: LD_VAR 0 16
89377: ST_TO_ADDR
// end ; repeat wait ( 0 0$0.7 ) ;
89378: LD_INT 24
89380: PPUSH
89381: CALL_OW 67
// temp_list = UnitFilter ( vehicle_group , [ [ f_type , unit_vehicle ] , [ f_ok ] ] ) ;
89385: LD_ADDR_VAR 0 7
89389: PUSH
89390: LD_VAR 0 12
89394: PPUSH
89395: LD_INT 21
89397: PUSH
89398: LD_INT 2
89400: PUSH
89401: EMPTY
89402: LIST
89403: LIST
89404: PUSH
89405: LD_INT 50
89407: PUSH
89408: EMPTY
89409: LIST
89410: PUSH
89411: EMPTY
89412: LIST
89413: LIST
89414: PPUSH
89415: CALL_OW 72
89419: ST_TO_ADDR
// vehicle_group_scis = UnitFilter ( vehicle_group , [ [ f_type , unit_human ] , [ f_alive ] ] ) ;
89420: LD_ADDR_VAR 0 3
89424: PUSH
89425: LD_VAR 0 12
89429: PPUSH
89430: LD_INT 21
89432: PUSH
89433: LD_INT 1
89435: PUSH
89436: EMPTY
89437: LIST
89438: LIST
89439: PUSH
89440: LD_INT 51
89442: PUSH
89443: EMPTY
89444: LIST
89445: PUSH
89446: EMPTY
89447: LIST
89448: LIST
89449: PPUSH
89450: CALL_OW 72
89454: ST_TO_ADDR
// vehicle_group = temp_list ^ vehicle_group_scis ;
89455: LD_ADDR_VAR 0 12
89459: PUSH
89460: LD_VAR 0 7
89464: PUSH
89465: LD_VAR 0 3
89469: ADD
89470: ST_TO_ADDR
// on_foot_group = UnitFilter ( on_foot_group , [ f_alive ] ) ;
89471: LD_ADDR_VAR 0 11
89475: PUSH
89476: LD_VAR 0 11
89480: PPUSH
89481: LD_INT 51
89483: PUSH
89484: EMPTY
89485: LIST
89486: PPUSH
89487: CALL_OW 72
89491: ST_TO_ADDR
// if ( vehicle_group_scis ^ on_foot_group ) = 0 then
89492: LD_VAR 0 3
89496: PUSH
89497: LD_VAR 0 11
89501: ADD
89502: PUSH
89503: LD_INT 0
89505: EQUAL
89506: IFFALSE 89510
// break ;
89508: GO 91329
// vehicle_group_scis = UnitFilter ( vehicle_group_scis , [ f_not , [ f_driving ] ] ) ;
89510: LD_ADDR_VAR 0 3
89514: PUSH
89515: LD_VAR 0 3
89519: PPUSH
89520: LD_INT 3
89522: PUSH
89523: LD_INT 55
89525: PUSH
89526: EMPTY
89527: LIST
89528: PUSH
89529: EMPTY
89530: LIST
89531: LIST
89532: PPUSH
89533: CALL_OW 72
89537: ST_TO_ADDR
// vehicle_group_vehicles = UnitFilter ( vehicle_group , [ f_type , unit_vehicle ] ) ;
89538: LD_ADDR_VAR 0 4
89542: PUSH
89543: LD_VAR 0 12
89547: PPUSH
89548: LD_INT 21
89550: PUSH
89551: LD_INT 2
89553: PUSH
89554: EMPTY
89555: LIST
89556: LIST
89557: PPUSH
89558: CALL_OW 72
89562: ST_TO_ADDR
// if not dialogue_played then
89563: LD_VAR 0 24
89567: NOT
89568: IFFALSE 89650
// begin temp_list = UnitFilter ( vehicle_group ^ on_foot_group , [ f_see , you ] ) ;
89570: LD_ADDR_VAR 0 7
89574: PUSH
89575: LD_VAR 0 12
89579: PUSH
89580: LD_VAR 0 11
89584: ADD
89585: PPUSH
89586: LD_INT 101
89588: PUSH
89589: LD_EXP 2
89593: PUSH
89594: EMPTY
89595: LIST
89596: LIST
89597: PPUSH
89598: CALL_OW 72
89602: ST_TO_ADDR
// if temp_list > 0 then
89603: LD_VAR 0 7
89607: PUSH
89608: LD_INT 0
89610: GREATER
89611: IFFALSE 89650
// begin dialogue_played = true ;
89613: LD_ADDR_VAR 0 24
89617: PUSH
89618: LD_INT 1
89620: ST_TO_ADDR
// CenterOnUnits ( temp_list ) ;
89621: LD_VAR 0 7
89625: PPUSH
89626: CALL_OW 85
// DialogueOn ;
89630: CALL_OW 6
// ForceSay ( Heike , D5-H-1 ) ;
89634: LD_EXP 10
89638: PPUSH
89639: LD_STRING D5-H-1
89641: PPUSH
89642: CALL_OW 91
// DialogueOff ;
89646: CALL_OW 7
// end ; end ; for i in vehicle_group_scis ^ vehicle_group_vehicles do
89650: LD_ADDR_VAR 0 6
89654: PUSH
89655: LD_VAR 0 3
89659: PUSH
89660: LD_VAR 0 4
89664: ADD
89665: PUSH
89666: FOR_IN
89667: IFFALSE 90434
// begin if unit_hex_index [ i ] = vehicle_waypoints + 1 then
89669: LD_VAR 0 18
89673: PUSH
89674: LD_VAR 0 6
89678: ARRAY
89679: PUSH
89680: LD_VAR 0 1
89684: PUSH
89685: LD_INT 1
89687: PLUS
89688: EQUAL
89689: IFFALSE 89775
// begin if GetDistUnitXY ( i , unit_park_hex [ i ] [ 1 ] , unit_park_hex [ i ] [ 2 ] ) <= 2 then
89691: LD_VAR 0 6
89695: PPUSH
89696: LD_VAR 0 21
89700: PUSH
89701: LD_VAR 0 6
89705: ARRAY
89706: PUSH
89707: LD_INT 1
89709: ARRAY
89710: PPUSH
89711: LD_VAR 0 21
89715: PUSH
89716: LD_VAR 0 6
89720: ARRAY
89721: PUSH
89722: LD_INT 2
89724: ARRAY
89725: PPUSH
89726: CALL_OW 297
89730: PUSH
89731: LD_INT 2
89733: LESSEQUAL
89734: IFFALSE 89773
// begin unit_hex_index = Replace ( unit_hex_index , i , unit_hex_index [ i ] + 1 ) ;
89736: LD_ADDR_VAR 0 18
89740: PUSH
89741: LD_VAR 0 18
89745: PPUSH
89746: LD_VAR 0 6
89750: PPUSH
89751: LD_VAR 0 18
89755: PUSH
89756: LD_VAR 0 6
89760: ARRAY
89761: PUSH
89762: LD_INT 1
89764: PLUS
89765: PPUSH
89766: CALL_OW 1
89770: ST_TO_ADDR
// end else
89771: GO 89775
// continue ;
89773: GO 89666
// end ; if unit_hex_index [ i ] > vehicle_waypoints + 1 then
89775: LD_VAR 0 18
89779: PUSH
89780: LD_VAR 0 6
89784: ARRAY
89785: PUSH
89786: LD_VAR 0 1
89790: PUSH
89791: LD_INT 1
89793: PLUS
89794: GREATER
89795: IFFALSE 89844
// begin if GetType ( i ) = unit_vehicle then
89797: LD_VAR 0 6
89801: PPUSH
89802: CALL_OW 247
89806: PUSH
89807: LD_INT 2
89809: EQUAL
89810: IFFALSE 89842
// begin ComExitVehicle ( UnitsInside ( i ) ) ;
89812: LD_VAR 0 6
89816: PPUSH
89817: CALL_OW 313
89821: PPUSH
89822: CALL_OW 121
// vehicle_group_vehicles = vehicle_group_vehicles diff i ;
89826: LD_ADDR_VAR 0 4
89830: PUSH
89831: LD_VAR 0 4
89835: PUSH
89836: LD_VAR 0 6
89840: DIFF
89841: ST_TO_ADDR
// end ; continue ;
89842: GO 89666
// end ; if GetDistUnitXY ( i , vehicle_waypoints [ unit_hex_index [ i ] ] [ 1 ] , vehicle_waypoints [ unit_hex_index [ i ] ] [ 2 ] ) <= vehicle_dist then
89844: LD_VAR 0 6
89848: PPUSH
89849: LD_VAR 0 1
89853: PUSH
89854: LD_VAR 0 18
89858: PUSH
89859: LD_VAR 0 6
89863: ARRAY
89864: ARRAY
89865: PUSH
89866: LD_INT 1
89868: ARRAY
89869: PPUSH
89870: LD_VAR 0 1
89874: PUSH
89875: LD_VAR 0 18
89879: PUSH
89880: LD_VAR 0 6
89884: ARRAY
89885: ARRAY
89886: PUSH
89887: LD_INT 2
89889: ARRAY
89890: PPUSH
89891: CALL_OW 297
89895: PUSH
89896: LD_VAR 0 22
89900: LESSEQUAL
89901: IFFALSE 90023
// begin if not contaminate_scis_ready and unit_hex_index [ i ] = 2 then
89903: LD_EXP 124
89907: NOT
89908: PUSH
89909: LD_VAR 0 18
89913: PUSH
89914: LD_VAR 0 6
89918: ARRAY
89919: PUSH
89920: LD_INT 2
89922: EQUAL
89923: AND
89924: IFFALSE 89928
// continue ;
89926: GO 89666
// unit_hex_index = Replace ( unit_hex_index , i , unit_hex_index [ i ] + 1 ) ;
89928: LD_ADDR_VAR 0 18
89932: PUSH
89933: LD_VAR 0 18
89937: PPUSH
89938: LD_VAR 0 6
89942: PPUSH
89943: LD_VAR 0 18
89947: PUSH
89948: LD_VAR 0 6
89952: ARRAY
89953: PUSH
89954: LD_INT 1
89956: PLUS
89957: PPUSH
89958: CALL_OW 1
89962: ST_TO_ADDR
// temp_list = UnitsInside ( i ) ;
89963: LD_ADDR_VAR 0 7
89967: PUSH
89968: LD_VAR 0 6
89972: PPUSH
89973: CALL_OW 313
89977: ST_TO_ADDR
// if temp_list > 0 then
89978: LD_VAR 0 7
89982: PUSH
89983: LD_INT 0
89985: GREATER
89986: IFFALSE 90023
// unit_hex_index = Replace ( unit_hex_index , temp_list [ 1 ] , unit_hex_index [ i ] ) ;
89988: LD_ADDR_VAR 0 18
89992: PUSH
89993: LD_VAR 0 18
89997: PPUSH
89998: LD_VAR 0 7
90002: PUSH
90003: LD_INT 1
90005: ARRAY
90006: PPUSH
90007: LD_VAR 0 18
90011: PUSH
90012: LD_VAR 0 6
90016: ARRAY
90017: PPUSH
90018: CALL_OW 1
90022: ST_TO_ADDR
// end ; if unit_hex_index [ i ] = vehicle_waypoints + 1 then
90023: LD_VAR 0 18
90027: PUSH
90028: LD_VAR 0 6
90032: ARRAY
90033: PUSH
90034: LD_VAR 0 1
90038: PUSH
90039: LD_INT 1
90041: PLUS
90042: EQUAL
90043: IFFALSE 90432
// if GetType ( i ) = unit_vehicle then
90045: LD_VAR 0 6
90049: PPUSH
90050: CALL_OW 247
90054: PUSH
90055: LD_INT 2
90057: EQUAL
90058: IFFALSE 90397
// begin un = false ;
90060: LD_ADDR_VAR 0 5
90064: PUSH
90065: LD_INT 0
90067: ST_TO_ADDR
// if unit_park_hex < i then
90068: LD_VAR 0 21
90072: PUSH
90073: LD_VAR 0 6
90077: LESS
90078: IFFALSE 90090
// un = true else
90080: LD_ADDR_VAR 0 5
90084: PUSH
90085: LD_INT 1
90087: ST_TO_ADDR
90088: GO 90114
// if unit_park_hex [ i ] = 0 then
90090: LD_VAR 0 21
90094: PUSH
90095: LD_VAR 0 6
90099: ARRAY
90100: PUSH
90101: LD_INT 0
90103: EQUAL
90104: IFFALSE 90114
// un = true ;
90106: LD_ADDR_VAR 0 5
90110: PUSH
90111: LD_INT 1
90113: ST_TO_ADDR
// if un then
90114: LD_VAR 0 5
90118: IFFALSE 90395
// begin temp_list = [ ] ;
90120: LD_ADDR_VAR 0 7
90124: PUSH
90125: EMPTY
90126: ST_TO_ADDR
// for un in parking_spots do
90127: LD_ADDR_VAR 0 5
90131: PUSH
90132: LD_VAR 0 20
90136: PUSH
90137: FOR_IN
90138: IFFALSE 90189
// if HexInfo ( un [ 1 ] , un [ 2 ] ) = 0 then
90140: LD_VAR 0 5
90144: PUSH
90145: LD_INT 1
90147: ARRAY
90148: PPUSH
90149: LD_VAR 0 5
90153: PUSH
90154: LD_INT 2
90156: ARRAY
90157: PPUSH
90158: CALL_OW 428
90162: PUSH
90163: LD_INT 0
90165: EQUAL
90166: IFFALSE 90187
// temp_list = temp_list ^ [ un ] ;
90168: LD_ADDR_VAR 0 7
90172: PUSH
90173: LD_VAR 0 7
90177: PUSH
90178: LD_VAR 0 5
90182: PUSH
90183: EMPTY
90184: LIST
90185: ADD
90186: ST_TO_ADDR
90187: GO 90137
90189: POP
90190: POP
// for un in vehicle_group_vehicles do
90191: LD_ADDR_VAR 0 5
90195: PUSH
90196: LD_VAR 0 4
90200: PUSH
90201: FOR_IN
90202: IFFALSE 90259
// if unit_park_hex >= un then
90204: LD_VAR 0 21
90208: PUSH
90209: LD_VAR 0 5
90213: GREATEREQUAL
90214: IFFALSE 90257
// if unit_park_hex [ un ] > 0 then
90216: LD_VAR 0 21
90220: PUSH
90221: LD_VAR 0 5
90225: ARRAY
90226: PUSH
90227: LD_INT 0
90229: GREATER
90230: IFFALSE 90257
// temp_list = temp_list diff [ unit_park_hex [ un ] ] ;
90232: LD_ADDR_VAR 0 7
90236: PUSH
90237: LD_VAR 0 7
90241: PUSH
90242: LD_VAR 0 21
90246: PUSH
90247: LD_VAR 0 5
90251: ARRAY
90252: PUSH
90253: EMPTY
90254: LIST
90255: DIFF
90256: ST_TO_ADDR
90257: GO 90201
90259: POP
90260: POP
// if temp_list > 0 then
90261: LD_VAR 0 7
90265: PUSH
90266: LD_INT 0
90268: GREATER
90269: IFFALSE 90302
// unit_park_hex = Replace ( unit_park_hex , i , temp_list [ 1 ] ) else
90271: LD_ADDR_VAR 0 21
90275: PUSH
90276: LD_VAR 0 21
90280: PPUSH
90281: LD_VAR 0 6
90285: PPUSH
90286: LD_VAR 0 7
90290: PUSH
90291: LD_INT 1
90293: ARRAY
90294: PPUSH
90295: CALL_OW 1
90299: ST_TO_ADDR
90300: GO 90337
// begin unit_hex_index = Replace ( unit_hex_index , i , unit_hex_index [ i ] + 1 ) ;
90302: LD_ADDR_VAR 0 18
90306: PUSH
90307: LD_VAR 0 18
90311: PPUSH
90312: LD_VAR 0 6
90316: PPUSH
90317: LD_VAR 0 18
90321: PUSH
90322: LD_VAR 0 6
90326: ARRAY
90327: PUSH
90328: LD_INT 1
90330: PLUS
90331: PPUSH
90332: CALL_OW 1
90336: ST_TO_ADDR
// end ; temp_list = UnitsInside ( i ) ;
90337: LD_ADDR_VAR 0 7
90341: PUSH
90342: LD_VAR 0 6
90346: PPUSH
90347: CALL_OW 313
90351: ST_TO_ADDR
// if temp_list > 0 then
90352: LD_VAR 0 7
90356: PUSH
90357: LD_INT 0
90359: GREATER
90360: IFFALSE 90395
// unit_hex_index = Replace ( unit_hex_index , temp_list [ 1 ] , vehicle_waypoints + 2 ) ;
90362: LD_ADDR_VAR 0 18
90366: PUSH
90367: LD_VAR 0 18
90371: PPUSH
90372: LD_VAR 0 7
90376: PUSH
90377: LD_INT 1
90379: ARRAY
90380: PPUSH
90381: LD_VAR 0 1
90385: PUSH
90386: LD_INT 2
90388: PLUS
90389: PPUSH
90390: CALL_OW 1
90394: ST_TO_ADDR
// end ; end else
90395: GO 90432
// unit_hex_index = Replace ( unit_hex_index , i , unit_hex_index [ i ] + 1 ) ;
90397: LD_ADDR_VAR 0 18
90401: PUSH
90402: LD_VAR 0 18
90406: PPUSH
90407: LD_VAR 0 6
90411: PPUSH
90412: LD_VAR 0 18
90416: PUSH
90417: LD_VAR 0 6
90421: ARRAY
90422: PUSH
90423: LD_INT 1
90425: PLUS
90426: PPUSH
90427: CALL_OW 1
90431: ST_TO_ADDR
// end ;
90432: GO 89666
90434: POP
90435: POP
// temp_list = [ ] ;
90436: LD_ADDR_VAR 0 7
90440: PUSH
90441: EMPTY
90442: ST_TO_ADDR
// for i in on_foot_group do
90443: LD_ADDR_VAR 0 6
90447: PUSH
90448: LD_VAR 0 11
90452: PUSH
90453: FOR_IN
90454: IFFALSE 90613
// begin if unit_hex_index [ i ] > on_foot_waypoints then
90456: LD_VAR 0 18
90460: PUSH
90461: LD_VAR 0 6
90465: ARRAY
90466: PUSH
90467: LD_VAR 0 2
90471: GREATER
90472: IFFALSE 90476
// continue ;
90474: GO 90453
// if GetDistUnitXY ( i , on_foot_waypoints [ unit_hex_index [ i ] ] [ 1 ] , on_foot_waypoints [ unit_hex_index [ i ] ] [ 2 ] ) <= human_dist then
90476: LD_VAR 0 6
90480: PPUSH
90481: LD_VAR 0 2
90485: PUSH
90486: LD_VAR 0 18
90490: PUSH
90491: LD_VAR 0 6
90495: ARRAY
90496: ARRAY
90497: PUSH
90498: LD_INT 1
90500: ARRAY
90501: PPUSH
90502: LD_VAR 0 2
90506: PUSH
90507: LD_VAR 0 18
90511: PUSH
90512: LD_VAR 0 6
90516: ARRAY
90517: ARRAY
90518: PUSH
90519: LD_INT 2
90521: ARRAY
90522: PPUSH
90523: CALL_OW 297
90527: PUSH
90528: LD_VAR 0 23
90532: LESSEQUAL
90533: IFFALSE 90611
// begin if not contaminate_scis_ready and unit_hex_index [ i ] = 4 then
90535: LD_EXP 124
90539: NOT
90540: PUSH
90541: LD_VAR 0 18
90545: PUSH
90546: LD_VAR 0 6
90550: ARRAY
90551: PUSH
90552: LD_INT 4
90554: EQUAL
90555: AND
90556: IFFALSE 90576
// begin temp_list = temp_list ^ i ;
90558: LD_ADDR_VAR 0 7
90562: PUSH
90563: LD_VAR 0 7
90567: PUSH
90568: LD_VAR 0 6
90572: ADD
90573: ST_TO_ADDR
// continue ;
90574: GO 90453
// end ; unit_hex_index = Replace ( unit_hex_index , i , unit_hex_index [ i ] + 1 ) ;
90576: LD_ADDR_VAR 0 18
90580: PUSH
90581: LD_VAR 0 18
90585: PPUSH
90586: LD_VAR 0 6
90590: PPUSH
90591: LD_VAR 0 18
90595: PUSH
90596: LD_VAR 0 6
90600: ARRAY
90601: PUSH
90602: LD_INT 1
90604: PLUS
90605: PPUSH
90606: CALL_OW 1
90610: ST_TO_ADDR
// end ; end ;
90611: GO 90453
90613: POP
90614: POP
// if temp_list + 0 = on_foot_group + 0 or ContactTime ( [ you , arabians ] ) <= 0 0$2 then
90615: LD_VAR 0 7
90619: PUSH
90620: LD_INT 0
90622: PLUS
90623: PUSH
90624: LD_VAR 0 11
90628: PUSH
90629: LD_INT 0
90631: PLUS
90632: EQUAL
90633: PUSH
90634: LD_EXP 2
90638: PUSH
90639: LD_EXP 6
90643: PUSH
90644: EMPTY
90645: LIST
90646: LIST
90647: PPUSH
90648: CALL_OW 462
90652: PUSH
90653: LD_INT 70
90655: LESSEQUAL
90656: OR
90657: IFFALSE 90667
// contaminate_scis_ready = true ;
90659: LD_ADDR_EXP 124
90663: PUSH
90664: LD_INT 1
90666: ST_TO_ADDR
// temp_list = vehicle_group_scis ^ on_foot_group ;
90667: LD_ADDR_VAR 0 7
90671: PUSH
90672: LD_VAR 0 3
90676: PUSH
90677: LD_VAR 0 11
90681: ADD
90682: ST_TO_ADDR
// if temp_list > 0 then
90683: LD_VAR 0 7
90687: PUSH
90688: LD_INT 0
90690: GREATER
90691: IFFALSE 90880
// begin for i in UnitFilter ( vehicle_group_vehicles , [ f_empty ] ) do
90693: LD_ADDR_VAR 0 6
90697: PUSH
90698: LD_VAR 0 4
90702: PPUSH
90703: LD_INT 58
90705: PUSH
90706: EMPTY
90707: LIST
90708: PPUSH
90709: CALL_OW 72
90713: PUSH
90714: FOR_IN
90715: IFFALSE 90878
// begin if temp_list = 0 then
90717: LD_VAR 0 7
90721: PUSH
90722: LD_INT 0
90724: EQUAL
90725: IFFALSE 90729
// break ;
90727: GO 90878
// un = AllNearestUnitToUnit ( temp_list , i ) ;
90729: LD_ADDR_VAR 0 5
90733: PUSH
90734: LD_VAR 0 7
90738: PPUSH
90739: LD_VAR 0 6
90743: PPUSH
90744: CALL_OW 75
90748: ST_TO_ADDR
// if GetDistUnits ( un , i ) <= 6 then
90749: LD_VAR 0 5
90753: PPUSH
90754: LD_VAR 0 6
90758: PPUSH
90759: CALL_OW 296
90763: PUSH
90764: LD_INT 6
90766: LESSEQUAL
90767: IFFALSE 90876
// begin ComEnterUnit ( un , i ) ;
90769: LD_VAR 0 5
90773: PPUSH
90774: LD_VAR 0 6
90778: PPUSH
90779: CALL_OW 120
// if un in vehicle_group_scis then
90783: LD_VAR 0 5
90787: PUSH
90788: LD_VAR 0 3
90792: IN
90793: IFFALSE 90813
// begin vehicle_group_scis = vehicle_group_scis diff un ;
90795: LD_ADDR_VAR 0 3
90799: PUSH
90800: LD_VAR 0 3
90804: PUSH
90805: LD_VAR 0 5
90809: DIFF
90810: ST_TO_ADDR
// end else
90811: GO 90876
// begin on_foot_group = on_foot_group diff un ;
90813: LD_ADDR_VAR 0 11
90817: PUSH
90818: LD_VAR 0 11
90822: PUSH
90823: LD_VAR 0 5
90827: DIFF
90828: ST_TO_ADDR
// vehicle_group = vehicle_group ^ un ;
90829: LD_ADDR_VAR 0 12
90833: PUSH
90834: LD_VAR 0 12
90838: PUSH
90839: LD_VAR 0 5
90843: ADD
90844: ST_TO_ADDR
// unit_hex_index = Replace ( unit_hex_index , un , unit_hex_index [ i ] ) ;
90845: LD_ADDR_VAR 0 18
90849: PUSH
90850: LD_VAR 0 18
90854: PPUSH
90855: LD_VAR 0 5
90859: PPUSH
90860: LD_VAR 0 18
90864: PUSH
90865: LD_VAR 0 6
90869: ARRAY
90870: PPUSH
90871: CALL_OW 1
90875: ST_TO_ADDR
// end ; end ; end ;
90876: GO 90714
90878: POP
90879: POP
// end ; for i in vehicle_group_vehicles ^ vehicle_group_scis do
90880: LD_ADDR_VAR 0 6
90884: PUSH
90885: LD_VAR 0 4
90889: PUSH
90890: LD_VAR 0 3
90894: ADD
90895: PUSH
90896: FOR_IN
90897: IFFALSE 91137
// begin if unit_hex_index [ i ] = vehicle_waypoints + 1 then
90899: LD_VAR 0 18
90903: PUSH
90904: LD_VAR 0 6
90908: ARRAY
90909: PUSH
90910: LD_VAR 0 1
90914: PUSH
90915: LD_INT 1
90917: PLUS
90918: EQUAL
90919: IFFALSE 90962
// begin ComMoveXY ( i , unit_park_hex [ i ] [ 1 ] , unit_park_hex [ i ] [ 2 ] ) ;
90921: LD_VAR 0 6
90925: PPUSH
90926: LD_VAR 0 21
90930: PUSH
90931: LD_VAR 0 6
90935: ARRAY
90936: PUSH
90937: LD_INT 1
90939: ARRAY
90940: PPUSH
90941: LD_VAR 0 21
90945: PUSH
90946: LD_VAR 0 6
90950: ARRAY
90951: PUSH
90952: LD_INT 2
90954: ARRAY
90955: PPUSH
90956: CALL_OW 111
// end else
90960: GO 91135
// if unit_hex_index [ i ] > vehicle_waypoints + 1 then
90962: LD_VAR 0 18
90966: PUSH
90967: LD_VAR 0 6
90971: ARRAY
90972: PUSH
90973: LD_VAR 0 1
90977: PUSH
90978: LD_INT 1
90980: PLUS
90981: GREATER
90982: IFFALSE 91025
// begin ComContaminate ( i , unit_sibloc_hex [ i ] [ 1 ] , unit_sibloc_hex [ i ] [ 2 ] ) ;
90984: LD_VAR 0 6
90988: PPUSH
90989: LD_VAR 0 19
90993: PUSH
90994: LD_VAR 0 6
90998: ARRAY
90999: PUSH
91000: LD_INT 1
91002: ARRAY
91003: PPUSH
91004: LD_VAR 0 19
91008: PUSH
91009: LD_VAR 0 6
91013: ARRAY
91014: PUSH
91015: LD_INT 2
91017: ARRAY
91018: PPUSH
91019: CALL_OW 158
// end else
91023: GO 91135
// if GetDistUnitXY ( i , vehicle_waypoints [ unit_hex_index [ i ] ] [ 1 ] , vehicle_waypoints [ unit_hex_index [ i ] ] [ 2 ] ) > vehicle_dist then
91025: LD_VAR 0 6
91029: PPUSH
91030: LD_VAR 0 1
91034: PUSH
91035: LD_VAR 0 18
91039: PUSH
91040: LD_VAR 0 6
91044: ARRAY
91045: ARRAY
91046: PUSH
91047: LD_INT 1
91049: ARRAY
91050: PPUSH
91051: LD_VAR 0 1
91055: PUSH
91056: LD_VAR 0 18
91060: PUSH
91061: LD_VAR 0 6
91065: ARRAY
91066: ARRAY
91067: PUSH
91068: LD_INT 2
91070: ARRAY
91071: PPUSH
91072: CALL_OW 297
91076: PUSH
91077: LD_VAR 0 22
91081: GREATER
91082: IFFALSE 91135
// ComMoveXY ( i , vehicle_waypoints [ unit_hex_index [ i ] ] [ 1 ] , vehicle_waypoints [ unit_hex_index [ i ] ] [ 2 ] ) ;
91084: LD_VAR 0 6
91088: PPUSH
91089: LD_VAR 0 1
91093: PUSH
91094: LD_VAR 0 18
91098: PUSH
91099: LD_VAR 0 6
91103: ARRAY
91104: ARRAY
91105: PUSH
91106: LD_INT 1
91108: ARRAY
91109: PPUSH
91110: LD_VAR 0 1
91114: PUSH
91115: LD_VAR 0 18
91119: PUSH
91120: LD_VAR 0 6
91124: ARRAY
91125: ARRAY
91126: PUSH
91127: LD_INT 2
91129: ARRAY
91130: PPUSH
91131: CALL_OW 111
// end ;
91135: GO 90896
91137: POP
91138: POP
// for i in on_foot_group do
91139: LD_ADDR_VAR 0 6
91143: PUSH
91144: LD_VAR 0 11
91148: PUSH
91149: FOR_IN
91150: IFFALSE 91323
// begin if unit_hex_index [ i ] > on_foot_waypoints then
91152: LD_VAR 0 18
91156: PUSH
91157: LD_VAR 0 6
91161: ARRAY
91162: PUSH
91163: LD_VAR 0 2
91167: GREATER
91168: IFFALSE 91211
// begin ComContaminate ( i , unit_sibloc_hex [ i ] [ 1 ] , unit_sibloc_hex [ i ] [ 2 ] ) ;
91170: LD_VAR 0 6
91174: PPUSH
91175: LD_VAR 0 19
91179: PUSH
91180: LD_VAR 0 6
91184: ARRAY
91185: PUSH
91186: LD_INT 1
91188: ARRAY
91189: PPUSH
91190: LD_VAR 0 19
91194: PUSH
91195: LD_VAR 0 6
91199: ARRAY
91200: PUSH
91201: LD_INT 2
91203: ARRAY
91204: PPUSH
91205: CALL_OW 158
// end else
91209: GO 91321
// if GetDistUnitXY ( i , on_foot_waypoints [ unit_hex_index [ i ] ] [ 1 ] , on_foot_waypoints [ unit_hex_index [ i ] ] [ 2 ] ) > human_dist then
91211: LD_VAR 0 6
91215: PPUSH
91216: LD_VAR 0 2
91220: PUSH
91221: LD_VAR 0 18
91225: PUSH
91226: LD_VAR 0 6
91230: ARRAY
91231: ARRAY
91232: PUSH
91233: LD_INT 1
91235: ARRAY
91236: PPUSH
91237: LD_VAR 0 2
91241: PUSH
91242: LD_VAR 0 18
91246: PUSH
91247: LD_VAR 0 6
91251: ARRAY
91252: ARRAY
91253: PUSH
91254: LD_INT 2
91256: ARRAY
91257: PPUSH
91258: CALL_OW 297
91262: PUSH
91263: LD_VAR 0 23
91267: GREATER
91268: IFFALSE 91321
// ComMoveXY ( i , on_foot_waypoints [ unit_hex_index [ i ] ] [ 1 ] , on_foot_waypoints [ unit_hex_index [ i ] ] [ 2 ] ) ;
91270: LD_VAR 0 6
91274: PPUSH
91275: LD_VAR 0 2
91279: PUSH
91280: LD_VAR 0 18
91284: PUSH
91285: LD_VAR 0 6
91289: ARRAY
91290: ARRAY
91291: PUSH
91292: LD_INT 1
91294: ARRAY
91295: PPUSH
91296: LD_VAR 0 2
91300: PUSH
91301: LD_VAR 0 18
91305: PUSH
91306: LD_VAR 0 6
91310: ARRAY
91311: ARRAY
91312: PUSH
91313: LD_INT 2
91315: ARRAY
91316: PPUSH
91317: CALL_OW 111
// end ;
91321: GO 91149
91323: POP
91324: POP
// until false ;
91325: LD_INT 0
91327: IFFALSE 89378
// until false ;
91329: LD_INT 0
91331: IFFALSE 88711
// end ;
91333: PPOPN 24
91335: END
// function CreateArSciVehicles ( num_units ) ; var i ; begin
91336: LD_INT 0
91338: PPUSH
91339: PPUSH
// InitUc ;
91340: CALL_OW 18
// InitVc ;
91344: CALL_OW 20
// uc_side = GetBaseSide ( 3 ) ;
91348: LD_ADDR_OWVAR 20
91352: PUSH
91353: LD_INT 3
91355: PPUSH
91356: CALL 24885 0 1
91360: ST_TO_ADDR
// uc_nation = nation_arabian ;
91361: LD_ADDR_OWVAR 21
91365: PUSH
91366: LD_INT 2
91368: ST_TO_ADDR
// vc_control = control_manual ;
91369: LD_ADDR_OWVAR 38
91373: PUSH
91374: LD_INT 1
91376: ST_TO_ADDR
// result = [ ] ;
91377: LD_ADDR_VAR 0 2
91381: PUSH
91382: EMPTY
91383: ST_TO_ADDR
// for i = 1 to num_units do
91384: LD_ADDR_VAR 0 3
91388: PUSH
91389: DOUBLE
91390: LD_INT 1
91392: DEC
91393: ST_TO_ADDR
91394: LD_VAR 0 1
91398: PUSH
91399: FOR_TO
91400: IFFALSE 91521
// begin vc_weapon = [ ar_double_machine_gun , ar_light_gun , ar_multimissile_ballista ] [ Rand ( 1 , 3 ) ] ;
91402: LD_ADDR_OWVAR 40
91406: PUSH
91407: LD_INT 24
91409: PUSH
91410: LD_INT 23
91412: PUSH
91413: LD_INT 22
91415: PUSH
91416: EMPTY
91417: LIST
91418: LIST
91419: LIST
91420: PUSH
91421: LD_INT 1
91423: PPUSH
91424: LD_INT 3
91426: PPUSH
91427: CALL_OW 12
91431: ARRAY
91432: ST_TO_ADDR
// vc_chassis = [ ar_half_tracked , ar_medium_trike , ar_light_trike , ar_hovercraft ] [ Rand ( 1 , 4 ) ] ;
91433: LD_ADDR_OWVAR 37
91437: PUSH
91438: LD_INT 14
91440: PUSH
91441: LD_INT 13
91443: PUSH
91444: LD_INT 12
91446: PUSH
91447: LD_INT 11
91449: PUSH
91450: EMPTY
91451: LIST
91452: LIST
91453: LIST
91454: LIST
91455: PUSH
91456: LD_INT 1
91458: PPUSH
91459: LD_INT 4
91461: PPUSH
91462: CALL_OW 12
91466: ARRAY
91467: ST_TO_ADDR
// if vc_chassis in [ ar_half_tracked , ar_medium_trike ] then
91468: LD_OWVAR 37
91472: PUSH
91473: LD_INT 14
91475: PUSH
91476: LD_INT 13
91478: PUSH
91479: EMPTY
91480: LIST
91481: LIST
91482: IN
91483: IFFALSE 91495
// vc_engine = engine_combustion else
91485: LD_ADDR_OWVAR 39
91489: PUSH
91490: LD_INT 1
91492: ST_TO_ADDR
91493: GO 91503
// vc_engine = engine_solar ;
91495: LD_ADDR_OWVAR 39
91499: PUSH
91500: LD_INT 2
91502: ST_TO_ADDR
// result = result ^ CreateVehicle ;
91503: LD_ADDR_VAR 0 2
91507: PUSH
91508: LD_VAR 0 2
91512: PUSH
91513: CALL_OW 45
91517: ADD
91518: ST_TO_ADDR
// end ;
91519: GO 91399
91521: POP
91522: POP
// end ;
91523: LD_VAR 0 2
91527: RET
// on SibDepositContaminated ( contaminating_scientist , x_of_deposit , y_of_deposit ) do var hex , hex_list ;
91528: LD_INT 0
91530: PPUSH
91531: PPUSH
// begin ExclusiveOn ;
91532: CALL_OW 4
// wait ( 0 0$2 ) ;
91536: LD_INT 70
91538: PPUSH
91539: CALL_OW 67
// InGameOn ;
91543: CALL_OW 8
// CenterOnXY ( 56 , 58 ) ;
91547: LD_INT 56
91549: PPUSH
91550: LD_INT 58
91552: PPUSH
91553: CALL_OW 84
// PlaceSeeing ( 62 , 60 , you , - 13 ) ;
91557: LD_INT 62
91559: PPUSH
91560: LD_INT 60
91562: PPUSH
91563: LD_EXP 2
91567: PPUSH
91568: LD_INT 13
91570: NEG
91571: PPUSH
91572: CALL_OW 330
// PlaceSeeing ( 51 , 60 , you , - 13 ) ;
91576: LD_INT 51
91578: PPUSH
91579: LD_INT 60
91581: PPUSH
91582: LD_EXP 2
91586: PPUSH
91587: LD_INT 13
91589: NEG
91590: PPUSH
91591: CALL_OW 330
// wait ( 0 0$3 ) ;
91595: LD_INT 105
91597: PPUSH
91598: CALL_OW 67
// hex_list = [ [ 67 , 65 ] , [ 59 , 56 ] , [ 58 , 63 ] , [ 52 , 56 ] , [ 50 , 62 ] ] ;
91602: LD_ADDR_VAR 0 5
91606: PUSH
91607: LD_INT 67
91609: PUSH
91610: LD_INT 65
91612: PUSH
91613: EMPTY
91614: LIST
91615: LIST
91616: PUSH
91617: LD_INT 59
91619: PUSH
91620: LD_INT 56
91622: PUSH
91623: EMPTY
91624: LIST
91625: LIST
91626: PUSH
91627: LD_INT 58
91629: PUSH
91630: LD_INT 63
91632: PUSH
91633: EMPTY
91634: LIST
91635: LIST
91636: PUSH
91637: LD_INT 52
91639: PUSH
91640: LD_INT 56
91642: PUSH
91643: EMPTY
91644: LIST
91645: LIST
91646: PUSH
91647: LD_INT 50
91649: PUSH
91650: LD_INT 62
91652: PUSH
91653: EMPTY
91654: LIST
91655: LIST
91656: PUSH
91657: EMPTY
91658: LIST
91659: LIST
91660: LIST
91661: LIST
91662: LIST
91663: ST_TO_ADDR
// while hex_list > 0 do
91664: LD_VAR 0 5
91668: PUSH
91669: LD_INT 0
91671: GREATER
91672: IFFALSE 91797
// begin hex = hex_list [ Rand ( 1 , hex_list + 0 ) ] ;
91674: LD_ADDR_VAR 0 4
91678: PUSH
91679: LD_VAR 0 5
91683: PUSH
91684: LD_INT 1
91686: PPUSH
91687: LD_VAR 0 5
91691: PUSH
91692: LD_INT 0
91694: PLUS
91695: PPUSH
91696: CALL_OW 12
91700: ARRAY
91701: ST_TO_ADDR
// hex_list = hex_list diff [ hex ] ;
91702: LD_ADDR_VAR 0 5
91706: PUSH
91707: LD_VAR 0 5
91711: PUSH
91712: LD_VAR 0 4
91716: PUSH
91717: EMPTY
91718: LIST
91719: DIFF
91720: ST_TO_ADDR
// hex = RandHexXYR ( hex [ 1 ] , hex [ 2 ] , 5 , false ) ;
91721: LD_ADDR_VAR 0 4
91725: PUSH
91726: LD_VAR 0 4
91730: PUSH
91731: LD_INT 1
91733: ARRAY
91734: PPUSH
91735: LD_VAR 0 4
91739: PUSH
91740: LD_INT 2
91742: ARRAY
91743: PPUSH
91744: LD_INT 5
91746: PPUSH
91747: LD_INT 0
91749: PPUSH
91750: CALL_OW 17
91754: ST_TO_ADDR
// MineExplosion ( hex [ 1 ] , hex [ 2 ] , true ) ;
91755: LD_VAR 0 4
91759: PUSH
91760: LD_INT 1
91762: ARRAY
91763: PPUSH
91764: LD_VAR 0 4
91768: PUSH
91769: LD_INT 2
91771: ARRAY
91772: PPUSH
91773: LD_INT 1
91775: PPUSH
91776: CALL_OW 453
// wait ( Rand ( 0 0$0.5 , 0 0$1.5 ) ) ;
91780: LD_INT 18
91782: PPUSH
91783: LD_INT 52
91785: PPUSH
91786: CALL_OW 12
91790: PPUSH
91791: CALL_OW 67
// end ;
91795: GO 91664
// YouLost ( SibCont ) ;
91797: LD_STRING SibCont
91799: PPUSH
91800: CALL_OW 104
// end ;
91804: PPOPN 5
91806: END
// every 0 0$1 + 0 0$0.1 do var choice_list , cho ;
91807: GO 91809
91809: DISABLE
91810: LD_INT 0
91812: PPUSH
91813: PPUSH
// begin repeat wait ( 0 0$1 ) ;
91814: LD_INT 35
91816: PPUSH
91817: CALL_OW 67
// until ai_vehicles_attack [ 1 ] > 0 ;
91821: LD_EXP 68
91825: PUSH
91826: LD_INT 1
91828: ARRAY
91829: PUSH
91830: LD_INT 0
91832: GREATER
91833: IFFALSE 91814
// repeat wait ( 0 0$1 ) ;
91835: LD_INT 35
91837: PPUSH
91838: CALL_OW 67
// until UnitFilter ( ai_vehicles_attack [ 1 ] , [ f_ok ] ) = 0 ;
91842: LD_EXP 68
91846: PUSH
91847: LD_INT 1
91849: ARRAY
91850: PPUSH
91851: LD_INT 50
91853: PUSH
91854: EMPTY
91855: LIST
91856: PPUSH
91857: CALL_OW 72
91861: PUSH
91862: LD_INT 0
91864: EQUAL
91865: IFFALSE 91835
// wait ( Rand ( 0 0$10 , 0 0$20 ) ) ;
91867: LD_INT 350
91869: PPUSH
91870: LD_INT 700
91872: PPUSH
91873: CALL_OW 12
91877: PPUSH
91878: CALL_OW 67
// if not IsLive ( Kozlov ) then
91882: LD_EXP 22
91886: PPUSH
91887: CALL_OW 300
91891: NOT
91892: IFFALSE 91896
// exit ;
91894: GO 92489
// choice_list = [ 1 , 2 , 3 ] ;
91896: LD_ADDR_VAR 0 1
91900: PUSH
91901: LD_INT 1
91903: PUSH
91904: LD_INT 2
91906: PUSH
91907: LD_INT 3
91909: PUSH
91910: EMPTY
91911: LIST
91912: LIST
91913: LIST
91914: ST_TO_ADDR
// DialogueOn ;
91915: CALL_OW 6
// SayRadio ( Platonov , D4-Pla-1 ) ;
91919: LD_EXP 25
91923: PPUSH
91924: LD_STRING D4-Pla-1
91926: PPUSH
91927: CALL_OW 94
// dwait ( 0 0$0.2 ) ;
91931: LD_INT 7
91933: PPUSH
91934: CALL_OW 68
// repeat cho = SelectiveQuery ( QKozlovHandover , choice_list ) ;
91938: LD_ADDR_VAR 0 2
91942: PUSH
91943: LD_STRING QKozlovHandover
91945: PPUSH
91946: LD_VAR 0 1
91950: PPUSH
91951: CALL_OW 98
91955: ST_TO_ADDR
// case cho of 1 :
91956: LD_VAR 0 2
91960: PUSH
91961: LD_INT 1
91963: DOUBLE
91964: EQUAL
91965: IFTRUE 91969
91967: GO 91984
91969: POP
// begin Say ( Heike , D4-1-H-1 ) ;
91970: LD_EXP 10
91974: PPUSH
91975: LD_STRING D4-1-H-1
91977: PPUSH
91978: CALL_OW 88
// end ; 2 :
91982: GO 92069
91984: LD_INT 2
91986: DOUBLE
91987: EQUAL
91988: IFTRUE 91992
91990: GO 92033
91992: POP
// begin Say ( Heike , D4-2-H-1 ) ;
91993: LD_EXP 10
91997: PPUSH
91998: LD_STRING D4-2-H-1
92000: PPUSH
92001: CALL_OW 88
// SayRadio ( Platonov , D4-2-Pla-1 ) ;
92005: LD_EXP 25
92009: PPUSH
92010: LD_STRING D4-2-Pla-1
92012: PPUSH
92013: CALL_OW 94
// choice_list = choice_list diff 2 ;
92017: LD_ADDR_VAR 0 1
92021: PUSH
92022: LD_VAR 0 1
92026: PUSH
92027: LD_INT 2
92029: DIFF
92030: ST_TO_ADDR
// end ; 3 :
92031: GO 92069
92033: LD_INT 3
92035: DOUBLE
92036: EQUAL
92037: IFTRUE 92041
92039: GO 92068
92041: POP
// begin Say ( Heike , D4-3-H-1 ) ;
92042: LD_EXP 10
92046: PPUSH
92047: LD_STRING D4-3-H-1
92049: PPUSH
92050: CALL_OW 88
// SayRadio ( Platonov , D4-3-Pla-1 ) ;
92054: LD_EXP 25
92058: PPUSH
92059: LD_STRING D4-3-Pla-1
92061: PPUSH
92062: CALL_OW 94
// end ; end ;
92066: GO 92069
92068: POP
// dwait ( 0 0$0.2 ) ;
92069: LD_INT 7
92071: PPUSH
92072: CALL_OW 68
// until cho in [ 1 , 3 ] ;
92076: LD_VAR 0 2
92080: PUSH
92081: LD_INT 1
92083: PUSH
92084: LD_INT 3
92086: PUSH
92087: EMPTY
92088: LIST
92089: LIST
92090: IN
92091: IFFALSE 91938
// DialogueOff ;
92093: CALL_OW 7
// if cho = 3 then
92097: LD_VAR 0 2
92101: PUSH
92102: LD_INT 3
92104: EQUAL
92105: IFFALSE 92109
// exit ;
92107: GO 92489
// russians_dont_attack_player = true ;
92109: LD_ADDR_EXP 122
92113: PUSH
92114: LD_INT 1
92116: ST_TO_ADDR
// player_starting_units = player_starting_units diff Kozlov ;
92117: LD_ADDR_EXP 147
92121: PUSH
92122: LD_EXP 147
92126: PUSH
92127: LD_EXP 22
92131: DIFF
92132: ST_TO_ADDR
// SetTech ( tech_sibfiss , you , state_disabled ) ;
92133: LD_INT 25
92135: PPUSH
92136: LD_EXP 2
92140: PPUSH
92141: LD_INT 0
92143: PPUSH
92144: CALL_OW 322
// ComCancel ( FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_lab_half ] , [ f_btype , b_lab_full ] ] , [ f_nation , nation_russian ] ] ) ) ;
92148: LD_INT 22
92150: PUSH
92151: LD_EXP 2
92155: PUSH
92156: EMPTY
92157: LIST
92158: LIST
92159: PUSH
92160: LD_INT 2
92162: PUSH
92163: LD_INT 30
92165: PUSH
92166: LD_INT 7
92168: PUSH
92169: EMPTY
92170: LIST
92171: LIST
92172: PUSH
92173: LD_INT 30
92175: PUSH
92176: LD_INT 8
92178: PUSH
92179: EMPTY
92180: LIST
92181: LIST
92182: PUSH
92183: EMPTY
92184: LIST
92185: LIST
92186: LIST
92187: PUSH
92188: LD_INT 23
92190: PUSH
92191: LD_INT 3
92193: PUSH
92194: EMPTY
92195: LIST
92196: LIST
92197: PUSH
92198: EMPTY
92199: LIST
92200: LIST
92201: LIST
92202: PPUSH
92203: CALL_OW 69
92207: PPUSH
92208: CALL_OW 127
// SetSide ( Kozlov , russians_alt ) ;
92212: LD_EXP 22
92216: PPUSH
92217: LD_EXP 8
92221: PPUSH
92222: CALL_OW 235
// ChangeSideFog ( russians_alt , you ) ;
92226: LD_EXP 8
92230: PPUSH
92231: LD_EXP 2
92235: PPUSH
92236: CALL_OW 343
// repeat wait ( 0 0$1 ) ;
92240: LD_INT 35
92242: PPUSH
92243: CALL_OW 67
// if IsInUnit ( Kozlov ) > 0 then
92247: LD_EXP 22
92251: PPUSH
92252: CALL_OW 310
92256: PUSH
92257: LD_INT 0
92259: GREATER
92260: IFFALSE 92320
// case GetType ( IsInUnit ( Kozlov ) ) of unit_vehicle :
92262: LD_EXP 22
92266: PPUSH
92267: CALL_OW 310
92271: PPUSH
92272: CALL_OW 247
92276: PUSH
92277: LD_INT 2
92279: DOUBLE
92280: EQUAL
92281: IFTRUE 92285
92283: GO 92297
92285: POP
// ComExitVehicle ( Kozlov ) ; unit_building :
92286: LD_EXP 22
92290: PPUSH
92291: CALL_OW 121
92295: GO 92318
92297: LD_INT 3
92299: DOUBLE
92300: EQUAL
92301: IFTRUE 92305
92303: GO 92317
92305: POP
// ComExitBuilding ( Kozlov ) ; end else
92306: LD_EXP 22
92310: PPUSH
92311: CALL_OW 122
92315: GO 92318
92317: POP
92318: GO 92335
// ComMoveXY ( Kozlov , 59 , 20 ) ;
92320: LD_EXP 22
92324: PPUSH
92325: LD_INT 59
92327: PPUSH
92328: LD_INT 20
92330: PPUSH
92331: CALL_OW 111
// until GetDistUnitXY ( Kozlov , 59 , 20 ) <= 4 or IsDead ( Kozlov ) ;
92335: LD_EXP 22
92339: PPUSH
92340: LD_INT 59
92342: PPUSH
92343: LD_INT 20
92345: PPUSH
92346: CALL_OW 297
92350: PUSH
92351: LD_INT 4
92353: LESSEQUAL
92354: PUSH
92355: LD_EXP 22
92359: PPUSH
92360: CALL_OW 301
92364: OR
92365: IFFALSE 92240
// if IsDead ( Kozlov ) then
92367: LD_EXP 22
92371: PPUSH
92372: CALL_OW 301
92376: IFFALSE 92388
// begin russians_dont_attack_player = false ;
92378: LD_ADDR_EXP 122
92382: PUSH
92383: LD_INT 0
92385: ST_TO_ADDR
// exit ;
92386: GO 92489
// end ; DialogueOn ;
92388: CALL_OW 6
// CenterOnUnits ( Kozlov ) ;
92392: LD_EXP 22
92396: PPUSH
92397: CALL_OW 85
// Say ( Platonov , D4-1-Pla-1 ) ;
92401: LD_EXP 25
92405: PPUSH
92406: LD_STRING D4-1-Pla-1
92408: PPUSH
92409: CALL_OW 88
// DialogueOff ;
92413: CALL_OW 7
// SetAttitude ( russians , russians_alt , att_enemy , true ) ;
92417: LD_EXP 3
92421: PPUSH
92422: LD_EXP 8
92426: PPUSH
92427: LD_INT 2
92429: PPUSH
92430: LD_INT 1
92432: PPUSH
92433: CALL_OW 80
// repeat wait ( 0 0$1 ) ;
92437: LD_INT 35
92439: PPUSH
92440: CALL_OW 67
// until IsDead ( Kozlov ) ;
92444: LD_EXP 22
92448: PPUSH
92449: CALL_OW 301
92453: IFFALSE 92437
// ChangeSideFog ( russians_alt , russians_alt ) ;
92455: LD_EXP 8
92459: PPUSH
92460: LD_EXP 8
92464: PPUSH
92465: CALL_OW 343
// SetAttitude ( russians , russians_alt , att_friend , true ) ;
92469: LD_EXP 3
92473: PPUSH
92474: LD_EXP 8
92478: PPUSH
92479: LD_INT 1
92481: PPUSH
92482: LD_INT 1
92484: PPUSH
92485: CALL_OW 80
// end ;
92489: PPOPN 2
92491: END
// every 0 0$1 + 0 0$0.2 do var i ;
92492: GO 92494
92494: DISABLE
92495: LD_INT 0
92497: PPUSH
// begin repeat wait ( 0 0$1 ) ;
92498: LD_INT 35
92500: PPUSH
92501: CALL_OW 67
// if not russians_dont_attack_player then
92505: LD_EXP 122
92509: NOT
92510: IFFALSE 92514
// continue ;
92512: GO 92498
// if tick >= 40 40$0 then
92514: LD_OWVAR 1
92518: PUSH
92519: LD_INT 84000
92521: GREATEREQUAL
92522: IFFALSE 92534
// begin russians_dont_attack_player = false ;
92524: LD_ADDR_EXP 122
92528: PUSH
92529: LD_INT 0
92531: ST_TO_ADDR
// exit ;
92532: GO 92677
// end ; if ContactTime ( [ you , russians ] ) <= 0 0$2 then
92534: LD_EXP 2
92538: PUSH
92539: LD_EXP 3
92543: PUSH
92544: EMPTY
92545: LIST
92546: LIST
92547: PPUSH
92548: CALL_OW 462
92552: PUSH
92553: LD_INT 70
92555: LESSEQUAL
92556: IFFALSE 92616
// begin for i in FilterAllUnits ( [ f_side , russians ] ) do
92558: LD_ADDR_VAR 0 1
92562: PUSH
92563: LD_INT 22
92565: PUSH
92566: LD_EXP 3
92570: PUSH
92571: EMPTY
92572: LIST
92573: LIST
92574: PPUSH
92575: CALL_OW 69
92579: PUSH
92580: FOR_IN
92581: IFFALSE 92614
// if SideShoot ( i ) = you then
92583: LD_VAR 0 1
92587: PPUSH
92588: CALL_OW 503
92592: PUSH
92593: LD_EXP 2
92597: EQUAL
92598: IFFALSE 92612
// begin russians_dont_attack_player = false ;
92600: LD_ADDR_EXP 122
92604: PUSH
92605: LD_INT 0
92607: ST_TO_ADDR
// exit ;
92608: POP
92609: POP
92610: GO 92677
// end ;
92612: GO 92580
92614: POP
92615: POP
// end ; if FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] , [ f_inarea , south_motherlode_area ] ] ) > 0 then
92616: LD_INT 22
92618: PUSH
92619: LD_EXP 2
92623: PUSH
92624: EMPTY
92625: LIST
92626: LIST
92627: PUSH
92628: LD_INT 21
92630: PUSH
92631: LD_INT 3
92633: PUSH
92634: EMPTY
92635: LIST
92636: LIST
92637: PUSH
92638: LD_INT 95
92640: PUSH
92641: LD_INT 16
92643: PUSH
92644: EMPTY
92645: LIST
92646: LIST
92647: PUSH
92648: EMPTY
92649: LIST
92650: LIST
92651: LIST
92652: PPUSH
92653: CALL_OW 69
92657: PUSH
92658: LD_INT 0
92660: GREATER
92661: IFFALSE 92673
// begin russians_dont_attack_player = false ;
92663: LD_ADDR_EXP 122
92667: PUSH
92668: LD_INT 0
92670: ST_TO_ADDR
// exit ;
92671: GO 92677
// end ; until false ;
92673: LD_INT 0
92675: IFFALSE 92498
// end ;
92677: PPOPN 1
92679: END
// every 0 0$1 + 0 0$0.9 trigger powell_call_start do var temp_list , i ;
92680: LD_EXP 153
92684: IFFALSE 93492
92686: GO 92688
92688: DISABLE
92689: LD_INT 0
92691: PPUSH
92692: PPUSH
// begin if not IsOk ( Powell ) then
92693: LD_EXP 31
92697: PPUSH
92698: CALL_OW 302
92702: NOT
92703: IFFALSE 92707
// exit ;
92705: GO 93492
// DialogueOn ;
92707: CALL_OW 6
// SayRadio ( Powell , D6-Po-1 ) ;
92711: LD_EXP 31
92715: PPUSH
92716: LD_STRING D6-Po-1
92718: PPUSH
92719: CALL_OW 94
// temp_list = UnitFilter ( [ Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis ] , [ f_ok ] ) ;
92723: LD_ADDR_VAR 0 1
92727: PUSH
92728: LD_EXP 11
92732: PUSH
92733: LD_EXP 12
92737: PUSH
92738: LD_EXP 13
92742: PUSH
92743: LD_EXP 14
92747: PUSH
92748: LD_EXP 15
92752: PUSH
92753: LD_EXP 16
92757: PUSH
92758: LD_EXP 17
92762: PUSH
92763: LD_EXP 18
92767: PUSH
92768: LD_EXP 19
92772: PUSH
92773: LD_EXP 20
92777: PUSH
92778: EMPTY
92779: LIST
92780: LIST
92781: LIST
92782: LIST
92783: LIST
92784: LIST
92785: LIST
92786: LIST
92787: LIST
92788: LIST
92789: PPUSH
92790: LD_INT 50
92792: PUSH
92793: EMPTY
92794: LIST
92795: PPUSH
92796: CALL_OW 72
92800: ST_TO_ADDR
// if temp_list > 0 then
92801: LD_VAR 0 1
92805: PUSH
92806: LD_INT 0
92808: GREATER
92809: IFFALSE 93095
// begin i = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
92811: LD_ADDR_VAR 0 2
92815: PUSH
92816: LD_VAR 0 1
92820: PUSH
92821: LD_INT 1
92823: PPUSH
92824: LD_VAR 0 1
92828: PUSH
92829: LD_INT 0
92831: PLUS
92832: PPUSH
92833: CALL_OW 12
92837: ARRAY
92838: ST_TO_ADDR
// case i of Olaf :
92839: LD_VAR 0 2
92843: PUSH
92844: LD_EXP 11
92848: DOUBLE
92849: EQUAL
92850: IFTRUE 92854
92852: GO 92869
92854: POP
// Say ( i , D6-Ola-1 ) ; Sonya :
92855: LD_VAR 0 2
92859: PPUSH
92860: LD_STRING D6-Ola-1
92862: PPUSH
92863: CALL_OW 88
92867: GO 93095
92869: LD_EXP 12
92873: DOUBLE
92874: EQUAL
92875: IFTRUE 92879
92877: GO 92894
92879: POP
// Say ( i , D6-So-1 ) ; Oswald :
92880: LD_VAR 0 2
92884: PPUSH
92885: LD_STRING D6-So-1
92887: PPUSH
92888: CALL_OW 88
92892: GO 93095
92894: LD_EXP 13
92898: DOUBLE
92899: EQUAL
92900: IFTRUE 92904
92902: GO 92919
92904: POP
// Say ( i , D6-Os-1 ) ; Ralph :
92905: LD_VAR 0 2
92909: PPUSH
92910: LD_STRING D6-Os-1
92912: PPUSH
92913: CALL_OW 88
92917: GO 93095
92919: LD_EXP 14
92923: DOUBLE
92924: EQUAL
92925: IFTRUE 92929
92927: GO 92944
92929: POP
// Say ( i , D6-Ra-1 ) ; Kowalski :
92930: LD_VAR 0 2
92934: PPUSH
92935: LD_STRING D6-Ra-1
92937: PPUSH
92938: CALL_OW 88
92942: GO 93095
92944: LD_EXP 15
92948: DOUBLE
92949: EQUAL
92950: IFTRUE 92954
92952: GO 92969
92954: POP
// Say ( i , D6-Ko-1 ) ; Suze :
92955: LD_VAR 0 2
92959: PPUSH
92960: LD_STRING D6-Ko-1
92962: PPUSH
92963: CALL_OW 88
92967: GO 93095
92969: LD_EXP 16
92973: DOUBLE
92974: EQUAL
92975: IFTRUE 92979
92977: GO 92994
92979: POP
// Say ( i , D6-Su-1 ) ; MarkB :
92980: LD_VAR 0 2
92984: PPUSH
92985: LD_STRING D6-Su-1
92987: PPUSH
92988: CALL_OW 88
92992: GO 93095
92994: LD_EXP 17
92998: DOUBLE
92999: EQUAL
93000: IFTRUE 93004
93002: GO 93019
93004: POP
// Say ( i , D6-Mark-1 ) ; Kurt :
93005: LD_VAR 0 2
93009: PPUSH
93010: LD_STRING D6-Mark-1
93012: PPUSH
93013: CALL_OW 88
93017: GO 93095
93019: LD_EXP 18
93023: DOUBLE
93024: EQUAL
93025: IFTRUE 93029
93027: GO 93044
93029: POP
// Say ( i , D6-Ku-1 ) ; Martin :
93030: LD_VAR 0 2
93034: PPUSH
93035: LD_STRING D6-Ku-1
93037: PPUSH
93038: CALL_OW 88
93042: GO 93095
93044: LD_EXP 19
93048: DOUBLE
93049: EQUAL
93050: IFTRUE 93054
93052: GO 93069
93054: POP
// Say ( i , D6-Mart-1 ) ; Louis :
93055: LD_VAR 0 2
93059: PPUSH
93060: LD_STRING D6-Mart-1
93062: PPUSH
93063: CALL_OW 88
93067: GO 93095
93069: LD_EXP 20
93073: DOUBLE
93074: EQUAL
93075: IFTRUE 93079
93077: GO 93094
93079: POP
// Say ( i , D6-Lo-1 ) ; end ;
93080: LD_VAR 0 2
93084: PPUSH
93085: LD_STRING D6-Lo-1
93087: PPUSH
93088: CALL_OW 88
93092: GO 93095
93094: POP
// end ; ForceSay ( Heike , D6-H-1 ) ;
93095: LD_EXP 10
93099: PPUSH
93100: LD_STRING D6-H-1
93102: PPUSH
93103: CALL_OW 91
// SayRadio ( Powell , D6-Po-2 ) ;
93107: LD_EXP 31
93111: PPUSH
93112: LD_STRING D6-Po-2
93114: PPUSH
93115: CALL_OW 94
// dwait ( 0 0$0.2 ) ;
93119: LD_INT 7
93121: PPUSH
93122: CALL_OW 68
// i = Query ( QAmericanDealAccept ) ;
93126: LD_ADDR_VAR 0 2
93130: PUSH
93131: LD_STRING QAmericanDealAccept
93133: PPUSH
93134: CALL_OW 97
93138: ST_TO_ADDR
// case i of 1 :
93139: LD_VAR 0 2
93143: PUSH
93144: LD_INT 1
93146: DOUBLE
93147: EQUAL
93148: IFTRUE 93152
93150: GO 93179
93152: POP
// begin ForceSay ( Heike , D6-1-H-1 ) ;
93153: LD_EXP 10
93157: PPUSH
93158: LD_STRING D6-1-H-1
93160: PPUSH
93161: CALL_OW 91
// SayRadio ( Powell , D6-1-Po-1 ) ;
93165: LD_EXP 31
93169: PPUSH
93170: LD_STRING D6-1-Po-1
93172: PPUSH
93173: CALL_OW 94
// end ; 2 :
93177: GO 93221
93179: LD_INT 2
93181: DOUBLE
93182: EQUAL
93183: IFTRUE 93187
93185: GO 93220
93187: POP
// begin ForceSay ( Heike , D6-2-H-1 ) ;
93188: LD_EXP 10
93192: PPUSH
93193: LD_STRING D6-2-H-1
93195: PPUSH
93196: CALL_OW 91
// SayRadio ( Powell , D6-2-Po-1 ) ;
93200: LD_EXP 31
93204: PPUSH
93205: LD_STRING D6-2-Po-1
93207: PPUSH
93208: CALL_OW 94
// DialogueOff ;
93212: CALL_OW 7
// exit ;
93216: GO 93492
// end ; end ;
93218: GO 93221
93220: POP
// american_deal_status = 1 ;
93221: LD_ADDR_EXP 128
93225: PUSH
93226: LD_INT 1
93228: ST_TO_ADDR
// dwait ( 0 0$0.2 ) ;
93229: LD_INT 7
93231: PPUSH
93232: CALL_OW 68
// i = Query ( QAmericanDealResources ) ;
93236: LD_ADDR_VAR 0 2
93240: PUSH
93241: LD_STRING QAmericanDealResources
93243: PPUSH
93244: CALL_OW 97
93248: ST_TO_ADDR
// case i of 1 :
93249: LD_VAR 0 2
93253: PUSH
93254: LD_INT 1
93256: DOUBLE
93257: EQUAL
93258: IFTRUE 93262
93260: GO 93284
93262: POP
// begin american_deal_reward = [ 250 , 0 , 0 ] ;
93263: LD_ADDR_EXP 129
93267: PUSH
93268: LD_INT 250
93270: PUSH
93271: LD_INT 0
93273: PUSH
93274: LD_INT 0
93276: PUSH
93277: EMPTY
93278: LIST
93279: LIST
93280: LIST
93281: ST_TO_ADDR
// end ; 2 :
93282: GO 93410
93284: LD_INT 2
93286: DOUBLE
93287: EQUAL
93288: IFTRUE 93292
93290: GO 93314
93292: POP
// begin american_deal_reward = [ 0 , 300 , 0 ] ;
93293: LD_ADDR_EXP 129
93297: PUSH
93298: LD_INT 0
93300: PUSH
93301: LD_INT 300
93303: PUSH
93304: LD_INT 0
93306: PUSH
93307: EMPTY
93308: LIST
93309: LIST
93310: LIST
93311: ST_TO_ADDR
// end ; 3 :
93312: GO 93410
93314: LD_INT 3
93316: DOUBLE
93317: EQUAL
93318: IFTRUE 93322
93320: GO 93344
93322: POP
// begin american_deal_reward = [ 0 , 0 , 60 ] ;
93323: LD_ADDR_EXP 129
93327: PUSH
93328: LD_INT 0
93330: PUSH
93331: LD_INT 0
93333: PUSH
93334: LD_INT 60
93336: PUSH
93337: EMPTY
93338: LIST
93339: LIST
93340: LIST
93341: ST_TO_ADDR
// end ; 4 :
93342: GO 93410
93344: LD_INT 4
93346: DOUBLE
93347: EQUAL
93348: IFTRUE 93352
93350: GO 93409
93352: POP
// begin ForceSay ( Heike , D6-14-H-1 ) ;
93353: LD_EXP 10
93357: PPUSH
93358: LD_STRING D6-14-H-1
93360: PPUSH
93361: CALL_OW 91
// SayRadio ( Powell , D6-14-Po-1 ) ;
93365: LD_EXP 31
93369: PPUSH
93370: LD_STRING D6-14-Po-1
93372: PPUSH
93373: CALL_OW 94
// ForceSay ( Heike , D6-14-H-2 ) ;
93377: LD_EXP 10
93381: PPUSH
93382: LD_STRING D6-14-H-2
93384: PPUSH
93385: CALL_OW 91
// SayRadio ( Powell , D6-14-Po-2 ) ;
93389: LD_EXP 31
93393: PPUSH
93394: LD_STRING D6-14-Po-2
93396: PPUSH
93397: CALL_OW 94
// DialogueOff ;
93401: CALL_OW 7
// exit ;
93405: GO 93492
// end ; end ;
93407: GO 93410
93409: POP
// american_deal_status = 2 ;
93410: LD_ADDR_EXP 128
93414: PUSH
93415: LD_INT 2
93417: ST_TO_ADDR
// ForceSay ( Heike , D6-1c-H-1 ) ;
93418: LD_EXP 10
93422: PPUSH
93423: LD_STRING D6-1c-H-1
93425: PPUSH
93426: CALL_OW 91
// SayRadio ( Powell , D6-1c-Po-1 ) ;
93430: LD_EXP 31
93434: PPUSH
93435: LD_STRING D6-1c-Po-1
93437: PPUSH
93438: CALL_OW 94
// ForceSay ( Heike , D6-1c-H-2 ) ;
93442: LD_EXP 10
93446: PPUSH
93447: LD_STRING D6-1c-H-2
93449: PPUSH
93450: CALL_OW 91
// dwait ( 0 0$0.2 ) ;
93454: LD_INT 7
93456: PPUSH
93457: CALL_OW 68
// ChangeMissionObjectives ( MDestroyAlliance ) ;
93461: LD_STRING MDestroyAlliance
93463: PPUSH
93464: CALL_OW 337
// SetAttitude ( you , americans , att_friend , true ) ;
93468: LD_EXP 2
93472: PPUSH
93473: LD_EXP 7
93477: PPUSH
93478: LD_INT 1
93480: PPUSH
93481: LD_INT 1
93483: PPUSH
93484: CALL_OW 80
// DialogueOff ;
93488: CALL_OW 7
// end ;
93492: PPOPN 2
93494: END
// every 0 0$1 + 0 0$0.9 trigger american_deal_status = 2 do
93495: LD_EXP 128
93499: PUSH
93500: LD_INT 2
93502: EQUAL
93503: IFFALSE 93717
93505: GO 93507
93507: DISABLE
// begin repeat wait ( 0 0$1 ) ;
93508: LD_INT 35
93510: PPUSH
93511: CALL_OW 67
// if not ( american_deal_status = 2 or ( american_deal_status = 3 and GetAttitude ( americans , you ) <> att_enemy ) ) then
93515: LD_EXP 128
93519: PUSH
93520: LD_INT 2
93522: EQUAL
93523: PUSH
93524: LD_EXP 128
93528: PUSH
93529: LD_INT 3
93531: EQUAL
93532: PUSH
93533: LD_EXP 7
93537: PPUSH
93538: LD_EXP 2
93542: PPUSH
93543: CALL_OW 81
93547: PUSH
93548: LD_INT 2
93550: NONEQUAL
93551: AND
93552: OR
93553: NOT
93554: IFFALSE 93558
// exit ;
93556: GO 93717
// if FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , GetBaseArea ( 4 ) ] ] ) > 0 then
93558: LD_INT 22
93560: PUSH
93561: LD_EXP 2
93565: PUSH
93566: EMPTY
93567: LIST
93568: LIST
93569: PUSH
93570: LD_INT 95
93572: PUSH
93573: LD_INT 4
93575: PPUSH
93576: CALL 24795 0 1
93580: PUSH
93581: EMPTY
93582: LIST
93583: LIST
93584: PUSH
93585: EMPTY
93586: LIST
93587: LIST
93588: PPUSH
93589: CALL_OW 69
93593: PUSH
93594: LD_INT 0
93596: GREATER
93597: IFFALSE 93713
// begin SetAttitude ( you , americans , att_enemy , true ) ;
93599: LD_EXP 2
93603: PPUSH
93604: LD_EXP 7
93608: PPUSH
93609: LD_INT 2
93611: PPUSH
93612: LD_INT 1
93614: PPUSH
93615: CALL_OW 80
// while american_deal_status = 2 and FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , GetBaseArea ( 4 ) ] ] ) > 0 do
93619: LD_EXP 128
93623: PUSH
93624: LD_INT 2
93626: EQUAL
93627: PUSH
93628: LD_INT 22
93630: PUSH
93631: LD_EXP 2
93635: PUSH
93636: EMPTY
93637: LIST
93638: LIST
93639: PUSH
93640: LD_INT 95
93642: PUSH
93643: LD_INT 4
93645: PPUSH
93646: CALL 24795 0 1
93650: PUSH
93651: EMPTY
93652: LIST
93653: LIST
93654: PUSH
93655: EMPTY
93656: LIST
93657: LIST
93658: PPUSH
93659: CALL_OW 69
93663: PUSH
93664: LD_INT 0
93666: GREATER
93667: AND
93668: IFFALSE 93679
// begin wait ( 0 0$2 ) ;
93670: LD_INT 70
93672: PPUSH
93673: CALL_OW 67
// end ;
93677: GO 93619
// if american_deal_status = 2 then
93679: LD_EXP 128
93683: PUSH
93684: LD_INT 2
93686: EQUAL
93687: IFFALSE 93711
// SetAttitude ( you , americans , att_friend , true ) else
93689: LD_EXP 2
93693: PPUSH
93694: LD_EXP 7
93698: PPUSH
93699: LD_INT 1
93701: PPUSH
93702: LD_INT 1
93704: PPUSH
93705: CALL_OW 80
93709: GO 93713
// exit ;
93711: GO 93717
// end ; until false ;
93713: LD_INT 0
93715: IFFALSE 93508
// end ;
93717: END
// every 0 0$1.5 trigger american_deal_status = 2 do var count ;
93718: LD_EXP 128
93722: PUSH
93723: LD_INT 2
93725: EQUAL
93726: IFFALSE 93912
93728: GO 93730
93730: DISABLE
93731: LD_INT 0
93733: PPUSH
// begin count = 0 ;
93734: LD_ADDR_VAR 0 1
93738: PUSH
93739: LD_INT 0
93741: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
93742: LD_INT 35
93744: PPUSH
93745: CALL_OW 67
// if american_deal_status <> 2 then
93749: LD_EXP 128
93753: PUSH
93754: LD_INT 2
93756: NONEQUAL
93757: IFFALSE 93761
// exit ;
93759: GO 93912
// if ContactTime ( [ you , americans ] ) <= 0 0$2 or ai_contact_time [ you ] [ americans ] <= 0 0$2 then
93761: LD_EXP 2
93765: PUSH
93766: LD_EXP 7
93770: PUSH
93771: EMPTY
93772: LIST
93773: LIST
93774: PPUSH
93775: CALL_OW 462
93779: PUSH
93780: LD_INT 70
93782: LESSEQUAL
93783: PUSH
93784: LD_EXP 112
93788: PUSH
93789: LD_EXP 2
93793: ARRAY
93794: PUSH
93795: LD_EXP 7
93799: ARRAY
93800: PUSH
93801: LD_INT 70
93803: LESSEQUAL
93804: OR
93805: IFFALSE 93823
// count = count + 1 else
93807: LD_ADDR_VAR 0 1
93811: PUSH
93812: LD_VAR 0 1
93816: PUSH
93817: LD_INT 1
93819: PLUS
93820: ST_TO_ADDR
93821: GO 93847
// if count > 0 then
93823: LD_VAR 0 1
93827: PUSH
93828: LD_INT 0
93830: GREATER
93831: IFFALSE 93847
// count = count - 1 ;
93833: LD_ADDR_VAR 0 1
93837: PUSH
93838: LD_VAR 0 1
93842: PUSH
93843: LD_INT 1
93845: MINUS
93846: ST_TO_ADDR
// until count >= 6 ;
93847: LD_VAR 0 1
93851: PUSH
93852: LD_INT 6
93854: GREATEREQUAL
93855: IFFALSE 93742
// DialogueOn ;
93857: CALL_OW 6
// SayRadio ( Powell , D14-Po-1 ) ;
93861: LD_EXP 31
93865: PPUSH
93866: LD_STRING D14-Po-1
93868: PPUSH
93869: CALL_OW 94
// DialogueOff ;
93873: CALL_OW 7
// american_deal_status = 4 ;
93877: LD_ADDR_EXP 128
93881: PUSH
93882: LD_INT 4
93884: ST_TO_ADDR
// SetAttitude ( you , americans , att_enemy , true ) ;
93885: LD_EXP 2
93889: PPUSH
93890: LD_EXP 7
93894: PPUSH
93895: LD_INT 2
93897: PPUSH
93898: LD_INT 1
93900: PPUSH
93901: CALL_OW 80
// ChangeMissionObjectives ( MDelDestroyAlliance ) ;
93905: LD_STRING MDelDestroyAlliance
93907: PPUSH
93908: CALL_OW 337
// end ;
93912: PPOPN 1
93914: END
// every 0 0$1.4 trigger american_deal_status = 2 do
93915: LD_EXP 128
93919: PUSH
93920: LD_INT 2
93922: EQUAL
93923: IFFALSE 94124
93925: GO 93927
93927: DISABLE
// begin repeat wait ( 0 0$1 ) ;
93928: LD_INT 35
93930: PPUSH
93931: CALL_OW 67
// if not ( american_deal_status = 2 or ( american_deal_status = 3 and GetAttitude ( americans , you ) <> att_enemy ) ) then
93935: LD_EXP 128
93939: PUSH
93940: LD_INT 2
93942: EQUAL
93943: PUSH
93944: LD_EXP 128
93948: PUSH
93949: LD_INT 3
93951: EQUAL
93952: PUSH
93953: LD_EXP 7
93957: PPUSH
93958: LD_EXP 2
93962: PPUSH
93963: CALL_OW 81
93967: PUSH
93968: LD_INT 2
93970: NONEQUAL
93971: AND
93972: OR
93973: NOT
93974: IFFALSE 93978
// exit ;
93976: GO 94124
// if FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_weapon , ru_siberium_rocket ] , [ f_weapon , ru_siberium_rocket_remainder ] , [ f_weapon , us_siberium_rocket ] , [ f_weapon , us_siberium_rocket_remainder ] ] , [ f_see , americans ] ] ) > 0 or player_fired_siberite_bomb then
93978: LD_INT 22
93980: PUSH
93981: LD_EXP 2
93985: PUSH
93986: EMPTY
93987: LIST
93988: LIST
93989: PUSH
93990: LD_INT 2
93992: PUSH
93993: LD_INT 34
93995: PUSH
93996: LD_INT 48
93998: PUSH
93999: EMPTY
94000: LIST
94001: LIST
94002: PUSH
94003: LD_INT 34
94005: PUSH
94006: LD_INT 55
94008: PUSH
94009: EMPTY
94010: LIST
94011: LIST
94012: PUSH
94013: LD_INT 34
94015: PUSH
94016: LD_INT 8
94018: PUSH
94019: EMPTY
94020: LIST
94021: LIST
94022: PUSH
94023: LD_INT 34
94025: PUSH
94026: LD_INT 15
94028: PUSH
94029: EMPTY
94030: LIST
94031: LIST
94032: PUSH
94033: EMPTY
94034: LIST
94035: LIST
94036: LIST
94037: LIST
94038: LIST
94039: PUSH
94040: LD_INT 101
94042: PUSH
94043: LD_EXP 7
94047: PUSH
94048: EMPTY
94049: LIST
94050: LIST
94051: PUSH
94052: EMPTY
94053: LIST
94054: LIST
94055: LIST
94056: PPUSH
94057: CALL_OW 69
94061: PUSH
94062: LD_INT 0
94064: GREATER
94065: PUSH
94066: LD_EXP 149
94070: OR
94071: IFFALSE 94120
// begin SetAttitude ( americans , you , att_enemy , true ) ;
94073: LD_EXP 7
94077: PPUSH
94078: LD_EXP 2
94082: PPUSH
94083: LD_INT 2
94085: PPUSH
94086: LD_INT 1
94088: PPUSH
94089: CALL_OW 80
// if american_deal_status = 2 then
94093: LD_EXP 128
94097: PUSH
94098: LD_INT 2
94100: EQUAL
94101: IFFALSE 94118
// begin american_deal_status = 4 ;
94103: LD_ADDR_EXP 128
94107: PUSH
94108: LD_INT 4
94110: ST_TO_ADDR
// ChangeMissionObjectives ( MDelDestroyAlliance ) ;
94111: LD_STRING MDelDestroyAlliance
94113: PPUSH
94114: CALL_OW 337
// end ; exit ;
94118: GO 94124
// end ; until false ;
94120: LD_INT 0
94122: IFFALSE 93928
// end ;
94124: END
// every 0 0$1.5 trigger american_deal_status = 2 do var i ;
94125: LD_EXP 128
94129: PUSH
94130: LD_INT 2
94132: EQUAL
94133: IFFALSE 94283
94135: GO 94137
94137: DISABLE
94138: LD_INT 0
94140: PPUSH
// begin repeat wait ( 0 0$2 ) ;
94141: LD_INT 70
94143: PPUSH
94144: CALL_OW 67
// if not ( american_deal_status = 2 or ( american_deal_status = 3 and GetAttitude ( americans , you ) <> att_enemy ) ) then
94148: LD_EXP 128
94152: PUSH
94153: LD_INT 2
94155: EQUAL
94156: PUSH
94157: LD_EXP 128
94161: PUSH
94162: LD_INT 3
94164: EQUAL
94165: PUSH
94166: LD_EXP 7
94170: PPUSH
94171: LD_EXP 2
94175: PPUSH
94176: CALL_OW 81
94180: PUSH
94181: LD_INT 2
94183: NONEQUAL
94184: AND
94185: OR
94186: NOT
94187: IFFALSE 94191
// exit ;
94189: GO 94283
// for i in ai_vehicles_attack [ 4 ] do
94191: LD_ADDR_VAR 0 1
94195: PUSH
94196: LD_EXP 68
94200: PUSH
94201: LD_INT 4
94203: ARRAY
94204: PUSH
94205: FOR_IN
94206: IFFALSE 94277
// if GetDistUnitArea ( i , ar_crossing_area ) <= 3 then
94208: LD_VAR 0 1
94212: PPUSH
94213: LD_INT 15
94215: PPUSH
94216: CALL_OW 299
94220: PUSH
94221: LD_INT 3
94223: LESSEQUAL
94224: IFFALSE 94275
// begin SetAttitude ( americans , you , att_enemy , true ) ;
94226: LD_EXP 7
94230: PPUSH
94231: LD_EXP 2
94235: PPUSH
94236: LD_INT 2
94238: PPUSH
94239: LD_INT 1
94241: PPUSH
94242: CALL_OW 80
// if american_deal_status = 2 then
94246: LD_EXP 128
94250: PUSH
94251: LD_INT 2
94253: EQUAL
94254: IFFALSE 94271
// begin american_deal_status = 4 ;
94256: LD_ADDR_EXP 128
94260: PUSH
94261: LD_INT 4
94263: ST_TO_ADDR
// ChangeMissionObjectives ( MDelDestroyAlliance ) ;
94264: LD_STRING MDelDestroyAlliance
94266: PPUSH
94267: CALL_OW 337
// end ; exit ;
94271: POP
94272: POP
94273: GO 94283
// end ;
94275: GO 94205
94277: POP
94278: POP
// until false ;
94279: LD_INT 0
94281: IFFALSE 94141
// end ;
94283: PPOPN 1
94285: END
// every 0 0$1.9 trigger american_deal_status = 2 do var start_tick , dialogue_played , i , vehicle_list , val , un , reward ;
94286: LD_EXP 128
94290: PUSH
94291: LD_INT 2
94293: EQUAL
94294: IFFALSE 95439
94296: GO 94298
94298: DISABLE
94299: LD_INT 0
94301: PPUSH
94302: PPUSH
94303: PPUSH
94304: PPUSH
94305: PPUSH
94306: PPUSH
94307: PPUSH
// begin start_tick = tick ;
94308: LD_ADDR_VAR 0 1
94312: PUSH
94313: LD_OWVAR 1
94317: ST_TO_ADDR
// dialogue_played = false ;
94318: LD_ADDR_VAR 0 2
94322: PUSH
94323: LD_INT 0
94325: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
94326: LD_INT 35
94328: PPUSH
94329: CALL_OW 67
// if american_deal_status <> 2 then
94333: LD_EXP 128
94337: PUSH
94338: LD_INT 2
94340: NONEQUAL
94341: IFFALSE 94345
// exit ;
94343: GO 95439
// if tick >= start_tick + 7 7$0 and not dialogue_played then
94345: LD_OWVAR 1
94349: PUSH
94350: LD_VAR 0 1
94354: PUSH
94355: LD_INT 14700
94357: PLUS
94358: GREATEREQUAL
94359: PUSH
94360: LD_VAR 0 2
94364: NOT
94365: AND
94366: IFFALSE 94396
// begin dialogue_played = true ;
94368: LD_ADDR_VAR 0 2
94372: PUSH
94373: LD_INT 1
94375: ST_TO_ADDR
// DialogueOn ;
94376: CALL_OW 6
// SayRadio ( Powell , D10-Po-1 ) ;
94380: LD_EXP 31
94384: PPUSH
94385: LD_STRING D10-Po-1
94387: PPUSH
94388: CALL_OW 94
// DialogueOff ;
94392: CALL_OW 7
// end ; until not 2 in ai_bases ;
94396: LD_INT 2
94398: PUSH
94399: LD_EXP 39
94403: IN
94404: NOT
94405: IFFALSE 94326
// Wait ( 0 0$3 ) ;
94407: LD_INT 105
94409: PPUSH
94410: CALL_OW 67
// if american_deal_status <> 2 then
94414: LD_EXP 128
94418: PUSH
94419: LD_INT 2
94421: NONEQUAL
94422: IFFALSE 94426
// exit ;
94424: GO 95439
// DialogueOn ;
94426: CALL_OW 6
// if FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , Alliance_base ] ] ) > 0 then
94430: LD_INT 22
94432: PUSH
94433: LD_EXP 2
94437: PUSH
94438: EMPTY
94439: LIST
94440: LIST
94441: PUSH
94442: LD_INT 95
94444: PUSH
94445: LD_INT 3
94447: PUSH
94448: EMPTY
94449: LIST
94450: LIST
94451: PUSH
94452: EMPTY
94453: LIST
94454: LIST
94455: PPUSH
94456: CALL_OW 69
94460: PUSH
94461: LD_INT 0
94463: GREATER
94464: IFFALSE 94480
// ForceSay ( Heike , D11-H-1a ) else
94466: LD_EXP 10
94470: PPUSH
94471: LD_STRING D11-H-1a
94473: PPUSH
94474: CALL_OW 91
94478: GO 94504
// begin SayRadio ( Powell , D11-Po-1b ) ;
94480: LD_EXP 31
94484: PPUSH
94485: LD_STRING D11-Po-1b
94487: PPUSH
94488: CALL_OW 94
// ForceSay ( Heike , D11-H-1b ) ;
94492: LD_EXP 10
94496: PPUSH
94497: LD_STRING D11-H-1b
94499: PPUSH
94500: CALL_OW 91
// end ; if ( player_alliance_uns_destroy [ 1 ] + 0 ) >= [ 3 , 4 , 5 ] [ difficulty ] and ( player_alliance_uns_destroy [ 2 ] + 0 ) >= [ 3 , 4 , 5 ] [ difficulty ] then
94504: LD_EXP 145
94508: PUSH
94509: LD_INT 1
94511: ARRAY
94512: PUSH
94513: LD_INT 0
94515: PLUS
94516: PUSH
94517: LD_INT 3
94519: PUSH
94520: LD_INT 4
94522: PUSH
94523: LD_INT 5
94525: PUSH
94526: EMPTY
94527: LIST
94528: LIST
94529: LIST
94530: PUSH
94531: LD_OWVAR 67
94535: ARRAY
94536: GREATEREQUAL
94537: PUSH
94538: LD_EXP 145
94542: PUSH
94543: LD_INT 2
94545: ARRAY
94546: PUSH
94547: LD_INT 0
94549: PLUS
94550: PUSH
94551: LD_INT 3
94553: PUSH
94554: LD_INT 4
94556: PUSH
94557: LD_INT 5
94559: PUSH
94560: EMPTY
94561: LIST
94562: LIST
94563: LIST
94564: PUSH
94565: LD_OWVAR 67
94569: ARRAY
94570: GREATEREQUAL
94571: AND
94572: IFFALSE 94596
// begin SayRadio ( Powell , D11-Po-1x ) ;
94574: LD_EXP 31
94578: PPUSH
94579: LD_STRING D11-Po-1x
94581: PPUSH
94582: CALL_OW 94
// reward = true ;
94586: LD_ADDR_VAR 0 7
94590: PUSH
94591: LD_INT 1
94593: ST_TO_ADDR
// end else
94594: GO 94616
// begin SayRadio ( Powell , D11-Po-2x ) ;
94596: LD_EXP 31
94600: PPUSH
94601: LD_STRING D11-Po-2x
94603: PPUSH
94604: CALL_OW 94
// reward = false ;
94608: LD_ADDR_VAR 0 7
94612: PUSH
94613: LD_INT 0
94615: ST_TO_ADDR
// end ; DialogueOff ;
94616: CALL_OW 7
// SetAttitude ( you , americans , att_neutral , true ) ;
94620: LD_EXP 2
94624: PPUSH
94625: LD_EXP 7
94629: PPUSH
94630: LD_INT 0
94632: PPUSH
94633: LD_INT 1
94635: PPUSH
94636: CALL_OW 80
// american_deal_status = 3 ;
94640: LD_ADDR_EXP 128
94644: PUSH
94645: LD_INT 3
94647: ST_TO_ADDR
// wait ( 0 0$0.2 ) ;
94648: LD_INT 7
94650: PPUSH
94651: CALL_OW 67
// ChangeMissionObjectives ( MOutDestroyAlliance ) ;
94655: LD_STRING MOutDestroyAlliance
94657: PPUSH
94658: CALL_OW 337
// if not reward then
94662: LD_VAR 0 7
94666: NOT
94667: IFFALSE 94671
// exit ;
94669: GO 95439
// wait ( 0 0$10 ) ;
94671: LD_INT 350
94673: PPUSH
94674: CALL_OW 67
// InitUc ;
94678: CALL_OW 18
// InitVc ;
94682: CALL_OW 20
// uc_side = GetBaseSide ( 4 ) ;
94686: LD_ADDR_OWVAR 20
94690: PUSH
94691: LD_INT 4
94693: PPUSH
94694: CALL 24885 0 1
94698: ST_TO_ADDR
// uc_nation = GetBaseNation ( 4 ) ;
94699: LD_ADDR_OWVAR 21
94703: PUSH
94704: LD_INT 4
94706: PPUSH
94707: CALL 24983 0 1
94711: ST_TO_ADDR
// vc_chassis = us_medium_tracked ;
94712: LD_ADDR_OWVAR 37
94716: PUSH
94717: LD_INT 3
94719: ST_TO_ADDR
// vc_control = control_computer ;
94720: LD_ADDR_OWVAR 38
94724: PUSH
94725: LD_INT 3
94727: ST_TO_ADDR
// vc_engine = engine_siberite ;
94728: LD_ADDR_OWVAR 39
94732: PUSH
94733: LD_INT 3
94735: ST_TO_ADDR
// vc_weapon = us_cargo_bay ;
94736: LD_ADDR_OWVAR 40
94740: PUSH
94741: LD_INT 12
94743: ST_TO_ADDR
// while ( american_deal_reward diff 0 ) + 0 > 0 do
94744: LD_EXP 129
94748: PUSH
94749: LD_INT 0
94751: DIFF
94752: PUSH
94753: LD_INT 0
94755: PLUS
94756: PUSH
94757: LD_INT 0
94759: GREATER
94760: IFFALSE 95033
// begin un = CreateVehicle ;
94762: LD_ADDR_VAR 0 6
94766: PUSH
94767: CALL_OW 45
94771: ST_TO_ADDR
// vehicle_list = vehicle_list ^ un ;
94772: LD_ADDR_VAR 0 4
94776: PUSH
94777: LD_VAR 0 4
94781: PUSH
94782: LD_VAR 0 6
94786: ADD
94787: ST_TO_ADDR
// for i = 1 to american_deal_reward do
94788: LD_ADDR_VAR 0 3
94792: PUSH
94793: DOUBLE
94794: LD_INT 1
94796: DEC
94797: ST_TO_ADDR
94798: LD_EXP 129
94802: PUSH
94803: FOR_TO
94804: IFFALSE 95029
// if american_deal_reward [ i ] > 0 then
94806: LD_EXP 129
94810: PUSH
94811: LD_VAR 0 3
94815: ARRAY
94816: PUSH
94817: LD_INT 0
94819: GREATER
94820: IFFALSE 95027
// begin val = american_deal_reward [ i ] ;
94822: LD_ADDR_VAR 0 5
94826: PUSH
94827: LD_EXP 129
94831: PUSH
94832: LD_VAR 0 3
94836: ARRAY
94837: ST_TO_ADDR
// if val > 100 then
94838: LD_VAR 0 5
94842: PUSH
94843: LD_INT 100
94845: GREATER
94846: IFFALSE 94856
// val = 100 ;
94848: LD_ADDR_VAR 0 5
94852: PUSH
94853: LD_INT 100
94855: ST_TO_ADDR
// val = val - GetCargo ( un , mat_multi ) ;
94856: LD_ADDR_VAR 0 5
94860: PUSH
94861: LD_VAR 0 5
94865: PUSH
94866: LD_VAR 0 6
94870: PPUSH
94871: LD_INT 5
94873: PPUSH
94874: CALL_OW 289
94878: MINUS
94879: ST_TO_ADDR
// case i of 1 :
94880: LD_VAR 0 3
94884: PUSH
94885: LD_INT 1
94887: DOUBLE
94888: EQUAL
94889: IFTRUE 94893
94891: GO 94913
94893: POP
// AddCargo ( un , mat_cans , val ) ; 2 :
94894: LD_VAR 0 6
94898: PPUSH
94899: LD_INT 1
94901: PPUSH
94902: LD_VAR 0 5
94906: PPUSH
94907: CALL_OW 291
94911: GO 94970
94913: LD_INT 2
94915: DOUBLE
94916: EQUAL
94917: IFTRUE 94921
94919: GO 94941
94921: POP
// AddCargo ( un , mat_oil , val ) ; 3 :
94922: LD_VAR 0 6
94926: PPUSH
94927: LD_INT 2
94929: PPUSH
94930: LD_VAR 0 5
94934: PPUSH
94935: CALL_OW 291
94939: GO 94970
94941: LD_INT 3
94943: DOUBLE
94944: EQUAL
94945: IFTRUE 94949
94947: GO 94969
94949: POP
// AddCargo ( un , mat_siberit , val ) ; end ;
94950: LD_VAR 0 6
94954: PPUSH
94955: LD_INT 3
94957: PPUSH
94958: LD_VAR 0 5
94962: PPUSH
94963: CALL_OW 291
94967: GO 94970
94969: POP
// american_deal_reward = Replace ( american_deal_reward , i , american_deal_reward [ i ] - val ) ;
94970: LD_ADDR_EXP 129
94974: PUSH
94975: LD_EXP 129
94979: PPUSH
94980: LD_VAR 0 3
94984: PPUSH
94985: LD_EXP 129
94989: PUSH
94990: LD_VAR 0 3
94994: ARRAY
94995: PUSH
94996: LD_VAR 0 5
95000: MINUS
95001: PPUSH
95002: CALL_OW 1
95006: ST_TO_ADDR
// if GetCargo ( un , mat_multi ) = 100 then
95007: LD_VAR 0 6
95011: PPUSH
95012: LD_INT 5
95014: PPUSH
95015: CALL_OW 289
95019: PUSH
95020: LD_INT 100
95022: EQUAL
95023: IFFALSE 95027
// break ;
95025: GO 95029
// end ;
95027: GO 94803
95029: POP
95030: POP
// end ;
95031: GO 94744
// repeat for i in vehicle_list do
95033: LD_ADDR_VAR 0 3
95037: PUSH
95038: LD_VAR 0 4
95042: PUSH
95043: FOR_IN
95044: IFFALSE 95092
// if not IsPlaced ( i ) then
95046: LD_VAR 0 3
95050: PPUSH
95051: CALL_OW 305
95055: NOT
95056: IFFALSE 95090
// if PlaceUnitXYR ( i , 108 , 183 , 6 , false ) then
95058: LD_VAR 0 3
95062: PPUSH
95063: LD_INT 108
95065: PPUSH
95066: LD_INT 183
95068: PPUSH
95069: LD_INT 6
95071: PPUSH
95072: LD_INT 0
95074: PPUSH
95075: CALL_OW 50
95079: IFFALSE 95090
// ComHold ( i ) ;
95081: LD_VAR 0 3
95085: PPUSH
95086: CALL_OW 140
95090: GO 95043
95092: POP
95093: POP
// wait ( 0 0$1 ) ;
95094: LD_INT 35
95096: PPUSH
95097: CALL_OW 67
// until UnitFilter ( vehicle_list , [ f_not , [ f_placed ] ] ) = 0 ;
95101: LD_VAR 0 4
95105: PPUSH
95106: LD_INT 3
95108: PUSH
95109: LD_INT 52
95111: PUSH
95112: EMPTY
95113: LIST
95114: PUSH
95115: EMPTY
95116: LIST
95117: LIST
95118: PPUSH
95119: CALL_OW 72
95123: PUSH
95124: LD_INT 0
95126: EQUAL
95127: IFFALSE 95033
// repeat wait ( 0 0$1 ) ;
95129: LD_INT 35
95131: PPUSH
95132: CALL_OW 67
// vehicle_list = UnitFilter ( vehicle_list , [ f_alive ] ) ;
95136: LD_ADDR_VAR 0 4
95140: PUSH
95141: LD_VAR 0 4
95145: PPUSH
95146: LD_INT 51
95148: PUSH
95149: EMPTY
95150: LIST
95151: PPUSH
95152: CALL_OW 72
95156: ST_TO_ADDR
// if vehicle_list = 0 then
95157: LD_VAR 0 4
95161: PUSH
95162: LD_INT 0
95164: EQUAL
95165: IFFALSE 95169
// break ;
95167: GO 95439
// for i in vehicle_list do
95169: LD_ADDR_VAR 0 3
95173: PUSH
95174: LD_VAR 0 4
95178: PUSH
95179: FOR_IN
95180: IFFALSE 95433
// begin if GetCargo ( i , mat_multi ) > 0 and GetAttitude ( you , americans ) <> att_enemy then
95182: LD_VAR 0 3
95186: PPUSH
95187: LD_INT 5
95189: PPUSH
95190: CALL_OW 289
95194: PUSH
95195: LD_INT 0
95197: GREATER
95198: PUSH
95199: LD_EXP 2
95203: PPUSH
95204: LD_EXP 7
95208: PPUSH
95209: CALL_OW 81
95213: PUSH
95214: LD_INT 2
95216: NONEQUAL
95217: AND
95218: IFFALSE 95344
// begin if GetDistUnitXY ( i , ai_human_pullback_hex [ 2 ] [ 1 ] , ai_human_pullback_hex [ 2 ] [ 2 ] ) > 5 then
95220: LD_VAR 0 3
95224: PPUSH
95225: LD_EXP 73
95229: PUSH
95230: LD_INT 2
95232: ARRAY
95233: PUSH
95234: LD_INT 1
95236: ARRAY
95237: PPUSH
95238: LD_EXP 73
95242: PUSH
95243: LD_INT 2
95245: ARRAY
95246: PUSH
95247: LD_INT 2
95249: ARRAY
95250: PPUSH
95251: CALL_OW 297
95255: PUSH
95256: LD_INT 5
95258: GREATER
95259: IFFALSE 95298
// ComMoveXY ( i , ai_human_pullback_hex [ 2 ] [ 1 ] , ai_human_pullback_hex [ 2 ] [ 2 ] ) else
95261: LD_VAR 0 3
95265: PPUSH
95266: LD_EXP 73
95270: PUSH
95271: LD_INT 2
95273: ARRAY
95274: PUSH
95275: LD_INT 1
95277: ARRAY
95278: PPUSH
95279: LD_EXP 73
95283: PUSH
95284: LD_INT 2
95286: ARRAY
95287: PUSH
95288: LD_INT 2
95290: ARRAY
95291: PPUSH
95292: CALL_OW 111
95296: GO 95342
// begin ComUnload ( i ) ;
95298: LD_VAR 0 3
95302: PPUSH
95303: CALL_OW 159
// AddComMoveXY ( i , ai_human_pullback_hex [ 4 ] [ 1 ] , ai_human_pullback_hex [ 4 ] [ 2 ] ) ;
95307: LD_VAR 0 3
95311: PPUSH
95312: LD_EXP 73
95316: PUSH
95317: LD_INT 4
95319: ARRAY
95320: PUSH
95321: LD_INT 1
95323: ARRAY
95324: PPUSH
95325: LD_EXP 73
95329: PUSH
95330: LD_INT 4
95332: ARRAY
95333: PUSH
95334: LD_INT 2
95336: ARRAY
95337: PPUSH
95338: CALL_OW 171
// end ; end else
95342: GO 95431
// begin if GetDistUnitXY ( i , ai_human_pullback_hex [ 4 ] [ 1 ] , ai_human_pullback_hex [ 4 ] [ 2 ] ) > 5 then
95344: LD_VAR 0 3
95348: PPUSH
95349: LD_EXP 73
95353: PUSH
95354: LD_INT 4
95356: ARRAY
95357: PUSH
95358: LD_INT 1
95360: ARRAY
95361: PPUSH
95362: LD_EXP 73
95366: PUSH
95367: LD_INT 4
95369: ARRAY
95370: PUSH
95371: LD_INT 2
95373: ARRAY
95374: PPUSH
95375: CALL_OW 297
95379: PUSH
95380: LD_INT 5
95382: GREATER
95383: IFFALSE 95422
// ComMoveXY ( i , ai_human_pullback_hex [ 4 ] [ 1 ] , ai_human_pullback_hex [ 4 ] [ 2 ] ) else
95385: LD_VAR 0 3
95389: PPUSH
95390: LD_EXP 73
95394: PUSH
95395: LD_INT 4
95397: ARRAY
95398: PUSH
95399: LD_INT 1
95401: ARRAY
95402: PPUSH
95403: LD_EXP 73
95407: PUSH
95408: LD_INT 4
95410: ARRAY
95411: PUSH
95412: LD_INT 2
95414: ARRAY
95415: PPUSH
95416: CALL_OW 111
95420: GO 95431
// DestroyUnit ( i ) ;
95422: LD_VAR 0 3
95426: PPUSH
95427: CALL_OW 65
// end ; end ;
95431: GO 95179
95433: POP
95434: POP
// until false ;
95435: LD_INT 0
95437: IFFALSE 95129
// end ;
95439: PPOPN 7
95441: END
// every 0 0$1 + 0 0$0.1 trigger american_deal_status = 3 do
95442: LD_EXP 128
95446: PUSH
95447: LD_INT 3
95449: EQUAL
95450: IFFALSE 95493
95452: GO 95454
95454: DISABLE
// begin repeat wait ( 0 0$1 ) ;
95455: LD_INT 35
95457: PPUSH
95458: CALL_OW 67
// until IsDead ( Platonov ) ;
95462: LD_EXP 25
95466: PPUSH
95467: CALL_OW 301
95471: IFFALSE 95455
// SetAttitude ( you , americans , att_enemy , true ) ;
95473: LD_EXP 2
95477: PPUSH
95478: LD_EXP 7
95482: PPUSH
95483: LD_INT 2
95485: PPUSH
95486: LD_INT 1
95488: PPUSH
95489: CALL_OW 80
// end ;
95493: END
// every 0 0$1 + 0 0$0.8 trigger intermediate_dialogue_start do var other , str ;
95494: LD_EXP 154
95498: IFFALSE 95856
95500: GO 95502
95502: DISABLE
95503: LD_INT 0
95505: PPUSH
95506: PPUSH
// begin repeat wait ( 0 0$1 ) ;
95507: LD_INT 35
95509: PPUSH
95510: CALL_OW 67
// until ContactTime ( you ) >= 0 0$5 ;
95514: LD_EXP 2
95518: PPUSH
95519: CALL_OW 462
95523: PUSH
95524: LD_INT 175
95526: GREATEREQUAL
95527: IFFALSE 95507
// if not IsOk ( Olaf ) and not IsOk ( Martin ) then
95529: LD_EXP 11
95533: PPUSH
95534: CALL_OW 302
95538: NOT
95539: PUSH
95540: LD_EXP 19
95544: PPUSH
95545: CALL_OW 302
95549: NOT
95550: AND
95551: IFFALSE 95555
// exit ;
95553: GO 95856
// if IsOk ( Olaf ) then
95555: LD_EXP 11
95559: PPUSH
95560: CALL_OW 302
95564: IFFALSE 95586
// begin other = Olaf ;
95566: LD_ADDR_VAR 0 1
95570: PUSH
95571: LD_EXP 11
95575: ST_TO_ADDR
// str = Ola ;
95576: LD_ADDR_VAR 0 2
95580: PUSH
95581: LD_STRING Ola
95583: ST_TO_ADDR
// end else
95584: GO 95604
// begin other = Martin ;
95586: LD_ADDR_VAR 0 1
95590: PUSH
95591: LD_EXP 19
95595: ST_TO_ADDR
// str = Mart ;
95596: LD_ADDR_VAR 0 2
95600: PUSH
95601: LD_STRING Mart
95603: ST_TO_ADDR
// end ; DialogueOn ;
95604: CALL_OW 6
// Say ( other , D9- & str & -1 ) ;
95608: LD_VAR 0 1
95612: PPUSH
95613: LD_STRING D9-
95615: PUSH
95616: LD_VAR 0 2
95620: STR
95621: PUSH
95622: LD_STRING -1
95624: STR
95625: PPUSH
95626: CALL_OW 88
// if other = Olaf then
95630: LD_VAR 0 1
95634: PUSH
95635: LD_EXP 11
95639: EQUAL
95640: IFFALSE 95656
// ForceSay ( Heike , D9-H-1a ) else
95642: LD_EXP 10
95646: PPUSH
95647: LD_STRING D9-H-1a
95649: PPUSH
95650: CALL_OW 91
95654: GO 95668
// ForceSay ( Heike , D9-H-1b ) ;
95656: LD_EXP 10
95660: PPUSH
95661: LD_STRING D9-H-1b
95663: PPUSH
95664: CALL_OW 91
// Say ( other , D9- & str & -2 ) ;
95668: LD_VAR 0 1
95672: PPUSH
95673: LD_STRING D9-
95675: PUSH
95676: LD_VAR 0 2
95680: STR
95681: PUSH
95682: LD_STRING -2
95684: STR
95685: PPUSH
95686: CALL_OW 88
// ForceSay ( Heike , D9-H-2 ) ;
95690: LD_EXP 10
95694: PPUSH
95695: LD_STRING D9-H-2
95697: PPUSH
95698: CALL_OW 91
// Say ( other , D9- & str & -3 ) ;
95702: LD_VAR 0 1
95706: PPUSH
95707: LD_STRING D9-
95709: PUSH
95710: LD_VAR 0 2
95714: STR
95715: PUSH
95716: LD_STRING -3
95718: STR
95719: PPUSH
95720: CALL_OW 88
// ForceSay ( Heike , D9-H-3 ) ;
95724: LD_EXP 10
95728: PPUSH
95729: LD_STRING D9-H-3
95731: PPUSH
95732: CALL_OW 91
// Say ( other , D9- & str & -4 ) ;
95736: LD_VAR 0 1
95740: PPUSH
95741: LD_STRING D9-
95743: PUSH
95744: LD_VAR 0 2
95748: STR
95749: PUSH
95750: LD_STRING -4
95752: STR
95753: PPUSH
95754: CALL_OW 88
// ForceSay ( Heike , D9-H-4 ) ;
95758: LD_EXP 10
95762: PPUSH
95763: LD_STRING D9-H-4
95765: PPUSH
95766: CALL_OW 91
// Say ( other , D9- & str & -5 ) ;
95770: LD_VAR 0 1
95774: PPUSH
95775: LD_STRING D9-
95777: PUSH
95778: LD_VAR 0 2
95782: STR
95783: PUSH
95784: LD_STRING -5
95786: STR
95787: PPUSH
95788: CALL_OW 88
// if other = Olaf then
95792: LD_VAR 0 1
95796: PUSH
95797: LD_EXP 11
95801: EQUAL
95802: IFFALSE 95818
// ForceSay ( Heike , D9-H-5a ) else
95804: LD_EXP 10
95808: PPUSH
95809: LD_STRING D9-H-5a
95811: PPUSH
95812: CALL_OW 91
95816: GO 95830
// ForceSay ( Heike , D9-H-5b ) ;
95818: LD_EXP 10
95822: PPUSH
95823: LD_STRING D9-H-5b
95825: PPUSH
95826: CALL_OW 91
// Say ( other , D9- & str & -6 ) ;
95830: LD_VAR 0 1
95834: PPUSH
95835: LD_STRING D9-
95837: PUSH
95838: LD_VAR 0 2
95842: STR
95843: PUSH
95844: LD_STRING -6
95846: STR
95847: PPUSH
95848: CALL_OW 88
// DialogueOff ;
95852: CALL_OW 7
// end ;
95856: PPOPN 2
95858: END
// every 0 0$1 + 0 0$0.2 trigger alliance_call_start do var i , temp_list ;
95859: LD_EXP 155
95863: IFFALSE 96224
95865: GO 95867
95867: DISABLE
95868: LD_INT 0
95870: PPUSH
95871: PPUSH
// begin i = AdjustTimeToDifficulty ( 25 25$0 ) ;
95872: LD_ADDR_VAR 0 1
95876: PUSH
95877: LD_INT 52500
95879: PPUSH
95880: CALL 85701 0 1
95884: ST_TO_ADDR
// wait ( i ) ;
95885: LD_VAR 0 1
95889: PPUSH
95890: CALL_OW 67
// repeat wait ( 0 0$1 ) ;
95894: LD_INT 35
95896: PPUSH
95897: CALL_OW 67
// if not 2 in ai_bases then
95901: LD_INT 2
95903: PUSH
95904: LD_EXP 39
95908: IN
95909: NOT
95910: IFFALSE 95914
// exit ;
95912: GO 96224
// until UnitFilter ( ai_vehicles_attack [ 4 ] , [ f_ok ] ) = 0 ;
95914: LD_EXP 68
95918: PUSH
95919: LD_INT 4
95921: ARRAY
95922: PPUSH
95923: LD_INT 50
95925: PUSH
95926: EMPTY
95927: LIST
95928: PPUSH
95929: CALL_OW 72
95933: PUSH
95934: LD_INT 0
95936: EQUAL
95937: IFFALSE 95894
// i = attacked_times [ 4 ] + 0 ;
95939: LD_ADDR_VAR 0 1
95943: PUSH
95944: LD_EXP 132
95948: PUSH
95949: LD_INT 4
95951: ARRAY
95952: PUSH
95953: LD_INT 0
95955: PLUS
95956: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
95957: LD_INT 35
95959: PPUSH
95960: CALL_OW 67
// if not 2 in ai_bases then
95964: LD_INT 2
95966: PUSH
95967: LD_EXP 39
95971: IN
95972: NOT
95973: IFFALSE 95977
// exit ;
95975: GO 96224
// until attacked_times [ 4 ] + 0 > i and ContactTime ( [ americans , alliance ] ) <= 0 0$2 and alliance_deal_status <> 2 ;
95977: LD_EXP 132
95981: PUSH
95982: LD_INT 4
95984: ARRAY
95985: PUSH
95986: LD_INT 0
95988: PLUS
95989: PUSH
95990: LD_VAR 0 1
95994: GREATER
95995: PUSH
95996: LD_EXP 7
96000: PUSH
96001: LD_EXP 5
96005: PUSH
96006: EMPTY
96007: LIST
96008: LIST
96009: PPUSH
96010: CALL_OW 462
96014: PUSH
96015: LD_INT 70
96017: LESSEQUAL
96018: AND
96019: PUSH
96020: LD_EXP 131
96024: PUSH
96025: LD_INT 2
96027: NONEQUAL
96028: AND
96029: IFFALSE 95957
// am_going_to_destroy_alli = true ;
96031: LD_ADDR_EXP 125
96035: PUSH
96036: LD_INT 1
96038: ST_TO_ADDR
// for i in ai_all_buildings [ 2 ] do
96039: LD_ADDR_VAR 0 1
96043: PUSH
96044: LD_EXP 76
96048: PUSH
96049: LD_INT 2
96051: ARRAY
96052: PUSH
96053: FOR_IN
96054: IFFALSE 96112
// if GetBType ( i ) in [ b_armoury , b_barracks , b_bunker , b_turret ] and GetY ( i ) >= 123 then
96056: LD_VAR 0 1
96060: PPUSH
96061: CALL_OW 266
96065: PUSH
96066: LD_INT 4
96068: PUSH
96069: LD_INT 5
96071: PUSH
96072: LD_INT 32
96074: PUSH
96075: LD_INT 33
96077: PUSH
96078: EMPTY
96079: LIST
96080: LIST
96081: LIST
96082: LIST
96083: IN
96084: PUSH
96085: LD_VAR 0 1
96089: PPUSH
96090: CALL_OW 251
96094: PUSH
96095: LD_INT 123
96097: GREATEREQUAL
96098: AND
96099: IFFALSE 96110
// KillUnit ( i ) ;
96101: LD_VAR 0 1
96105: PPUSH
96106: CALL_OW 66
96110: GO 96053
96112: POP
96113: POP
// for i in ai_buildings_locations [ 2 ] do
96114: LD_ADDR_VAR 0 1
96118: PUSH
96119: LD_EXP 61
96123: PUSH
96124: LD_INT 2
96126: ARRAY
96127: PUSH
96128: FOR_IN
96129: IFFALSE 96222
// if i [ 4 ] in [ b_armoury , b_barracks , b_bunker , b_turret ] and i [ 2 ] >= 123 then
96131: LD_VAR 0 1
96135: PUSH
96136: LD_INT 4
96138: ARRAY
96139: PUSH
96140: LD_INT 4
96142: PUSH
96143: LD_INT 5
96145: PUSH
96146: LD_INT 32
96148: PUSH
96149: LD_INT 33
96151: PUSH
96152: EMPTY
96153: LIST
96154: LIST
96155: LIST
96156: LIST
96157: IN
96158: PUSH
96159: LD_VAR 0 1
96163: PUSH
96164: LD_INT 2
96166: ARRAY
96167: PUSH
96168: LD_INT 123
96170: GREATEREQUAL
96171: AND
96172: IFFALSE 96220
// begin temp_list = ai_buildings_locations [ 2 ] diff [ i ] ;
96174: LD_ADDR_VAR 0 2
96178: PUSH
96179: LD_EXP 61
96183: PUSH
96184: LD_INT 2
96186: ARRAY
96187: PUSH
96188: LD_VAR 0 1
96192: PUSH
96193: EMPTY
96194: LIST
96195: DIFF
96196: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , 2 , temp_list ) ;
96197: LD_ADDR_EXP 61
96201: PUSH
96202: LD_EXP 61
96206: PPUSH
96207: LD_INT 2
96209: PPUSH
96210: LD_VAR 0 2
96214: PPUSH
96215: CALL_OW 1
96219: ST_TO_ADDR
// end ;
96220: GO 96128
96222: POP
96223: POP
// end ;
96224: PPOPN 2
96226: END
// every 0 0$1 + 0 0$0.7 do var i ;
96227: GO 96229
96229: DISABLE
96230: LD_INT 0
96232: PPUSH
// begin DoNotAttack ( americans , Roth ) ;
96233: LD_EXP 7
96237: PPUSH
96238: LD_EXP 26
96242: PPUSH
96243: CALL_OW 471
// DoNotAttack ( americans , Gossudarov ) ;
96247: LD_EXP 7
96251: PPUSH
96252: LD_EXP 27
96256: PPUSH
96257: CALL_OW 471
// DoNotAttack ( americans , Joan ) ;
96261: LD_EXP 7
96265: PPUSH
96266: LD_EXP 28
96270: PPUSH
96271: CALL_OW 471
// repeat wait ( 0 0$1 ) ;
96275: LD_INT 35
96277: PPUSH
96278: CALL_OW 67
// for i in ( [ Roth , Gossudarov , Joan ] diff 0 ) do
96282: LD_ADDR_VAR 0 1
96286: PUSH
96287: LD_EXP 26
96291: PUSH
96292: LD_EXP 27
96296: PUSH
96297: LD_EXP 28
96301: PUSH
96302: EMPTY
96303: LIST
96304: LIST
96305: LIST
96306: PUSH
96307: LD_INT 0
96309: DIFF
96310: PUSH
96311: FOR_IN
96312: IFFALSE 96345
// if SideShoot ( i ) <> you then
96314: LD_VAR 0 1
96318: PPUSH
96319: CALL_OW 503
96323: PUSH
96324: LD_EXP 2
96328: NONEQUAL
96329: IFFALSE 96343
// SetLives ( i , 1000 ) ;
96331: LD_VAR 0 1
96335: PPUSH
96336: LD_INT 1000
96338: PPUSH
96339: CALL_OW 234
96343: GO 96311
96345: POP
96346: POP
// until am_going_to_destroy_alli or alliance_deal_status = 2 or ( ai_sib_bomb_used_time_matrix [ 2 ] diff - 1 ) > 0 or american_deal_status > 0 ;
96347: LD_EXP 125
96351: PUSH
96352: LD_EXP 131
96356: PUSH
96357: LD_INT 2
96359: EQUAL
96360: OR
96361: PUSH
96362: LD_EXP 115
96366: PUSH
96367: LD_INT 2
96369: ARRAY
96370: PUSH
96371: LD_INT 1
96373: NEG
96374: DIFF
96375: PUSH
96376: LD_INT 0
96378: GREATER
96379: OR
96380: PUSH
96381: LD_EXP 128
96385: PUSH
96386: LD_INT 0
96388: GREATER
96389: OR
96390: IFFALSE 96275
// NormalAttack ( americans , Roth ) ;
96392: LD_EXP 7
96396: PPUSH
96397: LD_EXP 26
96401: PPUSH
96402: CALL_OW 472
// NormalAttack ( americans , Gossudarov ) ;
96406: LD_EXP 7
96410: PPUSH
96411: LD_EXP 27
96415: PPUSH
96416: CALL_OW 472
// NormalAttack ( americans , Joan ) ;
96420: LD_EXP 7
96424: PPUSH
96425: LD_EXP 28
96429: PPUSH
96430: CALL_OW 472
// end ; end_of_file
96434: PPOPN 1
96436: END
// every 0 0$1.3 do var count ;
96437: GO 96439
96439: DISABLE
96440: LD_INT 0
96442: PPUSH
// begin count = 0 ;
96443: LD_ADDR_VAR 0 1
96447: PUSH
96448: LD_INT 0
96450: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
96451: LD_INT 35
96453: PPUSH
96454: CALL_OW 67
// if alliance_deal_status = 1 then
96458: LD_EXP 131
96462: PUSH
96463: LD_INT 1
96465: EQUAL
96466: IFFALSE 96470
// continue ;
96468: GO 96451
// if ContactTime ( [ you , alliance ] ) <= 0 0$2 or ai_contact_time [ you ] [ alliance ] <= 0 0$2 then
96470: LD_EXP 2
96474: PUSH
96475: LD_EXP 5
96479: PUSH
96480: EMPTY
96481: LIST
96482: LIST
96483: PPUSH
96484: CALL_OW 462
96488: PUSH
96489: LD_INT 70
96491: LESSEQUAL
96492: PUSH
96493: LD_EXP 112
96497: PUSH
96498: LD_EXP 2
96502: ARRAY
96503: PUSH
96504: LD_EXP 5
96508: ARRAY
96509: PUSH
96510: LD_INT 70
96512: LESSEQUAL
96513: OR
96514: IFFALSE 96532
// count = count + 1 else
96516: LD_ADDR_VAR 0 1
96520: PUSH
96521: LD_VAR 0 1
96525: PUSH
96526: LD_INT 1
96528: PLUS
96529: ST_TO_ADDR
96530: GO 96556
// if count > 0 then
96532: LD_VAR 0 1
96536: PUSH
96537: LD_INT 0
96539: GREATER
96540: IFFALSE 96556
// count = count - 1 ;
96542: LD_ADDR_VAR 0 1
96546: PUSH
96547: LD_VAR 0 1
96551: PUSH
96552: LD_INT 1
96554: MINUS
96555: ST_TO_ADDR
// if ( count >= 13 or ( count >= 8 and alliance_deal_status = 2 ) ) or SideShoot ( Roth ) = you or SideShoot ( Joan ) = you or SideShoot ( Gossudarov ) = you then
96556: LD_VAR 0 1
96560: PUSH
96561: LD_INT 13
96563: GREATEREQUAL
96564: PUSH
96565: LD_VAR 0 1
96569: PUSH
96570: LD_INT 8
96572: GREATEREQUAL
96573: PUSH
96574: LD_EXP 131
96578: PUSH
96579: LD_INT 2
96581: EQUAL
96582: AND
96583: OR
96584: PUSH
96585: LD_EXP 26
96589: PPUSH
96590: CALL_OW 503
96594: PUSH
96595: LD_EXP 2
96599: EQUAL
96600: OR
96601: PUSH
96602: LD_EXP 28
96606: PPUSH
96607: CALL_OW 503
96611: PUSH
96612: LD_EXP 2
96616: EQUAL
96617: OR
96618: PUSH
96619: LD_EXP 27
96623: PPUSH
96624: CALL_OW 503
96628: PUSH
96629: LD_EXP 2
96633: EQUAL
96634: OR
96635: IFFALSE 96645
// player_attacked_alliance = true ;
96637: LD_ADDR_EXP 130
96641: PUSH
96642: LD_INT 1
96644: ST_TO_ADDR
// until player_attacked_alliance ;
96645: LD_EXP 130
96649: IFFALSE 96451
// if alliance_deal_status = 2 then
96651: LD_EXP 131
96655: PUSH
96656: LD_INT 2
96658: EQUAL
96659: IFFALSE 96685
// begin DialogueOn ;
96661: CALL_OW 6
// Say ( Roth , D12-Ro-1a ) ;
96665: LD_EXP 26
96669: PPUSH
96670: LD_STRING D12-Ro-1a
96672: PPUSH
96673: CALL_OW 88
// DialogueOff ;
96677: CALL_OW 7
// AllianceDealBreakdown ;
96681: CALL 96688 0 0
// end ; end ;
96685: PPOPN 1
96687: END
// export function AllianceDealBreakdown ; begin
96688: LD_INT 0
96690: PPUSH
// alliance_deal_status = 4 ;
96691: LD_ADDR_EXP 131
96695: PUSH
96696: LD_INT 4
96698: ST_TO_ADDR
// SetAttitude ( you , alliance , att_enemy , true ) ;
96699: LD_EXP 2
96703: PPUSH
96704: LD_EXP 5
96708: PPUSH
96709: LD_INT 2
96711: PPUSH
96712: LD_INT 1
96714: PPUSH
96715: CALL_OW 80
// ChangeSideFog ( alliance , alliance ) ;
96719: LD_EXP 5
96723: PPUSH
96724: LD_EXP 5
96728: PPUSH
96729: CALL_OW 343
// AllianceObjectivesReset ;
96733: CALL 96742 0 0
// end ;
96737: LD_VAR 0 1
96741: RET
// export function AllianceObjectivesReset ; begin
96742: LD_INT 0
96744: PPUSH
// if alli_sib_needed > 0 then
96745: LD_EXP 134
96749: PUSH
96750: LD_INT 0
96752: GREATER
96753: IFFALSE 96785
// begin alli_sib_needed = 0 ;
96755: LD_ADDR_EXP 134
96759: PUSH
96760: LD_INT 0
96762: ST_TO_ADDR
// alli_sib_usage = 0 ;
96763: LD_ADDR_EXP 135
96767: PUSH
96768: LD_INT 0
96770: ST_TO_ADDR
// display_strings = [ ] ;
96771: LD_ADDR_OWVAR 47
96775: PUSH
96776: EMPTY
96777: ST_TO_ADDR
// ChangeMissionObjectives ( MDelGatherSib ) ;
96778: LD_STRING MDelGatherSib
96780: PPUSH
96781: CALL_OW 337
// end ; if alli_destroy_am_objective_status in [ 1 , 2 ] then
96785: LD_EXP 138
96789: PUSH
96790: LD_INT 1
96792: PUSH
96793: LD_INT 2
96795: PUSH
96796: EMPTY
96797: LIST
96798: LIST
96799: IN
96800: IFFALSE 96809
// ChangeMissionObjectives ( MDelDestroyAmericans ) ;
96802: LD_STRING MDelDestroyAmericans
96804: PPUSH
96805: CALL_OW 337
// if alli_destroy_ru_objective_status in [ 1 , 2 ] then
96809: LD_EXP 139
96813: PUSH
96814: LD_INT 1
96816: PUSH
96817: LD_INT 2
96819: PUSH
96820: EMPTY
96821: LIST
96822: LIST
96823: IN
96824: IFFALSE 96833
// ChangeMissionObjectives ( MDelDestroyRussians ) ;
96826: LD_STRING MDelDestroyRussians
96828: PPUSH
96829: CALL_OW 337
// end ;
96833: LD_VAR 0 1
96837: RET
// every 0 0$1 + 0 0$0.2 trigger alliance_call_start do var i , temp_list , un ;
96838: LD_EXP 155
96842: IFFALSE 97831
96844: GO 96846
96846: DISABLE
96847: LD_INT 0
96849: PPUSH
96850: PPUSH
96851: PPUSH
// begin if american_deal_status > 0 or player_attacked_alliance then
96852: LD_EXP 128
96856: PUSH
96857: LD_INT 0
96859: GREATER
96860: PUSH
96861: LD_EXP 130
96865: OR
96866: IFFALSE 96870
// exit ;
96868: GO 97831
// DialogueOn ;
96870: CALL_OW 6
// temp_list = UnitFilter ( [ Sonya , MarkB , Khattam ] , [ f_ok ] ) ;
96874: LD_ADDR_VAR 0 2
96878: PUSH
96879: LD_EXP 12
96883: PUSH
96884: LD_EXP 17
96888: PUSH
96889: LD_EXP 21
96893: PUSH
96894: EMPTY
96895: LIST
96896: LIST
96897: LIST
96898: PPUSH
96899: LD_INT 50
96901: PUSH
96902: EMPTY
96903: LIST
96904: PPUSH
96905: CALL_OW 72
96909: ST_TO_ADDR
// if temp_list > 0 then
96910: LD_VAR 0 2
96914: PUSH
96915: LD_INT 0
96917: GREATER
96918: IFFALSE 97029
// begin i = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
96920: LD_ADDR_VAR 0 1
96924: PUSH
96925: LD_VAR 0 2
96929: PUSH
96930: LD_INT 1
96932: PPUSH
96933: LD_VAR 0 2
96937: PUSH
96938: LD_INT 0
96940: PLUS
96941: PPUSH
96942: CALL_OW 12
96946: ARRAY
96947: ST_TO_ADDR
// case i of Sonya :
96948: LD_VAR 0 1
96952: PUSH
96953: LD_EXP 12
96957: DOUBLE
96958: EQUAL
96959: IFTRUE 96963
96961: GO 96978
96963: POP
// Say ( i , D7-So-1 ) ; MarkB :
96964: LD_VAR 0 1
96968: PPUSH
96969: LD_STRING D7-So-1
96971: PPUSH
96972: CALL_OW 88
96976: GO 97029
96978: LD_EXP 17
96982: DOUBLE
96983: EQUAL
96984: IFTRUE 96988
96986: GO 97003
96988: POP
// Say ( i , D7-Mark-1 ) ; Khattam :
96989: LD_VAR 0 1
96993: PPUSH
96994: LD_STRING D7-Mark-1
96996: PPUSH
96997: CALL_OW 88
97001: GO 97029
97003: LD_EXP 21
97007: DOUBLE
97008: EQUAL
97009: IFTRUE 97013
97011: GO 97028
97013: POP
// Say ( i , D7-Kh-1 ) ; end ;
97014: LD_VAR 0 1
97018: PPUSH
97019: LD_STRING D7-Kh-1
97021: PPUSH
97022: CALL_OW 88
97026: GO 97029
97028: POP
// end ; SayRadio ( Joan , D7-Jo-1 ) ;
97029: LD_EXP 28
97033: PPUSH
97034: LD_STRING D7-Jo-1
97036: PPUSH
97037: CALL_OW 94
// ForceSay ( Heike , D7-H-1 ) ;
97041: LD_EXP 10
97045: PPUSH
97046: LD_STRING D7-H-1
97048: PPUSH
97049: CALL_OW 91
// SayRadio ( Joan , D7-Jo-2 ) ;
97053: LD_EXP 28
97057: PPUSH
97058: LD_STRING D7-Jo-2
97060: PPUSH
97061: CALL_OW 94
// if IsOk ( Ralph ) then
97065: LD_EXP 14
97069: PPUSH
97070: CALL_OW 302
97074: IFFALSE 97123
// begin Say ( Ralph , D7-Ra-1 ) ;
97076: LD_EXP 14
97080: PPUSH
97081: LD_STRING D7-Ra-1
97083: PPUSH
97084: CALL_OW 88
// if IsOk ( Sonya ) then
97088: LD_EXP 12
97092: PPUSH
97093: CALL_OW 302
97097: IFFALSE 97123
// begin Say ( Sonya , D7-So-2 ) ;
97099: LD_EXP 12
97103: PPUSH
97104: LD_STRING D7-So-2
97106: PPUSH
97107: CALL_OW 88
// Say ( Ralph , D7-Ra-2 ) ;
97111: LD_EXP 14
97115: PPUSH
97116: LD_STRING D7-Ra-2
97118: PPUSH
97119: CALL_OW 88
// end ; end ; SayRadio ( Joan , D7-Jo-3 ) ;
97123: LD_EXP 28
97127: PPUSH
97128: LD_STRING D7-Jo-3
97130: PPUSH
97131: CALL_OW 94
// SayRadio ( Joan , D7-Jo-4 ) ;
97135: LD_EXP 28
97139: PPUSH
97140: LD_STRING D7-Jo-4
97142: PPUSH
97143: CALL_OW 94
// DialogueOff ;
97147: CALL_OW 7
// alliance_deal_status = 1 ;
97151: LD_ADDR_EXP 131
97155: PUSH
97156: LD_INT 1
97158: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
97159: LD_INT 35
97161: PPUSH
97162: CALL_OW 67
// until ContactTime ( [ you , alliance ] ) <= 0 0$2 or not 2 in ai_bases or am_going_to_destroy_alli or player_has_built_sib_bomb or not 4 in ai_bases ;
97166: LD_EXP 2
97170: PUSH
97171: LD_EXP 5
97175: PUSH
97176: EMPTY
97177: LIST
97178: LIST
97179: PPUSH
97180: CALL_OW 462
97184: PUSH
97185: LD_INT 70
97187: LESSEQUAL
97188: PUSH
97189: LD_INT 2
97191: PUSH
97192: LD_EXP 39
97196: IN
97197: NOT
97198: OR
97199: PUSH
97200: LD_EXP 125
97204: OR
97205: PUSH
97206: LD_EXP 151
97210: OR
97211: PUSH
97212: LD_INT 4
97214: PUSH
97215: LD_EXP 39
97219: IN
97220: NOT
97221: OR
97222: IFFALSE 97159
// if not 2 in ai_bases or am_going_to_destroy_alli or player_has_built_sib_bomb or not 4 in ai_bases then
97224: LD_INT 2
97226: PUSH
97227: LD_EXP 39
97231: IN
97232: NOT
97233: PUSH
97234: LD_EXP 125
97238: OR
97239: PUSH
97240: LD_EXP 151
97244: OR
97245: PUSH
97246: LD_INT 4
97248: PUSH
97249: LD_EXP 39
97253: IN
97254: NOT
97255: OR
97256: IFFALSE 97260
// exit ;
97258: GO 97831
// DialogueOn ;
97260: CALL_OW 6
// for i in FilterAllUnits ( [ f_side , you ] ) do
97264: LD_ADDR_VAR 0 1
97268: PUSH
97269: LD_INT 22
97271: PUSH
97272: LD_EXP 2
97276: PUSH
97277: EMPTY
97278: LIST
97279: LIST
97280: PPUSH
97281: CALL_OW 69
97285: PUSH
97286: FOR_IN
97287: IFFALSE 97344
// begin un = UnitShoot ( i ) ;
97289: LD_ADDR_VAR 0 3
97293: PUSH
97294: LD_VAR 0 1
97298: PPUSH
97299: CALL_OW 504
97303: ST_TO_ADDR
// if un > 0 then
97304: LD_VAR 0 3
97308: PUSH
97309: LD_INT 0
97311: GREATER
97312: IFFALSE 97342
// if GetSide ( un ) = alliance then
97314: LD_VAR 0 3
97318: PPUSH
97319: CALL_OW 255
97323: PUSH
97324: LD_EXP 5
97328: EQUAL
97329: IFFALSE 97342
// begin CenterOnUnits ( i ) ;
97331: LD_VAR 0 1
97335: PPUSH
97336: CALL_OW 85
// break ;
97340: GO 97344
// end ; end ;
97342: GO 97286
97344: POP
97345: POP
// Say ( Roth , D8-Ro-1 ) ;
97346: LD_EXP 26
97350: PPUSH
97351: LD_STRING D8-Ro-1
97353: PPUSH
97354: CALL_OW 88
// Say ( Joan , D8-Jo-1 ) ;
97358: LD_EXP 28
97362: PPUSH
97363: LD_STRING D8-Jo-1
97365: PPUSH
97366: CALL_OW 88
// Say ( Roth , D8-Ro-2 ) ;
97370: LD_EXP 26
97374: PPUSH
97375: LD_STRING D8-Ro-2
97377: PPUSH
97378: CALL_OW 88
// Say ( Joan , D8-Jo-2 ) ;
97382: LD_EXP 28
97386: PPUSH
97387: LD_STRING D8-Jo-2
97389: PPUSH
97390: CALL_OW 88
// Say ( Roth , D8-Ro-3 ) ;
97394: LD_EXP 26
97398: PPUSH
97399: LD_STRING D8-Ro-3
97401: PPUSH
97402: CALL_OW 88
// Say ( Joan , D8-Jo-3 ) ;
97406: LD_EXP 28
97410: PPUSH
97411: LD_STRING D8-Jo-3
97413: PPUSH
97414: CALL_OW 88
// Say ( Roth , D8-Ro-4 ) ;
97418: LD_EXP 26
97422: PPUSH
97423: LD_STRING D8-Ro-4
97425: PPUSH
97426: CALL_OW 88
// Say ( Joan , D8-Jo-4 ) ;
97430: LD_EXP 28
97434: PPUSH
97435: LD_STRING D8-Jo-4
97437: PPUSH
97438: CALL_OW 88
// if IsOk ( Gossudarov ) then
97442: LD_EXP 27
97446: PPUSH
97447: CALL_OW 302
97451: IFFALSE 97491
// begin Say ( Gossudarov , D8-Go-a-1 ) ;
97453: LD_EXP 27
97457: PPUSH
97458: LD_STRING D8-Go-a-1
97460: PPUSH
97461: CALL_OW 88
// Say ( Roth , D8-Ro-a-5 ) ;
97465: LD_EXP 26
97469: PPUSH
97470: LD_STRING D8-Ro-a-5
97472: PPUSH
97473: CALL_OW 88
// Say ( Gossudarov , D8-Go-a-2 ) ;
97477: LD_EXP 27
97481: PPUSH
97482: LD_STRING D8-Go-a-2
97484: PPUSH
97485: CALL_OW 88
// end else
97489: GO 97650
// begin temp_list = FilterAllUnits ( [ [ f_side , alliance ] , [ f_type , unit_human ] ] ) diff ( [ Joan , Roth , Gossudarov ] ^ GetApes ( alliance ) ) ;
97491: LD_ADDR_VAR 0 2
97495: PUSH
97496: LD_INT 22
97498: PUSH
97499: LD_EXP 5
97503: PUSH
97504: EMPTY
97505: LIST
97506: LIST
97507: PUSH
97508: LD_INT 21
97510: PUSH
97511: LD_INT 1
97513: PUSH
97514: EMPTY
97515: LIST
97516: LIST
97517: PUSH
97518: EMPTY
97519: LIST
97520: LIST
97521: PPUSH
97522: CALL_OW 69
97526: PUSH
97527: LD_EXP 28
97531: PUSH
97532: LD_EXP 26
97536: PUSH
97537: LD_EXP 27
97541: PUSH
97542: EMPTY
97543: LIST
97544: LIST
97545: LIST
97546: PUSH
97547: LD_EXP 5
97551: PPUSH
97552: CALL 85747 0 1
97556: ADD
97557: DIFF
97558: ST_TO_ADDR
// if temp_list > 0 then
97559: LD_VAR 0 2
97563: PUSH
97564: LD_INT 0
97566: GREATER
97567: IFFALSE 97638
// begin un = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
97569: LD_ADDR_VAR 0 3
97573: PUSH
97574: LD_VAR 0 2
97578: PUSH
97579: LD_INT 1
97581: PPUSH
97582: LD_VAR 0 2
97586: PUSH
97587: LD_INT 0
97589: PLUS
97590: PPUSH
97591: CALL_OW 12
97595: ARRAY
97596: ST_TO_ADDR
// if GetSex ( un ) = sex_male then
97597: LD_VAR 0 3
97601: PPUSH
97602: CALL_OW 258
97606: PUSH
97607: LD_INT 1
97609: EQUAL
97610: IFFALSE 97626
// Say ( un , D8-SomeM-b-1 ) else
97612: LD_VAR 0 3
97616: PPUSH
97617: LD_STRING D8-SomeM-b-1
97619: PPUSH
97620: CALL_OW 88
97624: GO 97638
// Say ( un , D8-SomeF-b-1 ) ;
97626: LD_VAR 0 3
97630: PPUSH
97631: LD_STRING D8-SomeF-b-1
97633: PPUSH
97634: CALL_OW 88
// end ; Say ( Roth , D8-Ro-b-5 ) ;
97638: LD_EXP 26
97642: PPUSH
97643: LD_STRING D8-Ro-b-5
97645: PPUSH
97646: CALL_OW 88
// end ; dwait ( 0 0$1.8 ) ;
97650: LD_INT 63
97652: PPUSH
97653: CALL_OW 68
// Say ( Roth , D8-Ro-6 ) ;
97657: LD_EXP 26
97661: PPUSH
97662: LD_STRING D8-Ro-6
97664: PPUSH
97665: CALL_OW 88
// ForceSay ( Heike , D8-H-1 ) ;
97669: LD_EXP 10
97673: PPUSH
97674: LD_STRING D8-H-1
97676: PPUSH
97677: CALL_OW 91
// Say ( Joan , D8-Jo-5 ) ;
97681: LD_EXP 28
97685: PPUSH
97686: LD_STRING D8-Jo-5
97688: PPUSH
97689: CALL_OW 88
// dwait ( 0 0$0.2 ) ;
97693: LD_INT 7
97695: PPUSH
97696: CALL_OW 68
// i = Query ( QAllianceAlliance ) ;
97700: LD_ADDR_VAR 0 1
97704: PUSH
97705: LD_STRING QAllianceAlliance
97707: PPUSH
97708: CALL_OW 97
97712: ST_TO_ADDR
// case i of 1 :
97713: LD_VAR 0 1
97717: PUSH
97718: LD_INT 1
97720: DOUBLE
97721: EQUAL
97722: IFTRUE 97726
97724: GO 97795
97726: POP
// begin Say ( Heike , D8-1-H-1 ) ;
97727: LD_EXP 10
97731: PPUSH
97732: LD_STRING D8-1-H-1
97734: PPUSH
97735: CALL_OW 88
// Say ( Joan , D8-1-Jo-1 ) ;
97739: LD_EXP 28
97743: PPUSH
97744: LD_STRING D8-1-Jo-1
97746: PPUSH
97747: CALL_OW 88
// alliance_deal_status = 2 ;
97751: LD_ADDR_EXP 131
97755: PUSH
97756: LD_INT 2
97758: ST_TO_ADDR
// SetAttitude ( you , alliance , att_friend , true ) ;
97759: LD_EXP 2
97763: PPUSH
97764: LD_EXP 5
97768: PPUSH
97769: LD_INT 1
97771: PPUSH
97772: LD_INT 1
97774: PPUSH
97775: CALL_OW 80
// ChangeSideFog ( alliance , you ) ;
97779: LD_EXP 5
97783: PPUSH
97784: LD_EXP 2
97788: PPUSH
97789: CALL_OW 343
// end ; 2 :
97793: GO 97827
97795: LD_INT 2
97797: DOUBLE
97798: EQUAL
97799: IFTRUE 97803
97801: GO 97826
97803: POP
// begin Say ( Heike , D8-2-H-1 ) ;
97804: LD_EXP 10
97808: PPUSH
97809: LD_STRING D8-2-H-1
97811: PPUSH
97812: CALL_OW 88
// alliance_deal_status = 3 ;
97816: LD_ADDR_EXP 131
97820: PUSH
97821: LD_INT 3
97823: ST_TO_ADDR
// end ; end ;
97824: GO 97827
97826: POP
// DialogueOff ;
97827: CALL_OW 7
// end ;
97831: PPOPN 3
97833: END
// every 0 0$1.8 trigger alliance_deal_status = 2 do var temp_list , i ;
97834: LD_EXP 131
97838: PUSH
97839: LD_INT 2
97841: EQUAL
97842: IFFALSE 97977
97844: GO 97846
97846: DISABLE
97847: LD_INT 0
97849: PPUSH
97850: PPUSH
// begin repeat wait ( 0 0$3 ) ;
97851: LD_INT 105
97853: PPUSH
97854: CALL_OW 67
// if alliance_deal_status <> 2 then
97858: LD_EXP 131
97862: PUSH
97863: LD_INT 2
97865: NONEQUAL
97866: IFFALSE 97870
// exit ;
97868: GO 97977
// temp_list = FilterAllUnits ( [ [ f_inarea , player_alli_dont_build_area ] , [ f_side , you ] , [ f_type , unit_building ] ] ) ;
97870: LD_ADDR_VAR 0 1
97874: PUSH
97875: LD_INT 95
97877: PUSH
97878: LD_INT 19
97880: PUSH
97881: EMPTY
97882: LIST
97883: LIST
97884: PUSH
97885: LD_INT 22
97887: PUSH
97888: LD_EXP 2
97892: PUSH
97893: EMPTY
97894: LIST
97895: LIST
97896: PUSH
97897: LD_INT 21
97899: PUSH
97900: LD_INT 3
97902: PUSH
97903: EMPTY
97904: LIST
97905: LIST
97906: PUSH
97907: EMPTY
97908: LIST
97909: LIST
97910: LIST
97911: PPUSH
97912: CALL_OW 69
97916: ST_TO_ADDR
// if temp_list > 0 then
97917: LD_VAR 0 1
97921: PUSH
97922: LD_INT 0
97924: GREATER
97925: IFFALSE 97973
// begin DialogueOn ;
97927: CALL_OW 6
// Say ( Joan , D13-Jo-1 ) ;
97931: LD_EXP 28
97935: PPUSH
97936: LD_STRING D13-Jo-1
97938: PPUSH
97939: CALL_OW 88
// DialogueOff ;
97943: CALL_OW 7
// for i in temp_list do
97947: LD_ADDR_VAR 0 2
97951: PUSH
97952: LD_VAR 0 1
97956: PUSH
97957: FOR_IN
97958: IFFALSE 97971
// DestroyUnit ( i ) ;
97960: LD_VAR 0 2
97964: PPUSH
97965: CALL_OW 65
97969: GO 97957
97971: POP
97972: POP
// end ; until false ;
97973: LD_INT 0
97975: IFFALSE 97851
// end ;
97977: PPOPN 2
97979: END
// on VehicleConstructionStarted ( factory , chassis , engine , control , weapon ) do begin if FindBase ( factory ) = 2 and alli_sib_needed > 0 and engine = engine_siberite then
97980: LD_VAR 0 1
97984: PPUSH
97985: CALL 25073 0 1
97989: PUSH
97990: LD_INT 2
97992: EQUAL
97993: PUSH
97994: LD_EXP 134
97998: PUSH
97999: LD_INT 0
98001: GREATER
98002: AND
98003: PUSH
98004: LD_VAR 0 3
98008: PUSH
98009: LD_INT 3
98011: EQUAL
98012: AND
98013: IFFALSE 98029
// alli_sib_usage = alli_sib_usage + 10 ;
98015: LD_ADDR_EXP 135
98019: PUSH
98020: LD_EXP 135
98024: PUSH
98025: LD_INT 10
98027: PLUS
98028: ST_TO_ADDR
// if GetSide ( factory ) = you and weapon in [ us_siberium_rocket , ru_siberium_rocket ] then
98029: LD_VAR 0 1
98033: PPUSH
98034: CALL_OW 255
98038: PUSH
98039: LD_EXP 2
98043: EQUAL
98044: PUSH
98045: LD_VAR 0 5
98049: PUSH
98050: LD_INT 8
98052: PUSH
98053: LD_INT 48
98055: PUSH
98056: EMPTY
98057: LIST
98058: LIST
98059: IN
98060: AND
98061: IFFALSE 98073
// player_sib_bomb_prod_fact = factory ;
98063: LD_ADDR_EXP 136
98067: PUSH
98068: LD_VAR 0 1
98072: ST_TO_ADDR
// end ;
98073: PPOPN 5
98075: END
// every 0 0$1 + 0 0$0.6 do var progress , temp ;
98076: GO 98078
98078: DISABLE
98079: LD_INT 0
98081: PPUSH
98082: PPUSH
// begin progress = 0 ;
98083: LD_ADDR_VAR 0 1
98087: PUSH
98088: LD_INT 0
98090: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
98091: LD_INT 18
98093: PPUSH
98094: CALL_OW 67
// if player_sib_bomb_prod_fact = 0 then
98098: LD_EXP 136
98102: PUSH
98103: LD_INT 0
98105: EQUAL
98106: IFFALSE 98118
// begin progress = 0 ;
98108: LD_ADDR_VAR 0 1
98112: PUSH
98113: LD_INT 0
98115: ST_TO_ADDR
// continue ;
98116: GO 98091
// end ; temp = GetWorkingProgress ( player_sib_bomb_prod_fact ) ;
98118: LD_ADDR_VAR 0 2
98122: PUSH
98123: LD_EXP 136
98127: PPUSH
98128: CALL_OW 328
98132: ST_TO_ADDR
// if temp < progress or BuildingStatus ( player_sib_bomb_prod_fact ) = bs_idle then
98133: LD_VAR 0 2
98137: PUSH
98138: LD_VAR 0 1
98142: LESS
98143: PUSH
98144: LD_EXP 136
98148: PPUSH
98149: CALL_OW 461
98153: PUSH
98154: LD_INT 2
98156: EQUAL
98157: OR
98158: IFFALSE 98178
// begin player_sib_bomb_prod_fact = 0 ;
98160: LD_ADDR_EXP 136
98164: PUSH
98165: LD_INT 0
98167: ST_TO_ADDR
// progress = 0 ;
98168: LD_ADDR_VAR 0 1
98172: PUSH
98173: LD_INT 0
98175: ST_TO_ADDR
// continue ;
98176: GO 98091
// end ; progress = temp ;
98178: LD_ADDR_VAR 0 1
98182: PUSH
98183: LD_VAR 0 2
98187: ST_TO_ADDR
// until false ;
98188: LD_INT 0
98190: IFFALSE 98091
// end ;
98192: PPOPN 2
98194: END
// export function ResearchStarted_AlliFunc ( tech , lab ) ; begin
98195: LD_INT 0
98197: PPUSH
// if GetSide ( lab ) = you and tech = tech_sibfiss then
98198: LD_VAR 0 2
98202: PPUSH
98203: CALL_OW 255
98207: PUSH
98208: LD_EXP 2
98212: EQUAL
98213: PUSH
98214: LD_VAR 0 1
98218: PUSH
98219: LD_INT 25
98221: EQUAL
98222: AND
98223: IFFALSE 98235
// player_sib_bomb_res_lab = lab ;
98225: LD_ADDR_EXP 137
98229: PUSH
98230: LD_VAR 0 2
98234: ST_TO_ADDR
// end ;
98235: LD_VAR 0 3
98239: RET
// export function ResearchCancel_AlliFunc ( tech , lab ) ; begin
98240: LD_INT 0
98242: PPUSH
// if GetSide ( lab ) = you and tech = tech_sibfiss then
98243: LD_VAR 0 2
98247: PPUSH
98248: CALL_OW 255
98252: PUSH
98253: LD_EXP 2
98257: EQUAL
98258: PUSH
98259: LD_VAR 0 1
98263: PUSH
98264: LD_INT 25
98266: EQUAL
98267: AND
98268: IFFALSE 98278
// player_sib_bomb_res_lab = 0 ;
98270: LD_ADDR_EXP 137
98274: PUSH
98275: LD_INT 0
98277: ST_TO_ADDR
// end ;
98278: LD_VAR 0 3
98282: RET
// export function ResearchComplete_AlliFunc ( tech , lab ) ; begin
98283: LD_INT 0
98285: PPUSH
// if GetSide ( lab ) = you and tech = tech_sibfiss then
98286: LD_VAR 0 2
98290: PPUSH
98291: CALL_OW 255
98295: PUSH
98296: LD_EXP 2
98300: EQUAL
98301: PUSH
98302: LD_VAR 0 1
98306: PUSH
98307: LD_INT 25
98309: EQUAL
98310: AND
98311: IFFALSE 98321
// player_sib_bomb_res_lab = 0 ;
98313: LD_ADDR_EXP 137
98317: PUSH
98318: LD_INT 0
98320: ST_TO_ADDR
// end ;
98321: LD_VAR 0 3
98325: RET
// every 0 0$1 + 0 0$0.1 trigger alliance_deal_status = 2 do var count ;
98326: LD_EXP 131
98330: PUSH
98331: LD_INT 2
98333: EQUAL
98334: IFFALSE 98450
98336: GO 98338
98338: DISABLE
98339: LD_INT 0
98341: PPUSH
// begin count = 0 ;
98342: LD_ADDR_VAR 0 1
98346: PUSH
98347: LD_INT 0
98349: ST_TO_ADDR
// wait ( 0 0$5 ) ;
98350: LD_INT 175
98352: PPUSH
98353: CALL_OW 67
// repeat wait ( 0 0$1 ) ;
98357: LD_INT 35
98359: PPUSH
98360: CALL_OW 67
// if alliance_deal_status <> 2 then
98364: LD_EXP 131
98368: PUSH
98369: LD_INT 2
98371: NONEQUAL
98372: IFFALSE 98376
// exit ;
98374: GO 98450
// if player_sib_bomb_prod_fact > 0 or player_sib_bomb_res_lab > 0 then
98376: LD_EXP 136
98380: PUSH
98381: LD_INT 0
98383: GREATER
98384: PUSH
98385: LD_EXP 137
98389: PUSH
98390: LD_INT 0
98392: GREATER
98393: OR
98394: IFFALSE 98410
// count = count + 1 ;
98396: LD_ADDR_VAR 0 1
98400: PUSH
98401: LD_VAR 0 1
98405: PUSH
98406: LD_INT 1
98408: PLUS
98409: ST_TO_ADDR
// until count = 5 or player_has_built_sib_bomb ;
98410: LD_VAR 0 1
98414: PUSH
98415: LD_INT 5
98417: EQUAL
98418: PUSH
98419: LD_EXP 151
98423: OR
98424: IFFALSE 98357
// DialogueOn ;
98426: CALL_OW 6
// ForceSay ( Roth , D12-Ro-1b ) ;
98430: LD_EXP 26
98434: PPUSH
98435: LD_STRING D12-Ro-1b
98437: PPUSH
98438: CALL_OW 91
// DialogueOff ;
98442: CALL_OW 7
// AllianceDealBreakdown ;
98446: CALL 96688 0 0
// end ;
98450: PPOPN 1
98452: END
// export function ArtifactLoaded_AlliFunc ( cargo_bay , artifact ) ; begin
98453: LD_INT 0
98455: PPUSH
// if alliance_deal_status = 2 and GetSide ( cargo_bay ) = you then
98456: LD_EXP 131
98460: PUSH
98461: LD_INT 2
98463: EQUAL
98464: PUSH
98465: LD_VAR 0 1
98469: PPUSH
98470: CALL_OW 255
98474: PUSH
98475: LD_EXP 2
98479: EQUAL
98480: AND
98481: IFFALSE 98487
// begin AllianceDealBreakdown ;
98483: CALL 96688 0 0
// end ; end ;
98487: LD_VAR 0 3
98491: RET
// export function OnCommand_Steal ( com ) ; var b , temp_list , t ; begin
98492: LD_INT 0
98494: PPUSH
98495: PPUSH
98496: PPUSH
98497: PPUSH
// if com = 60 and alliance_deal_status = 2 then
98498: LD_VAR 0 1
98502: PUSH
98503: LD_INT 60
98505: EQUAL
98506: PUSH
98507: LD_EXP 131
98511: PUSH
98512: LD_INT 2
98514: EQUAL
98515: AND
98516: IFFALSE 98677
// begin for b in FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_class , class_engineer ] , [ f_class , class_apeman_engineer ] ] ] ) do
98518: LD_ADDR_VAR 0 3
98522: PUSH
98523: LD_INT 22
98525: PUSH
98526: LD_EXP 2
98530: PUSH
98531: EMPTY
98532: LIST
98533: LIST
98534: PUSH
98535: LD_INT 2
98537: PUSH
98538: LD_INT 25
98540: PUSH
98541: LD_INT 2
98543: PUSH
98544: EMPTY
98545: LIST
98546: LIST
98547: PUSH
98548: LD_INT 25
98550: PUSH
98551: LD_INT 16
98553: PUSH
98554: EMPTY
98555: LIST
98556: LIST
98557: PUSH
98558: EMPTY
98559: LIST
98560: LIST
98561: LIST
98562: PUSH
98563: EMPTY
98564: LIST
98565: LIST
98566: PPUSH
98567: CALL_OW 69
98571: PUSH
98572: FOR_IN
98573: IFFALSE 98675
// if not b in going_to_steal_engineers then
98575: LD_VAR 0 3
98579: PUSH
98580: LD_EXP 142
98584: IN
98585: NOT
98586: IFFALSE 98673
// if HasTask ( b ) then
98588: LD_VAR 0 3
98592: PPUSH
98593: CALL_OW 314
98597: IFFALSE 98673
// begin for t in GetTaskList ( b ) do
98599: LD_ADDR_VAR 0 5
98603: PUSH
98604: LD_VAR 0 3
98608: PPUSH
98609: CALL_OW 437
98613: PUSH
98614: FOR_IN
98615: IFFALSE 98671
// begin if t [ 1 ] = < and t [ 4 ] = ai_depot [ 2 ] then
98617: LD_VAR 0 5
98621: PUSH
98622: LD_INT 1
98624: ARRAY
98625: PUSH
98626: LD_STRING <
98628: EQUAL
98629: PUSH
98630: LD_VAR 0 5
98634: PUSH
98635: LD_INT 4
98637: ARRAY
98638: PUSH
98639: LD_EXP 49
98643: PUSH
98644: LD_INT 2
98646: ARRAY
98647: EQUAL
98648: AND
98649: IFFALSE 98669
// begin going_to_steal_engineers = going_to_steal_engineers ^ b ;
98651: LD_ADDR_EXP 142
98655: PUSH
98656: LD_EXP 142
98660: PUSH
98661: LD_VAR 0 3
98665: ADD
98666: ST_TO_ADDR
// break ;
98667: GO 98671
// end ; end ;
98669: GO 98614
98671: POP
98672: POP
// end ;
98673: GO 98572
98675: POP
98676: POP
// end ; end ;
98677: LD_VAR 0 2
98681: RET
// every 0 0$1 + 0 0$0.1 trigger alliance_deal_status = 2 do var un , temp_list , t ;
98682: LD_EXP 131
98686: PUSH
98687: LD_INT 2
98689: EQUAL
98690: IFFALSE 98917
98692: GO 98694
98694: DISABLE
98695: LD_INT 0
98697: PPUSH
98698: PPUSH
98699: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
98700: LD_INT 18
98702: PPUSH
98703: CALL_OW 67
// if alliance_deal_status <> 2 then
98707: LD_EXP 131
98711: PUSH
98712: LD_INT 2
98714: NONEQUAL
98715: IFFALSE 98719
// exit ;
98717: GO 98917
// if going_to_steal_engineers > 0 then
98719: LD_EXP 142
98723: PUSH
98724: LD_INT 0
98726: GREATER
98727: IFFALSE 98913
// begin for un in going_to_steal_engineers do
98729: LD_ADDR_VAR 0 1
98733: PUSH
98734: LD_EXP 142
98738: PUSH
98739: FOR_IN
98740: IFFALSE 98802
// if Carry ( un ) then
98742: LD_VAR 0 1
98746: PPUSH
98747: CALL_OW 281
98751: IFFALSE 98800
// begin if IsOk ( ai_depot [ 2 ] ) and GetDistUnits ( ai_depot [ 2 ] , un ) <= 4 then
98753: LD_EXP 49
98757: PUSH
98758: LD_INT 2
98760: ARRAY
98761: PPUSH
98762: CALL_OW 302
98766: PUSH
98767: LD_EXP 49
98771: PUSH
98772: LD_INT 2
98774: ARRAY
98775: PPUSH
98776: LD_VAR 0 1
98780: PPUSH
98781: CALL_OW 296
98785: PUSH
98786: LD_INT 4
98788: LESSEQUAL
98789: AND
98790: IFFALSE 98800
// begin AllianceDealBreakdown ;
98792: CALL 96688 0 0
// exit ;
98796: POP
98797: POP
98798: GO 98917
// end ; end ;
98800: GO 98739
98802: POP
98803: POP
// going_to_steal_engineers = UnitFilter ( going_to_steal_engineers , [ f_hastask ] ) ;
98804: LD_ADDR_EXP 142
98808: PUSH
98809: LD_EXP 142
98813: PPUSH
98814: LD_INT 60
98816: PUSH
98817: EMPTY
98818: LIST
98819: PPUSH
98820: CALL_OW 72
98824: ST_TO_ADDR
// temp_list = [ ] ;
98825: LD_ADDR_VAR 0 2
98829: PUSH
98830: EMPTY
98831: ST_TO_ADDR
// for un in going_to_steal_engineers do
98832: LD_ADDR_VAR 0 1
98836: PUSH
98837: LD_EXP 142
98841: PUSH
98842: FOR_IN
98843: IFFALSE 98901
// begin for t in GetTaskList ( un ) do
98845: LD_ADDR_VAR 0 3
98849: PUSH
98850: LD_VAR 0 1
98854: PPUSH
98855: CALL_OW 437
98859: PUSH
98860: FOR_IN
98861: IFFALSE 98897
// if t [ 1 ] = < then
98863: LD_VAR 0 3
98867: PUSH
98868: LD_INT 1
98870: ARRAY
98871: PUSH
98872: LD_STRING <
98874: EQUAL
98875: IFFALSE 98895
// begin temp_list = temp_list ^ un ;
98877: LD_ADDR_VAR 0 2
98881: PUSH
98882: LD_VAR 0 2
98886: PUSH
98887: LD_VAR 0 1
98891: ADD
98892: ST_TO_ADDR
// break ;
98893: GO 98897
// end ;
98895: GO 98860
98897: POP
98898: POP
// end ;
98899: GO 98842
98901: POP
98902: POP
// going_to_steal_engineers = temp_list ;
98903: LD_ADDR_EXP 142
98907: PUSH
98908: LD_VAR 0 2
98912: ST_TO_ADDR
// end ; until false ;
98913: LD_INT 0
98915: IFFALSE 98700
// end ;
98917: PPOPN 3
98919: END
// every 0 0$1 + 0 0$0.6 trigger alliance_deal_status = 2 do var i , val , temp_list ; var solar_power_dialogue_played , solar_power_dialogue_cooldown , solar_power_dialogue_active ;
98920: LD_EXP 131
98924: PUSH
98925: LD_INT 2
98927: EQUAL
98928: IFFALSE 100052
98930: GO 98932
98932: DISABLE
98933: LD_INT 0
98935: PPUSH
98936: PPUSH
98937: PPUSH
98938: PPUSH
98939: PPUSH
98940: PPUSH
// begin solar_power_dialogue_played = false ;
98941: LD_ADDR_VAR 0 4
98945: PUSH
98946: LD_INT 0
98948: ST_TO_ADDR
// solar_power_dialogue_cooldown = 0 0$4 ;
98949: LD_ADDR_VAR 0 5
98953: PUSH
98954: LD_INT 140
98956: ST_TO_ADDR
// solar_power_dialogue_active = false ;
98957: LD_ADDR_VAR 0 6
98961: PUSH
98962: LD_INT 0
98964: ST_TO_ADDR
// val = 10 10$0 - tick ;
98965: LD_ADDR_VAR 0 2
98969: PUSH
98970: LD_INT 21000
98972: PUSH
98973: LD_OWVAR 1
98977: MINUS
98978: ST_TO_ADDR
// if val < 0 0$10 then
98979: LD_VAR 0 2
98983: PUSH
98984: LD_INT 350
98986: LESS
98987: IFFALSE 98997
// val = 0 0$10 ;
98989: LD_ADDR_VAR 0 2
98993: PUSH
98994: LD_INT 350
98996: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
98997: LD_INT 35
98999: PPUSH
99000: CALL_OW 67
// val = val - 0 0$1 ;
99004: LD_ADDR_VAR 0 2
99008: PUSH
99009: LD_VAR 0 2
99013: PUSH
99014: LD_INT 35
99016: MINUS
99017: ST_TO_ADDR
// if alliance_deal_status <> 2 or IsDead ( Joan ) then
99018: LD_EXP 131
99022: PUSH
99023: LD_INT 2
99025: NONEQUAL
99026: PUSH
99027: LD_EXP 28
99031: PPUSH
99032: CALL_OW 301
99036: OR
99037: IFFALSE 99041
// exit ;
99039: GO 100052
// if not 4 in ai_bases then
99041: LD_INT 4
99043: PUSH
99044: LD_EXP 39
99048: IN
99049: NOT
99050: IFFALSE 99151
// begin DialogueOn ;
99052: CALL_OW 6
// if 1 in ai_bases then
99056: LD_INT 1
99058: PUSH
99059: LD_EXP 39
99063: IN
99064: IFFALSE 99115
// begin ForceSay ( Heike , D19-H-1 ) ;
99066: LD_EXP 10
99070: PPUSH
99071: LD_STRING D19-H-1
99073: PPUSH
99074: CALL_OW 91
// if IsOk ( Joan ) then
99078: LD_EXP 28
99082: PPUSH
99083: CALL_OW 302
99087: IFFALSE 99113
// begin SayRadio ( Joan , D19-Jo-1 ) ;
99089: LD_EXP 28
99093: PPUSH
99094: LD_STRING D19-Jo-1
99096: PPUSH
99097: CALL_OW 94
// ForceSay ( Joan , D19-Jo-2 ) ;
99101: LD_EXP 28
99105: PPUSH
99106: LD_STRING D19-Jo-2
99108: PPUSH
99109: CALL_OW 91
// end ; end else
99113: GO 99137
// if 3 in ai_bases then
99115: LD_INT 3
99117: PUSH
99118: LD_EXP 39
99122: IN
99123: IFFALSE 99137
// ForceSay ( Heike , D28-H-1 ) ;
99125: LD_EXP 10
99129: PPUSH
99130: LD_STRING D28-H-1
99132: PPUSH
99133: CALL_OW 91
// DialogueOff ;
99137: CALL_OW 7
// alli_destroy_am_objective_status = 3 ;
99141: LD_ADDR_EXP 138
99145: PUSH
99146: LD_INT 3
99148: ST_TO_ADDR
// exit ;
99149: GO 100052
// end ; until val <= 0 0$0 ;
99151: LD_VAR 0 2
99155: PUSH
99156: LD_INT 0
99158: LESSEQUAL
99159: IFFALSE 98997
// DialogueOn ;
99161: CALL_OW 6
// if IsOk ( Gossudarov ) then
99165: LD_EXP 27
99169: PPUSH
99170: CALL_OW 302
99174: IFFALSE 99190
// Say ( Gossudarov , D16-Go-1a ) else
99176: LD_EXP 27
99180: PPUSH
99181: LD_STRING D16-Go-1a
99183: PPUSH
99184: CALL_OW 88
99188: GO 99202
// ForceSay ( Joan , D16-Jo-1b ) ;
99190: LD_EXP 28
99194: PPUSH
99195: LD_STRING D16-Jo-1b
99197: PPUSH
99198: CALL_OW 91
// RevealFogArea ( you , am_base ) ;
99202: LD_EXP 2
99206: PPUSH
99207: LD_INT 5
99209: PPUSH
99210: CALL_OW 332
// CenterOnXY ( 122 , 184 ) ;
99214: LD_INT 122
99216: PPUSH
99217: LD_INT 184
99219: PPUSH
99220: CALL_OW 84
// ForceSay ( Joan , D16-Jo-2 ) ;
99224: LD_EXP 28
99228: PPUSH
99229: LD_STRING D16-Jo-2
99231: PPUSH
99232: CALL_OW 91
// ForceSay ( Joan , D16-Jo-3 ) ;
99236: LD_EXP 28
99240: PPUSH
99241: LD_STRING D16-Jo-3
99243: PPUSH
99244: CALL_OW 91
// if IsOk ( Gossudarov ) then
99248: LD_EXP 27
99252: PPUSH
99253: CALL_OW 302
99257: IFFALSE 99273
// Say ( Gossudarov , D16-Go-2a ) else
99259: LD_EXP 27
99263: PPUSH
99264: LD_STRING D16-Go-2a
99266: PPUSH
99267: CALL_OW 88
99271: GO 99285
// ForceSay ( Joan , D16-Jo-4b ) ;
99273: LD_EXP 28
99277: PPUSH
99278: LD_STRING D16-Jo-4b
99280: PPUSH
99281: CALL_OW 91
// ForceSay ( Joan , D16-Jo-5 ) ;
99285: LD_EXP 28
99289: PPUSH
99290: LD_STRING D16-Jo-5
99292: PPUSH
99293: CALL_OW 91
// ForceSay ( Joan , D16-Jo-6 ) ;
99297: LD_EXP 28
99301: PPUSH
99302: LD_STRING D16-Jo-6
99304: PPUSH
99305: CALL_OW 91
// ForceSay ( Heike , D16-H-1 ) ;
99309: LD_EXP 10
99313: PPUSH
99314: LD_STRING D16-H-1
99316: PPUSH
99317: CALL_OW 91
// DialogueOff ;
99321: CALL_OW 7
// wait ( 0 0$0.2 ) ;
99325: LD_INT 7
99327: PPUSH
99328: CALL_OW 67
// ChangeMissionObjectives ( MGatherSib ) ;
99332: LD_STRING MGatherSib
99334: PPUSH
99335: CALL_OW 337
// alli_sib_needed = 300 ;
99339: LD_ADDR_EXP 134
99343: PUSH
99344: LD_INT 300
99346: ST_TO_ADDR
// if difficulty = 3 then
99347: LD_OWVAR 67
99351: PUSH
99352: LD_INT 3
99354: EQUAL
99355: IFFALSE 99490
// begin temp_list = ai_buildings_locations [ 4 ] ^ [ [ 112 , 190 , Rand ( 0 , 5 ) , b_solar_power , 0 , 0 , 0 ] , [ 152 , 191 , Rand ( 0 , 5 ) , b_solar_power , 0 , 0 , 0 ] ] ;
99357: LD_ADDR_VAR 0 3
99361: PUSH
99362: LD_EXP 61
99366: PUSH
99367: LD_INT 4
99369: ARRAY
99370: PUSH
99371: LD_INT 112
99373: PUSH
99374: LD_INT 190
99376: PUSH
99377: LD_INT 0
99379: PPUSH
99380: LD_INT 5
99382: PPUSH
99383: CALL_OW 12
99387: PUSH
99388: LD_INT 27
99390: PUSH
99391: LD_INT 0
99393: PUSH
99394: LD_INT 0
99396: PUSH
99397: LD_INT 0
99399: PUSH
99400: EMPTY
99401: LIST
99402: LIST
99403: LIST
99404: LIST
99405: LIST
99406: LIST
99407: LIST
99408: PUSH
99409: LD_INT 152
99411: PUSH
99412: LD_INT 191
99414: PUSH
99415: LD_INT 0
99417: PPUSH
99418: LD_INT 5
99420: PPUSH
99421: CALL_OW 12
99425: PUSH
99426: LD_INT 27
99428: PUSH
99429: LD_INT 0
99431: PUSH
99432: LD_INT 0
99434: PUSH
99435: LD_INT 0
99437: PUSH
99438: EMPTY
99439: LIST
99440: LIST
99441: LIST
99442: LIST
99443: LIST
99444: LIST
99445: LIST
99446: PUSH
99447: EMPTY
99448: LIST
99449: LIST
99450: ADD
99451: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , 4 , temp_list ) ;
99452: LD_ADDR_EXP 61
99456: PUSH
99457: LD_EXP 61
99461: PPUSH
99462: LD_INT 4
99464: PPUSH
99465: LD_VAR 0 3
99469: PPUSH
99470: CALL_OW 1
99474: ST_TO_ADDR
// SortBuildingLocationsListInCorrectOrder ( 4 ) ;
99475: LD_INT 4
99477: PPUSH
99478: CALL 8500 0 1
// solar_power_dialogue_active = true ;
99482: LD_ADDR_VAR 0 6
99486: PUSH
99487: LD_INT 1
99489: ST_TO_ADDR
// end ; repeat wait ( 0 0$1 ) ;
99490: LD_INT 35
99492: PPUSH
99493: CALL_OW 67
// until alli_sib_needed = 0 ;
99497: LD_EXP 134
99501: PUSH
99502: LD_INT 0
99504: EQUAL
99505: IFFALSE 99490
// if alliance_deal_status <> 2 then
99507: LD_EXP 131
99511: PUSH
99512: LD_INT 2
99514: NONEQUAL
99515: IFFALSE 99519
// exit ;
99517: GO 100052
// ChangeMissionObjectives ( MOutGatherSib ) ;
99519: LD_STRING MOutGatherSib
99521: PPUSH
99522: CALL_OW 337
// ChangeMissionObjectives ( MDestroyAmericans ) ;
99526: LD_STRING MDestroyAmericans
99528: PPUSH
99529: CALL_OW 337
// alli_destroy_am_objective_status = 1 ;
99533: LD_ADDR_EXP 138
99537: PUSH
99538: LD_INT 1
99540: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
99541: LD_INT 35
99543: PPUSH
99544: CALL_OW 67
// if alliance_deal_status <> 2 then
99548: LD_EXP 131
99552: PUSH
99553: LD_INT 2
99555: NONEQUAL
99556: IFFALSE 99560
// exit ;
99558: GO 100052
// if not 4 in ai_bases then
99560: LD_INT 4
99562: PUSH
99563: LD_EXP 39
99567: IN
99568: NOT
99569: IFFALSE 99573
// break ;
99571: GO 99948
// if ContactTime ( [ you , americans ] ) > 0 0$2 then
99573: LD_EXP 2
99577: PUSH
99578: LD_EXP 7
99582: PUSH
99583: EMPTY
99584: LIST
99585: LIST
99586: PPUSH
99587: CALL_OW 462
99591: PUSH
99592: LD_INT 70
99594: GREATER
99595: IFFALSE 99599
// continue ;
99597: GO 99541
// val = false ;
99599: LD_ADDR_VAR 0 2
99603: PUSH
99604: LD_INT 0
99606: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_type , unit_human ] , [ f_type , unit_vehicle ] ] ] ) do
99607: LD_ADDR_VAR 0 1
99611: PUSH
99612: LD_INT 22
99614: PUSH
99615: LD_EXP 2
99619: PUSH
99620: EMPTY
99621: LIST
99622: LIST
99623: PUSH
99624: LD_INT 2
99626: PUSH
99627: LD_INT 21
99629: PUSH
99630: LD_INT 1
99632: PUSH
99633: EMPTY
99634: LIST
99635: LIST
99636: PUSH
99637: LD_INT 21
99639: PUSH
99640: LD_INT 2
99642: PUSH
99643: EMPTY
99644: LIST
99645: LIST
99646: PUSH
99647: EMPTY
99648: LIST
99649: LIST
99650: LIST
99651: PUSH
99652: EMPTY
99653: LIST
99654: LIST
99655: PPUSH
99656: CALL_OW 69
99660: PUSH
99661: FOR_IN
99662: IFFALSE 99691
// if GetY ( i ) >= 149 then
99664: LD_VAR 0 1
99668: PPUSH
99669: CALL_OW 251
99673: PUSH
99674: LD_INT 149
99676: GREATEREQUAL
99677: IFFALSE 99689
// begin val = true ;
99679: LD_ADDR_VAR 0 2
99683: PUSH
99684: LD_INT 1
99686: ST_TO_ADDR
// break ;
99687: GO 99691
// end ;
99689: GO 99661
99691: POP
99692: POP
// if not val then
99693: LD_VAR 0 2
99697: NOT
99698: IFFALSE 99702
// continue ;
99700: GO 99541
// if solar_power_dialogue_active and not solar_power_dialogue_played then
99702: LD_VAR 0 6
99706: PUSH
99707: LD_VAR 0 4
99711: NOT
99712: AND
99713: IFFALSE 99841
// if FilterAllUnits ( [ [ f_side , americans ] , [ f_btype , b_solar_power ] , [ f_not , [ f_constructed ] ] ] ) > 0 then
99715: LD_INT 22
99717: PUSH
99718: LD_EXP 7
99722: PUSH
99723: EMPTY
99724: LIST
99725: LIST
99726: PUSH
99727: LD_INT 30
99729: PUSH
99730: LD_INT 27
99732: PUSH
99733: EMPTY
99734: LIST
99735: LIST
99736: PUSH
99737: LD_INT 3
99739: PUSH
99740: LD_INT 57
99742: PUSH
99743: EMPTY
99744: LIST
99745: PUSH
99746: EMPTY
99747: LIST
99748: LIST
99749: PUSH
99750: EMPTY
99751: LIST
99752: LIST
99753: LIST
99754: PPUSH
99755: CALL_OW 69
99759: PUSH
99760: LD_INT 0
99762: GREATER
99763: IFFALSE 99841
// begin solar_power_dialogue_cooldown = solar_power_dialogue_cooldown - 0 0$1 ;
99765: LD_ADDR_VAR 0 5
99769: PUSH
99770: LD_VAR 0 5
99774: PUSH
99775: LD_INT 35
99777: MINUS
99778: ST_TO_ADDR
// if solar_power_dialogue_cooldown <= 0 0$0 then
99779: LD_VAR 0 5
99783: PUSH
99784: LD_INT 0
99786: LESSEQUAL
99787: IFFALSE 99841
// begin solar_power_dialogue_played = true ;
99789: LD_ADDR_VAR 0 4
99793: PUSH
99794: LD_INT 1
99796: ST_TO_ADDR
// DialogueOn ;
99797: CALL_OW 6
// ForceSay ( Heike , D27-H-1 ) ;
99801: LD_EXP 10
99805: PPUSH
99806: LD_STRING D27-H-1
99808: PPUSH
99809: CALL_OW 91
// SayRadio ( Joan , D27-Jo-1 ) ;
99813: LD_EXP 28
99817: PPUSH
99818: LD_STRING D27-Jo-1
99820: PPUSH
99821: CALL_OW 94
// ForceSay ( Heike , D27-H-2 ) ;
99825: LD_EXP 10
99829: PPUSH
99830: LD_STRING D27-H-2
99832: PPUSH
99833: CALL_OW 91
// DialogueOff ;
99837: CALL_OW 7
// end ; end ; alli_destroy_am_objective_status = 2 ;
99841: LD_ADDR_EXP 138
99845: PUSH
99846: LD_INT 2
99848: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , americans ] , [ f_btype , b_siberite_power ] ] ) ^ FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_vehicle ] , [ f_engine , engine_siberite ] ] ) do
99849: LD_ADDR_VAR 0 1
99853: PUSH
99854: LD_INT 22
99856: PUSH
99857: LD_EXP 7
99861: PUSH
99862: EMPTY
99863: LIST
99864: LIST
99865: PUSH
99866: LD_INT 30
99868: PUSH
99869: LD_INT 28
99871: PUSH
99872: EMPTY
99873: LIST
99874: LIST
99875: PUSH
99876: EMPTY
99877: LIST
99878: LIST
99879: PPUSH
99880: CALL_OW 69
99884: PUSH
99885: LD_INT 22
99887: PUSH
99888: LD_EXP 7
99892: PUSH
99893: EMPTY
99894: LIST
99895: LIST
99896: PUSH
99897: LD_INT 21
99899: PUSH
99900: LD_INT 2
99902: PUSH
99903: EMPTY
99904: LIST
99905: LIST
99906: PUSH
99907: LD_INT 32
99909: PUSH
99910: LD_INT 3
99912: PUSH
99913: EMPTY
99914: LIST
99915: LIST
99916: PUSH
99917: EMPTY
99918: LIST
99919: LIST
99920: LIST
99921: PPUSH
99922: CALL_OW 69
99926: ADD
99927: PUSH
99928: FOR_IN
99929: IFFALSE 99942
// KillUnit ( i ) ;
99931: LD_VAR 0 1
99935: PPUSH
99936: CALL_OW 66
99940: GO 99928
99942: POP
99943: POP
// until false ;
99944: LD_INT 0
99946: IFFALSE 99541
// DialogueOn ;
99948: CALL_OW 6
// if 1 in ai_bases then
99952: LD_INT 1
99954: PUSH
99955: LD_EXP 39
99959: IN
99960: IFFALSE 100011
// begin ForceSay ( Heike , D19-H-1 ) ;
99962: LD_EXP 10
99966: PPUSH
99967: LD_STRING D19-H-1
99969: PPUSH
99970: CALL_OW 91
// if IsOk ( Joan ) then
99974: LD_EXP 28
99978: PPUSH
99979: CALL_OW 302
99983: IFFALSE 100009
// begin SayRadio ( Joan , D19-Jo-1 ) ;
99985: LD_EXP 28
99989: PPUSH
99990: LD_STRING D19-Jo-1
99992: PPUSH
99993: CALL_OW 94
// ForceSay ( Joan , D19-Jo-2 ) ;
99997: LD_EXP 28
100001: PPUSH
100002: LD_STRING D19-Jo-2
100004: PPUSH
100005: CALL_OW 91
// end ; end else
100009: GO 100033
// if 3 in ai_bases then
100011: LD_INT 3
100013: PUSH
100014: LD_EXP 39
100018: IN
100019: IFFALSE 100033
// ForceSay ( Heike , D28-H-1 ) ;
100021: LD_EXP 10
100025: PPUSH
100026: LD_STRING D28-H-1
100028: PPUSH
100029: CALL_OW 91
// DialogueOff ;
100033: CALL_OW 7
// ChangeMissionObjectives ( MOutDestroyAmericans ) ;
100037: LD_STRING MOutDestroyAmericans
100039: PPUSH
100040: CALL_OW 337
// alli_destroy_am_objective_status = 3 ;
100044: LD_ADDR_EXP 138
100048: PUSH
100049: LD_INT 3
100051: ST_TO_ADDR
// end ;
100052: PPOPN 6
100054: END
// every 0 0$1 + 0 0$0.6 trigger alli_destroy_am_objective_status = 3 do var i , temp_list , val , b , temp_list_2 ;
100055: LD_EXP 138
100059: PUSH
100060: LD_INT 3
100062: EQUAL
100063: IFFALSE 101661
100065: GO 100067
100067: DISABLE
100068: LD_INT 0
100070: PPUSH
100071: PPUSH
100072: PPUSH
100073: PPUSH
100074: PPUSH
// begin wait ( 1 1$0 ) ;
100075: LD_INT 2100
100077: PPUSH
100078: CALL_OW 67
// if alliance_deal_status <> 2 or IsDead ( Joan ) or not 1 in ai_bases then
100082: LD_EXP 131
100086: PUSH
100087: LD_INT 2
100089: NONEQUAL
100090: PUSH
100091: LD_EXP 28
100095: PPUSH
100096: CALL_OW 301
100100: OR
100101: PUSH
100102: LD_INT 1
100104: PUSH
100105: LD_EXP 39
100109: IN
100110: NOT
100111: OR
100112: IFFALSE 100116
// exit ;
100114: GO 101661
// DialogueOn ;
100116: CALL_OW 6
// ForceSay ( Joan , D20-Jo-1 ) ;
100120: LD_EXP 28
100124: PPUSH
100125: LD_STRING D20-Jo-1
100127: PPUSH
100128: CALL_OW 91
// RevealFogArea ( you , ru_base ) ;
100132: LD_EXP 2
100136: PPUSH
100137: LD_INT 2
100139: PPUSH
100140: CALL_OW 332
// CenterOnXY ( 39 , 21 ) ;
100144: LD_INT 39
100146: PPUSH
100147: LD_INT 21
100149: PPUSH
100150: CALL_OW 84
// dwait ( 0 0$0.5 ) ;
100154: LD_INT 18
100156: PPUSH
100157: CALL_OW 68
// ForceSay ( Heike , D20-H-1 ) ;
100161: LD_EXP 10
100165: PPUSH
100166: LD_STRING D20-H-1
100168: PPUSH
100169: CALL_OW 91
// ForceSay ( Joan , D20-Jo-2 ) ;
100173: LD_EXP 28
100177: PPUSH
100178: LD_STRING D20-Jo-2
100180: PPUSH
100181: CALL_OW 91
// ForceSay ( Joan , D20-Jo-3 ) ;
100185: LD_EXP 28
100189: PPUSH
100190: LD_STRING D20-Jo-3
100192: PPUSH
100193: CALL_OW 91
// ForceSay ( Heike , D20-H-2 ) ;
100197: LD_EXP 10
100201: PPUSH
100202: LD_STRING D20-H-2
100204: PPUSH
100205: CALL_OW 91
// ForceSay ( Joan , D20-Jo-4 ) ;
100209: LD_EXP 28
100213: PPUSH
100214: LD_STRING D20-Jo-4
100216: PPUSH
100217: CALL_OW 91
// ForceSay ( Heike , D20-H-3 ) ;
100221: LD_EXP 10
100225: PPUSH
100226: LD_STRING D20-H-3
100228: PPUSH
100229: CALL_OW 91
// ForceSay ( Joan , D20-Jo-5 ) ;
100233: LD_EXP 28
100237: PPUSH
100238: LD_STRING D20-Jo-5
100240: PPUSH
100241: CALL_OW 91
// ForceSay ( Heike , D20-H-4 ) ;
100245: LD_EXP 10
100249: PPUSH
100250: LD_STRING D20-H-4
100252: PPUSH
100253: CALL_OW 91
// ForceSay ( Joan , D20-Jo-6 ) ;
100257: LD_EXP 28
100261: PPUSH
100262: LD_STRING D20-Jo-6
100264: PPUSH
100265: CALL_OW 91
// ForceSay ( Joan , D20-Jo-7 ) ;
100269: LD_EXP 28
100273: PPUSH
100274: LD_STRING D20-Jo-7
100276: PPUSH
100277: CALL_OW 91
// ForceSay ( Joan , D20-Jo-8 ) ;
100281: LD_EXP 28
100285: PPUSH
100286: LD_STRING D20-Jo-8
100288: PPUSH
100289: CALL_OW 91
// temp_list = UnitFilter ( [ Oswald , Louis , Suze ] , [ f_ok ] ) ;
100293: LD_ADDR_VAR 0 2
100297: PUSH
100298: LD_EXP 13
100302: PUSH
100303: LD_EXP 20
100307: PUSH
100308: LD_EXP 16
100312: PUSH
100313: EMPTY
100314: LIST
100315: LIST
100316: LIST
100317: PPUSH
100318: LD_INT 50
100320: PUSH
100321: EMPTY
100322: LIST
100323: PPUSH
100324: CALL_OW 72
100328: ST_TO_ADDR
// if temp_list > 0 then
100329: LD_VAR 0 2
100333: PUSH
100334: LD_INT 0
100336: GREATER
100337: IFFALSE 100460
// begin i = Rand ( 1 , temp_list + 0 ) ;
100339: LD_ADDR_VAR 0 1
100343: PUSH
100344: LD_INT 1
100346: PPUSH
100347: LD_VAR 0 2
100351: PUSH
100352: LD_INT 0
100354: PLUS
100355: PPUSH
100356: CALL_OW 12
100360: ST_TO_ADDR
// i = temp_list [ i ] ;
100361: LD_ADDR_VAR 0 1
100365: PUSH
100366: LD_VAR 0 2
100370: PUSH
100371: LD_VAR 0 1
100375: ARRAY
100376: ST_TO_ADDR
// case i of Oswald :
100377: LD_VAR 0 1
100381: PUSH
100382: LD_EXP 13
100386: DOUBLE
100387: EQUAL
100388: IFTRUE 100392
100390: GO 100407
100392: POP
// Say ( i , D20-Os-1 ) ; Louis :
100393: LD_VAR 0 1
100397: PPUSH
100398: LD_STRING D20-Os-1
100400: PPUSH
100401: CALL_OW 88
100405: GO 100458
100407: LD_EXP 20
100411: DOUBLE
100412: EQUAL
100413: IFTRUE 100417
100415: GO 100432
100417: POP
// Say ( i , D20-Lo-1 ) ; Suze :
100418: LD_VAR 0 1
100422: PPUSH
100423: LD_STRING D20-Lo-1
100425: PPUSH
100426: CALL_OW 88
100430: GO 100458
100432: LD_EXP 16
100436: DOUBLE
100437: EQUAL
100438: IFTRUE 100442
100440: GO 100457
100442: POP
// Say ( i , D20-Su-1 ) ; end ;
100443: LD_VAR 0 1
100447: PPUSH
100448: LD_STRING D20-Su-1
100450: PPUSH
100451: CALL_OW 88
100455: GO 100458
100457: POP
// end else
100458: GO 100472
// ForceSay ( Heike , D20-H-5 ) ;
100460: LD_EXP 10
100464: PPUSH
100465: LD_STRING D20-H-5
100467: PPUSH
100468: CALL_OW 91
// ForceSay ( Joan , D20-Jo-9 ) ;
100472: LD_EXP 28
100476: PPUSH
100477: LD_STRING D20-Jo-9
100479: PPUSH
100480: CALL_OW 91
// DialogueOff ;
100484: CALL_OW 7
// wait ( 0 0$0.2 ) ;
100488: LD_INT 7
100490: PPUSH
100491: CALL_OW 67
// ChangeMissionObjectives ( MDelGatherSib ) ;
100495: LD_STRING MDelGatherSib
100497: PPUSH
100498: CALL_OW 337
// ChangeMissionObjectives ( MGatherSib ) ;
100502: LD_STRING MGatherSib
100504: PPUSH
100505: CALL_OW 337
// alli_sib_needed = 500 ;
100509: LD_ADDR_EXP 134
100513: PUSH
100514: LD_INT 500
100516: ST_TO_ADDR
// if difficulty >= 2 then
100517: LD_OWVAR 67
100521: PUSH
100522: LD_INT 2
100524: GREATEREQUAL
100525: IFFALSE 100953
// begin temp_list = [ [ 31 , 5 , 2 , b_breastwork , 0 , 0 , 0 ] , [ 10 , 14 , 5 , b_breastwork , 0 , 0 , 0 ] , [ 12 , 19 , 3 , b_breastwork , 0 , 0 , 0 ] ] ;
100527: LD_ADDR_VAR 0 2
100531: PUSH
100532: LD_INT 31
100534: PUSH
100535: LD_INT 5
100537: PUSH
100538: LD_INT 2
100540: PUSH
100541: LD_INT 31
100543: PUSH
100544: LD_INT 0
100546: PUSH
100547: LD_INT 0
100549: PUSH
100550: LD_INT 0
100552: PUSH
100553: EMPTY
100554: LIST
100555: LIST
100556: LIST
100557: LIST
100558: LIST
100559: LIST
100560: LIST
100561: PUSH
100562: LD_INT 10
100564: PUSH
100565: LD_INT 14
100567: PUSH
100568: LD_INT 5
100570: PUSH
100571: LD_INT 31
100573: PUSH
100574: LD_INT 0
100576: PUSH
100577: LD_INT 0
100579: PUSH
100580: LD_INT 0
100582: PUSH
100583: EMPTY
100584: LIST
100585: LIST
100586: LIST
100587: LIST
100588: LIST
100589: LIST
100590: LIST
100591: PUSH
100592: LD_INT 12
100594: PUSH
100595: LD_INT 19
100597: PUSH
100598: LD_INT 3
100600: PUSH
100601: LD_INT 31
100603: PUSH
100604: LD_INT 0
100606: PUSH
100607: LD_INT 0
100609: PUSH
100610: LD_INT 0
100612: PUSH
100613: EMPTY
100614: LIST
100615: LIST
100616: LIST
100617: LIST
100618: LIST
100619: LIST
100620: LIST
100621: PUSH
100622: EMPTY
100623: LIST
100624: LIST
100625: LIST
100626: ST_TO_ADDR
// rus_extra_def_locs = [ [ 31 , 5 ] , [ 10 , 14 ] , [ 12 , 19 ] ] ;
100627: LD_ADDR_EXP 150
100631: PUSH
100632: LD_INT 31
100634: PUSH
100635: LD_INT 5
100637: PUSH
100638: EMPTY
100639: LIST
100640: LIST
100641: PUSH
100642: LD_INT 10
100644: PUSH
100645: LD_INT 14
100647: PUSH
100648: EMPTY
100649: LIST
100650: LIST
100651: PUSH
100652: LD_INT 12
100654: PUSH
100655: LD_INT 19
100657: PUSH
100658: EMPTY
100659: LIST
100660: LIST
100661: PUSH
100662: EMPTY
100663: LIST
100664: LIST
100665: LIST
100666: ST_TO_ADDR
// if difficulty = 3 then
100667: LD_OWVAR 67
100671: PUSH
100672: LD_INT 3
100674: EQUAL
100675: IFFALSE 100787
// begin temp_list = temp_list ^ [ [ 4 , 3 , 3 , b_bunker , 0 , 0 , ru_heavy_gun ] , [ 19 , 13 , 2 , b_bunker , 0 , 0 , ru_heavy_gun ] ] ;
100677: LD_ADDR_VAR 0 2
100681: PUSH
100682: LD_VAR 0 2
100686: PUSH
100687: LD_INT 4
100689: PUSH
100690: LD_INT 3
100692: PUSH
100693: LD_INT 3
100695: PUSH
100696: LD_INT 32
100698: PUSH
100699: LD_INT 0
100701: PUSH
100702: LD_INT 0
100704: PUSH
100705: LD_INT 46
100707: PUSH
100708: EMPTY
100709: LIST
100710: LIST
100711: LIST
100712: LIST
100713: LIST
100714: LIST
100715: LIST
100716: PUSH
100717: LD_INT 19
100719: PUSH
100720: LD_INT 13
100722: PUSH
100723: LD_INT 2
100725: PUSH
100726: LD_INT 32
100728: PUSH
100729: LD_INT 0
100731: PUSH
100732: LD_INT 0
100734: PUSH
100735: LD_INT 46
100737: PUSH
100738: EMPTY
100739: LIST
100740: LIST
100741: LIST
100742: LIST
100743: LIST
100744: LIST
100745: LIST
100746: PUSH
100747: EMPTY
100748: LIST
100749: LIST
100750: ADD
100751: ST_TO_ADDR
// rus_extra_def_locs = rus_extra_def_locs ^ [ [ 4 , 3 ] , [ 19 , 13 ] ] ;
100752: LD_ADDR_EXP 150
100756: PUSH
100757: LD_EXP 150
100761: PUSH
100762: LD_INT 4
100764: PUSH
100765: LD_INT 3
100767: PUSH
100768: EMPTY
100769: LIST
100770: LIST
100771: PUSH
100772: LD_INT 19
100774: PUSH
100775: LD_INT 13
100777: PUSH
100778: EMPTY
100779: LIST
100780: LIST
100781: PUSH
100782: EMPTY
100783: LIST
100784: LIST
100785: ADD
100786: ST_TO_ADDR
// end ; temp_list_2 = CreateUnitsWithClass ( temp_list + 0 , class_bazooker , 1 ) ;
100787: LD_ADDR_VAR 0 5
100791: PUSH
100792: LD_VAR 0 2
100796: PUSH
100797: LD_INT 0
100799: PLUS
100800: PPUSH
100801: LD_INT 9
100803: PPUSH
100804: LD_INT 1
100806: PPUSH
100807: CALL 13445 0 3
100811: ST_TO_ADDR
// for i in temp_list_2 do
100812: LD_ADDR_VAR 0 1
100816: PUSH
100817: LD_VAR 0 5
100821: PUSH
100822: FOR_IN
100823: IFFALSE 100868
// PlaceUnitXYR ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] , 7 , false ) ;
100825: LD_VAR 0 1
100829: PPUSH
100830: LD_EXP 73
100834: PUSH
100835: LD_INT 1
100837: ARRAY
100838: PUSH
100839: LD_INT 1
100841: ARRAY
100842: PPUSH
100843: LD_EXP 73
100847: PUSH
100848: LD_INT 1
100850: ARRAY
100851: PUSH
100852: LD_INT 2
100854: ARRAY
100855: PPUSH
100856: LD_INT 7
100858: PPUSH
100859: LD_INT 0
100861: PPUSH
100862: CALL_OW 50
100866: GO 100822
100868: POP
100869: POP
// temp_list_2 = ai_soldiers [ 1 ] ^ temp_list_2 ;
100870: LD_ADDR_VAR 0 5
100874: PUSH
100875: LD_EXP 40
100879: PUSH
100880: LD_INT 1
100882: ARRAY
100883: PUSH
100884: LD_VAR 0 5
100888: ADD
100889: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , 1 , temp_list_2 ) ;
100890: LD_ADDR_EXP 40
100894: PUSH
100895: LD_EXP 40
100899: PPUSH
100900: LD_INT 1
100902: PPUSH
100903: LD_VAR 0 5
100907: PPUSH
100908: CALL_OW 1
100912: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , 1 , ai_buildings_locations [ 1 ] ^ temp_list ) ;
100913: LD_ADDR_EXP 61
100917: PUSH
100918: LD_EXP 61
100922: PPUSH
100923: LD_INT 1
100925: PPUSH
100926: LD_EXP 61
100930: PUSH
100931: LD_INT 1
100933: ARRAY
100934: PUSH
100935: LD_VAR 0 2
100939: ADD
100940: PPUSH
100941: CALL_OW 1
100945: ST_TO_ADDR
// SortBuildingLocationsListInCorrectOrder ( 1 ) ;
100946: LD_INT 1
100948: PPUSH
100949: CALL 8500 0 1
// end ; wait ( 0 0$10 ) ;
100953: LD_INT 350
100955: PPUSH
100956: CALL_OW 67
// temp_list = UnitFilter ( [ Oswald , Kowalski , Suze ] , [ f_ok ] ) ;
100960: LD_ADDR_VAR 0 2
100964: PUSH
100965: LD_EXP 13
100969: PUSH
100970: LD_EXP 15
100974: PUSH
100975: LD_EXP 16
100979: PUSH
100980: EMPTY
100981: LIST
100982: LIST
100983: LIST
100984: PPUSH
100985: LD_INT 50
100987: PUSH
100988: EMPTY
100989: LIST
100990: PPUSH
100991: CALL_OW 72
100995: ST_TO_ADDR
// if temp_list > 0 then
100996: LD_VAR 0 2
101000: PUSH
101001: LD_INT 0
101003: GREATER
101004: IFFALSE 101145
// begin DialogueOn ;
101006: CALL_OW 6
// i = Rand ( 1 , temp_list + 0 ) ;
101010: LD_ADDR_VAR 0 1
101014: PUSH
101015: LD_INT 1
101017: PPUSH
101018: LD_VAR 0 2
101022: PUSH
101023: LD_INT 0
101025: PLUS
101026: PPUSH
101027: CALL_OW 12
101031: ST_TO_ADDR
// i = temp_list [ i ] ;
101032: LD_ADDR_VAR 0 1
101036: PUSH
101037: LD_VAR 0 2
101041: PUSH
101042: LD_VAR 0 1
101046: ARRAY
101047: ST_TO_ADDR
// case i of Oswald :
101048: LD_VAR 0 1
101052: PUSH
101053: LD_EXP 13
101057: DOUBLE
101058: EQUAL
101059: IFTRUE 101063
101061: GO 101078
101063: POP
// Say ( i , D20-Os-2 ) ; Kowalski :
101064: LD_VAR 0 1
101068: PPUSH
101069: LD_STRING D20-Os-2
101071: PPUSH
101072: CALL_OW 88
101076: GO 101129
101078: LD_EXP 15
101082: DOUBLE
101083: EQUAL
101084: IFTRUE 101088
101086: GO 101103
101088: POP
// Say ( i , D20-Ko-1 ) ; Suze :
101089: LD_VAR 0 1
101093: PPUSH
101094: LD_STRING D20-Ko-1
101096: PPUSH
101097: CALL_OW 88
101101: GO 101129
101103: LD_EXP 16
101107: DOUBLE
101108: EQUAL
101109: IFTRUE 101113
101111: GO 101128
101113: POP
// Say ( i , D20-Su-2 ) ; end ;
101114: LD_VAR 0 1
101118: PPUSH
101119: LD_STRING D20-Su-2
101121: PPUSH
101122: CALL_OW 88
101126: GO 101129
101128: POP
// ForceSay ( Heike , D20-H-6 ) ;
101129: LD_EXP 10
101133: PPUSH
101134: LD_STRING D20-H-6
101136: PPUSH
101137: CALL_OW 91
// DialogueOff ;
101141: CALL_OW 7
// end ; val = tick + Rand ( 1 1$30 , 2 2$0 ) ;
101145: LD_ADDR_VAR 0 3
101149: PUSH
101150: LD_OWVAR 1
101154: PUSH
101155: LD_INT 3150
101157: PPUSH
101158: LD_INT 4200
101160: PPUSH
101161: CALL_OW 12
101165: PLUS
101166: ST_TO_ADDR
// b = false ;
101167: LD_ADDR_VAR 0 4
101171: PUSH
101172: LD_INT 0
101174: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
101175: LD_INT 35
101177: PPUSH
101178: CALL_OW 67
// if tick >= val and not b and alliance_deal_status = 2 then
101182: LD_OWVAR 1
101186: PUSH
101187: LD_VAR 0 3
101191: GREATEREQUAL
101192: PUSH
101193: LD_VAR 0 4
101197: NOT
101198: AND
101199: PUSH
101200: LD_EXP 131
101204: PUSH
101205: LD_INT 2
101207: EQUAL
101208: AND
101209: IFFALSE 101525
// begin b = true ;
101211: LD_ADDR_VAR 0 4
101215: PUSH
101216: LD_INT 1
101218: ST_TO_ADDR
// if IsOk ( Olaf ) then
101219: LD_EXP 11
101223: PPUSH
101224: CALL_OW 302
101228: IFFALSE 101242
// i = Olaf else
101230: LD_ADDR_VAR 0 1
101234: PUSH
101235: LD_EXP 11
101239: ST_TO_ADDR
101240: GO 101273
// if IsOk ( Martin ) then
101242: LD_EXP 19
101246: PPUSH
101247: CALL_OW 302
101251: IFFALSE 101265
// i = Martin else
101253: LD_ADDR_VAR 0 1
101257: PUSH
101258: LD_EXP 19
101262: ST_TO_ADDR
101263: GO 101273
// i = 0 ;
101265: LD_ADDR_VAR 0 1
101269: PUSH
101270: LD_INT 0
101272: ST_TO_ADDR
// if i > 0 and IsLive ( Joan ) then
101273: LD_VAR 0 1
101277: PUSH
101278: LD_INT 0
101280: GREATER
101281: PUSH
101282: LD_EXP 28
101286: PPUSH
101287: CALL_OW 300
101291: AND
101292: IFFALSE 101525
// begin DialogueOn ;
101294: CALL_OW 6
// if i = Olaf then
101298: LD_VAR 0 1
101302: PUSH
101303: LD_EXP 11
101307: EQUAL
101308: IFFALSE 101324
// Say ( i , D18-Ola-1 ) else
101310: LD_VAR 0 1
101314: PPUSH
101315: LD_STRING D18-Ola-1
101317: PPUSH
101318: CALL_OW 88
101322: GO 101336
// Say ( i , D18-Mart-1 ) ;
101324: LD_VAR 0 1
101328: PPUSH
101329: LD_STRING D18-Mart-1
101331: PPUSH
101332: CALL_OW 88
// if IsLive ( Roth ) then
101336: LD_EXP 26
101340: PPUSH
101341: CALL_OW 300
101345: IFFALSE 101371
// begin ForceSay ( Joan , D18-Jo-1 ) ;
101347: LD_EXP 28
101351: PPUSH
101352: LD_STRING D18-Jo-1
101354: PPUSH
101355: CALL_OW 91
// ForceSay ( Roth , D18-Ro-1 ) ;
101359: LD_EXP 26
101363: PPUSH
101364: LD_STRING D18-Ro-1
101366: PPUSH
101367: CALL_OW 91
// end ; ForceSay ( Joan , D18-Jo-2 ) ;
101371: LD_EXP 28
101375: PPUSH
101376: LD_STRING D18-Jo-2
101378: PPUSH
101379: CALL_OW 91
// if i = Olaf then
101383: LD_VAR 0 1
101387: PUSH
101388: LD_EXP 11
101392: EQUAL
101393: IFFALSE 101409
// Say ( i , D18-Ola-2 ) else
101395: LD_VAR 0 1
101399: PPUSH
101400: LD_STRING D18-Ola-2
101402: PPUSH
101403: CALL_OW 88
101407: GO 101421
// Say ( i , D18-Mart-2 ) ;
101409: LD_VAR 0 1
101413: PPUSH
101414: LD_STRING D18-Mart-2
101416: PPUSH
101417: CALL_OW 88
// ForceSay ( Joan , D18-Jo-3 ) ;
101421: LD_EXP 28
101425: PPUSH
101426: LD_STRING D18-Jo-3
101428: PPUSH
101429: CALL_OW 91
// if i = Olaf then
101433: LD_VAR 0 1
101437: PUSH
101438: LD_EXP 11
101442: EQUAL
101443: IFFALSE 101459
// Say ( i , D18-Ola-3 ) else
101445: LD_VAR 0 1
101449: PPUSH
101450: LD_STRING D18-Ola-3
101452: PPUSH
101453: CALL_OW 88
101457: GO 101471
// Say ( i , D18-Mart-3 ) ;
101459: LD_VAR 0 1
101463: PPUSH
101464: LD_STRING D18-Mart-3
101466: PPUSH
101467: CALL_OW 88
// ForceSay ( Joan , D18-Jo-4 ) ;
101471: LD_EXP 28
101475: PPUSH
101476: LD_STRING D18-Jo-4
101478: PPUSH
101479: CALL_OW 91
// if i = Olaf then
101483: LD_VAR 0 1
101487: PUSH
101488: LD_EXP 11
101492: EQUAL
101493: IFFALSE 101509
// Say ( i , D18-Ola-4 ) else
101495: LD_VAR 0 1
101499: PPUSH
101500: LD_STRING D18-Ola-4
101502: PPUSH
101503: CALL_OW 88
101507: GO 101521
// Say ( i , D18-Mart-4 ) ;
101509: LD_VAR 0 1
101513: PPUSH
101514: LD_STRING D18-Mart-4
101516: PPUSH
101517: CALL_OW 88
// DialogueOff ;
101521: CALL_OW 7
// end ; end ; until alli_sib_needed = 0 ;
101525: LD_EXP 134
101529: PUSH
101530: LD_INT 0
101532: EQUAL
101533: IFFALSE 101175
// if alliance_deal_status <> 2 then
101535: LD_EXP 131
101539: PUSH
101540: LD_INT 2
101542: NONEQUAL
101543: IFFALSE 101547
// exit ;
101545: GO 101661
// ChangeMissionObjectives ( MOutGatherSib ) ;
101547: LD_STRING MOutGatherSib
101549: PPUSH
101550: CALL_OW 337
// ChangeMissionObjectives ( MDestroyRussians ) ;
101554: LD_STRING MDestroyRussians
101556: PPUSH
101557: CALL_OW 337
// alli_destroy_ru_objective_status = 1 ;
101561: LD_ADDR_EXP 139
101565: PUSH
101566: LD_INT 1
101568: ST_TO_ADDR
// Query ( QInfoTeleport ) ;
101569: LD_STRING QInfoTeleport
101571: PPUSH
101572: CALL_OW 97
// SetAreaMapShow ( alli_teleport_area , 1 ) ;
101576: LD_INT 20
101578: PPUSH
101579: LD_INT 1
101581: PPUSH
101582: CALL_OW 424
// repeat wait ( 0 0$1 ) ;
101586: LD_INT 35
101588: PPUSH
101589: CALL_OW 67
// if alliance_deal_status <> 2 then
101593: LD_EXP 131
101597: PUSH
101598: LD_INT 2
101600: NONEQUAL
101601: IFFALSE 101605
// exit ;
101603: GO 101661
// until not 1 in ai_bases ;
101605: LD_INT 1
101607: PUSH
101608: LD_EXP 39
101612: IN
101613: NOT
101614: IFFALSE 101586
// if 3 in ai_bases then
101616: LD_INT 3
101618: PUSH
101619: LD_EXP 39
101623: IN
101624: IFFALSE 101646
// begin DialogueOn ;
101626: CALL_OW 6
// ForceSay ( Heike , D28-H-1 ) ;
101630: LD_EXP 10
101634: PPUSH
101635: LD_STRING D28-H-1
101637: PPUSH
101638: CALL_OW 91
// DialogueOff ;
101642: CALL_OW 7
// end ; ChangeMissionObjectives ( MOutDestroyRussians ) ;
101646: LD_STRING MOutDestroyRussians
101648: PPUSH
101649: CALL_OW 337
// alli_destroy_ru_objective_status = 3 ;
101653: LD_ADDR_EXP 139
101657: PUSH
101658: LD_INT 3
101660: ST_TO_ADDR
// end ;
101661: PPOPN 5
101663: END
// every 0 0$1 trigger alli_destroy_ru_objective_status = 1 do var temp_list ; var dep ;
101664: LD_EXP 139
101668: PUSH
101669: LD_INT 1
101671: EQUAL
101672: IFFALSE 101873
101674: GO 101676
101676: DISABLE
101677: LD_INT 0
101679: PPUSH
101680: PPUSH
// begin repeat wait ( 0 0$1 ) ;
101681: LD_INT 35
101683: PPUSH
101684: CALL_OW 67
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_ok ] ] ) ;
101688: LD_ADDR_VAR 0 1
101692: PUSH
101693: LD_INT 22
101695: PUSH
101696: LD_EXP 2
101700: PUSH
101701: EMPTY
101702: LIST
101703: LIST
101704: PUSH
101705: LD_INT 2
101707: PUSH
101708: LD_INT 30
101710: PUSH
101711: LD_INT 0
101713: PUSH
101714: EMPTY
101715: LIST
101716: LIST
101717: PUSH
101718: LD_INT 30
101720: PUSH
101721: LD_INT 1
101723: PUSH
101724: EMPTY
101725: LIST
101726: LIST
101727: PUSH
101728: EMPTY
101729: LIST
101730: LIST
101731: LIST
101732: PUSH
101733: LD_INT 50
101735: PUSH
101736: EMPTY
101737: LIST
101738: PUSH
101739: EMPTY
101740: LIST
101741: LIST
101742: LIST
101743: PPUSH
101744: CALL_OW 69
101748: ST_TO_ADDR
// if temp_list = 0 then
101749: LD_VAR 0 1
101753: PUSH
101754: LD_INT 0
101756: EQUAL
101757: IFFALSE 101761
// continue ;
101759: GO 101681
// dep = temp_list [ 1 ] ;
101761: LD_ADDR_VAR 0 2
101765: PUSH
101766: LD_VAR 0 1
101770: PUSH
101771: LD_INT 1
101773: ARRAY
101774: ST_TO_ADDR
// SetArtifactUse ( you , art_use_teleport , art_instant , dep ) ;
101775: LD_EXP 2
101779: PPUSH
101780: LD_INT 6
101782: PPUSH
101783: LD_INT 2
101785: PPUSH
101786: LD_VAR 0 2
101790: PPUSH
101791: CALL_OW 468
// repeat wait ( 0 0$0.5 ) ;
101795: LD_INT 18
101797: PPUSH
101798: CALL_OW 67
// until alli_destroy_ru_objective_status = 2 or alliance_deal_status <> 2 or IsDead ( dep ) ;
101802: LD_EXP 139
101806: PUSH
101807: LD_INT 2
101809: EQUAL
101810: PUSH
101811: LD_EXP 131
101815: PUSH
101816: LD_INT 2
101818: NONEQUAL
101819: OR
101820: PUSH
101821: LD_VAR 0 2
101825: PPUSH
101826: CALL_OW 301
101830: OR
101831: IFFALSE 101795
// until alli_destroy_ru_objective_status = 2 or alliance_deal_status <> 2 ;
101833: LD_EXP 139
101837: PUSH
101838: LD_INT 2
101840: EQUAL
101841: PUSH
101842: LD_EXP 131
101846: PUSH
101847: LD_INT 2
101849: NONEQUAL
101850: OR
101851: IFFALSE 101681
// SetArtifactUse ( you , art_use_teleport , art_no , dep ) ;
101853: LD_EXP 2
101857: PPUSH
101858: LD_INT 6
101860: PPUSH
101861: LD_INT 0
101863: PPUSH
101864: LD_VAR 0 2
101868: PPUSH
101869: CALL_OW 468
// end ;
101873: PPOPN 2
101875: END
// export function ArtifactUsed_AlliFunc ( side , art_icon ) ; var i , un , b ; begin
101876: LD_INT 0
101878: PPUSH
101879: PPUSH
101880: PPUSH
101881: PPUSH
// case art_icon of art_use_teleport :
101882: LD_VAR 0 2
101886: PUSH
101887: LD_INT 6
101889: DOUBLE
101890: EQUAL
101891: IFTRUE 101895
101893: GO 102424
101895: POP
// begin if alliance_deal_status = 2 and alli_destroy_ru_objective_status = 1 then
101896: LD_EXP 131
101900: PUSH
101901: LD_INT 2
101903: EQUAL
101904: PUSH
101905: LD_EXP 139
101909: PUSH
101910: LD_INT 1
101912: EQUAL
101913: AND
101914: IFFALSE 102422
// begin if Query ( QTeleportConfirm ) = 2 then
101916: LD_STRING QTeleportConfirm
101918: PPUSH
101919: CALL_OW 97
101923: PUSH
101924: LD_INT 2
101926: EQUAL
101927: IFFALSE 101931
// exit ;
101929: GO 102425
// alli_destroy_ru_objective_status = 2 ;
101931: LD_ADDR_EXP 139
101935: PUSH
101936: LD_INT 2
101938: ST_TO_ADDR
// SetAreaMapShow ( alli_teleport_area , 0 ) ;
101939: LD_INT 20
101941: PPUSH
101942: LD_INT 0
101944: PPUSH
101945: CALL_OW 424
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , alli_teleport_area ] , [ f_type , unit_vehicle ] ] ) ^ FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , alli_teleport_area ] , [ f_type , unit_human ] , [ f_not , [ f_driving ] ] , [ f_not , [ f_inside ] ] ] ) do
101949: LD_ADDR_VAR 0 4
101953: PUSH
101954: LD_INT 22
101956: PUSH
101957: LD_EXP 2
101961: PUSH
101962: EMPTY
101963: LIST
101964: LIST
101965: PUSH
101966: LD_INT 95
101968: PUSH
101969: LD_INT 20
101971: PUSH
101972: EMPTY
101973: LIST
101974: LIST
101975: PUSH
101976: LD_INT 21
101978: PUSH
101979: LD_INT 2
101981: PUSH
101982: EMPTY
101983: LIST
101984: LIST
101985: PUSH
101986: EMPTY
101987: LIST
101988: LIST
101989: LIST
101990: PPUSH
101991: CALL_OW 69
101995: PUSH
101996: LD_INT 22
101998: PUSH
101999: LD_EXP 2
102003: PUSH
102004: EMPTY
102005: LIST
102006: LIST
102007: PUSH
102008: LD_INT 95
102010: PUSH
102011: LD_INT 20
102013: PUSH
102014: EMPTY
102015: LIST
102016: LIST
102017: PUSH
102018: LD_INT 21
102020: PUSH
102021: LD_INT 1
102023: PUSH
102024: EMPTY
102025: LIST
102026: LIST
102027: PUSH
102028: LD_INT 3
102030: PUSH
102031: LD_INT 55
102033: PUSH
102034: EMPTY
102035: LIST
102036: PUSH
102037: EMPTY
102038: LIST
102039: LIST
102040: PUSH
102041: LD_INT 3
102043: PUSH
102044: LD_INT 54
102046: PUSH
102047: EMPTY
102048: LIST
102049: PUSH
102050: EMPTY
102051: LIST
102052: LIST
102053: PUSH
102054: EMPTY
102055: LIST
102056: LIST
102057: LIST
102058: LIST
102059: LIST
102060: PPUSH
102061: CALL_OW 69
102065: ADD
102066: PUSH
102067: FOR_IN
102068: IFFALSE 102093
// begin TeleportUnit ( i , 14 , 4 , 20 , true ) ;
102070: LD_VAR 0 4
102074: PPUSH
102075: LD_INT 14
102077: PPUSH
102078: LD_INT 4
102080: PPUSH
102081: LD_INT 20
102083: PPUSH
102084: LD_INT 1
102086: PPUSH
102087: CALL_OW 483
// end ;
102091: GO 102067
102093: POP
102094: POP
// for i in FilterAllUnits ( [ [ f_side , russians ] , [ f_or , [ f_btype , b_siberite_power ] , [ f_bweapon , ru_time_lapser ] ] ] ) ^ FilterAllUnits ( [ [ f_side , russians ] , [ f_type , unit_vehicle ] , [ f_or , [ f_engine , engine_siberite ] , [ f_weapon , ru_time_lapser ] ] ] ) do
102095: LD_ADDR_VAR 0 4
102099: PUSH
102100: LD_INT 22
102102: PUSH
102103: LD_EXP 3
102107: PUSH
102108: EMPTY
102109: LIST
102110: LIST
102111: PUSH
102112: LD_INT 2
102114: PUSH
102115: LD_INT 30
102117: PUSH
102118: LD_INT 28
102120: PUSH
102121: EMPTY
102122: LIST
102123: LIST
102124: PUSH
102125: LD_INT 35
102127: PUSH
102128: LD_INT 49
102130: PUSH
102131: EMPTY
102132: LIST
102133: LIST
102134: PUSH
102135: EMPTY
102136: LIST
102137: LIST
102138: LIST
102139: PUSH
102140: EMPTY
102141: LIST
102142: LIST
102143: PPUSH
102144: CALL_OW 69
102148: PUSH
102149: LD_INT 22
102151: PUSH
102152: LD_EXP 3
102156: PUSH
102157: EMPTY
102158: LIST
102159: LIST
102160: PUSH
102161: LD_INT 21
102163: PUSH
102164: LD_INT 2
102166: PUSH
102167: EMPTY
102168: LIST
102169: LIST
102170: PUSH
102171: LD_INT 2
102173: PUSH
102174: LD_INT 32
102176: PUSH
102177: LD_INT 3
102179: PUSH
102180: EMPTY
102181: LIST
102182: LIST
102183: PUSH
102184: LD_INT 34
102186: PUSH
102187: LD_INT 49
102189: PUSH
102190: EMPTY
102191: LIST
102192: LIST
102193: PUSH
102194: EMPTY
102195: LIST
102196: LIST
102197: LIST
102198: PUSH
102199: EMPTY
102200: LIST
102201: LIST
102202: LIST
102203: PPUSH
102204: CALL_OW 69
102208: ADD
102209: PUSH
102210: FOR_IN
102211: IFFALSE 102224
// KillUnit ( i ) ;
102213: LD_VAR 0 4
102217: PPUSH
102218: CALL_OW 66
102222: GO 102210
102224: POP
102225: POP
// rus_enforce_vehicle_prod = true ;
102226: LD_ADDR_EXP 141
102230: PUSH
102231: LD_INT 1
102233: ST_TO_ADDR
// if difficulty = 3 then
102234: LD_OWVAR 67
102238: PUSH
102239: LD_INT 3
102241: EQUAL
102242: IFFALSE 102422
// begin wait ( 0 0$1.5 ) ;
102244: LD_INT 52
102246: PPUSH
102247: CALL_OW 67
// for i in rus_extra_def_locs do
102251: LD_ADDR_VAR 0 4
102255: PUSH
102256: LD_EXP 150
102260: PUSH
102261: FOR_IN
102262: IFFALSE 102420
// begin b = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
102264: LD_ADDR_VAR 0 6
102268: PUSH
102269: LD_VAR 0 4
102273: PUSH
102274: LD_INT 1
102276: ARRAY
102277: PPUSH
102278: LD_VAR 0 4
102282: PUSH
102283: LD_INT 2
102285: ARRAY
102286: PPUSH
102287: CALL_OW 428
102291: ST_TO_ADDR
// if b > 0 then
102292: LD_VAR 0 6
102296: PUSH
102297: LD_INT 0
102299: GREATER
102300: IFFALSE 102418
// if GetType ( b ) = unit_building then
102302: LD_VAR 0 6
102306: PPUSH
102307: CALL_OW 247
102311: PUSH
102312: LD_INT 3
102314: EQUAL
102315: IFFALSE 102418
// if GetBType ( b ) = b_breastwork and IsOk ( b ) then
102317: LD_VAR 0 6
102321: PPUSH
102322: CALL_OW 266
102326: PUSH
102327: LD_INT 31
102329: EQUAL
102330: PUSH
102331: LD_VAR 0 6
102335: PPUSH
102336: CALL_OW 302
102340: AND
102341: IFFALSE 102418
// begin un = UnitsInside ( b ) ;
102343: LD_ADDR_VAR 0 5
102347: PUSH
102348: LD_VAR 0 6
102352: PPUSH
102353: CALL_OW 313
102357: ST_TO_ADDR
// if un > 0 then
102358: LD_VAR 0 5
102362: PUSH
102363: LD_INT 0
102365: GREATER
102366: IFFALSE 102418
// if GetClass ( un ) = class_bazooker then
102368: LD_VAR 0 5
102372: PPUSH
102373: CALL_OW 257
102377: PUSH
102378: LD_INT 9
102380: EQUAL
102381: IFFALSE 102418
// ComSpaceShift ( un [ 1 ] , Rand ( 13 , 14 ) , Rand ( 3 , 4 ) ) ;
102383: LD_VAR 0 5
102387: PUSH
102388: LD_INT 1
102390: ARRAY
102391: PPUSH
102392: LD_INT 13
102394: PPUSH
102395: LD_INT 14
102397: PPUSH
102398: CALL_OW 12
102402: PPUSH
102403: LD_INT 3
102405: PPUSH
102406: LD_INT 4
102408: PPUSH
102409: CALL_OW 12
102413: PPUSH
102414: CALL_OW 153
// end ; end ;
102418: GO 102261
102420: POP
102421: POP
// end ; end ; end ; end ;
102422: GO 102425
102424: POP
// end ;
102425: LD_VAR 0 3
102429: RET
// every 0 0$1 + 0 0$0.5 trigger alliance_deal_status = 2 do var i ;
102430: LD_EXP 131
102434: PUSH
102435: LD_INT 2
102437: EQUAL
102438: IFFALSE 102686
102440: GO 102442
102442: DISABLE
102443: LD_INT 0
102445: PPUSH
// begin repeat wait ( 0 0$1 ) ;
102446: LD_INT 35
102448: PPUSH
102449: CALL_OW 67
// until ai_vehicles_attack [ 4 ] > 0 ;
102453: LD_EXP 68
102457: PUSH
102458: LD_INT 4
102460: ARRAY
102461: PUSH
102462: LD_INT 0
102464: GREATER
102465: IFFALSE 102446
// repeat wait ( 0 0$1 ) ;
102467: LD_INT 35
102469: PPUSH
102470: CALL_OW 67
// until UnitFilter ( ai_vehicles_attack [ 4 ] , [ f_ok ] ) = 0 ;
102474: LD_EXP 68
102478: PUSH
102479: LD_INT 4
102481: ARRAY
102482: PPUSH
102483: LD_INT 50
102485: PUSH
102486: EMPTY
102487: LIST
102488: PPUSH
102489: CALL_OW 72
102493: PUSH
102494: LD_INT 0
102496: EQUAL
102497: IFFALSE 102467
// american_arabian_alliance = true ;
102499: LD_ADDR_EXP 123
102503: PUSH
102504: LD_INT 1
102506: ST_TO_ADDR
// SetAttitude ( americans , arabians , att_friend , true ) ;
102507: LD_EXP 7
102511: PPUSH
102512: LD_EXP 6
102516: PPUSH
102517: LD_INT 1
102519: PPUSH
102520: LD_INT 1
102522: PPUSH
102523: CALL_OW 80
// repeat wait ( 0 0$1 ) ;
102527: LD_INT 35
102529: PPUSH
102530: CALL_OW 67
// until not 2 in ai_bases or not 4 in ai_bases or not 3 in ai_bases ;
102534: LD_INT 2
102536: PUSH
102537: LD_EXP 39
102541: IN
102542: NOT
102543: PUSH
102544: LD_INT 4
102546: PUSH
102547: LD_EXP 39
102551: IN
102552: NOT
102553: OR
102554: PUSH
102555: LD_INT 3
102557: PUSH
102558: LD_EXP 39
102562: IN
102563: NOT
102564: OR
102565: IFFALSE 102527
// american_arabian_alliance = false ;
102567: LD_ADDR_EXP 123
102571: PUSH
102572: LD_INT 0
102574: ST_TO_ADDR
// SetAttitude ( americans , arabians , att_enemy , true ) ;
102575: LD_EXP 7
102579: PPUSH
102580: LD_EXP 6
102584: PPUSH
102585: LD_INT 2
102587: PPUSH
102588: LD_INT 1
102590: PPUSH
102591: CALL_OW 80
// if am_ar_attack_alli_together and 3 in ai_bases and 4 in ai_bases then
102595: LD_EXP 126
102599: PUSH
102600: LD_INT 3
102602: PUSH
102603: LD_EXP 39
102607: IN
102608: AND
102609: PUSH
102610: LD_INT 4
102612: PUSH
102613: LD_EXP 39
102617: IN
102618: AND
102619: IFFALSE 102686
// begin for i in ai_vehicles_attack [ 3 ] do
102621: LD_ADDR_VAR 0 1
102625: PUSH
102626: LD_EXP 68
102630: PUSH
102631: LD_INT 3
102633: ARRAY
102634: PUSH
102635: FOR_IN
102636: IFFALSE 102663
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , i , 3 ) ;
102638: LD_ADDR_EXP 93
102642: PUSH
102643: LD_EXP 93
102647: PPUSH
102648: LD_VAR 0 1
102652: PPUSH
102653: LD_INT 3
102655: PPUSH
102656: CALL_OW 1
102660: ST_TO_ADDR
102661: GO 102635
102663: POP
102664: POP
// ai_attack_strategy = Replace ( ai_attack_strategy , 3 , 1 ) ;
102665: LD_ADDR_EXP 102
102669: PUSH
102670: LD_EXP 102
102674: PPUSH
102675: LD_INT 3
102677: PPUSH
102678: LD_INT 1
102680: PPUSH
102681: CALL_OW 1
102685: ST_TO_ADDR
// end ; end ;
102686: PPOPN 1
102688: END
// every 0 0$1 + 0 0$0.5 trigger american_arabian_alliance do var temp_list , i ;
102689: LD_EXP 123
102693: IFFALSE 102869
102695: GO 102697
102697: DISABLE
102698: LD_INT 0
102700: PPUSH
102701: PPUSH
// begin repeat wait ( 0 0$2 ) ;
102702: LD_INT 70
102704: PPUSH
102705: CALL_OW 67
// if alliance_deal_status <> 2 then
102709: LD_EXP 131
102713: PUSH
102714: LD_INT 2
102716: NONEQUAL
102717: IFFALSE 102721
// exit ;
102719: GO 102869
// temp_list = [ ] ;
102721: LD_ADDR_VAR 0 1
102725: PUSH
102726: EMPTY
102727: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , arabians ] , [ f_type , unit_vehicle ] , [ f_see , you ] ] ) do
102728: LD_ADDR_VAR 0 2
102732: PUSH
102733: LD_INT 22
102735: PUSH
102736: LD_EXP 6
102740: PUSH
102741: EMPTY
102742: LIST
102743: LIST
102744: PUSH
102745: LD_INT 21
102747: PUSH
102748: LD_INT 2
102750: PUSH
102751: EMPTY
102752: LIST
102753: LIST
102754: PUSH
102755: LD_INT 101
102757: PUSH
102758: LD_EXP 2
102762: PUSH
102763: EMPTY
102764: LIST
102765: LIST
102766: PUSH
102767: EMPTY
102768: LIST
102769: LIST
102770: LIST
102771: PPUSH
102772: CALL_OW 69
102776: PUSH
102777: FOR_IN
102778: IFFALSE 102828
// if GetX ( i ) <= 126 and GetY ( i ) >= 136 then
102780: LD_VAR 0 2
102784: PPUSH
102785: CALL_OW 250
102789: PUSH
102790: LD_INT 126
102792: LESSEQUAL
102793: PUSH
102794: LD_VAR 0 2
102798: PPUSH
102799: CALL_OW 251
102803: PUSH
102804: LD_INT 136
102806: GREATEREQUAL
102807: AND
102808: IFFALSE 102826
// temp_list = temp_list ^ i ;
102810: LD_ADDR_VAR 0 1
102814: PUSH
102815: LD_VAR 0 1
102819: PUSH
102820: LD_VAR 0 2
102824: ADD
102825: ST_TO_ADDR
102826: GO 102777
102828: POP
102829: POP
// until temp_list > 0 ;
102830: LD_VAR 0 1
102834: PUSH
102835: LD_INT 0
102837: GREATER
102838: IFFALSE 102702
// CenterOnUnits ( temp_list ) ;
102840: LD_VAR 0 1
102844: PPUSH
102845: CALL_OW 85
// DialogueOn ;
102849: CALL_OW 6
// ForceSay ( Heike , D15-H-1 ) ;
102853: LD_EXP 10
102857: PPUSH
102858: LD_STRING D15-H-1
102860: PPUSH
102861: CALL_OW 91
// DialogueOff ;
102865: CALL_OW 7
// end ; end_of_file
102869: PPOPN 2
102871: END
// var art_icon_lab , art_research_lab , art_icon_research , art_icon_use , art_research_progress , art_price ; var art_research_difficulty , art_observe_info , art_tele_countdown_in_progress ; export function InitArtifactVariables ; begin
102872: LD_INT 0
102874: PPUSH
// art_icon_lab = [ [ ] , - 1 , 0 , 0 , 0 ] ;
102875: LD_ADDR_LOC 3
102879: PUSH
102880: EMPTY
102881: PUSH
102882: LD_INT 1
102884: NEG
102885: PUSH
102886: LD_INT 0
102888: PUSH
102889: LD_INT 0
102891: PUSH
102892: LD_INT 0
102894: PUSH
102895: EMPTY
102896: LIST
102897: LIST
102898: LIST
102899: LIST
102900: LIST
102901: ST_TO_ADDR
// art_research_lab = [ 0 , - 1 , 0 , 0 , 0 ] ;
102902: LD_ADDR_LOC 4
102906: PUSH
102907: LD_INT 0
102909: PUSH
102910: LD_INT 1
102912: NEG
102913: PUSH
102914: LD_INT 0
102916: PUSH
102917: LD_INT 0
102919: PUSH
102920: LD_INT 0
102922: PUSH
102923: EMPTY
102924: LIST
102925: LIST
102926: LIST
102927: LIST
102928: LIST
102929: ST_TO_ADDR
// art_icon_research = [ - 1 , - 1 , art_exp_left , art_exp_mid , art_exp_right ] ;
102930: LD_ADDR_LOC 5
102934: PUSH
102935: LD_INT 1
102937: NEG
102938: PUSH
102939: LD_INT 1
102941: NEG
102942: PUSH
102943: LD_INT 1
102945: PUSH
102946: LD_INT 2
102948: PUSH
102949: LD_INT 3
102951: PUSH
102952: EMPTY
102953: LIST
102954: LIST
102955: LIST
102956: LIST
102957: LIST
102958: ST_TO_ADDR
// art_icon_use = [ - 1 , - 1 , art_use_eye , art_use_sibexplosion , art_use_teleport ] ;
102959: LD_ADDR_LOC 6
102963: PUSH
102964: LD_INT 1
102966: NEG
102967: PUSH
102968: LD_INT 1
102970: NEG
102971: PUSH
102972: LD_INT 4
102974: PUSH
102975: LD_INT 5
102977: PUSH
102978: LD_INT 6
102980: PUSH
102981: EMPTY
102982: LIST
102983: LIST
102984: LIST
102985: LIST
102986: LIST
102987: ST_TO_ADDR
// art_research_progress = [ - 1 , - 1 , 0 , 0 , 0 ] ;
102988: LD_ADDR_LOC 7
102992: PUSH
102993: LD_INT 1
102995: NEG
102996: PUSH
102997: LD_INT 1
102999: NEG
103000: PUSH
103001: LD_INT 0
103003: PUSH
103004: LD_INT 0
103006: PUSH
103007: LD_INT 0
103009: PUSH
103010: EMPTY
103011: LIST
103012: LIST
103013: LIST
103014: LIST
103015: LIST
103016: ST_TO_ADDR
// art_price = [ - 1 , - 1 , 3 , 8 , 50 ] ;
103017: LD_ADDR_LOC 8
103021: PUSH
103022: LD_INT 1
103024: NEG
103025: PUSH
103026: LD_INT 1
103028: NEG
103029: PUSH
103030: LD_INT 3
103032: PUSH
103033: LD_INT 8
103035: PUSH
103036: LD_INT 50
103038: PUSH
103039: EMPTY
103040: LIST
103041: LIST
103042: LIST
103043: LIST
103044: LIST
103045: ST_TO_ADDR
// art_research_difficulty = [ - 1 , - 1 , 150 , 300 , 500 ] ;
103046: LD_ADDR_LOC 9
103050: PUSH
103051: LD_INT 1
103053: NEG
103054: PUSH
103055: LD_INT 1
103057: NEG
103058: PUSH
103059: LD_INT 150
103061: PUSH
103062: LD_INT 300
103064: PUSH
103065: LD_INT 500
103067: PUSH
103068: EMPTY
103069: LIST
103070: LIST
103071: LIST
103072: LIST
103073: LIST
103074: ST_TO_ADDR
// art_observe_info = [ ] ;
103075: LD_ADDR_LOC 10
103079: PUSH
103080: EMPTY
103081: ST_TO_ADDR
// art_tele_countdown_in_progress = false ;
103082: LD_ADDR_LOC 11
103086: PUSH
103087: LD_INT 0
103089: ST_TO_ADDR
// end ;
103090: LD_VAR 0 1
103094: RET
// every 0 0$1 + 0 0$0.7 do var i , hex , seen , temp_list , art ;
103095: GO 103097
103097: DISABLE
103098: LD_INT 0
103100: PPUSH
103101: PPUSH
103102: PPUSH
103103: PPUSH
103104: PPUSH
// begin seen = false ;
103105: LD_ADDR_VAR 0 3
103109: PUSH
103110: LD_INT 0
103112: ST_TO_ADDR
// art = 0 ;
103113: LD_ADDR_VAR 0 5
103117: PUSH
103118: LD_INT 0
103120: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
103121: LD_INT 18
103123: PPUSH
103124: CALL_OW 67
// for i = 3 to 5 do
103128: LD_ADDR_VAR 0 1
103132: PUSH
103133: DOUBLE
103134: LD_INT 3
103136: DEC
103137: ST_TO_ADDR
103138: LD_INT 5
103140: PUSH
103141: FOR_TO
103142: IFFALSE 103220
// begin hex = FindArtifact ( i ) ;
103144: LD_ADDR_VAR 0 2
103148: PUSH
103149: LD_VAR 0 1
103153: PPUSH
103154: CALL_OW 469
103158: ST_TO_ADDR
// if hex > 0 then
103159: LD_VAR 0 2
103163: PUSH
103164: LD_INT 0
103166: GREATER
103167: IFFALSE 103218
// if SeeXY ( you , hex [ 1 ] , hex [ 2 ] ) then
103169: LD_EXP 2
103173: PPUSH
103174: LD_VAR 0 2
103178: PUSH
103179: LD_INT 1
103181: ARRAY
103182: PPUSH
103183: LD_VAR 0 2
103187: PUSH
103188: LD_INT 2
103190: ARRAY
103191: PPUSH
103192: CALL_OW 293
103196: IFFALSE 103218
// begin seen = true ;
103198: LD_ADDR_VAR 0 3
103202: PUSH
103203: LD_INT 1
103205: ST_TO_ADDR
// art = i ;
103206: LD_ADDR_VAR 0 5
103210: PUSH
103211: LD_VAR 0 1
103215: ST_TO_ADDR
// break ;
103216: GO 103220
// end ; end ;
103218: GO 103141
103220: POP
103221: POP
// until seen ;
103222: LD_VAR 0 3
103226: IFFALSE 103121
// DialogueOn ;
103228: CALL_OW 6
// CenterOnXY ( hex [ 1 ] , hex [ 2 ] ) ;
103232: LD_VAR 0 2
103236: PUSH
103237: LD_INT 1
103239: ARRAY
103240: PPUSH
103241: LD_VAR 0 2
103245: PUSH
103246: LD_INT 2
103248: ARRAY
103249: PPUSH
103250: CALL_OW 84
// temp_list = UnitFilter ( [ Olaf , Sonya , Kowalski ] , [ f_ok ] ) ;
103254: LD_ADDR_VAR 0 4
103258: PUSH
103259: LD_EXP 11
103263: PUSH
103264: LD_EXP 12
103268: PUSH
103269: LD_EXP 15
103273: PUSH
103274: EMPTY
103275: LIST
103276: LIST
103277: LIST
103278: PPUSH
103279: LD_INT 50
103281: PUSH
103282: EMPTY
103283: LIST
103284: PPUSH
103285: CALL_OW 72
103289: ST_TO_ADDR
// if temp_list > 0 then
103290: LD_VAR 0 4
103294: PUSH
103295: LD_INT 0
103297: GREATER
103298: IFFALSE 103419
// begin i = Rand ( 1 , temp_list + 0 ) ;
103300: LD_ADDR_VAR 0 1
103304: PUSH
103305: LD_INT 1
103307: PPUSH
103308: LD_VAR 0 4
103312: PUSH
103313: LD_INT 0
103315: PLUS
103316: PPUSH
103317: CALL_OW 12
103321: ST_TO_ADDR
// i = temp_list [ i ] ;
103322: LD_ADDR_VAR 0 1
103326: PUSH
103327: LD_VAR 0 4
103331: PUSH
103332: LD_VAR 0 1
103336: ARRAY
103337: ST_TO_ADDR
// case i of Olaf :
103338: LD_VAR 0 1
103342: PUSH
103343: LD_EXP 11
103347: DOUBLE
103348: EQUAL
103349: IFTRUE 103353
103351: GO 103368
103353: POP
// Say ( i , D22-Ola-1 ) ; Sonya :
103354: LD_VAR 0 1
103358: PPUSH
103359: LD_STRING D22-Ola-1
103361: PPUSH
103362: CALL_OW 88
103366: GO 103419
103368: LD_EXP 12
103372: DOUBLE
103373: EQUAL
103374: IFTRUE 103378
103376: GO 103393
103378: POP
// Say ( i , D22-So-1 ) ; Kowalski :
103379: LD_VAR 0 1
103383: PPUSH
103384: LD_STRING D22-So-1
103386: PPUSH
103387: CALL_OW 88
103391: GO 103419
103393: LD_EXP 15
103397: DOUBLE
103398: EQUAL
103399: IFTRUE 103403
103401: GO 103418
103403: POP
// Say ( i , D22-Kow-1 ) ; end ;
103404: LD_VAR 0 1
103408: PPUSH
103409: LD_STRING D22-Kow-1
103411: PPUSH
103412: CALL_OW 88
103416: GO 103419
103418: POP
// end ; if art = 4 then
103419: LD_VAR 0 5
103423: PUSH
103424: LD_INT 4
103426: EQUAL
103427: IFFALSE 103443
// ForceSay ( Heike , D22-H-1a ) else
103429: LD_EXP 10
103433: PPUSH
103434: LD_STRING D22-H-1a
103436: PPUSH
103437: CALL_OW 91
103441: GO 103455
// ForceSay ( Heike , D22-H-1b ) ;
103443: LD_EXP 10
103447: PPUSH
103448: LD_STRING D22-H-1b
103450: PPUSH
103451: CALL_OW 91
// if not alliance_deal_status in [ 1 , 2 ] then
103455: LD_EXP 131
103459: PUSH
103460: LD_INT 1
103462: PUSH
103463: LD_INT 2
103465: PUSH
103466: EMPTY
103467: LIST
103468: LIST
103469: IN
103470: NOT
103471: IFFALSE 103698
// begin temp_list = UnitFilter ( [ Sonya , Kowalski , Kurt , Kyouma ] , [ f_ok ] ) ;
103473: LD_ADDR_VAR 0 4
103477: PUSH
103478: LD_EXP 12
103482: PUSH
103483: LD_EXP 15
103487: PUSH
103488: LD_EXP 18
103492: PUSH
103493: LD_EXP 24
103497: PUSH
103498: EMPTY
103499: LIST
103500: LIST
103501: LIST
103502: LIST
103503: PPUSH
103504: LD_INT 50
103506: PUSH
103507: EMPTY
103508: LIST
103509: PPUSH
103510: CALL_OW 72
103514: ST_TO_ADDR
// if temp_list > 0 then
103515: LD_VAR 0 4
103519: PUSH
103520: LD_INT 0
103522: GREATER
103523: IFFALSE 103671
// begin i = Rand ( 1 , temp_list + 0 ) ;
103525: LD_ADDR_VAR 0 1
103529: PUSH
103530: LD_INT 1
103532: PPUSH
103533: LD_VAR 0 4
103537: PUSH
103538: LD_INT 0
103540: PLUS
103541: PPUSH
103542: CALL_OW 12
103546: ST_TO_ADDR
// i = temp_list [ i ] ;
103547: LD_ADDR_VAR 0 1
103551: PUSH
103552: LD_VAR 0 4
103556: PUSH
103557: LD_VAR 0 1
103561: ARRAY
103562: ST_TO_ADDR
// case i of Sonya :
103563: LD_VAR 0 1
103567: PUSH
103568: LD_EXP 12
103572: DOUBLE
103573: EQUAL
103574: IFTRUE 103578
103576: GO 103593
103578: POP
// Say ( i , D22-So-2 ) ; Kowalski :
103579: LD_VAR 0 1
103583: PPUSH
103584: LD_STRING D22-So-2
103586: PPUSH
103587: CALL_OW 88
103591: GO 103669
103593: LD_EXP 15
103597: DOUBLE
103598: EQUAL
103599: IFTRUE 103603
103601: GO 103618
103603: POP
// Say ( i , D22-Kow-2 ) ; Kurt :
103604: LD_VAR 0 1
103608: PPUSH
103609: LD_STRING D22-Kow-2
103611: PPUSH
103612: CALL_OW 88
103616: GO 103669
103618: LD_EXP 18
103622: DOUBLE
103623: EQUAL
103624: IFTRUE 103628
103626: GO 103643
103628: POP
// Say ( i , D22-Ku-1 ) ; Kyouma :
103629: LD_VAR 0 1
103633: PPUSH
103634: LD_STRING D22-Ku-1
103636: PPUSH
103637: CALL_OW 88
103641: GO 103669
103643: LD_EXP 24
103647: DOUBLE
103648: EQUAL
103649: IFTRUE 103653
103651: GO 103668
103653: POP
// Say ( i , D22-Kyo-1 ) ; end ;
103654: LD_VAR 0 1
103658: PPUSH
103659: LD_STRING D22-Kyo-1
103661: PPUSH
103662: CALL_OW 88
103666: GO 103669
103668: POP
// end else
103669: GO 103683
// ForceSay ( Heike , D22-H-2 ) ;
103671: LD_EXP 10
103675: PPUSH
103676: LD_STRING D22-H-2
103678: PPUSH
103679: CALL_OW 91
// SetTech ( tech_artifact , you , state_enabled ) ;
103683: LD_INT 24
103685: PPUSH
103686: LD_EXP 2
103690: PPUSH
103691: LD_INT 1
103693: PPUSH
103694: CALL_OW 322
// end ; DialogueOff ;
103698: CALL_OW 7
// if GetTech ( tech_artifact , you ) <> state_enabled then
103702: LD_INT 24
103704: PPUSH
103705: LD_EXP 2
103709: PPUSH
103710: CALL_OW 321
103714: PUSH
103715: LD_INT 1
103717: NONEQUAL
103718: IFFALSE 103940
// begin repeat wait ( 0 0$1 ) ;
103720: LD_INT 35
103722: PPUSH
103723: CALL_OW 67
// until not 2 in ai_bases ;
103727: LD_INT 2
103729: PUSH
103730: LD_EXP 39
103734: IN
103735: NOT
103736: IFFALSE 103720
// DialogueOn ;
103738: CALL_OW 6
// temp_list = UnitFilter ( [ Kowalski , Kurt , Kyouma ] , [ f_ok ] ) ;
103742: LD_ADDR_VAR 0 4
103746: PUSH
103747: LD_EXP 15
103751: PUSH
103752: LD_EXP 18
103756: PUSH
103757: LD_EXP 24
103761: PUSH
103762: EMPTY
103763: LIST
103764: LIST
103765: LIST
103766: PPUSH
103767: LD_INT 50
103769: PUSH
103770: EMPTY
103771: LIST
103772: PPUSH
103773: CALL_OW 72
103777: ST_TO_ADDR
// if temp_list > 0 then
103778: LD_VAR 0 4
103782: PUSH
103783: LD_INT 0
103785: GREATER
103786: IFFALSE 103909
// begin i = Rand ( 1 , temp_list + 0 ) ;
103788: LD_ADDR_VAR 0 1
103792: PUSH
103793: LD_INT 1
103795: PPUSH
103796: LD_VAR 0 4
103800: PUSH
103801: LD_INT 0
103803: PLUS
103804: PPUSH
103805: CALL_OW 12
103809: ST_TO_ADDR
// i = temp_list [ i ] ;
103810: LD_ADDR_VAR 0 1
103814: PUSH
103815: LD_VAR 0 4
103819: PUSH
103820: LD_VAR 0 1
103824: ARRAY
103825: ST_TO_ADDR
// case i of Kowalski :
103826: LD_VAR 0 1
103830: PUSH
103831: LD_EXP 15
103835: DOUBLE
103836: EQUAL
103837: IFTRUE 103841
103839: GO 103856
103841: POP
// Say ( i , D22-Kow-3 ) ; Kurt :
103842: LD_VAR 0 1
103846: PPUSH
103847: LD_STRING D22-Kow-3
103849: PPUSH
103850: CALL_OW 88
103854: GO 103907
103856: LD_EXP 18
103860: DOUBLE
103861: EQUAL
103862: IFTRUE 103866
103864: GO 103881
103866: POP
// Say ( i , D22-Ku-2 ) ; Kyouma :
103867: LD_VAR 0 1
103871: PPUSH
103872: LD_STRING D22-Ku-2
103874: PPUSH
103875: CALL_OW 88
103879: GO 103907
103881: LD_EXP 24
103885: DOUBLE
103886: EQUAL
103887: IFTRUE 103891
103889: GO 103906
103891: POP
// Say ( i , D22-Kyo-2 ) ; end ;
103892: LD_VAR 0 1
103896: PPUSH
103897: LD_STRING D22-Kyo-2
103899: PPUSH
103900: CALL_OW 88
103904: GO 103907
103906: POP
// end else
103907: GO 103921
// ForceSay ( Heike , D22-H-3 ) ;
103909: LD_EXP 10
103913: PPUSH
103914: LD_STRING D22-H-3
103916: PPUSH
103917: CALL_OW 91
// DialogueOff ;
103921: CALL_OW 7
// SetTech ( tech_artifact , you , state_enabled ) ;
103925: LD_INT 24
103927: PPUSH
103928: LD_EXP 2
103932: PPUSH
103933: LD_INT 1
103935: PPUSH
103936: CALL_OW 322
// end ; end ;
103940: PPOPN 5
103942: END
// every 0 0$1 + 0 0$0.5 do var i , temp_list ;
103943: GO 103945
103945: DISABLE
103946: LD_INT 0
103948: PPUSH
103949: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
103950: LD_INT 18
103952: PPUSH
103953: CALL_OW 67
// until See ( you , alien_tower ) ;
103957: LD_EXP 2
103961: PPUSH
103962: LD_INT 1
103964: PPUSH
103965: CALL_OW 292
103969: IFFALSE 103950
// DialogueOn ;
103971: CALL_OW 6
// CenterOnUnits ( alien_tower ) ;
103975: LD_INT 1
103977: PPUSH
103978: CALL_OW 85
// temp_list = UnitFilter ( [ Sonya , Oswald , Suze , MarkB ] , [ f_ok ] ) ;
103982: LD_ADDR_VAR 0 2
103986: PUSH
103987: LD_EXP 12
103991: PUSH
103992: LD_EXP 13
103996: PUSH
103997: LD_EXP 16
104001: PUSH
104002: LD_EXP 17
104006: PUSH
104007: EMPTY
104008: LIST
104009: LIST
104010: LIST
104011: LIST
104012: PPUSH
104013: LD_INT 50
104015: PUSH
104016: EMPTY
104017: LIST
104018: PPUSH
104019: CALL_OW 72
104023: ST_TO_ADDR
// if temp_list = 0 then
104024: LD_VAR 0 2
104028: PUSH
104029: LD_INT 0
104031: EQUAL
104032: IFFALSE 104047
// temp_list = [ Heike ] ;
104034: LD_ADDR_VAR 0 2
104038: PUSH
104039: LD_EXP 10
104043: PUSH
104044: EMPTY
104045: LIST
104046: ST_TO_ADDR
// i = Rand ( 1 , temp_list + 0 ) ;
104047: LD_ADDR_VAR 0 1
104051: PUSH
104052: LD_INT 1
104054: PPUSH
104055: LD_VAR 0 2
104059: PUSH
104060: LD_INT 0
104062: PLUS
104063: PPUSH
104064: CALL_OW 12
104068: ST_TO_ADDR
// i = temp_list [ i ] ;
104069: LD_ADDR_VAR 0 1
104073: PUSH
104074: LD_VAR 0 2
104078: PUSH
104079: LD_VAR 0 1
104083: ARRAY
104084: ST_TO_ADDR
// case i of Sonya :
104085: LD_VAR 0 1
104089: PUSH
104090: LD_EXP 12
104094: DOUBLE
104095: EQUAL
104096: IFTRUE 104100
104098: GO 104115
104100: POP
// Say ( i , D23-So-1 ) ; Oswald :
104101: LD_VAR 0 1
104105: PPUSH
104106: LD_STRING D23-So-1
104108: PPUSH
104109: CALL_OW 88
104113: GO 104216
104115: LD_EXP 13
104119: DOUBLE
104120: EQUAL
104121: IFTRUE 104125
104123: GO 104140
104125: POP
// Say ( i , D23-Os-1 ) ; Suze :
104126: LD_VAR 0 1
104130: PPUSH
104131: LD_STRING D23-Os-1
104133: PPUSH
104134: CALL_OW 88
104138: GO 104216
104140: LD_EXP 16
104144: DOUBLE
104145: EQUAL
104146: IFTRUE 104150
104148: GO 104165
104150: POP
// Say ( i , D23-Su-1 ) ; MarkB :
104151: LD_VAR 0 1
104155: PPUSH
104156: LD_STRING D23-Su-1
104158: PPUSH
104159: CALL_OW 88
104163: GO 104216
104165: LD_EXP 17
104169: DOUBLE
104170: EQUAL
104171: IFTRUE 104175
104173: GO 104190
104175: POP
// Say ( i , D23-Mark-1 ) ; Heike :
104176: LD_VAR 0 1
104180: PPUSH
104181: LD_STRING D23-Mark-1
104183: PPUSH
104184: CALL_OW 88
104188: GO 104216
104190: LD_EXP 10
104194: DOUBLE
104195: EQUAL
104196: IFTRUE 104200
104198: GO 104215
104200: POP
// ForceSay ( i , D23-H-1 ) ; end ;
104201: LD_VAR 0 1
104205: PPUSH
104206: LD_STRING D23-H-1
104208: PPUSH
104209: CALL_OW 91
104213: GO 104216
104215: POP
// ForceSay ( Heike , D23-H-2 ) ;
104216: LD_EXP 10
104220: PPUSH
104221: LD_STRING D23-H-2
104223: PPUSH
104224: CALL_OW 91
// if IsOk ( Ralph ) then
104228: LD_EXP 14
104232: PPUSH
104233: CALL_OW 302
104237: IFFALSE 104251
// Say ( Ralph , D23-Ra-1 ) ;
104239: LD_EXP 14
104243: PPUSH
104244: LD_STRING D23-Ra-1
104246: PPUSH
104247: CALL_OW 88
// temp_list = UnitFilter ( [ Sonya , MarkB ] , [ f_ok ] ) ;
104251: LD_ADDR_VAR 0 2
104255: PUSH
104256: LD_EXP 12
104260: PUSH
104261: LD_EXP 17
104265: PUSH
104266: EMPTY
104267: LIST
104268: LIST
104269: PPUSH
104270: LD_INT 50
104272: PUSH
104273: EMPTY
104274: LIST
104275: PPUSH
104276: CALL_OW 72
104280: ST_TO_ADDR
// if temp_list = 0 then
104281: LD_VAR 0 2
104285: PUSH
104286: LD_INT 0
104288: EQUAL
104289: IFFALSE 104304
// temp_list = [ Heike ] ;
104291: LD_ADDR_VAR 0 2
104295: PUSH
104296: LD_EXP 10
104300: PUSH
104301: EMPTY
104302: LIST
104303: ST_TO_ADDR
// i = Rand ( 1 , temp_list + 0 ) ;
104304: LD_ADDR_VAR 0 1
104308: PUSH
104309: LD_INT 1
104311: PPUSH
104312: LD_VAR 0 2
104316: PUSH
104317: LD_INT 0
104319: PLUS
104320: PPUSH
104321: CALL_OW 12
104325: ST_TO_ADDR
// i = temp_list [ i ] ;
104326: LD_ADDR_VAR 0 1
104330: PUSH
104331: LD_VAR 0 2
104335: PUSH
104336: LD_VAR 0 1
104340: ARRAY
104341: ST_TO_ADDR
// case i of Sonya :
104342: LD_VAR 0 1
104346: PUSH
104347: LD_EXP 12
104351: DOUBLE
104352: EQUAL
104353: IFTRUE 104357
104355: GO 104372
104357: POP
// Say ( i , D23-So-2 ) ; MarkB :
104358: LD_VAR 0 1
104362: PPUSH
104363: LD_STRING D23-So-2
104365: PPUSH
104366: CALL_OW 88
104370: GO 104423
104372: LD_EXP 17
104376: DOUBLE
104377: EQUAL
104378: IFTRUE 104382
104380: GO 104397
104382: POP
// Say ( i , D23-Mark-2 ) ; Heike :
104383: LD_VAR 0 1
104387: PPUSH
104388: LD_STRING D23-Mark-2
104390: PPUSH
104391: CALL_OW 88
104395: GO 104423
104397: LD_EXP 10
104401: DOUBLE
104402: EQUAL
104403: IFTRUE 104407
104405: GO 104422
104407: POP
// ForceSay ( i , D23-H-3 ) ; end ;
104408: LD_VAR 0 1
104412: PPUSH
104413: LD_STRING D23-H-3
104415: PPUSH
104416: CALL_OW 91
104420: GO 104423
104422: POP
// DialogueOff ;
104423: CALL_OW 7
// end ;
104427: PPOPN 2
104429: END
// on ArtifactLoaded ( cargo_bay , artifact ) do var i , temp_list ;
104430: LD_INT 0
104432: PPUSH
104433: PPUSH
// begin ArtifactLoaded_AlliFunc ( cargo_bay , artifact ) ;
104434: LD_VAR 0 1
104438: PPUSH
104439: LD_VAR 0 2
104443: PPUSH
104444: CALL 98453 0 2
// if GetTech ( tech_artifact , you ) <> state_researched then
104448: LD_INT 24
104450: PPUSH
104451: LD_EXP 2
104455: PPUSH
104456: CALL_OW 321
104460: PUSH
104461: LD_INT 2
104463: NONEQUAL
104464: IFFALSE 104556
// begin art_icon_lab = Replace ( art_icon_lab , 1 , [ ] ) ;
104466: LD_ADDR_LOC 3
104470: PUSH
104471: LD_LOC 3
104475: PPUSH
104476: LD_INT 1
104478: PPUSH
104479: EMPTY
104480: PPUSH
104481: CALL_OW 1
104485: ST_TO_ADDR
// for i = 3 to 5 do
104486: LD_ADDR_VAR 0 3
104490: PUSH
104491: DOUBLE
104492: LD_INT 3
104494: DEC
104495: ST_TO_ADDR
104496: LD_INT 5
104498: PUSH
104499: FOR_TO
104500: IFFALSE 104513
// ArtifactUnloaded_ArtiFunc ( i ) ;
104502: LD_VAR 0 3
104506: PPUSH
104507: CALL 104775 0 1
104511: GO 104499
104513: POP
104514: POP
// if art_icon_lab [ 1 ] = 0 then
104515: LD_LOC 3
104519: PUSH
104520: LD_INT 1
104522: ARRAY
104523: PUSH
104524: LD_INT 0
104526: EQUAL
104527: IFFALSE 104554
// begin ComCancel ( art_research_lab [ 1 ] ) ;
104529: LD_LOC 4
104533: PUSH
104534: LD_INT 1
104536: ARRAY
104537: PPUSH
104538: CALL_OW 127
// SetArtifactRes ( you , false ) ;
104542: LD_EXP 2
104546: PPUSH
104547: LD_INT 0
104549: PPUSH
104550: CALL_OW 467
// end ; end else
104554: GO 104760
// if art_icon_lab [ artifact ] > 0 or art_research_lab [ artifact ] > 0 then
104556: LD_LOC 3
104560: PUSH
104561: LD_VAR 0 2
104565: ARRAY
104566: PUSH
104567: LD_INT 0
104569: GREATER
104570: PUSH
104571: LD_LOC 4
104575: PUSH
104576: LD_VAR 0 2
104580: ARRAY
104581: PUSH
104582: LD_INT 0
104584: GREATER
104585: OR
104586: IFFALSE 104760
// begin if art_research_progress [ artifact ] < 100 then
104588: LD_LOC 7
104592: PUSH
104593: LD_VAR 0 2
104597: ARRAY
104598: PUSH
104599: LD_INT 100
104601: LESS
104602: IFFALSE 104687
// begin if art_research_lab [ artifact ] > 0 then
104604: LD_LOC 4
104608: PUSH
104609: LD_VAR 0 2
104613: ARRAY
104614: PUSH
104615: LD_INT 0
104617: GREATER
104618: IFFALSE 104635
// ComCancel ( art_research_lab [ artifact ] ) ;
104620: LD_LOC 4
104624: PUSH
104625: LD_VAR 0 2
104629: ARRAY
104630: PPUSH
104631: CALL_OW 127
// if art_icon_lab [ artifact ] > 0 then
104635: LD_LOC 3
104639: PUSH
104640: LD_VAR 0 2
104644: ARRAY
104645: PUSH
104646: LD_INT 0
104648: GREATER
104649: IFFALSE 104685
// SetArtifactUse ( you , art_icon_research [ artifact ] , art_no , art_icon_lab [ artifact ] ) ;
104651: LD_EXP 2
104655: PPUSH
104656: LD_LOC 5
104660: PUSH
104661: LD_VAR 0 2
104665: ARRAY
104666: PPUSH
104667: LD_INT 0
104669: PPUSH
104670: LD_LOC 3
104674: PUSH
104675: LD_VAR 0 2
104679: ARRAY
104680: PPUSH
104681: CALL_OW 468
// end else
104685: GO 104737
// if art_icon_lab [ artifact ] > 0 then
104687: LD_LOC 3
104691: PUSH
104692: LD_VAR 0 2
104696: ARRAY
104697: PUSH
104698: LD_INT 0
104700: GREATER
104701: IFFALSE 104737
// SetArtifactUse ( you , art_icon_use [ artifact ] , art_no , art_icon_lab [ artifact ] ) ;
104703: LD_EXP 2
104707: PPUSH
104708: LD_LOC 6
104712: PUSH
104713: LD_VAR 0 2
104717: ARRAY
104718: PPUSH
104719: LD_INT 0
104721: PPUSH
104722: LD_LOC 3
104726: PUSH
104727: LD_VAR 0 2
104731: ARRAY
104732: PPUSH
104733: CALL_OW 468
// art_icon_lab = Replace ( art_icon_lab , artifact , 0 ) ;
104737: LD_ADDR_LOC 3
104741: PUSH
104742: LD_LOC 3
104746: PPUSH
104747: LD_VAR 0 2
104751: PPUSH
104752: LD_INT 0
104754: PPUSH
104755: CALL_OW 1
104759: ST_TO_ADDR
// end ; end ;
104760: PPOPN 4
104762: END
// on ArtifactUnloaded ( cargo_bay , artifact ) do begin ArtifactUnloaded_ArtiFunc ( artifact ) ;
104763: LD_VAR 0 2
104767: PPUSH
104768: CALL 104775 0 1
// end ;
104772: PPOPN 2
104774: END
// function ArtifactUnloaded_ArtiFunc ( artifact ) ; var sib_labs , i , loc , un , temp_list , alien_tower_close ; begin
104775: LD_INT 0
104777: PPUSH
104778: PPUSH
104779: PPUSH
104780: PPUSH
104781: PPUSH
104782: PPUSH
104783: PPUSH
// loc = FindArtifact ( artifact ) ;
104784: LD_ADDR_VAR 0 5
104788: PUSH
104789: LD_VAR 0 1
104793: PPUSH
104794: CALL_OW 469
104798: ST_TO_ADDR
// if loc > 0 then
104799: LD_VAR 0 5
104803: PUSH
104804: LD_INT 0
104806: GREATER
104807: IFFALSE 105460
// begin sib_labs = [ ] ;
104809: LD_ADDR_VAR 0 3
104813: PUSH
104814: EMPTY
104815: ST_TO_ADDR
// alien_tower_close = false ;
104816: LD_ADDR_VAR 0 8
104820: PUSH
104821: LD_INT 0
104823: ST_TO_ADDR
// for i in GetHexesNearHex ( loc [ 1 ] , loc [ 2 ] , 3 ) do
104824: LD_ADDR_VAR 0 4
104828: PUSH
104829: LD_VAR 0 5
104833: PUSH
104834: LD_INT 1
104836: ARRAY
104837: PPUSH
104838: LD_VAR 0 5
104842: PUSH
104843: LD_INT 2
104845: ARRAY
104846: PPUSH
104847: LD_INT 3
104849: PPUSH
104850: CALL 19717 0 3
104854: PUSH
104855: FOR_IN
104856: IFFALSE 105033
// begin un = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
104858: LD_ADDR_VAR 0 6
104862: PUSH
104863: LD_VAR 0 4
104867: PUSH
104868: LD_INT 1
104870: ARRAY
104871: PPUSH
104872: LD_VAR 0 4
104876: PUSH
104877: LD_INT 2
104879: ARRAY
104880: PPUSH
104881: CALL_OW 428
104885: ST_TO_ADDR
// if un > 0 then
104886: LD_VAR 0 6
104890: PUSH
104891: LD_INT 0
104893: GREATER
104894: IFFALSE 105031
// if GetType ( un ) = unit_building then
104896: LD_VAR 0 6
104900: PPUSH
104901: CALL_OW 247
104905: PUSH
104906: LD_INT 3
104908: EQUAL
104909: IFFALSE 105031
// 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
104911: LD_VAR 0 6
104915: PPUSH
104916: CALL_OW 255
104920: PUSH
104921: LD_EXP 2
104925: EQUAL
104926: PUSH
104927: LD_VAR 0 6
104931: PPUSH
104932: CALL_OW 266
104936: PUSH
104937: LD_INT 7
104939: PUSH
104940: LD_INT 8
104942: PUSH
104943: EMPTY
104944: LIST
104945: LIST
104946: IN
104947: AND
104948: PUSH
104949: LD_INT 11
104951: PUSH
104952: LD_VAR 0 6
104956: PPUSH
104957: LD_INT 1
104959: PPUSH
104960: CALL_OW 268
104964: PUSH
104965: LD_VAR 0 6
104969: PPUSH
104970: LD_INT 2
104972: PPUSH
104973: CALL_OW 268
104977: PUSH
104978: EMPTY
104979: LIST
104980: LIST
104981: IN
104982: AND
104983: PUSH
104984: LD_VAR 0 6
104988: PPUSH
104989: CALL_OW 304
104993: NOT
104994: AND
104995: IFFALSE 105013
// sib_labs = sib_labs ^ un ;
104997: LD_ADDR_VAR 0 3
105001: PUSH
105002: LD_VAR 0 3
105006: PUSH
105007: LD_VAR 0 6
105011: ADD
105012: ST_TO_ADDR
// if un = alien_tower then
105013: LD_VAR 0 6
105017: PUSH
105018: LD_INT 1
105020: EQUAL
105021: IFFALSE 105031
// alien_tower_close = true ;
105023: LD_ADDR_VAR 0 8
105027: PUSH
105028: LD_INT 1
105030: ST_TO_ADDR
// end ; end ;
105031: GO 104855
105033: POP
105034: POP
// if sib_labs > 0 or alien_tower_close then
105035: LD_VAR 0 3
105039: PUSH
105040: LD_INT 0
105042: GREATER
105043: PUSH
105044: LD_VAR 0 8
105048: OR
105049: IFFALSE 105460
// begin if GetTech ( tech_artifact , you ) <> state_researched then
105051: LD_INT 24
105053: PPUSH
105054: LD_EXP 2
105058: PPUSH
105059: CALL_OW 321
105063: PUSH
105064: LD_INT 2
105066: NONEQUAL
105067: IFFALSE 105136
// begin if sib_labs > 0 then
105069: LD_VAR 0 3
105073: PUSH
105074: LD_INT 0
105076: GREATER
105077: IFFALSE 105134
// begin SetArtifactRes ( you , true ) ;
105079: LD_EXP 2
105083: PPUSH
105084: LD_INT 1
105086: PPUSH
105087: CALL_OW 467
// temp_list = art_icon_lab [ 1 ] union sib_labs ;
105091: LD_ADDR_VAR 0 7
105095: PUSH
105096: LD_LOC 3
105100: PUSH
105101: LD_INT 1
105103: ARRAY
105104: PUSH
105105: LD_VAR 0 3
105109: UNION
105110: ST_TO_ADDR
// art_icon_lab = Replace ( art_icon_lab , 1 , temp_list ) ;
105111: LD_ADDR_LOC 3
105115: PUSH
105116: LD_LOC 3
105120: PPUSH
105121: LD_INT 1
105123: PPUSH
105124: LD_VAR 0 7
105128: PPUSH
105129: CALL_OW 1
105133: ST_TO_ADDR
// end ; end else
105134: GO 105460
// begin if artifact = 5 then
105136: LD_VAR 0 1
105140: PUSH
105141: LD_INT 5
105143: EQUAL
105144: IFFALSE 105202
// begin if alien_tower_close and art_research_progress [ 3 ] = 100 and art_research_progress [ 4 ] = 100 then
105146: LD_VAR 0 8
105150: PUSH
105151: LD_LOC 7
105155: PUSH
105156: LD_INT 3
105158: ARRAY
105159: PUSH
105160: LD_INT 100
105162: EQUAL
105163: AND
105164: PUSH
105165: LD_LOC 7
105169: PUSH
105170: LD_INT 4
105172: ARRAY
105173: PUSH
105174: LD_INT 100
105176: EQUAL
105177: AND
105178: IFFALSE 105193
// sib_labs = [ alien_tower ] else
105180: LD_ADDR_VAR 0 3
105184: PUSH
105185: LD_INT 1
105187: PUSH
105188: EMPTY
105189: LIST
105190: ST_TO_ADDR
105191: GO 105200
// sib_labs = [ ] ;
105193: LD_ADDR_VAR 0 3
105197: PUSH
105198: EMPTY
105199: ST_TO_ADDR
// end else
105200: GO 105273
// begin temp_list = sib_labs diff art_research_lab ;
105202: LD_ADDR_VAR 0 7
105206: PUSH
105207: LD_VAR 0 3
105211: PUSH
105212: LD_LOC 4
105216: DIFF
105217: ST_TO_ADDR
// sib_labs = [ ] ;
105218: LD_ADDR_VAR 0 3
105222: PUSH
105223: EMPTY
105224: ST_TO_ADDR
// for i in temp_list do
105225: LD_ADDR_VAR 0 4
105229: PUSH
105230: LD_VAR 0 7
105234: PUSH
105235: FOR_IN
105236: IFFALSE 105271
// if BuildingStatus ( i ) = bs_idle then
105238: LD_VAR 0 4
105242: PPUSH
105243: CALL_OW 461
105247: PUSH
105248: LD_INT 2
105250: EQUAL
105251: IFFALSE 105269
// sib_labs = sib_labs ^ i ;
105253: LD_ADDR_VAR 0 3
105257: PUSH
105258: LD_VAR 0 3
105262: PUSH
105263: LD_VAR 0 4
105267: ADD
105268: ST_TO_ADDR
105269: GO 105235
105271: POP
105272: POP
// end ; if art_research_progress [ artifact ] < 100 then
105273: LD_LOC 7
105277: PUSH
105278: LD_VAR 0 1
105282: ARRAY
105283: PUSH
105284: LD_INT 100
105286: LESS
105287: IFFALSE 105362
// begin if sib_labs > 0 then
105289: LD_VAR 0 3
105293: PUSH
105294: LD_INT 0
105296: GREATER
105297: IFFALSE 105360
// begin SetArtifactUse ( you , art_icon_research [ artifact ] , art_instant , sib_labs [ 1 ] ) ;
105299: LD_EXP 2
105303: PPUSH
105304: LD_LOC 5
105308: PUSH
105309: LD_VAR 0 1
105313: ARRAY
105314: PPUSH
105315: LD_INT 2
105317: PPUSH
105318: LD_VAR 0 3
105322: PUSH
105323: LD_INT 1
105325: ARRAY
105326: PPUSH
105327: CALL_OW 468
// art_icon_lab = Replace ( art_icon_lab , artifact , sib_labs [ 1 ] ) ;
105331: LD_ADDR_LOC 3
105335: PUSH
105336: LD_LOC 3
105340: PPUSH
105341: LD_VAR 0 1
105345: PPUSH
105346: LD_VAR 0 3
105350: PUSH
105351: LD_INT 1
105353: ARRAY
105354: PPUSH
105355: CALL_OW 1
105359: ST_TO_ADDR
// end ; end else
105360: GO 105460
// begin if sib_labs > 0 then
105362: LD_VAR 0 3
105366: PUSH
105367: LD_INT 0
105369: GREATER
105370: IFFALSE 105460
// begin SetArtifactUse ( you , art_icon_use [ artifact ] , [ - 1 , - 1 , art_place , art_unit , art_place ] [ artifact ] , sib_labs [ 1 ] ) ;
105372: LD_EXP 2
105376: PPUSH
105377: LD_LOC 6
105381: PUSH
105382: LD_VAR 0 1
105386: ARRAY
105387: PPUSH
105388: LD_INT 1
105390: NEG
105391: PUSH
105392: LD_INT 1
105394: NEG
105395: PUSH
105396: LD_INT 3
105398: PUSH
105399: LD_INT 4
105401: PUSH
105402: LD_INT 3
105404: PUSH
105405: EMPTY
105406: LIST
105407: LIST
105408: LIST
105409: LIST
105410: LIST
105411: PUSH
105412: LD_VAR 0 1
105416: ARRAY
105417: PPUSH
105418: LD_VAR 0 3
105422: PUSH
105423: LD_INT 1
105425: ARRAY
105426: PPUSH
105427: CALL_OW 468
// art_icon_lab = Replace ( art_icon_lab , artifact , sib_labs [ 1 ] ) ;
105431: LD_ADDR_LOC 3
105435: PUSH
105436: LD_LOC 3
105440: PPUSH
105441: LD_VAR 0 1
105445: PPUSH
105446: LD_VAR 0 3
105450: PUSH
105451: LD_INT 1
105453: ARRAY
105454: PPUSH
105455: CALL_OW 1
105459: ST_TO_ADDR
// end ; end ; end ; end ; end ; end ;
105460: LD_VAR 0 2
105464: RET
// on ResearchStarted ( tech , lab ) do var i ;
105465: LD_INT 0
105467: PPUSH
// begin ResearchStarted_AlliFunc ( tech , lab ) ;
105468: LD_VAR 0 1
105472: PPUSH
105473: LD_VAR 0 2
105477: PPUSH
105478: CALL 98195 0 2
// if tech = tech_artifact and GetSide ( lab ) = you then
105482: LD_VAR 0 1
105486: PUSH
105487: LD_INT 24
105489: EQUAL
105490: PUSH
105491: LD_VAR 0 2
105495: PPUSH
105496: CALL_OW 255
105500: PUSH
105501: LD_EXP 2
105505: EQUAL
105506: AND
105507: IFFALSE 105532
// begin art_research_lab = Replace ( art_research_lab , 1 , lab ) ;
105509: LD_ADDR_LOC 4
105513: PUSH
105514: LD_LOC 4
105518: PPUSH
105519: LD_INT 1
105521: PPUSH
105522: LD_VAR 0 2
105526: PPUSH
105527: CALL_OW 1
105531: ST_TO_ADDR
// end ; for i = 3 to 5 do
105532: LD_ADDR_VAR 0 3
105536: PUSH
105537: DOUBLE
105538: LD_INT 3
105540: DEC
105541: ST_TO_ADDR
105542: LD_INT 5
105544: PUSH
105545: FOR_TO
105546: IFFALSE 105659
// if art_icon_lab [ i ] = lab then
105548: LD_LOC 3
105552: PUSH
105553: LD_VAR 0 3
105557: ARRAY
105558: PUSH
105559: LD_VAR 0 2
105563: EQUAL
105564: IFFALSE 105657
// begin SetArtifactUse ( you , art_icon_research [ i ] , art_no , art_icon_lab [ i ] ) ;
105566: LD_EXP 2
105570: PPUSH
105571: LD_LOC 5
105575: PUSH
105576: LD_VAR 0 3
105580: ARRAY
105581: PPUSH
105582: LD_INT 0
105584: PPUSH
105585: LD_LOC 3
105589: PUSH
105590: LD_VAR 0 3
105594: ARRAY
105595: PPUSH
105596: CALL_OW 468
// SetArtifactUse ( you , art_icon_use [ i ] , art_no , art_icon_lab [ i ] ) ;
105600: LD_EXP 2
105604: PPUSH
105605: LD_LOC 6
105609: PUSH
105610: LD_VAR 0 3
105614: ARRAY
105615: PPUSH
105616: LD_INT 0
105618: PPUSH
105619: LD_LOC 3
105623: PUSH
105624: LD_VAR 0 3
105628: ARRAY
105629: PPUSH
105630: CALL_OW 468
// art_icon_lab = Replace ( art_icon_lab , i , 0 ) ;
105634: LD_ADDR_LOC 3
105638: PUSH
105639: LD_LOC 3
105643: PPUSH
105644: LD_VAR 0 3
105648: PPUSH
105649: LD_INT 0
105651: PPUSH
105652: CALL_OW 1
105656: ST_TO_ADDR
// end ;
105657: GO 105545
105659: POP
105660: POP
// end ;
105661: PPOPN 3
105663: END
// on ResearchCancel ( tech , lab ) do var i ;
105664: LD_INT 0
105666: PPUSH
// begin ResearchCancel_AlliFunc ( tech , lab ) ;
105667: LD_VAR 0 1
105671: PPUSH
105672: LD_VAR 0 2
105676: PPUSH
105677: CALL 98240 0 2
// if tech = tech_artifact and GetSide ( lab ) = you then
105681: LD_VAR 0 1
105685: PUSH
105686: LD_INT 24
105688: EQUAL
105689: PUSH
105690: LD_VAR 0 2
105694: PPUSH
105695: CALL_OW 255
105699: PUSH
105700: LD_EXP 2
105704: EQUAL
105705: AND
105706: IFFALSE 105729
// begin art_research_lab = Replace ( art_research_lab , 1 , 0 ) ;
105708: LD_ADDR_LOC 4
105712: PUSH
105713: LD_LOC 4
105717: PPUSH
105718: LD_INT 1
105720: PPUSH
105721: LD_INT 0
105723: PPUSH
105724: CALL_OW 1
105728: ST_TO_ADDR
// end ; if GetSide ( lab ) = you then
105729: LD_VAR 0 2
105733: PPUSH
105734: CALL_OW 255
105738: PUSH
105739: LD_EXP 2
105743: EQUAL
105744: IFFALSE 105782
// begin wait ( 3 ) ;
105746: LD_INT 3
105748: PPUSH
105749: CALL_OW 67
// for i = 3 to 5 do
105753: LD_ADDR_VAR 0 3
105757: PUSH
105758: DOUBLE
105759: LD_INT 3
105761: DEC
105762: ST_TO_ADDR
105763: LD_INT 5
105765: PUSH
105766: FOR_TO
105767: IFFALSE 105780
// ArtifactUnloaded_ArtiFunc ( i ) ;
105769: LD_VAR 0 3
105773: PPUSH
105774: CALL 104775 0 1
105778: GO 105766
105780: POP
105781: POP
// end ; end ;
105782: PPOPN 3
105784: END
// on ResearchComplete ( tech , lab ) do var i , temp_list ;
105785: LD_INT 0
105787: PPUSH
105788: PPUSH
// begin ResearchComplete_AlliFunc ( tech , lab ) ;
105789: LD_VAR 0 1
105793: PPUSH
105794: LD_VAR 0 2
105798: PPUSH
105799: CALL 98283 0 2
// if tech = tech_artifact and GetSide ( lab ) = you then
105803: LD_VAR 0 1
105807: PUSH
105808: LD_INT 24
105810: EQUAL
105811: PUSH
105812: LD_VAR 0 2
105816: PPUSH
105817: CALL_OW 255
105821: PUSH
105822: LD_EXP 2
105826: EQUAL
105827: AND
105828: IFFALSE 106135
// begin art_research_lab = Replace ( art_research_lab , 1 , 0 ) ;
105830: LD_ADDR_LOC 4
105834: PUSH
105835: LD_LOC 4
105839: PPUSH
105840: LD_INT 1
105842: PPUSH
105843: LD_INT 0
105845: PPUSH
105846: CALL_OW 1
105850: ST_TO_ADDR
// DialogueOn ;
105851: CALL_OW 6
// i = FindArtifactSciSpeaker ;
105855: LD_ADDR_VAR 0 3
105859: PUSH
105860: CALL 106191 0 0
105864: ST_TO_ADDR
// if i > 0 then
105865: LD_VAR 0 3
105869: PUSH
105870: LD_INT 0
105872: GREATER
105873: IFFALSE 106131
// begin case i of Sonya :
105875: LD_VAR 0 3
105879: PUSH
105880: LD_EXP 12
105884: DOUBLE
105885: EQUAL
105886: IFTRUE 105890
105888: GO 105905
105890: POP
// Say ( i , D24-So-1 ) ; MarkB :
105891: LD_VAR 0 3
105895: PPUSH
105896: LD_STRING D24-So-1
105898: PPUSH
105899: CALL_OW 88
105903: GO 105997
105905: LD_EXP 17
105909: DOUBLE
105910: EQUAL
105911: IFTRUE 105915
105913: GO 105930
105915: POP
// Say ( i , D24-Mark-1 ) ; Kyouma :
105916: LD_VAR 0 3
105920: PPUSH
105921: LD_STRING D24-Mark-1
105923: PPUSH
105924: CALL_OW 88
105928: GO 105997
105930: LD_EXP 24
105934: DOUBLE
105935: EQUAL
105936: IFTRUE 105940
105938: GO 105955
105940: POP
// Say ( i , D24-Kyo-1 ) ; else
105941: LD_VAR 0 3
105945: PPUSH
105946: LD_STRING D24-Kyo-1
105948: PPUSH
105949: CALL_OW 88
105953: GO 105997
105955: POP
// if GetSex ( i ) = sex_male then
105956: LD_VAR 0 3
105960: PPUSH
105961: CALL_OW 258
105965: PUSH
105966: LD_INT 1
105968: EQUAL
105969: IFFALSE 105985
// Say ( i , D24-SomeM-1 ) else
105971: LD_VAR 0 3
105975: PPUSH
105976: LD_STRING D24-SomeM-1
105978: PPUSH
105979: CALL_OW 88
105983: GO 105997
// Say ( i , D24-SomeF-1 ) ; end ;
105985: LD_VAR 0 3
105989: PPUSH
105990: LD_STRING D24-SomeF-1
105992: PPUSH
105993: CALL_OW 88
// ForceSay ( Heike , D24-H-1 ) ;
105997: LD_EXP 10
106001: PPUSH
106002: LD_STRING D24-H-1
106004: PPUSH
106005: CALL_OW 91
// case i of Sonya :
106009: LD_VAR 0 3
106013: PUSH
106014: LD_EXP 12
106018: DOUBLE
106019: EQUAL
106020: IFTRUE 106024
106022: GO 106039
106024: POP
// Say ( i , D24-So-2 ) ; MarkB :
106025: LD_VAR 0 3
106029: PPUSH
106030: LD_STRING D24-So-2
106032: PPUSH
106033: CALL_OW 88
106037: GO 106131
106039: LD_EXP 17
106043: DOUBLE
106044: EQUAL
106045: IFTRUE 106049
106047: GO 106064
106049: POP
// Say ( i , D24-Mark-2 ) ; Kyouma :
106050: LD_VAR 0 3
106054: PPUSH
106055: LD_STRING D24-Mark-2
106057: PPUSH
106058: CALL_OW 88
106062: GO 106131
106064: LD_EXP 24
106068: DOUBLE
106069: EQUAL
106070: IFTRUE 106074
106072: GO 106089
106074: POP
// Say ( i , D24-Kyo-2 ) ; else
106075: LD_VAR 0 3
106079: PPUSH
106080: LD_STRING D24-Kyo-2
106082: PPUSH
106083: CALL_OW 88
106087: GO 106131
106089: POP
// if GetSex ( i ) = sex_male then
106090: LD_VAR 0 3
106094: PPUSH
106095: CALL_OW 258
106099: PUSH
106100: LD_INT 1
106102: EQUAL
106103: IFFALSE 106119
// Say ( i , D24-SomeM-2 ) else
106105: LD_VAR 0 3
106109: PPUSH
106110: LD_STRING D24-SomeM-2
106112: PPUSH
106113: CALL_OW 88
106117: GO 106131
// Say ( i , D24-SomeF-2 ) ; end ;
106119: LD_VAR 0 3
106123: PPUSH
106124: LD_STRING D24-SomeF-2
106126: PPUSH
106127: CALL_OW 88
// end ; DialogueOff ;
106131: CALL_OW 7
// end ; if GetSide ( lab ) = you then
106135: LD_VAR 0 2
106139: PPUSH
106140: CALL_OW 255
106144: PUSH
106145: LD_EXP 2
106149: EQUAL
106150: IFFALSE 106188
// begin wait ( 3 ) ;
106152: LD_INT 3
106154: PPUSH
106155: CALL_OW 67
// for i = 3 to 5 do
106159: LD_ADDR_VAR 0 3
106163: PUSH
106164: DOUBLE
106165: LD_INT 3
106167: DEC
106168: ST_TO_ADDR
106169: LD_INT 5
106171: PUSH
106172: FOR_TO
106173: IFFALSE 106186
// ArtifactUnloaded_ArtiFunc ( i ) ;
106175: LD_VAR 0 3
106179: PPUSH
106180: CALL 104775 0 1
106184: GO 106172
106186: POP
106187: POP
// end ; end ;
106188: PPOPN 4
106190: END
// function FindArtifactSciSpeaker ; var i , temp_list ; begin
106191: LD_INT 0
106193: PPUSH
106194: PPUSH
106195: PPUSH
// temp_list = UnitFilter ( [ Sonya , MarkB , Kyouma ] , [ [ f_ok ] , [ f_class , class_scientistic ] ] ) ;
106196: LD_ADDR_VAR 0 3
106200: PUSH
106201: LD_EXP 12
106205: PUSH
106206: LD_EXP 17
106210: PUSH
106211: LD_EXP 24
106215: PUSH
106216: EMPTY
106217: LIST
106218: LIST
106219: LIST
106220: PPUSH
106221: LD_INT 50
106223: PUSH
106224: EMPTY
106225: LIST
106226: PUSH
106227: LD_INT 25
106229: PUSH
106230: LD_INT 4
106232: PUSH
106233: EMPTY
106234: LIST
106235: LIST
106236: PUSH
106237: EMPTY
106238: LIST
106239: LIST
106240: PPUSH
106241: CALL_OW 72
106245: ST_TO_ADDR
// if temp_list = 0 then
106246: LD_VAR 0 3
106250: PUSH
106251: LD_INT 0
106253: EQUAL
106254: IFFALSE 106292
// temp_list = UnitFilter ( [ Sonya , MarkB , Kyouma ] , [ f_ok ] ) ;
106256: LD_ADDR_VAR 0 3
106260: PUSH
106261: LD_EXP 12
106265: PUSH
106266: LD_EXP 17
106270: PUSH
106271: LD_EXP 24
106275: PUSH
106276: EMPTY
106277: LIST
106278: LIST
106279: LIST
106280: PPUSH
106281: LD_INT 50
106283: PUSH
106284: EMPTY
106285: LIST
106286: PPUSH
106287: CALL_OW 72
106291: ST_TO_ADDR
// if temp_list = 0 then
106292: LD_VAR 0 3
106296: PUSH
106297: LD_INT 0
106299: EQUAL
106300: IFFALSE 106337
// temp_list = UnitFilter ( GetNonmainPlayerCharacters , [ [ f_ok ] , [ f_class , class_scientistic ] ] ) ;
106302: LD_ADDR_VAR 0 3
106306: PUSH
106307: CALL 85953 0 0
106311: PPUSH
106312: LD_INT 50
106314: PUSH
106315: EMPTY
106316: LIST
106317: PUSH
106318: LD_INT 25
106320: PUSH
106321: LD_INT 4
106323: PUSH
106324: EMPTY
106325: LIST
106326: LIST
106327: PUSH
106328: EMPTY
106329: LIST
106330: LIST
106331: PPUSH
106332: CALL_OW 72
106336: ST_TO_ADDR
// if temp_list = 0 then
106337: LD_VAR 0 3
106341: PUSH
106342: LD_INT 0
106344: EQUAL
106345: IFFALSE 106368
// temp_list = UnitFilter ( GetNonmainPlayerCharacters , [ f_ok ] ) ;
106347: LD_ADDR_VAR 0 3
106351: PUSH
106352: CALL 85953 0 0
106356: PPUSH
106357: LD_INT 50
106359: PUSH
106360: EMPTY
106361: LIST
106362: PPUSH
106363: CALL_OW 72
106367: ST_TO_ADDR
// if temp_list = 0 then
106368: LD_VAR 0 3
106372: PUSH
106373: LD_INT 0
106375: EQUAL
106376: IFFALSE 106388
// result = 0 else
106378: LD_ADDR_VAR 0 1
106382: PUSH
106383: LD_INT 0
106385: ST_TO_ADDR
106386: GO 106426
// begin i = Rand ( 1 , temp_list + 0 ) ;
106388: LD_ADDR_VAR 0 2
106392: PUSH
106393: LD_INT 1
106395: PPUSH
106396: LD_VAR 0 3
106400: PUSH
106401: LD_INT 0
106403: PLUS
106404: PPUSH
106405: CALL_OW 12
106409: ST_TO_ADDR
// result = temp_list [ i ] ;
106410: LD_ADDR_VAR 0 1
106414: PUSH
106415: LD_VAR 0 3
106419: PUSH
106420: LD_VAR 0 2
106424: ARRAY
106425: ST_TO_ADDR
// end ; end ;
106426: LD_VAR 0 1
106430: RET
// on ArtifactUsed ( side , art_icon , p1 , p2 ) do var art_num , i , b , success , lab ;
106431: LD_INT 0
106433: PPUSH
106434: PPUSH
106435: PPUSH
106436: PPUSH
106437: PPUSH
// begin ArtifactUsed_AlliFunc ( side , art_icon ) ;
106438: LD_VAR 0 1
106442: PPUSH
106443: LD_VAR 0 2
106447: PPUSH
106448: CALL 101876 0 2
// if art_icon in art_icon_research then
106452: LD_VAR 0 2
106456: PUSH
106457: LD_LOC 5
106461: IN
106462: IFFALSE 106725
// begin for art_num = 3 to 5 do
106464: LD_ADDR_VAR 0 5
106468: PUSH
106469: DOUBLE
106470: LD_INT 3
106472: DEC
106473: ST_TO_ADDR
106474: LD_INT 5
106476: PUSH
106477: FOR_TO
106478: IFFALSE 106502
// if art_icon = art_icon_research [ art_num ] then
106480: LD_VAR 0 2
106484: PUSH
106485: LD_LOC 5
106489: PUSH
106490: LD_VAR 0 5
106494: ARRAY
106495: EQUAL
106496: IFFALSE 106500
// break ;
106498: GO 106502
106500: GO 106477
106502: POP
106503: POP
// SetSpecResearch ( art_icon_lab [ art_num ] , art_research_difficulty [ art_num ] , true ) ;
106504: LD_LOC 3
106508: PUSH
106509: LD_VAR 0 5
106513: ARRAY
106514: PPUSH
106515: LD_LOC 9
106519: PUSH
106520: LD_VAR 0 5
106524: ARRAY
106525: PPUSH
106526: LD_INT 1
106528: PPUSH
106529: CALL_OW 486
// SetWorkingProgress ( art_icon_lab [ art_num ] , art_research_progress [ art_num ] ) ;
106533: LD_LOC 3
106537: PUSH
106538: LD_VAR 0 5
106542: ARRAY
106543: PPUSH
106544: LD_LOC 7
106548: PUSH
106549: LD_VAR 0 5
106553: ARRAY
106554: PPUSH
106555: CALL_OW 329
// art_research_lab = Replace ( art_research_lab , art_num , art_icon_lab [ art_num ] ) ;
106559: LD_ADDR_LOC 4
106563: PUSH
106564: LD_LOC 4
106568: PPUSH
106569: LD_VAR 0 5
106573: PPUSH
106574: LD_LOC 3
106578: PUSH
106579: LD_VAR 0 5
106583: ARRAY
106584: PPUSH
106585: CALL_OW 1
106589: ST_TO_ADDR
// for i = 3 to 5 do
106590: LD_ADDR_VAR 0 6
106594: PUSH
106595: DOUBLE
106596: LD_INT 3
106598: DEC
106599: ST_TO_ADDR
106600: LD_INT 5
106602: PUSH
106603: FOR_TO
106604: IFFALSE 106723
// if art_icon_lab [ i ] = art_research_lab [ art_num ] then
106606: LD_LOC 3
106610: PUSH
106611: LD_VAR 0 6
106615: ARRAY
106616: PUSH
106617: LD_LOC 4
106621: PUSH
106622: LD_VAR 0 5
106626: ARRAY
106627: EQUAL
106628: IFFALSE 106721
// begin SetArtifactUse ( you , art_icon_research [ i ] , art_no , art_icon_lab [ i ] ) ;
106630: LD_EXP 2
106634: PPUSH
106635: LD_LOC 5
106639: PUSH
106640: LD_VAR 0 6
106644: ARRAY
106645: PPUSH
106646: LD_INT 0
106648: PPUSH
106649: LD_LOC 3
106653: PUSH
106654: LD_VAR 0 6
106658: ARRAY
106659: PPUSH
106660: CALL_OW 468
// SetArtifactUse ( you , art_icon_use [ i ] , art_no , art_icon_lab [ i ] ) ;
106664: LD_EXP 2
106668: PPUSH
106669: LD_LOC 6
106673: PUSH
106674: LD_VAR 0 6
106678: ARRAY
106679: PPUSH
106680: LD_INT 0
106682: PPUSH
106683: LD_LOC 3
106687: PUSH
106688: LD_VAR 0 6
106692: ARRAY
106693: PPUSH
106694: CALL_OW 468
// art_icon_lab = Replace ( art_icon_lab , i , 0 ) ;
106698: LD_ADDR_LOC 3
106702: PUSH
106703: LD_LOC 3
106707: PPUSH
106708: LD_VAR 0 6
106712: PPUSH
106713: LD_INT 0
106715: PPUSH
106716: CALL_OW 1
106720: ST_TO_ADDR
// end ;
106721: GO 106603
106723: POP
106724: POP
// end ; if art_icon in art_icon_use then
106725: LD_VAR 0 2
106729: PUSH
106730: LD_LOC 6
106734: IN
106735: IFFALSE 107521
// begin for art_num = 3 to 5 do
106737: LD_ADDR_VAR 0 5
106741: PUSH
106742: DOUBLE
106743: LD_INT 3
106745: DEC
106746: ST_TO_ADDR
106747: LD_INT 5
106749: PUSH
106750: FOR_TO
106751: IFFALSE 106775
// if art_icon = art_icon_use [ art_num ] then
106753: LD_VAR 0 2
106757: PUSH
106758: LD_LOC 6
106762: PUSH
106763: LD_VAR 0 5
106767: ARRAY
106768: EQUAL
106769: IFFALSE 106773
// break ;
106771: GO 106775
106773: GO 106750
106775: POP
106776: POP
// if art_icon_lab [ art_num ] > 0 then
106777: LD_LOC 3
106781: PUSH
106782: LD_VAR 0 5
106786: ARRAY
106787: PUSH
106788: LD_INT 0
106790: GREATER
106791: IFFALSE 107521
// begin if art_num = 5 and art_tele_countdown_in_progress then
106793: LD_VAR 0 5
106797: PUSH
106798: LD_INT 5
106800: EQUAL
106801: PUSH
106802: LD_LOC 11
106806: AND
106807: IFFALSE 106811
// exit ;
106809: GO 107521
// b = GetBase ( art_icon_lab [ art_num ] ) ;
106811: LD_ADDR_VAR 0 7
106815: PUSH
106816: LD_LOC 3
106820: PUSH
106821: LD_VAR 0 5
106825: ARRAY
106826: PPUSH
106827: CALL_OW 274
106831: ST_TO_ADDR
// if GetResourceType ( b , mat_siberit ) < art_price [ art_num ] then
106832: LD_VAR 0 7
106836: PPUSH
106837: LD_INT 3
106839: PPUSH
106840: CALL_OW 275
106844: PUSH
106845: LD_LOC 8
106849: PUSH
106850: LD_VAR 0 5
106854: ARRAY
106855: LESS
106856: IFFALSE 106920
// begin case art_num of 3 :
106858: LD_VAR 0 5
106862: PUSH
106863: LD_INT 3
106865: DOUBLE
106866: EQUAL
106867: IFTRUE 106871
106869: GO 106881
106871: POP
// Query ( QInfoObserArtiSib ) ; 4 :
106872: LD_STRING QInfoObserArtiSib
106874: PPUSH
106875: CALL_OW 97
106879: GO 106918
106881: LD_INT 4
106883: DOUBLE
106884: EQUAL
106885: IFTRUE 106889
106887: GO 106899
106889: POP
// Query ( QInfoDestruArtiSib ) ; 5 :
106890: LD_STRING QInfoDestruArtiSib
106892: PPUSH
106893: CALL_OW 97
106897: GO 106918
106899: LD_INT 5
106901: DOUBLE
106902: EQUAL
106903: IFTRUE 106907
106905: GO 106917
106907: POP
// Query ( QInfoTeleArtiSib ) ; end ;
106908: LD_STRING QInfoTeleArtiSib
106910: PPUSH
106911: CALL_OW 97
106915: GO 106918
106917: POP
// end else
106918: GO 107521
// begin case art_num of 3 :
106920: LD_VAR 0 5
106924: PUSH
106925: LD_INT 3
106927: DOUBLE
106928: EQUAL
106929: IFTRUE 106933
106931: GO 107032
106933: POP
// begin PlaceSeeing ( p1 , p2 , you , - 15 ) ;
106934: LD_VAR 0 3
106938: PPUSH
106939: LD_VAR 0 4
106943: PPUSH
106944: LD_EXP 2
106948: PPUSH
106949: LD_INT 15
106951: NEG
106952: PPUSH
106953: CALL_OW 330
// art_observe_info = Insert ( art_observe_info , 1 , [ p1 , p2 , 0 0$10 ] ) ;
106957: LD_ADDR_LOC 10
106961: PUSH
106962: LD_LOC 10
106966: PPUSH
106967: LD_INT 1
106969: PPUSH
106970: LD_VAR 0 3
106974: PUSH
106975: LD_VAR 0 4
106979: PUSH
106980: LD_INT 350
106982: PUSH
106983: EMPTY
106984: LIST
106985: LIST
106986: LIST
106987: PPUSH
106988: CALL_OW 2
106992: ST_TO_ADDR
// SetResourceType ( b , mat_siberit , GetResourceType ( b , mat_siberit ) - art_price [ art_num ] ) ;
106993: LD_VAR 0 7
106997: PPUSH
106998: LD_INT 3
107000: PPUSH
107001: LD_VAR 0 7
107005: PPUSH
107006: LD_INT 3
107008: PPUSH
107009: CALL_OW 275
107013: PUSH
107014: LD_LOC 8
107018: PUSH
107019: LD_VAR 0 5
107023: ARRAY
107024: MINUS
107025: PPUSH
107026: CALL_OW 277
// end ; 4 :
107030: GO 107521
107032: LD_INT 4
107034: DOUBLE
107035: EQUAL
107036: IFTRUE 107040
107038: GO 107239
107040: POP
// begin success = false ;
107041: LD_ADDR_VAR 0 8
107045: PUSH
107046: LD_INT 0
107048: ST_TO_ADDR
// case GetType ( p1 ) of unit_vehicle :
107049: LD_VAR 0 3
107053: PPUSH
107054: CALL_OW 247
107058: PUSH
107059: LD_INT 2
107061: DOUBLE
107062: EQUAL
107063: IFTRUE 107067
107065: GO 107115
107067: POP
// begin if GetEngine ( p1 ) = engine_siberite or GetWeapon ( p1 ) in [ ru_time_lapser , ar_selfpropelled_bomb ] then
107068: LD_VAR 0 3
107072: PPUSH
107073: CALL_OW 262
107077: PUSH
107078: LD_INT 3
107080: EQUAL
107081: PUSH
107082: LD_VAR 0 3
107086: PPUSH
107087: CALL_OW 264
107091: PUSH
107092: LD_INT 49
107094: PUSH
107095: LD_INT 29
107097: PUSH
107098: EMPTY
107099: LIST
107100: LIST
107101: IN
107102: OR
107103: IFFALSE 107113
// success = true ;
107105: LD_ADDR_VAR 0 8
107109: PUSH
107110: LD_INT 1
107112: ST_TO_ADDR
// end ; unit_building :
107113: GO 107176
107115: LD_INT 3
107117: DOUBLE
107118: EQUAL
107119: IFTRUE 107123
107121: GO 107175
107123: POP
// begin if GetBType ( p1 ) in [ b_siberite_power , b_ext_siberium , b_siberite_mine ] or GetBWeapon ( p1 ) = ru_time_lapser then
107124: LD_VAR 0 3
107128: PPUSH
107129: CALL_OW 266
107133: PUSH
107134: LD_INT 28
107136: PUSH
107137: LD_INT 21
107139: PUSH
107140: LD_INT 30
107142: PUSH
107143: EMPTY
107144: LIST
107145: LIST
107146: LIST
107147: IN
107148: PUSH
107149: LD_VAR 0 3
107153: PPUSH
107154: CALL_OW 269
107158: PUSH
107159: LD_INT 49
107161: EQUAL
107162: OR
107163: IFFALSE 107173
// success = true ;
107165: LD_ADDR_VAR 0 8
107169: PUSH
107170: LD_INT 1
107172: ST_TO_ADDR
// end ; end ;
107173: GO 107176
107175: POP
// if success then
107176: LD_VAR 0 8
107180: IFFALSE 107230
// begin KillUnit ( p1 ) ;
107182: LD_VAR 0 3
107186: PPUSH
107187: CALL_OW 66
// SetResourceType ( b , mat_siberit , GetResourceType ( b , mat_siberit ) - art_price [ art_num ] ) ;
107191: LD_VAR 0 7
107195: PPUSH
107196: LD_INT 3
107198: PPUSH
107199: LD_VAR 0 7
107203: PPUSH
107204: LD_INT 3
107206: PPUSH
107207: CALL_OW 275
107211: PUSH
107212: LD_LOC 8
107216: PUSH
107217: LD_VAR 0 5
107221: ARRAY
107222: MINUS
107223: PPUSH
107224: CALL_OW 277
// end else
107228: GO 107237
// Query ( QInfoDestruArtiUn ) ;
107230: LD_STRING QInfoDestruArtiUn
107232: PPUSH
107233: CALL_OW 97
// end ; 5 :
107237: GO 107521
107239: LD_INT 5
107241: DOUBLE
107242: EQUAL
107243: IFTRUE 107247
107245: GO 107520
107247: POP
// begin SetResourceType ( b , mat_siberit , GetResourceType ( b , mat_siberit ) - art_price [ art_num ] ) ;
107248: LD_VAR 0 7
107252: PPUSH
107253: LD_INT 3
107255: PPUSH
107256: LD_VAR 0 7
107260: PPUSH
107261: LD_INT 3
107263: PPUSH
107264: CALL_OW 275
107268: PUSH
107269: LD_LOC 8
107273: PUSH
107274: LD_VAR 0 5
107278: ARRAY
107279: MINUS
107280: PPUSH
107281: CALL_OW 277
// SetAreaMapShow ( normal_teleport_area , 1 ) ;
107285: LD_INT 23
107287: PPUSH
107288: LD_INT 1
107290: PPUSH
107291: CALL_OW 424
// art_tele_countdown_in_progress = true ;
107295: LD_ADDR_LOC 11
107299: PUSH
107300: LD_INT 1
107302: ST_TO_ADDR
// for i = 10 downto 1 do
107303: LD_ADDR_VAR 0 6
107307: PUSH
107308: DOUBLE
107309: LD_INT 10
107311: INC
107312: ST_TO_ADDR
107313: LD_INT 1
107315: PUSH
107316: FOR_DOWNTO
107317: IFFALSE 107341
// begin display_strings = [ i ] ;
107319: LD_ADDR_OWVAR 47
107323: PUSH
107324: LD_VAR 0 6
107328: PUSH
107329: EMPTY
107330: LIST
107331: ST_TO_ADDR
// wait ( 0 0$1 ) ;
107332: LD_INT 35
107334: PPUSH
107335: CALL_OW 67
// end ;
107339: GO 107316
107341: POP
107342: POP
// display_strings = [ ] ;
107343: LD_ADDR_OWVAR 47
107347: PUSH
107348: EMPTY
107349: ST_TO_ADDR
// SetAreaMapShow ( normal_teleport_area , 0 ) ;
107350: LD_INT 23
107352: PPUSH
107353: LD_INT 0
107355: PPUSH
107356: CALL_OW 424
// art_tele_countdown_in_progress = false ;
107360: LD_ADDR_LOC 11
107364: PUSH
107365: LD_INT 0
107367: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , normal_teleport_area ] , [ f_type , unit_vehicle ] ] ) ^ FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , normal_teleport_area ] , [ f_type , unit_human ] , [ f_not , [ f_driving ] ] , [ f_not , [ f_inside ] ] ] ) do
107368: LD_ADDR_VAR 0 6
107372: PUSH
107373: LD_INT 22
107375: PUSH
107376: LD_EXP 2
107380: PUSH
107381: EMPTY
107382: LIST
107383: LIST
107384: PUSH
107385: LD_INT 95
107387: PUSH
107388: LD_INT 23
107390: PUSH
107391: EMPTY
107392: LIST
107393: LIST
107394: PUSH
107395: LD_INT 21
107397: PUSH
107398: LD_INT 2
107400: PUSH
107401: EMPTY
107402: LIST
107403: LIST
107404: PUSH
107405: EMPTY
107406: LIST
107407: LIST
107408: LIST
107409: PPUSH
107410: CALL_OW 69
107414: PUSH
107415: LD_INT 22
107417: PUSH
107418: LD_EXP 2
107422: PUSH
107423: EMPTY
107424: LIST
107425: LIST
107426: PUSH
107427: LD_INT 95
107429: PUSH
107430: LD_INT 23
107432: PUSH
107433: EMPTY
107434: LIST
107435: LIST
107436: PUSH
107437: LD_INT 21
107439: PUSH
107440: LD_INT 1
107442: PUSH
107443: EMPTY
107444: LIST
107445: LIST
107446: PUSH
107447: LD_INT 3
107449: PUSH
107450: LD_INT 55
107452: PUSH
107453: EMPTY
107454: LIST
107455: PUSH
107456: EMPTY
107457: LIST
107458: LIST
107459: PUSH
107460: LD_INT 3
107462: PUSH
107463: LD_INT 54
107465: PUSH
107466: EMPTY
107467: LIST
107468: PUSH
107469: EMPTY
107470: LIST
107471: LIST
107472: PUSH
107473: EMPTY
107474: LIST
107475: LIST
107476: LIST
107477: LIST
107478: LIST
107479: PPUSH
107480: CALL_OW 69
107484: ADD
107485: PUSH
107486: FOR_IN
107487: IFFALSE 107516
// begin TeleportUnit ( i , p1 , p2 , 12 , true ) ;
107489: LD_VAR 0 6
107493: PPUSH
107494: LD_VAR 0 3
107498: PPUSH
107499: LD_VAR 0 4
107503: PPUSH
107504: LD_INT 12
107506: PPUSH
107507: LD_INT 1
107509: PPUSH
107510: CALL_OW 483
// end ;
107514: GO 107486
107516: POP
107517: POP
// end ; end ;
107518: GO 107521
107520: POP
// end ; end ; end ; end ;
107521: PPOPN 9
107523: END
// every 0 0$1 do var i , time , temp_list ;
107524: GO 107526
107526: DISABLE
107527: LD_INT 0
107529: PPUSH
107530: PPUSH
107531: PPUSH
// begin repeat wait ( 0 0$1 ) ;
107532: LD_INT 35
107534: PPUSH
107535: CALL_OW 67
// i = 1 ;
107539: LD_ADDR_VAR 0 1
107543: PUSH
107544: LD_INT 1
107546: ST_TO_ADDR
// while i <= art_observe_info do
107547: LD_VAR 0 1
107551: PUSH
107552: LD_LOC 10
107556: LESSEQUAL
107557: IFFALSE 107724
// begin time = art_observe_info [ i ] [ 3 ] - 0 0$1 ;
107559: LD_ADDR_VAR 0 2
107563: PUSH
107564: LD_LOC 10
107568: PUSH
107569: LD_VAR 0 1
107573: ARRAY
107574: PUSH
107575: LD_INT 3
107577: ARRAY
107578: PUSH
107579: LD_INT 35
107581: MINUS
107582: ST_TO_ADDR
// if time <= 0 0$0 then
107583: LD_VAR 0 2
107587: PUSH
107588: LD_INT 0
107590: LESSEQUAL
107591: IFFALSE 107654
// begin RemoveSeeing ( art_observe_info [ i ] [ 1 ] , art_observe_info [ i ] [ 2 ] , you ) ;
107593: LD_LOC 10
107597: PUSH
107598: LD_VAR 0 1
107602: ARRAY
107603: PUSH
107604: LD_INT 1
107606: ARRAY
107607: PPUSH
107608: LD_LOC 10
107612: PUSH
107613: LD_VAR 0 1
107617: ARRAY
107618: PUSH
107619: LD_INT 2
107621: ARRAY
107622: PPUSH
107623: LD_EXP 2
107627: PPUSH
107628: CALL_OW 331
// art_observe_info = Delete ( art_observe_info , i ) ;
107632: LD_ADDR_LOC 10
107636: PUSH
107637: LD_LOC 10
107641: PPUSH
107642: LD_VAR 0 1
107646: PPUSH
107647: CALL_OW 3
107651: ST_TO_ADDR
// end else
107652: GO 107722
// begin temp_list = Replace ( art_observe_info [ i ] , 3 , time ) ;
107654: LD_ADDR_VAR 0 3
107658: PUSH
107659: LD_LOC 10
107663: PUSH
107664: LD_VAR 0 1
107668: ARRAY
107669: PPUSH
107670: LD_INT 3
107672: PPUSH
107673: LD_VAR 0 2
107677: PPUSH
107678: CALL_OW 1
107682: ST_TO_ADDR
// art_observe_info = Replace ( art_observe_info , i , temp_list ) ;
107683: LD_ADDR_LOC 10
107687: PUSH
107688: LD_LOC 10
107692: PPUSH
107693: LD_VAR 0 1
107697: PPUSH
107698: LD_VAR 0 3
107702: PPUSH
107703: CALL_OW 1
107707: ST_TO_ADDR
// i = i + 1 ;
107708: LD_ADDR_VAR 0 1
107712: PUSH
107713: LD_VAR 0 1
107717: PUSH
107718: LD_INT 1
107720: PLUS
107721: ST_TO_ADDR
// end ; end ;
107722: GO 107547
// until false ;
107724: LD_INT 0
107726: IFFALSE 107532
// end ;
107728: PPOPN 3
107730: END
// on SpecResearchCancel ( lab , percentage_done ) do var art ;
107731: LD_INT 0
107733: PPUSH
// begin for art = 3 to art_research_lab do
107734: LD_ADDR_VAR 0 3
107738: PUSH
107739: DOUBLE
107740: LD_INT 3
107742: DEC
107743: ST_TO_ADDR
107744: LD_LOC 4
107748: PUSH
107749: FOR_TO
107750: IFFALSE 107822
// if art_research_lab [ art ] = lab then
107752: LD_LOC 4
107756: PUSH
107757: LD_VAR 0 3
107761: ARRAY
107762: PUSH
107763: LD_VAR 0 1
107767: EQUAL
107768: IFFALSE 107820
// begin art_research_progress = Replace ( art_research_progress , art , percentage_done ) ;
107770: LD_ADDR_LOC 7
107774: PUSH
107775: LD_LOC 7
107779: PPUSH
107780: LD_VAR 0 3
107784: PPUSH
107785: LD_VAR 0 2
107789: PPUSH
107790: CALL_OW 1
107794: ST_TO_ADDR
// art_research_lab = Replace ( art_research_lab , art , 0 ) ;
107795: LD_ADDR_LOC 4
107799: PUSH
107800: LD_LOC 4
107804: PPUSH
107805: LD_VAR 0 3
107809: PPUSH
107810: LD_INT 0
107812: PPUSH
107813: CALL_OW 1
107817: ST_TO_ADDR
// break ;
107818: GO 107822
// end ;
107820: GO 107749
107822: POP
107823: POP
// wait ( 3 ) ;
107824: LD_INT 3
107826: PPUSH
107827: CALL_OW 67
// for art = 3 to 5 do
107831: LD_ADDR_VAR 0 3
107835: PUSH
107836: DOUBLE
107837: LD_INT 3
107839: DEC
107840: ST_TO_ADDR
107841: LD_INT 5
107843: PUSH
107844: FOR_TO
107845: IFFALSE 107858
// ArtifactUnloaded_ArtiFunc ( art ) ;
107847: LD_VAR 0 3
107851: PPUSH
107852: CALL 104775 0 1
107856: GO 107844
107858: POP
107859: POP
// end ;
107860: PPOPN 3
107862: END
// on SpecResearchComplete ( lab ) do var i , temp_list , art , k ;
107863: LD_INT 0
107865: PPUSH
107866: PPUSH
107867: PPUSH
107868: PPUSH
// begin for art = 3 to art_research_lab do
107869: LD_ADDR_VAR 0 4
107873: PUSH
107874: DOUBLE
107875: LD_INT 3
107877: DEC
107878: ST_TO_ADDR
107879: LD_LOC 4
107883: PUSH
107884: FOR_TO
107885: IFFALSE 109131
// if art_research_lab [ art ] = lab then
107887: LD_LOC 4
107891: PUSH
107892: LD_VAR 0 4
107896: ARRAY
107897: PUSH
107898: LD_VAR 0 1
107902: EQUAL
107903: IFFALSE 109129
// begin art_research_progress = Replace ( art_research_progress , art , 100 ) ;
107905: LD_ADDR_LOC 7
107909: PUSH
107910: LD_LOC 7
107914: PPUSH
107915: LD_VAR 0 4
107919: PPUSH
107920: LD_INT 100
107922: PPUSH
107923: CALL_OW 1
107927: ST_TO_ADDR
// art_research_lab = Replace ( art_research_lab , art , 0 ) ;
107928: LD_ADDR_LOC 4
107932: PUSH
107933: LD_LOC 4
107937: PPUSH
107938: LD_VAR 0 4
107942: PPUSH
107943: LD_INT 0
107945: PPUSH
107946: CALL_OW 1
107950: ST_TO_ADDR
// if art_research_progress [ 3 ] = 100 and art_research_progress [ 4 ] = 100 and art_research_progress [ 5 ] = 100 then
107951: LD_LOC 7
107955: PUSH
107956: LD_INT 3
107958: ARRAY
107959: PUSH
107960: LD_INT 100
107962: EQUAL
107963: PUSH
107964: LD_LOC 7
107968: PUSH
107969: LD_INT 4
107971: ARRAY
107972: PUSH
107973: LD_INT 100
107975: EQUAL
107976: AND
107977: PUSH
107978: LD_LOC 7
107982: PUSH
107983: LD_INT 5
107985: ARRAY
107986: PUSH
107987: LD_INT 100
107989: EQUAL
107990: AND
107991: IFFALSE 108001
// all_artifacts_researched = true ;
107993: LD_ADDR_EXP 148
107997: PUSH
107998: LD_INT 1
108000: ST_TO_ADDR
// DialogueOn ;
108001: CALL_OW 6
// if art = 3 and IsOk ( Kyouma ) then
108005: LD_VAR 0 4
108009: PUSH
108010: LD_INT 3
108012: EQUAL
108013: PUSH
108014: LD_EXP 24
108018: PPUSH
108019: CALL_OW 302
108023: AND
108024: IFFALSE 108038
// i = Kyouma else
108026: LD_ADDR_VAR 0 2
108030: PUSH
108031: LD_EXP 24
108035: ST_TO_ADDR
108036: GO 108048
// i = FindArtifactSciSpeaker ;
108038: LD_ADDR_VAR 0 2
108042: PUSH
108043: CALL 106191 0 0
108047: ST_TO_ADDR
// if i > 0 then
108048: LD_VAR 0 2
108052: PUSH
108053: LD_INT 0
108055: GREATER
108056: IFFALSE 108948
// begin case art of 3 :
108058: LD_VAR 0 4
108062: PUSH
108063: LD_INT 3
108065: DOUBLE
108066: EQUAL
108067: IFTRUE 108071
108069: GO 108401
108071: POP
// begin if i = Kyouma then
108072: LD_VAR 0 2
108076: PUSH
108077: LD_EXP 24
108081: EQUAL
108082: IFFALSE 108242
// begin Say ( i , D24-a-Kyo-1 ) ;
108084: LD_VAR 0 2
108088: PPUSH
108089: LD_STRING D24-a-Kyo-1
108091: PPUSH
108092: CALL_OW 88
// temp_list = UnitFilter ( [ Sonya , MarkB ] , [ f_ok ] ) ;
108096: LD_ADDR_VAR 0 3
108100: PUSH
108101: LD_EXP 12
108105: PUSH
108106: LD_EXP 17
108110: PUSH
108111: EMPTY
108112: LIST
108113: LIST
108114: PPUSH
108115: LD_INT 50
108117: PUSH
108118: EMPTY
108119: LIST
108120: PPUSH
108121: CALL_OW 72
108125: ST_TO_ADDR
// if temp_list > 0 then
108126: LD_VAR 0 3
108130: PUSH
108131: LD_INT 0
108133: GREATER
108134: IFFALSE 108242
// begin k = Rand ( 1 , temp_list + 0 ) ;
108136: LD_ADDR_VAR 0 5
108140: PUSH
108141: LD_INT 1
108143: PPUSH
108144: LD_VAR 0 3
108148: PUSH
108149: LD_INT 0
108151: PLUS
108152: PPUSH
108153: CALL_OW 12
108157: ST_TO_ADDR
// k = temp_list [ k ] ;
108158: LD_ADDR_VAR 0 5
108162: PUSH
108163: LD_VAR 0 3
108167: PUSH
108168: LD_VAR 0 5
108172: ARRAY
108173: ST_TO_ADDR
// ForceSay ( Heike , D24-a-H-1 ) ;
108174: LD_EXP 10
108178: PPUSH
108179: LD_STRING D24-a-H-1
108181: PPUSH
108182: CALL_OW 91
// case k of Sonya :
108186: LD_VAR 0 5
108190: PUSH
108191: LD_EXP 12
108195: DOUBLE
108196: EQUAL
108197: IFTRUE 108201
108199: GO 108216
108201: POP
// Say ( k , D24-a-So-1 ) ; MarkB :
108202: LD_VAR 0 5
108206: PPUSH
108207: LD_STRING D24-a-So-1
108209: PPUSH
108210: CALL_OW 88
108214: GO 108242
108216: LD_EXP 17
108220: DOUBLE
108221: EQUAL
108222: IFTRUE 108226
108224: GO 108241
108226: POP
// Say ( k , D24-a-Mark-1 ) ; end ;
108227: LD_VAR 0 5
108231: PPUSH
108232: LD_STRING D24-a-Mark-1
108234: PPUSH
108235: CALL_OW 88
108239: GO 108242
108241: POP
// end ; end ; case i of Sonya :
108242: LD_VAR 0 2
108246: PUSH
108247: LD_EXP 12
108251: DOUBLE
108252: EQUAL
108253: IFTRUE 108257
108255: GO 108272
108257: POP
// Say ( i , D24-a-So-2 ) ; MarkB :
108258: LD_VAR 0 2
108262: PPUSH
108263: LD_STRING D24-a-So-2
108265: PPUSH
108266: CALL_OW 88
108270: GO 108364
108272: LD_EXP 17
108276: DOUBLE
108277: EQUAL
108278: IFTRUE 108282
108280: GO 108297
108282: POP
// Say ( i , D24-a-Mark-2 ) ; Kyouma :
108283: LD_VAR 0 2
108287: PPUSH
108288: LD_STRING D24-a-Mark-2
108290: PPUSH
108291: CALL_OW 88
108295: GO 108364
108297: LD_EXP 24
108301: DOUBLE
108302: EQUAL
108303: IFTRUE 108307
108305: GO 108322
108307: POP
// Say ( i , D24-a-Kyo-2 ) ; else
108308: LD_VAR 0 2
108312: PPUSH
108313: LD_STRING D24-a-Kyo-2
108315: PPUSH
108316: CALL_OW 88
108320: GO 108364
108322: POP
// if GetSex ( i ) = sex_male then
108323: LD_VAR 0 2
108327: PPUSH
108328: CALL_OW 258
108332: PUSH
108333: LD_INT 1
108335: EQUAL
108336: IFFALSE 108352
// Say ( i , D24-a-SomeM-1 ) else
108338: LD_VAR 0 2
108342: PPUSH
108343: LD_STRING D24-a-SomeM-1
108345: PPUSH
108346: CALL_OW 88
108350: GO 108364
// Say ( i , D24-a-SomeF-1 ) ; end ;
108352: LD_VAR 0 2
108356: PPUSH
108357: LD_STRING D24-a-SomeF-1
108359: PPUSH
108360: CALL_OW 88
// ForceSay ( Heike , D24-a-H-2 ) ;
108364: LD_EXP 10
108368: PPUSH
108369: LD_STRING D24-a-H-2
108371: PPUSH
108372: CALL_OW 91
// if IsOk ( Ralph ) then
108376: LD_EXP 14
108380: PPUSH
108381: CALL_OW 302
108385: IFFALSE 108399
// Say ( Ralph , D24-a-Ra-1 ) ;
108387: LD_EXP 14
108391: PPUSH
108392: LD_STRING D24-a-Ra-1
108394: PPUSH
108395: CALL_OW 88
// end ; 4 :
108399: GO 108948
108401: LD_INT 4
108403: DOUBLE
108404: EQUAL
108405: IFTRUE 108409
108407: GO 108668
108409: POP
// begin case i of Sonya :
108410: LD_VAR 0 2
108414: PUSH
108415: LD_EXP 12
108419: DOUBLE
108420: EQUAL
108421: IFTRUE 108425
108423: GO 108440
108425: POP
// Say ( i , D24-b-So-1 ) ; MarkB :
108426: LD_VAR 0 2
108430: PPUSH
108431: LD_STRING D24-b-So-1
108433: PPUSH
108434: CALL_OW 88
108438: GO 108532
108440: LD_EXP 17
108444: DOUBLE
108445: EQUAL
108446: IFTRUE 108450
108448: GO 108465
108450: POP
// Say ( i , D24-b-Mark-1 ) ; Kyouma :
108451: LD_VAR 0 2
108455: PPUSH
108456: LD_STRING D24-b-Mark-1
108458: PPUSH
108459: CALL_OW 88
108463: GO 108532
108465: LD_EXP 24
108469: DOUBLE
108470: EQUAL
108471: IFTRUE 108475
108473: GO 108490
108475: POP
// Say ( i , D24-b-Kyo-1 ) ; else
108476: LD_VAR 0 2
108480: PPUSH
108481: LD_STRING D24-b-Kyo-1
108483: PPUSH
108484: CALL_OW 88
108488: GO 108532
108490: POP
// if GetSex ( i ) = sex_male then
108491: LD_VAR 0 2
108495: PPUSH
108496: CALL_OW 258
108500: PUSH
108501: LD_INT 1
108503: EQUAL
108504: IFFALSE 108520
// Say ( i , D24-b-SomeM-1 ) else
108506: LD_VAR 0 2
108510: PPUSH
108511: LD_STRING D24-b-SomeM-1
108513: PPUSH
108514: CALL_OW 88
108518: GO 108532
// Say ( i , D24-b-SomeF-1 ) ; end ;
108520: LD_VAR 0 2
108524: PPUSH
108525: LD_STRING D24-b-SomeF-1
108527: PPUSH
108528: CALL_OW 88
// ForceSay ( Heike , D24-b-H-1 ) ;
108532: LD_EXP 10
108536: PPUSH
108537: LD_STRING D24-b-H-1
108539: PPUSH
108540: CALL_OW 91
// case i of Sonya :
108544: LD_VAR 0 2
108548: PUSH
108549: LD_EXP 12
108553: DOUBLE
108554: EQUAL
108555: IFTRUE 108559
108557: GO 108574
108559: POP
// Say ( i , D24-b-So-2 ) ; MarkB :
108560: LD_VAR 0 2
108564: PPUSH
108565: LD_STRING D24-b-So-2
108567: PPUSH
108568: CALL_OW 88
108572: GO 108666
108574: LD_EXP 17
108578: DOUBLE
108579: EQUAL
108580: IFTRUE 108584
108582: GO 108599
108584: POP
// Say ( i , D24-b-Mark-2 ) ; Kyouma :
108585: LD_VAR 0 2
108589: PPUSH
108590: LD_STRING D24-b-Mark-2
108592: PPUSH
108593: CALL_OW 88
108597: GO 108666
108599: LD_EXP 24
108603: DOUBLE
108604: EQUAL
108605: IFTRUE 108609
108607: GO 108624
108609: POP
// Say ( i , D24-b-Kyo-2 ) ; else
108610: LD_VAR 0 2
108614: PPUSH
108615: LD_STRING D24-b-Kyo-2
108617: PPUSH
108618: CALL_OW 88
108622: GO 108666
108624: POP
// if GetSex ( i ) = sex_male then
108625: LD_VAR 0 2
108629: PPUSH
108630: CALL_OW 258
108634: PUSH
108635: LD_INT 1
108637: EQUAL
108638: IFFALSE 108654
// Say ( i , D24-b-SomeM-2 ) else
108640: LD_VAR 0 2
108644: PPUSH
108645: LD_STRING D24-b-SomeM-2
108647: PPUSH
108648: CALL_OW 88
108652: GO 108666
// Say ( i , D24-b-SomeF-2 ) ; end ;
108654: LD_VAR 0 2
108658: PPUSH
108659: LD_STRING D24-b-SomeF-2
108661: PPUSH
108662: CALL_OW 88
// end ; 5 :
108666: GO 108948
108668: LD_INT 5
108670: DOUBLE
108671: EQUAL
108672: IFTRUE 108676
108674: GO 108947
108676: POP
// begin case i of Sonya :
108677: LD_VAR 0 2
108681: PUSH
108682: LD_EXP 12
108686: DOUBLE
108687: EQUAL
108688: IFTRUE 108692
108690: GO 108707
108692: POP
// Say ( i , D24-d-So-1 ) ; MarkB :
108693: LD_VAR 0 2
108697: PPUSH
108698: LD_STRING D24-d-So-1
108700: PPUSH
108701: CALL_OW 88
108705: GO 108799
108707: LD_EXP 17
108711: DOUBLE
108712: EQUAL
108713: IFTRUE 108717
108715: GO 108732
108717: POP
// Say ( i , D24-d-Mark-1 ) ; Kyouma :
108718: LD_VAR 0 2
108722: PPUSH
108723: LD_STRING D24-d-Mark-1
108725: PPUSH
108726: CALL_OW 88
108730: GO 108799
108732: LD_EXP 24
108736: DOUBLE
108737: EQUAL
108738: IFTRUE 108742
108740: GO 108757
108742: POP
// Say ( i , D24-d-Kyo-1 ) ; else
108743: LD_VAR 0 2
108747: PPUSH
108748: LD_STRING D24-d-Kyo-1
108750: PPUSH
108751: CALL_OW 88
108755: GO 108799
108757: POP
// if GetSex ( i ) = sex_male then
108758: LD_VAR 0 2
108762: PPUSH
108763: CALL_OW 258
108767: PUSH
108768: LD_INT 1
108770: EQUAL
108771: IFFALSE 108787
// Say ( i , D24-d-SomeM-1 ) else
108773: LD_VAR 0 2
108777: PPUSH
108778: LD_STRING D24-d-SomeM-1
108780: PPUSH
108781: CALL_OW 88
108785: GO 108799
// Say ( i , D24-d-SomeF-1 ) ; end ;
108787: LD_VAR 0 2
108791: PPUSH
108792: LD_STRING D24-d-SomeF-1
108794: PPUSH
108795: CALL_OW 88
// ForceSay ( Heike , D24-d-H-1 ) ;
108799: LD_EXP 10
108803: PPUSH
108804: LD_STRING D24-d-H-1
108806: PPUSH
108807: CALL_OW 91
// case i of Sonya :
108811: LD_VAR 0 2
108815: PUSH
108816: LD_EXP 12
108820: DOUBLE
108821: EQUAL
108822: IFTRUE 108826
108824: GO 108841
108826: POP
// Say ( i , D24-d-So-2 ) ; MarkB :
108827: LD_VAR 0 2
108831: PPUSH
108832: LD_STRING D24-d-So-2
108834: PPUSH
108835: CALL_OW 88
108839: GO 108933
108841: LD_EXP 17
108845: DOUBLE
108846: EQUAL
108847: IFTRUE 108851
108849: GO 108866
108851: POP
// Say ( i , D24-d-Mark-2 ) ; Kyouma :
108852: LD_VAR 0 2
108856: PPUSH
108857: LD_STRING D24-d-Mark-2
108859: PPUSH
108860: CALL_OW 88
108864: GO 108933
108866: LD_EXP 24
108870: DOUBLE
108871: EQUAL
108872: IFTRUE 108876
108874: GO 108891
108876: POP
// Say ( i , D24-d-Kyo-2 ) ; else
108877: LD_VAR 0 2
108881: PPUSH
108882: LD_STRING D24-d-Kyo-2
108884: PPUSH
108885: CALL_OW 88
108889: GO 108933
108891: POP
// if GetSex ( i ) = sex_male then
108892: LD_VAR 0 2
108896: PPUSH
108897: CALL_OW 258
108901: PUSH
108902: LD_INT 1
108904: EQUAL
108905: IFFALSE 108921
// Say ( i , D24-d-SomeM-2 ) else
108907: LD_VAR 0 2
108911: PPUSH
108912: LD_STRING D24-d-SomeM-2
108914: PPUSH
108915: CALL_OW 88
108919: GO 108933
// Say ( i , D24-d-SomeF-2 ) ; end ;
108921: LD_VAR 0 2
108925: PPUSH
108926: LD_STRING D24-d-SomeF-2
108928: PPUSH
108929: CALL_OW 88
// ForceSay ( Heike , D24-d-H-2 ) ;
108933: LD_EXP 10
108937: PPUSH
108938: LD_STRING D24-d-H-2
108940: PPUSH
108941: CALL_OW 91
// end ; end ;
108945: GO 108948
108947: POP
// end ; dwait ( 0 0$0.2 ) ;
108948: LD_INT 7
108950: PPUSH
108951: CALL_OW 68
// case art of 3 :
108955: LD_VAR 0 4
108959: PUSH
108960: LD_INT 3
108962: DOUBLE
108963: EQUAL
108964: IFTRUE 108968
108966: GO 109032
108968: POP
// begin Query ( QInfoObserArtiUsage ) ;
108969: LD_STRING QInfoObserArtiUsage
108971: PPUSH
108972: CALL_OW 97
// dwait ( 0 0$0.2 ) ;
108976: LD_INT 7
108978: PPUSH
108979: CALL_OW 68
// if i > 0 and art_research_progress [ 3 ] = 100 and art_research_progress [ 4 ] = 100 then
108983: LD_VAR 0 2
108987: PUSH
108988: LD_INT 0
108990: GREATER
108991: PUSH
108992: LD_LOC 7
108996: PUSH
108997: LD_INT 3
108999: ARRAY
109000: PUSH
109001: LD_INT 100
109003: EQUAL
109004: AND
109005: PUSH
109006: LD_LOC 7
109010: PUSH
109011: LD_INT 4
109013: ARRAY
109014: PUSH
109015: LD_INT 100
109017: EQUAL
109018: AND
109019: IFFALSE 109030
// Art5CanResearchDialogue ( i ) ;
109021: LD_VAR 0 2
109025: PPUSH
109026: CALL 109172 0 1
// end ; 4 :
109030: GO 109123
109032: LD_INT 4
109034: DOUBLE
109035: EQUAL
109036: IFTRUE 109040
109038: GO 109104
109040: POP
// begin Query ( QInfoDestruArtiUsage ) ;
109041: LD_STRING QInfoDestruArtiUsage
109043: PPUSH
109044: CALL_OW 97
// dwait ( 0 0$0.2 ) ;
109048: LD_INT 7
109050: PPUSH
109051: CALL_OW 68
// if i > 0 and art_research_progress [ 3 ] = 100 and art_research_progress [ 4 ] = 100 then
109055: LD_VAR 0 2
109059: PUSH
109060: LD_INT 0
109062: GREATER
109063: PUSH
109064: LD_LOC 7
109068: PUSH
109069: LD_INT 3
109071: ARRAY
109072: PUSH
109073: LD_INT 100
109075: EQUAL
109076: AND
109077: PUSH
109078: LD_LOC 7
109082: PUSH
109083: LD_INT 4
109085: ARRAY
109086: PUSH
109087: LD_INT 100
109089: EQUAL
109090: AND
109091: IFFALSE 109102
// Art5CanResearchDialogue ( i ) ;
109093: LD_VAR 0 2
109097: PPUSH
109098: CALL 109172 0 1
// end ; 5 :
109102: GO 109123
109104: LD_INT 5
109106: DOUBLE
109107: EQUAL
109108: IFTRUE 109112
109110: GO 109122
109112: POP
// Query ( QInfoTeleArtiUsage ) ; end ;
109113: LD_STRING QInfoTeleArtiUsage
109115: PPUSH
109116: CALL_OW 97
109120: GO 109123
109122: POP
// DialogueOff ;
109123: CALL_OW 7
// break ;
109127: GO 109131
// end ;
109129: GO 107884
109131: POP
109132: POP
// wait ( 3 ) ;
109133: LD_INT 3
109135: PPUSH
109136: CALL_OW 67
// for art = 3 to 5 do
109140: LD_ADDR_VAR 0 4
109144: PUSH
109145: DOUBLE
109146: LD_INT 3
109148: DEC
109149: ST_TO_ADDR
109150: LD_INT 5
109152: PUSH
109153: FOR_TO
109154: IFFALSE 109167
// ArtifactUnloaded_ArtiFunc ( art ) ;
109156: LD_VAR 0 4
109160: PPUSH
109161: CALL 104775 0 1
109165: GO 109153
109167: POP
109168: POP
// end ;
109169: PPOPN 5
109171: END
// function Art5CanResearchDialogue ( speaker ) ; begin
109172: LD_INT 0
109174: PPUSH
// case speaker of Sonya :
109175: LD_VAR 0 1
109179: PUSH
109180: LD_EXP 12
109184: DOUBLE
109185: EQUAL
109186: IFTRUE 109190
109188: GO 109205
109190: POP
// Say ( speaker , D24-c-So-1 ) ; MarkB :
109191: LD_VAR 0 1
109195: PPUSH
109196: LD_STRING D24-c-So-1
109198: PPUSH
109199: CALL_OW 88
109203: GO 109297
109205: LD_EXP 17
109209: DOUBLE
109210: EQUAL
109211: IFTRUE 109215
109213: GO 109230
109215: POP
// Say ( speaker , D24-c-Mark-1 ) ; Kyouma :
109216: LD_VAR 0 1
109220: PPUSH
109221: LD_STRING D24-c-Mark-1
109223: PPUSH
109224: CALL_OW 88
109228: GO 109297
109230: LD_EXP 24
109234: DOUBLE
109235: EQUAL
109236: IFTRUE 109240
109238: GO 109255
109240: POP
// Say ( speaker , D24-c-Kyo-1 ) ; else
109241: LD_VAR 0 1
109245: PPUSH
109246: LD_STRING D24-c-Kyo-1
109248: PPUSH
109249: CALL_OW 88
109253: GO 109297
109255: POP
// if GetSex ( speaker ) = sex_male then
109256: LD_VAR 0 1
109260: PPUSH
109261: CALL_OW 258
109265: PUSH
109266: LD_INT 1
109268: EQUAL
109269: IFFALSE 109285
// Say ( speaker , D24-c-SomeM-1 ) else
109271: LD_VAR 0 1
109275: PPUSH
109276: LD_STRING D24-c-SomeM-1
109278: PPUSH
109279: CALL_OW 88
109283: GO 109297
// Say ( speaker , D24-c-SomeF-1 ) ; end ;
109285: LD_VAR 0 1
109289: PPUSH
109290: LD_STRING D24-c-SomeF-1
109292: PPUSH
109293: CALL_OW 88
// end ; end_of_file
109297: LD_VAR 0 2
109301: RET
// every 0 0$1 + 0 0$0.2 do
109302: GO 109304
109304: DISABLE
// begin repeat wait ( 0 0$2 ) ;
109305: LD_INT 70
109307: PPUSH
109308: CALL_OW 67
// until IsMissionOver ;
109312: CALL 109323 0 0
109316: IFFALSE 109305
// EndMission ;
109318: CALL 109380 0 0
// end ;
109322: END
// export function IsMissionOver ; var temp_list ; begin
109323: LD_INT 0
109325: PPUSH
109326: PPUSH
// temp_list = ai_bases ;
109327: LD_ADDR_VAR 0 2
109331: PUSH
109332: LD_EXP 39
109336: ST_TO_ADDR
// if alliance_deal_status = 2 then
109337: LD_EXP 131
109341: PUSH
109342: LD_INT 2
109344: EQUAL
109345: IFFALSE 109361
// temp_list = temp_list diff 2 ;
109347: LD_ADDR_VAR 0 2
109351: PUSH
109352: LD_VAR 0 2
109356: PUSH
109357: LD_INT 2
109359: DIFF
109360: ST_TO_ADDR
// result := temp_list = 0 ;
109361: LD_ADDR_VAR 0 1
109365: PUSH
109366: LD_VAR 0 2
109370: PUSH
109371: LD_INT 0
109373: EQUAL
109374: ST_TO_ADDR
// end ;
109375: LD_VAR 0 1
109379: RET
// function EndMission ; var val , all_list , un_list , name_list ; var i , temp_list ; begin
109380: LD_INT 0
109382: PPUSH
109383: PPUSH
109384: PPUSH
109385: PPUSH
109386: PPUSH
109387: PPUSH
109388: PPUSH
// DialogueOn ;
109389: CALL_OW 6
// ForceSay ( Heike , D26-H-1 ) ;
109393: LD_EXP 10
109397: PPUSH
109398: LD_STRING D26-H-1
109400: PPUSH
109401: CALL_OW 91
// if IsLive ( Olaf ) then
109405: LD_EXP 11
109409: PPUSH
109410: CALL_OW 300
109414: IFFALSE 109428
// ForceSay ( Olaf , D26-Ola-1 ) ;
109416: LD_EXP 11
109420: PPUSH
109421: LD_STRING D26-Ola-1
109423: PPUSH
109424: CALL_OW 91
// if IsLive ( Sonya ) then
109428: LD_EXP 12
109432: PPUSH
109433: CALL_OW 300
109437: IFFALSE 109451
// ForceSay ( Sonya , D26-So-1 ) ;
109439: LD_EXP 12
109443: PPUSH
109444: LD_STRING D26-So-1
109446: PPUSH
109447: CALL_OW 91
// if IsLive ( Oswald ) then
109451: LD_EXP 13
109455: PPUSH
109456: CALL_OW 300
109460: IFFALSE 109474
// ForceSay ( Oswald , D26-Os-1 ) ;
109462: LD_EXP 13
109466: PPUSH
109467: LD_STRING D26-Os-1
109469: PPUSH
109470: CALL_OW 91
// if IsLive ( Ralph ) then
109474: LD_EXP 14
109478: PPUSH
109479: CALL_OW 300
109483: IFFALSE 109497
// ForceSay ( Ralph , D26-Ra-1 ) ;
109485: LD_EXP 14
109489: PPUSH
109490: LD_STRING D26-Ra-1
109492: PPUSH
109493: CALL_OW 91
// if IsLive ( Kowalski ) then
109497: LD_EXP 15
109501: PPUSH
109502: CALL_OW 300
109506: IFFALSE 109520
// ForceSay ( Kowalski , D26-Kow-1 ) ;
109508: LD_EXP 15
109512: PPUSH
109513: LD_STRING D26-Kow-1
109515: PPUSH
109516: CALL_OW 91
// if IsLive ( Suze ) then
109520: LD_EXP 16
109524: PPUSH
109525: CALL_OW 300
109529: IFFALSE 109543
// ForceSay ( Suze , D26-Su-1 ) ;
109531: LD_EXP 16
109535: PPUSH
109536: LD_STRING D26-Su-1
109538: PPUSH
109539: CALL_OW 91
// if IsLive ( MarkB ) then
109543: LD_EXP 17
109547: PPUSH
109548: CALL_OW 300
109552: IFFALSE 109566
// ForceSay ( MarkB , D26-Mark-1 ) ;
109554: LD_EXP 17
109558: PPUSH
109559: LD_STRING D26-Mark-1
109561: PPUSH
109562: CALL_OW 91
// if IsLive ( Kurt ) then
109566: LD_EXP 18
109570: PPUSH
109571: CALL_OW 300
109575: IFFALSE 109589
// ForceSay ( Kurt , D26-Ku-1 ) ;
109577: LD_EXP 18
109581: PPUSH
109582: LD_STRING D26-Ku-1
109584: PPUSH
109585: CALL_OW 91
// if IsLive ( Martin ) then
109589: LD_EXP 19
109593: PPUSH
109594: CALL_OW 300
109598: IFFALSE 109612
// ForceSay ( Martin , D26-Mart-1 ) ;
109600: LD_EXP 19
109604: PPUSH
109605: LD_STRING D26-Mart-1
109607: PPUSH
109608: CALL_OW 91
// if IsLive ( Louis ) then
109612: LD_EXP 20
109616: PPUSH
109617: CALL_OW 300
109621: IFFALSE 109635
// ForceSay ( Louis , D26-Lo-1 ) ;
109623: LD_EXP 20
109627: PPUSH
109628: LD_STRING D26-Lo-1
109630: PPUSH
109631: CALL_OW 91
// if IsLive ( Khattam ) then
109635: LD_EXP 21
109639: PPUSH
109640: CALL_OW 300
109644: IFFALSE 109658
// ForceSay ( Khattam , D26-Kh-1 ) ;
109646: LD_EXP 21
109650: PPUSH
109651: LD_STRING D26-Kh-1
109653: PPUSH
109654: CALL_OW 91
// if IsLive ( Kozlov ) then
109658: LD_EXP 22
109662: PPUSH
109663: CALL_OW 300
109667: IFFALSE 109681
// ForceSay ( Kozlov , D26-Koz-1 ) ;
109669: LD_EXP 22
109673: PPUSH
109674: LD_STRING D26-Koz-1
109676: PPUSH
109677: CALL_OW 91
// if IsLive ( Kyouma ) then
109681: LD_EXP 24
109685: PPUSH
109686: CALL_OW 300
109690: IFFALSE 109704
// ForceSay ( Kyouma , D26-Kyo-1 ) ;
109692: LD_EXP 24
109696: PPUSH
109697: LD_STRING D26-Kyo-1
109699: PPUSH
109700: CALL_OW 91
// if IsLive ( Roth ) and alliance_deal_status = 2 then
109704: LD_EXP 26
109708: PPUSH
109709: CALL_OW 300
109713: PUSH
109714: LD_EXP 131
109718: PUSH
109719: LD_INT 2
109721: EQUAL
109722: AND
109723: IFFALSE 109737
// ForceSay ( Roth , D26-Ro-1 ) ;
109725: LD_EXP 26
109729: PPUSH
109730: LD_STRING D26-Ro-1
109732: PPUSH
109733: CALL_OW 91
// if IsLive ( Gossudarov ) and alliance_deal_status = 2 then
109737: LD_EXP 27
109741: PPUSH
109742: CALL_OW 300
109746: PUSH
109747: LD_EXP 131
109751: PUSH
109752: LD_INT 2
109754: EQUAL
109755: AND
109756: IFFALSE 109770
// ForceSay ( Gossudarov , D26-Go-1 ) ;
109758: LD_EXP 27
109762: PPUSH
109763: LD_STRING D26-Go-1
109765: PPUSH
109766: CALL_OW 91
// if IsLive ( Joan ) and alliance_deal_status = 2 then
109770: LD_EXP 28
109774: PPUSH
109775: CALL_OW 300
109779: PUSH
109780: LD_EXP 131
109784: PUSH
109785: LD_INT 2
109787: EQUAL
109788: AND
109789: IFFALSE 109803
// ForceSay ( Joan , D26-Jo-1 ) ;
109791: LD_EXP 28
109795: PPUSH
109796: LD_STRING D26-Jo-1
109798: PPUSH
109799: CALL_OW 91
// DialogueOff ;
109803: CALL_OW 7
// wait ( 0 0$0.2 ) ;
109807: LD_INT 7
109809: PPUSH
109810: CALL_OW 67
// AddMedal ( Future , 1 ) ;
109814: LD_STRING Future
109816: PPUSH
109817: LD_INT 1
109819: PPUSH
109820: CALL_OW 101
// if UnitFilter ( player_starting_units , [ f_alive ] ) + 0 = player_starting_units + 0 then
109824: LD_EXP 147
109828: PPUSH
109829: LD_INT 51
109831: PUSH
109832: EMPTY
109833: LIST
109834: PPUSH
109835: CALL_OW 72
109839: PUSH
109840: LD_INT 0
109842: PLUS
109843: PUSH
109844: LD_EXP 147
109848: PUSH
109849: LD_INT 0
109851: PLUS
109852: EQUAL
109853: IFFALSE 109865
// val = 1 else
109855: LD_ADDR_VAR 0 2
109859: PUSH
109860: LD_INT 1
109862: ST_TO_ADDR
109863: GO 109874
// val = - 1 ;
109865: LD_ADDR_VAR 0 2
109869: PUSH
109870: LD_INT 1
109872: NEG
109873: ST_TO_ADDR
// AddMedal ( NoLoses , val ) ;
109874: LD_STRING NoLoses
109876: PPUSH
109877: LD_VAR 0 2
109881: PPUSH
109882: CALL_OW 101
// if elimination_order [ elimination_order + 0 ] <> 1 then
109886: LD_EXP 146
109890: PUSH
109891: LD_EXP 146
109895: PUSH
109896: LD_INT 0
109898: PLUS
109899: ARRAY
109900: PUSH
109901: LD_INT 1
109903: NONEQUAL
109904: IFFALSE 109916
// val = 1 else
109906: LD_ADDR_VAR 0 2
109910: PUSH
109911: LD_INT 1
109913: ST_TO_ADDR
109914: GO 109956
// if all_artifacts_researched then
109916: LD_EXP 148
109920: IFFALSE 109932
// val = 2 else
109922: LD_ADDR_VAR 0 2
109926: PUSH
109927: LD_INT 2
109929: ST_TO_ADDR
109930: GO 109956
// if StratGroupBUsed then
109932: CALL 85643 0 0
109936: IFFALSE 109948
// val = 3 else
109938: LD_ADDR_VAR 0 2
109942: PUSH
109943: LD_INT 3
109945: ST_TO_ADDR
109946: GO 109956
// val = 4 ;
109948: LD_ADDR_VAR 0 2
109952: PUSH
109953: LD_INT 4
109955: ST_TO_ADDR
// AddMedal ( Special , val ) ;
109956: LD_STRING Special
109958: PPUSH
109959: LD_VAR 0 2
109963: PPUSH
109964: CALL_OW 101
// GiveMedals ( Medals ) ;
109968: LD_STRING Medals
109970: PPUSH
109971: CALL_OW 102
// InGameOn ;
109975: CALL_OW 8
// Query ( QCutsceneInfo ) ;
109979: LD_STRING QCutsceneInfo
109981: PPUSH
109982: CALL_OW 97
// wait ( 0 0$0.5 ) ;
109986: LD_INT 18
109988: PPUSH
109989: CALL_OW 67
// YouWin ;
109993: CALL_OW 103
// InGameOff ;
109997: CALL_OW 9
// end ;
110001: LD_VAR 0 1
110005: RET
