// export testing ; export you , nature , you_alt , americans , upf ; export Heike , Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis ; export Khattam , upf_deserter , other_louis_folks ; export Gensher , Heinz , Gordon , Willard , freelancers_leader , other_freelancers ; export Powell , Hugh ; export ai_soldiers , ai_engineers , ai_mechanics_defend , ai_scientists , ai_commander , ai_depot , ai_labs , ai_siberite_mines ; export ai_power_plants , ai_buildings_locations , ai_vehicles_defend , ai_vehicles_attack , ai_human_pullback_hex , ai_vehicle_pullback_hexes ; export ai_building_under_construction , ai_heal_these_humans , ai_all_buildings , ai_building_constructor ; export ai_upcoming_building_data , ai_facts , ai_armouries , ai_bunkers , ai_oil_mine , ai_fact_extensions ; export ai_near_base_dist , ai_going_to_attack_this_base , ai_refuel_vehicles_list , ai_turrets , ai_control_tower ; export ai_vehicle_attack_delay , ai_bases , ai_has_switched_base_target , ai_cargo_bay , ai_cargo_bay_under_construction , ai_apemen_engineers ; export ai_attacking_soldiers , ai_attacking_scientists , ai_humans_ready_to_attack , ai_retreating_attacking_humans , ai_human_attack_delay ; export ai_crane , ai_crane_under_construction , ai_time_shift_data , ai_time_shift_hexes , ai_time_shift_hexes_underway , ai_attacking_unit_hex_index ; export ai_contact_time , ai_attack_ground_info_initial , ai_attack_ground_info_sustain , ai_vehicle_being_moved , ai_vehicles_having_been_moved ; export ai_retreating_vehicles_defend , ai_mechanics_attack , ai_cargo_bay_destroy_tick , ai_crane_destroy_tick , ai_crane_is_being_repaired ; export ai_crane_driver , ai_cannot_rebuild_these_buildings , ai_captured_buildings , ai_vehicles_being_repaired , ai_excepted_buildings ; export ai_sib_bomb_mechanics ; export sib_rocket_factory , sib_rocket_factory_location , sib_lab , player_base_b_types , buildup_objective_can_be_completed ; export khattam_choice , freelancers_may_appear , freelancers_choice , freelancers_are_dead , upf_deserter_choice , upf_speaker ; export louis_gordon_dispute_choice , am_reinforcements_time , am_reinforcements_start , freelancers_bombing_start , gensher_accused_deserter ; export gensher_accused_freelancers , freelancers_second_choice , kill_gensher_objective_status , louis_walks_away_himself ; export am_scientists_escape_status , scientist_escaped , am_reinforcements_got_through , louis_gone , player_has_seen_am_labs_explode ; export americans_retreat , sib_rocket_fired ; export upf_attack_status , upf_gensher_guards , upf_mechanics , upf_soldiers_west , upf_soldiers_east , upf_vehicles_control ; export upf_vehicles_attack , upf_gensher_guards_vehicles , upf_mechanic_attack_map , upf_mechanic_control_map , gensher_vehicle ; export upf_scientists_west , upf_scientists_east , upf_mine_list , upf_mines_are_placed , upf_start_mineclearing ; starting begin RandomizeAll ;
   0: CALL_OW 11
// ResetFog ;
   4: CALL_OW 335
// testing = false ;
   8: LD_ADDR_EXP 1
  12: PUSH
  13: LD_INT 0
  15: ST_TO_ADDR
// ai_bases = [ 1 , 2 ] ;
  16: LD_ADDR_EXP 59
  20: PUSH
  21: LD_INT 1
  23: PUSH
  24: LD_INT 2
  26: PUSH
  27: EMPTY
  28: LIST
  29: LIST
  30: ST_TO_ADDR
// ai_soldiers = [ [ ] , [ ] , [ ] ] ;
  31: LD_ADDR_EXP 29
  35: PUSH
  36: EMPTY
  37: PUSH
  38: EMPTY
  39: PUSH
  40: EMPTY
  41: PUSH
  42: EMPTY
  43: LIST
  44: LIST
  45: LIST
  46: ST_TO_ADDR
// ai_attacking_soldiers = [ [ ] , [ ] , [ ] ] ;
  47: LD_ADDR_EXP 64
  51: PUSH
  52: EMPTY
  53: PUSH
  54: EMPTY
  55: PUSH
  56: EMPTY
  57: PUSH
  58: EMPTY
  59: LIST
  60: LIST
  61: LIST
  62: ST_TO_ADDR
// ai_engineers = [ [ ] , [ ] , [ ] ] ;
  63: LD_ADDR_EXP 30
  67: PUSH
  68: EMPTY
  69: PUSH
  70: EMPTY
  71: PUSH
  72: EMPTY
  73: PUSH
  74: EMPTY
  75: LIST
  76: LIST
  77: LIST
  78: ST_TO_ADDR
// ai_mechanics_defend = [ [ ] , [ ] , [ ] ] ;
  79: LD_ADDR_EXP 31
  83: PUSH
  84: EMPTY
  85: PUSH
  86: EMPTY
  87: PUSH
  88: EMPTY
  89: PUSH
  90: EMPTY
  91: LIST
  92: LIST
  93: LIST
  94: ST_TO_ADDR
// ai_mechanics_attack = [ [ ] , [ ] , [ ] ] ;
  95: LD_ADDR_EXP 81
  99: PUSH
 100: EMPTY
 101: PUSH
 102: EMPTY
 103: PUSH
 104: EMPTY
 105: PUSH
 106: EMPTY
 107: LIST
 108: LIST
 109: LIST
 110: ST_TO_ADDR
// ai_scientists = [ [ ] , [ ] , [ ] ] ;
 111: LD_ADDR_EXP 32
 115: PUSH
 116: EMPTY
 117: PUSH
 118: EMPTY
 119: PUSH
 120: EMPTY
 121: PUSH
 122: EMPTY
 123: LIST
 124: LIST
 125: LIST
 126: ST_TO_ADDR
// ai_attacking_scientists = [ [ ] , [ ] , [ ] ] ;
 127: LD_ADDR_EXP 65
 131: PUSH
 132: EMPTY
 133: PUSH
 134: EMPTY
 135: PUSH
 136: EMPTY
 137: PUSH
 138: EMPTY
 139: LIST
 140: LIST
 141: LIST
 142: ST_TO_ADDR
// ai_apemen_engineers = [ [ ] , [ ] , [ ] ] ;
 143: LD_ADDR_EXP 63
 147: PUSH
 148: EMPTY
 149: PUSH
 150: EMPTY
 151: PUSH
 152: EMPTY
 153: PUSH
 154: EMPTY
 155: LIST
 156: LIST
 157: LIST
 158: ST_TO_ADDR
// ai_sib_bomb_mechanics = [ [ ] , [ ] , [ ] , [ ] ] ;
 159: LD_ADDR_EXP 90
 163: PUSH
 164: EMPTY
 165: PUSH
 166: EMPTY
 167: PUSH
 168: EMPTY
 169: PUSH
 170: EMPTY
 171: PUSH
 172: EMPTY
 173: LIST
 174: LIST
 175: LIST
 176: LIST
 177: ST_TO_ADDR
// ai_depot = [ 0 , 0 , 0 ] ;
 178: LD_ADDR_EXP 34
 182: PUSH
 183: LD_INT 0
 185: PUSH
 186: LD_INT 0
 188: PUSH
 189: LD_INT 0
 191: PUSH
 192: EMPTY
 193: LIST
 194: LIST
 195: LIST
 196: ST_TO_ADDR
// ai_labs = [ [ ] , [ ] , [ ] ] ;
 197: LD_ADDR_EXP 35
 201: PUSH
 202: EMPTY
 203: PUSH
 204: EMPTY
 205: PUSH
 206: EMPTY
 207: PUSH
 208: EMPTY
 209: LIST
 210: LIST
 211: LIST
 212: ST_TO_ADDR
// ai_facts = [ [ ] , [ ] , [ ] ] ;
 213: LD_ADDR_EXP 48
 217: PUSH
 218: EMPTY
 219: PUSH
 220: EMPTY
 221: PUSH
 222: EMPTY
 223: PUSH
 224: EMPTY
 225: LIST
 226: LIST
 227: LIST
 228: ST_TO_ADDR
// ai_armouries = [ [ ] , [ ] , [ ] ] ;
 229: LD_ADDR_EXP 49
 233: PUSH
 234: EMPTY
 235: PUSH
 236: EMPTY
 237: PUSH
 238: EMPTY
 239: PUSH
 240: EMPTY
 241: LIST
 242: LIST
 243: LIST
 244: ST_TO_ADDR
// ai_bunkers = [ [ ] , [ ] , [ ] ] ;
 245: LD_ADDR_EXP 50
 249: PUSH
 250: EMPTY
 251: PUSH
 252: EMPTY
 253: PUSH
 254: EMPTY
 255: PUSH
 256: EMPTY
 257: LIST
 258: LIST
 259: LIST
 260: ST_TO_ADDR
// ai_turrets = [ [ ] , [ ] , [ ] ] ;
 261: LD_ADDR_EXP 56
 265: PUSH
 266: EMPTY
 267: PUSH
 268: EMPTY
 269: PUSH
 270: EMPTY
 271: PUSH
 272: EMPTY
 273: LIST
 274: LIST
 275: LIST
 276: ST_TO_ADDR
// ai_oil_mine = [ 0 , 0 , 0 ] ;
 277: LD_ADDR_EXP 51
 281: PUSH
 282: LD_INT 0
 284: PUSH
 285: LD_INT 0
 287: PUSH
 288: LD_INT 0
 290: PUSH
 291: EMPTY
 292: LIST
 293: LIST
 294: LIST
 295: ST_TO_ADDR
// ai_siberite_mines = [ [ ] , [ ] , [ ] ] ;
 296: LD_ADDR_EXP 36
 300: PUSH
 301: EMPTY
 302: PUSH
 303: EMPTY
 304: PUSH
 305: EMPTY
 306: PUSH
 307: EMPTY
 308: LIST
 309: LIST
 310: LIST
 311: ST_TO_ADDR
// ai_fact_extensions = [ [ ] , [ ] , [ ] ] ;
 312: LD_ADDR_EXP 52
 316: PUSH
 317: EMPTY
 318: PUSH
 319: EMPTY
 320: PUSH
 321: EMPTY
 322: PUSH
 323: EMPTY
 324: LIST
 325: LIST
 326: LIST
 327: ST_TO_ADDR
// ai_power_plants = [ [ ] , [ ] , [ ] ] ;
 328: LD_ADDR_EXP 37
 332: PUSH
 333: EMPTY
 334: PUSH
 335: EMPTY
 336: PUSH
 337: EMPTY
 338: PUSH
 339: EMPTY
 340: LIST
 341: LIST
 342: LIST
 343: ST_TO_ADDR
// ai_control_tower = [ 0 , 0 , 0 ] ;
 344: LD_ADDR_EXP 57
 348: PUSH
 349: LD_INT 0
 351: PUSH
 352: LD_INT 0
 354: PUSH
 355: LD_INT 0
 357: PUSH
 358: EMPTY
 359: LIST
 360: LIST
 361: LIST
 362: ST_TO_ADDR
// ai_buildings_locations = [ [ ] , [ ] , [ ] ] ;
 363: LD_ADDR_EXP 38
 367: PUSH
 368: EMPTY
 369: PUSH
 370: EMPTY
 371: PUSH
 372: EMPTY
 373: PUSH
 374: EMPTY
 375: LIST
 376: LIST
 377: LIST
 378: ST_TO_ADDR
// ai_captured_buildings = [ [ ] , [ ] , [ ] ] ;
 379: LD_ADDR_EXP 87
 383: PUSH
 384: EMPTY
 385: PUSH
 386: EMPTY
 387: PUSH
 388: EMPTY
 389: PUSH
 390: EMPTY
 391: LIST
 392: LIST
 393: LIST
 394: ST_TO_ADDR
// ai_vehicles_defend = [ [ ] , [ ] , [ ] ] ;
 395: LD_ADDR_EXP 39
 399: PUSH
 400: EMPTY
 401: PUSH
 402: EMPTY
 403: PUSH
 404: EMPTY
 405: PUSH
 406: EMPTY
 407: LIST
 408: LIST
 409: LIST
 410: ST_TO_ADDR
// ai_vehicles_attack = [ [ ] , [ ] , [ ] ] ;
 411: LD_ADDR_EXP 40
 415: PUSH
 416: EMPTY
 417: PUSH
 418: EMPTY
 419: PUSH
 420: EMPTY
 421: PUSH
 422: EMPTY
 423: LIST
 424: LIST
 425: LIST
 426: ST_TO_ADDR
// ai_retreating_vehicles_defend = [ [ ] , [ ] , [ ] ] ;
 427: LD_ADDR_EXP 80
 431: PUSH
 432: EMPTY
 433: PUSH
 434: EMPTY
 435: PUSH
 436: EMPTY
 437: PUSH
 438: EMPTY
 439: LIST
 440: LIST
 441: LIST
 442: ST_TO_ADDR
// ai_vehicles_being_repaired = [ [ ] , [ ] , [ ] ] ;
 443: LD_ADDR_EXP 88
 447: PUSH
 448: EMPTY
 449: PUSH
 450: EMPTY
 451: PUSH
 452: EMPTY
 453: PUSH
 454: EMPTY
 455: LIST
 456: LIST
 457: LIST
 458: ST_TO_ADDR
// ai_refuel_vehicles_list = [ [ ] , [ ] , [ ] ] ;
 459: LD_ADDR_EXP 55
 463: PUSH
 464: EMPTY
 465: PUSH
 466: EMPTY
 467: PUSH
 468: EMPTY
 469: PUSH
 470: EMPTY
 471: LIST
 472: LIST
 473: LIST
 474: ST_TO_ADDR
// ai_vehicle_pullback_hexes = [ [ [ 52 , 76 ] , [ 34 , 45 ] , [ 25 , 38 ] , [ 29 , 53 ] ] , [ ] , [ ] ] ;
 475: LD_ADDR_EXP 42
 479: PUSH
 480: LD_INT 52
 482: PUSH
 483: LD_INT 76
 485: PUSH
 486: EMPTY
 487: LIST
 488: LIST
 489: PUSH
 490: LD_INT 34
 492: PUSH
 493: LD_INT 45
 495: PUSH
 496: EMPTY
 497: LIST
 498: LIST
 499: PUSH
 500: LD_INT 25
 502: PUSH
 503: LD_INT 38
 505: PUSH
 506: EMPTY
 507: LIST
 508: LIST
 509: PUSH
 510: LD_INT 29
 512: PUSH
 513: LD_INT 53
 515: PUSH
 516: EMPTY
 517: LIST
 518: LIST
 519: PUSH
 520: EMPTY
 521: LIST
 522: LIST
 523: LIST
 524: LIST
 525: PUSH
 526: EMPTY
 527: PUSH
 528: EMPTY
 529: PUSH
 530: EMPTY
 531: LIST
 532: LIST
 533: LIST
 534: ST_TO_ADDR
// ai_human_pullback_hex = [ [ 34 , 61 ] , [ 94 , 104 ] ] ;
 535: LD_ADDR_EXP 41
 539: PUSH
 540: LD_INT 34
 542: PUSH
 543: LD_INT 61
 545: PUSH
 546: EMPTY
 547: LIST
 548: LIST
 549: PUSH
 550: LD_INT 94
 552: PUSH
 553: LD_INT 104
 555: PUSH
 556: EMPTY
 557: LIST
 558: LIST
 559: PUSH
 560: EMPTY
 561: LIST
 562: LIST
 563: ST_TO_ADDR
// ai_building_under_construction = [ 0 , 0 , 0 ] ;
 564: LD_ADDR_EXP 43
 568: PUSH
 569: LD_INT 0
 571: PUSH
 572: LD_INT 0
 574: PUSH
 575: LD_INT 0
 577: PUSH
 578: EMPTY
 579: LIST
 580: LIST
 581: LIST
 582: ST_TO_ADDR
// ai_heal_these_humans = [ [ ] , [ ] , [ ] ] ;
 583: LD_ADDR_EXP 44
 587: PUSH
 588: EMPTY
 589: PUSH
 590: EMPTY
 591: PUSH
 592: EMPTY
 593: PUSH
 594: EMPTY
 595: LIST
 596: LIST
 597: LIST
 598: ST_TO_ADDR
// ai_all_buildings = [ [ ] , [ ] , [ ] ] ;
 599: LD_ADDR_EXP 45
 603: PUSH
 604: EMPTY
 605: PUSH
 606: EMPTY
 607: PUSH
 608: EMPTY
 609: PUSH
 610: EMPTY
 611: LIST
 612: LIST
 613: LIST
 614: ST_TO_ADDR
// ai_building_constructor = [ 0 , 0 , 0 ] ;
 615: LD_ADDR_EXP 46
 619: PUSH
 620: LD_INT 0
 622: PUSH
 623: LD_INT 0
 625: PUSH
 626: LD_INT 0
 628: PUSH
 629: EMPTY
 630: LIST
 631: LIST
 632: LIST
 633: ST_TO_ADDR
// ai_vehicle_being_moved = [ 0 , 0 , 0 ] ;
 634: LD_ADDR_EXP 78
 638: PUSH
 639: LD_INT 0
 641: PUSH
 642: LD_INT 0
 644: PUSH
 645: LD_INT 0
 647: PUSH
 648: EMPTY
 649: LIST
 650: LIST
 651: LIST
 652: ST_TO_ADDR
// ai_vehicles_having_been_moved = [ [ ] , [ ] , [ ] ] ;
 653: LD_ADDR_EXP 79
 657: PUSH
 658: EMPTY
 659: PUSH
 660: EMPTY
 661: PUSH
 662: EMPTY
 663: PUSH
 664: EMPTY
 665: LIST
 666: LIST
 667: LIST
 668: ST_TO_ADDR
// ai_upcoming_building_data = [ [ ] , [ ] , [ ] ] ;
 669: LD_ADDR_EXP 47
 673: PUSH
 674: EMPTY
 675: PUSH
 676: EMPTY
 677: PUSH
 678: EMPTY
 679: PUSH
 680: EMPTY
 681: LIST
 682: LIST
 683: LIST
 684: ST_TO_ADDR
// ai_cannot_rebuild_these_buildings = [ [ ] , [ ] , [ ] ] ;
 685: LD_ADDR_EXP 86
 689: PUSH
 690: EMPTY
 691: PUSH
 692: EMPTY
 693: PUSH
 694: EMPTY
 695: PUSH
 696: EMPTY
 697: LIST
 698: LIST
 699: LIST
 700: ST_TO_ADDR
// ai_near_base_dist = 18 ;
 701: LD_ADDR_EXP 53
 705: PUSH
 706: LD_INT 18
 708: ST_TO_ADDR
// ai_vehicle_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
 709: LD_ADDR_EXP 58
 713: PUSH
 714: LD_INT 0
 716: PUSH
 717: LD_INT 0
 719: PUSH
 720: LD_INT 0
 722: PUSH
 723: EMPTY
 724: LIST
 725: LIST
 726: LIST
 727: ST_TO_ADDR
// ai_human_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
 728: LD_ADDR_EXP 68
 732: PUSH
 733: LD_INT 0
 735: PUSH
 736: LD_INT 0
 738: PUSH
 739: LD_INT 0
 741: PUSH
 742: EMPTY
 743: LIST
 744: LIST
 745: LIST
 746: ST_TO_ADDR
// ai_cargo_bay = [ 0 , 0 , 0 ] ;
 747: LD_ADDR_EXP 61
 751: PUSH
 752: LD_INT 0
 754: PUSH
 755: LD_INT 0
 757: PUSH
 758: LD_INT 0
 760: PUSH
 761: EMPTY
 762: LIST
 763: LIST
 764: LIST
 765: ST_TO_ADDR
// ai_cargo_bay_under_construction = [ false , false , false ] ;
 766: LD_ADDR_EXP 62
 770: PUSH
 771: LD_INT 0
 773: PUSH
 774: LD_INT 0
 776: PUSH
 777: LD_INT 0
 779: PUSH
 780: EMPTY
 781: LIST
 782: LIST
 783: LIST
 784: ST_TO_ADDR
// ai_cargo_bay_destroy_tick = [ tick , tick , tick ] ;
 785: LD_ADDR_EXP 82
 789: PUSH
 790: LD_OWVAR 1
 794: PUSH
 795: LD_OWVAR 1
 799: PUSH
 800: LD_OWVAR 1
 804: PUSH
 805: EMPTY
 806: LIST
 807: LIST
 808: LIST
 809: ST_TO_ADDR
// ai_crane = [ 0 , 0 , 0 ] ;
 810: LD_ADDR_EXP 69
 814: PUSH
 815: LD_INT 0
 817: PUSH
 818: LD_INT 0
 820: PUSH
 821: LD_INT 0
 823: PUSH
 824: EMPTY
 825: LIST
 826: LIST
 827: LIST
 828: ST_TO_ADDR
// ai_crane_under_construction = [ false , false , false ] ;
 829: LD_ADDR_EXP 70
 833: PUSH
 834: LD_INT 0
 836: PUSH
 837: LD_INT 0
 839: PUSH
 840: LD_INT 0
 842: PUSH
 843: EMPTY
 844: LIST
 845: LIST
 846: LIST
 847: ST_TO_ADDR
// ai_crane_destroy_tick = [ tick , tick , tick ] ;
 848: LD_ADDR_EXP 83
 852: PUSH
 853: LD_OWVAR 1
 857: PUSH
 858: LD_OWVAR 1
 862: PUSH
 863: LD_OWVAR 1
 867: PUSH
 868: EMPTY
 869: LIST
 870: LIST
 871: LIST
 872: ST_TO_ADDR
// ai_crane_is_being_repaired = [ false , false , false ] ;
 873: LD_ADDR_EXP 84
 877: PUSH
 878: LD_INT 0
 880: PUSH
 881: LD_INT 0
 883: PUSH
 884: LD_INT 0
 886: PUSH
 887: EMPTY
 888: LIST
 889: LIST
 890: LIST
 891: ST_TO_ADDR
// ai_crane_driver = [ 0 , 0 , 0 ] ;
 892: LD_ADDR_EXP 85
 896: PUSH
 897: LD_INT 0
 899: PUSH
 900: LD_INT 0
 902: PUSH
 903: LD_INT 0
 905: PUSH
 906: EMPTY
 907: LIST
 908: LIST
 909: LIST
 910: ST_TO_ADDR
// ai_attacking_unit_hex_index = [ [ ] , [ ] , [ ] ] ;
 911: LD_ADDR_EXP 74
 915: PUSH
 916: EMPTY
 917: PUSH
 918: EMPTY
 919: PUSH
 920: EMPTY
 921: PUSH
 922: EMPTY
 923: LIST
 924: LIST
 925: LIST
 926: ST_TO_ADDR
// ai_retreating_attacking_humans = [ [ ] , [ ] , [ ] ] ;
 927: LD_ADDR_EXP 67
 931: PUSH
 932: EMPTY
 933: PUSH
 934: EMPTY
 935: PUSH
 936: EMPTY
 937: PUSH
 938: EMPTY
 939: LIST
 940: LIST
 941: LIST
 942: ST_TO_ADDR
// ai_excepted_buildings = [ [ ] , [ ] , [ ] ] ;
 943: LD_ADDR_EXP 89
 947: PUSH
 948: EMPTY
 949: PUSH
 950: EMPTY
 951: PUSH
 952: EMPTY
 953: PUSH
 954: EMPTY
 955: LIST
 956: LIST
 957: LIST
 958: ST_TO_ADDR
// ai_time_shift_data = [ [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] ] ;
 959: LD_ADDR_EXP 71
 963: PUSH
 964: EMPTY
 965: PUSH
 966: EMPTY
 967: PUSH
 968: EMPTY
 969: PUSH
 970: EMPTY
 971: PUSH
 972: EMPTY
 973: PUSH
 974: EMPTY
 975: PUSH
 976: EMPTY
 977: PUSH
 978: EMPTY
 979: PUSH
 980: EMPTY
 981: LIST
 982: LIST
 983: LIST
 984: LIST
 985: LIST
 986: LIST
 987: LIST
 988: LIST
 989: ST_TO_ADDR
// ai_time_shift_hexes = [ [ ] , [ ] , [ ] ] ;
 990: LD_ADDR_EXP 72
 994: PUSH
 995: EMPTY
 996: PUSH
 997: EMPTY
 998: PUSH
 999: EMPTY
1000: PUSH
1001: EMPTY
1002: LIST
1003: LIST
1004: LIST
1005: ST_TO_ADDR
// ai_time_shift_hexes_underway = [ [ ] , [ ] , [ ] ] ;
1006: LD_ADDR_EXP 73
1010: PUSH
1011: EMPTY
1012: PUSH
1013: EMPTY
1014: PUSH
1015: EMPTY
1016: PUSH
1017: EMPTY
1018: LIST
1019: LIST
1020: LIST
1021: ST_TO_ADDR
// Initiate_ai_contact_time ;
1022: CALL 1437 0 0
// ai_attack_ground_info_initial = [ ] ;
1026: LD_ADDR_EXP 76
1030: PUSH
1031: EMPTY
1032: ST_TO_ADDR
// ai_attack_ground_info_sustain = [ ] ;
1033: LD_ADDR_EXP 77
1037: PUSH
1038: EMPTY
1039: ST_TO_ADDR
// sib_rocket_factory = sib_fact ;
1040: LD_ADDR_EXP 91
1044: PUSH
1045: LD_INT 48
1047: ST_TO_ADDR
// sib_rocket_factory_location = [ GetX ( sib_fact ) , GetY ( sib_fact ) ] ;
1048: LD_ADDR_EXP 92
1052: PUSH
1053: LD_INT 48
1055: PPUSH
1056: CALL_OW 250
1060: PUSH
1061: LD_INT 48
1063: PPUSH
1064: CALL_OW 251
1068: PUSH
1069: EMPTY
1070: LIST
1071: LIST
1072: ST_TO_ADDR
// sib_lab = 0 ;
1073: LD_ADDR_EXP 93
1077: PUSH
1078: LD_INT 0
1080: ST_TO_ADDR
// player_base_b_types = [ b_depot , b_lab , b_workshop , b_armoury ] ;
1081: LD_ADDR_EXP 94
1085: PUSH
1086: LD_INT 0
1088: PUSH
1089: LD_INT 6
1091: PUSH
1092: LD_INT 2
1094: PUSH
1095: LD_INT 4
1097: PUSH
1098: EMPTY
1099: LIST
1100: LIST
1101: LIST
1102: LIST
1103: ST_TO_ADDR
// buildup_objective_can_be_completed = false ;
1104: LD_ADDR_EXP 95
1108: PUSH
1109: LD_INT 0
1111: ST_TO_ADDR
// khattam_choice = 0 ;
1112: LD_ADDR_EXP 96
1116: PUSH
1117: LD_INT 0
1119: ST_TO_ADDR
// freelancers_may_appear = false ;
1120: LD_ADDR_EXP 97
1124: PUSH
1125: LD_INT 0
1127: ST_TO_ADDR
// freelancers_choice = 0 ;
1128: LD_ADDR_EXP 98
1132: PUSH
1133: LD_INT 0
1135: ST_TO_ADDR
// freelancers_are_dead = false ;
1136: LD_ADDR_EXP 99
1140: PUSH
1141: LD_INT 0
1143: ST_TO_ADDR
// upf_deserter_choice = 0 ;
1144: LD_ADDR_EXP 100
1148: PUSH
1149: LD_INT 0
1151: ST_TO_ADDR
// upf_speaker = 0 ;
1152: LD_ADDR_EXP 101
1156: PUSH
1157: LD_INT 0
1159: ST_TO_ADDR
// louis_gordon_dispute_choice = 0 ;
1160: LD_ADDR_EXP 102
1164: PUSH
1165: LD_INT 0
1167: ST_TO_ADDR
// am_reinforcements_time = 0 0$0 ;
1168: LD_ADDR_EXP 103
1172: PUSH
1173: LD_INT 0
1175: ST_TO_ADDR
// am_reinforcements_start = false ;
1176: LD_ADDR_EXP 104
1180: PUSH
1181: LD_INT 0
1183: ST_TO_ADDR
// freelancers_bombing_start = false ;
1184: LD_ADDR_EXP 105
1188: PUSH
1189: LD_INT 0
1191: ST_TO_ADDR
// gensher_accused_deserter = false ;
1192: LD_ADDR_EXP 106
1196: PUSH
1197: LD_INT 0
1199: ST_TO_ADDR
// gensher_accused_freelancers = false ;
1200: LD_ADDR_EXP 107
1204: PUSH
1205: LD_INT 0
1207: ST_TO_ADDR
// freelancers_second_choice = 0 ;
1208: LD_ADDR_EXP 108
1212: PUSH
1213: LD_INT 0
1215: ST_TO_ADDR
// kill_gensher_objective_status = 0 ;
1216: LD_ADDR_EXP 109
1220: PUSH
1221: LD_INT 0
1223: ST_TO_ADDR
// louis_walks_away_himself = false ;
1224: LD_ADDR_EXP 110
1228: PUSH
1229: LD_INT 0
1231: ST_TO_ADDR
// am_scientists_escape_status = 0 ;
1232: LD_ADDR_EXP 111
1236: PUSH
1237: LD_INT 0
1239: ST_TO_ADDR
// scientist_escaped = false ;
1240: LD_ADDR_EXP 112
1244: PUSH
1245: LD_INT 0
1247: ST_TO_ADDR
// am_reinforcements_got_through = false ;
1248: LD_ADDR_EXP 113
1252: PUSH
1253: LD_INT 0
1255: ST_TO_ADDR
// louis_gone = false ;
1256: LD_ADDR_EXP 114
1260: PUSH
1261: LD_INT 0
1263: ST_TO_ADDR
// player_has_seen_am_labs_explode = false ;
1264: LD_ADDR_EXP 115
1268: PUSH
1269: LD_INT 0
1271: ST_TO_ADDR
// americans_retreat = false ;
1272: LD_ADDR_EXP 116
1276: PUSH
1277: LD_INT 0
1279: ST_TO_ADDR
// sib_rocket_fired = false ;
1280: LD_ADDR_EXP 117
1284: PUSH
1285: LD_INT 0
1287: ST_TO_ADDR
// upf_attack_status = 0 ;
1288: LD_ADDR_EXP 118
1292: PUSH
1293: LD_INT 0
1295: ST_TO_ADDR
// upf_gensher_guards = [ ] ;
1296: LD_ADDR_EXP 119
1300: PUSH
1301: EMPTY
1302: ST_TO_ADDR
// upf_gensher_guards_vehicles = [ ] ;
1303: LD_ADDR_EXP 125
1307: PUSH
1308: EMPTY
1309: ST_TO_ADDR
// upf_mechanics = [ ] ;
1310: LD_ADDR_EXP 120
1314: PUSH
1315: EMPTY
1316: ST_TO_ADDR
// upf_soldiers_west = [ ] ;
1317: LD_ADDR_EXP 121
1321: PUSH
1322: EMPTY
1323: ST_TO_ADDR
// upf_soldiers_east = [ ] ;
1324: LD_ADDR_EXP 122
1328: PUSH
1329: EMPTY
1330: ST_TO_ADDR
// upf_scientists_west = [ ] ;
1331: LD_ADDR_EXP 129
1335: PUSH
1336: EMPTY
1337: ST_TO_ADDR
// upf_scientists_east = [ ] ;
1338: LD_ADDR_EXP 130
1342: PUSH
1343: EMPTY
1344: ST_TO_ADDR
// upf_vehicles_control = [ ] ;
1345: LD_ADDR_EXP 123
1349: PUSH
1350: EMPTY
1351: ST_TO_ADDR
// upf_vehicles_attack = [ ] ;
1352: LD_ADDR_EXP 124
1356: PUSH
1357: EMPTY
1358: ST_TO_ADDR
// upf_mechanic_attack_map = [ ] ;
1359: LD_ADDR_EXP 126
1363: PUSH
1364: EMPTY
1365: ST_TO_ADDR
// upf_mechanic_control_map = [ ] ;
1366: LD_ADDR_EXP 127
1370: PUSH
1371: EMPTY
1372: ST_TO_ADDR
// gensher_vehicle = 0 ;
1373: LD_ADDR_EXP 128
1377: PUSH
1378: LD_INT 0
1380: ST_TO_ADDR
// upf_mine_list = [ ] ;
1381: LD_ADDR_EXP 131
1385: PUSH
1386: EMPTY
1387: ST_TO_ADDR
// upf_mines_are_placed = false ;
1388: LD_ADDR_EXP 132
1392: PUSH
1393: LD_INT 0
1395: ST_TO_ADDR
// upf_start_mineclearing = false ;
1396: LD_ADDR_EXP 133
1400: PUSH
1401: LD_INT 0
1403: ST_TO_ADDR
// PrepareSides ;
1404: CALL 1718 0 0
// PrepareNature ;
1408: CALL 1886 0 0
// PrepareArabians ;
1412: CALL 2924 0 0
// ScanBuildings ;
1416: CALL 4972 0 0
// PrepareComputerSides ;
1420: CALL 7726 0 0
// InitiateTimeShiftData ;
1424: CALL 1521 0 0
// PrepareCrates ;
1428: CALL 10679 0 0
// Action ;
1432: CALL 9702 0 0
// end ;
1436: END
// function Initiate_ai_contact_time ; var i ; begin
1437: LD_INT 0
1439: PPUSH
1440: PPUSH
// ai_contact_time = [ ] ;
1441: LD_ADDR_EXP 75
1445: PUSH
1446: EMPTY
1447: ST_TO_ADDR
// for i = 1 to 8 do
1448: LD_ADDR_VAR 0 2
1452: PUSH
1453: DOUBLE
1454: LD_INT 1
1456: DEC
1457: ST_TO_ADDR
1458: LD_INT 8
1460: PUSH
1461: FOR_TO
1462: IFFALSE 1514
// ai_contact_time = ai_contact_time ^ [ [ 100000 , 100000 , 100000 , 100000 , 100000 , 100000 , 100000 , 100000 ] ] ;
1464: LD_ADDR_EXP 75
1468: PUSH
1469: LD_EXP 75
1473: PUSH
1474: LD_INT 100000
1476: PUSH
1477: LD_INT 100000
1479: PUSH
1480: LD_INT 100000
1482: PUSH
1483: LD_INT 100000
1485: PUSH
1486: LD_INT 100000
1488: PUSH
1489: LD_INT 100000
1491: PUSH
1492: LD_INT 100000
1494: PUSH
1495: LD_INT 100000
1497: PUSH
1498: EMPTY
1499: LIST
1500: LIST
1501: LIST
1502: LIST
1503: LIST
1504: LIST
1505: LIST
1506: LIST
1507: PUSH
1508: EMPTY
1509: LIST
1510: ADD
1511: ST_TO_ADDR
1512: GO 1461
1514: POP
1515: POP
// end ;
1516: LD_VAR 0 1
1520: RET
// function InitiateTimeShiftData ; var side ; begin
1521: LD_INT 0
1523: PPUSH
1524: PPUSH
// for side = 1 to 8 do
1525: LD_ADDR_VAR 0 2
1529: PUSH
1530: DOUBLE
1531: LD_INT 1
1533: DEC
1534: ST_TO_ADDR
1535: LD_INT 8
1537: PUSH
1538: FOR_TO
1539: IFFALSE 1711
// if Researched ( side , tech_st3 ) then
1541: LD_VAR 0 2
1545: PPUSH
1546: LD_INT 65
1548: PPUSH
1549: CALL_OW 325
1553: IFFALSE 1587
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 420 , 10 ] ) else
1555: LD_ADDR_EXP 71
1559: PUSH
1560: LD_EXP 71
1564: PPUSH
1565: LD_VAR 0 2
1569: PPUSH
1570: LD_INT 420
1572: PUSH
1573: LD_INT 10
1575: PUSH
1576: EMPTY
1577: LIST
1578: LIST
1579: PPUSH
1580: CALL_OW 1
1584: ST_TO_ADDR
1585: GO 1709
// if Researched ( side , tech_st2 ) then
1587: LD_VAR 0 2
1591: PPUSH
1592: LD_INT 64
1594: PPUSH
1595: CALL_OW 325
1599: IFFALSE 1633
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 420 , 10 ] ) else
1601: LD_ADDR_EXP 71
1605: PUSH
1606: LD_EXP 71
1610: PPUSH
1611: LD_VAR 0 2
1615: PPUSH
1616: LD_INT 420
1618: PUSH
1619: LD_INT 10
1621: PUSH
1622: EMPTY
1623: LIST
1624: LIST
1625: PPUSH
1626: CALL_OW 1
1630: ST_TO_ADDR
1631: GO 1709
// if Researched ( side , tech_st1 ) then
1633: LD_VAR 0 2
1637: PPUSH
1638: LD_INT 63
1640: PPUSH
1641: CALL_OW 325
1645: IFFALSE 1679
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 320 , 7 ] ) else
1647: LD_ADDR_EXP 71
1651: PUSH
1652: LD_EXP 71
1656: PPUSH
1657: LD_VAR 0 2
1661: PPUSH
1662: LD_INT 320
1664: PUSH
1665: LD_INT 7
1667: PUSH
1668: EMPTY
1669: LIST
1670: LIST
1671: PPUSH
1672: CALL_OW 1
1676: ST_TO_ADDR
1677: GO 1709
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 215 , 4 ] ) ;
1679: LD_ADDR_EXP 71
1683: PUSH
1684: LD_EXP 71
1688: PPUSH
1689: LD_VAR 0 2
1693: PPUSH
1694: LD_INT 215
1696: PUSH
1697: LD_INT 4
1699: PUSH
1700: EMPTY
1701: LIST
1702: LIST
1703: PPUSH
1704: CALL_OW 1
1708: ST_TO_ADDR
1709: GO 1538
1711: POP
1712: POP
// end ;
1713: LD_VAR 0 1
1717: RET
// function PrepareSides ; begin
1718: LD_INT 0
1720: PPUSH
// nature = 0 ;
1721: LD_ADDR_EXP 3
1725: PUSH
1726: LD_INT 0
1728: ST_TO_ADDR
// americans = 1 ;
1729: LD_ADDR_EXP 5
1733: PUSH
1734: LD_INT 1
1736: ST_TO_ADDR
// upf = 2 ;
1737: LD_ADDR_EXP 6
1741: PUSH
1742: LD_INT 2
1744: ST_TO_ADDR
// you_alt = 5 ;
1745: LD_ADDR_EXP 4
1749: PUSH
1750: LD_INT 5
1752: ST_TO_ADDR
// you = 8 ;
1753: LD_ADDR_EXP 2
1757: PUSH
1758: LD_INT 8
1760: ST_TO_ADDR
// SetAttitude ( americans , upf , att_enemy , true ) ;
1761: LD_EXP 5
1765: PPUSH
1766: LD_EXP 6
1770: PPUSH
1771: LD_INT 2
1773: PPUSH
1774: LD_INT 1
1776: PPUSH
1777: CALL_OW 80
// SetAttitude ( americans , you_alt , att_enemy , true ) ;
1781: LD_EXP 5
1785: PPUSH
1786: LD_EXP 4
1790: PPUSH
1791: LD_INT 2
1793: PPUSH
1794: LD_INT 1
1796: PPUSH
1797: CALL_OW 80
// SetAttitude ( americans , you , att_enemy , true ) ;
1801: LD_EXP 5
1805: PPUSH
1806: LD_EXP 2
1810: PPUSH
1811: LD_INT 2
1813: PPUSH
1814: LD_INT 1
1816: PPUSH
1817: CALL_OW 80
// SetAttitude ( upf , you_alt , att_enemy , true ) ;
1821: LD_EXP 6
1825: PPUSH
1826: LD_EXP 4
1830: PPUSH
1831: LD_INT 2
1833: PPUSH
1834: LD_INT 1
1836: PPUSH
1837: CALL_OW 80
// SetAttitude ( upf , you , att_enemy , true ) ;
1841: LD_EXP 6
1845: PPUSH
1846: LD_EXP 2
1850: PPUSH
1851: LD_INT 2
1853: PPUSH
1854: LD_INT 1
1856: PPUSH
1857: CALL_OW 80
// SetAttitude ( you_alt , you , att_friend , true ) ;
1861: LD_EXP 4
1865: PPUSH
1866: LD_EXP 2
1870: PPUSH
1871: LD_INT 1
1873: PPUSH
1874: LD_INT 1
1876: PPUSH
1877: CALL_OW 80
// end ;
1881: LD_VAR 0 1
1885: RET
// function PrepareNature ; var i , spots , num , agres , count , temp_unit ; begin
1886: LD_INT 0
1888: PPUSH
1889: PPUSH
1890: PPUSH
1891: PPUSH
1892: PPUSH
1893: PPUSH
1894: PPUSH
// spots = [ [ 118 , 6 ] , [ 135 , 40 ] , [ 143 , 56 ] , [ 137 , 76 ] , [ 171 , 114 ] , [ 113 , 109 ] , [ 101 , 8 ] , [ 110 , 21 ] , [ 78 , 21 ] , [ 63 , 13 ] , [ 42 , 9 ] , [ 30 , 12 ] , [ 9 , 4 ] , [ 46 , 23 ] , [ 46 , 33 ] , [ 68 , 40 ] , [ 61 , 51 ] ] ;
1895: LD_ADDR_VAR 0 3
1899: PUSH
1900: LD_INT 118
1902: PUSH
1903: LD_INT 6
1905: PUSH
1906: EMPTY
1907: LIST
1908: LIST
1909: PUSH
1910: LD_INT 135
1912: PUSH
1913: LD_INT 40
1915: PUSH
1916: EMPTY
1917: LIST
1918: LIST
1919: PUSH
1920: LD_INT 143
1922: PUSH
1923: LD_INT 56
1925: PUSH
1926: EMPTY
1927: LIST
1928: LIST
1929: PUSH
1930: LD_INT 137
1932: PUSH
1933: LD_INT 76
1935: PUSH
1936: EMPTY
1937: LIST
1938: LIST
1939: PUSH
1940: LD_INT 171
1942: PUSH
1943: LD_INT 114
1945: PUSH
1946: EMPTY
1947: LIST
1948: LIST
1949: PUSH
1950: LD_INT 113
1952: PUSH
1953: LD_INT 109
1955: PUSH
1956: EMPTY
1957: LIST
1958: LIST
1959: PUSH
1960: LD_INT 101
1962: PUSH
1963: LD_INT 8
1965: PUSH
1966: EMPTY
1967: LIST
1968: LIST
1969: PUSH
1970: LD_INT 110
1972: PUSH
1973: LD_INT 21
1975: PUSH
1976: EMPTY
1977: LIST
1978: LIST
1979: PUSH
1980: LD_INT 78
1982: PUSH
1983: LD_INT 21
1985: PUSH
1986: EMPTY
1987: LIST
1988: LIST
1989: PUSH
1990: LD_INT 63
1992: PUSH
1993: LD_INT 13
1995: PUSH
1996: EMPTY
1997: LIST
1998: LIST
1999: PUSH
2000: LD_INT 42
2002: PUSH
2003: LD_INT 9
2005: PUSH
2006: EMPTY
2007: LIST
2008: LIST
2009: PUSH
2010: LD_INT 30
2012: PUSH
2013: LD_INT 12
2015: PUSH
2016: EMPTY
2017: LIST
2018: LIST
2019: PUSH
2020: LD_INT 9
2022: PUSH
2023: LD_INT 4
2025: PUSH
2026: EMPTY
2027: LIST
2028: LIST
2029: PUSH
2030: LD_INT 46
2032: PUSH
2033: LD_INT 23
2035: PUSH
2036: EMPTY
2037: LIST
2038: LIST
2039: PUSH
2040: LD_INT 46
2042: PUSH
2043: LD_INT 33
2045: PUSH
2046: EMPTY
2047: LIST
2048: LIST
2049: PUSH
2050: LD_INT 68
2052: PUSH
2053: LD_INT 40
2055: PUSH
2056: EMPTY
2057: LIST
2058: LIST
2059: PUSH
2060: LD_INT 61
2062: PUSH
2063: LD_INT 51
2065: PUSH
2066: EMPTY
2067: LIST
2068: LIST
2069: PUSH
2070: EMPTY
2071: LIST
2072: LIST
2073: LIST
2074: LIST
2075: LIST
2076: LIST
2077: LIST
2078: LIST
2079: LIST
2080: LIST
2081: LIST
2082: LIST
2083: LIST
2084: LIST
2085: LIST
2086: LIST
2087: LIST
2088: ST_TO_ADDR
// InitUc ;
2089: CALL_OW 18
// InitHc ;
2093: CALL_OW 19
// uc_side = nature ;
2097: LD_ADDR_OWVAR 20
2101: PUSH
2102: LD_EXP 3
2106: ST_TO_ADDR
// uc_nation = nation_nature ;
2107: LD_ADDR_OWVAR 21
2111: PUSH
2112: LD_INT 0
2114: ST_TO_ADDR
// agres = - 10 + difficulty * 20 ;
2115: LD_ADDR_VAR 0 5
2119: PUSH
2120: LD_INT 10
2122: NEG
2123: PUSH
2124: LD_OWVAR 67
2128: PUSH
2129: LD_INT 20
2131: MUL
2132: PLUS
2133: ST_TO_ADDR
// count = [ 5 , 4 , 3 ] [ difficulty ] ;
2134: LD_ADDR_VAR 0 6
2138: PUSH
2139: LD_INT 5
2141: PUSH
2142: LD_INT 4
2144: PUSH
2145: LD_INT 3
2147: PUSH
2148: EMPTY
2149: LIST
2150: LIST
2151: LIST
2152: PUSH
2153: LD_OWVAR 67
2157: ARRAY
2158: ST_TO_ADDR
// hc_class = class_apeman ;
2159: LD_ADDR_OWVAR 28
2163: PUSH
2164: LD_INT 12
2166: ST_TO_ADDR
// for i = 1 to count do
2167: LD_ADDR_VAR 0 2
2171: PUSH
2172: DOUBLE
2173: LD_INT 1
2175: DEC
2176: ST_TO_ADDR
2177: LD_VAR 0 6
2181: PUSH
2182: FOR_TO
2183: IFFALSE 2411
// begin if spots = 0 then
2185: LD_VAR 0 3
2189: PUSH
2190: LD_INT 0
2192: EQUAL
2193: IFFALSE 2199
// exit ;
2195: POP
2196: POP
2197: GO 2919
// uc_direction = Rand ( 0 , 5 ) ;
2199: LD_ADDR_OWVAR 24
2203: PUSH
2204: LD_INT 0
2206: PPUSH
2207: LD_INT 5
2209: PPUSH
2210: CALL_OW 12
2214: ST_TO_ADDR
// hc_agressivity = Rand ( - 1 * agres , agres ) ;
2215: LD_ADDR_OWVAR 35
2219: PUSH
2220: LD_INT 1
2222: NEG
2223: PUSH
2224: LD_VAR 0 5
2228: MUL
2229: PPUSH
2230: LD_VAR 0 5
2234: PPUSH
2235: CALL_OW 12
2239: ST_TO_ADDR
// hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
2240: LD_ADDR_OWVAR 29
2244: PUSH
2245: LD_INT 11
2247: PPUSH
2248: LD_INT 13
2250: PPUSH
2251: CALL_OW 12
2255: PUSH
2256: LD_INT 10
2258: PPUSH
2259: LD_INT 11
2261: PPUSH
2262: CALL_OW 12
2266: PUSH
2267: EMPTY
2268: LIST
2269: LIST
2270: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
2271: LD_ADDR_OWVAR 27
2275: PUSH
2276: LD_INT 1
2278: PPUSH
2279: LD_INT 2
2281: PPUSH
2282: CALL_OW 12
2286: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 1 ) , Rand ( 0 , 1 ) , 0 , 0 ] ;
2287: LD_ADDR_OWVAR 31
2291: PUSH
2292: LD_INT 0
2294: PPUSH
2295: LD_INT 1
2297: PPUSH
2298: CALL_OW 12
2302: PUSH
2303: LD_INT 0
2305: PPUSH
2306: LD_INT 1
2308: PPUSH
2309: CALL_OW 12
2313: PUSH
2314: LD_INT 0
2316: PUSH
2317: LD_INT 0
2319: PUSH
2320: EMPTY
2321: LIST
2322: LIST
2323: LIST
2324: LIST
2325: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
2326: LD_ADDR_VAR 0 4
2330: PUSH
2331: LD_INT 1
2333: PPUSH
2334: LD_VAR 0 3
2338: PPUSH
2339: CALL_OW 12
2343: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
2344: CALL_OW 44
2348: PPUSH
2349: LD_VAR 0 3
2353: PUSH
2354: LD_VAR 0 4
2358: ARRAY
2359: PUSH
2360: LD_INT 1
2362: ARRAY
2363: PPUSH
2364: LD_VAR 0 3
2368: PUSH
2369: LD_VAR 0 4
2373: ARRAY
2374: PUSH
2375: LD_INT 2
2377: ARRAY
2378: PPUSH
2379: LD_INT 5
2381: PPUSH
2382: LD_INT 0
2384: PPUSH
2385: CALL_OW 50
// spots = Delete ( spots , num ) ;
2389: LD_ADDR_VAR 0 3
2393: PUSH
2394: LD_VAR 0 3
2398: PPUSH
2399: LD_VAR 0 4
2403: PPUSH
2404: CALL_OW 3
2408: ST_TO_ADDR
// end ;
2409: GO 2182
2411: POP
2412: POP
// count = [ 1 , 2 , 3 ] [ difficulty ] ;
2413: LD_ADDR_VAR 0 6
2417: PUSH
2418: LD_INT 1
2420: PUSH
2421: LD_INT 2
2423: PUSH
2424: LD_INT 3
2426: PUSH
2427: EMPTY
2428: LIST
2429: LIST
2430: LIST
2431: PUSH
2432: LD_OWVAR 67
2436: ARRAY
2437: ST_TO_ADDR
// hc_gallery = nature_foreg ;
2438: LD_ADDR_OWVAR 33
2442: PUSH
2443: LD_STRING nature_foreg
2445: ST_TO_ADDR
// hc_face_number = 3 ;
2446: LD_ADDR_OWVAR 34
2450: PUSH
2451: LD_INT 3
2453: ST_TO_ADDR
// hc_class = class_tiger ;
2454: LD_ADDR_OWVAR 28
2458: PUSH
2459: LD_INT 14
2461: ST_TO_ADDR
// hc_sex = sex_male ;
2462: LD_ADDR_OWVAR 27
2466: PUSH
2467: LD_INT 1
2469: ST_TO_ADDR
// for i = 1 to count do
2470: LD_ADDR_VAR 0 2
2474: PUSH
2475: DOUBLE
2476: LD_INT 1
2478: DEC
2479: ST_TO_ADDR
2480: LD_VAR 0 6
2484: PUSH
2485: FOR_TO
2486: IFFALSE 2689
// begin if spots = 0 then
2488: LD_VAR 0 3
2492: PUSH
2493: LD_INT 0
2495: EQUAL
2496: IFFALSE 2502
// exit ;
2498: POP
2499: POP
2500: GO 2919
// uc_direction = Rand ( 0 , 5 ) ;
2502: LD_ADDR_OWVAR 24
2506: PUSH
2507: LD_INT 0
2509: PPUSH
2510: LD_INT 5
2512: PPUSH
2513: CALL_OW 12
2517: ST_TO_ADDR
// hc_agressivity = Rand ( 0 , agres ) ;
2518: LD_ADDR_OWVAR 35
2522: PUSH
2523: LD_INT 0
2525: PPUSH
2526: LD_VAR 0 5
2530: PPUSH
2531: CALL_OW 12
2535: ST_TO_ADDR
// hc_attr = [ Rand ( 11 , 12 ) , Rand ( 10 , 11 ) ] ;
2536: LD_ADDR_OWVAR 29
2540: PUSH
2541: LD_INT 11
2543: PPUSH
2544: LD_INT 12
2546: PPUSH
2547: CALL_OW 12
2551: PUSH
2552: LD_INT 10
2554: PPUSH
2555: LD_INT 11
2557: PPUSH
2558: CALL_OW 12
2562: PUSH
2563: EMPTY
2564: LIST
2565: LIST
2566: ST_TO_ADDR
// hc_skills = [ Rand ( 2 , difficulty + 1 ) , 0 , 0 , 0 ] ;
2567: LD_ADDR_OWVAR 31
2571: PUSH
2572: LD_INT 2
2574: PPUSH
2575: LD_OWVAR 67
2579: PUSH
2580: LD_INT 1
2582: PLUS
2583: PPUSH
2584: CALL_OW 12
2588: PUSH
2589: LD_INT 0
2591: PUSH
2592: LD_INT 0
2594: PUSH
2595: LD_INT 0
2597: PUSH
2598: EMPTY
2599: LIST
2600: LIST
2601: LIST
2602: LIST
2603: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
2604: LD_ADDR_VAR 0 4
2608: PUSH
2609: LD_INT 1
2611: PPUSH
2612: LD_VAR 0 3
2616: PPUSH
2617: CALL_OW 12
2621: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
2622: CALL_OW 44
2626: PPUSH
2627: LD_VAR 0 3
2631: PUSH
2632: LD_VAR 0 4
2636: ARRAY
2637: PUSH
2638: LD_INT 1
2640: ARRAY
2641: PPUSH
2642: LD_VAR 0 3
2646: PUSH
2647: LD_VAR 0 4
2651: ARRAY
2652: PUSH
2653: LD_INT 2
2655: ARRAY
2656: PPUSH
2657: LD_INT 5
2659: PPUSH
2660: LD_INT 0
2662: PPUSH
2663: CALL_OW 50
// spots = Delete ( spots , num ) ;
2667: LD_ADDR_VAR 0 3
2671: PUSH
2672: LD_VAR 0 3
2676: PPUSH
2677: LD_VAR 0 4
2681: PPUSH
2682: CALL_OW 3
2686: ST_TO_ADDR
// end ;
2687: GO 2485
2689: POP
2690: POP
// hc_class = class_phororhacos ;
2691: LD_ADDR_OWVAR 28
2695: PUSH
2696: LD_INT 18
2698: ST_TO_ADDR
// hc_gallery = nature_foreg ;
2699: LD_ADDR_OWVAR 33
2703: PUSH
2704: LD_STRING nature_foreg
2706: ST_TO_ADDR
// hc_face_number = 1 ;
2707: LD_ADDR_OWVAR 34
2711: PUSH
2712: LD_INT 1
2714: ST_TO_ADDR
// hc_skills = [ 0 , 0 , 0 , 0 ] ;
2715: LD_ADDR_OWVAR 31
2719: PUSH
2720: LD_INT 0
2722: PUSH
2723: LD_INT 0
2725: PUSH
2726: LD_INT 0
2728: PUSH
2729: LD_INT 0
2731: PUSH
2732: EMPTY
2733: LIST
2734: LIST
2735: LIST
2736: LIST
2737: ST_TO_ADDR
// for i = 1 to 3 do
2738: LD_ADDR_VAR 0 2
2742: PUSH
2743: DOUBLE
2744: LD_INT 1
2746: DEC
2747: ST_TO_ADDR
2748: LD_INT 3
2750: PUSH
2751: FOR_TO
2752: IFFALSE 2917
// begin if spots = 0 then
2754: LD_VAR 0 3
2758: PUSH
2759: LD_INT 0
2761: EQUAL
2762: IFFALSE 2768
// exit ;
2764: POP
2765: POP
2766: GO 2919
// uc_direction = Rand ( 0 , 5 ) ;
2768: LD_ADDR_OWVAR 24
2772: PUSH
2773: LD_INT 0
2775: PPUSH
2776: LD_INT 5
2778: PPUSH
2779: CALL_OW 12
2783: ST_TO_ADDR
// hc_agressivity = Rand ( - 30 , 0 ) ;
2784: LD_ADDR_OWVAR 35
2788: PUSH
2789: LD_INT 30
2791: NEG
2792: PPUSH
2793: LD_INT 0
2795: PPUSH
2796: CALL_OW 12
2800: ST_TO_ADDR
// hc_attr = [ Rand ( 9 , 10 ) , Rand ( 11 , 12 ) ] ;
2801: LD_ADDR_OWVAR 29
2805: PUSH
2806: LD_INT 9
2808: PPUSH
2809: LD_INT 10
2811: PPUSH
2812: CALL_OW 12
2816: PUSH
2817: LD_INT 11
2819: PPUSH
2820: LD_INT 12
2822: PPUSH
2823: CALL_OW 12
2827: PUSH
2828: EMPTY
2829: LIST
2830: LIST
2831: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
2832: LD_ADDR_VAR 0 4
2836: PUSH
2837: LD_INT 1
2839: PPUSH
2840: LD_VAR 0 3
2844: PPUSH
2845: CALL_OW 12
2849: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
2850: CALL_OW 44
2854: PPUSH
2855: LD_VAR 0 3
2859: PUSH
2860: LD_VAR 0 4
2864: ARRAY
2865: PUSH
2866: LD_INT 1
2868: ARRAY
2869: PPUSH
2870: LD_VAR 0 3
2874: PUSH
2875: LD_VAR 0 4
2879: ARRAY
2880: PUSH
2881: LD_INT 2
2883: ARRAY
2884: PPUSH
2885: LD_INT 5
2887: PPUSH
2888: LD_INT 0
2890: PPUSH
2891: CALL_OW 50
// spots = Delete ( spots , num ) ;
2895: LD_ADDR_VAR 0 3
2899: PUSH
2900: LD_VAR 0 3
2904: PPUSH
2905: LD_VAR 0 4
2909: PPUSH
2910: CALL_OW 3
2914: ST_TO_ADDR
// end ;
2915: GO 2751
2917: POP
2918: POP
// end ;
2919: LD_VAR 0 1
2923: RET
// function PrepareArabians ; var human_list , i , temp_unit , val , k ; begin
2924: LD_INT 0
2926: PPUSH
2927: PPUSH
2928: PPUSH
2929: PPUSH
2930: PPUSH
2931: PPUSH
// InitHc ;
2932: CALL_OW 19
// InitUc ;
2936: CALL_OW 18
// uc_side = you ;
2940: LD_ADDR_OWVAR 20
2944: PUSH
2945: LD_EXP 2
2949: ST_TO_ADDR
// uc_nation = nation_arabian ;
2950: LD_ADDR_OWVAR 21
2954: PUSH
2955: LD_INT 2
2957: ST_TO_ADDR
// if not testing then
2958: LD_EXP 1
2962: NOT
2963: IFFALSE 3509
// begin Heike = CreateCharacter ( Heike_13a ) ;
2965: LD_ADDR_EXP 7
2969: PUSH
2970: LD_STRING Heike_13a
2972: PPUSH
2973: CALL_OW 34
2977: ST_TO_ADDR
// if TestCharacters ( Olaf_13a ) then
2978: LD_STRING Olaf_13a
2980: PPUSH
2981: CALL_OW 28
2985: IFFALSE 3002
// Olaf = CreateCharacter ( Olaf_13a ) else
2987: LD_ADDR_EXP 8
2991: PUSH
2992: LD_STRING Olaf_13a
2994: PPUSH
2995: CALL_OW 34
2999: ST_TO_ADDR
3000: GO 3010
// Olaf = 0 ;
3002: LD_ADDR_EXP 8
3006: PUSH
3007: LD_INT 0
3009: ST_TO_ADDR
// if TestCharacters ( Sonya_13a ) then
3010: LD_STRING Sonya_13a
3012: PPUSH
3013: CALL_OW 28
3017: IFFALSE 3034
// Sonya = CreateCharacter ( Sonya_13a ) else
3019: LD_ADDR_EXP 9
3023: PUSH
3024: LD_STRING Sonya_13a
3026: PPUSH
3027: CALL_OW 34
3031: ST_TO_ADDR
3032: GO 3042
// Sonya = 0 ;
3034: LD_ADDR_EXP 9
3038: PUSH
3039: LD_INT 0
3041: ST_TO_ADDR
// if TestCharacters ( Oswald_13a ) then
3042: LD_STRING Oswald_13a
3044: PPUSH
3045: CALL_OW 28
3049: IFFALSE 3066
// Oswald = CreateCharacter ( Oswald_13a ) else
3051: LD_ADDR_EXP 10
3055: PUSH
3056: LD_STRING Oswald_13a
3058: PPUSH
3059: CALL_OW 34
3063: ST_TO_ADDR
3064: GO 3074
// Oswald = 0 ;
3066: LD_ADDR_EXP 10
3070: PUSH
3071: LD_INT 0
3073: ST_TO_ADDR
// if TestCharacters ( Ralph_13a ) then
3074: LD_STRING Ralph_13a
3076: PPUSH
3077: CALL_OW 28
3081: IFFALSE 3098
// Ralph = CreateCharacter ( Ralph_13a ) else
3083: LD_ADDR_EXP 11
3087: PUSH
3088: LD_STRING Ralph_13a
3090: PPUSH
3091: CALL_OW 34
3095: ST_TO_ADDR
3096: GO 3106
// Ralph = 0 ;
3098: LD_ADDR_EXP 11
3102: PUSH
3103: LD_INT 0
3105: ST_TO_ADDR
// if TestCharacters ( Kowalski_13a ) then
3106: LD_STRING Kowalski_13a
3108: PPUSH
3109: CALL_OW 28
3113: IFFALSE 3130
// Kowalski = CreateCharacter ( Kowalski_13a ) else
3115: LD_ADDR_EXP 12
3119: PUSH
3120: LD_STRING Kowalski_13a
3122: PPUSH
3123: CALL_OW 34
3127: ST_TO_ADDR
3128: GO 3138
// Kowalski = 0 ;
3130: LD_ADDR_EXP 12
3134: PUSH
3135: LD_INT 0
3137: ST_TO_ADDR
// if TestCharacters ( Suze_13a ) then
3138: LD_STRING Suze_13a
3140: PPUSH
3141: CALL_OW 28
3145: IFFALSE 3162
// Suze = CreateCharacter ( Suze_13a ) else
3147: LD_ADDR_EXP 13
3151: PUSH
3152: LD_STRING Suze_13a
3154: PPUSH
3155: CALL_OW 34
3159: ST_TO_ADDR
3160: GO 3170
// Suze = 0 ;
3162: LD_ADDR_EXP 13
3166: PUSH
3167: LD_INT 0
3169: ST_TO_ADDR
// if TestCharacters ( MarkB_13a ) then
3170: LD_STRING MarkB_13a
3172: PPUSH
3173: CALL_OW 28
3177: IFFALSE 3194
// MarkB = CreateCharacter ( MarkB_13a ) else
3179: LD_ADDR_EXP 14
3183: PUSH
3184: LD_STRING MarkB_13a
3186: PPUSH
3187: CALL_OW 34
3191: ST_TO_ADDR
3192: GO 3202
// MarkB = 0 ;
3194: LD_ADDR_EXP 14
3198: PUSH
3199: LD_INT 0
3201: ST_TO_ADDR
// if TestCharacters ( Kurt_13a ) then
3202: LD_STRING Kurt_13a
3204: PPUSH
3205: CALL_OW 28
3209: IFFALSE 3226
// Kurt = CreateCharacter ( Kurt_13a ) else
3211: LD_ADDR_EXP 15
3215: PUSH
3216: LD_STRING Kurt_13a
3218: PPUSH
3219: CALL_OW 34
3223: ST_TO_ADDR
3224: GO 3234
// Kurt = 0 ;
3226: LD_ADDR_EXP 15
3230: PUSH
3231: LD_INT 0
3233: ST_TO_ADDR
// if TestCharacters ( Martin_13a ) then
3234: LD_STRING Martin_13a
3236: PPUSH
3237: CALL_OW 28
3241: IFFALSE 3258
// Martin = CreateCharacter ( Martin_13a ) else
3243: LD_ADDR_EXP 16
3247: PUSH
3248: LD_STRING Martin_13a
3250: PPUSH
3251: CALL_OW 34
3255: ST_TO_ADDR
3256: GO 3266
// Martin = 0 ;
3258: LD_ADDR_EXP 16
3262: PUSH
3263: LD_INT 0
3265: ST_TO_ADDR
// if TestCharacters ( Louis_13a ) then
3266: LD_STRING Louis_13a
3268: PPUSH
3269: CALL_OW 28
3273: IFFALSE 3290
// Louis = CreateCharacter ( Louis_13a ) else
3275: LD_ADDR_EXP 17
3279: PUSH
3280: LD_STRING Louis_13a
3282: PPUSH
3283: CALL_OW 34
3287: ST_TO_ADDR
3288: GO 3298
// Louis = 0 ;
3290: LD_ADDR_EXP 17
3294: PUSH
3295: LD_INT 0
3297: ST_TO_ADDR
// if TestCharacters ( Khattam_13a ) then
3298: LD_STRING Khattam_13a
3300: PPUSH
3301: CALL_OW 28
3305: IFFALSE 3322
// Khattam = CreateCharacter ( Khattam_13a ) else
3307: LD_ADDR_EXP 18
3311: PUSH
3312: LD_STRING Khattam_13a
3314: PPUSH
3315: CALL_OW 34
3319: ST_TO_ADDR
3320: GO 3330
// Khattam = 0 ;
3322: LD_ADDR_EXP 18
3326: PUSH
3327: LD_INT 0
3329: ST_TO_ADDR
// if TestCharacters ( upf_deserter_13a ) then
3330: LD_STRING upf_deserter_13a
3332: PPUSH
3333: CALL_OW 28
3337: IFFALSE 3354
// upf_deserter = CreateCharacter ( upf_deserter_13a ) else
3339: LD_ADDR_EXP 19
3343: PUSH
3344: LD_STRING upf_deserter_13a
3346: PPUSH
3347: CALL_OW 34
3351: ST_TO_ADDR
3352: GO 3362
// upf_deserter = 0 ;
3354: LD_ADDR_EXP 19
3358: PUSH
3359: LD_INT 0
3361: ST_TO_ADDR
// other_louis_folks = CreateCharacterSet ( Other_Louis_people_13a ) diff 0 ;
3362: LD_ADDR_EXP 20
3366: PUSH
3367: LD_STRING Other_Louis_people_13a
3369: PPUSH
3370: CALL_OW 31
3374: PUSH
3375: LD_INT 0
3377: DIFF
3378: ST_TO_ADDR
// human_list = [ Heike , Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis , Khattam , upf_deserter ] diff 0 ;
3379: LD_ADDR_VAR 0 2
3383: PUSH
3384: LD_EXP 7
3388: PUSH
3389: LD_EXP 8
3393: PUSH
3394: LD_EXP 9
3398: PUSH
3399: LD_EXP 10
3403: PUSH
3404: LD_EXP 11
3408: PUSH
3409: LD_EXP 12
3413: PUSH
3414: LD_EXP 13
3418: PUSH
3419: LD_EXP 14
3423: PUSH
3424: LD_EXP 15
3428: PUSH
3429: LD_EXP 16
3433: PUSH
3434: LD_EXP 17
3438: PUSH
3439: LD_EXP 18
3443: PUSH
3444: LD_EXP 19
3448: PUSH
3449: EMPTY
3450: LIST
3451: LIST
3452: LIST
3453: LIST
3454: LIST
3455: LIST
3456: LIST
3457: LIST
3458: LIST
3459: LIST
3460: LIST
3461: LIST
3462: LIST
3463: PUSH
3464: LD_INT 0
3466: DIFF
3467: ST_TO_ADDR
// human_list = human_list ^ ( CreateCharacterSet ( Others_13a ) diff 0 ) ;
3468: LD_ADDR_VAR 0 2
3472: PUSH
3473: LD_VAR 0 2
3477: PUSH
3478: LD_STRING Others_13a
3480: PPUSH
3481: CALL_OW 31
3485: PUSH
3486: LD_INT 0
3488: DIFF
3489: ADD
3490: ST_TO_ADDR
// human_list = human_list ^ other_louis_folks ;
3491: LD_ADDR_VAR 0 2
3495: PUSH
3496: LD_VAR 0 2
3500: PUSH
3501: LD_EXP 20
3505: ADD
3506: ST_TO_ADDR
// end else
3507: GO 4107
// begin InitHc ;
3509: CALL_OW 19
// PrepareSoldier ( sex_female , 8 ) ;
3513: LD_INT 2
3515: PPUSH
3516: LD_INT 8
3518: PPUSH
3519: CALL_OW 381
// hc_name = Heike ;
3523: LD_ADDR_OWVAR 26
3527: PUSH
3528: LD_STRING Heike
3530: ST_TO_ADDR
// Heike = CreateHuman ;
3531: LD_ADDR_EXP 7
3535: PUSH
3536: CALL_OW 44
3540: ST_TO_ADDR
// PrepareMechanic ( sex_male , 8 ) ;
3541: LD_INT 1
3543: PPUSH
3544: LD_INT 8
3546: PPUSH
3547: CALL_OW 383
// hc_name = Olaf ;
3551: LD_ADDR_OWVAR 26
3555: PUSH
3556: LD_STRING Olaf
3558: ST_TO_ADDR
// Olaf = CreateHuman ;
3559: LD_ADDR_EXP 8
3563: PUSH
3564: CALL_OW 44
3568: ST_TO_ADDR
// PrepareScientist ( sex_female , 8 ) ;
3569: LD_INT 2
3571: PPUSH
3572: LD_INT 8
3574: PPUSH
3575: CALL_OW 384
// hc_name = Sonya ;
3579: LD_ADDR_OWVAR 26
3583: PUSH
3584: LD_STRING Sonya
3586: ST_TO_ADDR
// Sonya = CreateHuman ;
3587: LD_ADDR_EXP 9
3591: PUSH
3592: CALL_OW 44
3596: ST_TO_ADDR
// PrepareSoldier ( sex_male , 8 ) ;
3597: LD_INT 1
3599: PPUSH
3600: LD_INT 8
3602: PPUSH
3603: CALL_OW 381
// hc_name = Oswald ;
3607: LD_ADDR_OWVAR 26
3611: PUSH
3612: LD_STRING Oswald
3614: ST_TO_ADDR
// Oswald = CreateHuman ;
3615: LD_ADDR_EXP 10
3619: PUSH
3620: CALL_OW 44
3624: ST_TO_ADDR
// PrepareSoldier ( sex_male , 8 ) ;
3625: LD_INT 1
3627: PPUSH
3628: LD_INT 8
3630: PPUSH
3631: CALL_OW 381
// hc_name = Ralph ;
3635: LD_ADDR_OWVAR 26
3639: PUSH
3640: LD_STRING Ralph
3642: ST_TO_ADDR
// Ralph = CreateHuman ;
3643: LD_ADDR_EXP 11
3647: PUSH
3648: CALL_OW 44
3652: ST_TO_ADDR
// PrepareSoldier ( sex_male , 8 ) ;
3653: LD_INT 1
3655: PPUSH
3656: LD_INT 8
3658: PPUSH
3659: CALL_OW 381
// hc_name = Kowalski ;
3663: LD_ADDR_OWVAR 26
3667: PUSH
3668: LD_STRING Kowalski
3670: ST_TO_ADDR
// Kowalski = CreateHuman ;
3671: LD_ADDR_EXP 12
3675: PUSH
3676: CALL_OW 44
3680: ST_TO_ADDR
// PrepareSoldier ( sex_female , 8 ) ;
3681: LD_INT 2
3683: PPUSH
3684: LD_INT 8
3686: PPUSH
3687: CALL_OW 381
// hc_name = Suze ;
3691: LD_ADDR_OWVAR 26
3695: PUSH
3696: LD_STRING Suze
3698: ST_TO_ADDR
// Suze = CreateHuman ;
3699: LD_ADDR_EXP 13
3703: PUSH
3704: CALL_OW 44
3708: ST_TO_ADDR
// PrepareScientist ( sex_male , 8 ) ;
3709: LD_INT 1
3711: PPUSH
3712: LD_INT 8
3714: PPUSH
3715: CALL_OW 384
// hc_name = Mark ;
3719: LD_ADDR_OWVAR 26
3723: PUSH
3724: LD_STRING Mark
3726: ST_TO_ADDR
// MarkB = CreateHuman ;
3727: LD_ADDR_EXP 14
3731: PUSH
3732: CALL_OW 44
3736: ST_TO_ADDR
// PrepareSoldier ( sex_male , 8 ) ;
3737: LD_INT 1
3739: PPUSH
3740: LD_INT 8
3742: PPUSH
3743: CALL_OW 381
// hc_name = Kurt ;
3747: LD_ADDR_OWVAR 26
3751: PUSH
3752: LD_STRING Kurt
3754: ST_TO_ADDR
// Kurt = CreateHuman ;
3755: LD_ADDR_EXP 15
3759: PUSH
3760: CALL_OW 44
3764: ST_TO_ADDR
// PrepareMechanic ( sex_male , 8 ) ;
3765: LD_INT 1
3767: PPUSH
3768: LD_INT 8
3770: PPUSH
3771: CALL_OW 383
// hc_name = Martin ;
3775: LD_ADDR_OWVAR 26
3779: PUSH
3780: LD_STRING Martin
3782: ST_TO_ADDR
// Martin = CreateHuman ;
3783: LD_ADDR_EXP 16
3787: PUSH
3788: CALL_OW 44
3792: ST_TO_ADDR
// PrepareSoldier ( sex_male , 8 ) ;
3793: LD_INT 1
3795: PPUSH
3796: LD_INT 8
3798: PPUSH
3799: CALL_OW 381
// hc_name = Louis ;
3803: LD_ADDR_OWVAR 26
3807: PUSH
3808: LD_STRING Louis
3810: ST_TO_ADDR
// Louis = CreateHuman ;
3811: LD_ADDR_EXP 17
3815: PUSH
3816: CALL_OW 44
3820: ST_TO_ADDR
// SetClass ( Louis , class_mortar ) ;
3821: LD_EXP 17
3825: PPUSH
3826: LD_INT 8
3828: PPUSH
3829: CALL_OW 336
// PrepareScientist ( sex_male , 8 ) ;
3833: LD_INT 1
3835: PPUSH
3836: LD_INT 8
3838: PPUSH
3839: CALL_OW 384
// hc_name = Khattam ;
3843: LD_ADDR_OWVAR 26
3847: PUSH
3848: LD_STRING Khattam
3850: ST_TO_ADDR
// Khattam = CreateHuman ;
3851: LD_ADDR_EXP 18
3855: PUSH
3856: CALL_OW 44
3860: ST_TO_ADDR
// PrepareSoldier ( sex_male , 8 ) ;
3861: LD_INT 1
3863: PPUSH
3864: LD_INT 8
3866: PPUSH
3867: CALL_OW 381
// hc_name = Bergkamp ;
3871: LD_ADDR_OWVAR 26
3875: PUSH
3876: LD_STRING Bergkamp
3878: ST_TO_ADDR
// upf_deserter = CreateHuman ;
3879: LD_ADDR_EXP 19
3883: PUSH
3884: CALL_OW 44
3888: ST_TO_ADDR
// other_louis_folks = [ ] ;
3889: LD_ADDR_EXP 20
3893: PUSH
3894: EMPTY
3895: ST_TO_ADDR
// InitHc ;
3896: CALL_OW 19
// for i = 1 to 2 do
3900: LD_ADDR_VAR 0 3
3904: PUSH
3905: DOUBLE
3906: LD_INT 1
3908: DEC
3909: ST_TO_ADDR
3910: LD_INT 2
3912: PUSH
3913: FOR_TO
3914: IFFALSE 3970
// begin PrepareHuman ( false , [ class_soldier , class_mechanic , class_scientistic ] [ Rand ( 1 , 3 ) ] , 7 ) ;
3916: LD_INT 0
3918: PPUSH
3919: LD_INT 1
3921: PUSH
3922: LD_INT 3
3924: PUSH
3925: LD_INT 4
3927: PUSH
3928: EMPTY
3929: LIST
3930: LIST
3931: LIST
3932: PUSH
3933: LD_INT 1
3935: PPUSH
3936: LD_INT 3
3938: PPUSH
3939: CALL_OW 12
3943: ARRAY
3944: PPUSH
3945: LD_INT 7
3947: PPUSH
3948: CALL_OW 380
// other_louis_folks = other_louis_folks ^ CreateHuman ;
3952: LD_ADDR_EXP 20
3956: PUSH
3957: LD_EXP 20
3961: PUSH
3962: CALL_OW 44
3966: ADD
3967: ST_TO_ADDR
// end ;
3968: GO 3913
3970: POP
3971: POP
// human_list = [ Heike , Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis , Khattam , upf_deserter ] diff 0 ;
3972: LD_ADDR_VAR 0 2
3976: PUSH
3977: LD_EXP 7
3981: PUSH
3982: LD_EXP 8
3986: PUSH
3987: LD_EXP 9
3991: PUSH
3992: LD_EXP 10
3996: PUSH
3997: LD_EXP 11
4001: PUSH
4002: LD_EXP 12
4006: PUSH
4007: LD_EXP 13
4011: PUSH
4012: LD_EXP 14
4016: PUSH
4017: LD_EXP 15
4021: PUSH
4022: LD_EXP 16
4026: PUSH
4027: LD_EXP 17
4031: PUSH
4032: LD_EXP 18
4036: PUSH
4037: LD_EXP 19
4041: PUSH
4042: EMPTY
4043: LIST
4044: LIST
4045: LIST
4046: LIST
4047: LIST
4048: LIST
4049: LIST
4050: LIST
4051: LIST
4052: LIST
4053: LIST
4054: LIST
4055: LIST
4056: PUSH
4057: LD_INT 0
4059: DIFF
4060: ST_TO_ADDR
// InitHc ;
4061: CALL_OW 19
// PrepareEngineer ( false , 6 ) ;
4065: LD_INT 0
4067: PPUSH
4068: LD_INT 6
4070: PPUSH
4071: CALL_OW 382
// human_list = human_list ^ CreateHuman ;
4075: LD_ADDR_VAR 0 2
4079: PUSH
4080: LD_VAR 0 2
4084: PUSH
4085: CALL_OW 44
4089: ADD
4090: ST_TO_ADDR
// human_list = human_list ^ other_louis_folks ;
4091: LD_ADDR_VAR 0 2
4095: PUSH
4096: LD_VAR 0 2
4100: PUSH
4101: LD_EXP 20
4105: ADD
4106: ST_TO_ADDR
// end ; for i in human_list do
4107: LD_ADDR_VAR 0 3
4111: PUSH
4112: LD_VAR 0 2
4116: PUSH
4117: FOR_IN
4118: IFFALSE 4137
// PlaceUnitArea ( i , player_enter_area , false ) ;
4120: LD_VAR 0 3
4124: PPUSH
4125: LD_INT 24
4127: PPUSH
4128: LD_INT 0
4130: PPUSH
4131: CALL_OW 49
4135: GO 4117
4137: POP
4138: POP
// uc_side = you_alt ;
4139: LD_ADDR_OWVAR 20
4143: PUSH
4144: LD_EXP 4
4148: ST_TO_ADDR
// InitHc ;
4149: CALL_OW 19
// PrepareSoldier ( sex_male , 8 ) ;
4153: LD_INT 1
4155: PPUSH
4156: LD_INT 8
4158: PPUSH
4159: CALL_OW 381
// hc_name = Heinz ;
4163: LD_ADDR_OWVAR 26
4167: PUSH
4168: LD_STRING Heinz
4170: ST_TO_ADDR
// hc_gallery = ar_new ;
4171: LD_ADDR_OWVAR 33
4175: PUSH
4176: LD_STRING ar_new
4178: ST_TO_ADDR
// hc_face_number = 23 ;
4179: LD_ADDR_OWVAR 34
4183: PUSH
4184: LD_INT 23
4186: ST_TO_ADDR
// Heinz = CreateHuman ;
4187: LD_ADDR_EXP 22
4191: PUSH
4192: CALL_OW 44
4196: ST_TO_ADDR
// uc_side = upf ;
4197: LD_ADDR_OWVAR 20
4201: PUSH
4202: LD_EXP 6
4206: ST_TO_ADDR
// if not testing then
4207: LD_EXP 1
4211: NOT
4212: IFFALSE 4241
// begin Gensher = CreateCharacter ( Gensher_11_cont ) ;
4214: LD_ADDR_EXP 21
4218: PUSH
4219: LD_STRING Gensher_11_cont
4221: PPUSH
4222: CALL_OW 34
4226: ST_TO_ADDR
// SetClass ( Gensher , class_soldier ) ;
4227: LD_EXP 21
4231: PPUSH
4232: LD_INT 1
4234: PPUSH
4235: CALL_OW 336
// end else
4239: GO 4273
// begin InitHc ;
4241: CALL_OW 19
// PrepareSoldier ( sex_male , 10 ) ;
4245: LD_INT 1
4247: PPUSH
4248: LD_INT 10
4250: PPUSH
4251: CALL_OW 381
// hc_name = Dietrich ;
4255: LD_ADDR_OWVAR 26
4259: PUSH
4260: LD_STRING Dietrich
4262: ST_TO_ADDR
// Gensher = CreateHuman ;
4263: LD_ADDR_EXP 21
4267: PUSH
4268: CALL_OW 44
4272: ST_TO_ADDR
// end ; if difficulty >= 2 then
4273: LD_OWVAR 67
4277: PUSH
4278: LD_INT 2
4280: GREATEREQUAL
4281: IFFALSE 4358
// begin SetTech ( tech_stimdrugs , upf , state_researched ) ;
4283: LD_INT 5
4285: PPUSH
4286: LD_EXP 6
4290: PPUSH
4291: LD_INT 2
4293: PPUSH
4294: CALL_OW 322
// SetTech ( tech_bio1 , upf , state_researched ) ;
4298: LD_INT 66
4300: PPUSH
4301: LD_EXP 6
4305: PPUSH
4306: LD_INT 2
4308: PPUSH
4309: CALL_OW 322
// SetTech ( tech_opto1 , upf , state_researched ) ;
4313: LD_INT 60
4315: PPUSH
4316: LD_EXP 6
4320: PPUSH
4321: LD_INT 2
4323: PPUSH
4324: CALL_OW 322
// SetTech ( tech_weap1 , upf , state_researched ) ;
4328: LD_INT 51
4330: PPUSH
4331: LD_EXP 6
4335: PPUSH
4336: LD_INT 2
4338: PPUSH
4339: CALL_OW 322
// SetTech ( tech_sib1 , upf , state_researched ) ;
4343: LD_INT 54
4345: PPUSH
4346: LD_EXP 6
4350: PPUSH
4351: LD_INT 2
4353: PPUSH
4354: CALL_OW 322
// end ; if difficulty = 3 then
4358: LD_OWVAR 67
4362: PUSH
4363: LD_INT 3
4365: EQUAL
4366: IFFALSE 4458
// begin SetTech ( tech_bio2 , upf , state_researched ) ;
4368: LD_INT 67
4370: PPUSH
4371: LD_EXP 6
4375: PPUSH
4376: LD_INT 2
4378: PPUSH
4379: CALL_OW 322
// SetTech ( tech_bio3 , upf , state_researched ) ;
4383: LD_INT 68
4385: PPUSH
4386: LD_EXP 6
4390: PPUSH
4391: LD_INT 2
4393: PPUSH
4394: CALL_OW 322
// SetTech ( tech_opto2 , upf , state_researched ) ;
4398: LD_INT 61
4400: PPUSH
4401: LD_EXP 6
4405: PPUSH
4406: LD_INT 2
4408: PPUSH
4409: CALL_OW 322
// SetTech ( tech_opto3 , upf , state_researched ) ;
4413: LD_INT 62
4415: PPUSH
4416: LD_EXP 6
4420: PPUSH
4421: LD_INT 2
4423: PPUSH
4424: CALL_OW 322
// SetTech ( tech_weap2 , upf , state_researched ) ;
4428: LD_INT 52
4430: PPUSH
4431: LD_EXP 6
4435: PPUSH
4436: LD_INT 2
4438: PPUSH
4439: CALL_OW 322
// SetTech ( tech_sib2 , upf , state_researched ) ;
4443: LD_INT 55
4445: PPUSH
4446: LD_EXP 6
4450: PPUSH
4451: LD_INT 2
4453: PPUSH
4454: CALL_OW 322
// end ; uc_side = you_alt ;
4458: LD_ADDR_OWVAR 20
4462: PUSH
4463: LD_EXP 4
4467: ST_TO_ADDR
// if not testing then
4468: LD_EXP 1
4472: NOT
4473: IFFALSE 4571
// begin Willard = CreateCharacter ( Willard_10 ) ;
4475: LD_ADDR_EXP 24
4479: PUSH
4480: LD_STRING Willard_10
4482: PPUSH
4483: CALL_OW 34
4487: ST_TO_ADDR
// other_freelancers = ( CreateCharacterSet ( Other_traitors_10 ) ^ CreateCharacter ( Traitors_scout_10 ) ) diff 0 ;
4488: LD_ADDR_EXP 26
4492: PUSH
4493: LD_STRING Other_traitors_10
4495: PPUSH
4496: CALL_OW 31
4500: PUSH
4501: LD_STRING Traitors_scout_10
4503: PPUSH
4504: CALL_OW 34
4508: ADD
4509: PUSH
4510: LD_INT 0
4512: DIFF
4513: ST_TO_ADDR
// freelancers_leader = CreateCharacter ( Traitors_leader_10 ) ;
4514: LD_ADDR_EXP 25
4518: PUSH
4519: LD_STRING Traitors_leader_10
4521: PPUSH
4522: CALL_OW 34
4526: ST_TO_ADDR
// if freelancers_leader > 0 and LoadVariable ( Traitors_leader_is_Gordon_10 , false ) then
4527: LD_EXP 25
4531: PUSH
4532: LD_INT 0
4534: GREATER
4535: PUSH
4536: LD_STRING Traitors_leader_is_Gordon_10
4538: PPUSH
4539: LD_INT 0
4541: PPUSH
4542: CALL_OW 30
4546: AND
4547: IFFALSE 4561
// Gordon = freelancers_leader else
4549: LD_ADDR_EXP 23
4553: PUSH
4554: LD_EXP 25
4558: ST_TO_ADDR
4559: GO 4569
// Gordon = 0 ;
4561: LD_ADDR_EXP 23
4565: PUSH
4566: LD_INT 0
4568: ST_TO_ADDR
// end else
4569: GO 4724
// begin InitHc ;
4571: CALL_OW 19
// PrepareMechanic ( sex_male , 8 ) ;
4575: LD_INT 1
4577: PPUSH
4578: LD_INT 8
4580: PPUSH
4581: CALL_OW 383
// hc_name = Willard ;
4585: LD_ADDR_OWVAR 26
4589: PUSH
4590: LD_STRING Willard
4592: ST_TO_ADDR
// Willard = CreateHuman ;
4593: LD_ADDR_EXP 24
4597: PUSH
4598: CALL_OW 44
4602: ST_TO_ADDR
// PrepareSoldier ( sex_male , 8 ) ;
4603: LD_INT 1
4605: PPUSH
4606: LD_INT 8
4608: PPUSH
4609: CALL_OW 381
// hc_name = Gordon ;
4613: LD_ADDR_OWVAR 26
4617: PUSH
4618: LD_STRING Gordon
4620: ST_TO_ADDR
// Gordon = CreateHuman ;
4621: LD_ADDR_EXP 23
4625: PUSH
4626: CALL_OW 44
4630: ST_TO_ADDR
// freelancers_leader = Gordon ;
4631: LD_ADDR_EXP 25
4635: PUSH
4636: LD_EXP 23
4640: ST_TO_ADDR
// other_freelancers = [ ] ;
4641: LD_ADDR_EXP 26
4645: PUSH
4646: EMPTY
4647: ST_TO_ADDR
// InitHc ;
4648: CALL_OW 19
// for i = 1 to 3 do
4652: LD_ADDR_VAR 0 3
4656: PUSH
4657: DOUBLE
4658: LD_INT 1
4660: DEC
4661: ST_TO_ADDR
4662: LD_INT 3
4664: PUSH
4665: FOR_TO
4666: IFFALSE 4722
// begin PrepareHuman ( false , [ class_soldier , class_mechanic , class_scientistic ] [ Rand ( 1 , 3 ) ] , 7 ) ;
4668: LD_INT 0
4670: PPUSH
4671: LD_INT 1
4673: PUSH
4674: LD_INT 3
4676: PUSH
4677: LD_INT 4
4679: PUSH
4680: EMPTY
4681: LIST
4682: LIST
4683: LIST
4684: PUSH
4685: LD_INT 1
4687: PPUSH
4688: LD_INT 3
4690: PPUSH
4691: CALL_OW 12
4695: ARRAY
4696: PPUSH
4697: LD_INT 7
4699: PPUSH
4700: CALL_OW 380
// other_freelancers = other_freelancers ^ CreateHuman ;
4704: LD_ADDR_EXP 26
4708: PUSH
4709: LD_EXP 26
4713: PUSH
4714: CALL_OW 44
4718: ADD
4719: ST_TO_ADDR
// end ;
4720: GO 4665
4722: POP
4723: POP
// end ; if freelancers_leader = 0 then
4724: LD_EXP 25
4728: PUSH
4729: LD_INT 0
4731: EQUAL
4732: IFFALSE 4817
// begin if other_freelancers > 0 then
4734: LD_EXP 26
4738: PUSH
4739: LD_INT 0
4741: GREATER
4742: IFFALSE 4778
// begin freelancers_leader = other_freelancers [ 1 ] ;
4744: LD_ADDR_EXP 25
4748: PUSH
4749: LD_EXP 26
4753: PUSH
4754: LD_INT 1
4756: ARRAY
4757: ST_TO_ADDR
// other_freelancers = Delete ( other_freelancers , 1 ) ;
4758: LD_ADDR_EXP 26
4762: PUSH
4763: LD_EXP 26
4767: PPUSH
4768: LD_INT 1
4770: PPUSH
4771: CALL_OW 3
4775: ST_TO_ADDR
// end else
4776: GO 4817
// begin Willard = 0 ;
4778: LD_ADDR_EXP 24
4782: PUSH
4783: LD_INT 0
4785: ST_TO_ADDR
// other_freelancers = [ ] ;
4786: LD_ADDR_EXP 26
4790: PUSH
4791: EMPTY
4792: ST_TO_ADDR
// freelancers_leader = 0 ;
4793: LD_ADDR_EXP 25
4797: PUSH
4798: LD_INT 0
4800: ST_TO_ADDR
// Gordon = 0 ;
4801: LD_ADDR_EXP 23
4805: PUSH
4806: LD_INT 0
4808: ST_TO_ADDR
// freelancers_are_dead = true ;
4809: LD_ADDR_EXP 99
4813: PUSH
4814: LD_INT 1
4816: ST_TO_ADDR
// end ; end ; if ( ( other_freelancers ^ Willard ^ freelancers_leader ) diff 0 ) < 4 then
4817: LD_EXP 26
4821: PUSH
4822: LD_EXP 24
4826: ADD
4827: PUSH
4828: LD_EXP 25
4832: ADD
4833: PUSH
4834: LD_INT 0
4836: DIFF
4837: PUSH
4838: LD_INT 4
4840: LESS
4841: IFFALSE 4894
// other_freelancers = other_freelancers ^ CreateUnitsWithClass ( 4 - ( ( other_freelancers ^ Willard ^ freelancers_leader ) diff 0 ) , class_soldier , uc_side ) else
4843: LD_ADDR_EXP 26
4847: PUSH
4848: LD_EXP 26
4852: PUSH
4853: LD_INT 4
4855: PUSH
4856: LD_EXP 26
4860: PUSH
4861: LD_EXP 24
4865: ADD
4866: PUSH
4867: LD_EXP 25
4871: ADD
4872: PUSH
4873: LD_INT 0
4875: DIFF
4876: MINUS
4877: PPUSH
4878: LD_INT 1
4880: PPUSH
4881: LD_OWVAR 20
4885: PPUSH
4886: CALL 9322 0 3
4890: ADD
4891: ST_TO_ADDR
4892: GO 4967
// for i = 6 to ( ( other_freelancers ^ Willard ^ freelancers_leader ) diff 0 ) + 0 do
4894: LD_ADDR_VAR 0 3
4898: PUSH
4899: DOUBLE
4900: LD_INT 6
4902: DEC
4903: ST_TO_ADDR
4904: LD_EXP 26
4908: PUSH
4909: LD_EXP 24
4913: ADD
4914: PUSH
4915: LD_EXP 25
4919: ADD
4920: PUSH
4921: LD_INT 0
4923: DIFF
4924: PUSH
4925: LD_INT 0
4927: PLUS
4928: PUSH
4929: FOR_TO
4930: IFFALSE 4965
// begin DestroyUnit ( other_freelancers [ 1 ] ) ;
4932: LD_EXP 26
4936: PUSH
4937: LD_INT 1
4939: ARRAY
4940: PPUSH
4941: CALL_OW 65
// other_freelancers = Delete ( other_freelancers , 1 ) ;
4945: LD_ADDR_EXP 26
4949: PUSH
4950: LD_EXP 26
4954: PPUSH
4955: LD_INT 1
4957: PPUSH
4958: CALL_OW 3
4962: ST_TO_ADDR
// end ;
4963: GO 4929
4965: POP
4966: POP
// end ;
4967: LD_VAR 0 1
4971: RET
// function ScanBuildings ; var side , i , temp_list , base , area , temp_list_2 ; begin
4972: LD_INT 0
4974: PPUSH
4975: PPUSH
4976: PPUSH
4977: PPUSH
4978: PPUSH
4979: PPUSH
4980: PPUSH
// if difficulty <= 2 then
4981: LD_OWVAR 67
4985: PUSH
4986: LD_INT 2
4988: LESSEQUAL
4989: IFFALSE 5144
// begin PlaceWeaponTurret ( am_minor_b1 , us_double_gun ) ;
4991: LD_INT 78
4993: PPUSH
4994: LD_INT 5
4996: PPUSH
4997: CALL_OW 431
// ReplaceBunkerWithTurret ( am_bu2 ) ;
5001: LD_INT 34
5003: PPUSH
5004: CALL 6019 0 1
// ReplaceBunkerWithTurret ( am_bu4 ) ;
5008: LD_INT 23
5010: PPUSH
5011: CALL 6019 0 1
// ReplaceBunkerWithTurret ( am_bu6 ) ;
5015: LD_INT 29
5017: PPUSH
5018: CALL 6019 0 1
// ReplaceBunkerWithTurret ( am_bu7 ) ;
5022: LD_INT 9
5024: PPUSH
5025: CALL 6019 0 1
// if difficulty = 2 then
5029: LD_OWVAR 67
5033: PUSH
5034: LD_INT 2
5036: EQUAL
5037: IFFALSE 5137
// begin temp_list = [ GetX ( am_bu9 ) , GetY ( am_bu9 ) , GetDir ( am_bu9 ) ] ;
5039: LD_ADDR_VAR 0 4
5043: PUSH
5044: LD_INT 32
5046: PPUSH
5047: CALL_OW 250
5051: PUSH
5052: LD_INT 32
5054: PPUSH
5055: CALL_OW 251
5059: PUSH
5060: LD_INT 32
5062: PPUSH
5063: CALL_OW 254
5067: PUSH
5068: EMPTY
5069: LIST
5070: LIST
5071: LIST
5072: ST_TO_ADDR
// DestroyUnit ( am_bu9 ) ;
5073: LD_INT 32
5075: PPUSH
5076: CALL_OW 65
// bc_type = b_bunker ;
5080: LD_ADDR_OWVAR 42
5084: PUSH
5085: LD_INT 32
5087: ST_TO_ADDR
// i = CreateAndPlaceBuildingXYD ( temp_list [ 1 ] , temp_list [ 2 ] , temp_list [ 3 ] ) ;
5088: LD_ADDR_VAR 0 3
5092: PUSH
5093: LD_VAR 0 4
5097: PUSH
5098: LD_INT 1
5100: ARRAY
5101: PPUSH
5102: LD_VAR 0 4
5106: PUSH
5107: LD_INT 2
5109: ARRAY
5110: PPUSH
5111: LD_VAR 0 4
5115: PUSH
5116: LD_INT 3
5118: ARRAY
5119: PPUSH
5120: CALL_OW 47
5124: ST_TO_ADDR
// PlaceWeaponTurret ( i , us_gatling_gun ) ;
5125: LD_VAR 0 3
5129: PPUSH
5130: LD_INT 4
5132: PPUSH
5133: CALL_OW 431
// end ; DestroyUnit ( am_bu8 ) ;
5137: LD_INT 104
5139: PPUSH
5140: CALL_OW 65
// end ; if difficulty = 1 then
5144: LD_OWVAR 67
5148: PUSH
5149: LD_INT 1
5151: EQUAL
5152: IFFALSE 5389
// begin InitUc ;
5154: CALL_OW 18
// InitBc ;
5158: CALL_OW 21
// uc_nation = nation_american ;
5162: LD_ADDR_OWVAR 21
5166: PUSH
5167: LD_INT 1
5169: ST_TO_ADDR
// uc_side = americans ;
5170: LD_ADDR_OWVAR 20
5174: PUSH
5175: LD_EXP 5
5179: ST_TO_ADDR
// temp_list = [ GetX ( am_minor_b1 ) , GetY ( am_minor_b1 ) , GetDir ( am_minor_b1 ) ] ;
5180: LD_ADDR_VAR 0 4
5184: PUSH
5185: LD_INT 78
5187: PPUSH
5188: CALL_OW 250
5192: PUSH
5193: LD_INT 78
5195: PPUSH
5196: CALL_OW 251
5200: PUSH
5201: LD_INT 78
5203: PPUSH
5204: CALL_OW 254
5208: PUSH
5209: EMPTY
5210: LIST
5211: LIST
5212: LIST
5213: ST_TO_ADDR
// DestroyUnit ( am_minor_b1 ) ;
5214: LD_INT 78
5216: PPUSH
5217: CALL_OW 65
// bc_type = b_breastwork ;
5221: LD_ADDR_OWVAR 42
5225: PUSH
5226: LD_INT 31
5228: ST_TO_ADDR
// CreateAndPlaceBuildingXYD ( temp_list [ 1 ] , temp_list [ 2 ] , temp_list [ 3 ] ) ;
5229: LD_VAR 0 4
5233: PUSH
5234: LD_INT 1
5236: ARRAY
5237: PPUSH
5238: LD_VAR 0 4
5242: PUSH
5243: LD_INT 2
5245: ARRAY
5246: PPUSH
5247: LD_VAR 0 4
5251: PUSH
5252: LD_INT 3
5254: ARRAY
5255: PPUSH
5256: CALL_OW 47
// temp_list = [ GetX ( am_bar1 ) , GetY ( am_bar1 ) , GetDir ( am_bar1 ) ] ;
5260: LD_ADDR_VAR 0 4
5264: PUSH
5265: LD_INT 5
5267: PPUSH
5268: CALL_OW 250
5272: PUSH
5273: LD_INT 5
5275: PPUSH
5276: CALL_OW 251
5280: PUSH
5281: LD_INT 5
5283: PPUSH
5284: CALL_OW 254
5288: PUSH
5289: EMPTY
5290: LIST
5291: LIST
5292: LIST
5293: ST_TO_ADDR
// DestroyUnit ( am_bar1 ) ;
5294: LD_INT 5
5296: PPUSH
5297: CALL_OW 65
// bc_type = b_breastwork ;
5301: LD_ADDR_OWVAR 42
5305: PUSH
5306: LD_INT 31
5308: ST_TO_ADDR
// CreateAndPlaceBuildingXYD ( temp_list [ 1 ] , temp_list [ 2 ] , temp_list [ 3 ] ) ;
5309: LD_VAR 0 4
5313: PUSH
5314: LD_INT 1
5316: ARRAY
5317: PPUSH
5318: LD_VAR 0 4
5322: PUSH
5323: LD_INT 2
5325: ARRAY
5326: PPUSH
5327: LD_VAR 0 4
5331: PUSH
5332: LD_INT 3
5334: ARRAY
5335: PPUSH
5336: CALL_OW 47
// ReplaceBunkerWithTurret ( am_bu1 ) ;
5340: LD_INT 36
5342: PPUSH
5343: CALL 6019 0 1
// ReplaceBunkerWithTurret ( am_bu3 ) ;
5347: LD_INT 13
5349: PPUSH
5350: CALL 6019 0 1
// ReplaceBunkerWithTurret ( am_bu5 ) ;
5354: LD_INT 27
5356: PPUSH
5357: CALL 6019 0 1
// DestroyUnit ( am_bu7 ) ;
5361: LD_INT 9
5363: PPUSH
5364: CALL_OW 65
// DestroyUnit ( am_bu10 ) ;
5368: LD_INT 2
5370: PPUSH
5371: CALL_OW 65
// DestroyUnit ( am_bu9 ) ;
5375: LD_INT 32
5377: PPUSH
5378: CALL_OW 65
// DestroyUnit ( am_br4 ) ;
5382: LD_INT 3
5384: PPUSH
5385: CALL_OW 65
// end ; for base in ai_bases do
5389: LD_ADDR_VAR 0 5
5393: PUSH
5394: LD_EXP 59
5398: PUSH
5399: FOR_IN
5400: IFFALSE 6012
// begin case base of 1 :
5402: LD_VAR 0 5
5406: PUSH
5407: LD_INT 1
5409: DOUBLE
5410: EQUAL
5411: IFTRUE 5415
5413: GO 5436
5415: POP
// begin area = Am_base ;
5416: LD_ADDR_VAR 0 6
5420: PUSH
5421: LD_INT 2
5423: ST_TO_ADDR
// side = americans ;
5424: LD_ADDR_VAR 0 2
5428: PUSH
5429: LD_EXP 5
5433: ST_TO_ADDR
// end ; 2 :
5434: GO 5466
5436: LD_INT 2
5438: DOUBLE
5439: EQUAL
5440: IFTRUE 5444
5442: GO 5465
5444: POP
// begin area = Am_small_base ;
5445: LD_ADDR_VAR 0 6
5449: PUSH
5450: LD_INT 3
5452: ST_TO_ADDR
// side = americans ;
5453: LD_ADDR_VAR 0 2
5457: PUSH
5458: LD_EXP 5
5462: ST_TO_ADDR
// end ; end ;
5463: GO 5466
5465: POP
// ai_all_buildings = Replace ( ai_all_buildings , base , FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_building ] , [ f_inarea , area ] ] ) ) ;
5466: LD_ADDR_EXP 45
5470: PUSH
5471: LD_EXP 45
5475: PPUSH
5476: LD_VAR 0 5
5480: PPUSH
5481: LD_INT 22
5483: PUSH
5484: LD_VAR 0 2
5488: PUSH
5489: EMPTY
5490: LIST
5491: LIST
5492: PUSH
5493: LD_INT 21
5495: PUSH
5496: LD_INT 3
5498: PUSH
5499: EMPTY
5500: LIST
5501: LIST
5502: PUSH
5503: LD_INT 95
5505: PUSH
5506: LD_VAR 0 6
5510: PUSH
5511: EMPTY
5512: LIST
5513: LIST
5514: PUSH
5515: EMPTY
5516: LIST
5517: LIST
5518: LIST
5519: PPUSH
5520: CALL_OW 69
5524: PPUSH
5525: CALL_OW 1
5529: ST_TO_ADDR
// if base = 1 and IsLive ( am_br4 ) then
5530: LD_VAR 0 5
5534: PUSH
5535: LD_INT 1
5537: EQUAL
5538: PUSH
5539: LD_INT 3
5541: PPUSH
5542: CALL_OW 300
5546: AND
5547: IFFALSE 5594
// begin temp_list = ai_all_buildings [ base ] ^ am_br4 ;
5549: LD_ADDR_VAR 0 4
5553: PUSH
5554: LD_EXP 45
5558: PUSH
5559: LD_VAR 0 5
5563: ARRAY
5564: PUSH
5565: LD_INT 3
5567: ADD
5568: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
5569: LD_ADDR_EXP 45
5573: PUSH
5574: LD_EXP 45
5578: PPUSH
5579: LD_VAR 0 5
5583: PPUSH
5584: LD_VAR 0 4
5588: PPUSH
5589: CALL_OW 1
5593: ST_TO_ADDR
// end ; for i in ai_all_buildings [ base ] do
5594: LD_ADDR_VAR 0 3
5598: PUSH
5599: LD_EXP 45
5603: PUSH
5604: LD_VAR 0 5
5608: ARRAY
5609: PUSH
5610: FOR_IN
5611: IFFALSE 5632
// UpdateBuildingBasicVariables ( base , i , true ) ;
5613: LD_VAR 0 5
5617: PPUSH
5618: LD_VAR 0 3
5622: PPUSH
5623: LD_INT 1
5625: PPUSH
5626: CALL 6190 0 3
5630: GO 5610
5632: POP
5633: POP
// temp_list = [ ] ;
5634: LD_ADDR_VAR 0 4
5638: PUSH
5639: EMPTY
5640: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
5641: LD_ADDR_VAR 0 3
5645: PUSH
5646: LD_EXP 45
5650: PUSH
5651: LD_VAR 0 5
5655: ARRAY
5656: PUSH
5657: FOR_IN
5658: IFFALSE 5910
// begin if base = 1 and i = am_br4 then
5660: LD_VAR 0 5
5664: PUSH
5665: LD_INT 1
5667: EQUAL
5668: PUSH
5669: LD_VAR 0 3
5673: PUSH
5674: LD_INT 3
5676: EQUAL
5677: AND
5678: IFFALSE 5708
// begin ai_excepted_buildings = Replace ( ai_excepted_buildings , base , [ am_br4 ] ) ;
5680: LD_ADDR_EXP 89
5684: PUSH
5685: LD_EXP 89
5689: PPUSH
5690: LD_VAR 0 5
5694: PPUSH
5695: LD_INT 3
5697: PUSH
5698: EMPTY
5699: LIST
5700: PPUSH
5701: CALL_OW 1
5705: ST_TO_ADDR
// continue ;
5706: GO 5657
// end ; temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , GetBWeapon ( i ) ] ] ;
5708: LD_ADDR_VAR 0 4
5712: PUSH
5713: LD_VAR 0 4
5717: PUSH
5718: LD_VAR 0 3
5722: PPUSH
5723: CALL_OW 250
5727: PUSH
5728: LD_VAR 0 3
5732: PPUSH
5733: CALL_OW 251
5737: PUSH
5738: LD_VAR 0 3
5742: PPUSH
5743: CALL_OW 254
5747: PUSH
5748: LD_VAR 0 3
5752: PPUSH
5753: CALL_OW 266
5757: PUSH
5758: LD_VAR 0 3
5762: PPUSH
5763: LD_INT 1
5765: PPUSH
5766: CALL_OW 268
5770: PUSH
5771: LD_VAR 0 3
5775: PPUSH
5776: LD_INT 2
5778: PPUSH
5779: CALL_OW 268
5783: PUSH
5784: LD_VAR 0 3
5788: PPUSH
5789: CALL_OW 269
5793: PUSH
5794: EMPTY
5795: LIST
5796: LIST
5797: LIST
5798: LIST
5799: LIST
5800: LIST
5801: LIST
5802: PUSH
5803: EMPTY
5804: LIST
5805: ADD
5806: ST_TO_ADDR
// if base = 2 and temp_list [ temp_list + 0 ] [ 4 ] in [ b_bunker , b_turret ] then
5807: LD_VAR 0 5
5811: PUSH
5812: LD_INT 2
5814: EQUAL
5815: PUSH
5816: LD_VAR 0 4
5820: PUSH
5821: LD_VAR 0 4
5825: PUSH
5826: LD_INT 0
5828: PLUS
5829: ARRAY
5830: PUSH
5831: LD_INT 4
5833: ARRAY
5834: PUSH
5835: LD_INT 32
5837: PUSH
5838: LD_INT 33
5840: PUSH
5841: EMPTY
5842: LIST
5843: LIST
5844: IN
5845: AND
5846: IFFALSE 5908
// begin temp_list_2 = Replace ( temp_list [ temp_list + 0 ] , 4 , b_breastwork ) ;
5848: LD_ADDR_VAR 0 7
5852: PUSH
5853: LD_VAR 0 4
5857: PUSH
5858: LD_VAR 0 4
5862: PUSH
5863: LD_INT 0
5865: PLUS
5866: ARRAY
5867: PPUSH
5868: LD_INT 4
5870: PPUSH
5871: LD_INT 31
5873: PPUSH
5874: CALL_OW 1
5878: ST_TO_ADDR
// temp_list = Replace ( temp_list , temp_list + 0 , temp_list_2 ) ;
5879: LD_ADDR_VAR 0 4
5883: PUSH
5884: LD_VAR 0 4
5888: PPUSH
5889: LD_VAR 0 4
5893: PUSH
5894: LD_INT 0
5896: PLUS
5897: PPUSH
5898: LD_VAR 0 7
5902: PPUSH
5903: CALL_OW 1
5907: ST_TO_ADDR
// end ; end ;
5908: GO 5657
5910: POP
5911: POP
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
5912: LD_ADDR_EXP 38
5916: PUSH
5917: LD_EXP 38
5921: PPUSH
5922: LD_VAR 0 5
5926: PPUSH
5927: LD_VAR 0 4
5931: PPUSH
5932: CALL_OW 1
5936: ST_TO_ADDR
// SortBuildingLocationsListInCorrectOrder ( base ) ;
5937: LD_VAR 0 5
5941: PPUSH
5942: CALL 7265 0 1
// for i in ai_siberite_mines [ base ] ^ ai_oil_mine [ base ] do
5946: LD_ADDR_VAR 0 3
5950: PUSH
5951: LD_EXP 36
5955: PUSH
5956: LD_VAR 0 5
5960: ARRAY
5961: PUSH
5962: LD_EXP 51
5966: PUSH
5967: LD_VAR 0 5
5971: ARRAY
5972: ADD
5973: PUSH
5974: FOR_IN
5975: IFFALSE 6008
// SetResourceVisibility ( GetX ( i ) , GetY ( i ) , side ) ;
5977: LD_VAR 0 3
5981: PPUSH
5982: CALL_OW 250
5986: PPUSH
5987: LD_VAR 0 3
5991: PPUSH
5992: CALL_OW 251
5996: PPUSH
5997: LD_VAR 0 2
6001: PPUSH
6002: CALL_OW 441
6006: GO 5974
6008: POP
6009: POP
// end ;
6010: GO 5399
6012: POP
6013: POP
// end ;
6014: LD_VAR 0 1
6018: RET
// function ReplaceBunkerWithTurret ( id ) ; var un , temp_list ; begin
6019: LD_INT 0
6021: PPUSH
6022: PPUSH
6023: PPUSH
// InitUc ;
6024: CALL_OW 18
// InitBc ;
6028: CALL_OW 21
// uc_nation = GetNation ( id ) ;
6032: LD_ADDR_OWVAR 21
6036: PUSH
6037: LD_VAR 0 1
6041: PPUSH
6042: CALL_OW 248
6046: ST_TO_ADDR
// uc_side = GetSide ( id ) ;
6047: LD_ADDR_OWVAR 20
6051: PUSH
6052: LD_VAR 0 1
6056: PPUSH
6057: CALL_OW 255
6061: ST_TO_ADDR
// temp_list = [ GetX ( id ) , GetY ( id ) , GetDir ( id ) , GetBWeapon ( id ) ] ;
6062: LD_ADDR_VAR 0 4
6066: PUSH
6067: LD_VAR 0 1
6071: PPUSH
6072: CALL_OW 250
6076: PUSH
6077: LD_VAR 0 1
6081: PPUSH
6082: CALL_OW 251
6086: PUSH
6087: LD_VAR 0 1
6091: PPUSH
6092: CALL_OW 254
6096: PUSH
6097: LD_VAR 0 1
6101: PPUSH
6102: CALL_OW 269
6106: PUSH
6107: EMPTY
6108: LIST
6109: LIST
6110: LIST
6111: LIST
6112: ST_TO_ADDR
// DestroyUnit ( id ) ;
6113: LD_VAR 0 1
6117: PPUSH
6118: CALL_OW 65
// bc_type = b_turret ;
6122: LD_ADDR_OWVAR 42
6126: PUSH
6127: LD_INT 33
6129: ST_TO_ADDR
// un = CreateAndPlaceBuildingXYD ( temp_list [ 1 ] , temp_list [ 2 ] , temp_list [ 3 ] ) ;
6130: LD_ADDR_VAR 0 3
6134: PUSH
6135: LD_VAR 0 4
6139: PUSH
6140: LD_INT 1
6142: ARRAY
6143: PPUSH
6144: LD_VAR 0 4
6148: PUSH
6149: LD_INT 2
6151: ARRAY
6152: PPUSH
6153: LD_VAR 0 4
6157: PUSH
6158: LD_INT 3
6160: ARRAY
6161: PPUSH
6162: CALL_OW 47
6166: ST_TO_ADDR
// PlaceWeaponTurret ( un , temp_list [ 4 ] ) ;
6167: LD_VAR 0 3
6171: PPUSH
6172: LD_VAR 0 4
6176: PUSH
6177: LD_INT 4
6179: ARRAY
6180: PPUSH
6181: CALL_OW 431
// end ;
6185: LD_VAR 0 2
6189: RET
// export function UpdateBuildingBasicVariables ( base , un , add ) ; var temp_list ; begin
6190: LD_INT 0
6192: PPUSH
6193: PPUSH
// case GetBType ( un ) of b_depot , b_warehouse :
6194: LD_VAR 0 2
6198: PPUSH
6199: CALL_OW 266
6203: PUSH
6204: LD_INT 0
6206: DOUBLE
6207: EQUAL
6208: IFTRUE 6218
6210: LD_INT 1
6212: DOUBLE
6213: EQUAL
6214: IFTRUE 6218
6216: GO 6295
6218: POP
// if add then
6219: LD_VAR 0 3
6223: IFFALSE 6252
// ai_depot = Replace ( ai_depot , base , un ) else
6225: LD_ADDR_EXP 34
6229: PUSH
6230: LD_EXP 34
6234: PPUSH
6235: LD_VAR 0 1
6239: PPUSH
6240: LD_VAR 0 2
6244: PPUSH
6245: CALL_OW 1
6249: ST_TO_ADDR
6250: GO 6293
// if un = ai_depot [ base ] then
6252: LD_VAR 0 2
6256: PUSH
6257: LD_EXP 34
6261: PUSH
6262: LD_VAR 0 1
6266: ARRAY
6267: EQUAL
6268: IFFALSE 6293
// ai_depot = Replace ( ai_depot , base , 0 ) ; b_lab , b_lab_half , b_lab_full :
6270: LD_ADDR_EXP 34
6274: PUSH
6275: LD_EXP 34
6279: PPUSH
6280: LD_VAR 0 1
6284: PPUSH
6285: LD_INT 0
6287: PPUSH
6288: CALL_OW 1
6292: ST_TO_ADDR
6293: GO 7260
6295: LD_INT 6
6297: DOUBLE
6298: EQUAL
6299: IFTRUE 6315
6301: LD_INT 7
6303: DOUBLE
6304: EQUAL
6305: IFTRUE 6315
6307: LD_INT 8
6309: DOUBLE
6310: EQUAL
6311: IFTRUE 6315
6313: GO 6395
6315: POP
// begin if add then
6316: LD_VAR 0 3
6320: IFFALSE 6346
// temp_list = ai_labs [ base ] ^ un else
6322: LD_ADDR_VAR 0 5
6326: PUSH
6327: LD_EXP 35
6331: PUSH
6332: LD_VAR 0 1
6336: ARRAY
6337: PUSH
6338: LD_VAR 0 2
6342: ADD
6343: ST_TO_ADDR
6344: GO 6368
// temp_list = ai_labs [ base ] diff un ;
6346: LD_ADDR_VAR 0 5
6350: PUSH
6351: LD_EXP 35
6355: PUSH
6356: LD_VAR 0 1
6360: ARRAY
6361: PUSH
6362: LD_VAR 0 2
6366: DIFF
6367: ST_TO_ADDR
// ai_labs = Replace ( ai_labs , base , temp_list ) ;
6368: LD_ADDR_EXP 35
6372: PUSH
6373: LD_EXP 35
6377: PPUSH
6378: LD_VAR 0 1
6382: PPUSH
6383: LD_VAR 0 5
6387: PPUSH
6388: CALL_OW 1
6392: ST_TO_ADDR
// end ; b_factory , b_workshop :
6393: GO 7260
6395: LD_INT 3
6397: DOUBLE
6398: EQUAL
6399: IFTRUE 6409
6401: LD_INT 2
6403: DOUBLE
6404: EQUAL
6405: IFTRUE 6409
6407: GO 6489
6409: POP
// begin if add then
6410: LD_VAR 0 3
6414: IFFALSE 6440
// temp_list = ai_facts [ base ] ^ un else
6416: LD_ADDR_VAR 0 5
6420: PUSH
6421: LD_EXP 48
6425: PUSH
6426: LD_VAR 0 1
6430: ARRAY
6431: PUSH
6432: LD_VAR 0 2
6436: ADD
6437: ST_TO_ADDR
6438: GO 6462
// temp_list = ai_facts [ base ] diff un ;
6440: LD_ADDR_VAR 0 5
6444: PUSH
6445: LD_EXP 48
6449: PUSH
6450: LD_VAR 0 1
6454: ARRAY
6455: PUSH
6456: LD_VAR 0 2
6460: DIFF
6461: ST_TO_ADDR
// ai_facts = Replace ( ai_facts , base , temp_list ) ;
6462: LD_ADDR_EXP 48
6466: PUSH
6467: LD_EXP 48
6471: PPUSH
6472: LD_VAR 0 1
6476: PPUSH
6477: LD_VAR 0 5
6481: PPUSH
6482: CALL_OW 1
6486: ST_TO_ADDR
// end ; b_armoury , b_barracks :
6487: GO 7260
6489: LD_INT 4
6491: DOUBLE
6492: EQUAL
6493: IFTRUE 6503
6495: LD_INT 5
6497: DOUBLE
6498: EQUAL
6499: IFTRUE 6503
6501: GO 6583
6503: POP
// begin if add then
6504: LD_VAR 0 3
6508: IFFALSE 6534
// temp_list = ai_armouries [ base ] ^ un else
6510: LD_ADDR_VAR 0 5
6514: PUSH
6515: LD_EXP 49
6519: PUSH
6520: LD_VAR 0 1
6524: ARRAY
6525: PUSH
6526: LD_VAR 0 2
6530: ADD
6531: ST_TO_ADDR
6532: GO 6556
// temp_list = ai_armouries [ base ] diff un ;
6534: LD_ADDR_VAR 0 5
6538: PUSH
6539: LD_EXP 49
6543: PUSH
6544: LD_VAR 0 1
6548: ARRAY
6549: PUSH
6550: LD_VAR 0 2
6554: DIFF
6555: ST_TO_ADDR
// ai_armouries = Replace ( ai_armouries , base , temp_list ) ;
6556: LD_ADDR_EXP 49
6560: PUSH
6561: LD_EXP 49
6565: PPUSH
6566: LD_VAR 0 1
6570: PPUSH
6571: LD_VAR 0 5
6575: PPUSH
6576: CALL_OW 1
6580: ST_TO_ADDR
// end ; b_breastwork , b_bunker :
6581: GO 7260
6583: LD_INT 31
6585: DOUBLE
6586: EQUAL
6587: IFTRUE 6597
6589: LD_INT 32
6591: DOUBLE
6592: EQUAL
6593: IFTRUE 6597
6595: GO 6677
6597: POP
// begin if add then
6598: LD_VAR 0 3
6602: IFFALSE 6628
// temp_list = ai_bunkers [ base ] ^ un else
6604: LD_ADDR_VAR 0 5
6608: PUSH
6609: LD_EXP 50
6613: PUSH
6614: LD_VAR 0 1
6618: ARRAY
6619: PUSH
6620: LD_VAR 0 2
6624: ADD
6625: ST_TO_ADDR
6626: GO 6650
// temp_list = ai_bunkers [ base ] diff un ;
6628: LD_ADDR_VAR 0 5
6632: PUSH
6633: LD_EXP 50
6637: PUSH
6638: LD_VAR 0 1
6642: ARRAY
6643: PUSH
6644: LD_VAR 0 2
6648: DIFF
6649: ST_TO_ADDR
// ai_bunkers = Replace ( ai_bunkers , base , temp_list ) ;
6650: LD_ADDR_EXP 50
6654: PUSH
6655: LD_EXP 50
6659: PPUSH
6660: LD_VAR 0 1
6664: PPUSH
6665: LD_VAR 0 5
6669: PPUSH
6670: CALL_OW 1
6674: ST_TO_ADDR
// end ; b_turret :
6675: GO 7260
6677: LD_INT 33
6679: DOUBLE
6680: EQUAL
6681: IFTRUE 6685
6683: GO 6765
6685: POP
// begin if add then
6686: LD_VAR 0 3
6690: IFFALSE 6716
// temp_list = ai_turrets [ base ] ^ un else
6692: LD_ADDR_VAR 0 5
6696: PUSH
6697: LD_EXP 56
6701: PUSH
6702: LD_VAR 0 1
6706: ARRAY
6707: PUSH
6708: LD_VAR 0 2
6712: ADD
6713: ST_TO_ADDR
6714: GO 6738
// temp_list = ai_turrets [ base ] diff un ;
6716: LD_ADDR_VAR 0 5
6720: PUSH
6721: LD_EXP 56
6725: PUSH
6726: LD_VAR 0 1
6730: ARRAY
6731: PUSH
6732: LD_VAR 0 2
6736: DIFF
6737: ST_TO_ADDR
// ai_turrets = Replace ( ai_turrets , base , temp_list ) ;
6738: LD_ADDR_EXP 56
6742: PUSH
6743: LD_EXP 56
6747: PPUSH
6748: LD_VAR 0 1
6752: PPUSH
6753: LD_VAR 0 5
6757: PPUSH
6758: CALL_OW 1
6762: ST_TO_ADDR
// end ; b_oil_mine :
6763: GO 7260
6765: LD_INT 29
6767: DOUBLE
6768: EQUAL
6769: IFTRUE 6773
6771: GO 6850
6773: POP
// if add then
6774: LD_VAR 0 3
6778: IFFALSE 6807
// ai_oil_mine = Replace ( ai_oil_mine , base , un ) else
6780: LD_ADDR_EXP 51
6784: PUSH
6785: LD_EXP 51
6789: PPUSH
6790: LD_VAR 0 1
6794: PPUSH
6795: LD_VAR 0 2
6799: PPUSH
6800: CALL_OW 1
6804: ST_TO_ADDR
6805: GO 6848
// if un = ai_oil_mine [ base ] then
6807: LD_VAR 0 2
6811: PUSH
6812: LD_EXP 51
6816: PUSH
6817: LD_VAR 0 1
6821: ARRAY
6822: EQUAL
6823: IFFALSE 6848
// ai_oil_mine = Replace ( ai_oil_mine , base , 0 ) ; b_siberite_mine :
6825: LD_ADDR_EXP 51
6829: PUSH
6830: LD_EXP 51
6834: PPUSH
6835: LD_VAR 0 1
6839: PPUSH
6840: LD_INT 0
6842: PPUSH
6843: CALL_OW 1
6847: ST_TO_ADDR
6848: GO 7260
6850: LD_INT 30
6852: DOUBLE
6853: EQUAL
6854: IFTRUE 6858
6856: GO 6938
6858: POP
// begin if add then
6859: LD_VAR 0 3
6863: IFFALSE 6889
// temp_list = ai_siberite_mines [ base ] ^ un else
6865: LD_ADDR_VAR 0 5
6869: PUSH
6870: LD_EXP 36
6874: PUSH
6875: LD_VAR 0 1
6879: ARRAY
6880: PUSH
6881: LD_VAR 0 2
6885: ADD
6886: ST_TO_ADDR
6887: GO 6911
// temp_list = ai_siberite_mines [ base ] diff un ;
6889: LD_ADDR_VAR 0 5
6893: PUSH
6894: LD_EXP 36
6898: PUSH
6899: LD_VAR 0 1
6903: ARRAY
6904: PUSH
6905: LD_VAR 0 2
6909: DIFF
6910: ST_TO_ADDR
// ai_siberite_mines = Replace ( ai_siberite_mines , base , temp_list ) ;
6911: LD_ADDR_EXP 36
6915: PUSH
6916: LD_EXP 36
6920: PPUSH
6921: LD_VAR 0 1
6925: PPUSH
6926: LD_VAR 0 5
6930: PPUSH
6931: CALL_OW 1
6935: 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 :
6936: GO 7260
6938: LD_INT 17
6940: DOUBLE
6941: EQUAL
6942: IFTRUE 6994
6944: LD_INT 19
6946: DOUBLE
6947: EQUAL
6948: IFTRUE 6994
6950: LD_INT 25
6952: DOUBLE
6953: EQUAL
6954: IFTRUE 6994
6956: LD_INT 24
6958: DOUBLE
6959: EQUAL
6960: IFTRUE 6994
6962: LD_INT 20
6964: DOUBLE
6965: EQUAL
6966: IFTRUE 6994
6968: LD_INT 18
6970: DOUBLE
6971: EQUAL
6972: IFTRUE 6994
6974: LD_INT 21
6976: DOUBLE
6977: EQUAL
6978: IFTRUE 6994
6980: LD_INT 16
6982: DOUBLE
6983: EQUAL
6984: IFTRUE 6994
6986: LD_INT 23
6988: DOUBLE
6989: EQUAL
6990: IFTRUE 6994
6992: GO 7074
6994: POP
// begin if add then
6995: LD_VAR 0 3
6999: IFFALSE 7025
// temp_list = ai_fact_extensions [ base ] ^ un else
7001: LD_ADDR_VAR 0 5
7005: PUSH
7006: LD_EXP 52
7010: PUSH
7011: LD_VAR 0 1
7015: ARRAY
7016: PUSH
7017: LD_VAR 0 2
7021: ADD
7022: ST_TO_ADDR
7023: GO 7047
// temp_list = ai_fact_extensions [ base ] diff un ;
7025: LD_ADDR_VAR 0 5
7029: PUSH
7030: LD_EXP 52
7034: PUSH
7035: LD_VAR 0 1
7039: ARRAY
7040: PUSH
7041: LD_VAR 0 2
7045: DIFF
7046: ST_TO_ADDR
// ai_fact_extensions = Replace ( ai_fact_extensions , base , temp_list ) ;
7047: LD_ADDR_EXP 52
7051: PUSH
7052: LD_EXP 52
7056: PPUSH
7057: LD_VAR 0 1
7061: PPUSH
7062: LD_VAR 0 5
7066: PPUSH
7067: CALL_OW 1
7071: ST_TO_ADDR
// end ; b_solar_power , b_oil_power , b_siberite_power :
7072: GO 7260
7074: LD_INT 27
7076: DOUBLE
7077: EQUAL
7078: IFTRUE 7094
7080: LD_INT 26
7082: DOUBLE
7083: EQUAL
7084: IFTRUE 7094
7086: LD_INT 28
7088: DOUBLE
7089: EQUAL
7090: IFTRUE 7094
7092: GO 7174
7094: POP
// begin if add then
7095: LD_VAR 0 3
7099: IFFALSE 7125
// temp_list = ai_power_plants [ base ] ^ un else
7101: LD_ADDR_VAR 0 5
7105: PUSH
7106: LD_EXP 37
7110: PUSH
7111: LD_VAR 0 1
7115: ARRAY
7116: PUSH
7117: LD_VAR 0 2
7121: ADD
7122: ST_TO_ADDR
7123: GO 7147
// temp_list = ai_power_plants [ base ] diff un ;
7125: LD_ADDR_VAR 0 5
7129: PUSH
7130: LD_EXP 37
7134: PUSH
7135: LD_VAR 0 1
7139: ARRAY
7140: PUSH
7141: LD_VAR 0 2
7145: DIFF
7146: ST_TO_ADDR
// ai_power_plants = Replace ( ai_power_plants , base , temp_list ) ;
7147: LD_ADDR_EXP 37
7151: PUSH
7152: LD_EXP 37
7156: PPUSH
7157: LD_VAR 0 1
7161: PPUSH
7162: LD_VAR 0 5
7166: PPUSH
7167: CALL_OW 1
7171: ST_TO_ADDR
// end ; b_control_tower :
7172: GO 7260
7174: LD_INT 36
7176: DOUBLE
7177: EQUAL
7178: IFTRUE 7182
7180: GO 7259
7182: POP
// begin if add then
7183: LD_VAR 0 3
7187: IFFALSE 7216
// ai_control_tower = Replace ( ai_control_tower , base , un ) else
7189: LD_ADDR_EXP 57
7193: PUSH
7194: LD_EXP 57
7198: PPUSH
7199: LD_VAR 0 1
7203: PPUSH
7204: LD_VAR 0 2
7208: PPUSH
7209: CALL_OW 1
7213: ST_TO_ADDR
7214: GO 7257
// if un = ai_control_tower [ base ] then
7216: LD_VAR 0 2
7220: PUSH
7221: LD_EXP 57
7225: PUSH
7226: LD_VAR 0 1
7230: ARRAY
7231: EQUAL
7232: IFFALSE 7257
// ai_control_tower = Replace ( ai_control_tower , base , 0 ) ;
7234: LD_ADDR_EXP 57
7238: PUSH
7239: LD_EXP 57
7243: PPUSH
7244: LD_VAR 0 1
7248: PPUSH
7249: LD_INT 0
7251: PPUSH
7252: CALL_OW 1
7256: ST_TO_ADDR
// end ; end ;
7257: GO 7260
7259: POP
// end ;
7260: LD_VAR 0 4
7264: RET
// function SortBuildingLocationsListInCorrectOrder ( base ) ; var i , temp_list , p ; begin
7265: LD_INT 0
7267: PPUSH
7268: PPUSH
7269: PPUSH
7270: PPUSH
// temp_list = [ ] ;
7271: LD_ADDR_VAR 0 4
7275: PUSH
7276: EMPTY
7277: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
7278: LD_ADDR_VAR 0 3
7282: PUSH
7283: LD_EXP 38
7287: PUSH
7288: LD_VAR 0 1
7292: ARRAY
7293: PUSH
7294: FOR_IN
7295: IFFALSE 7668
// begin case i [ 4 ] of b_depot , b_warehouse :
7297: LD_VAR 0 3
7301: PUSH
7302: LD_INT 4
7304: ARRAY
7305: PUSH
7306: LD_INT 0
7308: DOUBLE
7309: EQUAL
7310: IFTRUE 7320
7312: LD_INT 1
7314: DOUBLE
7315: EQUAL
7316: IFTRUE 7320
7318: GO 7331
7320: POP
// p = 100 ; b_armoury , b_barracks , b_fort :
7321: LD_ADDR_VAR 0 5
7325: PUSH
7326: LD_INT 100
7328: ST_TO_ADDR
7329: GO 7650
7331: LD_INT 4
7333: DOUBLE
7334: EQUAL
7335: IFTRUE 7351
7337: LD_INT 5
7339: DOUBLE
7340: EQUAL
7341: IFTRUE 7351
7343: LD_INT 35
7345: DOUBLE
7346: EQUAL
7347: IFTRUE 7351
7349: GO 7362
7351: POP
// p = 99 ; b_solar_power , b_oil_power , b_siberite_power :
7352: LD_ADDR_VAR 0 5
7356: PUSH
7357: LD_INT 99
7359: ST_TO_ADDR
7360: GO 7650
7362: LD_INT 27
7364: DOUBLE
7365: EQUAL
7366: IFTRUE 7382
7368: LD_INT 26
7370: DOUBLE
7371: EQUAL
7372: IFTRUE 7382
7374: LD_INT 28
7376: DOUBLE
7377: EQUAL
7378: IFTRUE 7382
7380: GO 7393
7382: POP
// p = 98 ; b_breastwork :
7383: LD_ADDR_VAR 0 5
7387: PUSH
7388: LD_INT 98
7390: ST_TO_ADDR
7391: GO 7650
7393: LD_INT 31
7395: DOUBLE
7396: EQUAL
7397: IFTRUE 7401
7399: GO 7412
7401: POP
// p = 97 ; b_factory , b_workshop :
7402: LD_ADDR_VAR 0 5
7406: PUSH
7407: LD_INT 97
7409: ST_TO_ADDR
7410: GO 7650
7412: LD_INT 3
7414: DOUBLE
7415: EQUAL
7416: IFTRUE 7426
7418: LD_INT 2
7420: DOUBLE
7421: EQUAL
7422: IFTRUE 7426
7424: GO 7437
7426: 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 :
7427: LD_ADDR_VAR 0 5
7431: PUSH
7432: LD_INT 96
7434: ST_TO_ADDR
7435: GO 7650
7437: LD_INT 17
7439: DOUBLE
7440: EQUAL
7441: IFTRUE 7493
7443: LD_INT 19
7445: DOUBLE
7446: EQUAL
7447: IFTRUE 7493
7449: LD_INT 25
7451: DOUBLE
7452: EQUAL
7453: IFTRUE 7493
7455: LD_INT 24
7457: DOUBLE
7458: EQUAL
7459: IFTRUE 7493
7461: LD_INT 20
7463: DOUBLE
7464: EQUAL
7465: IFTRUE 7493
7467: LD_INT 18
7469: DOUBLE
7470: EQUAL
7471: IFTRUE 7493
7473: LD_INT 21
7475: DOUBLE
7476: EQUAL
7477: IFTRUE 7493
7479: LD_INT 16
7481: DOUBLE
7482: EQUAL
7483: IFTRUE 7493
7485: LD_INT 23
7487: DOUBLE
7488: EQUAL
7489: IFTRUE 7493
7491: GO 7504
7493: POP
// p = 95 ; b_bunker :
7494: LD_ADDR_VAR 0 5
7498: PUSH
7499: LD_INT 95
7501: ST_TO_ADDR
7502: GO 7650
7504: LD_INT 32
7506: DOUBLE
7507: EQUAL
7508: IFTRUE 7512
7510: GO 7523
7512: POP
// p = 94 ; b_control_tower :
7513: LD_ADDR_VAR 0 5
7517: PUSH
7518: LD_INT 94
7520: ST_TO_ADDR
7521: GO 7650
7523: LD_INT 36
7525: DOUBLE
7526: EQUAL
7527: IFTRUE 7531
7529: GO 7542
7531: POP
// p = 93 ; b_turret :
7532: LD_ADDR_VAR 0 5
7536: PUSH
7537: LD_INT 93
7539: ST_TO_ADDR
7540: GO 7650
7542: LD_INT 33
7544: DOUBLE
7545: EQUAL
7546: IFTRUE 7550
7548: GO 7561
7550: POP
// p = 92 ; b_lab , b_lab_half , b_lab_full :
7551: LD_ADDR_VAR 0 5
7555: PUSH
7556: LD_INT 92
7558: ST_TO_ADDR
7559: GO 7650
7561: LD_INT 6
7563: DOUBLE
7564: EQUAL
7565: IFTRUE 7581
7567: LD_INT 7
7569: DOUBLE
7570: EQUAL
7571: IFTRUE 7581
7573: LD_INT 8
7575: DOUBLE
7576: EQUAL
7577: IFTRUE 7581
7579: GO 7592
7581: POP
// p = 91 ; b_teleport :
7582: LD_ADDR_VAR 0 5
7586: PUSH
7587: LD_INT 91
7589: ST_TO_ADDR
7590: GO 7650
7592: LD_INT 34
7594: DOUBLE
7595: EQUAL
7596: IFTRUE 7600
7598: GO 7611
7600: POP
// p = 90 ; b_siberite_mine :
7601: LD_ADDR_VAR 0 5
7605: PUSH
7606: LD_INT 90
7608: ST_TO_ADDR
7609: GO 7650
7611: LD_INT 30
7613: DOUBLE
7614: EQUAL
7615: IFTRUE 7619
7617: GO 7630
7619: POP
// p = 89 ; b_oil_mine :
7620: LD_ADDR_VAR 0 5
7624: PUSH
7625: LD_INT 89
7627: ST_TO_ADDR
7628: GO 7650
7630: LD_INT 29
7632: DOUBLE
7633: EQUAL
7634: IFTRUE 7638
7636: GO 7649
7638: POP
// p = 88 ; end ;
7639: LD_ADDR_VAR 0 5
7643: PUSH
7644: LD_INT 88
7646: ST_TO_ADDR
7647: GO 7650
7649: POP
// temp_list = temp_list ^ p ;
7650: LD_ADDR_VAR 0 4
7654: PUSH
7655: LD_VAR 0 4
7659: PUSH
7660: LD_VAR 0 5
7664: ADD
7665: ST_TO_ADDR
// end ;
7666: GO 7294
7668: POP
7669: POP
// temp_list = SortListByListDesc ( ai_buildings_locations [ base ] , temp_list ) ;
7670: LD_ADDR_VAR 0 4
7674: PUSH
7675: LD_EXP 38
7679: PUSH
7680: LD_VAR 0 1
7684: ARRAY
7685: PPUSH
7686: LD_VAR 0 4
7690: PPUSH
7691: CALL_OW 77
7695: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
7696: LD_ADDR_EXP 38
7700: PUSH
7701: LD_EXP 38
7705: PPUSH
7706: LD_VAR 0 1
7710: PPUSH
7711: LD_VAR 0 4
7715: PPUSH
7716: CALL_OW 1
7720: ST_TO_ADDR
// end ;
7721: LD_VAR 0 2
7725: RET
// function PrepareComputerSides ; var i , temp_list , side , base , num ; begin
7726: LD_INT 0
7728: PPUSH
7729: PPUSH
7730: PPUSH
7731: PPUSH
7732: PPUSH
7733: PPUSH
// for base in ai_bases do
7734: LD_ADDR_VAR 0 5
7738: PUSH
7739: LD_EXP 59
7743: PUSH
7744: FOR_IN
7745: IFFALSE 8909
// begin case base of 1 :
7747: LD_VAR 0 5
7751: PUSH
7752: LD_INT 1
7754: DOUBLE
7755: EQUAL
7756: IFTRUE 7760
7758: GO 7773
7760: POP
// begin side = americans ;
7761: LD_ADDR_VAR 0 4
7765: PUSH
7766: LD_EXP 5
7770: ST_TO_ADDR
// end ; 2 :
7771: GO 7795
7773: LD_INT 2
7775: DOUBLE
7776: EQUAL
7777: IFTRUE 7781
7779: GO 7794
7781: POP
// begin side = americans ;
7782: LD_ADDR_VAR 0 4
7786: PUSH
7787: LD_EXP 5
7791: ST_TO_ADDR
// end ; end ;
7792: GO 7795
7794: POP
// InitUc ;
7795: CALL_OW 18
// InitHc ;
7799: CALL_OW 19
// uc_side = side ;
7803: LD_ADDR_OWVAR 20
7807: PUSH
7808: LD_VAR 0 4
7812: ST_TO_ADDR
// case side of americans :
7813: LD_VAR 0 4
7817: PUSH
7818: LD_EXP 5
7822: DOUBLE
7823: EQUAL
7824: IFTRUE 7828
7826: GO 7839
7828: POP
// uc_nation = nation_american ; end ;
7829: LD_ADDR_OWVAR 21
7833: PUSH
7834: LD_INT 1
7836: ST_TO_ADDR
7837: GO 7840
7839: POP
// case difficulty of 1 :
7840: LD_OWVAR 67
7844: PUSH
7845: LD_INT 1
7847: DOUBLE
7848: EQUAL
7849: IFTRUE 7853
7851: GO 7921
7853: POP
// begin num = ai_bunkers [ base ] + ai_armouries [ base ] ;
7854: LD_ADDR_VAR 0 6
7858: PUSH
7859: LD_EXP 50
7863: PUSH
7864: LD_VAR 0 5
7868: ARRAY
7869: PUSH
7870: LD_EXP 49
7874: PUSH
7875: LD_VAR 0 5
7879: ARRAY
7880: PLUS
7881: ST_TO_ADDR
// i = [ 3 , 4 , 5 ] [ difficulty ] * ai_armouries [ base ] ;
7882: LD_ADDR_VAR 0 2
7886: PUSH
7887: LD_INT 3
7889: PUSH
7890: LD_INT 4
7892: PUSH
7893: LD_INT 5
7895: PUSH
7896: EMPTY
7897: LIST
7898: LIST
7899: LIST
7900: PUSH
7901: LD_OWVAR 67
7905: ARRAY
7906: PUSH
7907: LD_EXP 49
7911: PUSH
7912: LD_VAR 0 5
7916: ARRAY
7917: MUL
7918: ST_TO_ADDR
// end ; 2 :
7919: GO 8134
7921: LD_INT 2
7923: DOUBLE
7924: EQUAL
7925: IFTRUE 7929
7927: GO 8053
7929: POP
// begin num = ( ai_bunkers [ base ] + ai_armouries [ base ] ) div 2 ;
7930: LD_ADDR_VAR 0 6
7934: PUSH
7935: LD_EXP 50
7939: PUSH
7940: LD_VAR 0 5
7944: ARRAY
7945: PUSH
7946: LD_EXP 49
7950: PUSH
7951: LD_VAR 0 5
7955: ARRAY
7956: PLUS
7957: PUSH
7958: LD_INT 2
7960: DIV
7961: ST_TO_ADDR
// i = [ 3 , 4 , 5 ] [ difficulty ] * ai_armouries [ base ] + ( ( ai_bunkers [ base ] + ai_armouries [ base ] ) - ( ai_bunkers [ base ] + ai_armouries [ base ] ) div 2 ) ;
7962: LD_ADDR_VAR 0 2
7966: PUSH
7967: LD_INT 3
7969: PUSH
7970: LD_INT 4
7972: PUSH
7973: LD_INT 5
7975: PUSH
7976: EMPTY
7977: LIST
7978: LIST
7979: LIST
7980: PUSH
7981: LD_OWVAR 67
7985: ARRAY
7986: PUSH
7987: LD_EXP 49
7991: PUSH
7992: LD_VAR 0 5
7996: ARRAY
7997: MUL
7998: PUSH
7999: LD_EXP 50
8003: PUSH
8004: LD_VAR 0 5
8008: ARRAY
8009: PUSH
8010: LD_EXP 49
8014: PUSH
8015: LD_VAR 0 5
8019: ARRAY
8020: PLUS
8021: PUSH
8022: LD_EXP 50
8026: PUSH
8027: LD_VAR 0 5
8031: ARRAY
8032: PUSH
8033: LD_EXP 49
8037: PUSH
8038: LD_VAR 0 5
8042: ARRAY
8043: PLUS
8044: PUSH
8045: LD_INT 2
8047: DIV
8048: MINUS
8049: PLUS
8050: ST_TO_ADDR
// end ; 3 :
8051: GO 8134
8053: LD_INT 3
8055: DOUBLE
8056: EQUAL
8057: IFTRUE 8061
8059: GO 8133
8061: POP
// begin num = 0 ;
8062: LD_ADDR_VAR 0 6
8066: PUSH
8067: LD_INT 0
8069: ST_TO_ADDR
// i = [ 3 , 4 , 5 ] [ difficulty ] * ai_armouries [ base ] + ( ai_bunkers [ base ] + ai_armouries [ base ] ) ;
8070: LD_ADDR_VAR 0 2
8074: PUSH
8075: LD_INT 3
8077: PUSH
8078: LD_INT 4
8080: PUSH
8081: LD_INT 5
8083: PUSH
8084: EMPTY
8085: LIST
8086: LIST
8087: LIST
8088: PUSH
8089: LD_OWVAR 67
8093: ARRAY
8094: PUSH
8095: LD_EXP 49
8099: PUSH
8100: LD_VAR 0 5
8104: ARRAY
8105: MUL
8106: PUSH
8107: LD_EXP 50
8111: PUSH
8112: LD_VAR 0 5
8116: ARRAY
8117: PUSH
8118: LD_EXP 49
8122: PUSH
8123: LD_VAR 0 5
8127: ARRAY
8128: PLUS
8129: PLUS
8130: ST_TO_ADDR
// end ; end ;
8131: GO 8134
8133: POP
// temp_list = CreateUnitsWithClass ( num , class_soldier , side ) ;
8134: LD_ADDR_VAR 0 3
8138: PUSH
8139: LD_VAR 0 6
8143: PPUSH
8144: LD_INT 1
8146: PPUSH
8147: LD_VAR 0 4
8151: PPUSH
8152: CALL 9322 0 3
8156: ST_TO_ADDR
// temp_list = temp_list ^ CreateUnitsWithClass ( i , class_sniper , side ) ;
8157: LD_ADDR_VAR 0 3
8161: PUSH
8162: LD_VAR 0 3
8166: PUSH
8167: LD_VAR 0 2
8171: PPUSH
8172: LD_INT 5
8174: PPUSH
8175: LD_VAR 0 4
8179: PPUSH
8180: CALL 9322 0 3
8184: ADD
8185: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
8186: LD_ADDR_EXP 29
8190: PUSH
8191: LD_EXP 29
8195: PPUSH
8196: LD_VAR 0 5
8200: PPUSH
8201: LD_VAR 0 3
8205: PPUSH
8206: CALL_OW 1
8210: ST_TO_ADDR
// if base = 1 then
8211: LD_VAR 0 5
8215: PUSH
8216: LD_INT 1
8218: EQUAL
8219: IFFALSE 8276
// ai_engineers = Replace ( ai_engineers , base , CreateUnitsWithClass ( [ 2 , 3 , 4 ] [ difficulty ] , class_engineer , side ) ) else
8221: LD_ADDR_EXP 30
8225: PUSH
8226: LD_EXP 30
8230: PPUSH
8231: LD_VAR 0 5
8235: PPUSH
8236: LD_INT 2
8238: PUSH
8239: LD_INT 3
8241: PUSH
8242: LD_INT 4
8244: PUSH
8245: EMPTY
8246: LIST
8247: LIST
8248: LIST
8249: PUSH
8250: LD_OWVAR 67
8254: ARRAY
8255: PPUSH
8256: LD_INT 2
8258: PPUSH
8259: LD_VAR 0 4
8263: PPUSH
8264: CALL 9322 0 3
8268: PPUSH
8269: CALL_OW 1
8273: ST_TO_ADDR
8274: GO 8329
// ai_engineers = Replace ( ai_engineers , base , CreateUnitsWithClass ( [ 1 , 1 , 2 ] [ difficulty ] , class_engineer , side ) ) ;
8276: LD_ADDR_EXP 30
8280: PUSH
8281: LD_EXP 30
8285: PPUSH
8286: LD_VAR 0 5
8290: PPUSH
8291: LD_INT 1
8293: PUSH
8294: LD_INT 1
8296: PUSH
8297: LD_INT 2
8299: PUSH
8300: EMPTY
8301: LIST
8302: LIST
8303: LIST
8304: PUSH
8305: LD_OWVAR 67
8309: ARRAY
8310: PPUSH
8311: LD_INT 2
8313: PPUSH
8314: LD_VAR 0 4
8318: PPUSH
8319: CALL 9322 0 3
8323: PPUSH
8324: CALL_OW 1
8328: ST_TO_ADDR
// temp_list = [ ] ;
8329: LD_ADDR_VAR 0 3
8333: PUSH
8334: EMPTY
8335: ST_TO_ADDR
// for i in ai_engineers [ base ] do
8336: LD_ADDR_VAR 0 2
8340: PUSH
8341: LD_EXP 30
8345: PUSH
8346: LD_VAR 0 5
8350: ARRAY
8351: PUSH
8352: FOR_IN
8353: IFFALSE 8381
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
8355: LD_ADDR_VAR 0 3
8359: PUSH
8360: LD_VAR 0 3
8364: PUSH
8365: LD_VAR 0 2
8369: PPUSH
8370: LD_INT 2
8372: PPUSH
8373: CALL_OW 259
8377: ADD
8378: ST_TO_ADDR
8379: GO 8352
8381: POP
8382: POP
// num = BestFromListByList ( temp_list , temp_list ) ;
8383: LD_ADDR_VAR 0 6
8387: PUSH
8388: LD_VAR 0 3
8392: PPUSH
8393: LD_VAR 0 3
8397: PPUSH
8398: CALL_OW 79
8402: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
8403: LD_ADDR_VAR 0 2
8407: PUSH
8408: LD_EXP 45
8412: PUSH
8413: LD_VAR 0 5
8417: ARRAY
8418: PUSH
8419: FOR_IN
8420: IFFALSE 8438
// SetBLevel ( i , num ) ;
8422: LD_VAR 0 2
8426: PPUSH
8427: LD_VAR 0 6
8431: PPUSH
8432: CALL_OW 241
8436: GO 8419
8438: POP
8439: POP
// if base = 1 then
8440: LD_VAR 0 5
8444: PUSH
8445: LD_INT 1
8447: EQUAL
8448: IFFALSE 8488
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , CreateApemenWithClass ( 3 , class_apeman_engineer , side ) ) else
8450: LD_ADDR_EXP 63
8454: PUSH
8455: LD_EXP 63
8459: PPUSH
8460: LD_VAR 0 5
8464: PPUSH
8465: LD_INT 3
8467: PPUSH
8468: LD_INT 16
8470: PPUSH
8471: LD_VAR 0 4
8475: PPUSH
8476: CALL 9526 0 3
8480: PPUSH
8481: CALL_OW 1
8485: ST_TO_ADDR
8486: GO 8541
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , CreateApemenWithClass ( [ 0 , 1 , 2 ] [ difficulty ] , class_apeman_engineer , side ) ) ;
8488: LD_ADDR_EXP 63
8492: PUSH
8493: LD_EXP 63
8497: PPUSH
8498: LD_VAR 0 5
8502: PPUSH
8503: LD_INT 0
8505: PUSH
8506: LD_INT 1
8508: PUSH
8509: LD_INT 2
8511: PUSH
8512: EMPTY
8513: LIST
8514: LIST
8515: LIST
8516: PUSH
8517: LD_OWVAR 67
8521: ARRAY
8522: PPUSH
8523: LD_INT 16
8525: PPUSH
8526: LD_VAR 0 4
8530: PPUSH
8531: CALL 9526 0 3
8535: PPUSH
8536: CALL_OW 1
8540: ST_TO_ADDR
// if base = 1 then
8541: LD_VAR 0 5
8545: PUSH
8546: LD_INT 1
8548: EQUAL
8549: IFFALSE 8628
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , CreateUnitsWithClass ( [ 4 + Rand ( 0 , 1 ) , 5 + Rand ( 0 , 1 ) , 6 ] [ difficulty ] , class_mechanic , side ) ) ;
8551: LD_ADDR_EXP 31
8555: PUSH
8556: LD_EXP 31
8560: PPUSH
8561: LD_VAR 0 5
8565: PPUSH
8566: LD_INT 4
8568: PUSH
8569: LD_INT 0
8571: PPUSH
8572: LD_INT 1
8574: PPUSH
8575: CALL_OW 12
8579: PLUS
8580: PUSH
8581: LD_INT 5
8583: PUSH
8584: LD_INT 0
8586: PPUSH
8587: LD_INT 1
8589: PPUSH
8590: CALL_OW 12
8594: PLUS
8595: PUSH
8596: LD_INT 6
8598: PUSH
8599: EMPTY
8600: LIST
8601: LIST
8602: LIST
8603: PUSH
8604: LD_OWVAR 67
8608: ARRAY
8609: PPUSH
8610: LD_INT 3
8612: PPUSH
8613: LD_VAR 0 4
8617: PPUSH
8618: CALL 9322 0 3
8622: PPUSH
8623: CALL_OW 1
8627: ST_TO_ADDR
// if base = 1 then
8628: LD_VAR 0 5
8632: PUSH
8633: LD_INT 1
8635: EQUAL
8636: IFFALSE 8713
// begin num = [ 4 , 6 , 8 ] [ difficulty ] + Rand ( 0 , 1 ) ;
8638: LD_ADDR_VAR 0 6
8642: PUSH
8643: LD_INT 4
8645: PUSH
8646: LD_INT 6
8648: PUSH
8649: LD_INT 8
8651: PUSH
8652: EMPTY
8653: LIST
8654: LIST
8655: LIST
8656: PUSH
8657: LD_OWVAR 67
8661: ARRAY
8662: PUSH
8663: LD_INT 0
8665: PPUSH
8666: LD_INT 1
8668: PPUSH
8669: CALL_OW 12
8673: PLUS
8674: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , CreateUnitsWithClass ( num , class_scientistic , side ) ) ;
8675: LD_ADDR_EXP 32
8679: PUSH
8680: LD_EXP 32
8684: PPUSH
8685: LD_VAR 0 5
8689: PPUSH
8690: LD_VAR 0 6
8694: PPUSH
8695: LD_INT 4
8697: PPUSH
8698: LD_VAR 0 4
8702: PPUSH
8703: CALL 9322 0 3
8707: PPUSH
8708: CALL_OW 1
8712: ST_TO_ADDR
// end ; SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_cans , 300 ) ;
8713: LD_EXP 34
8717: PUSH
8718: LD_VAR 0 5
8722: ARRAY
8723: PPUSH
8724: CALL_OW 274
8728: PPUSH
8729: LD_INT 1
8731: PPUSH
8732: LD_INT 300
8734: PPUSH
8735: CALL_OW 277
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_oil , 300 ) ;
8739: LD_EXP 34
8743: PUSH
8744: LD_VAR 0 5
8748: ARRAY
8749: PPUSH
8750: CALL_OW 274
8754: PPUSH
8755: LD_INT 2
8757: PPUSH
8758: LD_INT 300
8760: PPUSH
8761: CALL_OW 277
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_siberit , 300 ) ;
8765: LD_EXP 34
8769: PUSH
8770: LD_VAR 0 5
8774: ARRAY
8775: PPUSH
8776: CALL_OW 274
8780: PPUSH
8781: LD_INT 3
8783: PPUSH
8784: LD_INT 300
8786: PPUSH
8787: CALL_OW 277
// for i in ai_soldiers [ base ] ^ ai_engineers [ base ] ^ ai_mechanics_defend [ base ] ^ ai_scientists [ base ] ^ ai_apemen_engineers [ base ] do
8791: LD_ADDR_VAR 0 2
8795: PUSH
8796: LD_EXP 29
8800: PUSH
8801: LD_VAR 0 5
8805: ARRAY
8806: PUSH
8807: LD_EXP 30
8811: PUSH
8812: LD_VAR 0 5
8816: ARRAY
8817: ADD
8818: PUSH
8819: LD_EXP 31
8823: PUSH
8824: LD_VAR 0 5
8828: ARRAY
8829: ADD
8830: PUSH
8831: LD_EXP 32
8835: PUSH
8836: LD_VAR 0 5
8840: ARRAY
8841: ADD
8842: PUSH
8843: LD_EXP 63
8847: PUSH
8848: LD_VAR 0 5
8852: ARRAY
8853: ADD
8854: PUSH
8855: FOR_IN
8856: IFFALSE 8905
// PlaceUnitXYR ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] , 7 , false ) ;
8858: LD_VAR 0 2
8862: PPUSH
8863: LD_EXP 41
8867: PUSH
8868: LD_VAR 0 5
8872: ARRAY
8873: PUSH
8874: LD_INT 1
8876: ARRAY
8877: PPUSH
8878: LD_EXP 41
8882: PUSH
8883: LD_VAR 0 5
8887: ARRAY
8888: PUSH
8889: LD_INT 2
8891: ARRAY
8892: PPUSH
8893: LD_INT 7
8895: PPUSH
8896: LD_INT 0
8898: PPUSH
8899: CALL_OW 50
8903: GO 8855
8905: POP
8906: POP
// end ;
8907: GO 7744
8909: POP
8910: POP
// ai_sib_bomb_mechanics = Replace ( ai_sib_bomb_mechanics , 1 , CreateUnitsWithClass ( 3 , class_mechanic , americans ) ) ;
8911: LD_ADDR_EXP 90
8915: PUSH
8916: LD_EXP 90
8920: PPUSH
8921: LD_INT 1
8923: PPUSH
8924: LD_INT 3
8926: PPUSH
8927: LD_INT 3
8929: PPUSH
8930: LD_EXP 5
8934: PPUSH
8935: CALL 9322 0 3
8939: PPUSH
8940: CALL_OW 1
8944: ST_TO_ADDR
// for i in ai_sib_bomb_mechanics [ 1 ] do
8945: LD_ADDR_VAR 0 2
8949: PUSH
8950: LD_EXP 90
8954: PUSH
8955: LD_INT 1
8957: ARRAY
8958: PUSH
8959: FOR_IN
8960: IFFALSE 9020
// begin SetSkill ( i , skill_mechanical , 10 ) ;
8962: LD_VAR 0 2
8966: PPUSH
8967: LD_INT 3
8969: PPUSH
8970: LD_INT 10
8972: PPUSH
8973: CALL_OW 237
// PlaceUnitXYR ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] , 7 , false ) ;
8977: LD_VAR 0 2
8981: PPUSH
8982: LD_EXP 41
8986: PUSH
8987: LD_INT 1
8989: ARRAY
8990: PUSH
8991: LD_INT 1
8993: ARRAY
8994: PPUSH
8995: LD_EXP 41
8999: PUSH
9000: LD_INT 1
9002: ARRAY
9003: PUSH
9004: LD_INT 2
9006: ARRAY
9007: PPUSH
9008: LD_INT 7
9010: PPUSH
9011: LD_INT 0
9013: PPUSH
9014: CALL_OW 50
// end ;
9018: GO 8959
9020: POP
9021: POP
// Powell = NewCharacter ( Powell ) ;
9022: LD_ADDR_EXP 27
9026: PUSH
9027: LD_STRING Powell
9029: PPUSH
9030: CALL_OW 25
9034: ST_TO_ADDR
// Hugh = NewCharacter ( Stevens ) ;
9035: LD_ADDR_EXP 28
9039: PUSH
9040: LD_STRING Stevens
9042: PPUSH
9043: CALL_OW 25
9047: ST_TO_ADDR
// temp_list = ai_scientists [ 1 ] ^ Hugh ;
9048: LD_ADDR_VAR 0 3
9052: PUSH
9053: LD_EXP 32
9057: PUSH
9058: LD_INT 1
9060: ARRAY
9061: PUSH
9062: LD_EXP 28
9066: ADD
9067: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , 1 , temp_list ) ;
9068: LD_ADDR_EXP 32
9072: PUSH
9073: LD_EXP 32
9077: PPUSH
9078: LD_INT 1
9080: PPUSH
9081: LD_VAR 0 3
9085: PPUSH
9086: CALL_OW 1
9090: ST_TO_ADDR
// PlaceUnitXYR ( Hugh , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] , 7 , false ) ;
9091: LD_EXP 28
9095: PPUSH
9096: LD_EXP 41
9100: PUSH
9101: LD_INT 1
9103: ARRAY
9104: PUSH
9105: LD_INT 1
9107: ARRAY
9108: PPUSH
9109: LD_EXP 41
9113: PUSH
9114: LD_INT 1
9116: ARRAY
9117: PUSH
9118: LD_INT 2
9120: ARRAY
9121: PPUSH
9122: LD_INT 7
9124: PPUSH
9125: LD_INT 0
9127: PPUSH
9128: CALL_OW 50
// SetTech ( tech_tech1 , americans , state_researched ) ;
9132: LD_INT 48
9134: PPUSH
9135: LD_EXP 5
9139: PPUSH
9140: LD_INT 2
9142: PPUSH
9143: CALL_OW 322
// SetTech ( tech_tech2 , americans , state_researched ) ;
9147: LD_INT 49
9149: PPUSH
9150: LD_EXP 5
9154: PPUSH
9155: LD_INT 2
9157: PPUSH
9158: CALL_OW 322
// SetTech ( tech_weap1 , americans , state_researched ) ;
9162: LD_INT 51
9164: PPUSH
9165: LD_EXP 5
9169: PPUSH
9170: LD_INT 2
9172: PPUSH
9173: CALL_OW 322
// SetTech ( tech_sib1 , americans , state_researched ) ;
9177: LD_INT 54
9179: PPUSH
9180: LD_EXP 5
9184: PPUSH
9185: LD_INT 2
9187: PPUSH
9188: CALL_OW 322
// SetTech ( tech_comp1 , americans , state_researched ) ;
9192: LD_INT 57
9194: PPUSH
9195: LD_EXP 5
9199: PPUSH
9200: LD_INT 2
9202: PPUSH
9203: CALL_OW 322
// if difficulty >= 2 then
9207: LD_OWVAR 67
9211: PUSH
9212: LD_INT 2
9214: GREATEREQUAL
9215: IFFALSE 9277
// begin SetTech ( tech_tech3 , americans , state_researched ) ;
9217: LD_INT 50
9219: PPUSH
9220: LD_EXP 5
9224: PPUSH
9225: LD_INT 2
9227: PPUSH
9228: CALL_OW 322
// SetTech ( tech_weap2 , americans , state_researched ) ;
9232: LD_INT 52
9234: PPUSH
9235: LD_EXP 5
9239: PPUSH
9240: LD_INT 2
9242: PPUSH
9243: CALL_OW 322
// SetTech ( tech_sib2 , americans , state_researched ) ;
9247: LD_INT 55
9249: PPUSH
9250: LD_EXP 5
9254: PPUSH
9255: LD_INT 2
9257: PPUSH
9258: CALL_OW 322
// SetTech ( tech_comp2 , americans , state_researched ) ;
9262: LD_INT 58
9264: PPUSH
9265: LD_EXP 5
9269: PPUSH
9270: LD_INT 2
9272: PPUSH
9273: CALL_OW 322
// end ; if difficulty = 3 then
9277: LD_OWVAR 67
9281: PUSH
9282: LD_INT 3
9284: EQUAL
9285: IFFALSE 9317
// begin SetTech ( tech_weap3 , americans , state_researched ) ;
9287: LD_INT 53
9289: PPUSH
9290: LD_EXP 5
9294: PPUSH
9295: LD_INT 2
9297: PPUSH
9298: CALL_OW 322
// SetTech ( tech_comp3 , americans , state_researched ) ;
9302: LD_INT 59
9304: PPUSH
9305: LD_EXP 5
9309: PPUSH
9310: LD_INT 2
9312: PPUSH
9313: CALL_OW 322
// end ; end ;
9317: LD_VAR 0 1
9321: RET
// export function CreateUnitsWithClass ( num_units , un_class , side ) ; var i , overskill ; begin
9322: LD_INT 0
9324: PPUSH
9325: PPUSH
9326: PPUSH
// result = [ ] ;
9327: LD_ADDR_VAR 0 4
9331: PUSH
9332: EMPTY
9333: ST_TO_ADDR
// InitUc ;
9334: CALL_OW 18
// InitHc ;
9338: CALL_OW 19
// case side of americans :
9342: LD_VAR 0 3
9346: PUSH
9347: LD_EXP 5
9351: DOUBLE
9352: EQUAL
9353: IFTRUE 9357
9355: GO 9368
9357: POP
// begin uc_nation = nation_american ;
9358: LD_ADDR_OWVAR 21
9362: PUSH
9363: LD_INT 1
9365: ST_TO_ADDR
// end ; upf , you_alt , you :
9366: GO 9406
9368: LD_EXP 6
9372: DOUBLE
9373: EQUAL
9374: IFTRUE 9394
9376: LD_EXP 4
9380: DOUBLE
9381: EQUAL
9382: IFTRUE 9394
9384: LD_EXP 2
9388: DOUBLE
9389: EQUAL
9390: IFTRUE 9394
9392: GO 9405
9394: POP
// begin uc_nation = nation_arabian ;
9395: LD_ADDR_OWVAR 21
9399: PUSH
9400: LD_INT 2
9402: ST_TO_ADDR
// end ; end ;
9403: GO 9406
9405: POP
// uc_side = side ;
9406: LD_ADDR_OWVAR 20
9410: PUSH
9411: LD_VAR 0 3
9415: ST_TO_ADDR
// overskill = difficulty + 6 ;
9416: LD_ADDR_VAR 0 6
9420: PUSH
9421: LD_OWVAR 67
9425: PUSH
9426: LD_INT 6
9428: PLUS
9429: ST_TO_ADDR
// for i = 1 to num_units do
9430: LD_ADDR_VAR 0 5
9434: PUSH
9435: DOUBLE
9436: LD_INT 1
9438: DEC
9439: ST_TO_ADDR
9440: LD_VAR 0 1
9444: PUSH
9445: FOR_TO
9446: IFFALSE 9519
// begin if Rand ( 1 , 3 ) = 1 then
9448: LD_INT 1
9450: PPUSH
9451: LD_INT 3
9453: PPUSH
9454: CALL_OW 12
9458: PUSH
9459: LD_INT 1
9461: EQUAL
9462: IFFALSE 9484
// PrepareHuman ( false , un_class , - overskill ) else
9464: LD_INT 0
9466: PPUSH
9467: LD_VAR 0 2
9471: PPUSH
9472: LD_VAR 0 6
9476: NEG
9477: PPUSH
9478: CALL_OW 380
9482: GO 9501
// PrepareHuman ( false , un_class , overskill ) ;
9484: LD_INT 0
9486: PPUSH
9487: LD_VAR 0 2
9491: PPUSH
9492: LD_VAR 0 6
9496: PPUSH
9497: CALL_OW 380
// result = result ^ CreateHuman ;
9501: LD_ADDR_VAR 0 4
9505: PUSH
9506: LD_VAR 0 4
9510: PUSH
9511: CALL_OW 44
9515: ADD
9516: ST_TO_ADDR
// end ;
9517: GO 9445
9519: POP
9520: POP
// end ;
9521: LD_VAR 0 4
9525: RET
// export function CreateApemenWithClass ( num_units , un_class , side ) ; var i ; begin
9526: LD_INT 0
9528: PPUSH
9529: PPUSH
// result = [ ] ;
9530: LD_ADDR_VAR 0 4
9534: PUSH
9535: EMPTY
9536: ST_TO_ADDR
// InitUc ;
9537: CALL_OW 18
// InitHc ;
9541: CALL_OW 19
// uc_side = side ;
9545: LD_ADDR_OWVAR 20
9549: PUSH
9550: LD_VAR 0 3
9554: ST_TO_ADDR
// uc_nation = nation_nature ;
9555: LD_ADDR_OWVAR 21
9559: PUSH
9560: LD_INT 0
9562: ST_TO_ADDR
// hc_class = un_class ;
9563: LD_ADDR_OWVAR 28
9567: PUSH
9568: LD_VAR 0 2
9572: ST_TO_ADDR
// for i = 1 to num_units do
9573: LD_ADDR_VAR 0 5
9577: PUSH
9578: DOUBLE
9579: LD_INT 1
9581: DEC
9582: ST_TO_ADDR
9583: LD_VAR 0 1
9587: PUSH
9588: FOR_TO
9589: IFFALSE 9695
// begin hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
9591: LD_ADDR_OWVAR 29
9595: PUSH
9596: LD_INT 11
9598: PPUSH
9599: LD_INT 13
9601: PPUSH
9602: CALL_OW 12
9606: PUSH
9607: LD_INT 10
9609: PPUSH
9610: LD_INT 11
9612: PPUSH
9613: CALL_OW 12
9617: PUSH
9618: EMPTY
9619: LIST
9620: LIST
9621: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
9622: LD_ADDR_OWVAR 27
9626: PUSH
9627: LD_INT 1
9629: PPUSH
9630: LD_INT 2
9632: PPUSH
9633: CALL_OW 12
9637: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 2 ) , Rand ( 0 , 2 ) , 0 , 0 ] ;
9638: LD_ADDR_OWVAR 31
9642: PUSH
9643: LD_INT 0
9645: PPUSH
9646: LD_INT 2
9648: PPUSH
9649: CALL_OW 12
9653: PUSH
9654: LD_INT 0
9656: PPUSH
9657: LD_INT 2
9659: PPUSH
9660: CALL_OW 12
9664: PUSH
9665: LD_INT 0
9667: PUSH
9668: LD_INT 0
9670: PUSH
9671: EMPTY
9672: LIST
9673: LIST
9674: LIST
9675: LIST
9676: ST_TO_ADDR
// result = result ^ CreateHuman ;
9677: LD_ADDR_VAR 0 4
9681: PUSH
9682: LD_VAR 0 4
9686: PUSH
9687: CALL_OW 44
9691: ADD
9692: ST_TO_ADDR
// end ;
9693: GO 9588
9695: POP
9696: POP
// end ;
9697: LD_VAR 0 4
9701: RET
// function Action ; var helper , i ; begin
9702: LD_INT 0
9704: PPUSH
9705: PPUSH
9706: PPUSH
// InGameOn ;
9707: CALL_OW 8
// wait ( 2 ) ;
9711: LD_INT 2
9713: PPUSH
9714: CALL_OW 67
// CenterNowOnXY ( 2 , 2 ) ;
9718: LD_INT 2
9720: PPUSH
9721: LD_INT 2
9723: PPUSH
9724: CALL_OW 86
// PlaceUnitXY ( Heinz , 153 , 93 , false ) ;
9728: LD_EXP 22
9732: PPUSH
9733: LD_INT 153
9735: PPUSH
9736: LD_INT 93
9738: PPUSH
9739: LD_INT 0
9741: PPUSH
9742: CALL_OW 48
// InitHc ;
9746: CALL_OW 19
// InitUc ;
9750: CALL_OW 18
// uc_side = you_alt ;
9754: LD_ADDR_OWVAR 20
9758: PUSH
9759: LD_EXP 4
9763: ST_TO_ADDR
// uc_nation = nation_arabian ;
9764: LD_ADDR_OWVAR 21
9768: PUSH
9769: LD_INT 2
9771: ST_TO_ADDR
// PrepareSoldier ( false , 8 ) ;
9772: LD_INT 0
9774: PPUSH
9775: LD_INT 8
9777: PPUSH
9778: CALL_OW 381
// helper = CreateHuman ;
9782: LD_ADDR_VAR 0 2
9786: PUSH
9787: CALL_OW 44
9791: ST_TO_ADDR
// PlaceUnitXY ( helper , 153 , 95 , false ) ;
9792: LD_VAR 0 2
9796: PPUSH
9797: LD_INT 153
9799: PPUSH
9800: LD_INT 95
9802: PPUSH
9803: LD_INT 0
9805: PPUSH
9806: CALL_OW 48
// ComMoveXY ( [ Heinz , helper ] , GetX ( Heike ) , GetY ( Heike ) ) ;
9810: LD_EXP 22
9814: PUSH
9815: LD_VAR 0 2
9819: PUSH
9820: EMPTY
9821: LIST
9822: LIST
9823: PPUSH
9824: LD_EXP 7
9828: PPUSH
9829: CALL_OW 250
9833: PPUSH
9834: LD_EXP 7
9838: PPUSH
9839: CALL_OW 251
9843: PPUSH
9844: CALL_OW 111
// ComTurnUnit ( FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) , Heinz ) ;
9848: LD_INT 22
9850: PUSH
9851: LD_EXP 2
9855: PUSH
9856: EMPTY
9857: LIST
9858: LIST
9859: PUSH
9860: LD_INT 21
9862: PUSH
9863: LD_INT 1
9865: PUSH
9866: EMPTY
9867: LIST
9868: LIST
9869: PUSH
9870: EMPTY
9871: LIST
9872: LIST
9873: PPUSH
9874: CALL_OW 69
9878: PPUSH
9879: LD_EXP 22
9883: PPUSH
9884: CALL_OW 119
// wait ( 0 0$0.5 ) ;
9888: LD_INT 18
9890: PPUSH
9891: CALL_OW 67
// CenterNowOnUnits ( Heike ) ;
9895: LD_EXP 7
9899: PPUSH
9900: CALL_OW 87
// i = 0 ;
9904: LD_ADDR_VAR 0 3
9908: PUSH
9909: LD_INT 0
9911: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
9912: LD_INT 18
9914: PPUSH
9915: CALL_OW 67
// i = i + 1 ;
9919: LD_ADDR_VAR 0 3
9923: PUSH
9924: LD_VAR 0 3
9928: PUSH
9929: LD_INT 1
9931: PLUS
9932: ST_TO_ADDR
// until GetDistUnits ( Heike , Heinz ) <= 3 or i > 20 ;
9933: LD_EXP 7
9937: PPUSH
9938: LD_EXP 22
9942: PPUSH
9943: CALL_OW 296
9947: PUSH
9948: LD_INT 3
9950: LESSEQUAL
9951: PUSH
9952: LD_VAR 0 3
9956: PUSH
9957: LD_INT 20
9959: GREATER
9960: OR
9961: IFFALSE 9912
// Say ( Heinz , D2-He-1 ) ;
9963: LD_EXP 22
9967: PPUSH
9968: LD_STRING D2-He-1
9970: PPUSH
9971: CALL_OW 88
// Say ( Heike , D2-H-1 ) ;
9975: LD_EXP 7
9979: PPUSH
9980: LD_STRING D2-H-1
9982: PPUSH
9983: CALL_OW 88
// Say ( Heinz , D2-He-2 ) ;
9987: LD_EXP 22
9991: PPUSH
9992: LD_STRING D2-He-2
9994: PPUSH
9995: CALL_OW 88
// Say ( Heike , D2-H-2 ) ;
9999: LD_EXP 7
10003: PPUSH
10004: LD_STRING D2-H-2
10006: PPUSH
10007: CALL_OW 88
// Say ( Heinz , D2-He-3 ) ;
10011: LD_EXP 22
10015: PPUSH
10016: LD_STRING D2-He-3
10018: PPUSH
10019: CALL_OW 88
// Say ( Heike , D2-H-3 ) ;
10023: LD_EXP 7
10027: PPUSH
10028: LD_STRING D2-H-3
10030: PPUSH
10031: CALL_OW 88
// Say ( Heinz , D2-He-4 ) ;
10035: LD_EXP 22
10039: PPUSH
10040: LD_STRING D2-He-4
10042: PPUSH
10043: CALL_OW 88
// Say ( Heike , D2-H-4 ) ;
10047: LD_EXP 7
10051: PPUSH
10052: LD_STRING D2-H-4
10054: PPUSH
10055: CALL_OW 88
// Say ( Heike , D2-H-5 ) ;
10059: LD_EXP 7
10063: PPUSH
10064: LD_STRING D2-H-5
10066: PPUSH
10067: CALL_OW 88
// Say ( Heinz , D2-He-5 ) ;
10071: LD_EXP 22
10075: PPUSH
10076: LD_STRING D2-He-5
10078: PPUSH
10079: CALL_OW 88
// wait ( 0 0$0.2 ) ;
10083: LD_INT 7
10085: PPUSH
10086: CALL_OW 67
// InGameOff ;
10090: CALL_OW 9
// ComFree ( FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) ) ;
10094: LD_INT 22
10096: PUSH
10097: LD_EXP 2
10101: PUSH
10102: EMPTY
10103: LIST
10104: LIST
10105: PUSH
10106: LD_INT 21
10108: PUSH
10109: LD_INT 1
10111: PUSH
10112: EMPTY
10113: LIST
10114: LIST
10115: PUSH
10116: EMPTY
10117: LIST
10118: LIST
10119: PPUSH
10120: CALL_OW 69
10124: PPUSH
10125: CALL_OW 139
// wait ( 0 0$0.2 ) ;
10129: LD_INT 7
10131: PPUSH
10132: CALL_OW 67
// ChangeMissionObjectives ( M1 ) ;
10136: LD_STRING M1
10138: PPUSH
10139: CALL_OW 337
// wait ( 0 0$0.2 ) ;
10143: LD_INT 7
10145: PPUSH
10146: CALL_OW 67
// SaveForQuickRestart ;
10150: CALL_OW 22
// repeat ComMoveXY ( [ Heinz , helper ] , 158 , 118 ) ;
10154: LD_EXP 22
10158: PUSH
10159: LD_VAR 0 2
10163: PUSH
10164: EMPTY
10165: LIST
10166: LIST
10167: PPUSH
10168: LD_INT 158
10170: PPUSH
10171: LD_INT 118
10173: PPUSH
10174: CALL_OW 111
// wait ( 0 0$0.5 ) ;
10178: LD_INT 18
10180: PPUSH
10181: CALL_OW 67
// for i in [ Heinz , helper ] do
10185: LD_ADDR_VAR 0 3
10189: PUSH
10190: LD_EXP 22
10194: PUSH
10195: LD_VAR 0 2
10199: PUSH
10200: EMPTY
10201: LIST
10202: LIST
10203: PUSH
10204: FOR_IN
10205: IFFALSE 10262
// if GetDistUnitXY ( i , 158 , 118 ) <= 2 then
10207: LD_VAR 0 3
10211: PPUSH
10212: LD_INT 158
10214: PPUSH
10215: LD_INT 118
10217: PPUSH
10218: CALL_OW 297
10222: PUSH
10223: LD_INT 2
10225: LESSEQUAL
10226: IFFALSE 10260
// begin if i = Heinz then
10228: LD_VAR 0 3
10232: PUSH
10233: LD_EXP 22
10237: EQUAL
10238: IFFALSE 10251
// RemoveUnit ( i ) else
10240: LD_VAR 0 3
10244: PPUSH
10245: CALL_OW 64
10249: GO 10260
// DestroyUnit ( i ) ;
10251: LD_VAR 0 3
10255: PPUSH
10256: CALL_OW 65
// end ;
10260: GO 10204
10262: POP
10263: POP
// until UnitFilter ( [ Heinz , helper ] , [ f_placed ] ) = 0 ;
10264: LD_EXP 22
10268: PUSH
10269: LD_VAR 0 2
10273: PUSH
10274: EMPTY
10275: LIST
10276: LIST
10277: PPUSH
10278: LD_INT 52
10280: PUSH
10281: EMPTY
10282: LIST
10283: PPUSH
10284: CALL_OW 72
10288: PUSH
10289: LD_INT 0
10291: EQUAL
10292: IFFALSE 10154
// end ; end_of_file
10294: LD_VAR 0 1
10298: RET
// every 0 0$1 + 0 0$0.4 do
10299: GO 10301
10301: DISABLE
// begin repeat wait ( Rand ( 1 1$10 , 2 2$40 ) ) ;
10302: LD_INT 2450
10304: PPUSH
10305: LD_INT 5600
10307: PPUSH
10308: CALL_OW 12
10312: PPUSH
10313: CALL_OW 67
// CreateCratesAnywhere ( Rand ( 3 , 5 ) , true ) ;
10317: LD_INT 3
10319: PPUSH
10320: LD_INT 5
10322: PPUSH
10323: CALL_OW 12
10327: PPUSH
10328: LD_INT 1
10330: PPUSH
10331: CALL_OW 57
// if Rand ( 1 , 4 ) = 1 then
10335: LD_INT 1
10337: PPUSH
10338: LD_INT 4
10340: PPUSH
10341: CALL_OW 12
10345: PUSH
10346: LD_INT 1
10348: EQUAL
10349: IFFALSE 10384
// begin wait ( Rand ( 0 0$5 , 0 0$20 ) ) ;
10351: LD_INT 175
10353: PPUSH
10354: LD_INT 700
10356: PPUSH
10357: CALL_OW 12
10361: PPUSH
10362: CALL_OW 67
// CreateCratesAnywhere ( Rand ( 2 , 4 ) , true ) ;
10366: LD_INT 2
10368: PPUSH
10369: LD_INT 4
10371: PPUSH
10372: CALL_OW 12
10376: PPUSH
10377: LD_INT 1
10379: PPUSH
10380: CALL_OW 57
// end ; until false ;
10384: LD_INT 0
10386: IFFALSE 10302
// end ;
10388: END
// every 0 0$1 + 0 0$0.5 do var count , time ;
10389: GO 10391
10391: DISABLE
10392: LD_INT 0
10394: PPUSH
10395: PPUSH
// begin count = 0 ;
10396: LD_ADDR_VAR 0 1
10400: PUSH
10401: LD_INT 0
10403: ST_TO_ADDR
// repeat time = [ 1 1$15 , 1 1$20 , 1 1$25 ] [ difficulty ] + ( 0 0$50 * count / ( count + [ 15 , 13 , 12 ] [ difficulty ] ) ) ;
10404: LD_ADDR_VAR 0 2
10408: PUSH
10409: LD_INT 2625
10411: PUSH
10412: LD_INT 2800
10414: PUSH
10415: LD_INT 2975
10417: PUSH
10418: EMPTY
10419: LIST
10420: LIST
10421: LIST
10422: PUSH
10423: LD_OWVAR 67
10427: ARRAY
10428: PUSH
10429: LD_INT 1750
10431: PUSH
10432: LD_VAR 0 1
10436: MUL
10437: PUSH
10438: LD_VAR 0 1
10442: PUSH
10443: LD_INT 15
10445: PUSH
10446: LD_INT 13
10448: PUSH
10449: LD_INT 12
10451: PUSH
10452: EMPTY
10453: LIST
10454: LIST
10455: LIST
10456: PUSH
10457: LD_OWVAR 67
10461: ARRAY
10462: PLUS
10463: DIVREAL
10464: PLUS
10465: ST_TO_ADDR
// wait ( Rand ( time , time + 0 0$30 ) ) ;
10466: LD_VAR 0 2
10470: PPUSH
10471: LD_VAR 0 2
10475: PUSH
10476: LD_INT 1050
10478: PLUS
10479: PPUSH
10480: CALL_OW 12
10484: PPUSH
10485: CALL_OW 67
// CreateCratesArea ( Rand ( 3 , 5 ) , player_crate_area , true ) ;
10489: LD_INT 3
10491: PPUSH
10492: LD_INT 5
10494: PPUSH
10495: CALL_OW 12
10499: PPUSH
10500: LD_INT 4
10502: PPUSH
10503: LD_INT 1
10505: PPUSH
10506: CALL_OW 55
// count = count + 1 ;
10510: LD_ADDR_VAR 0 1
10514: PUSH
10515: LD_VAR 0 1
10519: PUSH
10520: LD_INT 1
10522: PLUS
10523: ST_TO_ADDR
// until false ;
10524: LD_INT 0
10526: IFFALSE 10404
// end ;
10528: PPOPN 2
10530: END
// every 0 0$1 + 0 0$0.5 do var count , time ;
10531: GO 10533
10533: DISABLE
10534: LD_INT 0
10536: PPUSH
10537: PPUSH
// begin count = 0 ;
10538: LD_ADDR_VAR 0 1
10542: PUSH
10543: LD_INT 0
10545: ST_TO_ADDR
// repeat time = [ 1 1$30 , 1 1$50 , 2 2$10 ] [ difficulty ] + ( 1 1$0 * count / ( count + 6 ) ) ;
10546: LD_ADDR_VAR 0 2
10550: PUSH
10551: LD_INT 3150
10553: PUSH
10554: LD_INT 3850
10556: PUSH
10557: LD_INT 4550
10559: PUSH
10560: EMPTY
10561: LIST
10562: LIST
10563: LIST
10564: PUSH
10565: LD_OWVAR 67
10569: ARRAY
10570: PUSH
10571: LD_INT 2100
10573: PUSH
10574: LD_VAR 0 1
10578: MUL
10579: PUSH
10580: LD_VAR 0 1
10584: PUSH
10585: LD_INT 6
10587: PLUS
10588: DIVREAL
10589: PLUS
10590: ST_TO_ADDR
// wait ( Rand ( time , time + 0 0$30 ) ) ;
10591: LD_VAR 0 2
10595: PPUSH
10596: LD_VAR 0 2
10600: PUSH
10601: LD_INT 1050
10603: PLUS
10604: PPUSH
10605: CALL_OW 12
10609: PPUSH
10610: CALL_OW 67
// CreateCratesArea ( Rand ( 3 , 5 ) , player_base , true ) ;
10614: LD_INT 3
10616: PPUSH
10617: LD_INT 5
10619: PPUSH
10620: CALL_OW 12
10624: PPUSH
10625: LD_INT 22
10627: PPUSH
10628: LD_INT 1
10630: PPUSH
10631: CALL_OW 55
// count = count + 1 ;
10635: LD_ADDR_VAR 0 1
10639: PUSH
10640: LD_VAR 0 1
10644: PUSH
10645: LD_INT 1
10647: PLUS
10648: ST_TO_ADDR
// until count = [ 8 , 6 , 4 ] [ difficulty ] ;
10649: LD_VAR 0 1
10653: PUSH
10654: LD_INT 8
10656: PUSH
10657: LD_INT 6
10659: PUSH
10660: LD_INT 4
10662: PUSH
10663: EMPTY
10664: LIST
10665: LIST
10666: LIST
10667: PUSH
10668: LD_OWVAR 67
10672: ARRAY
10673: EQUAL
10674: IFFALSE 10546
// end ;
10676: PPOPN 2
10678: END
// export function PrepareCrates ; var all , i ; begin
10679: LD_INT 0
10681: PPUSH
10682: PPUSH
10683: PPUSH
// all = [ 30 , 20 , 10 ] [ difficulty ] ;
10684: LD_ADDR_VAR 0 2
10688: PUSH
10689: LD_INT 30
10691: PUSH
10692: LD_INT 20
10694: PUSH
10695: LD_INT 10
10697: PUSH
10698: EMPTY
10699: LIST
10700: LIST
10701: LIST
10702: PUSH
10703: LD_OWVAR 67
10707: ARRAY
10708: ST_TO_ADDR
// repeat if all >= 5 then
10709: LD_VAR 0 2
10713: PUSH
10714: LD_INT 5
10716: GREATEREQUAL
10717: IFFALSE 10737
// i = Rand ( 2 , 5 ) else
10719: LD_ADDR_VAR 0 3
10723: PUSH
10724: LD_INT 2
10726: PPUSH
10727: LD_INT 5
10729: PPUSH
10730: CALL_OW 12
10734: ST_TO_ADDR
10735: GO 10747
// i = all ;
10737: LD_ADDR_VAR 0 3
10741: PUSH
10742: LD_VAR 0 2
10746: ST_TO_ADDR
// all = all - i ;
10747: LD_ADDR_VAR 0 2
10751: PUSH
10752: LD_VAR 0 2
10756: PUSH
10757: LD_VAR 0 3
10761: MINUS
10762: ST_TO_ADDR
// CreateCratesAnywhere ( i , false ) ;
10763: LD_VAR 0 3
10767: PPUSH
10768: LD_INT 0
10770: PPUSH
10771: CALL_OW 57
// until all <= 0 ;
10775: LD_VAR 0 2
10779: PUSH
10780: LD_INT 0
10782: LESSEQUAL
10783: IFFALSE 10709
// all = [ 30 , 20 , 15 ] [ difficulty ] ;
10785: LD_ADDR_VAR 0 2
10789: PUSH
10790: LD_INT 30
10792: PUSH
10793: LD_INT 20
10795: PUSH
10796: LD_INT 15
10798: PUSH
10799: EMPTY
10800: LIST
10801: LIST
10802: LIST
10803: PUSH
10804: LD_OWVAR 67
10808: ARRAY
10809: ST_TO_ADDR
// repeat if all >= 5 then
10810: LD_VAR 0 2
10814: PUSH
10815: LD_INT 5
10817: GREATEREQUAL
10818: IFFALSE 10838
// i = Rand ( 2 , 5 ) else
10820: LD_ADDR_VAR 0 3
10824: PUSH
10825: LD_INT 2
10827: PPUSH
10828: LD_INT 5
10830: PPUSH
10831: CALL_OW 12
10835: ST_TO_ADDR
10836: GO 10848
// i = all ;
10838: LD_ADDR_VAR 0 3
10842: PUSH
10843: LD_VAR 0 2
10847: ST_TO_ADDR
// all = all - i ;
10848: LD_ADDR_VAR 0 2
10852: PUSH
10853: LD_VAR 0 2
10857: PUSH
10858: LD_VAR 0 3
10862: MINUS
10863: ST_TO_ADDR
// CreateCratesArea ( i , player_crate_area , false ) ;
10864: LD_VAR 0 3
10868: PPUSH
10869: LD_INT 4
10871: PPUSH
10872: LD_INT 0
10874: PPUSH
10875: CALL_OW 55
// until all <= 0 ;
10879: LD_VAR 0 2
10883: PUSH
10884: LD_INT 0
10886: LESSEQUAL
10887: IFFALSE 10810
// if difficulty > 1 then
10889: LD_OWVAR 67
10893: PUSH
10894: LD_INT 1
10896: GREATER
10897: IFFALSE 10901
// exit ;
10899: GO 10988
// all = 5 ;
10901: LD_ADDR_VAR 0 2
10905: PUSH
10906: LD_INT 5
10908: ST_TO_ADDR
// repeat if all >= 5 then
10909: LD_VAR 0 2
10913: PUSH
10914: LD_INT 5
10916: GREATEREQUAL
10917: IFFALSE 10937
// i = Rand ( 2 , 5 ) else
10919: LD_ADDR_VAR 0 3
10923: PUSH
10924: LD_INT 2
10926: PPUSH
10927: LD_INT 5
10929: PPUSH
10930: CALL_OW 12
10934: ST_TO_ADDR
10935: GO 10947
// i = all ;
10937: LD_ADDR_VAR 0 3
10941: PUSH
10942: LD_VAR 0 2
10946: ST_TO_ADDR
// all = all - i ;
10947: LD_ADDR_VAR 0 2
10951: PUSH
10952: LD_VAR 0 2
10956: PUSH
10957: LD_VAR 0 3
10961: MINUS
10962: ST_TO_ADDR
// CreateCratesArea ( i , player_base , false ) ;
10963: LD_VAR 0 3
10967: PPUSH
10968: LD_INT 22
10970: PPUSH
10971: LD_INT 0
10973: PPUSH
10974: CALL_OW 55
// until all <= 0 ;
10978: LD_VAR 0 2
10982: PUSH
10983: LD_INT 0
10985: LESSEQUAL
10986: IFFALSE 10909
// end ;
10988: LD_VAR 0 1
10992: RET
// every 0 0$1 + 0 0$0.8 do var crates_list , temp_list , c ;
10993: GO 10995
10995: DISABLE
10996: LD_INT 0
10998: PPUSH
10999: PPUSH
11000: PPUSH
// begin repeat wait ( 0 0$1 ) ;
11001: LD_INT 35
11003: PPUSH
11004: CALL_OW 67
// if not 1 in ai_bases then
11008: LD_INT 1
11010: PUSH
11011: LD_EXP 59
11015: IN
11016: NOT
11017: IFFALSE 11021
// exit ;
11019: GO 11207
// temp_list = GetListOfCratesInArea ( no_crates_area ) ;
11021: LD_ADDR_VAR 0 2
11025: PUSH
11026: LD_INT 27
11028: PPUSH
11029: CALL_OW 435
11033: ST_TO_ADDR
// if temp_list = 0 then
11034: LD_VAR 0 2
11038: PUSH
11039: LD_INT 0
11041: EQUAL
11042: IFFALSE 11046
// continue ;
11044: GO 11001
// c = 1 ;
11046: LD_ADDR_VAR 0 3
11050: PUSH
11051: LD_INT 1
11053: ST_TO_ADDR
// crates_list = [ ] ;
11054: LD_ADDR_VAR 0 1
11058: PUSH
11059: EMPTY
11060: ST_TO_ADDR
// repeat crates_list = crates_list ^ [ [ temp_list [ c ] , temp_list [ c + 1 ] ] ] ;
11061: LD_ADDR_VAR 0 1
11065: PUSH
11066: LD_VAR 0 1
11070: PUSH
11071: LD_VAR 0 2
11075: PUSH
11076: LD_VAR 0 3
11080: ARRAY
11081: PUSH
11082: LD_VAR 0 2
11086: PUSH
11087: LD_VAR 0 3
11091: PUSH
11092: LD_INT 1
11094: PLUS
11095: ARRAY
11096: PUSH
11097: EMPTY
11098: LIST
11099: LIST
11100: PUSH
11101: EMPTY
11102: LIST
11103: ADD
11104: ST_TO_ADDR
// c = c + 2 ;
11105: LD_ADDR_VAR 0 3
11109: PUSH
11110: LD_VAR 0 3
11114: PUSH
11115: LD_INT 2
11117: PLUS
11118: ST_TO_ADDR
// until c > temp_list ;
11119: LD_VAR 0 3
11123: PUSH
11124: LD_VAR 0 2
11128: GREATER
11129: IFFALSE 11061
// for c in crates_list do
11131: LD_ADDR_VAR 0 3
11135: PUSH
11136: LD_VAR 0 1
11140: PUSH
11141: FOR_IN
11142: IFFALSE 11201
// if not SeeXY ( you , c [ 1 ] , c [ 2 ] ) then
11144: LD_EXP 2
11148: PPUSH
11149: LD_VAR 0 3
11153: PUSH
11154: LD_INT 1
11156: ARRAY
11157: PPUSH
11158: LD_VAR 0 3
11162: PUSH
11163: LD_INT 2
11165: ARRAY
11166: PPUSH
11167: CALL_OW 293
11171: NOT
11172: IFFALSE 11199
// ChangeResourceAmountXY ( c [ 1 ] , c [ 2 ] , 0 ) ;
11174: LD_VAR 0 3
11178: PUSH
11179: LD_INT 1
11181: ARRAY
11182: PPUSH
11183: LD_VAR 0 3
11187: PUSH
11188: LD_INT 2
11190: ARRAY
11191: PPUSH
11192: LD_INT 0
11194: PPUSH
11195: CALL_OW 285
11199: GO 11141
11201: POP
11202: POP
// until false ;
11203: LD_INT 0
11205: IFFALSE 11001
// end ; end_of_file
11207: PPOPN 3
11209: END
// 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
11210: LD_INT 0
11212: PPUSH
11213: PPUSH
11214: PPUSH
11215: PPUSH
11216: PPUSH
11217: PPUSH
11218: PPUSH
11219: PPUSH
11220: PPUSH
11221: PPUSH
11222: PPUSH
11223: 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
11224: LD_VAR 0 1
11228: PPUSH
11229: CALL_OW 302
11233: NOT
11234: PUSH
11235: LD_VAR 0 4
11239: PUSH
11240: LD_INT 1
11242: EQUAL
11243: OR
11244: PUSH
11245: LD_VAR 0 2
11249: PPUSH
11250: LD_VAR 0 3
11254: PPUSH
11255: CALL_OW 488
11259: NOT
11260: OR
11261: PUSH
11262: LD_VAR 0 1
11266: PPUSH
11267: LD_VAR 0 2
11271: PPUSH
11272: LD_VAR 0 3
11276: PPUSH
11277: CALL_OW 297
11281: PUSH
11282: LD_VAR 0 4
11286: GREATEREQUAL
11287: OR
11288: PUSH
11289: LD_VAR 0 5
11293: PUSH
11294: LD_INT 1
11296: PUSH
11297: LD_INT 0
11299: PUSH
11300: EMPTY
11301: LIST
11302: LIST
11303: IN
11304: NOT
11305: OR
11306: IFFALSE 11310
// exit ;
11308: GO 12867
// attempts = 0 ;
11310: LD_ADDR_VAR 0 17
11314: PUSH
11315: LD_INT 0
11317: ST_TO_ADDR
// repeat list_nearest = [ ] ;
11318: LD_ADDR_VAR 0 7
11322: PUSH
11323: EMPTY
11324: ST_TO_ADDR
// list_coords = [ ] ;
11325: LD_ADDR_VAR 0 8
11329: PUSH
11330: EMPTY
11331: ST_TO_ADDR
// temp_dir = AI_GetTurnDirection ( x , y , GetX ( unit1 ) , GetY ( unit1 ) ) ;
11332: LD_ADDR_VAR 0 9
11336: PUSH
11337: LD_VAR 0 2
11341: PPUSH
11342: LD_VAR 0 3
11346: PPUSH
11347: LD_VAR 0 1
11351: PPUSH
11352: CALL_OW 250
11356: PPUSH
11357: LD_VAR 0 1
11361: PPUSH
11362: CALL_OW 251
11366: PPUSH
11367: CALL 12872 0 4
11371: ST_TO_ADDR
// if attempts = 0 then
11372: LD_VAR 0 17
11376: PUSH
11377: LD_INT 0
11379: EQUAL
11380: IFFALSE 11488
// begin dir_list = [ temp_dir , temp_dir + 1 , temp_dir - 1 ] ;
11382: LD_ADDR_VAR 0 10
11386: PUSH
11387: LD_VAR 0 9
11391: PUSH
11392: LD_VAR 0 9
11396: PUSH
11397: LD_INT 1
11399: PLUS
11400: PUSH
11401: LD_VAR 0 9
11405: PUSH
11406: LD_INT 1
11408: MINUS
11409: PUSH
11410: EMPTY
11411: LIST
11412: LIST
11413: LIST
11414: ST_TO_ADDR
// if dir_list [ 2 ] = 6 then
11415: LD_VAR 0 10
11419: PUSH
11420: LD_INT 2
11422: ARRAY
11423: PUSH
11424: LD_INT 6
11426: EQUAL
11427: IFFALSE 11450
// dir_list = Replace ( dir_list , 2 , 0 ) ;
11429: LD_ADDR_VAR 0 10
11433: PUSH
11434: LD_VAR 0 10
11438: PPUSH
11439: LD_INT 2
11441: PPUSH
11442: LD_INT 0
11444: PPUSH
11445: CALL_OW 1
11449: ST_TO_ADDR
// if dir_list [ 3 ] = - 1 then
11450: LD_VAR 0 10
11454: PUSH
11455: LD_INT 3
11457: ARRAY
11458: PUSH
11459: LD_INT 1
11461: NEG
11462: EQUAL
11463: IFFALSE 11486
// dir_list = Replace ( dir_list , 3 , 5 ) ;
11465: LD_ADDR_VAR 0 10
11469: PUSH
11470: LD_VAR 0 10
11474: PPUSH
11475: LD_INT 3
11477: PPUSH
11478: LD_INT 5
11480: PPUSH
11481: CALL_OW 1
11485: ST_TO_ADDR
// end else
11486: GO 11525
// dir_list = [ 0 , 1 , 2 , 3 , 4 , 5 ] diff temp_dir ;
11488: LD_ADDR_VAR 0 10
11492: PUSH
11493: LD_INT 0
11495: PUSH
11496: LD_INT 1
11498: PUSH
11499: LD_INT 2
11501: PUSH
11502: LD_INT 3
11504: PUSH
11505: LD_INT 4
11507: PUSH
11508: LD_INT 5
11510: PUSH
11511: EMPTY
11512: LIST
11513: LIST
11514: LIST
11515: LIST
11516: LIST
11517: LIST
11518: PUSH
11519: LD_VAR 0 9
11523: DIFF
11524: ST_TO_ADDR
// for c = 1 to ( dir_list + 0 ) do
11525: LD_ADDR_VAR 0 14
11529: PUSH
11530: DOUBLE
11531: LD_INT 1
11533: DEC
11534: ST_TO_ADDR
11535: LD_VAR 0 10
11539: PUSH
11540: LD_INT 0
11542: PLUS
11543: PUSH
11544: FOR_TO
11545: IFFALSE 11867
// case dir_list [ c ] of 0 :
11547: LD_VAR 0 10
11551: PUSH
11552: LD_VAR 0 14
11556: ARRAY
11557: PUSH
11558: LD_INT 0
11560: DOUBLE
11561: EQUAL
11562: IFTRUE 11566
11564: GO 11607
11566: POP
// list_coords = Insert ( list_coords , 1 , [ x , y - dist ] ) ; 1 :
11567: LD_ADDR_VAR 0 8
11571: PUSH
11572: LD_VAR 0 8
11576: PPUSH
11577: LD_INT 1
11579: PPUSH
11580: LD_VAR 0 2
11584: PUSH
11585: LD_VAR 0 3
11589: PUSH
11590: LD_VAR 0 4
11594: MINUS
11595: PUSH
11596: EMPTY
11597: LIST
11598: LIST
11599: PPUSH
11600: CALL_OW 2
11604: ST_TO_ADDR
11605: GO 11865
11607: LD_INT 1
11609: DOUBLE
11610: EQUAL
11611: IFTRUE 11615
11613: GO 11656
11615: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y ] ) ; 2 :
11616: LD_ADDR_VAR 0 8
11620: PUSH
11621: LD_VAR 0 8
11625: PPUSH
11626: LD_INT 1
11628: PPUSH
11629: LD_VAR 0 2
11633: PUSH
11634: LD_VAR 0 4
11638: PLUS
11639: PUSH
11640: LD_VAR 0 3
11644: PUSH
11645: EMPTY
11646: LIST
11647: LIST
11648: PPUSH
11649: CALL_OW 2
11653: ST_TO_ADDR
11654: GO 11865
11656: LD_INT 2
11658: DOUBLE
11659: EQUAL
11660: IFTRUE 11664
11662: GO 11711
11664: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + dist ] ) ; 3 :
11665: LD_ADDR_VAR 0 8
11669: PUSH
11670: LD_VAR 0 8
11674: PPUSH
11675: LD_INT 1
11677: PPUSH
11678: LD_VAR 0 2
11682: PUSH
11683: LD_VAR 0 4
11687: PLUS
11688: PUSH
11689: LD_VAR 0 3
11693: PUSH
11694: LD_VAR 0 4
11698: PLUS
11699: PUSH
11700: EMPTY
11701: LIST
11702: LIST
11703: PPUSH
11704: CALL_OW 2
11708: ST_TO_ADDR
11709: GO 11865
11711: LD_INT 3
11713: DOUBLE
11714: EQUAL
11715: IFTRUE 11719
11717: GO 11760
11719: POP
// list_coords = Insert ( list_coords , 1 , [ x , y + dist ] ) ; 4 :
11720: LD_ADDR_VAR 0 8
11724: PUSH
11725: LD_VAR 0 8
11729: PPUSH
11730: LD_INT 1
11732: PPUSH
11733: LD_VAR 0 2
11737: PUSH
11738: LD_VAR 0 3
11742: PUSH
11743: LD_VAR 0 4
11747: PLUS
11748: PUSH
11749: EMPTY
11750: LIST
11751: LIST
11752: PPUSH
11753: CALL_OW 2
11757: ST_TO_ADDR
11758: GO 11865
11760: LD_INT 4
11762: DOUBLE
11763: EQUAL
11764: IFTRUE 11768
11766: GO 11809
11768: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y ] ) ; 5 :
11769: LD_ADDR_VAR 0 8
11773: PUSH
11774: LD_VAR 0 8
11778: PPUSH
11779: LD_INT 1
11781: PPUSH
11782: LD_VAR 0 2
11786: PUSH
11787: LD_VAR 0 4
11791: MINUS
11792: PUSH
11793: LD_VAR 0 3
11797: PUSH
11798: EMPTY
11799: LIST
11800: LIST
11801: PPUSH
11802: CALL_OW 2
11806: ST_TO_ADDR
11807: GO 11865
11809: LD_INT 5
11811: DOUBLE
11812: EQUAL
11813: IFTRUE 11817
11815: GO 11864
11817: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - dist ] ) ; end ;
11818: LD_ADDR_VAR 0 8
11822: PUSH
11823: LD_VAR 0 8
11827: PPUSH
11828: LD_INT 1
11830: PPUSH
11831: LD_VAR 0 2
11835: PUSH
11836: LD_VAR 0 4
11840: MINUS
11841: PUSH
11842: LD_VAR 0 3
11846: PUSH
11847: LD_VAR 0 4
11851: MINUS
11852: PUSH
11853: EMPTY
11854: LIST
11855: LIST
11856: PPUSH
11857: CALL_OW 2
11861: ST_TO_ADDR
11862: GO 11865
11864: POP
11865: GO 11544
11867: POP
11868: POP
// if dist < 30 then
11869: LD_VAR 0 4
11873: PUSH
11874: LD_INT 30
11876: LESS
11877: IFFALSE 11889
// c = 1 else
11879: LD_ADDR_VAR 0 14
11883: PUSH
11884: LD_INT 1
11886: ST_TO_ADDR
11887: GO 11897
// c = 2 ;
11889: LD_ADDR_VAR 0 14
11893: PUSH
11894: LD_INT 2
11896: ST_TO_ADDR
// b = 1 ;
11897: LD_ADDR_VAR 0 11
11901: PUSH
11902: LD_INT 1
11904: ST_TO_ADDR
// while b <= ( dist - 1 ) do
11905: LD_VAR 0 11
11909: PUSH
11910: LD_VAR 0 4
11914: PUSH
11915: LD_INT 1
11917: MINUS
11918: LESSEQUAL
11919: IFFALSE 12347
// begin if 0 in dir_list and 1 in dir_list then
11921: LD_INT 0
11923: PUSH
11924: LD_VAR 0 10
11928: IN
11929: PUSH
11930: LD_INT 1
11932: PUSH
11933: LD_VAR 0 10
11937: IN
11938: AND
11939: IFFALSE 11991
// list_coords = Insert ( list_coords , 1 , [ x + b , y - dist + b ] ) ;
11941: LD_ADDR_VAR 0 8
11945: PUSH
11946: LD_VAR 0 8
11950: PPUSH
11951: LD_INT 1
11953: PPUSH
11954: LD_VAR 0 2
11958: PUSH
11959: LD_VAR 0 11
11963: PLUS
11964: PUSH
11965: LD_VAR 0 3
11969: PUSH
11970: LD_VAR 0 4
11974: MINUS
11975: PUSH
11976: LD_VAR 0 11
11980: PLUS
11981: PUSH
11982: EMPTY
11983: LIST
11984: LIST
11985: PPUSH
11986: CALL_OW 2
11990: ST_TO_ADDR
// if 1 in dir_list and 2 in dir_list then
11991: LD_INT 1
11993: PUSH
11994: LD_VAR 0 10
11998: IN
11999: PUSH
12000: LD_INT 2
12002: PUSH
12003: LD_VAR 0 10
12007: IN
12008: AND
12009: IFFALSE 12055
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + b ] ) ;
12011: LD_ADDR_VAR 0 8
12015: PUSH
12016: LD_VAR 0 8
12020: PPUSH
12021: LD_INT 1
12023: PPUSH
12024: LD_VAR 0 2
12028: PUSH
12029: LD_VAR 0 4
12033: PLUS
12034: PUSH
12035: LD_VAR 0 3
12039: PUSH
12040: LD_VAR 0 11
12044: PLUS
12045: PUSH
12046: EMPTY
12047: LIST
12048: LIST
12049: PPUSH
12050: CALL_OW 2
12054: ST_TO_ADDR
// if 2 in dir_list and 3 in dir_list then
12055: LD_INT 2
12057: PUSH
12058: LD_VAR 0 10
12062: IN
12063: PUSH
12064: LD_INT 3
12066: PUSH
12067: LD_VAR 0 10
12071: IN
12072: AND
12073: IFFALSE 12125
// list_coords = Insert ( list_coords , 1 , [ x + dist - b , y + dist ] ) ;
12075: LD_ADDR_VAR 0 8
12079: PUSH
12080: LD_VAR 0 8
12084: PPUSH
12085: LD_INT 1
12087: PPUSH
12088: LD_VAR 0 2
12092: PUSH
12093: LD_VAR 0 4
12097: PLUS
12098: PUSH
12099: LD_VAR 0 11
12103: MINUS
12104: PUSH
12105: LD_VAR 0 3
12109: PUSH
12110: LD_VAR 0 4
12114: PLUS
12115: PUSH
12116: EMPTY
12117: LIST
12118: LIST
12119: PPUSH
12120: CALL_OW 2
12124: ST_TO_ADDR
// if 3 in dir_list and 4 in dir_list then
12125: LD_INT 3
12127: PUSH
12128: LD_VAR 0 10
12132: IN
12133: PUSH
12134: LD_INT 4
12136: PUSH
12137: LD_VAR 0 10
12141: IN
12142: AND
12143: IFFALSE 12195
// list_coords = Insert ( list_coords , 1 , [ x - b , y + dist - b ] ) ;
12145: LD_ADDR_VAR 0 8
12149: PUSH
12150: LD_VAR 0 8
12154: PPUSH
12155: LD_INT 1
12157: PPUSH
12158: LD_VAR 0 2
12162: PUSH
12163: LD_VAR 0 11
12167: MINUS
12168: PUSH
12169: LD_VAR 0 3
12173: PUSH
12174: LD_VAR 0 4
12178: PLUS
12179: PUSH
12180: LD_VAR 0 11
12184: MINUS
12185: PUSH
12186: EMPTY
12187: LIST
12188: LIST
12189: PPUSH
12190: CALL_OW 2
12194: ST_TO_ADDR
// if 4 in dir_list and 5 in dir_list then
12195: LD_INT 4
12197: PUSH
12198: LD_VAR 0 10
12202: IN
12203: PUSH
12204: LD_INT 5
12206: PUSH
12207: LD_VAR 0 10
12211: IN
12212: AND
12213: IFFALSE 12259
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - b ] ) ;
12215: LD_ADDR_VAR 0 8
12219: PUSH
12220: LD_VAR 0 8
12224: PPUSH
12225: LD_INT 1
12227: PPUSH
12228: LD_VAR 0 2
12232: PUSH
12233: LD_VAR 0 4
12237: MINUS
12238: PUSH
12239: LD_VAR 0 3
12243: PUSH
12244: LD_VAR 0 11
12248: MINUS
12249: PUSH
12250: EMPTY
12251: LIST
12252: LIST
12253: PPUSH
12254: CALL_OW 2
12258: ST_TO_ADDR
// if 5 in dir_list and 0 in dir_list then
12259: LD_INT 5
12261: PUSH
12262: LD_VAR 0 10
12266: IN
12267: PUSH
12268: LD_INT 0
12270: PUSH
12271: LD_VAR 0 10
12275: IN
12276: AND
12277: IFFALSE 12329
// list_coords = Insert ( list_coords , 1 , [ x - dist + b , y - dist ] ) ;
12279: LD_ADDR_VAR 0 8
12283: PUSH
12284: LD_VAR 0 8
12288: PPUSH
12289: LD_INT 1
12291: PPUSH
12292: LD_VAR 0 2
12296: PUSH
12297: LD_VAR 0 4
12301: MINUS
12302: PUSH
12303: LD_VAR 0 11
12307: PLUS
12308: PUSH
12309: LD_VAR 0 3
12313: PUSH
12314: LD_VAR 0 4
12318: MINUS
12319: PUSH
12320: EMPTY
12321: LIST
12322: LIST
12323: PPUSH
12324: CALL_OW 2
12328: ST_TO_ADDR
// b = b + c end ;
12329: LD_ADDR_VAR 0 11
12333: PUSH
12334: LD_VAR 0 11
12338: PUSH
12339: LD_VAR 0 14
12343: PLUS
12344: ST_TO_ADDR
12345: GO 11905
// if list_coords = 0 then
12347: LD_VAR 0 8
12351: PUSH
12352: LD_INT 0
12354: EQUAL
12355: IFFALSE 12359
// exit ;
12357: GO 12867
// repeat min_dist = 5000 ;
12359: LD_ADDR_VAR 0 12
12363: PUSH
12364: LD_INT 5000
12366: ST_TO_ADDR
// for b in list_coords do
12367: LD_ADDR_VAR 0 11
12371: PUSH
12372: LD_VAR 0 8
12376: PUSH
12377: FOR_IN
12378: IFFALSE 12437
// begin temp_dist = GetDistUnitXY ( unit1 , b [ 1 ] , b [ 2 ] ) ;
12380: LD_ADDR_VAR 0 13
12384: PUSH
12385: LD_VAR 0 1
12389: PPUSH
12390: LD_VAR 0 11
12394: PUSH
12395: LD_INT 1
12397: ARRAY
12398: PPUSH
12399: LD_VAR 0 11
12403: PUSH
12404: LD_INT 2
12406: ARRAY
12407: PPUSH
12408: CALL_OW 297
12412: ST_TO_ADDR
// if temp_dist < min_dist then
12413: LD_VAR 0 13
12417: PUSH
12418: LD_VAR 0 12
12422: LESS
12423: IFFALSE 12435
// min_dist = temp_dist ;
12425: LD_ADDR_VAR 0 12
12429: PUSH
12430: LD_VAR 0 13
12434: ST_TO_ADDR
// end ;
12435: GO 12377
12437: POP
12438: POP
// c = 0 ;
12439: LD_ADDR_VAR 0 14
12443: PUSH
12444: LD_INT 0
12446: ST_TO_ADDR
// repeat c = c + 1 ;
12447: LD_ADDR_VAR 0 14
12451: PUSH
12452: LD_VAR 0 14
12456: PUSH
12457: LD_INT 1
12459: PLUS
12460: ST_TO_ADDR
// if GetDistUnitXY ( unit1 , list_coords [ c ] [ 1 ] , list_coords [ c ] [ 2 ] ) = min_dist then
12461: LD_VAR 0 1
12465: PPUSH
12466: LD_VAR 0 8
12470: PUSH
12471: LD_VAR 0 14
12475: ARRAY
12476: PUSH
12477: LD_INT 1
12479: ARRAY
12480: PPUSH
12481: LD_VAR 0 8
12485: PUSH
12486: LD_VAR 0 14
12490: ARRAY
12491: PUSH
12492: LD_INT 2
12494: ARRAY
12495: PPUSH
12496: CALL_OW 297
12500: PUSH
12501: LD_VAR 0 12
12505: EQUAL
12506: IFFALSE 12571
// begin list_nearest = Insert ( list_nearest , 1 , list_coords [ c ] ) ;
12508: LD_ADDR_VAR 0 7
12512: PUSH
12513: LD_VAR 0 7
12517: PPUSH
12518: LD_INT 1
12520: PPUSH
12521: LD_VAR 0 8
12525: PUSH
12526: LD_VAR 0 14
12530: ARRAY
12531: PPUSH
12532: CALL_OW 2
12536: ST_TO_ADDR
// list_coords = Delete ( list_coords , c ) ;
12537: LD_ADDR_VAR 0 8
12541: PUSH
12542: LD_VAR 0 8
12546: PPUSH
12547: LD_VAR 0 14
12551: PPUSH
12552: CALL_OW 3
12556: ST_TO_ADDR
// c = c - 1 ;
12557: LD_ADDR_VAR 0 14
12561: PUSH
12562: LD_VAR 0 14
12566: PUSH
12567: LD_INT 1
12569: MINUS
12570: ST_TO_ADDR
// end ; until c = list_coords ;
12571: LD_VAR 0 14
12575: PUSH
12576: LD_VAR 0 8
12580: EQUAL
12581: IFFALSE 12447
// c = 0 ;
12583: LD_ADDR_VAR 0 14
12587: PUSH
12588: LD_INT 0
12590: ST_TO_ADDR
// if list_nearest > 0 then
12591: LD_VAR 0 7
12595: PUSH
12596: LD_INT 0
12598: GREATER
12599: IFFALSE 12741
// begin repeat rand_num = Rand ( 1 , list_nearest ) ;
12601: LD_ADDR_VAR 0 15
12605: PUSH
12606: LD_INT 1
12608: PPUSH
12609: LD_VAR 0 7
12613: PPUSH
12614: CALL_OW 12
12618: ST_TO_ADDR
// rand_near_hex = list_nearest [ rand_num ] ;
12619: LD_ADDR_VAR 0 16
12623: PUSH
12624: LD_VAR 0 7
12628: PUSH
12629: LD_VAR 0 15
12633: ARRAY
12634: 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
12635: LD_VAR 0 16
12639: PUSH
12640: LD_INT 1
12642: ARRAY
12643: PPUSH
12644: LD_VAR 0 16
12648: PUSH
12649: LD_INT 2
12651: ARRAY
12652: PPUSH
12653: CALL_OW 488
12657: PUSH
12658: LD_INT 0
12660: GREATER
12661: PUSH
12662: LD_VAR 0 16
12666: PUSH
12667: LD_INT 1
12669: ARRAY
12670: PPUSH
12671: LD_VAR 0 16
12675: PUSH
12676: LD_INT 2
12678: ARRAY
12679: PPUSH
12680: CALL_OW 428
12684: PUSH
12685: LD_INT 0
12687: EQUAL
12688: AND
12689: IFFALSE 12701
// c = 1 else
12691: LD_ADDR_VAR 0 14
12695: PUSH
12696: LD_INT 1
12698: ST_TO_ADDR
12699: GO 12721
// list_nearest = Delete ( list_nearest , rand_num ) ;
12701: LD_ADDR_VAR 0 7
12705: PUSH
12706: LD_VAR 0 7
12710: PPUSH
12711: LD_VAR 0 15
12715: PPUSH
12716: CALL_OW 3
12720: ST_TO_ADDR
// until c = 1 or list_nearest = 0 ;
12721: LD_VAR 0 14
12725: PUSH
12726: LD_INT 1
12728: EQUAL
12729: PUSH
12730: LD_VAR 0 7
12734: PUSH
12735: LD_INT 0
12737: EQUAL
12738: OR
12739: IFFALSE 12601
// end ; until c = 1 or list_coords = 0 ;
12741: LD_VAR 0 14
12745: PUSH
12746: LD_INT 1
12748: EQUAL
12749: PUSH
12750: LD_VAR 0 8
12754: PUSH
12755: LD_INT 0
12757: EQUAL
12758: OR
12759: IFFALSE 12359
// attempts = attempts + 1 ;
12761: LD_ADDR_VAR 0 17
12765: PUSH
12766: LD_VAR 0 17
12770: PUSH
12771: LD_INT 1
12773: PLUS
12774: ST_TO_ADDR
// until c = 1 or attempts > 1 ;
12775: LD_VAR 0 14
12779: PUSH
12780: LD_INT 1
12782: EQUAL
12783: PUSH
12784: LD_VAR 0 17
12788: PUSH
12789: LD_INT 1
12791: GREATER
12792: OR
12793: IFFALSE 11318
// if c = 1 then
12795: LD_VAR 0 14
12799: PUSH
12800: LD_INT 1
12802: EQUAL
12803: IFFALSE 12867
// if add then
12805: LD_VAR 0 5
12809: IFFALSE 12840
// AddComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) else
12811: LD_VAR 0 1
12815: PPUSH
12816: LD_VAR 0 16
12820: PUSH
12821: LD_INT 1
12823: ARRAY
12824: PPUSH
12825: LD_VAR 0 16
12829: PUSH
12830: LD_INT 2
12832: ARRAY
12833: PPUSH
12834: CALL_OW 171
12838: GO 12867
// ComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) ;
12840: LD_VAR 0 1
12844: PPUSH
12845: LD_VAR 0 16
12849: PUSH
12850: LD_INT 1
12852: ARRAY
12853: PPUSH
12854: LD_VAR 0 16
12858: PUSH
12859: LD_INT 2
12861: ARRAY
12862: PPUSH
12863: CALL_OW 111
// end ;
12867: LD_VAR 0 6
12871: RET
// export function AI_GetTurnDirection ( x1 , y1 , x , y ) ; var dist_1 , dist_2 , b , temp_dist , dir ; begin
12872: LD_INT 0
12874: PPUSH
12875: PPUSH
12876: PPUSH
12877: PPUSH
12878: PPUSH
12879: PPUSH
// if not ValidHex ( x1 , y1 ) or not ValidHex ( x , y ) then
12880: LD_VAR 0 1
12884: PPUSH
12885: LD_VAR 0 2
12889: PPUSH
12890: CALL_OW 488
12894: NOT
12895: PUSH
12896: LD_VAR 0 3
12900: PPUSH
12901: LD_VAR 0 4
12905: PPUSH
12906: CALL_OW 488
12910: NOT
12911: OR
12912: IFFALSE 12925
// begin result = - 1 ;
12914: LD_ADDR_VAR 0 5
12918: PUSH
12919: LD_INT 1
12921: NEG
12922: ST_TO_ADDR
// exit ;
12923: GO 13085
// end ; dist_1 = GetDistXY ( x1 , y1 , x , y ) ;
12925: LD_ADDR_VAR 0 6
12929: PUSH
12930: LD_VAR 0 1
12934: PPUSH
12935: LD_VAR 0 2
12939: PPUSH
12940: LD_VAR 0 3
12944: PPUSH
12945: LD_VAR 0 4
12949: PPUSH
12950: CALL_OW 298
12954: ST_TO_ADDR
// dist_2 = 99999 ;
12955: LD_ADDR_VAR 0 7
12959: PUSH
12960: LD_INT 99999
12962: ST_TO_ADDR
// for b = 0 to 5 do
12963: LD_ADDR_VAR 0 8
12967: PUSH
12968: DOUBLE
12969: LD_INT 0
12971: DEC
12972: ST_TO_ADDR
12973: LD_INT 5
12975: PUSH
12976: FOR_TO
12977: IFFALSE 13073
// begin temp_dist = GetDistXY ( ShiftX ( x1 , b , dist_1 ) , ShiftY ( y1 , b , dist_1 ) , x , y ) ;
12979: LD_ADDR_VAR 0 9
12983: PUSH
12984: LD_VAR 0 1
12988: PPUSH
12989: LD_VAR 0 8
12993: PPUSH
12994: LD_VAR 0 6
12998: PPUSH
12999: CALL_OW 272
13003: PPUSH
13004: LD_VAR 0 2
13008: PPUSH
13009: LD_VAR 0 8
13013: PPUSH
13014: LD_VAR 0 6
13018: PPUSH
13019: CALL_OW 273
13023: PPUSH
13024: LD_VAR 0 3
13028: PPUSH
13029: LD_VAR 0 4
13033: PPUSH
13034: CALL_OW 298
13038: ST_TO_ADDR
// if temp_dist < dist_2 then
13039: LD_VAR 0 9
13043: PUSH
13044: LD_VAR 0 7
13048: LESS
13049: IFFALSE 13071
// begin dist_2 = temp_dist ;
13051: LD_ADDR_VAR 0 7
13055: PUSH
13056: LD_VAR 0 9
13060: ST_TO_ADDR
// dir = b ;
13061: LD_ADDR_VAR 0 10
13065: PUSH
13066: LD_VAR 0 8
13070: ST_TO_ADDR
// end ; end ;
13071: GO 12976
13073: POP
13074: POP
// result = dir ;
13075: LD_ADDR_VAR 0 5
13079: PUSH
13080: LD_VAR 0 10
13084: ST_TO_ADDR
// end ;
13085: LD_VAR 0 5
13089: RET
// export function AI_InvertDirection ( direction ) ; var dir ; begin
13090: LD_INT 0
13092: PPUSH
13093: PPUSH
// dir = direction - 3 ;
13094: LD_ADDR_VAR 0 3
13098: PUSH
13099: LD_VAR 0 1
13103: PUSH
13104: LD_INT 3
13106: MINUS
13107: ST_TO_ADDR
// if dir < 0 then
13108: LD_VAR 0 3
13112: PUSH
13113: LD_INT 0
13115: LESS
13116: IFFALSE 13132
// dir = dir + 6 ;
13118: LD_ADDR_VAR 0 3
13122: PUSH
13123: LD_VAR 0 3
13127: PUSH
13128: LD_INT 6
13130: PLUS
13131: ST_TO_ADDR
// result = dir ;
13132: LD_ADDR_VAR 0 2
13136: PUSH
13137: LD_VAR 0 3
13141: ST_TO_ADDR
// end ; end_of_file
13142: LD_VAR 0 2
13146: RET
// every 0 0$10 do var i , base ;
13147: GO 13149
13149: DISABLE
13150: LD_INT 0
13152: PPUSH
13153: PPUSH
// begin for i = 1 to ai_depot do
13154: LD_ADDR_VAR 0 1
13158: PUSH
13159: DOUBLE
13160: LD_INT 1
13162: DEC
13163: ST_TO_ADDR
13164: LD_EXP 34
13168: PUSH
13169: FOR_TO
13170: IFFALSE 13280
// if IsOk ( ai_depot [ i ] ) and GetSide ( ai_depot [ i ] ) <> you then
13172: LD_EXP 34
13176: PUSH
13177: LD_VAR 0 1
13181: ARRAY
13182: PPUSH
13183: CALL_OW 302
13187: PUSH
13188: LD_EXP 34
13192: PUSH
13193: LD_VAR 0 1
13197: ARRAY
13198: PPUSH
13199: CALL_OW 255
13203: PUSH
13204: LD_EXP 2
13208: NONEQUAL
13209: AND
13210: IFFALSE 13278
// begin base = GetBase ( ai_depot [ i ] ) ;
13212: LD_ADDR_VAR 0 2
13216: PUSH
13217: LD_EXP 34
13221: PUSH
13222: LD_VAR 0 1
13226: ARRAY
13227: PPUSH
13228: CALL_OW 274
13232: ST_TO_ADDR
// SetResourceType ( base , mat_cans , 300 ) ;
13233: LD_VAR 0 2
13237: PPUSH
13238: LD_INT 1
13240: PPUSH
13241: LD_INT 300
13243: PPUSH
13244: CALL_OW 277
// SetResourceType ( base , mat_oil , 300 ) ;
13248: LD_VAR 0 2
13252: PPUSH
13253: LD_INT 2
13255: PPUSH
13256: LD_INT 300
13258: PPUSH
13259: CALL_OW 277
// SetResourceType ( base , mat_siberit , 300 ) ;
13263: LD_VAR 0 2
13267: PPUSH
13268: LD_INT 3
13270: PPUSH
13271: LD_INT 300
13273: PPUSH
13274: CALL_OW 277
// end ;
13278: GO 13169
13280: POP
13281: POP
// enable ;
13282: ENABLE
// end ;
13283: PPOPN 2
13285: END
// on UnitDestroyed ( un ) do var side , temp_list , base ; var btype ;
13286: LD_INT 0
13288: PPUSH
13289: PPUSH
13290: PPUSH
13291: PPUSH
// begin if un = Heike then
13292: LD_VAR 0 1
13296: PUSH
13297: LD_EXP 7
13301: EQUAL
13302: IFFALSE 13326
// begin ExclusiveOn ;
13304: CALL_OW 4
// Wait ( 0 0$1 ) ;
13308: LD_INT 35
13310: PPUSH
13311: CALL_OW 67
// YouLost ( HeikeDead ) ;
13315: LD_STRING HeikeDead
13317: PPUSH
13318: CALL_OW 104
// ExclusiveOff ;
13322: CALL_OW 5
// end ; if un = Gensher then
13326: LD_VAR 0 1
13330: PUSH
13331: LD_EXP 21
13335: EQUAL
13336: IFFALSE 13366
// begin DialogueOn ;
13338: CALL_OW 6
// ForceSay ( Heike , D20-H-1 ) ;
13342: LD_EXP 7
13346: PPUSH
13347: LD_STRING D20-H-1
13349: PPUSH
13350: CALL_OW 91
// DialogueOff ;
13354: CALL_OW 7
// kill_gensher_objective_status = 2 ;
13358: LD_ADDR_EXP 109
13362: PUSH
13363: LD_INT 2
13365: ST_TO_ADDR
// end ; side = GetSide ( un ) ;
13366: LD_ADDR_VAR 0 2
13370: PUSH
13371: LD_VAR 0 1
13375: PPUSH
13376: CALL_OW 255
13380: ST_TO_ADDR
// if GetType ( un ) = unit_building and side = you then
13381: LD_VAR 0 1
13385: PPUSH
13386: CALL_OW 247
13390: PUSH
13391: LD_INT 3
13393: EQUAL
13394: PUSH
13395: LD_VAR 0 2
13399: PUSH
13400: LD_EXP 2
13404: EQUAL
13405: AND
13406: IFFALSE 13852
// begin temp_list = player_base_b_types ;
13408: LD_ADDR_VAR 0 3
13412: PUSH
13413: LD_EXP 94
13417: ST_TO_ADDR
// btype = GetBType ( un ) ;
13418: LD_ADDR_VAR 0 5
13422: PUSH
13423: LD_VAR 0 1
13427: PPUSH
13428: CALL_OW 266
13432: ST_TO_ADDR
// if btype in [ b_depot , b_warehouse ] and ( FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) diff un ) = 0 then
13433: LD_VAR 0 5
13437: PUSH
13438: LD_INT 0
13440: PUSH
13441: LD_INT 1
13443: PUSH
13444: EMPTY
13445: LIST
13446: LIST
13447: IN
13448: PUSH
13449: LD_INT 22
13451: PUSH
13452: LD_EXP 2
13456: PUSH
13457: EMPTY
13458: LIST
13459: LIST
13460: PUSH
13461: LD_INT 2
13463: PUSH
13464: LD_INT 30
13466: PUSH
13467: LD_INT 0
13469: PUSH
13470: EMPTY
13471: LIST
13472: LIST
13473: PUSH
13474: LD_INT 30
13476: PUSH
13477: LD_INT 1
13479: PUSH
13480: EMPTY
13481: LIST
13482: LIST
13483: PUSH
13484: EMPTY
13485: LIST
13486: LIST
13487: LIST
13488: PUSH
13489: EMPTY
13490: LIST
13491: LIST
13492: PPUSH
13493: CALL_OW 69
13497: PUSH
13498: LD_VAR 0 1
13502: DIFF
13503: PUSH
13504: LD_INT 0
13506: EQUAL
13507: AND
13508: IFFALSE 13524
// player_base_b_types = player_base_b_types ^ b_depot ;
13510: LD_ADDR_EXP 94
13514: PUSH
13515: LD_EXP 94
13519: PUSH
13520: LD_INT 0
13522: ADD
13523: ST_TO_ADDR
// if btype in [ b_workshop , b_factory ] and ( FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_workshop ] , [ f_btype , b_factory ] ] ] ) diff un ) = 0 then
13524: LD_VAR 0 5
13528: PUSH
13529: LD_INT 2
13531: PUSH
13532: LD_INT 3
13534: PUSH
13535: EMPTY
13536: LIST
13537: LIST
13538: IN
13539: PUSH
13540: LD_INT 22
13542: PUSH
13543: LD_EXP 2
13547: PUSH
13548: EMPTY
13549: LIST
13550: LIST
13551: PUSH
13552: LD_INT 2
13554: PUSH
13555: LD_INT 30
13557: PUSH
13558: LD_INT 2
13560: PUSH
13561: EMPTY
13562: LIST
13563: LIST
13564: PUSH
13565: LD_INT 30
13567: PUSH
13568: LD_INT 3
13570: PUSH
13571: EMPTY
13572: LIST
13573: LIST
13574: PUSH
13575: EMPTY
13576: LIST
13577: LIST
13578: LIST
13579: PUSH
13580: EMPTY
13581: LIST
13582: LIST
13583: PPUSH
13584: CALL_OW 69
13588: PUSH
13589: LD_VAR 0 1
13593: DIFF
13594: PUSH
13595: LD_INT 0
13597: EQUAL
13598: AND
13599: IFFALSE 13615
// player_base_b_types = player_base_b_types ^ b_workshop ;
13601: LD_ADDR_EXP 94
13605: PUSH
13606: LD_EXP 94
13610: PUSH
13611: LD_INT 2
13613: ADD
13614: ST_TO_ADDR
// if btype in [ b_lab , b_lab_half , b_lab_full ] and ( FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] , [ f_btype , b_lab_full ] ] ] ) diff un ) = 0 then
13615: LD_VAR 0 5
13619: PUSH
13620: LD_INT 6
13622: PUSH
13623: LD_INT 7
13625: PUSH
13626: LD_INT 8
13628: PUSH
13629: EMPTY
13630: LIST
13631: LIST
13632: LIST
13633: IN
13634: PUSH
13635: LD_INT 22
13637: PUSH
13638: LD_EXP 2
13642: PUSH
13643: EMPTY
13644: LIST
13645: LIST
13646: PUSH
13647: LD_INT 2
13649: PUSH
13650: LD_INT 30
13652: PUSH
13653: LD_INT 6
13655: PUSH
13656: EMPTY
13657: LIST
13658: LIST
13659: PUSH
13660: LD_INT 30
13662: PUSH
13663: LD_INT 7
13665: PUSH
13666: EMPTY
13667: LIST
13668: LIST
13669: PUSH
13670: LD_INT 30
13672: PUSH
13673: LD_INT 8
13675: PUSH
13676: EMPTY
13677: LIST
13678: LIST
13679: PUSH
13680: EMPTY
13681: LIST
13682: LIST
13683: LIST
13684: LIST
13685: PUSH
13686: EMPTY
13687: LIST
13688: LIST
13689: PPUSH
13690: CALL_OW 69
13694: PUSH
13695: LD_VAR 0 1
13699: DIFF
13700: PUSH
13701: LD_INT 0
13703: EQUAL
13704: AND
13705: IFFALSE 13721
// player_base_b_types = player_base_b_types ^ b_lab ;
13707: LD_ADDR_EXP 94
13711: PUSH
13712: LD_EXP 94
13716: PUSH
13717: LD_INT 6
13719: ADD
13720: ST_TO_ADDR
// if btype in [ b_armoury , b_barracks ] and ( FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_armoury ] , [ f_btype , b_barracks ] ] ] ) diff un ) = 0 then
13721: LD_VAR 0 5
13725: PUSH
13726: LD_INT 4
13728: PUSH
13729: LD_INT 5
13731: PUSH
13732: EMPTY
13733: LIST
13734: LIST
13735: IN
13736: PUSH
13737: LD_INT 22
13739: PUSH
13740: LD_EXP 2
13744: PUSH
13745: EMPTY
13746: LIST
13747: LIST
13748: PUSH
13749: LD_INT 2
13751: PUSH
13752: LD_INT 30
13754: PUSH
13755: LD_INT 4
13757: PUSH
13758: EMPTY
13759: LIST
13760: LIST
13761: PUSH
13762: LD_INT 30
13764: PUSH
13765: LD_INT 5
13767: PUSH
13768: EMPTY
13769: LIST
13770: LIST
13771: PUSH
13772: EMPTY
13773: LIST
13774: LIST
13775: LIST
13776: PUSH
13777: EMPTY
13778: LIST
13779: LIST
13780: PPUSH
13781: CALL_OW 69
13785: PUSH
13786: LD_VAR 0 1
13790: DIFF
13791: PUSH
13792: LD_INT 0
13794: EQUAL
13795: AND
13796: IFFALSE 13812
// player_base_b_types = player_base_b_types ^ b_armoury ;
13798: LD_ADDR_EXP 94
13802: PUSH
13803: LD_EXP 94
13807: PUSH
13808: LD_INT 4
13810: ADD
13811: ST_TO_ADDR
// if temp_list = 0 and player_base_b_types > 0 and buildup_objective_can_be_completed then
13812: LD_VAR 0 3
13816: PUSH
13817: LD_INT 0
13819: EQUAL
13820: PUSH
13821: LD_EXP 94
13825: PUSH
13826: LD_INT 0
13828: GREATER
13829: AND
13830: PUSH
13831: LD_EXP 95
13835: AND
13836: IFFALSE 13852
// begin ChangeMissionObjectives ( MDelbuildup ) ;
13838: LD_STRING MDelbuildup
13840: PPUSH
13841: CALL_OW 337
// ChangeMissionObjectives ( M1 ) ;
13845: LD_STRING M1
13847: PPUSH
13848: CALL_OW 337
// end ; end ; for base in ai_bases do
13852: LD_ADDR_VAR 0 4
13856: PUSH
13857: LD_EXP 59
13861: PUSH
13862: FOR_IN
13863: IFFALSE 13914
// begin temp_list = ai_captured_buildings [ base ] diff un ;
13865: LD_ADDR_VAR 0 3
13869: PUSH
13870: LD_EXP 87
13874: PUSH
13875: LD_VAR 0 4
13879: ARRAY
13880: PUSH
13881: LD_VAR 0 1
13885: DIFF
13886: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
13887: LD_ADDR_EXP 87
13891: PUSH
13892: LD_EXP 87
13896: PPUSH
13897: LD_VAR 0 4
13901: PPUSH
13902: LD_VAR 0 3
13906: PPUSH
13907: CALL_OW 1
13911: ST_TO_ADDR
// end ;
13912: GO 13862
13914: POP
13915: POP
// if side = you then
13916: LD_VAR 0 2
13920: PUSH
13921: LD_EXP 2
13925: EQUAL
13926: IFFALSE 13930
// exit ;
13928: GO 14070
// case GetType ( un ) of unit_human :
13930: LD_VAR 0 1
13934: PPUSH
13935: CALL_OW 247
13939: PUSH
13940: LD_INT 1
13942: DOUBLE
13943: EQUAL
13944: IFTRUE 13948
13946: GO 13985
13948: POP
// begin for base in ai_bases do
13949: LD_ADDR_VAR 0 4
13953: PUSH
13954: LD_EXP 59
13958: PUSH
13959: FOR_IN
13960: IFFALSE 13981
// RemoveHumanFromVariables ( base , un , true ) ;
13962: LD_VAR 0 4
13966: PPUSH
13967: LD_VAR 0 1
13971: PPUSH
13972: LD_INT 1
13974: PPUSH
13975: CALL 14933 0 3
13979: GO 13959
13981: POP
13982: POP
// end ; unit_vehicle :
13983: GO 14070
13985: LD_INT 2
13987: DOUBLE
13988: EQUAL
13989: IFTRUE 13993
13991: GO 14027
13993: POP
// for base in ai_bases do
13994: LD_ADDR_VAR 0 4
13998: PUSH
13999: LD_EXP 59
14003: PUSH
14004: FOR_IN
14005: IFFALSE 14023
// RemoveVehicleFromVariables ( base , un ) ; unit_building :
14007: LD_VAR 0 4
14011: PPUSH
14012: LD_VAR 0 1
14016: PPUSH
14017: CALL 14274 0 2
14021: GO 14004
14023: POP
14024: POP
14025: GO 14070
14027: LD_INT 3
14029: DOUBLE
14030: EQUAL
14031: IFTRUE 14035
14033: GO 14069
14035: POP
// for base in ai_bases do
14036: LD_ADDR_VAR 0 4
14040: PUSH
14041: LD_EXP 59
14045: PUSH
14046: FOR_IN
14047: IFFALSE 14065
// RemoveBuildingFromVariables ( base , un ) ; end ;
14049: LD_VAR 0 4
14053: PPUSH
14054: LD_VAR 0 1
14058: PPUSH
14059: CALL 14073 0 2
14063: GO 14046
14065: POP
14066: POP
14067: GO 14070
14069: POP
// end ;
14070: PPOPN 5
14072: END
// function RemoveBuildingFromVariables ( base , building ) ; var temp_list ; begin
14073: LD_INT 0
14075: PPUSH
14076: PPUSH
// temp_list = ai_all_buildings [ base ] diff building ;
14077: LD_ADDR_VAR 0 4
14081: PUSH
14082: LD_EXP 45
14086: PUSH
14087: LD_VAR 0 1
14091: ARRAY
14092: PUSH
14093: LD_VAR 0 2
14097: DIFF
14098: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
14099: LD_ADDR_EXP 45
14103: PUSH
14104: LD_EXP 45
14108: PPUSH
14109: LD_VAR 0 1
14113: PPUSH
14114: LD_VAR 0 4
14118: PPUSH
14119: CALL_OW 1
14123: ST_TO_ADDR
// temp_list = ai_excepted_buildings [ base ] diff building ;
14124: LD_ADDR_VAR 0 4
14128: PUSH
14129: LD_EXP 89
14133: PUSH
14134: LD_VAR 0 1
14138: ARRAY
14139: PUSH
14140: LD_VAR 0 2
14144: DIFF
14145: ST_TO_ADDR
// ai_excepted_buildings = Replace ( ai_excepted_buildings , base , temp_list ) ;
14146: LD_ADDR_EXP 89
14150: PUSH
14151: LD_EXP 89
14155: PPUSH
14156: LD_VAR 0 1
14160: PPUSH
14161: LD_VAR 0 4
14165: PPUSH
14166: CALL_OW 1
14170: ST_TO_ADDR
// if building = ai_building_under_construction [ base ] then
14171: LD_VAR 0 2
14175: PUSH
14176: LD_EXP 43
14180: PUSH
14181: LD_VAR 0 1
14185: ARRAY
14186: EQUAL
14187: IFFALSE 14212
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
14189: LD_ADDR_EXP 43
14193: PUSH
14194: LD_EXP 43
14198: PPUSH
14199: LD_VAR 0 1
14203: PPUSH
14204: LD_INT 0
14206: PPUSH
14207: CALL_OW 1
14211: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , false ) ;
14212: LD_VAR 0 1
14216: PPUSH
14217: LD_VAR 0 2
14221: PPUSH
14222: LD_INT 0
14224: PPUSH
14225: CALL 6190 0 3
// if building = sib_rocket_factory then
14229: LD_VAR 0 2
14233: PUSH
14234: LD_EXP 91
14238: EQUAL
14239: IFFALSE 14249
// sib_rocket_factory = 0 ;
14241: LD_ADDR_EXP 91
14245: PUSH
14246: LD_INT 0
14248: ST_TO_ADDR
// if building = sib_lab then
14249: LD_VAR 0 2
14253: PUSH
14254: LD_EXP 93
14258: EQUAL
14259: IFFALSE 14269
// sib_lab = 0 ;
14261: LD_ADDR_EXP 93
14265: PUSH
14266: LD_INT 0
14268: ST_TO_ADDR
// end ;
14269: LD_VAR 0 3
14273: RET
// function RemoveVehicleFromVariables ( base , vehicle ) ; var temp_list ; begin
14274: LD_INT 0
14276: PPUSH
14277: PPUSH
// if vehicle in ai_vehicles_defend [ base ] then
14278: LD_VAR 0 2
14282: PUSH
14283: LD_EXP 39
14287: PUSH
14288: LD_VAR 0 1
14292: ARRAY
14293: IN
14294: IFFALSE 14343
// begin temp_list = ai_vehicles_defend [ base ] diff vehicle ;
14296: LD_ADDR_VAR 0 4
14300: PUSH
14301: LD_EXP 39
14305: PUSH
14306: LD_VAR 0 1
14310: ARRAY
14311: PUSH
14312: LD_VAR 0 2
14316: DIFF
14317: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
14318: LD_ADDR_EXP 39
14322: PUSH
14323: LD_EXP 39
14327: PPUSH
14328: LD_VAR 0 1
14332: PPUSH
14333: LD_VAR 0 4
14337: PPUSH
14338: CALL_OW 1
14342: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_attack [ base ] then
14343: LD_VAR 0 2
14347: PUSH
14348: LD_EXP 40
14352: PUSH
14353: LD_VAR 0 1
14357: ARRAY
14358: IN
14359: IFFALSE 14408
// begin temp_list = ai_vehicles_attack [ base ] diff vehicle ;
14361: LD_ADDR_VAR 0 4
14365: PUSH
14366: LD_EXP 40
14370: PUSH
14371: LD_VAR 0 1
14375: ARRAY
14376: PUSH
14377: LD_VAR 0 2
14381: DIFF
14382: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
14383: LD_ADDR_EXP 40
14387: PUSH
14388: LD_EXP 40
14392: PPUSH
14393: LD_VAR 0 1
14397: PPUSH
14398: LD_VAR 0 4
14402: PPUSH
14403: CALL_OW 1
14407: ST_TO_ADDR
// end ; if vehicle = ai_cargo_bay [ base ] then
14408: LD_VAR 0 2
14412: PUSH
14413: LD_EXP 61
14417: PUSH
14418: LD_VAR 0 1
14422: ARRAY
14423: EQUAL
14424: IFFALSE 14474
// begin ai_cargo_bay = Replace ( ai_cargo_bay , base , 0 ) ;
14426: LD_ADDR_EXP 61
14430: PUSH
14431: LD_EXP 61
14435: PPUSH
14436: LD_VAR 0 1
14440: PPUSH
14441: LD_INT 0
14443: PPUSH
14444: CALL_OW 1
14448: ST_TO_ADDR
// ai_cargo_bay_destroy_tick = Replace ( ai_cargo_bay_destroy_tick , base , tick ) ;
14449: LD_ADDR_EXP 82
14453: PUSH
14454: LD_EXP 82
14458: PPUSH
14459: LD_VAR 0 1
14463: PPUSH
14464: LD_OWVAR 1
14468: PPUSH
14469: CALL_OW 1
14473: ST_TO_ADDR
// end ; if vehicle = ai_crane [ base ] then
14474: LD_VAR 0 2
14478: PUSH
14479: LD_EXP 69
14483: PUSH
14484: LD_VAR 0 1
14488: ARRAY
14489: EQUAL
14490: IFFALSE 14627
// begin ai_crane = Replace ( ai_crane , base , 0 ) ;
14492: LD_ADDR_EXP 69
14496: PUSH
14497: LD_EXP 69
14501: PPUSH
14502: LD_VAR 0 1
14506: PPUSH
14507: LD_INT 0
14509: PPUSH
14510: CALL_OW 1
14514: ST_TO_ADDR
// ai_crane_destroy_tick = Replace ( ai_crane_destroy_tick , base , tick ) ;
14515: LD_ADDR_EXP 83
14519: PUSH
14520: LD_EXP 83
14524: PPUSH
14525: LD_VAR 0 1
14529: PPUSH
14530: LD_OWVAR 1
14534: PPUSH
14535: CALL_OW 1
14539: ST_TO_ADDR
// ai_crane_driver = Replace ( ai_crane_driver , base , 0 ) ;
14540: LD_ADDR_EXP 85
14544: PUSH
14545: LD_EXP 85
14549: PPUSH
14550: LD_VAR 0 1
14554: PPUSH
14555: LD_INT 0
14557: PPUSH
14558: CALL_OW 1
14562: ST_TO_ADDR
// ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , false ) ;
14563: LD_ADDR_EXP 84
14567: PUSH
14568: LD_EXP 84
14572: PPUSH
14573: LD_VAR 0 1
14577: PPUSH
14578: LD_INT 0
14580: PPUSH
14581: CALL_OW 1
14585: ST_TO_ADDR
// if vehicle = ai_building_constructor [ base ] then
14586: LD_VAR 0 2
14590: PUSH
14591: LD_EXP 46
14595: PUSH
14596: LD_VAR 0 1
14600: ARRAY
14601: EQUAL
14602: IFFALSE 14627
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
14604: LD_ADDR_EXP 46
14608: PUSH
14609: LD_EXP 46
14613: PPUSH
14614: LD_VAR 0 1
14618: PPUSH
14619: LD_INT 0
14621: PPUSH
14622: CALL_OW 1
14626: ST_TO_ADDR
// end ; if vehicle in ai_retreating_vehicles_defend [ base ] then
14627: LD_VAR 0 2
14631: PUSH
14632: LD_EXP 80
14636: PUSH
14637: LD_VAR 0 1
14641: ARRAY
14642: IN
14643: IFFALSE 14692
// begin temp_list = ai_retreating_vehicles_defend [ base ] diff vehicle ;
14645: LD_ADDR_VAR 0 4
14649: PUSH
14650: LD_EXP 80
14654: PUSH
14655: LD_VAR 0 1
14659: ARRAY
14660: PUSH
14661: LD_VAR 0 2
14665: DIFF
14666: ST_TO_ADDR
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
14667: LD_ADDR_EXP 80
14671: PUSH
14672: LD_EXP 80
14676: PPUSH
14677: LD_VAR 0 1
14681: PPUSH
14682: LD_VAR 0 4
14686: PPUSH
14687: CALL_OW 1
14691: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_being_repaired [ base ] then
14692: LD_VAR 0 2
14696: PUSH
14697: LD_EXP 88
14701: PUSH
14702: LD_VAR 0 1
14706: ARRAY
14707: IN
14708: IFFALSE 14757
// begin temp_list = ai_vehicles_being_repaired [ base ] diff vehicle ;
14710: LD_ADDR_VAR 0 4
14714: PUSH
14715: LD_EXP 88
14719: PUSH
14720: LD_VAR 0 1
14724: ARRAY
14725: PUSH
14726: LD_VAR 0 2
14730: DIFF
14731: ST_TO_ADDR
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
14732: LD_ADDR_EXP 88
14736: PUSH
14737: LD_EXP 88
14741: PPUSH
14742: LD_VAR 0 1
14746: PPUSH
14747: LD_VAR 0 4
14751: PPUSH
14752: CALL_OW 1
14756: ST_TO_ADDR
// end ; if vehicle in ai_refuel_vehicles_list [ base ] then
14757: LD_VAR 0 2
14761: PUSH
14762: LD_EXP 55
14766: PUSH
14767: LD_VAR 0 1
14771: ARRAY
14772: IN
14773: IFFALSE 14822
// begin temp_list = ai_refuel_vehicles_list [ base ] diff vehicle ;
14775: LD_ADDR_VAR 0 4
14779: PUSH
14780: LD_EXP 55
14784: PUSH
14785: LD_VAR 0 1
14789: ARRAY
14790: PUSH
14791: LD_VAR 0 2
14795: DIFF
14796: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
14797: LD_ADDR_EXP 55
14801: PUSH
14802: LD_EXP 55
14806: PPUSH
14807: LD_VAR 0 1
14811: PPUSH
14812: LD_VAR 0 4
14816: PPUSH
14817: CALL_OW 1
14821: ST_TO_ADDR
// end ; if vehicle = ai_vehicle_being_moved [ base ] then
14822: LD_VAR 0 2
14826: PUSH
14827: LD_EXP 78
14831: PUSH
14832: LD_VAR 0 1
14836: ARRAY
14837: EQUAL
14838: IFFALSE 14863
// ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
14840: LD_ADDR_EXP 78
14844: PUSH
14845: LD_EXP 78
14849: PPUSH
14850: LD_VAR 0 1
14854: PPUSH
14855: LD_INT 0
14857: PPUSH
14858: CALL_OW 1
14862: ST_TO_ADDR
// if vehicle in ai_vehicles_having_been_moved [ base ] then
14863: LD_VAR 0 2
14867: PUSH
14868: LD_EXP 79
14872: PUSH
14873: LD_VAR 0 1
14877: ARRAY
14878: IN
14879: IFFALSE 14928
// begin temp_list = ai_vehicles_having_been_moved [ base ] diff vehicle ;
14881: LD_ADDR_VAR 0 4
14885: PUSH
14886: LD_EXP 79
14890: PUSH
14891: LD_VAR 0 1
14895: ARRAY
14896: PUSH
14897: LD_VAR 0 2
14901: DIFF
14902: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , temp_list ) ;
14903: LD_ADDR_EXP 79
14907: PUSH
14908: LD_EXP 79
14912: PPUSH
14913: LD_VAR 0 1
14917: PPUSH
14918: LD_VAR 0 4
14922: PPUSH
14923: CALL_OW 1
14927: ST_TO_ADDR
// end ; end ;
14928: LD_VAR 0 3
14932: RET
// function RemoveHumanFromVariables ( base , human , check_if_base_is_dead ) ; var temp_list ; begin
14933: LD_INT 0
14935: PPUSH
14936: PPUSH
// if human in ai_soldiers [ base ] then
14937: LD_VAR 0 2
14941: PUSH
14942: LD_EXP 29
14946: PUSH
14947: LD_VAR 0 1
14951: ARRAY
14952: IN
14953: IFFALSE 15002
// begin temp_list = ai_soldiers [ base ] diff human ;
14955: LD_ADDR_VAR 0 5
14959: PUSH
14960: LD_EXP 29
14964: PUSH
14965: LD_VAR 0 1
14969: ARRAY
14970: PUSH
14971: LD_VAR 0 2
14975: DIFF
14976: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
14977: LD_ADDR_EXP 29
14981: PUSH
14982: LD_EXP 29
14986: PPUSH
14987: LD_VAR 0 1
14991: PPUSH
14992: LD_VAR 0 5
14996: PPUSH
14997: CALL_OW 1
15001: ST_TO_ADDR
// end ; if human in ai_attacking_soldiers [ base ] then
15002: LD_VAR 0 2
15006: PUSH
15007: LD_EXP 64
15011: PUSH
15012: LD_VAR 0 1
15016: ARRAY
15017: IN
15018: IFFALSE 15067
// begin temp_list = ai_attacking_soldiers [ base ] diff human ;
15020: LD_ADDR_VAR 0 5
15024: PUSH
15025: LD_EXP 64
15029: PUSH
15030: LD_VAR 0 1
15034: ARRAY
15035: PUSH
15036: LD_VAR 0 2
15040: DIFF
15041: ST_TO_ADDR
// ai_attacking_soldiers = Replace ( ai_attacking_soldiers , base , temp_list ) ;
15042: LD_ADDR_EXP 64
15046: PUSH
15047: LD_EXP 64
15051: PPUSH
15052: LD_VAR 0 1
15056: PPUSH
15057: LD_VAR 0 5
15061: PPUSH
15062: CALL_OW 1
15066: ST_TO_ADDR
// end ; if human in ai_engineers [ base ] then
15067: LD_VAR 0 2
15071: PUSH
15072: LD_EXP 30
15076: PUSH
15077: LD_VAR 0 1
15081: ARRAY
15082: IN
15083: IFFALSE 15132
// begin temp_list = ai_engineers [ base ] diff human ;
15085: LD_ADDR_VAR 0 5
15089: PUSH
15090: LD_EXP 30
15094: PUSH
15095: LD_VAR 0 1
15099: ARRAY
15100: PUSH
15101: LD_VAR 0 2
15105: DIFF
15106: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , base , temp_list ) ;
15107: LD_ADDR_EXP 30
15111: PUSH
15112: LD_EXP 30
15116: PPUSH
15117: LD_VAR 0 1
15121: PPUSH
15122: LD_VAR 0 5
15126: PPUSH
15127: CALL_OW 1
15131: ST_TO_ADDR
// end ; if human in ai_apemen_engineers [ base ] then
15132: LD_VAR 0 2
15136: PUSH
15137: LD_EXP 63
15141: PUSH
15142: LD_VAR 0 1
15146: ARRAY
15147: IN
15148: IFFALSE 15197
// begin temp_list = ai_apemen_engineers [ base ] diff human ;
15150: LD_ADDR_VAR 0 5
15154: PUSH
15155: LD_EXP 63
15159: PUSH
15160: LD_VAR 0 1
15164: ARRAY
15165: PUSH
15166: LD_VAR 0 2
15170: DIFF
15171: ST_TO_ADDR
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , temp_list ) ;
15172: LD_ADDR_EXP 63
15176: PUSH
15177: LD_EXP 63
15181: PPUSH
15182: LD_VAR 0 1
15186: PPUSH
15187: LD_VAR 0 5
15191: PPUSH
15192: CALL_OW 1
15196: ST_TO_ADDR
// end ; if human in ai_mechanics_defend [ base ] then
15197: LD_VAR 0 2
15201: PUSH
15202: LD_EXP 31
15206: PUSH
15207: LD_VAR 0 1
15211: ARRAY
15212: IN
15213: IFFALSE 15262
// begin temp_list = ai_mechanics_defend [ base ] diff human ;
15215: LD_ADDR_VAR 0 5
15219: PUSH
15220: LD_EXP 31
15224: PUSH
15225: LD_VAR 0 1
15229: ARRAY
15230: PUSH
15231: LD_VAR 0 2
15235: DIFF
15236: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , temp_list ) ;
15237: LD_ADDR_EXP 31
15241: PUSH
15242: LD_EXP 31
15246: PPUSH
15247: LD_VAR 0 1
15251: PPUSH
15252: LD_VAR 0 5
15256: PPUSH
15257: CALL_OW 1
15261: ST_TO_ADDR
// end ; if human in ai_mechanics_attack [ base ] then
15262: LD_VAR 0 2
15266: PUSH
15267: LD_EXP 81
15271: PUSH
15272: LD_VAR 0 1
15276: ARRAY
15277: IN
15278: IFFALSE 15327
// begin temp_list = ai_mechanics_attack [ base ] diff human ;
15280: LD_ADDR_VAR 0 5
15284: PUSH
15285: LD_EXP 81
15289: PUSH
15290: LD_VAR 0 1
15294: ARRAY
15295: PUSH
15296: LD_VAR 0 2
15300: DIFF
15301: ST_TO_ADDR
// ai_mechanics_attack = Replace ( ai_mechanics_attack , base , temp_list ) ;
15302: LD_ADDR_EXP 81
15306: PUSH
15307: LD_EXP 81
15311: PPUSH
15312: LD_VAR 0 1
15316: PPUSH
15317: LD_VAR 0 5
15321: PPUSH
15322: CALL_OW 1
15326: ST_TO_ADDR
// end ; if human in ai_sib_bomb_mechanics [ base ] then
15327: LD_VAR 0 2
15331: PUSH
15332: LD_EXP 90
15336: PUSH
15337: LD_VAR 0 1
15341: ARRAY
15342: IN
15343: IFFALSE 15392
// begin temp_list = ai_sib_bomb_mechanics [ base ] diff human ;
15345: LD_ADDR_VAR 0 5
15349: PUSH
15350: LD_EXP 90
15354: PUSH
15355: LD_VAR 0 1
15359: ARRAY
15360: PUSH
15361: LD_VAR 0 2
15365: DIFF
15366: ST_TO_ADDR
// ai_sib_bomb_mechanics = Replace ( ai_sib_bomb_mechanics , base , temp_list ) ;
15367: LD_ADDR_EXP 90
15371: PUSH
15372: LD_EXP 90
15376: PPUSH
15377: LD_VAR 0 1
15381: PPUSH
15382: LD_VAR 0 5
15386: PPUSH
15387: CALL_OW 1
15391: ST_TO_ADDR
// end ; if human in ai_scientists [ base ] then
15392: LD_VAR 0 2
15396: PUSH
15397: LD_EXP 32
15401: PUSH
15402: LD_VAR 0 1
15406: ARRAY
15407: IN
15408: IFFALSE 15457
// begin temp_list = ai_scientists [ base ] diff human ;
15410: LD_ADDR_VAR 0 5
15414: PUSH
15415: LD_EXP 32
15419: PUSH
15420: LD_VAR 0 1
15424: ARRAY
15425: PUSH
15426: LD_VAR 0 2
15430: DIFF
15431: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , temp_list ) ;
15432: LD_ADDR_EXP 32
15436: PUSH
15437: LD_EXP 32
15441: PPUSH
15442: LD_VAR 0 1
15446: PPUSH
15447: LD_VAR 0 5
15451: PPUSH
15452: CALL_OW 1
15456: ST_TO_ADDR
// end ; if human in ai_attacking_scientists [ base ] then
15457: LD_VAR 0 2
15461: PUSH
15462: LD_EXP 65
15466: PUSH
15467: LD_VAR 0 1
15471: ARRAY
15472: IN
15473: IFFALSE 15522
// begin temp_list = ai_attacking_scientists [ base ] diff human ;
15475: LD_ADDR_VAR 0 5
15479: PUSH
15480: LD_EXP 65
15484: PUSH
15485: LD_VAR 0 1
15489: ARRAY
15490: PUSH
15491: LD_VAR 0 2
15495: DIFF
15496: ST_TO_ADDR
// ai_attacking_scientists = Replace ( ai_attacking_scientists , base , temp_list ) ;
15497: LD_ADDR_EXP 65
15501: PUSH
15502: LD_EXP 65
15506: PPUSH
15507: LD_VAR 0 1
15511: PPUSH
15512: LD_VAR 0 5
15516: PPUSH
15517: CALL_OW 1
15521: ST_TO_ADDR
// end ; if human in ai_heal_these_humans [ base ] then
15522: LD_VAR 0 2
15526: PUSH
15527: LD_EXP 44
15531: PUSH
15532: LD_VAR 0 1
15536: ARRAY
15537: IN
15538: IFFALSE 15587
// begin temp_list = ai_heal_these_humans [ base ] diff human ;
15540: LD_ADDR_VAR 0 5
15544: PUSH
15545: LD_EXP 44
15549: PUSH
15550: LD_VAR 0 1
15554: ARRAY
15555: PUSH
15556: LD_VAR 0 2
15560: DIFF
15561: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
15562: LD_ADDR_EXP 44
15566: PUSH
15567: LD_EXP 44
15571: PPUSH
15572: LD_VAR 0 1
15576: PPUSH
15577: LD_VAR 0 5
15581: PPUSH
15582: CALL_OW 1
15586: ST_TO_ADDR
// end ; if human = ai_building_constructor [ base ] then
15587: LD_VAR 0 2
15591: PUSH
15592: LD_EXP 46
15596: PUSH
15597: LD_VAR 0 1
15601: ARRAY
15602: EQUAL
15603: IFFALSE 15628
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
15605: LD_ADDR_EXP 46
15609: PUSH
15610: LD_EXP 46
15614: PPUSH
15615: LD_VAR 0 1
15619: PPUSH
15620: LD_INT 0
15622: PPUSH
15623: CALL_OW 1
15627: ST_TO_ADDR
// if human in ai_retreating_attacking_humans [ base ] then
15628: LD_VAR 0 2
15632: PUSH
15633: LD_EXP 67
15637: PUSH
15638: LD_VAR 0 1
15642: ARRAY
15643: IN
15644: IFFALSE 15693
// begin temp_list = ai_retreating_attacking_humans [ base ] diff human ;
15646: LD_ADDR_VAR 0 5
15650: PUSH
15651: LD_EXP 67
15655: PUSH
15656: LD_VAR 0 1
15660: ARRAY
15661: PUSH
15662: LD_VAR 0 2
15666: DIFF
15667: ST_TO_ADDR
// ai_retreating_attacking_humans = Replace ( ai_retreating_attacking_humans , base , temp_list ) ;
15668: LD_ADDR_EXP 67
15672: PUSH
15673: LD_EXP 67
15677: PPUSH
15678: LD_VAR 0 1
15682: PPUSH
15683: LD_VAR 0 5
15687: PPUSH
15688: CALL_OW 1
15692: ST_TO_ADDR
// end ; if human = ai_crane_driver [ base ] then
15693: LD_VAR 0 2
15697: PUSH
15698: LD_EXP 85
15702: PUSH
15703: LD_VAR 0 1
15707: ARRAY
15708: EQUAL
15709: IFFALSE 15734
// ai_crane_driver = Replace ( ai_crane_driver , base , 0 ) ;
15711: LD_ADDR_EXP 85
15715: PUSH
15716: LD_EXP 85
15720: PPUSH
15721: LD_VAR 0 1
15725: PPUSH
15726: LD_INT 0
15728: PPUSH
15729: CALL_OW 1
15733: ST_TO_ADDR
// if check_if_base_is_dead then
15734: LD_VAR 0 3
15738: IFFALSE 15872
// 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
15740: LD_EXP 29
15744: PUSH
15745: LD_VAR 0 1
15749: ARRAY
15750: PUSH
15751: LD_EXP 64
15755: PUSH
15756: LD_VAR 0 1
15760: ARRAY
15761: ADD
15762: PUSH
15763: LD_EXP 30
15767: PUSH
15768: LD_VAR 0 1
15772: ARRAY
15773: ADD
15774: PUSH
15775: LD_EXP 63
15779: PUSH
15780: LD_VAR 0 1
15784: ARRAY
15785: ADD
15786: PUSH
15787: LD_EXP 31
15791: PUSH
15792: LD_VAR 0 1
15796: ARRAY
15797: ADD
15798: PUSH
15799: LD_EXP 81
15803: PUSH
15804: LD_VAR 0 1
15808: ARRAY
15809: ADD
15810: PUSH
15811: LD_EXP 90
15815: PUSH
15816: LD_VAR 0 1
15820: ARRAY
15821: ADD
15822: PUSH
15823: LD_EXP 32
15827: PUSH
15828: LD_VAR 0 1
15832: ARRAY
15833: ADD
15834: PUSH
15835: LD_EXP 65
15839: PUSH
15840: LD_VAR 0 1
15844: ARRAY
15845: ADD
15846: PUSH
15847: LD_INT 0
15849: DIFF
15850: PUSH
15851: LD_INT 0
15853: EQUAL
15854: IFFALSE 15872
// ai_bases = ai_bases diff base ;
15856: LD_ADDR_EXP 59
15860: PUSH
15861: LD_EXP 59
15865: PUSH
15866: LD_VAR 0 1
15870: DIFF
15871: ST_TO_ADDR
// end ;
15872: LD_VAR 0 4
15876: RET
// export function GetBaseArea ( base ) ; begin
15877: LD_INT 0
15879: PPUSH
// case base of 1 :
15880: LD_VAR 0 1
15884: PUSH
15885: LD_INT 1
15887: DOUBLE
15888: EQUAL
15889: IFTRUE 15893
15891: GO 15904
15893: POP
// result = Am_base ; 2 :
15894: LD_ADDR_VAR 0 2
15898: PUSH
15899: LD_INT 2
15901: ST_TO_ADDR
15902: GO 15943
15904: LD_INT 2
15906: DOUBLE
15907: EQUAL
15908: IFTRUE 15912
15910: GO 15923
15912: POP
// result = Am_small_base ; 3 :
15913: LD_ADDR_VAR 0 2
15917: PUSH
15918: LD_INT 3
15920: ST_TO_ADDR
15921: GO 15943
15923: LD_INT 3
15925: DOUBLE
15926: EQUAL
15927: IFTRUE 15931
15929: GO 15942
15931: POP
// result = gensher_base_area ; end ;
15932: LD_ADDR_VAR 0 2
15936: PUSH
15937: LD_INT 18
15939: ST_TO_ADDR
15940: GO 15943
15942: POP
// end ;
15943: LD_VAR 0 2
15947: RET
// function GetBaseSide ( base ) ; begin
15948: LD_INT 0
15950: PPUSH
// case base of 1 :
15951: LD_VAR 0 1
15955: PUSH
15956: LD_INT 1
15958: DOUBLE
15959: EQUAL
15960: IFTRUE 15964
15962: GO 15977
15964: POP
// result = americans ; 2 :
15965: LD_ADDR_VAR 0 2
15969: PUSH
15970: LD_EXP 5
15974: ST_TO_ADDR
15975: GO 16020
15977: LD_INT 2
15979: DOUBLE
15980: EQUAL
15981: IFTRUE 15985
15983: GO 15998
15985: POP
// result = americans ; 3 :
15986: LD_ADDR_VAR 0 2
15990: PUSH
15991: LD_EXP 5
15995: ST_TO_ADDR
15996: GO 16020
15998: LD_INT 3
16000: DOUBLE
16001: EQUAL
16002: IFTRUE 16006
16004: GO 16019
16006: POP
// result = upf ; end ;
16007: LD_ADDR_VAR 0 2
16011: PUSH
16012: LD_EXP 6
16016: ST_TO_ADDR
16017: GO 16020
16019: POP
// end ;
16020: LD_VAR 0 2
16024: RET
// function GetBaseNation ( base ) ; begin
16025: LD_INT 0
16027: PPUSH
// case base of 1 :
16028: LD_VAR 0 1
16032: PUSH
16033: LD_INT 1
16035: DOUBLE
16036: EQUAL
16037: IFTRUE 16041
16039: GO 16052
16041: POP
// result = nation_american ; 2 :
16042: LD_ADDR_VAR 0 2
16046: PUSH
16047: LD_INT 1
16049: ST_TO_ADDR
16050: GO 16091
16052: LD_INT 2
16054: DOUBLE
16055: EQUAL
16056: IFTRUE 16060
16058: GO 16071
16060: POP
// result = nation_american ; 3 :
16061: LD_ADDR_VAR 0 2
16065: PUSH
16066: LD_INT 1
16068: ST_TO_ADDR
16069: GO 16091
16071: LD_INT 3
16073: DOUBLE
16074: EQUAL
16075: IFTRUE 16079
16077: GO 16090
16079: POP
// result = nation_arabian ; end ;
16080: LD_ADDR_VAR 0 2
16084: PUSH
16085: LD_INT 2
16087: ST_TO_ADDR
16088: GO 16091
16090: POP
// end ;
16091: LD_VAR 0 2
16095: RET
// function FindBase ( un ) ; var i ; begin
16096: LD_INT 0
16098: PPUSH
16099: PPUSH
// if GetY ( un ) >= 95 then
16100: LD_VAR 0 1
16104: PPUSH
16105: CALL_OW 251
16109: PUSH
16110: LD_INT 95
16112: GREATEREQUAL
16113: IFFALSE 16125
// result = 2 else
16115: LD_ADDR_VAR 0 2
16119: PUSH
16120: LD_INT 2
16122: ST_TO_ADDR
16123: GO 16133
// result = 1 ;
16125: LD_ADDR_VAR 0 2
16129: PUSH
16130: LD_INT 1
16132: ST_TO_ADDR
// end ;
16133: LD_VAR 0 2
16137: RET
// every 0 0$1 + 0 0$0.1 do var side , i , temp_list , buildings_list , soldiers_list , temp_unit , base , val , special_units , bunkers , under_attack , j ; var am_snipers , temp_list_2 , am_br4_sol ;
16138: GO 16140
16140: DISABLE
16141: LD_INT 0
16143: PPUSH
16144: PPUSH
16145: PPUSH
16146: PPUSH
16147: PPUSH
16148: PPUSH
16149: PPUSH
16150: PPUSH
16151: PPUSH
16152: PPUSH
16153: PPUSH
16154: PPUSH
16155: PPUSH
16156: PPUSH
16157: PPUSH
// begin temp_list = UnitFilter ( ai_soldiers [ 1 ] , [ f_class , class_sniper ] ) ;
16158: LD_ADDR_VAR 0 3
16162: PUSH
16163: LD_EXP 29
16167: PUSH
16168: LD_INT 1
16170: ARRAY
16171: PPUSH
16172: LD_INT 25
16174: PUSH
16175: LD_INT 5
16177: PUSH
16178: EMPTY
16179: LIST
16180: LIST
16181: PPUSH
16182: CALL_OW 72
16186: ST_TO_ADDR
// if temp_list > 0 then
16187: LD_VAR 0 3
16191: PUSH
16192: LD_INT 0
16194: GREATER
16195: IFFALSE 16213
// am_br4_sol = temp_list [ 1 ] else
16197: LD_ADDR_VAR 0 15
16201: PUSH
16202: LD_VAR 0 3
16206: PUSH
16207: LD_INT 1
16209: ARRAY
16210: ST_TO_ADDR
16211: GO 16221
// am_br4_sol = 0 ;
16213: LD_ADDR_VAR 0 15
16217: PUSH
16218: LD_INT 0
16220: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
16221: LD_INT 35
16223: PPUSH
16224: CALL_OW 67
// for base in ai_bases do
16228: LD_ADDR_VAR 0 7
16232: PUSH
16233: LD_EXP 59
16237: PUSH
16238: FOR_IN
16239: IFFALSE 17809
// begin side = GetBaseSide ( base ) ;
16241: LD_ADDR_VAR 0 1
16245: PUSH
16246: LD_VAR 0 7
16250: PPUSH
16251: CALL 15948 0 1
16255: ST_TO_ADDR
// soldiers_list = ai_soldiers [ base ] ;
16256: LD_ADDR_VAR 0 5
16260: PUSH
16261: LD_EXP 29
16265: PUSH
16266: LD_VAR 0 7
16270: ARRAY
16271: ST_TO_ADDR
// under_attack := BaseUnderAttack ( base , - 1 ) ;
16272: LD_ADDR_VAR 0 11
16276: PUSH
16277: LD_VAR 0 7
16281: PPUSH
16282: LD_INT 1
16284: NEG
16285: PPUSH
16286: CALL 28793 0 2
16290: ST_TO_ADDR
// if base = 1 and under_attack then
16291: LD_VAR 0 7
16295: PUSH
16296: LD_INT 1
16298: EQUAL
16299: PUSH
16300: LD_VAR 0 11
16304: AND
16305: IFFALSE 16357
// am_snipers = UnitFilter ( ai_soldiers [ base ] , [ [ f_class , class_sniper ] , [ f_not , [ f_inside ] ] ] ) else
16307: LD_ADDR_VAR 0 13
16311: PUSH
16312: LD_EXP 29
16316: PUSH
16317: LD_VAR 0 7
16321: ARRAY
16322: PPUSH
16323: LD_INT 25
16325: PUSH
16326: LD_INT 5
16328: PUSH
16329: EMPTY
16330: LIST
16331: LIST
16332: PUSH
16333: LD_INT 3
16335: PUSH
16336: LD_INT 54
16338: PUSH
16339: EMPTY
16340: LIST
16341: PUSH
16342: EMPTY
16343: LIST
16344: LIST
16345: PUSH
16346: EMPTY
16347: LIST
16348: LIST
16349: PPUSH
16350: CALL_OW 72
16354: ST_TO_ADDR
16355: GO 16364
// am_snipers = [ ] ;
16357: LD_ADDR_VAR 0 13
16361: PUSH
16362: EMPTY
16363: ST_TO_ADDR
// if base = 1 then
16364: LD_VAR 0 7
16368: PUSH
16369: LD_INT 1
16371: EQUAL
16372: IFFALSE 16481
// begin temp_list = ai_heal_these_humans [ base ] ;
16374: LD_ADDR_VAR 0 3
16378: PUSH
16379: LD_EXP 44
16383: PUSH
16384: LD_VAR 0 7
16388: ARRAY
16389: ST_TO_ADDR
// for i in soldiers_list diff ( ai_heal_these_humans [ base ] ^ am_snipers ) do
16390: LD_ADDR_VAR 0 2
16394: PUSH
16395: LD_VAR 0 5
16399: PUSH
16400: LD_EXP 44
16404: PUSH
16405: LD_VAR 0 7
16409: ARRAY
16410: PUSH
16411: LD_VAR 0 13
16415: ADD
16416: DIFF
16417: PUSH
16418: FOR_IN
16419: IFFALSE 16454
// if GetLives ( i ) < 800 then
16421: LD_VAR 0 2
16425: PPUSH
16426: CALL_OW 256
16430: PUSH
16431: LD_INT 800
16433: LESS
16434: IFFALSE 16452
// temp_list = temp_list ^ i ;
16436: LD_ADDR_VAR 0 3
16440: PUSH
16441: LD_VAR 0 3
16445: PUSH
16446: LD_VAR 0 2
16450: ADD
16451: ST_TO_ADDR
16452: GO 16418
16454: POP
16455: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
16456: LD_ADDR_EXP 44
16460: PUSH
16461: LD_EXP 44
16465: PPUSH
16466: LD_VAR 0 7
16470: PPUSH
16471: LD_VAR 0 3
16475: PPUSH
16476: CALL_OW 1
16480: ST_TO_ADDR
// end ; temp_list = ai_heal_these_humans [ base ] ;
16481: LD_ADDR_VAR 0 3
16485: PUSH
16486: LD_EXP 44
16490: PUSH
16491: LD_VAR 0 7
16495: ARRAY
16496: ST_TO_ADDR
// for i in am_snipers diff ai_heal_these_humans [ base ] do
16497: LD_ADDR_VAR 0 2
16501: PUSH
16502: LD_VAR 0 13
16506: PUSH
16507: LD_EXP 44
16511: PUSH
16512: LD_VAR 0 7
16516: ARRAY
16517: DIFF
16518: PUSH
16519: FOR_IN
16520: IFFALSE 16555
// if GetLives ( i ) <= 500 then
16522: LD_VAR 0 2
16526: PPUSH
16527: CALL_OW 256
16531: PUSH
16532: LD_INT 500
16534: LESSEQUAL
16535: IFFALSE 16553
// temp_list = temp_list ^ i ;
16537: LD_ADDR_VAR 0 3
16541: PUSH
16542: LD_VAR 0 3
16546: PUSH
16547: LD_VAR 0 2
16551: ADD
16552: ST_TO_ADDR
16553: GO 16519
16555: POP
16556: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
16557: LD_ADDR_EXP 44
16561: PUSH
16562: LD_EXP 44
16566: PPUSH
16567: LD_VAR 0 7
16571: PPUSH
16572: LD_VAR 0 3
16576: PPUSH
16577: CALL_OW 1
16581: ST_TO_ADDR
// if not under_attack then
16582: LD_VAR 0 11
16586: NOT
16587: IFFALSE 16724
// begin for i in ai_heal_these_humans [ base ] do
16589: LD_ADDR_VAR 0 2
16593: PUSH
16594: LD_EXP 44
16598: PUSH
16599: LD_VAR 0 7
16603: ARRAY
16604: PUSH
16605: FOR_IN
16606: IFFALSE 16678
// if i in soldiers_list then
16608: LD_VAR 0 2
16612: PUSH
16613: LD_VAR 0 5
16617: IN
16618: IFFALSE 16676
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
16620: LD_VAR 0 2
16624: PPUSH
16625: CALL_OW 310
16629: PPUSH
16630: CALL_OW 247
16634: PUSH
16635: LD_INT 2
16637: DOUBLE
16638: EQUAL
16639: IFTRUE 16643
16641: GO 16655
16643: POP
// ComExitVehicle ( i ) ; unit_building :
16644: LD_VAR 0 2
16648: PPUSH
16649: CALL_OW 121
16653: GO 16676
16655: LD_INT 3
16657: DOUBLE
16658: EQUAL
16659: IFTRUE 16663
16661: GO 16675
16663: POP
// ComExitBuilding ( i ) ; end ;
16664: LD_VAR 0 2
16668: PPUSH
16669: CALL_OW 122
16673: GO 16676
16675: POP
16676: GO 16605
16678: POP
16679: POP
// soldiers_list = soldiers_list diff ai_heal_these_humans [ base ] ;
16680: LD_ADDR_VAR 0 5
16684: PUSH
16685: LD_VAR 0 5
16689: PUSH
16690: LD_EXP 44
16694: PUSH
16695: LD_VAR 0 7
16699: ARRAY
16700: DIFF
16701: ST_TO_ADDR
// am_snipers = am_snipers diff ai_heal_these_humans [ base ] ;
16702: LD_ADDR_VAR 0 13
16706: PUSH
16707: LD_VAR 0 13
16711: PUSH
16712: LD_EXP 44
16716: PUSH
16717: LD_VAR 0 7
16721: ARRAY
16722: DIFF
16723: ST_TO_ADDR
// end ; if soldiers_list = 0 then
16724: LD_VAR 0 5
16728: PUSH
16729: LD_INT 0
16731: EQUAL
16732: IFFALSE 16736
// continue ;
16734: GO 16238
// if am_snipers > 0 then
16736: LD_VAR 0 13
16740: PUSH
16741: LD_INT 0
16743: GREATER
16744: IFFALSE 16918
// begin temp_list_2 = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_inarea , am_sniper_defend_area_south ] ] ) ;
16746: LD_ADDR_VAR 0 14
16750: PUSH
16751: LD_INT 81
16753: PUSH
16754: LD_VAR 0 1
16758: PUSH
16759: EMPTY
16760: LIST
16761: LIST
16762: PUSH
16763: LD_INT 21
16765: PUSH
16766: LD_INT 1
16768: PUSH
16769: EMPTY
16770: LIST
16771: LIST
16772: PUSH
16773: LD_INT 95
16775: PUSH
16776: LD_INT 6
16778: PUSH
16779: EMPTY
16780: LIST
16781: LIST
16782: PUSH
16783: EMPTY
16784: LIST
16785: LIST
16786: LIST
16787: PPUSH
16788: CALL_OW 69
16792: ST_TO_ADDR
// if temp_list_2 = 0 then
16793: LD_VAR 0 14
16797: PUSH
16798: LD_INT 0
16800: EQUAL
16801: IFFALSE 16850
// temp_list_2 = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_inarea , am_sniper_defend_area_north ] ] ) ;
16803: LD_ADDR_VAR 0 14
16807: PUSH
16808: LD_INT 81
16810: PUSH
16811: LD_VAR 0 1
16815: PUSH
16816: EMPTY
16817: LIST
16818: LIST
16819: PUSH
16820: LD_INT 21
16822: PUSH
16823: LD_INT 1
16825: PUSH
16826: EMPTY
16827: LIST
16828: LIST
16829: PUSH
16830: LD_INT 95
16832: PUSH
16833: LD_INT 5
16835: PUSH
16836: EMPTY
16837: LIST
16838: LIST
16839: PUSH
16840: EMPTY
16841: LIST
16842: LIST
16843: LIST
16844: PPUSH
16845: CALL_OW 69
16849: ST_TO_ADDR
// if temp_list_2 > 0 then
16850: LD_VAR 0 14
16854: PUSH
16855: LD_INT 0
16857: GREATER
16858: IFFALSE 16918
// begin soldiers_list = soldiers_list diff am_snipers ;
16860: LD_ADDR_VAR 0 5
16864: PUSH
16865: LD_VAR 0 5
16869: PUSH
16870: LD_VAR 0 13
16874: DIFF
16875: ST_TO_ADDR
// ComAgressiveMove ( GetHumansOutOfUnits ( am_snipers ) , GetX ( temp_list_2 [ 1 ] ) , GetY ( temp_list_2 [ 1 ] ) ) ;
16876: LD_VAR 0 13
16880: PPUSH
16881: CALL 28688 0 1
16885: PPUSH
16886: LD_VAR 0 14
16890: PUSH
16891: LD_INT 1
16893: ARRAY
16894: PPUSH
16895: CALL_OW 250
16899: PPUSH
16900: LD_VAR 0 14
16904: PUSH
16905: LD_INT 1
16907: ARRAY
16908: PPUSH
16909: CALL_OW 251
16913: PPUSH
16914: CALL_OW 114
// end ; end ; i = false ;
16918: LD_ADDR_VAR 0 2
16922: PUSH
16923: LD_INT 0
16925: ST_TO_ADDR
// if IsOk ( ai_depot [ base ] ) then
16926: LD_EXP 34
16930: PUSH
16931: LD_VAR 0 7
16935: ARRAY
16936: PPUSH
16937: CALL_OW 302
16941: IFFALSE 16981
// if GetEnergy ( GetBase ( ai_depot [ base ] ) ) [ 4 ] > 0 then
16943: LD_EXP 34
16947: PUSH
16948: LD_VAR 0 7
16952: ARRAY
16953: PPUSH
16954: CALL_OW 274
16958: PPUSH
16959: CALL_OW 278
16963: PUSH
16964: LD_INT 4
16966: ARRAY
16967: PUSH
16968: LD_INT 0
16970: GREATER
16971: IFFALSE 16981
// i = true ;
16973: LD_ADDR_VAR 0 2
16977: PUSH
16978: LD_INT 1
16980: ST_TO_ADDR
// if i then
16981: LD_VAR 0 2
16985: IFFALSE 17005
// bunkers = ai_bunkers [ base ] else
16987: LD_ADDR_VAR 0 10
16991: PUSH
16992: LD_EXP 50
16996: PUSH
16997: LD_VAR 0 7
17001: ARRAY
17002: ST_TO_ADDR
17003: GO 17066
// begin bunkers = [ ] ;
17005: LD_ADDR_VAR 0 10
17009: PUSH
17010: EMPTY
17011: ST_TO_ADDR
// for i in ai_bunkers [ base ] do
17012: LD_ADDR_VAR 0 2
17016: PUSH
17017: LD_EXP 50
17021: PUSH
17022: LD_VAR 0 7
17026: ARRAY
17027: PUSH
17028: FOR_IN
17029: IFFALSE 17064
// if GetBType ( i ) = b_breastwork then
17031: LD_VAR 0 2
17035: PPUSH
17036: CALL_OW 266
17040: PUSH
17041: LD_INT 31
17043: EQUAL
17044: IFFALSE 17062
// bunkers = bunkers ^ i ;
17046: LD_ADDR_VAR 0 10
17050: PUSH
17051: LD_VAR 0 10
17055: PUSH
17056: LD_VAR 0 2
17060: ADD
17061: ST_TO_ADDR
17062: GO 17028
17064: POP
17065: POP
// end ; bunkers = bunkers diff am_br4 ;
17066: LD_ADDR_VAR 0 10
17070: PUSH
17071: LD_VAR 0 10
17075: PUSH
17076: LD_INT 3
17078: DIFF
17079: ST_TO_ADDR
// if base = 1 and IsOk ( am_br4 ) and IsOk ( am_br4_sol ) and am_br4_sol in soldiers_list then
17080: LD_VAR 0 7
17084: PUSH
17085: LD_INT 1
17087: EQUAL
17088: PUSH
17089: LD_INT 3
17091: PPUSH
17092: CALL_OW 302
17096: AND
17097: PUSH
17098: LD_VAR 0 15
17102: PPUSH
17103: CALL_OW 302
17107: AND
17108: PUSH
17109: LD_VAR 0 15
17113: PUSH
17114: LD_VAR 0 5
17118: IN
17119: AND
17120: IFFALSE 17166
// begin soldiers_list = soldiers_list diff am_br4_sol ;
17122: LD_ADDR_VAR 0 5
17126: PUSH
17127: LD_VAR 0 5
17131: PUSH
17132: LD_VAR 0 15
17136: DIFF
17137: ST_TO_ADDR
// if not IsInUnit ( am_br4_sol ) = am_br4 then
17138: LD_VAR 0 15
17142: PPUSH
17143: CALL_OW 310
17147: PUSH
17148: LD_INT 3
17150: EQUAL
17151: NOT
17152: IFFALSE 17166
// ComEnterUnit ( am_br4_sol , am_br4 ) ;
17154: LD_VAR 0 15
17158: PPUSH
17159: LD_INT 3
17161: PPUSH
17162: CALL_OW 120
// end ; buildings_list = [ ] ;
17166: LD_ADDR_VAR 0 4
17170: PUSH
17171: EMPTY
17172: ST_TO_ADDR
// for i in UnitFilter ( bunkers , [ f_ok ] ) do
17173: LD_ADDR_VAR 0 2
17177: PUSH
17178: LD_VAR 0 10
17182: PPUSH
17183: LD_INT 50
17185: PUSH
17186: EMPTY
17187: LIST
17188: PPUSH
17189: CALL_OW 72
17193: PUSH
17194: FOR_IN
17195: IFFALSE 17258
// begin temp_unit = UnitsInside ( i ) ;
17197: LD_ADDR_VAR 0 6
17201: PUSH
17202: LD_VAR 0 2
17206: PPUSH
17207: CALL_OW 313
17211: ST_TO_ADDR
// if temp_unit = 0 then
17212: LD_VAR 0 6
17216: PUSH
17217: LD_INT 0
17219: EQUAL
17220: IFFALSE 17240
// buildings_list = buildings_list ^ i else
17222: LD_ADDR_VAR 0 4
17226: PUSH
17227: LD_VAR 0 4
17231: PUSH
17232: LD_VAR 0 2
17236: ADD
17237: ST_TO_ADDR
17238: GO 17256
// soldiers_list = soldiers_list diff temp_unit ;
17240: LD_ADDR_VAR 0 5
17244: PUSH
17245: LD_VAR 0 5
17249: PUSH
17250: LD_VAR 0 6
17254: DIFF
17255: ST_TO_ADDR
// end ;
17256: GO 17194
17258: POP
17259: POP
// if buildings_list > 0 then
17260: LD_VAR 0 4
17264: PUSH
17265: LD_INT 0
17267: GREATER
17268: IFFALSE 17729
// begin if not under_attack then
17270: LD_VAR 0 11
17274: NOT
17275: IFFALSE 17345
// begin temp_list = [ ] ;
17277: LD_ADDR_VAR 0 3
17281: PUSH
17282: EMPTY
17283: ST_TO_ADDR
// for i in soldiers_list do
17284: LD_ADDR_VAR 0 2
17288: PUSH
17289: LD_VAR 0 5
17293: PUSH
17294: FOR_IN
17295: IFFALSE 17323
// temp_list = temp_list ^ GetSkill ( i , skill_combat ) ;
17297: LD_ADDR_VAR 0 3
17301: PUSH
17302: LD_VAR 0 3
17306: PUSH
17307: LD_VAR 0 2
17311: PPUSH
17312: LD_INT 1
17314: PPUSH
17315: CALL_OW 259
17319: ADD
17320: ST_TO_ADDR
17321: GO 17294
17323: POP
17324: POP
// soldiers_list = SortListByListDesc ( soldiers_list , temp_list ) ;
17325: LD_ADDR_VAR 0 5
17329: PUSH
17330: LD_VAR 0 5
17334: PPUSH
17335: LD_VAR 0 3
17339: PPUSH
17340: CALL_OW 77
17344: ST_TO_ADDR
// end ; special_units = UnitFilter ( soldiers_list , [ f_or , [ f_class , class_bazooker ] , [ f_class , class_sniper ] , [ f_class , class_mortar ] ] ) ;
17345: LD_ADDR_VAR 0 9
17349: PUSH
17350: LD_VAR 0 5
17354: PPUSH
17355: LD_INT 2
17357: PUSH
17358: LD_INT 25
17360: PUSH
17361: LD_INT 9
17363: PUSH
17364: EMPTY
17365: LIST
17366: LIST
17367: PUSH
17368: LD_INT 25
17370: PUSH
17371: LD_INT 5
17373: PUSH
17374: EMPTY
17375: LIST
17376: LIST
17377: PUSH
17378: LD_INT 25
17380: PUSH
17381: LD_INT 8
17383: PUSH
17384: EMPTY
17385: LIST
17386: LIST
17387: PUSH
17388: EMPTY
17389: LIST
17390: LIST
17391: LIST
17392: LIST
17393: PPUSH
17394: CALL_OW 72
17398: ST_TO_ADDR
// soldiers_list = soldiers_list diff special_units ;
17399: LD_ADDR_VAR 0 5
17403: PUSH
17404: LD_VAR 0 5
17408: PUSH
17409: LD_VAR 0 9
17413: DIFF
17414: ST_TO_ADDR
// for i = 1 to buildings_list do
17415: LD_ADDR_VAR 0 2
17419: PUSH
17420: DOUBLE
17421: LD_INT 1
17423: DEC
17424: ST_TO_ADDR
17425: LD_VAR 0 4
17429: PUSH
17430: FOR_TO
17431: IFFALSE 17725
// begin if soldiers_list = 0 then
17433: LD_VAR 0 5
17437: PUSH
17438: LD_INT 0
17440: EQUAL
17441: IFFALSE 17472
// begin if special_units = 0 then
17443: LD_VAR 0 9
17447: PUSH
17448: LD_INT 0
17450: EQUAL
17451: IFFALSE 17455
// break ;
17453: GO 17725
// soldiers_list = special_units ;
17455: LD_ADDR_VAR 0 5
17459: PUSH
17460: LD_VAR 0 9
17464: ST_TO_ADDR
// special_units = [ ] ;
17465: LD_ADDR_VAR 0 9
17469: PUSH
17470: EMPTY
17471: ST_TO_ADDR
// end ; if not under_attack then
17472: LD_VAR 0 11
17476: NOT
17477: IFFALSE 17542
// begin if GetBType ( buildings_list [ i ] ) = b_breastwork and special_units > 0 then
17479: LD_VAR 0 4
17483: PUSH
17484: LD_VAR 0 2
17488: ARRAY
17489: PPUSH
17490: CALL_OW 266
17494: PUSH
17495: LD_INT 31
17497: EQUAL
17498: PUSH
17499: LD_VAR 0 9
17503: PUSH
17504: LD_INT 0
17506: GREATER
17507: AND
17508: IFFALSE 17526
// temp_unit = special_units [ 1 ] else
17510: LD_ADDR_VAR 0 6
17514: PUSH
17515: LD_VAR 0 9
17519: PUSH
17520: LD_INT 1
17522: ARRAY
17523: ST_TO_ADDR
17524: GO 17540
// temp_unit = soldiers_list [ 1 ] ;
17526: LD_ADDR_VAR 0 6
17530: PUSH
17531: LD_VAR 0 5
17535: PUSH
17536: LD_INT 1
17538: ARRAY
17539: ST_TO_ADDR
// end else
17540: GO 17671
// begin if GetBType ( buildings_list [ i ] ) = b_breastwork and special_units > 0 then
17542: LD_VAR 0 4
17546: PUSH
17547: LD_VAR 0 2
17551: ARRAY
17552: PPUSH
17553: CALL_OW 266
17557: PUSH
17558: LD_INT 31
17560: EQUAL
17561: PUSH
17562: LD_VAR 0 9
17566: PUSH
17567: LD_INT 0
17569: GREATER
17570: AND
17571: IFFALSE 17585
// temp_list_2 = special_units else
17573: LD_ADDR_VAR 0 14
17577: PUSH
17578: LD_VAR 0 9
17582: ST_TO_ADDR
17583: GO 17595
// temp_list_2 = soldiers_list ;
17585: LD_ADDR_VAR 0 14
17589: PUSH
17590: LD_VAR 0 5
17594: ST_TO_ADDR
// temp_list = [ ] ;
17595: LD_ADDR_VAR 0 3
17599: PUSH
17600: EMPTY
17601: ST_TO_ADDR
// for j in temp_list_2 do
17602: LD_ADDR_VAR 0 12
17606: PUSH
17607: LD_VAR 0 14
17611: PUSH
17612: FOR_IN
17613: IFFALSE 17649
// temp_list = temp_list ^ GetDistUnits ( j , buildings_list [ i ] ) ;
17615: LD_ADDR_VAR 0 3
17619: PUSH
17620: LD_VAR 0 3
17624: PUSH
17625: LD_VAR 0 12
17629: PPUSH
17630: LD_VAR 0 4
17634: PUSH
17635: LD_VAR 0 2
17639: ARRAY
17640: PPUSH
17641: CALL_OW 296
17645: ADD
17646: ST_TO_ADDR
17647: GO 17612
17649: POP
17650: POP
// temp_unit = WorstFromListByList ( temp_list_2 , temp_list ) ;
17651: LD_ADDR_VAR 0 6
17655: PUSH
17656: LD_VAR 0 14
17660: PPUSH
17661: LD_VAR 0 3
17665: PPUSH
17666: CALL_OW 78
17670: ST_TO_ADDR
// end ; ComEnterUnit ( temp_unit , buildings_list [ i ] ) ;
17671: LD_VAR 0 6
17675: PPUSH
17676: LD_VAR 0 4
17680: PUSH
17681: LD_VAR 0 2
17685: ARRAY
17686: PPUSH
17687: CALL_OW 120
// soldiers_list = soldiers_list diff temp_unit ;
17691: LD_ADDR_VAR 0 5
17695: PUSH
17696: LD_VAR 0 5
17700: PUSH
17701: LD_VAR 0 6
17705: DIFF
17706: ST_TO_ADDR
// special_units = special_units diff temp_unit ;
17707: LD_ADDR_VAR 0 9
17711: PUSH
17712: LD_VAR 0 9
17716: PUSH
17717: LD_VAR 0 6
17721: DIFF
17722: ST_TO_ADDR
// end ;
17723: GO 17430
17725: POP
17726: POP
// end else
17727: GO 17736
// special_units = [ ] ;
17729: LD_ADDR_VAR 0 9
17733: PUSH
17734: EMPTY
17735: ST_TO_ADDR
// DistributeHumansToBuildings ( base , soldiers_list ^ special_units , UnitFilter ( ai_armouries [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_sniper , 6 , true , true ) ;
17736: LD_VAR 0 7
17740: PPUSH
17741: LD_VAR 0 5
17745: PUSH
17746: LD_VAR 0 9
17750: ADD
17751: PPUSH
17752: LD_EXP 49
17756: PUSH
17757: LD_VAR 0 7
17761: ARRAY
17762: PPUSH
17763: LD_INT 50
17765: PUSH
17766: EMPTY
17767: LIST
17768: PUSH
17769: LD_INT 3
17771: PUSH
17772: LD_INT 57
17774: PUSH
17775: EMPTY
17776: LIST
17777: PUSH
17778: EMPTY
17779: LIST
17780: LIST
17781: PUSH
17782: EMPTY
17783: LIST
17784: LIST
17785: PPUSH
17786: CALL_OW 72
17790: PPUSH
17791: LD_INT 5
17793: PPUSH
17794: LD_INT 6
17796: PPUSH
17797: LD_INT 1
17799: PPUSH
17800: LD_INT 1
17802: PPUSH
17803: CALL 18828 0 7
// end ;
17807: GO 16238
17809: POP
17810: POP
// until false ;
17811: LD_INT 0
17813: IFFALSE 16221
// end ;
17815: PPOPN 15
17817: END
// every 0 0$1 + 0 0$0.2 do var side , base , i , temp_list , un1 , temp_list_2 , temp_value , val ; var sopo_cooldown ;
17818: GO 17820
17820: DISABLE
17821: LD_INT 0
17823: PPUSH
17824: PPUSH
17825: PPUSH
17826: PPUSH
17827: PPUSH
17828: PPUSH
17829: PPUSH
17830: PPUSH
17831: PPUSH
// begin sopo_cooldown = [ ] ;
17832: LD_ADDR_VAR 0 9
17836: PUSH
17837: EMPTY
17838: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
17839: LD_INT 18
17841: PPUSH
17842: CALL_OW 67
// for i = 1 to sopo_cooldown do
17846: LD_ADDR_VAR 0 3
17850: PUSH
17851: DOUBLE
17852: LD_INT 1
17854: DEC
17855: ST_TO_ADDR
17856: LD_VAR 0 9
17860: PUSH
17861: FOR_TO
17862: IFFALSE 17917
// if sopo_cooldown [ i ] > 0 0$0 then
17864: LD_VAR 0 9
17868: PUSH
17869: LD_VAR 0 3
17873: ARRAY
17874: PUSH
17875: LD_INT 0
17877: GREATER
17878: IFFALSE 17915
// sopo_cooldown = Replace ( sopo_cooldown , i , sopo_cooldown [ i ] - 0 0$0.5 ) ;
17880: LD_ADDR_VAR 0 9
17884: PUSH
17885: LD_VAR 0 9
17889: PPUSH
17890: LD_VAR 0 3
17894: PPUSH
17895: LD_VAR 0 9
17899: PUSH
17900: LD_VAR 0 3
17904: ARRAY
17905: PUSH
17906: LD_INT 18
17908: MINUS
17909: PPUSH
17910: CALL_OW 1
17914: ST_TO_ADDR
17915: GO 17861
17917: POP
17918: POP
// for base in ai_bases do
17919: LD_ADDR_VAR 0 2
17923: PUSH
17924: LD_EXP 59
17928: PUSH
17929: FOR_IN
17930: IFFALSE 18171
// begin side = GetBaseSide ( base ) ;
17932: LD_ADDR_VAR 0 1
17936: PUSH
17937: LD_VAR 0 2
17941: PPUSH
17942: CALL 15948 0 1
17946: ST_TO_ADDR
// for i in ai_soldiers [ base ] diff ai_heal_these_humans [ base ] do
17947: LD_ADDR_VAR 0 3
17951: PUSH
17952: LD_EXP 29
17956: PUSH
17957: LD_VAR 0 2
17961: ARRAY
17962: PUSH
17963: LD_EXP 44
17967: PUSH
17968: LD_VAR 0 2
17972: ARRAY
17973: DIFF
17974: PUSH
17975: FOR_IN
17976: IFFALSE 18167
// if GetClass ( i ) = class_sniper then
17978: LD_VAR 0 3
17982: PPUSH
17983: CALL_OW 257
17987: PUSH
17988: LD_INT 5
17990: EQUAL
17991: IFFALSE 18165
// begin temp_list = GetTaskList ( i ) ;
17993: LD_ADDR_VAR 0 4
17997: PUSH
17998: LD_VAR 0 3
18002: PPUSH
18003: CALL_OW 437
18007: ST_TO_ADDR
// if temp_list > 0 then
18008: LD_VAR 0 4
18012: PUSH
18013: LD_INT 0
18015: GREATER
18016: IFFALSE 18038
// if temp_list [ 1 ] [ 1 ] = n then
18018: LD_VAR 0 4
18022: PUSH
18023: LD_INT 1
18025: ARRAY
18026: PUSH
18027: LD_INT 1
18029: ARRAY
18030: PUSH
18031: LD_STRING n
18033: EQUAL
18034: IFFALSE 18038
// continue ;
18036: GO 17975
// un1 = Attacks ( i ) ;
18038: LD_ADDR_VAR 0 5
18042: PUSH
18043: LD_VAR 0 3
18047: PPUSH
18048: CALL_OW 320
18052: ST_TO_ADDR
// if un1 > 0 and GetType ( un1 ) = unit_human then
18053: LD_VAR 0 5
18057: PUSH
18058: LD_INT 0
18060: GREATER
18061: PUSH
18062: LD_VAR 0 5
18066: PPUSH
18067: CALL_OW 247
18071: PUSH
18072: LD_INT 1
18074: EQUAL
18075: AND
18076: IFFALSE 18165
// begin val = true ;
18078: LD_ADDR_VAR 0 8
18082: PUSH
18083: LD_INT 1
18085: ST_TO_ADDR
// if sopo_cooldown >= i then
18086: LD_VAR 0 9
18090: PUSH
18091: LD_VAR 0 3
18095: GREATEREQUAL
18096: IFFALSE 18122
// if sopo_cooldown [ i ] > 0 0$0 then
18098: LD_VAR 0 9
18102: PUSH
18103: LD_VAR 0 3
18107: ARRAY
18108: PUSH
18109: LD_INT 0
18111: GREATER
18112: IFFALSE 18122
// val = false ;
18114: LD_ADDR_VAR 0 8
18118: PUSH
18119: LD_INT 0
18121: ST_TO_ADDR
// if val then
18122: LD_VAR 0 8
18126: IFFALSE 18165
// begin ComAttackSoporific ( i , un1 ) ;
18128: LD_VAR 0 3
18132: PPUSH
18133: LD_VAR 0 5
18137: PPUSH
18138: CALL_OW 166
// sopo_cooldown = Replace ( sopo_cooldown , i , 0 0$10 ) ;
18142: LD_ADDR_VAR 0 9
18146: PUSH
18147: LD_VAR 0 9
18151: PPUSH
18152: LD_VAR 0 3
18156: PPUSH
18157: LD_INT 350
18159: PPUSH
18160: CALL_OW 1
18164: ST_TO_ADDR
// end ; end ; end ;
18165: GO 17975
18167: POP
18168: POP
// end ;
18169: GO 17929
18171: POP
18172: POP
// until false ;
18173: LD_INT 0
18175: IFFALSE 17839
// end ;
18177: PPOPN 9
18179: END
// every 0 0$1 + 0 0$0.4 do var side , base , building_attacker_cant_map , attacker_building_pairs ; var i , un_list , buildings_list , att , b ;
18180: GO 18182
18182: DISABLE
18183: LD_INT 0
18185: PPUSH
18186: PPUSH
18187: PPUSH
18188: PPUSH
18189: PPUSH
18190: PPUSH
18191: PPUSH
18192: PPUSH
18193: PPUSH
// begin base = 1 ;
18194: LD_ADDR_VAR 0 2
18198: PUSH
18199: LD_INT 1
18201: ST_TO_ADDR
// side = GetBaseSide ( base ) ;
18202: LD_ADDR_VAR 0 1
18206: PUSH
18207: LD_VAR 0 2
18211: PPUSH
18212: CALL 15948 0 1
18216: ST_TO_ADDR
// building_attacker_cant_map = [ ] ;
18217: LD_ADDR_VAR 0 3
18221: PUSH
18222: EMPTY
18223: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
18224: LD_INT 35
18226: PPUSH
18227: CALL_OW 67
// buildings_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_building ] , [ f_inarea , am_attack_buildings_area ] ] ) ;
18231: LD_ADDR_VAR 0 7
18235: PUSH
18236: LD_INT 81
18238: PUSH
18239: LD_VAR 0 1
18243: PUSH
18244: EMPTY
18245: LIST
18246: LIST
18247: PUSH
18248: LD_INT 21
18250: PUSH
18251: LD_INT 3
18253: PUSH
18254: EMPTY
18255: LIST
18256: LIST
18257: PUSH
18258: LD_INT 95
18260: PUSH
18261: LD_INT 29
18263: PUSH
18264: EMPTY
18265: LIST
18266: LIST
18267: PUSH
18268: EMPTY
18269: LIST
18270: LIST
18271: LIST
18272: PPUSH
18273: CALL_OW 69
18277: ST_TO_ADDR
// if buildings_list = 0 then
18278: LD_VAR 0 7
18282: PUSH
18283: LD_INT 0
18285: EQUAL
18286: IFFALSE 18290
// continue ;
18288: GO 18224
// for i in buildings_list do
18290: LD_ADDR_VAR 0 5
18294: PUSH
18295: LD_VAR 0 7
18299: PUSH
18300: FOR_IN
18301: IFFALSE 18379
// if building_attacker_cant_map < i then
18303: LD_VAR 0 3
18307: PUSH
18308: LD_VAR 0 5
18312: LESS
18313: IFFALSE 18339
// building_attacker_cant_map = Replace ( building_attacker_cant_map , i , [ ] ) else
18315: LD_ADDR_VAR 0 3
18319: PUSH
18320: LD_VAR 0 3
18324: PPUSH
18325: LD_VAR 0 5
18329: PPUSH
18330: EMPTY
18331: PPUSH
18332: CALL_OW 1
18336: ST_TO_ADDR
18337: GO 18377
// if building_attacker_cant_map [ i ] = 0 then
18339: LD_VAR 0 3
18343: PUSH
18344: LD_VAR 0 5
18348: ARRAY
18349: PUSH
18350: LD_INT 0
18352: EQUAL
18353: IFFALSE 18377
// building_attacker_cant_map = Replace ( building_attacker_cant_map , i , [ ] ) ;
18355: LD_ADDR_VAR 0 3
18359: PUSH
18360: LD_VAR 0 3
18364: PPUSH
18365: LD_VAR 0 5
18369: PPUSH
18370: EMPTY
18371: PPUSH
18372: CALL_OW 1
18376: ST_TO_ADDR
18377: GO 18300
18379: POP
18380: POP
// un_list = ai_bunkers [ base ] ^ ai_turrets [ base ] ;
18381: LD_ADDR_VAR 0 6
18385: PUSH
18386: LD_EXP 50
18390: PUSH
18391: LD_VAR 0 2
18395: ARRAY
18396: PUSH
18397: LD_EXP 56
18401: PUSH
18402: LD_VAR 0 2
18406: ARRAY
18407: ADD
18408: ST_TO_ADDR
// for i in ai_armouries [ base ] do
18409: LD_ADDR_VAR 0 5
18413: PUSH
18414: LD_EXP 49
18418: PUSH
18419: LD_VAR 0 2
18423: ARRAY
18424: PUSH
18425: FOR_IN
18426: IFFALSE 18484
// un_list = un_list ^ UnitFilter ( UnitsInside ( i ) , [ f_or , [ f_class , class_bazooker ] , [ f_class , class_mortar ] ] ) ;
18428: LD_ADDR_VAR 0 6
18432: PUSH
18433: LD_VAR 0 6
18437: PUSH
18438: LD_VAR 0 5
18442: PPUSH
18443: CALL_OW 313
18447: PPUSH
18448: LD_INT 2
18450: PUSH
18451: LD_INT 25
18453: PUSH
18454: LD_INT 9
18456: PUSH
18457: EMPTY
18458: LIST
18459: LIST
18460: PUSH
18461: LD_INT 25
18463: PUSH
18464: LD_INT 8
18466: PUSH
18467: EMPTY
18468: LIST
18469: LIST
18470: PUSH
18471: EMPTY
18472: LIST
18473: LIST
18474: LIST
18475: PPUSH
18476: CALL_OW 72
18480: ADD
18481: ST_TO_ADDR
18482: GO 18425
18484: POP
18485: POP
// attacker_building_pairs = [ ] ;
18486: LD_ADDR_VAR 0 4
18490: PUSH
18491: EMPTY
18492: ST_TO_ADDR
// for i in un_list do
18493: LD_ADDR_VAR 0 5
18497: PUSH
18498: LD_VAR 0 6
18502: PUSH
18503: FOR_IN
18504: IFFALSE 18721
// begin att = Attacks ( i ) ;
18506: LD_ADDR_VAR 0 8
18510: PUSH
18511: LD_VAR 0 5
18515: PPUSH
18516: CALL_OW 320
18520: ST_TO_ADDR
// if att > 0 then
18521: LD_VAR 0 8
18525: PUSH
18526: LD_INT 0
18528: GREATER
18529: IFFALSE 18634
// begin if GetType ( att ) = unit_building and DangerousUnits ( [ att ] ) = 0 then
18531: LD_VAR 0 8
18535: PPUSH
18536: CALL_OW 247
18540: PUSH
18541: LD_INT 3
18543: EQUAL
18544: PUSH
18545: LD_VAR 0 8
18549: PUSH
18550: EMPTY
18551: LIST
18552: PPUSH
18553: CALL 37769 0 1
18557: PUSH
18558: LD_INT 0
18560: EQUAL
18561: AND
18562: IFFALSE 18632
// begin if DangerousUnits ( FilterAllUnits ( [ [ f_enemy , side ] , [ f_dist , i , GetDistUnits ( i , att ) ] ] ) ) > 0 then
18564: LD_INT 81
18566: PUSH
18567: LD_VAR 0 1
18571: PUSH
18572: EMPTY
18573: LIST
18574: LIST
18575: PUSH
18576: LD_INT 91
18578: PUSH
18579: LD_VAR 0 5
18583: PUSH
18584: LD_VAR 0 5
18588: PPUSH
18589: LD_VAR 0 8
18593: PPUSH
18594: CALL_OW 296
18598: PUSH
18599: EMPTY
18600: LIST
18601: LIST
18602: LIST
18603: PUSH
18604: EMPTY
18605: LIST
18606: LIST
18607: PPUSH
18608: CALL_OW 69
18612: PPUSH
18613: CALL 37769 0 1
18617: PUSH
18618: LD_INT 0
18620: GREATER
18621: IFFALSE 18632
// ComStop ( i ) ;
18623: LD_VAR 0 5
18627: PPUSH
18628: CALL_OW 141
// end ; end else
18632: GO 18719
// begin for b in buildings_list do
18634: LD_ADDR_VAR 0 9
18638: PUSH
18639: LD_VAR 0 7
18643: PUSH
18644: FOR_IN
18645: IFFALSE 18717
// begin if i in building_attacker_cant_map [ b ] then
18647: LD_VAR 0 5
18651: PUSH
18652: LD_VAR 0 3
18656: PUSH
18657: LD_VAR 0 9
18661: ARRAY
18662: IN
18663: IFFALSE 18667
// continue ;
18665: GO 18644
// ComAttackUnit ( i , b ) ;
18667: LD_VAR 0 5
18671: PPUSH
18672: LD_VAR 0 9
18676: PPUSH
18677: CALL_OW 115
// attacker_building_pairs = Insert ( attacker_building_pairs , 1 , [ i , b ] ) ;
18681: LD_ADDR_VAR 0 4
18685: PUSH
18686: LD_VAR 0 4
18690: PPUSH
18691: LD_INT 1
18693: PPUSH
18694: LD_VAR 0 5
18698: PUSH
18699: LD_VAR 0 9
18703: PUSH
18704: EMPTY
18705: LIST
18706: LIST
18707: PPUSH
18708: CALL_OW 2
18712: ST_TO_ADDR
// break ;
18713: GO 18717
// end ;
18715: GO 18644
18717: POP
18718: POP
// end ; end ;
18719: GO 18503
18721: POP
18722: POP
// wait ( 0 0$0.2 ) ;
18723: LD_INT 7
18725: PPUSH
18726: CALL_OW 67
// for i in attacker_building_pairs do
18730: LD_ADDR_VAR 0 5
18734: PUSH
18735: LD_VAR 0 4
18739: PUSH
18740: FOR_IN
18741: IFFALSE 18819
// begin if Attacks ( i [ 1 ] ) <> i [ 2 ] then
18743: LD_VAR 0 5
18747: PUSH
18748: LD_INT 1
18750: ARRAY
18751: PPUSH
18752: CALL_OW 320
18756: PUSH
18757: LD_VAR 0 5
18761: PUSH
18762: LD_INT 2
18764: ARRAY
18765: NONEQUAL
18766: IFFALSE 18817
// building_attacker_cant_map = Replace ( building_attacker_cant_map , i [ 2 ] , building_attacker_cant_map [ i [ 2 ] ] ^ i [ 1 ] ) ;
18768: LD_ADDR_VAR 0 3
18772: PUSH
18773: LD_VAR 0 3
18777: PPUSH
18778: LD_VAR 0 5
18782: PUSH
18783: LD_INT 2
18785: ARRAY
18786: PPUSH
18787: LD_VAR 0 3
18791: PUSH
18792: LD_VAR 0 5
18796: PUSH
18797: LD_INT 2
18799: ARRAY
18800: ARRAY
18801: PUSH
18802: LD_VAR 0 5
18806: PUSH
18807: LD_INT 1
18809: ARRAY
18810: ADD
18811: PPUSH
18812: CALL_OW 1
18816: ST_TO_ADDR
// end ;
18817: GO 18740
18819: POP
18820: POP
// until false ;
18821: LD_INT 0
18823: IFFALSE 18224
// end ;
18825: PPOPN 9
18827: 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
18828: LD_INT 0
18830: PPUSH
18831: PPUSH
18832: PPUSH
18833: PPUSH
18834: PPUSH
18835: PPUSH
18836: PPUSH
18837: PPUSH
18838: PPUSH
18839: PPUSH
// if human_list = 0 then
18840: LD_VAR 0 2
18844: PUSH
18845: LD_INT 0
18847: EQUAL
18848: IFFALSE 18852
// exit ;
18850: GO 20130
// area = GetBaseArea ( base ) ;
18852: LD_ADDR_VAR 0 13
18856: PUSH
18857: LD_VAR 0 1
18861: PPUSH
18862: CALL 15877 0 1
18866: ST_TO_ADDR
// under_attack = BaseUnderAttack ( base , - 1 ) ;
18867: LD_ADDR_VAR 0 17
18871: PUSH
18872: LD_VAR 0 1
18876: PPUSH
18877: LD_INT 1
18879: NEG
18880: PPUSH
18881: CALL 28793 0 2
18885: ST_TO_ADDR
// if not GetClass ( human_list [ 1 ] ) in [ class_engineer , class_apeman_engineer , class_mechanic , class_scientistic ] and building_list > 0 then
18886: LD_VAR 0 2
18890: PUSH
18891: LD_INT 1
18893: ARRAY
18894: PPUSH
18895: CALL_OW 257
18899: PUSH
18900: LD_INT 2
18902: PUSH
18903: LD_INT 16
18905: PUSH
18906: LD_INT 3
18908: PUSH
18909: LD_INT 4
18911: PUSH
18912: EMPTY
18913: LIST
18914: LIST
18915: LIST
18916: LIST
18917: IN
18918: NOT
18919: PUSH
18920: LD_VAR 0 3
18924: PUSH
18925: LD_INT 0
18927: GREATER
18928: AND
18929: IFFALSE 19018
// begin val = 0 ;
18931: LD_ADDR_VAR 0 11
18935: PUSH
18936: LD_INT 0
18938: ST_TO_ADDR
// for i in human_list do
18939: LD_ADDR_VAR 0 9
18943: PUSH
18944: LD_VAR 0 2
18948: PUSH
18949: FOR_IN
18950: IFFALSE 18994
// if GetClass ( i ) in [ class_sniper , class_mortar , class_bazooker ] then
18952: LD_VAR 0 9
18956: PPUSH
18957: CALL_OW 257
18961: PUSH
18962: LD_INT 5
18964: PUSH
18965: LD_INT 8
18967: PUSH
18968: LD_INT 9
18970: PUSH
18971: EMPTY
18972: LIST
18973: LIST
18974: LIST
18975: IN
18976: IFFALSE 18992
// val = val + 1 ;
18978: LD_ADDR_VAR 0 11
18982: PUSH
18983: LD_VAR 0 11
18987: PUSH
18988: LD_INT 1
18990: PLUS
18991: ST_TO_ADDR
18992: GO 18949
18994: POP
18995: POP
// special_un_count = val div ( building_list + 0 ) ;
18996: LD_ADDR_VAR 0 14
19000: PUSH
19001: LD_VAR 0 11
19005: PUSH
19006: LD_VAR 0 3
19010: PUSH
19011: LD_INT 0
19013: PLUS
19014: DIV
19015: ST_TO_ADDR
// end else
19016: GO 19026
// special_un_count = 0 ;
19018: LD_ADDR_VAR 0 14
19022: PUSH
19023: LD_INT 0
19025: ST_TO_ADDR
// val = building_list + 0 ;
19026: LD_ADDR_VAR 0 11
19030: PUSH
19031: LD_VAR 0 3
19035: PUSH
19036: LD_INT 0
19038: PLUS
19039: ST_TO_ADDR
// while val > 0 and human_list > 0 do
19040: LD_VAR 0 11
19044: PUSH
19045: LD_INT 0
19047: GREATER
19048: PUSH
19049: LD_VAR 0 2
19053: PUSH
19054: LD_INT 0
19056: GREATER
19057: AND
19058: IFFALSE 19864
// begin temp_list = [ ] ;
19060: LD_ADDR_VAR 0 10
19064: PUSH
19065: EMPTY
19066: ST_TO_ADDR
// for i in human_list do
19067: LD_ADDR_VAR 0 9
19071: PUSH
19072: LD_VAR 0 2
19076: PUSH
19077: FOR_IN
19078: IFFALSE 19121
// if IsInUnit ( i ) = building_list [ val ] then
19080: LD_VAR 0 9
19084: PPUSH
19085: CALL_OW 310
19089: PUSH
19090: LD_VAR 0 3
19094: PUSH
19095: LD_VAR 0 11
19099: ARRAY
19100: EQUAL
19101: IFFALSE 19119
// temp_list = temp_list ^ i ;
19103: LD_ADDR_VAR 0 10
19107: PUSH
19108: LD_VAR 0 10
19112: PUSH
19113: LD_VAR 0 9
19117: ADD
19118: ST_TO_ADDR
19119: GO 19077
19121: POP
19122: POP
// human_list = temp_list ^ ( human_list diff temp_list ) ;
19123: LD_ADDR_VAR 0 2
19127: PUSH
19128: LD_VAR 0 10
19132: PUSH
19133: LD_VAR 0 2
19137: PUSH
19138: LD_VAR 0 10
19142: DIFF
19143: ADD
19144: ST_TO_ADDR
// counter = 0 ;
19145: LD_ADDR_VAR 0 15
19149: PUSH
19150: LD_INT 0
19152: ST_TO_ADDR
// temp_list = [ ] ;
19153: LD_ADDR_VAR 0 10
19157: PUSH
19158: EMPTY
19159: ST_TO_ADDR
// for i = 1 to human_list div val do
19160: LD_ADDR_VAR 0 9
19164: PUSH
19165: DOUBLE
19166: LD_INT 1
19168: DEC
19169: ST_TO_ADDR
19170: LD_VAR 0 2
19174: PUSH
19175: LD_VAR 0 11
19179: DIV
19180: PUSH
19181: FOR_TO
19182: IFFALSE 19547
// begin if i > building_capacity then
19184: LD_VAR 0 9
19188: PUSH
19189: LD_VAR 0 5
19193: GREATER
19194: IFFALSE 19198
// break ;
19196: GO 19547
// if special_un_count = 0 then
19198: LD_VAR 0 14
19202: PUSH
19203: LD_INT 0
19205: EQUAL
19206: IFFALSE 19248
// begin temp_list = temp_list ^ human_list [ 1 ] ;
19208: LD_ADDR_VAR 0 10
19212: PUSH
19213: LD_VAR 0 10
19217: PUSH
19218: LD_VAR 0 2
19222: PUSH
19223: LD_INT 1
19225: ARRAY
19226: ADD
19227: ST_TO_ADDR
// human_list = Delete ( human_list , 1 ) ;
19228: LD_ADDR_VAR 0 2
19232: PUSH
19233: LD_VAR 0 2
19237: PPUSH
19238: LD_INT 1
19240: PPUSH
19241: CALL_OW 3
19245: ST_TO_ADDR
// end else
19246: GO 19545
// if counter = special_un_count then
19248: LD_VAR 0 15
19252: PUSH
19253: LD_VAR 0 14
19257: EQUAL
19258: IFFALSE 19397
// begin temp_unit = 0 ;
19260: LD_ADDR_VAR 0 12
19264: PUSH
19265: LD_INT 0
19267: ST_TO_ADDR
// for k = 1 to human_list do
19268: LD_ADDR_VAR 0 16
19272: PUSH
19273: DOUBLE
19274: LD_INT 1
19276: DEC
19277: ST_TO_ADDR
19278: LD_VAR 0 2
19282: PUSH
19283: FOR_TO
19284: IFFALSE 19333
// if not GetClass ( human_list [ k ] ) in [ class_sniper , class_mortar , class_bazooker ] then
19286: LD_VAR 0 2
19290: PUSH
19291: LD_VAR 0 16
19295: ARRAY
19296: PPUSH
19297: CALL_OW 257
19301: PUSH
19302: LD_INT 5
19304: PUSH
19305: LD_INT 8
19307: PUSH
19308: LD_INT 9
19310: PUSH
19311: EMPTY
19312: LIST
19313: LIST
19314: LIST
19315: IN
19316: NOT
19317: IFFALSE 19331
// begin temp_unit = k ;
19319: LD_ADDR_VAR 0 12
19323: PUSH
19324: LD_VAR 0 16
19328: ST_TO_ADDR
// break ;
19329: GO 19333
// end ;
19331: GO 19283
19333: POP
19334: POP
// if temp_unit = 0 then
19335: LD_VAR 0 12
19339: PUSH
19340: LD_INT 0
19342: EQUAL
19343: IFFALSE 19353
// temp_unit = 1 ;
19345: LD_ADDR_VAR 0 12
19349: PUSH
19350: LD_INT 1
19352: ST_TO_ADDR
// temp_list = temp_list ^ human_list [ temp_unit ] ;
19353: LD_ADDR_VAR 0 10
19357: PUSH
19358: LD_VAR 0 10
19362: PUSH
19363: LD_VAR 0 2
19367: PUSH
19368: LD_VAR 0 12
19372: ARRAY
19373: ADD
19374: ST_TO_ADDR
// human_list = Delete ( human_list , temp_unit ) ;
19375: LD_ADDR_VAR 0 2
19379: PUSH
19380: LD_VAR 0 2
19384: PPUSH
19385: LD_VAR 0 12
19389: PPUSH
19390: CALL_OW 3
19394: ST_TO_ADDR
// end else
19395: GO 19545
// begin counter = counter + 1 ;
19397: LD_ADDR_VAR 0 15
19401: PUSH
19402: LD_VAR 0 15
19406: PUSH
19407: LD_INT 1
19409: PLUS
19410: ST_TO_ADDR
// temp_unit = 0 ;
19411: LD_ADDR_VAR 0 12
19415: PUSH
19416: LD_INT 0
19418: ST_TO_ADDR
// for k = 1 to human_list do
19419: LD_ADDR_VAR 0 16
19423: PUSH
19424: DOUBLE
19425: LD_INT 1
19427: DEC
19428: ST_TO_ADDR
19429: LD_VAR 0 2
19433: PUSH
19434: FOR_TO
19435: IFFALSE 19483
// if GetClass ( human_list [ k ] ) in [ class_sniper , class_mortar , class_bazooker ] then
19437: LD_VAR 0 2
19441: PUSH
19442: LD_VAR 0 16
19446: ARRAY
19447: PPUSH
19448: CALL_OW 257
19452: PUSH
19453: LD_INT 5
19455: PUSH
19456: LD_INT 8
19458: PUSH
19459: LD_INT 9
19461: PUSH
19462: EMPTY
19463: LIST
19464: LIST
19465: LIST
19466: IN
19467: IFFALSE 19481
// begin temp_unit = k ;
19469: LD_ADDR_VAR 0 12
19473: PUSH
19474: LD_VAR 0 16
19478: ST_TO_ADDR
// break ;
19479: GO 19483
// end ;
19481: GO 19434
19483: POP
19484: POP
// if temp_unit = 0 then
19485: LD_VAR 0 12
19489: PUSH
19490: LD_INT 0
19492: EQUAL
19493: IFFALSE 19503
// temp_unit = 1 ;
19495: LD_ADDR_VAR 0 12
19499: PUSH
19500: LD_INT 1
19502: ST_TO_ADDR
// temp_list = temp_list ^ human_list [ temp_unit ] ;
19503: LD_ADDR_VAR 0 10
19507: PUSH
19508: LD_VAR 0 10
19512: PUSH
19513: LD_VAR 0 2
19517: PUSH
19518: LD_VAR 0 12
19522: ARRAY
19523: ADD
19524: ST_TO_ADDR
// human_list = Delete ( human_list , temp_unit ) ;
19525: LD_ADDR_VAR 0 2
19529: PUSH
19530: LD_VAR 0 2
19534: PPUSH
19535: LD_VAR 0 12
19539: PPUSH
19540: CALL_OW 3
19544: ST_TO_ADDR
// end ; end ;
19545: GO 19181
19547: POP
19548: POP
// for i in temp_list do
19549: LD_ADDR_VAR 0 9
19553: PUSH
19554: LD_VAR 0 10
19558: PUSH
19559: FOR_IN
19560: IFFALSE 19846
// begin temp_unit = IsInUnit ( i ) ;
19562: LD_ADDR_VAR 0 12
19566: PUSH
19567: LD_VAR 0 9
19571: PPUSH
19572: CALL_OW 310
19576: ST_TO_ADDR
// if temp_unit <> building_list [ val ] then
19577: LD_VAR 0 12
19581: PUSH
19582: LD_VAR 0 3
19586: PUSH
19587: LD_VAR 0 11
19591: ARRAY
19592: NONEQUAL
19593: IFFALSE 19844
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
19595: LD_VAR 0 9
19599: PPUSH
19600: CALL_OW 310
19604: PPUSH
19605: CALL_OW 247
19609: PUSH
19610: LD_INT 2
19612: DOUBLE
19613: EQUAL
19614: IFTRUE 19618
19616: GO 19630
19618: POP
// ComExitVehicle ( i ) ; unit_building :
19619: LD_VAR 0 9
19623: PPUSH
19624: CALL_OW 121
19628: GO 19844
19630: LD_INT 3
19632: DOUBLE
19633: EQUAL
19634: IFTRUE 19638
19636: GO 19650
19638: POP
// ComExitBuilding ( i ) ; else
19639: LD_VAR 0 9
19643: PPUSH
19644: CALL_OW 122
19648: GO 19844
19650: POP
// begin if IsInArea ( i , area ) or not aggressive_pullback then
19651: LD_VAR 0 9
19655: PPUSH
19656: LD_VAR 0 13
19660: PPUSH
19661: CALL_OW 308
19665: PUSH
19666: LD_VAR 0 7
19670: NOT
19671: OR
19672: IFFALSE 19696
// ComEnterUnit ( i , building_list [ val ] ) else
19674: LD_VAR 0 9
19678: PPUSH
19679: LD_VAR 0 3
19683: PUSH
19684: LD_VAR 0 11
19688: ARRAY
19689: PPUSH
19690: CALL_OW 120
19694: GO 19737
// ComAgressiveMove ( i , GetX ( building_list [ val ] ) , GetY ( building_list [ val ] ) ) ;
19696: LD_VAR 0 9
19700: PPUSH
19701: LD_VAR 0 3
19705: PUSH
19706: LD_VAR 0 11
19710: ARRAY
19711: PPUSH
19712: CALL_OW 250
19716: PPUSH
19717: LD_VAR 0 3
19721: PUSH
19722: LD_VAR 0 11
19726: ARRAY
19727: PPUSH
19728: CALL_OW 251
19732: PPUSH
19733: CALL_OW 114
// if change_to_this_class > 0 then
19737: LD_VAR 0 4
19741: PUSH
19742: LD_INT 0
19744: GREATER
19745: IFFALSE 19844
// begin if GetClass ( i ) <> change_to_this_class and GetNation ( i ) <> nation_nature then
19747: LD_VAR 0 9
19751: PPUSH
19752: CALL_OW 257
19756: PUSH
19757: LD_VAR 0 4
19761: NONEQUAL
19762: PUSH
19763: LD_VAR 0 9
19767: PPUSH
19768: CALL_OW 248
19772: PUSH
19773: LD_INT 0
19775: NONEQUAL
19776: AND
19777: IFFALSE 19844
// 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
19779: LD_VAR 0 4
19783: PUSH
19784: LD_INT 5
19786: PUSH
19787: LD_INT 8
19789: PUSH
19790: LD_INT 9
19792: PUSH
19793: EMPTY
19794: LIST
19795: LIST
19796: LIST
19797: IN
19798: PUSH
19799: LD_VAR 0 3
19803: PUSH
19804: LD_VAR 0 11
19808: ARRAY
19809: PPUSH
19810: CALL_OW 266
19814: PUSH
19815: LD_INT 5
19817: PUSH
19818: LD_INT 35
19820: PUSH
19821: EMPTY
19822: LIST
19823: LIST
19824: IN
19825: NOT
19826: AND
19827: NOT
19828: IFFALSE 19844
// AddComChangeProfession ( i , change_to_this_class ) ;
19830: LD_VAR 0 9
19834: PPUSH
19835: LD_VAR 0 4
19839: PPUSH
19840: CALL_OW 183
// end ; end ; end ; end ;
19844: GO 19559
19846: POP
19847: POP
// val = val - 1 ;
19848: LD_ADDR_VAR 0 11
19852: PUSH
19853: LD_VAR 0 11
19857: PUSH
19858: LD_INT 1
19860: MINUS
19861: ST_TO_ADDR
// end ;
19862: GO 19040
// if human_list > 0 then
19864: LD_VAR 0 2
19868: PUSH
19869: LD_INT 0
19871: GREATER
19872: IFFALSE 20130
// if ai_building_under_construction [ base ] > 0 and help_building and not under_attack then
19874: LD_EXP 43
19878: PUSH
19879: LD_VAR 0 1
19883: ARRAY
19884: PUSH
19885: LD_INT 0
19887: GREATER
19888: PUSH
19889: LD_VAR 0 6
19893: AND
19894: PUSH
19895: LD_VAR 0 17
19899: NOT
19900: AND
19901: IFFALSE 19977
// begin for i in GetHumansOutOfUnits ( human_list ) do
19903: LD_ADDR_VAR 0 9
19907: PUSH
19908: LD_VAR 0 2
19912: PPUSH
19913: CALL 28688 0 1
19917: PUSH
19918: FOR_IN
19919: IFFALSE 19973
// SetTaskList ( i , [ [ h , 0 , 0 , ai_building_under_construction [ base ] , 0 , 0 , 0 ] ] ) ;
19921: LD_VAR 0 9
19925: PPUSH
19926: LD_STRING h
19928: PUSH
19929: LD_INT 0
19931: PUSH
19932: LD_INT 0
19934: PUSH
19935: LD_EXP 43
19939: PUSH
19940: LD_VAR 0 1
19944: ARRAY
19945: PUSH
19946: LD_INT 0
19948: PUSH
19949: LD_INT 0
19951: PUSH
19952: LD_INT 0
19954: PUSH
19955: EMPTY
19956: LIST
19957: LIST
19958: LIST
19959: LIST
19960: LIST
19961: LIST
19962: LIST
19963: PUSH
19964: EMPTY
19965: LIST
19966: PPUSH
19967: CALL_OW 446
19971: GO 19918
19973: POP
19974: POP
// end else
19975: GO 20130
// for i in GetHumansOutOfUnits ( human_list ) do
19977: LD_ADDR_VAR 0 9
19981: PUSH
19982: LD_VAR 0 2
19986: PPUSH
19987: CALL 28688 0 1
19991: PUSH
19992: FOR_IN
19993: IFFALSE 20128
// if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
19995: LD_VAR 0 9
19999: PPUSH
20000: LD_EXP 41
20004: PUSH
20005: LD_VAR 0 1
20009: ARRAY
20010: PUSH
20011: LD_INT 1
20013: ARRAY
20014: PPUSH
20015: LD_EXP 41
20019: PUSH
20020: LD_VAR 0 1
20024: ARRAY
20025: PUSH
20026: LD_INT 2
20028: ARRAY
20029: PPUSH
20030: CALL_OW 297
20034: PUSH
20035: LD_INT 4
20037: GREATER
20038: IFFALSE 20126
// if aggressive_pullback then
20040: LD_VAR 0 7
20044: IFFALSE 20087
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) else
20046: LD_VAR 0 9
20050: PPUSH
20051: LD_EXP 41
20055: PUSH
20056: LD_VAR 0 1
20060: ARRAY
20061: PUSH
20062: LD_INT 1
20064: ARRAY
20065: PPUSH
20066: LD_EXP 41
20070: PUSH
20071: LD_VAR 0 1
20075: ARRAY
20076: PUSH
20077: LD_INT 2
20079: ARRAY
20080: PPUSH
20081: CALL_OW 114
20085: GO 20126
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
20087: LD_VAR 0 9
20091: PPUSH
20092: LD_EXP 41
20096: PUSH
20097: LD_VAR 0 1
20101: ARRAY
20102: PUSH
20103: LD_INT 1
20105: ARRAY
20106: PPUSH
20107: LD_EXP 41
20111: PUSH
20112: LD_VAR 0 1
20116: ARRAY
20117: PUSH
20118: LD_INT 2
20120: ARRAY
20121: PPUSH
20122: CALL_OW 111
20126: GO 19992
20128: POP
20129: POP
// end ;
20130: LD_VAR 0 8
20134: 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 ; var crane_is_refueling , try_rebuild_again_time ;
20135: GO 20137
20137: DISABLE
20138: LD_INT 0
20140: PPUSH
20141: PPUSH
20142: PPUSH
20143: PPUSH
20144: PPUSH
20145: PPUSH
20146: PPUSH
20147: PPUSH
20148: PPUSH
20149: PPUSH
20150: PPUSH
20151: PPUSH
20152: PPUSH
20153: PPUSH
20154: PPUSH
20155: PPUSH
20156: PPUSH
20157: PPUSH
20158: PPUSH
20159: PPUSH
20160: PPUSH
// begin crane_is_refueling = [ false , false , false , false ] ;
20161: LD_ADDR_VAR 0 20
20165: PUSH
20166: LD_INT 0
20168: PUSH
20169: LD_INT 0
20171: PUSH
20172: LD_INT 0
20174: PUSH
20175: LD_INT 0
20177: PUSH
20178: EMPTY
20179: LIST
20180: LIST
20181: LIST
20182: LIST
20183: ST_TO_ADDR
// try_rebuild_again_time = [ ] ;
20184: LD_ADDR_VAR 0 21
20188: PUSH
20189: EMPTY
20190: ST_TO_ADDR
// for base in ai_bases do
20191: LD_ADDR_VAR 0 9
20195: PUSH
20196: LD_EXP 59
20200: PUSH
20201: FOR_IN
20202: IFFALSE 20229
// try_rebuild_again_time = Replace ( try_rebuild_again_time , base , 0 0$0 ) ;
20204: LD_ADDR_VAR 0 21
20208: PUSH
20209: LD_VAR 0 21
20213: PPUSH
20214: LD_VAR 0 9
20218: PPUSH
20219: LD_INT 0
20221: PPUSH
20222: CALL_OW 1
20226: ST_TO_ADDR
20227: GO 20201
20229: POP
20230: POP
// repeat wait ( 0 0$1 ) ;
20231: LD_INT 35
20233: PPUSH
20234: CALL_OW 67
// for base in ai_bases do
20238: LD_ADDR_VAR 0 9
20242: PUSH
20243: LD_EXP 59
20247: PUSH
20248: FOR_IN
20249: IFFALSE 27338
// begin side = GetBaseSide ( base ) ;
20251: LD_ADDR_VAR 0 1
20255: PUSH
20256: LD_VAR 0 9
20260: PPUSH
20261: CALL 15948 0 1
20265: ST_TO_ADDR
// under_attack := BaseUnderAttack ( base , - 1 ) ;
20266: LD_ADDR_VAR 0 19
20270: PUSH
20271: LD_VAR 0 9
20275: PPUSH
20276: LD_INT 1
20278: NEG
20279: PPUSH
20280: CALL 28793 0 2
20284: ST_TO_ADDR
// if under_attack then
20285: LD_VAR 0 19
20289: IFFALSE 20336
// begin ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
20291: LD_ADDR_EXP 78
20295: PUSH
20296: LD_EXP 78
20300: PPUSH
20301: LD_VAR 0 9
20305: PPUSH
20306: LD_INT 0
20308: PPUSH
20309: CALL_OW 1
20313: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , [ ] ) ;
20314: LD_ADDR_EXP 79
20318: PUSH
20319: LD_EXP 79
20323: PPUSH
20324: LD_VAR 0 9
20328: PPUSH
20329: EMPTY
20330: PPUSH
20331: CALL_OW 1
20335: 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
20336: LD_EXP 86
20340: PUSH
20341: LD_VAR 0 9
20345: ARRAY
20346: PUSH
20347: LD_INT 0
20349: GREATER
20350: PUSH
20351: LD_EXP 30
20355: PUSH
20356: LD_VAR 0 9
20360: ARRAY
20361: PUSH
20362: LD_INT 0
20364: GREATER
20365: PUSH
20366: LD_VAR 0 21
20370: PUSH
20371: LD_VAR 0 9
20375: ARRAY
20376: PUSH
20377: LD_INT 700
20379: GREATEREQUAL
20380: OR
20381: AND
20382: IFFALSE 20431
// begin ai_cannot_rebuild_these_buildings = Replace ( ai_cannot_rebuild_these_buildings , base , [ ] ) ;
20384: LD_ADDR_EXP 86
20388: PUSH
20389: LD_EXP 86
20393: PPUSH
20394: LD_VAR 0 9
20398: PPUSH
20399: EMPTY
20400: PPUSH
20401: CALL_OW 1
20405: ST_TO_ADDR
// try_rebuild_again_time = Replace ( try_rebuild_again_time , base , 0 0$0 ) ;
20406: LD_ADDR_VAR 0 21
20410: PUSH
20411: LD_VAR 0 21
20415: PPUSH
20416: LD_VAR 0 9
20420: PPUSH
20421: LD_INT 0
20423: PPUSH
20424: CALL_OW 1
20428: ST_TO_ADDR
// end else
20429: GO 20466
// try_rebuild_again_time = Replace ( try_rebuild_again_time , base , try_rebuild_again_time [ base ] + 0 0$1 ) ;
20431: LD_ADDR_VAR 0 21
20435: PUSH
20436: LD_VAR 0 21
20440: PPUSH
20441: LD_VAR 0 9
20445: PPUSH
20446: LD_VAR 0 21
20450: PUSH
20451: LD_VAR 0 9
20455: ARRAY
20456: PUSH
20457: LD_INT 35
20459: PLUS
20460: PPUSH
20461: CALL_OW 1
20465: ST_TO_ADDR
// engineers_list = ai_engineers [ base ] diff ai_heal_these_humans [ base ] ;
20466: LD_ADDR_VAR 0 3
20470: PUSH
20471: LD_EXP 30
20475: PUSH
20476: LD_VAR 0 9
20480: ARRAY
20481: PUSH
20482: LD_EXP 44
20486: PUSH
20487: LD_VAR 0 9
20491: ARRAY
20492: DIFF
20493: ST_TO_ADDR
// apemen_engineers_list = ai_apemen_engineers [ base ] diff ai_heal_these_humans [ base ] ;
20494: LD_ADDR_VAR 0 10
20498: PUSH
20499: LD_EXP 63
20503: PUSH
20504: LD_VAR 0 9
20508: ARRAY
20509: PUSH
20510: LD_EXP 44
20514: PUSH
20515: LD_VAR 0 9
20519: ARRAY
20520: DIFF
20521: ST_TO_ADDR
// if base = 1 then
20522: LD_VAR 0 9
20526: PUSH
20527: LD_INT 1
20529: EQUAL
20530: IFFALSE 20746
// begin temp_list = ai_heal_these_humans [ base ] ;
20532: LD_ADDR_VAR 0 4
20536: PUSH
20537: LD_EXP 44
20541: PUSH
20542: LD_VAR 0 9
20546: ARRAY
20547: ST_TO_ADDR
// humans_list = engineers_list ^ apemen_engineers_list ;
20548: LD_ADDR_VAR 0 11
20552: PUSH
20553: LD_VAR 0 3
20557: PUSH
20558: LD_VAR 0 10
20562: ADD
20563: ST_TO_ADDR
// i = 1 ;
20564: LD_ADDR_VAR 0 2
20568: PUSH
20569: LD_INT 1
20571: ST_TO_ADDR
// while i <= humans_list do
20572: LD_VAR 0 2
20576: PUSH
20577: LD_VAR 0 11
20581: LESSEQUAL
20582: IFFALSE 20721
// begin if GetLives ( humans_list [ i ] ) <= 700 then
20584: LD_VAR 0 11
20588: PUSH
20589: LD_VAR 0 2
20593: ARRAY
20594: PPUSH
20595: CALL_OW 256
20599: PUSH
20600: LD_INT 700
20602: LESSEQUAL
20603: IFFALSE 20705
// begin temp_list = temp_list ^ humans_list [ i ] ;
20605: LD_ADDR_VAR 0 4
20609: PUSH
20610: LD_VAR 0 4
20614: PUSH
20615: LD_VAR 0 11
20619: PUSH
20620: LD_VAR 0 2
20624: ARRAY
20625: ADD
20626: ST_TO_ADDR
// engineers_list = engineers_list diff humans_list [ i ] ;
20627: LD_ADDR_VAR 0 3
20631: PUSH
20632: LD_VAR 0 3
20636: PUSH
20637: LD_VAR 0 11
20641: PUSH
20642: LD_VAR 0 2
20646: ARRAY
20647: DIFF
20648: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff humans_list [ i ] ;
20649: LD_ADDR_VAR 0 10
20653: PUSH
20654: LD_VAR 0 10
20658: PUSH
20659: LD_VAR 0 11
20663: PUSH
20664: LD_VAR 0 2
20668: ARRAY
20669: DIFF
20670: ST_TO_ADDR
// humans_list = Delete ( humans_list , i ) ;
20671: LD_ADDR_VAR 0 11
20675: PUSH
20676: LD_VAR 0 11
20680: PPUSH
20681: LD_VAR 0 2
20685: PPUSH
20686: CALL_OW 3
20690: ST_TO_ADDR
// i = i - 1 ;
20691: LD_ADDR_VAR 0 2
20695: PUSH
20696: LD_VAR 0 2
20700: PUSH
20701: LD_INT 1
20703: MINUS
20704: ST_TO_ADDR
// end ; i = i + 1 ;
20705: LD_ADDR_VAR 0 2
20709: PUSH
20710: LD_VAR 0 2
20714: PUSH
20715: LD_INT 1
20717: PLUS
20718: ST_TO_ADDR
// end ;
20719: GO 20572
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
20721: LD_ADDR_EXP 44
20725: PUSH
20726: LD_EXP 44
20730: PPUSH
20731: LD_VAR 0 9
20735: PPUSH
20736: LD_VAR 0 4
20740: PPUSH
20741: CALL_OW 1
20745: ST_TO_ADDR
// end ; crane_usable = false ;
20746: LD_ADDR_VAR 0 12
20750: PUSH
20751: LD_INT 0
20753: ST_TO_ADDR
// if ai_crane [ base ] > 0 then
20754: LD_EXP 69
20758: PUSH
20759: LD_VAR 0 9
20763: ARRAY
20764: PUSH
20765: LD_INT 0
20767: GREATER
20768: IFFALSE 21367
// begin if GetControl ( ai_crane [ base ] ) = control_manual and not ai_crane [ base ] = ai_vehicle_being_moved [ base ] then
20770: LD_EXP 69
20774: PUSH
20775: LD_VAR 0 9
20779: ARRAY
20780: PPUSH
20781: CALL_OW 263
20785: PUSH
20786: LD_INT 1
20788: EQUAL
20789: PUSH
20790: LD_EXP 69
20794: PUSH
20795: LD_VAR 0 9
20799: ARRAY
20800: PUSH
20801: LD_EXP 78
20805: PUSH
20806: LD_VAR 0 9
20810: ARRAY
20811: EQUAL
20812: NOT
20813: AND
20814: IFFALSE 20882
// begin temp_list = UnitsInside ( ai_crane [ base ] ) ;
20816: LD_ADDR_VAR 0 4
20820: PUSH
20821: LD_EXP 69
20825: PUSH
20826: LD_VAR 0 9
20830: ARRAY
20831: PPUSH
20832: CALL_OW 313
20836: ST_TO_ADDR
// if temp_list > 0 then
20837: LD_VAR 0 4
20841: PUSH
20842: LD_INT 0
20844: GREATER
20845: IFFALSE 20882
// if temp_list [ 1 ] <> ai_crane_driver [ base ] then
20847: LD_VAR 0 4
20851: PUSH
20852: LD_INT 1
20854: ARRAY
20855: PUSH
20856: LD_EXP 85
20860: PUSH
20861: LD_VAR 0 9
20865: ARRAY
20866: NONEQUAL
20867: IFFALSE 20882
// ComExitVehicle ( temp_list [ 1 ] ) ;
20869: LD_VAR 0 4
20873: PUSH
20874: LD_INT 1
20876: ARRAY
20877: PPUSH
20878: 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
20882: LD_EXP 69
20886: PUSH
20887: LD_VAR 0 9
20891: ARRAY
20892: PPUSH
20893: CALL_OW 256
20897: PUSH
20898: LD_INT 500
20900: LESSEQUAL
20901: PUSH
20902: LD_EXP 85
20906: PUSH
20907: LD_VAR 0 9
20911: ARRAY
20912: PUSH
20913: LD_INT 0
20915: GREATER
20916: PUSH
20917: LD_EXP 85
20921: PUSH
20922: LD_VAR 0 9
20926: ARRAY
20927: PPUSH
20928: CALL_OW 256
20932: PUSH
20933: LD_INT 500
20935: LESSEQUAL
20936: AND
20937: OR
20938: PUSH
20939: LD_EXP 84
20943: PUSH
20944: LD_VAR 0 9
20948: ARRAY
20949: PUSH
20950: LD_EXP 69
20954: PUSH
20955: LD_VAR 0 9
20959: ARRAY
20960: PPUSH
20961: CALL_OW 256
20965: PUSH
20966: LD_INT 1000
20968: LESS
20969: PUSH
20970: LD_EXP 85
20974: PUSH
20975: LD_VAR 0 9
20979: ARRAY
20980: PUSH
20981: LD_INT 0
20983: GREATER
20984: PUSH
20985: LD_EXP 85
20989: PUSH
20990: LD_VAR 0 9
20994: ARRAY
20995: PPUSH
20996: CALL_OW 256
21000: PUSH
21001: LD_INT 1000
21003: LESS
21004: AND
21005: OR
21006: AND
21007: OR
21008: IFFALSE 21131
// begin ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , true ) ;
21010: LD_ADDR_EXP 84
21014: PUSH
21015: LD_EXP 84
21019: PPUSH
21020: LD_VAR 0 9
21024: PPUSH
21025: LD_INT 1
21027: PPUSH
21028: CALL_OW 1
21032: ST_TO_ADDR
// if GetDistUnitXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 6 then
21033: LD_EXP 69
21037: PUSH
21038: LD_VAR 0 9
21042: ARRAY
21043: PPUSH
21044: LD_EXP 41
21048: PUSH
21049: LD_VAR 0 9
21053: ARRAY
21054: PUSH
21055: LD_INT 1
21057: ARRAY
21058: PPUSH
21059: LD_EXP 41
21063: PUSH
21064: LD_VAR 0 9
21068: ARRAY
21069: PUSH
21070: LD_INT 2
21072: ARRAY
21073: PPUSH
21074: CALL_OW 297
21078: PUSH
21079: LD_INT 6
21081: GREATER
21082: IFFALSE 21129
// ComMoveXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
21084: LD_EXP 69
21088: PUSH
21089: LD_VAR 0 9
21093: ARRAY
21094: PPUSH
21095: LD_EXP 41
21099: PUSH
21100: LD_VAR 0 9
21104: ARRAY
21105: PUSH
21106: LD_INT 1
21108: ARRAY
21109: PPUSH
21110: LD_EXP 41
21114: PUSH
21115: LD_VAR 0 9
21119: ARRAY
21120: PUSH
21121: LD_INT 2
21123: ARRAY
21124: PPUSH
21125: CALL_OW 111
// end else
21129: GO 21367
// begin ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , false ) ;
21131: LD_ADDR_EXP 84
21135: PUSH
21136: LD_EXP 84
21140: PPUSH
21141: LD_VAR 0 9
21145: PPUSH
21146: LD_INT 0
21148: PPUSH
21149: CALL_OW 1
21153: ST_TO_ADDR
// if GetEngine ( ai_crane [ base ] ) = engine_combustion then
21154: LD_EXP 69
21158: PUSH
21159: LD_VAR 0 9
21163: ARRAY
21164: PPUSH
21165: CALL_OW 262
21169: PUSH
21170: LD_INT 1
21172: EQUAL
21173: IFFALSE 21346
// begin i = GetFuel ( ai_crane [ base ] ) ;
21175: LD_ADDR_VAR 0 2
21179: PUSH
21180: LD_EXP 69
21184: PUSH
21185: LD_VAR 0 9
21189: ARRAY
21190: PPUSH
21191: CALL_OW 261
21195: ST_TO_ADDR
// if i > 90 or not IsOk ( ai_depot [ base ] ) then
21196: LD_VAR 0 2
21200: PUSH
21201: LD_INT 90
21203: GREATER
21204: PUSH
21205: LD_EXP 34
21209: PUSH
21210: LD_VAR 0 9
21214: ARRAY
21215: PPUSH
21216: CALL_OW 302
21220: NOT
21221: OR
21222: IFFALSE 21249
// crane_is_refueling = Replace ( crane_is_refueling , base , false ) else
21224: LD_ADDR_VAR 0 20
21228: PUSH
21229: LD_VAR 0 20
21233: PPUSH
21234: LD_VAR 0 9
21238: PPUSH
21239: LD_INT 0
21241: PPUSH
21242: CALL_OW 1
21246: ST_TO_ADDR
21247: GO 21346
// if i < 25 or crane_is_refueling [ base ] then
21249: LD_VAR 0 2
21253: PUSH
21254: LD_INT 25
21256: LESS
21257: PUSH
21258: LD_VAR 0 20
21262: PUSH
21263: LD_VAR 0 9
21267: ARRAY
21268: OR
21269: IFFALSE 21346
// begin ComMoveUnit ( ai_crane [ base ] , ai_depot [ base ] ) ;
21271: LD_EXP 69
21275: PUSH
21276: LD_VAR 0 9
21280: ARRAY
21281: PPUSH
21282: LD_EXP 34
21286: PUSH
21287: LD_VAR 0 9
21291: ARRAY
21292: PPUSH
21293: CALL_OW 112
// AddComRefuel ( ai_crane [ base ] , ai_depot [ base ] ) ;
21297: LD_EXP 69
21301: PUSH
21302: LD_VAR 0 9
21306: ARRAY
21307: PPUSH
21308: LD_EXP 34
21312: PUSH
21313: LD_VAR 0 9
21317: ARRAY
21318: PPUSH
21319: CALL_OW 210
// crane_is_refueling = Replace ( crane_is_refueling , base , true ) ;
21323: LD_ADDR_VAR 0 20
21327: PUSH
21328: LD_VAR 0 20
21332: PPUSH
21333: LD_VAR 0 9
21337: PPUSH
21338: LD_INT 1
21340: PPUSH
21341: CALL_OW 1
21345: ST_TO_ADDR
// end ; end ; if not crane_is_refueling [ base ] then
21346: LD_VAR 0 20
21350: PUSH
21351: LD_VAR 0 9
21355: ARRAY
21356: NOT
21357: IFFALSE 21367
// crane_usable = true ;
21359: LD_ADDR_VAR 0 12
21363: PUSH
21364: LD_INT 1
21366: ST_TO_ADDR
// end ; end ; if engineers_list = 0 and apemen_engineers_list = 0 and not crane_usable then
21367: LD_VAR 0 3
21371: PUSH
21372: LD_INT 0
21374: EQUAL
21375: PUSH
21376: LD_VAR 0 10
21380: PUSH
21381: LD_INT 0
21383: EQUAL
21384: AND
21385: PUSH
21386: LD_VAR 0 12
21390: NOT
21391: AND
21392: IFFALSE 21396
// continue ;
21394: GO 20248
// temp_list_2 = UnitFilter ( engineers_list , [ f_class , class_engineer ] ) ;
21396: LD_ADDR_VAR 0 8
21400: PUSH
21401: LD_VAR 0 3
21405: PPUSH
21406: LD_INT 25
21408: PUSH
21409: LD_INT 2
21411: PUSH
21412: EMPTY
21413: LIST
21414: LIST
21415: PPUSH
21416: CALL_OW 72
21420: ST_TO_ADDR
// if ai_captured_buildings [ base ] > 0 and temp_list_2 > 0 then
21421: LD_EXP 87
21425: PUSH
21426: LD_VAR 0 9
21430: ARRAY
21431: PUSH
21432: LD_INT 0
21434: GREATER
21435: PUSH
21436: LD_VAR 0 8
21440: PUSH
21441: LD_INT 0
21443: GREATER
21444: AND
21445: IFFALSE 21723
// begin temp_list = [ ] ;
21447: LD_ADDR_VAR 0 4
21451: PUSH
21452: EMPTY
21453: ST_TO_ADDR
// for i in ai_captured_buildings [ base ] do
21454: LD_ADDR_VAR 0 2
21458: PUSH
21459: LD_EXP 87
21463: PUSH
21464: LD_VAR 0 9
21468: ARRAY
21469: PUSH
21470: FOR_IN
21471: IFFALSE 21527
// if GetBType ( i ) in [ b_depot , b_warehouse ] then
21473: LD_VAR 0 2
21477: PPUSH
21478: CALL_OW 266
21482: PUSH
21483: LD_INT 0
21485: PUSH
21486: LD_INT 1
21488: PUSH
21489: EMPTY
21490: LIST
21491: LIST
21492: IN
21493: IFFALSE 21511
// temp_list = temp_list ^ 1 else
21495: LD_ADDR_VAR 0 4
21499: PUSH
21500: LD_VAR 0 4
21504: PUSH
21505: LD_INT 1
21507: ADD
21508: ST_TO_ADDR
21509: GO 21525
// temp_list = temp_list ^ 0 ;
21511: LD_ADDR_VAR 0 4
21515: PUSH
21516: LD_VAR 0 4
21520: PUSH
21521: LD_INT 0
21523: ADD
21524: ST_TO_ADDR
21525: GO 21470
21527: POP
21528: POP
// temp_list = SortListByListDesc ( ai_captured_buildings [ base ] , temp_list ) ;
21529: LD_ADDR_VAR 0 4
21533: PUSH
21534: LD_EXP 87
21538: PUSH
21539: LD_VAR 0 9
21543: ARRAY
21544: PPUSH
21545: LD_VAR 0 4
21549: PPUSH
21550: CALL_OW 77
21554: ST_TO_ADDR
// temp_list_2 = GetHumansOutOfUnits ( temp_list_2 ) ;
21555: LD_ADDR_VAR 0 8
21559: PUSH
21560: LD_VAR 0 8
21564: PPUSH
21565: CALL 28688 0 1
21569: ST_TO_ADDR
// if temp_list_2 > 0 then
21570: LD_VAR 0 8
21574: PUSH
21575: LD_INT 0
21577: GREATER
21578: IFFALSE 21694
// begin temp_list_2 = SortListByListDesc ( temp_list_2 , temp_list_2 ) ;
21580: LD_ADDR_VAR 0 8
21584: PUSH
21585: LD_VAR 0 8
21589: PPUSH
21590: LD_VAR 0 8
21594: PPUSH
21595: CALL_OW 77
21599: ST_TO_ADDR
// SetTaskList ( temp_list_2 [ 1 ] , [ [ e , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) , temp_list [ 1 ] , 0 , 0 , 0 ] ] ) ;
21600: LD_VAR 0 8
21604: PUSH
21605: LD_INT 1
21607: ARRAY
21608: PPUSH
21609: LD_STRING e
21611: PUSH
21612: LD_VAR 0 4
21616: PUSH
21617: LD_INT 1
21619: ARRAY
21620: PPUSH
21621: CALL_OW 250
21625: PUSH
21626: LD_VAR 0 4
21630: PUSH
21631: LD_INT 1
21633: ARRAY
21634: PPUSH
21635: CALL_OW 251
21639: PUSH
21640: LD_VAR 0 4
21644: PUSH
21645: LD_INT 1
21647: ARRAY
21648: PUSH
21649: LD_INT 0
21651: PUSH
21652: LD_INT 0
21654: PUSH
21655: LD_INT 0
21657: PUSH
21658: EMPTY
21659: LIST
21660: LIST
21661: LIST
21662: LIST
21663: LIST
21664: LIST
21665: LIST
21666: PUSH
21667: EMPTY
21668: LIST
21669: PPUSH
21670: CALL_OW 446
// engineers_list = engineers_list diff temp_list_2 [ 1 ] ;
21674: LD_ADDR_VAR 0 3
21678: PUSH
21679: LD_VAR 0 3
21683: PUSH
21684: LD_VAR 0 8
21688: PUSH
21689: LD_INT 1
21691: ARRAY
21692: DIFF
21693: ST_TO_ADDR
// end ; if engineers_list = 0 and apemen_engineers_list = 0 and not crane_usable then
21694: LD_VAR 0 3
21698: PUSH
21699: LD_INT 0
21701: EQUAL
21702: PUSH
21703: LD_VAR 0 10
21707: PUSH
21708: LD_INT 0
21710: EQUAL
21711: AND
21712: PUSH
21713: LD_VAR 0 12
21717: NOT
21718: AND
21719: IFFALSE 21723
// continue ;
21721: GO 20248
// end ; case base of 1 :
21723: LD_VAR 0 9
21727: PUSH
21728: LD_INT 1
21730: DOUBLE
21731: EQUAL
21732: IFTRUE 21736
21734: GO 21755
21736: POP
// begin engineers_not_allowed_to_repair_area = no_engineer_repair_area ;
21737: LD_ADDR_VAR 0 14
21741: PUSH
21742: LD_INT 7
21744: ST_TO_ADDR
// crane_not_allowed_to_repair_area = no_crane_repair_area ;
21745: LD_ADDR_VAR 0 15
21749: PUSH
21750: LD_INT 8
21752: ST_TO_ADDR
// end ; 2 :
21753: GO 21783
21755: LD_INT 2
21757: DOUBLE
21758: EQUAL
21759: IFTRUE 21763
21761: GO 21782
21763: POP
// begin engineers_not_allowed_to_repair_area = 0 ;
21764: LD_ADDR_VAR 0 14
21768: PUSH
21769: LD_INT 0
21771: ST_TO_ADDR
// crane_not_allowed_to_repair_area = 0 ;
21772: LD_ADDR_VAR 0 15
21776: PUSH
21777: LD_INT 0
21779: ST_TO_ADDR
// end ; end ;
21780: GO 21783
21782: POP
// repairing_buildings = false ;
21783: LD_ADDR_VAR 0 18
21787: PUSH
21788: LD_INT 0
21790: ST_TO_ADDR
// for k = 1 to 3 do
21791: LD_ADDR_VAR 0 17
21795: PUSH
21796: DOUBLE
21797: LD_INT 1
21799: DEC
21800: ST_TO_ADDR
21801: LD_INT 3
21803: PUSH
21804: FOR_TO
21805: IFFALSE 22443
// begin i = 1 ;
21807: LD_ADDR_VAR 0 2
21811: PUSH
21812: LD_INT 1
21814: ST_TO_ADDR
// buildings_list = [ ] ;
21815: LD_ADDR_VAR 0 5
21819: PUSH
21820: EMPTY
21821: ST_TO_ADDR
// repeat case i of 1 :
21822: LD_VAR 0 2
21826: PUSH
21827: LD_INT 1
21829: DOUBLE
21830: EQUAL
21831: IFTRUE 21835
21833: GO 21872
21835: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] , [ f_not , [ f_ok ] ] ) ; 2 :
21836: LD_ADDR_VAR 0 5
21840: PUSH
21841: LD_EXP 45
21845: PUSH
21846: LD_VAR 0 9
21850: ARRAY
21851: PPUSH
21852: LD_INT 3
21854: PUSH
21855: LD_INT 50
21857: PUSH
21858: EMPTY
21859: LIST
21860: PUSH
21861: EMPTY
21862: LIST
21863: LIST
21864: PPUSH
21865: CALL_OW 72
21869: ST_TO_ADDR
21870: GO 21922
21872: LD_INT 2
21874: DOUBLE
21875: EQUAL
21876: IFTRUE 21880
21878: GO 21921
21880: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] , [ f_not , [ f_lives , 1000 ] ] ) ; end ;
21881: LD_ADDR_VAR 0 5
21885: PUSH
21886: LD_EXP 45
21890: PUSH
21891: LD_VAR 0 9
21895: ARRAY
21896: PPUSH
21897: LD_INT 3
21899: PUSH
21900: LD_INT 24
21902: PUSH
21903: LD_INT 1000
21905: PUSH
21906: EMPTY
21907: LIST
21908: LIST
21909: PUSH
21910: EMPTY
21911: LIST
21912: LIST
21913: PPUSH
21914: CALL_OW 72
21918: ST_TO_ADDR
21919: GO 21922
21921: POP
// buildings_list = buildings_list diff am_br4 ;
21922: LD_ADDR_VAR 0 5
21926: PUSH
21927: LD_VAR 0 5
21931: PUSH
21932: LD_INT 3
21934: DIFF
21935: ST_TO_ADDR
// case k of 2 :
21936: LD_VAR 0 17
21940: PUSH
21941: LD_INT 2
21943: DOUBLE
21944: EQUAL
21945: IFTRUE 21949
21947: GO 22002
21949: POP
// begin if under_attack and engineers_not_allowed_to_repair_area > 0 then
21950: LD_VAR 0 19
21954: PUSH
21955: LD_VAR 0 14
21959: PUSH
21960: LD_INT 0
21962: GREATER
21963: AND
21964: IFFALSE 22000
// buildings_list = UnitFilter ( buildings_list , [ f_not , [ f_inarea , engineers_not_allowed_to_repair_area ] ] ) ;
21966: LD_ADDR_VAR 0 5
21970: PUSH
21971: LD_VAR 0 5
21975: PPUSH
21976: LD_INT 3
21978: PUSH
21979: LD_INT 95
21981: PUSH
21982: LD_VAR 0 14
21986: PUSH
21987: EMPTY
21988: LIST
21989: LIST
21990: PUSH
21991: EMPTY
21992: LIST
21993: LIST
21994: PPUSH
21995: CALL_OW 72
21999: ST_TO_ADDR
// end ; 3 :
22000: GO 22058
22002: LD_INT 3
22004: DOUBLE
22005: EQUAL
22006: IFTRUE 22010
22008: GO 22057
22010: POP
// begin if crane_not_allowed_to_repair_area > 0 then
22011: LD_VAR 0 15
22015: PUSH
22016: LD_INT 0
22018: GREATER
22019: IFFALSE 22055
// buildings_list = UnitFilter ( buildings_list , [ f_not , [ f_inarea , crane_not_allowed_to_repair_area ] ] ) ;
22021: LD_ADDR_VAR 0 5
22025: PUSH
22026: LD_VAR 0 5
22030: PPUSH
22031: LD_INT 3
22033: PUSH
22034: LD_INT 95
22036: PUSH
22037: LD_VAR 0 15
22041: PUSH
22042: EMPTY
22043: LIST
22044: LIST
22045: PUSH
22046: EMPTY
22047: LIST
22048: LIST
22049: PPUSH
22050: CALL_OW 72
22054: ST_TO_ADDR
// end ; end ;
22055: GO 22058
22057: POP
// i = i + 1 ;
22058: LD_ADDR_VAR 0 2
22062: PUSH
22063: LD_VAR 0 2
22067: PUSH
22068: LD_INT 1
22070: PLUS
22071: ST_TO_ADDR
// until buildings_list > 0 or i > 2 ;
22072: LD_VAR 0 5
22076: PUSH
22077: LD_INT 0
22079: GREATER
22080: PUSH
22081: LD_VAR 0 2
22085: PUSH
22086: LD_INT 2
22088: GREATER
22089: OR
22090: IFFALSE 21822
// if buildings_list > 0 then
22092: LD_VAR 0 5
22096: PUSH
22097: LD_INT 0
22099: GREATER
22100: IFFALSE 22441
// begin case k of 1 :
22102: LD_VAR 0 17
22106: PUSH
22107: LD_INT 1
22109: DOUBLE
22110: EQUAL
22111: IFTRUE 22115
22113: GO 22151
22115: POP
// begin if apemen_engineers_list > 0 then
22116: LD_VAR 0 10
22120: PUSH
22121: LD_INT 0
22123: GREATER
22124: IFFALSE 22134
// repairing_buildings = true ;
22126: LD_ADDR_VAR 0 18
22130: PUSH
22131: LD_INT 1
22133: ST_TO_ADDR
// workers_list = GetHumansOutOfUnits ( apemen_engineers_list ) ;
22134: LD_ADDR_VAR 0 16
22138: PUSH
22139: LD_VAR 0 10
22143: PPUSH
22144: CALL 28688 0 1
22148: ST_TO_ADDR
// end ; 2 :
22149: GO 22289
22151: LD_INT 2
22153: DOUBLE
22154: EQUAL
22155: IFTRUE 22159
22157: GO 22195
22159: POP
// begin if engineers_list > 0 then
22160: LD_VAR 0 3
22164: PUSH
22165: LD_INT 0
22167: GREATER
22168: IFFALSE 22178
// repairing_buildings = true ;
22170: LD_ADDR_VAR 0 18
22174: PUSH
22175: LD_INT 1
22177: ST_TO_ADDR
// workers_list = GetHumansOutOfUnits ( engineers_list ) ;
22178: LD_ADDR_VAR 0 16
22182: PUSH
22183: LD_VAR 0 3
22187: PPUSH
22188: CALL 28688 0 1
22192: ST_TO_ADDR
// end ; 3 :
22193: GO 22289
22195: LD_INT 3
22197: DOUBLE
22198: EQUAL
22199: IFTRUE 22203
22201: GO 22288
22203: POP
// begin if ai_crane [ base ] > 0 then
22204: LD_EXP 69
22208: PUSH
22209: LD_VAR 0 9
22213: ARRAY
22214: PUSH
22215: LD_INT 0
22217: GREATER
22218: IFFALSE 22228
// repairing_buildings = true ;
22220: LD_ADDR_VAR 0 18
22224: PUSH
22225: LD_INT 1
22227: ST_TO_ADDR
// if ai_crane [ base ] > 0 and crane_usable then
22228: LD_EXP 69
22232: PUSH
22233: LD_VAR 0 9
22237: ARRAY
22238: PUSH
22239: LD_INT 0
22241: GREATER
22242: PUSH
22243: LD_VAR 0 12
22247: AND
22248: IFFALSE 22279
// begin workers_list = [ ai_crane [ base ] ] ;
22250: LD_ADDR_VAR 0 16
22254: PUSH
22255: LD_EXP 69
22259: PUSH
22260: LD_VAR 0 9
22264: ARRAY
22265: PUSH
22266: EMPTY
22267: LIST
22268: ST_TO_ADDR
// crane_usable = false ;
22269: LD_ADDR_VAR 0 12
22273: PUSH
22274: LD_INT 0
22276: ST_TO_ADDR
// end else
22277: GO 22286
// workers_list = [ ] ;
22279: LD_ADDR_VAR 0 16
22283: PUSH
22284: EMPTY
22285: ST_TO_ADDR
// end ; end ;
22286: GO 22289
22288: POP
// repeat i = 1 ;
22289: LD_ADDR_VAR 0 2
22293: PUSH
22294: LD_INT 1
22296: ST_TO_ADDR
// while i <= buildings_list do
22297: LD_VAR 0 2
22301: PUSH
22302: LD_VAR 0 5
22306: LESSEQUAL
22307: IFFALSE 22431
// begin if workers_list = 0 then
22309: LD_VAR 0 16
22313: PUSH
22314: LD_INT 0
22316: EQUAL
22317: IFFALSE 22321
// break ;
22319: GO 22431
// temp_unit = NearestUnitToUnit ( workers_list , buildings_list [ i ] ) ;
22321: LD_ADDR_VAR 0 6
22325: PUSH
22326: LD_VAR 0 16
22330: PPUSH
22331: LD_VAR 0 5
22335: PUSH
22336: LD_VAR 0 2
22340: ARRAY
22341: PPUSH
22342: CALL_OW 74
22346: ST_TO_ADDR
// ComRepairBuilding ( temp_unit , buildings_list [ i ] ) ;
22347: LD_VAR 0 6
22351: PPUSH
22352: LD_VAR 0 5
22356: PUSH
22357: LD_VAR 0 2
22361: ARRAY
22362: PPUSH
22363: CALL_OW 130
// workers_list = workers_list diff temp_unit ;
22367: LD_ADDR_VAR 0 16
22371: PUSH
22372: LD_VAR 0 16
22376: PUSH
22377: LD_VAR 0 6
22381: DIFF
22382: ST_TO_ADDR
// engineers_list = engineers_list diff temp_unit ;
22383: LD_ADDR_VAR 0 3
22387: PUSH
22388: LD_VAR 0 3
22392: PUSH
22393: LD_VAR 0 6
22397: DIFF
22398: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff temp_unit ;
22399: LD_ADDR_VAR 0 10
22403: PUSH
22404: LD_VAR 0 10
22408: PUSH
22409: LD_VAR 0 6
22413: DIFF
22414: ST_TO_ADDR
// i = i + 1 ;
22415: LD_ADDR_VAR 0 2
22419: PUSH
22420: LD_VAR 0 2
22424: PUSH
22425: LD_INT 1
22427: PLUS
22428: ST_TO_ADDR
// end ;
22429: GO 22297
// until workers_list = 0 ;
22431: LD_VAR 0 16
22435: PUSH
22436: LD_INT 0
22438: EQUAL
22439: IFFALSE 22289
// end ; end ;
22441: GO 21804
22443: POP
22444: POP
// if repairing_buildings then
22445: LD_VAR 0 18
22449: IFFALSE 22453
// continue ;
22451: GO 20248
// if not under_attack then
22453: LD_VAR 0 19
22457: NOT
22458: IFFALSE 27109
// begin if ai_building_under_construction [ base ] > 0 then
22460: LD_EXP 43
22464: PUSH
22465: LD_VAR 0 9
22469: ARRAY
22470: PUSH
22471: LD_INT 0
22473: GREATER
22474: IFFALSE 22648
// if BuildingStatus ( ai_building_under_construction [ base ] ) = bs_build then
22476: LD_EXP 43
22480: PUSH
22481: LD_VAR 0 9
22485: ARRAY
22486: PPUSH
22487: CALL_OW 461
22491: PUSH
22492: LD_INT 1
22494: EQUAL
22495: IFFALSE 22610
// begin temp_list_2 = GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) ;
22497: LD_ADDR_VAR 0 8
22501: PUSH
22502: LD_VAR 0 3
22506: PUSH
22507: LD_VAR 0 10
22511: ADD
22512: PPUSH
22513: CALL 28688 0 1
22517: ST_TO_ADDR
// if crane_usable and not IsInArea ( ai_building_under_construction [ base ] , crane_not_allowed_to_repair_area ) then
22518: LD_VAR 0 12
22522: PUSH
22523: LD_EXP 43
22527: PUSH
22528: LD_VAR 0 9
22532: ARRAY
22533: PPUSH
22534: LD_VAR 0 15
22538: PPUSH
22539: CALL_OW 308
22543: NOT
22544: AND
22545: IFFALSE 22569
// temp_list_2 = temp_list_2 ^ ai_crane [ base ] ;
22547: LD_ADDR_VAR 0 8
22551: PUSH
22552: LD_VAR 0 8
22556: PUSH
22557: LD_EXP 69
22561: PUSH
22562: LD_VAR 0 9
22566: ARRAY
22567: ADD
22568: ST_TO_ADDR
// for i in temp_list_2 do
22569: LD_ADDR_VAR 0 2
22573: PUSH
22574: LD_VAR 0 8
22578: PUSH
22579: FOR_IN
22580: IFFALSE 22604
// ComRepairBuilding ( i , ai_building_under_construction [ base ] ) ;
22582: LD_VAR 0 2
22586: PPUSH
22587: LD_EXP 43
22591: PUSH
22592: LD_VAR 0 9
22596: ARRAY
22597: PPUSH
22598: CALL_OW 130
22602: GO 22579
22604: POP
22605: POP
// continue ;
22606: GO 20248
// end else
22608: GO 22648
// begin ComCancel ( ai_building_under_construction [ base ] ) ;
22610: LD_EXP 43
22614: PUSH
22615: LD_VAR 0 9
22619: ARRAY
22620: PPUSH
22621: CALL_OW 127
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
22625: LD_ADDR_EXP 43
22629: PUSH
22630: LD_EXP 43
22634: PPUSH
22635: LD_VAR 0 9
22639: PPUSH
22640: LD_INT 0
22642: PPUSH
22643: CALL_OW 1
22647: ST_TO_ADDR
// end ; if ai_all_buildings [ base ] - ai_excepted_buildings [ base ] < ai_buildings_locations [ base ] or ai_upcoming_building_data [ base ] > 0 then
22648: LD_EXP 45
22652: PUSH
22653: LD_VAR 0 9
22657: ARRAY
22658: PUSH
22659: LD_EXP 89
22663: PUSH
22664: LD_VAR 0 9
22668: ARRAY
22669: MINUS
22670: PUSH
22671: LD_EXP 38
22675: PUSH
22676: LD_VAR 0 9
22680: ARRAY
22681: LESS
22682: PUSH
22683: LD_EXP 47
22687: PUSH
22688: LD_VAR 0 9
22692: ARRAY
22693: PUSH
22694: LD_INT 0
22696: GREATER
22697: OR
22698: IFFALSE 26995
// begin if ai_upcoming_building_data [ base ] = 0 then
22700: LD_EXP 47
22704: PUSH
22705: LD_VAR 0 9
22709: ARRAY
22710: PUSH
22711: LD_INT 0
22713: EQUAL
22714: IFFALSE 23142
// begin temp_list = [ ] ;
22716: LD_ADDR_VAR 0 4
22720: PUSH
22721: EMPTY
22722: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
22723: LD_ADDR_VAR 0 2
22727: PUSH
22728: LD_EXP 38
22732: PUSH
22733: LD_VAR 0 9
22737: ARRAY
22738: PUSH
22739: FOR_IN
22740: IFFALSE 22809
// if GetBType ( HexInfo ( i [ 1 ] , i [ 2 ] ) ) = - 1 and not i in ai_cannot_rebuild_these_buildings [ base ] then
22742: LD_VAR 0 2
22746: PUSH
22747: LD_INT 1
22749: ARRAY
22750: PPUSH
22751: LD_VAR 0 2
22755: PUSH
22756: LD_INT 2
22758: ARRAY
22759: PPUSH
22760: CALL_OW 428
22764: PPUSH
22765: CALL_OW 266
22769: PUSH
22770: LD_INT 1
22772: NEG
22773: EQUAL
22774: PUSH
22775: LD_VAR 0 2
22779: PUSH
22780: LD_EXP 86
22784: PUSH
22785: LD_VAR 0 9
22789: ARRAY
22790: IN
22791: NOT
22792: AND
22793: IFFALSE 22807
// begin temp_list = i ;
22795: LD_ADDR_VAR 0 4
22799: PUSH
22800: LD_VAR 0 2
22804: ST_TO_ADDR
// break ;
22805: GO 22809
// end ;
22807: GO 22739
22809: POP
22810: POP
// if temp_list > 0 then
22811: LD_VAR 0 4
22815: PUSH
22816: LD_INT 0
22818: GREATER
22819: IFFALSE 23142
// begin if temp_list [ 4 ] = b_bunker and GetBaseNation ( base ) in [ nation_american , nation_russian ] then
22821: LD_VAR 0 4
22825: PUSH
22826: LD_INT 4
22828: ARRAY
22829: PUSH
22830: LD_INT 32
22832: EQUAL
22833: PUSH
22834: LD_VAR 0 9
22838: PPUSH
22839: CALL 16025 0 1
22843: PUSH
22844: LD_INT 1
22846: PUSH
22847: LD_INT 3
22849: PUSH
22850: EMPTY
22851: LIST
22852: LIST
22853: IN
22854: AND
22855: IFFALSE 23117
// begin k = 0 ;
22857: LD_ADDR_VAR 0 17
22861: PUSH
22862: LD_INT 0
22864: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
22865: LD_ADDR_VAR 0 2
22869: PUSH
22870: LD_EXP 38
22874: PUSH
22875: LD_VAR 0 9
22879: ARRAY
22880: PUSH
22881: FOR_IN
22882: IFFALSE 22933
// if i [ 4 ] in [ b_breastwork , b_bunker , b_armoury , b_barracks , b_fort ] then
22884: LD_VAR 0 2
22888: PUSH
22889: LD_INT 4
22891: ARRAY
22892: PUSH
22893: LD_INT 31
22895: PUSH
22896: LD_INT 32
22898: PUSH
22899: LD_INT 4
22901: PUSH
22902: LD_INT 5
22904: PUSH
22905: LD_INT 35
22907: PUSH
22908: EMPTY
22909: LIST
22910: LIST
22911: LIST
22912: LIST
22913: LIST
22914: IN
22915: IFFALSE 22931
// k = k + 1 ;
22917: LD_ADDR_VAR 0 17
22921: PUSH
22922: LD_VAR 0 17
22926: PUSH
22927: LD_INT 1
22929: PLUS
22930: ST_TO_ADDR
22931: GO 22881
22933: POP
22934: POP
// if k > ai_soldiers [ base ] then
22935: LD_VAR 0 17
22939: PUSH
22940: LD_EXP 29
22944: PUSH
22945: LD_VAR 0 9
22949: ARRAY
22950: GREATER
22951: IFFALSE 23117
// begin for i = 1 to ai_buildings_locations [ base ] do
22953: LD_ADDR_VAR 0 2
22957: PUSH
22958: DOUBLE
22959: LD_INT 1
22961: DEC
22962: ST_TO_ADDR
22963: LD_EXP 38
22967: PUSH
22968: LD_VAR 0 9
22972: ARRAY
22973: PUSH
22974: FOR_TO
22975: IFFALSE 23094
// if ai_buildings_locations [ base ] [ i ] = temp_list then
22977: LD_EXP 38
22981: PUSH
22982: LD_VAR 0 9
22986: ARRAY
22987: PUSH
22988: LD_VAR 0 2
22992: ARRAY
22993: PUSH
22994: LD_VAR 0 4
22998: EQUAL
22999: IFFALSE 23092
// begin temp_list_2 = Replace ( ai_buildings_locations [ base ] [ i ] , 4 , b_turret ) ;
23001: LD_ADDR_VAR 0 8
23005: PUSH
23006: LD_EXP 38
23010: PUSH
23011: LD_VAR 0 9
23015: ARRAY
23016: PUSH
23017: LD_VAR 0 2
23021: ARRAY
23022: PPUSH
23023: LD_INT 4
23025: PPUSH
23026: LD_INT 33
23028: PPUSH
23029: CALL_OW 1
23033: ST_TO_ADDR
// temp_list_2 = Replace ( ai_buildings_locations [ base ] , i , temp_list_2 ) ;
23034: LD_ADDR_VAR 0 8
23038: PUSH
23039: LD_EXP 38
23043: PUSH
23044: LD_VAR 0 9
23048: ARRAY
23049: PPUSH
23050: LD_VAR 0 2
23054: PPUSH
23055: LD_VAR 0 8
23059: PPUSH
23060: CALL_OW 1
23064: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list_2 ) ;
23065: LD_ADDR_EXP 38
23069: PUSH
23070: LD_EXP 38
23074: PPUSH
23075: LD_VAR 0 9
23079: PPUSH
23080: LD_VAR 0 8
23084: PPUSH
23085: CALL_OW 1
23089: ST_TO_ADDR
// break ;
23090: GO 23094
// end ;
23092: GO 22974
23094: POP
23095: POP
// temp_list = Replace ( temp_list , 4 , b_turret ) ;
23096: LD_ADDR_VAR 0 4
23100: PUSH
23101: LD_VAR 0 4
23105: PPUSH
23106: LD_INT 4
23108: PPUSH
23109: LD_INT 33
23111: PPUSH
23112: CALL_OW 1
23116: ST_TO_ADDR
// end ; end ; ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , temp_list ) ;
23117: LD_ADDR_EXP 47
23121: PUSH
23122: LD_EXP 47
23126: PPUSH
23127: LD_VAR 0 9
23131: PPUSH
23132: LD_VAR 0 4
23136: PPUSH
23137: CALL_OW 1
23141: ST_TO_ADDR
// end ; end ; if ai_upcoming_building_data [ base ] > 0 then
23142: LD_EXP 47
23146: PUSH
23147: LD_VAR 0 9
23151: ARRAY
23152: PUSH
23153: LD_INT 0
23155: GREATER
23156: IFFALSE 26995
// begin if ai_building_constructor [ base ] = 0 then
23158: LD_EXP 46
23162: PUSH
23163: LD_VAR 0 9
23167: ARRAY
23168: PUSH
23169: LD_INT 0
23171: EQUAL
23172: IFFALSE 23488
// begin temp_list_2 = UnitFilter ( ai_engineers [ base ] , [ f_class , class_engineer ] ) ;
23174: LD_ADDR_VAR 0 8
23178: PUSH
23179: LD_EXP 30
23183: PUSH
23184: LD_VAR 0 9
23188: ARRAY
23189: PPUSH
23190: LD_INT 25
23192: PUSH
23193: LD_INT 2
23195: PUSH
23196: EMPTY
23197: LIST
23198: LIST
23199: PPUSH
23200: CALL_OW 72
23204: ST_TO_ADDR
// if temp_list_2 > 0 then
23205: LD_VAR 0 8
23209: PUSH
23210: LD_INT 0
23212: GREATER
23213: IFFALSE 23300
// begin temp_list = [ ] ;
23215: LD_ADDR_VAR 0 4
23219: PUSH
23220: EMPTY
23221: ST_TO_ADDR
// for i in temp_list_2 do
23222: LD_ADDR_VAR 0 2
23226: PUSH
23227: LD_VAR 0 8
23231: PUSH
23232: FOR_IN
23233: IFFALSE 23261
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
23235: LD_ADDR_VAR 0 4
23239: PUSH
23240: LD_VAR 0 4
23244: PUSH
23245: LD_VAR 0 2
23249: PPUSH
23250: LD_INT 2
23252: PPUSH
23253: CALL_OW 259
23257: ADD
23258: ST_TO_ADDR
23259: GO 23232
23261: POP
23262: POP
// ai_building_constructor = Replace ( ai_building_constructor , base , BestFromListByList ( temp_list_2 , temp_list ) ) ;
23263: LD_ADDR_EXP 46
23267: PUSH
23268: LD_EXP 46
23272: PPUSH
23273: LD_VAR 0 9
23277: PPUSH
23278: LD_VAR 0 8
23282: PPUSH
23283: LD_VAR 0 4
23287: PPUSH
23288: CALL_OW 79
23292: PPUSH
23293: CALL_OW 1
23297: ST_TO_ADDR
// end else
23298: GO 23488
// if ai_engineers [ base ] = 0 and ai_crane [ base ] > 0 and crane_usable then
23300: LD_EXP 30
23304: PUSH
23305: LD_VAR 0 9
23309: ARRAY
23310: PUSH
23311: LD_INT 0
23313: EQUAL
23314: PUSH
23315: LD_EXP 69
23319: PUSH
23320: LD_VAR 0 9
23324: ARRAY
23325: PUSH
23326: LD_INT 0
23328: GREATER
23329: AND
23330: PUSH
23331: LD_VAR 0 12
23335: AND
23336: IFFALSE 23488
// begin if InArea ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , no_crane_repair_area ) then
23338: LD_EXP 47
23342: PUSH
23343: LD_VAR 0 9
23347: ARRAY
23348: PUSH
23349: LD_INT 1
23351: ARRAY
23352: PPUSH
23353: LD_EXP 47
23357: PUSH
23358: LD_VAR 0 9
23362: ARRAY
23363: PUSH
23364: LD_INT 2
23366: ARRAY
23367: PPUSH
23368: LD_INT 8
23370: PPUSH
23371: CALL_OW 309
23375: IFFALSE 23457
// begin temp_list = ai_cannot_rebuild_these_buildings [ base ] ^ [ ai_upcoming_building_data [ base ] ] ;
23377: LD_ADDR_VAR 0 4
23381: PUSH
23382: LD_EXP 86
23386: PUSH
23387: LD_VAR 0 9
23391: ARRAY
23392: PUSH
23393: LD_EXP 47
23397: PUSH
23398: LD_VAR 0 9
23402: ARRAY
23403: PUSH
23404: EMPTY
23405: LIST
23406: ADD
23407: ST_TO_ADDR
// ai_cannot_rebuild_these_buildings = Replace ( ai_cannot_rebuild_these_buildings , base , temp_list ) ;
23408: LD_ADDR_EXP 86
23412: PUSH
23413: LD_EXP 86
23417: PPUSH
23418: LD_VAR 0 9
23422: PPUSH
23423: LD_VAR 0 4
23427: PPUSH
23428: CALL_OW 1
23432: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
23433: LD_ADDR_EXP 47
23437: PUSH
23438: LD_EXP 47
23442: PPUSH
23443: LD_VAR 0 9
23447: PPUSH
23448: EMPTY
23449: PPUSH
23450: CALL_OW 1
23454: ST_TO_ADDR
// end else
23455: GO 23488
// ai_building_constructor = Replace ( ai_building_constructor , base , ai_crane [ base ] ) ;
23457: LD_ADDR_EXP 46
23461: PUSH
23462: LD_EXP 46
23466: PPUSH
23467: LD_VAR 0 9
23471: PPUSH
23472: LD_EXP 69
23476: PUSH
23477: LD_VAR 0 9
23481: ARRAY
23482: PPUSH
23483: CALL_OW 1
23487: 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
23488: LD_EXP 46
23492: PUSH
23493: LD_VAR 0 9
23497: ARRAY
23498: PUSH
23499: LD_INT 0
23501: GREATER
23502: PUSH
23503: LD_EXP 46
23507: PUSH
23508: LD_VAR 0 9
23512: ARRAY
23513: PUSH
23514: LD_VAR 0 3
23518: IN
23519: PUSH
23520: LD_EXP 46
23524: PUSH
23525: LD_VAR 0 9
23529: ARRAY
23530: PUSH
23531: LD_EXP 69
23535: PUSH
23536: LD_VAR 0 9
23540: ARRAY
23541: EQUAL
23542: PUSH
23543: LD_VAR 0 12
23547: AND
23548: OR
23549: AND
23550: IFFALSE 26995
// begin engineers_list = engineers_list diff ai_building_constructor [ base ] ;
23552: LD_ADDR_VAR 0 3
23556: PUSH
23557: LD_VAR 0 3
23561: PUSH
23562: LD_EXP 46
23566: PUSH
23567: LD_VAR 0 9
23571: ARRAY
23572: DIFF
23573: ST_TO_ADDR
// away_dist = 7 ;
23574: LD_ADDR_VAR 0 7
23578: PUSH
23579: LD_INT 7
23581: ST_TO_ADDR
// if ai_vehicle_being_moved [ base ] = 0 then
23582: LD_EXP 78
23586: PUSH
23587: LD_VAR 0 9
23591: ARRAY
23592: PUSH
23593: LD_INT 0
23595: EQUAL
23596: IFFALSE 26737
// begin temp_list = UnitFilter ( ai_vehicles_defend [ base ] ^ ai_crane [ base ] ^ ai_cargo_bay [ base ] , [ [ f_control , control_manual ] , [ f_empty ] , [ f_distxy , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , away_dist ] ] ) ;
23598: LD_ADDR_VAR 0 4
23602: PUSH
23603: LD_EXP 39
23607: PUSH
23608: LD_VAR 0 9
23612: ARRAY
23613: PUSH
23614: LD_EXP 69
23618: PUSH
23619: LD_VAR 0 9
23623: ARRAY
23624: ADD
23625: PUSH
23626: LD_EXP 61
23630: PUSH
23631: LD_VAR 0 9
23635: ARRAY
23636: ADD
23637: PPUSH
23638: LD_INT 33
23640: PUSH
23641: LD_INT 1
23643: PUSH
23644: EMPTY
23645: LIST
23646: LIST
23647: PUSH
23648: LD_INT 58
23650: PUSH
23651: EMPTY
23652: LIST
23653: PUSH
23654: LD_INT 92
23656: PUSH
23657: LD_EXP 47
23661: PUSH
23662: LD_VAR 0 9
23666: ARRAY
23667: PUSH
23668: LD_INT 1
23670: ARRAY
23671: PUSH
23672: LD_EXP 47
23676: PUSH
23677: LD_VAR 0 9
23681: ARRAY
23682: PUSH
23683: LD_INT 2
23685: ARRAY
23686: PUSH
23687: LD_VAR 0 7
23691: PUSH
23692: EMPTY
23693: LIST
23694: LIST
23695: LIST
23696: LIST
23697: PUSH
23698: EMPTY
23699: LIST
23700: LIST
23701: LIST
23702: PPUSH
23703: CALL_OW 72
23707: ST_TO_ADDR
// if temp_list > 0 then
23708: LD_VAR 0 4
23712: PUSH
23713: LD_INT 0
23715: GREATER
23716: IFFALSE 23927
// begin if ai_building_constructor [ base ] = ai_crane [ base ] then
23718: LD_EXP 46
23722: PUSH
23723: LD_VAR 0 9
23727: ARRAY
23728: PUSH
23729: LD_EXP 69
23733: PUSH
23734: LD_VAR 0 9
23738: ARRAY
23739: EQUAL
23740: IFFALSE 23845
// begin temp_list = ai_cannot_rebuild_these_buildings [ base ] ^ [ ai_upcoming_building_data [ base ] ] ;
23742: LD_ADDR_VAR 0 4
23746: PUSH
23747: LD_EXP 86
23751: PUSH
23752: LD_VAR 0 9
23756: ARRAY
23757: PUSH
23758: LD_EXP 47
23762: PUSH
23763: LD_VAR 0 9
23767: ARRAY
23768: PUSH
23769: EMPTY
23770: LIST
23771: ADD
23772: ST_TO_ADDR
// ai_cannot_rebuild_these_buildings = Replace ( ai_cannot_rebuild_these_buildings , base , temp_list ) ;
23773: LD_ADDR_EXP 86
23777: PUSH
23778: LD_EXP 86
23782: PPUSH
23783: LD_VAR 0 9
23787: PPUSH
23788: LD_VAR 0 4
23792: PPUSH
23793: CALL_OW 1
23797: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
23798: LD_ADDR_EXP 47
23802: PUSH
23803: LD_EXP 47
23807: PPUSH
23808: LD_VAR 0 9
23812: PPUSH
23813: EMPTY
23814: PPUSH
23815: CALL_OW 1
23819: ST_TO_ADDR
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
23820: LD_ADDR_EXP 46
23824: PUSH
23825: LD_EXP 46
23829: PPUSH
23830: LD_VAR 0 9
23834: PPUSH
23835: LD_INT 0
23837: PPUSH
23838: CALL_OW 1
23842: ST_TO_ADDR
// end else
23843: GO 23925
// begin ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , temp_list [ 1 ] ) ;
23845: LD_ADDR_EXP 78
23849: PUSH
23850: LD_EXP 78
23854: PPUSH
23855: LD_VAR 0 9
23859: PPUSH
23860: LD_VAR 0 4
23864: PUSH
23865: LD_INT 1
23867: ARRAY
23868: PPUSH
23869: CALL_OW 1
23873: ST_TO_ADDR
// temp_list_2 = ai_vehicles_having_been_moved [ base ] ^ temp_list [ 1 ] ;
23874: LD_ADDR_VAR 0 8
23878: PUSH
23879: LD_EXP 79
23883: PUSH
23884: LD_VAR 0 9
23888: ARRAY
23889: PUSH
23890: LD_VAR 0 4
23894: PUSH
23895: LD_INT 1
23897: ARRAY
23898: ADD
23899: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , temp_list_2 ) ;
23900: LD_ADDR_EXP 79
23904: PUSH
23905: LD_EXP 79
23909: PPUSH
23910: LD_VAR 0 9
23914: PPUSH
23915: LD_VAR 0 8
23919: PPUSH
23920: CALL_OW 1
23924: ST_TO_ADDR
// end ; end else
23925: GO 26735
// case GetType ( IsInUnit ( ai_building_constructor [ base ] ) ) of unit_building :
23927: LD_EXP 46
23931: PUSH
23932: LD_VAR 0 9
23936: ARRAY
23937: PPUSH
23938: CALL_OW 310
23942: PPUSH
23943: CALL_OW 247
23947: PUSH
23948: LD_INT 3
23950: DOUBLE
23951: EQUAL
23952: IFTRUE 23956
23954: GO 23974
23956: POP
// ComExitBuilding ( ai_building_constructor [ base ] ) ; unit_vehicle :
23957: LD_EXP 46
23961: PUSH
23962: LD_VAR 0 9
23966: ARRAY
23967: PPUSH
23968: CALL_OW 122
23972: GO 26735
23974: LD_INT 2
23976: DOUBLE
23977: EQUAL
23978: IFTRUE 23982
23980: GO 24000
23982: POP
// ComExitVehicle ( ai_building_constructor [ base ] ) ; else
23983: LD_EXP 46
23987: PUSH
23988: LD_VAR 0 9
23992: ARRAY
23993: PPUSH
23994: CALL_OW 121
23998: GO 26735
24000: POP
// case GetBType ( HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ) of - 1 :
24001: LD_EXP 47
24005: PUSH
24006: LD_VAR 0 9
24010: ARRAY
24011: PUSH
24012: LD_INT 1
24014: ARRAY
24015: PPUSH
24016: LD_EXP 47
24020: PUSH
24021: LD_VAR 0 9
24025: ARRAY
24026: PUSH
24027: LD_INT 2
24029: ARRAY
24030: PPUSH
24031: CALL_OW 428
24035: PPUSH
24036: CALL_OW 266
24040: PUSH
24041: LD_INT 1
24043: NEG
24044: DOUBLE
24045: EQUAL
24046: IFTRUE 24050
24048: GO 26240
24050: POP
// begin case ai_upcoming_building_data [ base ] [ 4 ] of b_warehouse :
24051: LD_EXP 47
24055: PUSH
24056: LD_VAR 0 9
24060: ARRAY
24061: PUSH
24062: LD_INT 4
24064: ARRAY
24065: PUSH
24066: LD_INT 1
24068: DOUBLE
24069: EQUAL
24070: IFTRUE 24074
24072: GO 24085
24074: POP
// i = b_depot ; b_factory :
24075: LD_ADDR_VAR 0 2
24079: PUSH
24080: LD_INT 0
24082: ST_TO_ADDR
24083: GO 24169
24085: LD_INT 3
24087: DOUBLE
24088: EQUAL
24089: IFTRUE 24093
24091: GO 24104
24093: POP
// i = b_workshop ; b_lab_half , b_lab_full :
24094: LD_ADDR_VAR 0 2
24098: PUSH
24099: LD_INT 2
24101: ST_TO_ADDR
24102: GO 24169
24104: LD_INT 7
24106: DOUBLE
24107: EQUAL
24108: IFTRUE 24118
24110: LD_INT 8
24112: DOUBLE
24113: EQUAL
24114: IFTRUE 24118
24116: GO 24129
24118: POP
// i = b_lab ; b_barracks :
24119: LD_ADDR_VAR 0 2
24123: PUSH
24124: LD_INT 6
24126: ST_TO_ADDR
24127: GO 24169
24129: LD_INT 5
24131: DOUBLE
24132: EQUAL
24133: IFTRUE 24137
24135: GO 24148
24137: POP
// i = b_armoury ; else
24138: LD_ADDR_VAR 0 2
24142: PUSH
24143: LD_INT 4
24145: ST_TO_ADDR
24146: GO 24169
24148: POP
// i = ai_upcoming_building_data [ base ] [ 4 ] ; end ;
24149: LD_ADDR_VAR 0 2
24153: PUSH
24154: LD_EXP 47
24158: PUSH
24159: LD_VAR 0 9
24163: ARRAY
24164: PUSH
24165: LD_INT 4
24167: ARRAY
24168: ST_TO_ADDR
// case i of b_depot :
24169: LD_VAR 0 2
24173: PUSH
24174: LD_INT 0
24176: DOUBLE
24177: EQUAL
24178: IFTRUE 24182
24180: GO 24259
24182: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
24183: LD_EXP 46
24187: PUSH
24188: LD_VAR 0 9
24192: ARRAY
24193: PPUSH
24194: CALL_OW 248
24198: PUSH
24199: LD_INT 3
24201: DOUBLE
24202: EQUAL
24203: IFTRUE 24207
24205: GO 24218
24207: POP
// b_value = 64 ; nation_american :
24208: LD_ADDR_VAR 0 13
24212: PUSH
24213: LD_INT 64
24215: ST_TO_ADDR
24216: GO 24257
24218: LD_INT 1
24220: DOUBLE
24221: EQUAL
24222: IFTRUE 24226
24224: GO 24237
24226: POP
// b_value = 1 ; nation_arabian :
24227: LD_ADDR_VAR 0 13
24231: PUSH
24232: LD_INT 1
24234: ST_TO_ADDR
24235: GO 24257
24237: LD_INT 2
24239: DOUBLE
24240: EQUAL
24241: IFTRUE 24245
24243: GO 24256
24245: POP
// b_value = 34 ; end ;
24246: LD_ADDR_VAR 0 13
24250: PUSH
24251: LD_INT 34
24253: ST_TO_ADDR
24254: GO 24257
24256: POP
// end ; b_workshop :
24257: GO 26152
24259: LD_INT 2
24261: DOUBLE
24262: EQUAL
24263: IFTRUE 24267
24265: GO 24344
24267: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
24268: LD_EXP 46
24272: PUSH
24273: LD_VAR 0 9
24277: ARRAY
24278: PPUSH
24279: CALL_OW 248
24283: PUSH
24284: LD_INT 3
24286: DOUBLE
24287: EQUAL
24288: IFTRUE 24292
24290: GO 24303
24292: POP
// b_value = 68 ; nation_american :
24293: LD_ADDR_VAR 0 13
24297: PUSH
24298: LD_INT 68
24300: ST_TO_ADDR
24301: GO 24342
24303: LD_INT 1
24305: DOUBLE
24306: EQUAL
24307: IFTRUE 24311
24309: GO 24322
24311: POP
// b_value = 5 ; nation_arabian :
24312: LD_ADDR_VAR 0 13
24316: PUSH
24317: LD_INT 5
24319: ST_TO_ADDR
24320: GO 24342
24322: LD_INT 2
24324: DOUBLE
24325: EQUAL
24326: IFTRUE 24330
24328: GO 24341
24330: POP
// b_value = 38 ; end ;
24331: LD_ADDR_VAR 0 13
24335: PUSH
24336: LD_INT 38
24338: ST_TO_ADDR
24339: GO 24342
24341: POP
// end ; b_armoury :
24342: GO 26152
24344: LD_INT 4
24346: DOUBLE
24347: EQUAL
24348: IFTRUE 24352
24350: GO 24429
24352: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
24353: LD_EXP 46
24357: PUSH
24358: LD_VAR 0 9
24362: ARRAY
24363: PPUSH
24364: CALL_OW 248
24368: PUSH
24369: LD_INT 3
24371: DOUBLE
24372: EQUAL
24373: IFTRUE 24377
24375: GO 24388
24377: POP
// b_value = 66 ; nation_american :
24378: LD_ADDR_VAR 0 13
24382: PUSH
24383: LD_INT 66
24385: ST_TO_ADDR
24386: GO 24427
24388: LD_INT 1
24390: DOUBLE
24391: EQUAL
24392: IFTRUE 24396
24394: GO 24407
24396: POP
// b_value = 3 ; nation_arabian :
24397: LD_ADDR_VAR 0 13
24401: PUSH
24402: LD_INT 3
24404: ST_TO_ADDR
24405: GO 24427
24407: LD_INT 2
24409: DOUBLE
24410: EQUAL
24411: IFTRUE 24415
24413: GO 24426
24415: POP
// b_value = 36 ; end ;
24416: LD_ADDR_VAR 0 13
24420: PUSH
24421: LD_INT 36
24423: ST_TO_ADDR
24424: GO 24427
24426: POP
// end ; b_lab :
24427: GO 26152
24429: LD_INT 6
24431: DOUBLE
24432: EQUAL
24433: IFTRUE 24437
24435: GO 24514
24437: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
24438: LD_EXP 46
24442: PUSH
24443: LD_VAR 0 9
24447: ARRAY
24448: PPUSH
24449: CALL_OW 248
24453: PUSH
24454: LD_INT 3
24456: DOUBLE
24457: EQUAL
24458: IFTRUE 24462
24460: GO 24473
24462: POP
// b_value = 77 ; nation_american :
24463: LD_ADDR_VAR 0 13
24467: PUSH
24468: LD_INT 77
24470: ST_TO_ADDR
24471: GO 24512
24473: LD_INT 1
24475: DOUBLE
24476: EQUAL
24477: IFTRUE 24481
24479: GO 24492
24481: POP
// b_value = 17 ; nation_arabian :
24482: LD_ADDR_VAR 0 13
24486: PUSH
24487: LD_INT 17
24489: ST_TO_ADDR
24490: GO 24512
24492: LD_INT 2
24494: DOUBLE
24495: EQUAL
24496: IFTRUE 24500
24498: GO 24511
24500: POP
// b_value = 48 ; end ;
24501: LD_ADDR_VAR 0 13
24505: PUSH
24506: LD_INT 48
24508: ST_TO_ADDR
24509: GO 24512
24511: POP
// end ; b_oil_power :
24512: GO 26152
24514: LD_INT 26
24516: DOUBLE
24517: EQUAL
24518: IFTRUE 24522
24520: GO 24599
24522: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
24523: LD_EXP 46
24527: PUSH
24528: LD_VAR 0 9
24532: ARRAY
24533: PPUSH
24534: CALL_OW 248
24538: PUSH
24539: LD_INT 3
24541: DOUBLE
24542: EQUAL
24543: IFTRUE 24547
24545: GO 24558
24547: POP
// b_value = 85 ; nation_american :
24548: LD_ADDR_VAR 0 13
24552: PUSH
24553: LD_INT 85
24555: ST_TO_ADDR
24556: GO 24597
24558: LD_INT 1
24560: DOUBLE
24561: EQUAL
24562: IFTRUE 24566
24564: GO 24577
24566: POP
// b_value = 25 ; nation_arabian :
24567: LD_ADDR_VAR 0 13
24571: PUSH
24572: LD_INT 25
24574: ST_TO_ADDR
24575: GO 24597
24577: LD_INT 2
24579: DOUBLE
24580: EQUAL
24581: IFTRUE 24585
24583: GO 24596
24585: POP
// b_value = 56 ; end ;
24586: LD_ADDR_VAR 0 13
24590: PUSH
24591: LD_INT 56
24593: ST_TO_ADDR
24594: GO 24597
24596: POP
// end ; b_solar_power :
24597: GO 26152
24599: LD_INT 27
24601: DOUBLE
24602: EQUAL
24603: IFTRUE 24607
24605: GO 24685
24607: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
24608: LD_EXP 46
24612: PUSH
24613: LD_VAR 0 9
24617: ARRAY
24618: PPUSH
24619: CALL_OW 248
24623: PUSH
24624: LD_INT 3
24626: DOUBLE
24627: EQUAL
24628: IFTRUE 24632
24630: GO 24644
24632: POP
// b_value = - 7 ; nation_american :
24633: LD_ADDR_VAR 0 13
24637: PUSH
24638: LD_INT 7
24640: NEG
24641: ST_TO_ADDR
24642: GO 24683
24644: LD_INT 1
24646: DOUBLE
24647: EQUAL
24648: IFTRUE 24652
24650: GO 24663
24652: POP
// b_value = 26 ; nation_arabian :
24653: LD_ADDR_VAR 0 13
24657: PUSH
24658: LD_INT 26
24660: ST_TO_ADDR
24661: GO 24683
24663: LD_INT 2
24665: DOUBLE
24666: EQUAL
24667: IFTRUE 24671
24669: GO 24682
24671: POP
// b_value = 57 ; end ;
24672: LD_ADDR_VAR 0 13
24676: PUSH
24677: LD_INT 57
24679: ST_TO_ADDR
24680: GO 24683
24682: POP
// end ; b_siberite_power :
24683: GO 26152
24685: LD_INT 28
24687: DOUBLE
24688: EQUAL
24689: IFTRUE 24693
24691: GO 24770
24693: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
24694: LD_EXP 46
24698: PUSH
24699: LD_VAR 0 9
24703: ARRAY
24704: PPUSH
24705: CALL_OW 248
24709: PUSH
24710: LD_INT 3
24712: DOUBLE
24713: EQUAL
24714: IFTRUE 24718
24716: GO 24729
24718: POP
// b_value = 86 ; nation_american :
24719: LD_ADDR_VAR 0 13
24723: PUSH
24724: LD_INT 86
24726: ST_TO_ADDR
24727: GO 24768
24729: LD_INT 1
24731: DOUBLE
24732: EQUAL
24733: IFTRUE 24737
24735: GO 24748
24737: POP
// b_value = 27 ; nation_arabian :
24738: LD_ADDR_VAR 0 13
24742: PUSH
24743: LD_INT 27
24745: ST_TO_ADDR
24746: GO 24768
24748: LD_INT 2
24750: DOUBLE
24751: EQUAL
24752: IFTRUE 24756
24754: GO 24767
24756: POP
// b_value = 58 ; end ;
24757: LD_ADDR_VAR 0 13
24761: PUSH
24762: LD_INT 58
24764: ST_TO_ADDR
24765: GO 24768
24767: POP
// end ; b_oil_mine :
24768: GO 26152
24770: LD_INT 29
24772: DOUBLE
24773: EQUAL
24774: IFTRUE 24778
24776: GO 24855
24778: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
24779: LD_EXP 46
24783: PUSH
24784: LD_VAR 0 9
24788: ARRAY
24789: PPUSH
24790: CALL_OW 248
24794: PUSH
24795: LD_INT 3
24797: DOUBLE
24798: EQUAL
24799: IFTRUE 24803
24801: GO 24814
24803: POP
// b_value = 87 ; nation_american :
24804: LD_ADDR_VAR 0 13
24808: PUSH
24809: LD_INT 87
24811: ST_TO_ADDR
24812: GO 24853
24814: LD_INT 1
24816: DOUBLE
24817: EQUAL
24818: IFTRUE 24822
24820: GO 24833
24822: POP
// b_value = 28 ; nation_arabian :
24823: LD_ADDR_VAR 0 13
24827: PUSH
24828: LD_INT 28
24830: ST_TO_ADDR
24831: GO 24853
24833: LD_INT 2
24835: DOUBLE
24836: EQUAL
24837: IFTRUE 24841
24839: GO 24852
24841: POP
// b_value = 59 ; end ;
24842: LD_ADDR_VAR 0 13
24846: PUSH
24847: LD_INT 59
24849: ST_TO_ADDR
24850: GO 24853
24852: POP
// end ; b_siberite_mine :
24853: GO 26152
24855: LD_INT 30
24857: DOUBLE
24858: EQUAL
24859: IFTRUE 24863
24861: GO 24940
24863: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
24864: LD_EXP 46
24868: PUSH
24869: LD_VAR 0 9
24873: ARRAY
24874: PPUSH
24875: CALL_OW 248
24879: PUSH
24880: LD_INT 3
24882: DOUBLE
24883: EQUAL
24884: IFTRUE 24888
24886: GO 24899
24888: POP
// b_value = 88 ; nation_american :
24889: LD_ADDR_VAR 0 13
24893: PUSH
24894: LD_INT 88
24896: ST_TO_ADDR
24897: GO 24938
24899: LD_INT 1
24901: DOUBLE
24902: EQUAL
24903: IFTRUE 24907
24905: GO 24918
24907: POP
// b_value = 29 ; nation_arabian :
24908: LD_ADDR_VAR 0 13
24912: PUSH
24913: LD_INT 29
24915: ST_TO_ADDR
24916: GO 24938
24918: LD_INT 2
24920: DOUBLE
24921: EQUAL
24922: IFTRUE 24926
24924: GO 24937
24926: POP
// b_value = 60 ; end ;
24927: LD_ADDR_VAR 0 13
24931: PUSH
24932: LD_INT 60
24934: ST_TO_ADDR
24935: GO 24938
24937: POP
// end ; b_breastwork :
24938: GO 26152
24940: LD_INT 31
24942: DOUBLE
24943: EQUAL
24944: IFTRUE 24948
24946: GO 25025
24948: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
24949: LD_EXP 46
24953: PUSH
24954: LD_VAR 0 9
24958: ARRAY
24959: PPUSH
24960: CALL_OW 248
24964: PUSH
24965: LD_INT 3
24967: DOUBLE
24968: EQUAL
24969: IFTRUE 24973
24971: GO 24984
24973: POP
// b_value = 89 ; nation_american :
24974: LD_ADDR_VAR 0 13
24978: PUSH
24979: LD_INT 89
24981: ST_TO_ADDR
24982: GO 25023
24984: LD_INT 1
24986: DOUBLE
24987: EQUAL
24988: IFTRUE 24992
24990: GO 25003
24992: POP
// b_value = 30 ; nation_arabian :
24993: LD_ADDR_VAR 0 13
24997: PUSH
24998: LD_INT 30
25000: ST_TO_ADDR
25001: GO 25023
25003: LD_INT 2
25005: DOUBLE
25006: EQUAL
25007: IFTRUE 25011
25009: GO 25022
25011: POP
// b_value = 61 ; end ;
25012: LD_ADDR_VAR 0 13
25016: PUSH
25017: LD_INT 61
25019: ST_TO_ADDR
25020: GO 25023
25022: POP
// end ; b_bunker :
25023: GO 26152
25025: LD_INT 32
25027: DOUBLE
25028: EQUAL
25029: IFTRUE 25033
25031: GO 25110
25033: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
25034: LD_EXP 46
25038: PUSH
25039: LD_VAR 0 9
25043: ARRAY
25044: PPUSH
25045: CALL_OW 248
25049: PUSH
25050: LD_INT 3
25052: DOUBLE
25053: EQUAL
25054: IFTRUE 25058
25056: GO 25069
25058: POP
// b_value = 90 ; nation_american :
25059: LD_ADDR_VAR 0 13
25063: PUSH
25064: LD_INT 90
25066: ST_TO_ADDR
25067: GO 25108
25069: LD_INT 1
25071: DOUBLE
25072: EQUAL
25073: IFTRUE 25077
25075: GO 25088
25077: POP
// b_value = 31 ; nation_arabian :
25078: LD_ADDR_VAR 0 13
25082: PUSH
25083: LD_INT 31
25085: ST_TO_ADDR
25086: GO 25108
25088: LD_INT 2
25090: DOUBLE
25091: EQUAL
25092: IFTRUE 25096
25094: GO 25107
25096: POP
// b_value = 62 ; end ;
25097: LD_ADDR_VAR 0 13
25101: PUSH
25102: LD_INT 62
25104: ST_TO_ADDR
25105: GO 25108
25107: POP
// end ; b_turret :
25108: GO 26152
25110: LD_INT 33
25112: DOUBLE
25113: EQUAL
25114: IFTRUE 25118
25116: GO 25196
25118: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
25119: LD_EXP 46
25123: PUSH
25124: LD_VAR 0 9
25128: ARRAY
25129: PPUSH
25130: CALL_OW 248
25134: PUSH
25135: LD_INT 3
25137: DOUBLE
25138: EQUAL
25139: IFTRUE 25143
25141: GO 25154
25143: POP
// b_value = 91 ; nation_american :
25144: LD_ADDR_VAR 0 13
25148: PUSH
25149: LD_INT 91
25151: ST_TO_ADDR
25152: GO 25194
25154: LD_INT 1
25156: DOUBLE
25157: EQUAL
25158: IFTRUE 25162
25160: GO 25173
25162: POP
// b_value = 32 ; nation_arabian :
25163: LD_ADDR_VAR 0 13
25167: PUSH
25168: LD_INT 32
25170: ST_TO_ADDR
25171: GO 25194
25173: LD_INT 2
25175: DOUBLE
25176: EQUAL
25177: IFTRUE 25181
25179: GO 25193
25181: POP
// b_value = - 7 ; end ;
25182: LD_ADDR_VAR 0 13
25186: PUSH
25187: LD_INT 7
25189: NEG
25190: ST_TO_ADDR
25191: GO 25194
25193: POP
// end ; b_teleport :
25194: GO 26152
25196: LD_INT 34
25198: DOUBLE
25199: EQUAL
25200: IFTRUE 25204
25202: GO 25283
25204: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
25205: LD_EXP 46
25209: PUSH
25210: LD_VAR 0 9
25214: ARRAY
25215: PPUSH
25216: CALL_OW 248
25220: PUSH
25221: LD_INT 3
25223: DOUBLE
25224: EQUAL
25225: IFTRUE 25229
25227: GO 25240
25229: POP
// b_value = 92 ; nation_american :
25230: LD_ADDR_VAR 0 13
25234: PUSH
25235: LD_INT 92
25237: ST_TO_ADDR
25238: GO 25281
25240: LD_INT 1
25242: DOUBLE
25243: EQUAL
25244: IFTRUE 25248
25246: GO 25260
25248: POP
// b_value = - 7 ; nation_arabian :
25249: LD_ADDR_VAR 0 13
25253: PUSH
25254: LD_INT 7
25256: NEG
25257: ST_TO_ADDR
25258: GO 25281
25260: LD_INT 2
25262: DOUBLE
25263: EQUAL
25264: IFTRUE 25268
25266: GO 25280
25268: POP
// b_value = - 7 ; end ;
25269: LD_ADDR_VAR 0 13
25273: PUSH
25274: LD_INT 7
25276: NEG
25277: ST_TO_ADDR
25278: GO 25281
25280: POP
// end ; b_control_tower :
25281: GO 26152
25283: LD_INT 36
25285: DOUBLE
25286: EQUAL
25287: IFTRUE 25291
25289: GO 25370
25291: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
25292: LD_EXP 46
25296: PUSH
25297: LD_VAR 0 9
25301: ARRAY
25302: PPUSH
25303: CALL_OW 248
25307: PUSH
25308: LD_INT 3
25310: DOUBLE
25311: EQUAL
25312: IFTRUE 25316
25314: GO 25328
25316: POP
// b_value = - 7 ; nation_american :
25317: LD_ADDR_VAR 0 13
25321: PUSH
25322: LD_INT 7
25324: NEG
25325: ST_TO_ADDR
25326: GO 25368
25328: LD_INT 1
25330: DOUBLE
25331: EQUAL
25332: IFTRUE 25336
25334: GO 25347
25336: POP
// b_value = 94 ; nation_arabian :
25337: LD_ADDR_VAR 0 13
25341: PUSH
25342: LD_INT 94
25344: ST_TO_ADDR
25345: GO 25368
25347: LD_INT 2
25349: DOUBLE
25350: EQUAL
25351: IFTRUE 25355
25353: GO 25367
25355: POP
// b_value = - 7 ; end ;
25356: LD_ADDR_VAR 0 13
25360: PUSH
25361: LD_INT 7
25363: NEG
25364: ST_TO_ADDR
25365: GO 25368
25367: POP
// end ; b_ext_track :
25368: GO 26152
25370: LD_INT 16
25372: DOUBLE
25373: EQUAL
25374: IFTRUE 25378
25376: GO 25455
25378: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
25379: LD_EXP 46
25383: PUSH
25384: LD_VAR 0 9
25388: ARRAY
25389: PPUSH
25390: CALL_OW 248
25394: PUSH
25395: LD_INT 3
25397: DOUBLE
25398: EQUAL
25399: IFTRUE 25403
25401: GO 25414
25403: POP
// b_value = 70 ; nation_american :
25404: LD_ADDR_VAR 0 13
25408: PUSH
25409: LD_INT 70
25411: ST_TO_ADDR
25412: GO 25453
25414: LD_INT 1
25416: DOUBLE
25417: EQUAL
25418: IFTRUE 25422
25420: GO 25433
25422: POP
// b_value = 7 ; nation_arabian :
25423: LD_ADDR_VAR 0 13
25427: PUSH
25428: LD_INT 7
25430: ST_TO_ADDR
25431: GO 25453
25433: LD_INT 2
25435: DOUBLE
25436: EQUAL
25437: IFTRUE 25441
25439: GO 25452
25441: POP
// b_value = 40 ; end ;
25442: LD_ADDR_VAR 0 13
25446: PUSH
25447: LD_INT 40
25449: ST_TO_ADDR
25450: GO 25453
25452: POP
// end ; b_ext_gun :
25453: GO 26152
25455: LD_INT 17
25457: DOUBLE
25458: EQUAL
25459: IFTRUE 25463
25461: GO 25540
25463: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
25464: LD_EXP 46
25468: PUSH
25469: LD_VAR 0 9
25473: ARRAY
25474: PPUSH
25475: CALL_OW 248
25479: PUSH
25480: LD_INT 3
25482: DOUBLE
25483: EQUAL
25484: IFTRUE 25488
25486: GO 25499
25488: POP
// b_value = 71 ; nation_american :
25489: LD_ADDR_VAR 0 13
25493: PUSH
25494: LD_INT 71
25496: ST_TO_ADDR
25497: GO 25538
25499: LD_INT 1
25501: DOUBLE
25502: EQUAL
25503: IFTRUE 25507
25505: GO 25518
25507: POP
// b_value = 8 ; nation_arabian :
25508: LD_ADDR_VAR 0 13
25512: PUSH
25513: LD_INT 8
25515: ST_TO_ADDR
25516: GO 25538
25518: LD_INT 2
25520: DOUBLE
25521: EQUAL
25522: IFTRUE 25526
25524: GO 25537
25526: POP
// b_value = 41 ; end ;
25527: LD_ADDR_VAR 0 13
25531: PUSH
25532: LD_INT 41
25534: ST_TO_ADDR
25535: GO 25538
25537: POP
// end ; b_ext_rocket :
25538: GO 26152
25540: LD_INT 18
25542: DOUBLE
25543: EQUAL
25544: IFTRUE 25548
25546: GO 25625
25548: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
25549: LD_EXP 46
25553: PUSH
25554: LD_VAR 0 9
25558: ARRAY
25559: PPUSH
25560: CALL_OW 248
25564: PUSH
25565: LD_INT 3
25567: DOUBLE
25568: EQUAL
25569: IFTRUE 25573
25571: GO 25584
25573: POP
// b_value = 72 ; nation_american :
25574: LD_ADDR_VAR 0 13
25578: PUSH
25579: LD_INT 72
25581: ST_TO_ADDR
25582: GO 25623
25584: LD_INT 1
25586: DOUBLE
25587: EQUAL
25588: IFTRUE 25592
25590: GO 25603
25592: POP
// b_value = 9 ; nation_arabian :
25593: LD_ADDR_VAR 0 13
25597: PUSH
25598: LD_INT 9
25600: ST_TO_ADDR
25601: GO 25623
25603: LD_INT 2
25605: DOUBLE
25606: EQUAL
25607: IFTRUE 25611
25609: GO 25622
25611: POP
// b_value = 42 ; end ;
25612: LD_ADDR_VAR 0 13
25616: PUSH
25617: LD_INT 42
25619: ST_TO_ADDR
25620: GO 25623
25622: POP
// end ; b_ext_noncombat :
25623: GO 26152
25625: LD_INT 19
25627: DOUBLE
25628: EQUAL
25629: IFTRUE 25633
25631: GO 25711
25633: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
25634: LD_EXP 46
25638: PUSH
25639: LD_VAR 0 9
25643: ARRAY
25644: PPUSH
25645: CALL_OW 248
25649: PUSH
25650: LD_INT 3
25652: DOUBLE
25653: EQUAL
25654: IFTRUE 25658
25656: GO 25669
25658: POP
// b_value = 73 ; nation_american :
25659: LD_ADDR_VAR 0 13
25663: PUSH
25664: LD_INT 73
25666: ST_TO_ADDR
25667: GO 25709
25669: LD_INT 1
25671: DOUBLE
25672: EQUAL
25673: IFTRUE 25677
25675: GO 25688
25677: POP
// b_value = 10 ; nation_arabian :
25678: LD_ADDR_VAR 0 13
25682: PUSH
25683: LD_INT 10
25685: ST_TO_ADDR
25686: GO 25709
25688: LD_INT 2
25690: DOUBLE
25691: EQUAL
25692: IFTRUE 25696
25694: GO 25708
25696: POP
// b_value = - 7 ; end ;
25697: LD_ADDR_VAR 0 13
25701: PUSH
25702: LD_INT 7
25704: NEG
25705: ST_TO_ADDR
25706: GO 25709
25708: POP
// end ; b_ext_radar :
25709: GO 26152
25711: LD_INT 20
25713: DOUBLE
25714: EQUAL
25715: IFTRUE 25719
25717: GO 25797
25719: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
25720: LD_EXP 46
25724: PUSH
25725: LD_VAR 0 9
25729: ARRAY
25730: PPUSH
25731: CALL_OW 248
25735: PUSH
25736: LD_INT 3
25738: DOUBLE
25739: EQUAL
25740: IFTRUE 25744
25742: GO 25756
25744: POP
// b_value = - 7 ; nation_american :
25745: LD_ADDR_VAR 0 13
25749: PUSH
25750: LD_INT 7
25752: NEG
25753: ST_TO_ADDR
25754: GO 25795
25756: LD_INT 1
25758: DOUBLE
25759: EQUAL
25760: IFTRUE 25764
25762: GO 25775
25764: POP
// b_value = 11 ; nation_arabian :
25765: LD_ADDR_VAR 0 13
25769: PUSH
25770: LD_INT 11
25772: ST_TO_ADDR
25773: GO 25795
25775: LD_INT 2
25777: DOUBLE
25778: EQUAL
25779: IFTRUE 25783
25781: GO 25794
25783: POP
// b_value = 44 ; end ;
25784: LD_ADDR_VAR 0 13
25788: PUSH
25789: LD_INT 44
25791: ST_TO_ADDR
25792: GO 25795
25794: POP
// end ; b_ext_siberium :
25795: GO 26152
25797: LD_INT 21
25799: DOUBLE
25800: EQUAL
25801: IFTRUE 25805
25803: GO 25882
25805: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
25806: LD_EXP 46
25810: PUSH
25811: LD_VAR 0 9
25815: ARRAY
25816: PPUSH
25817: CALL_OW 248
25821: PUSH
25822: LD_INT 3
25824: DOUBLE
25825: EQUAL
25826: IFTRUE 25830
25828: GO 25841
25830: POP
// b_value = 75 ; nation_american :
25831: LD_ADDR_VAR 0 13
25835: PUSH
25836: LD_INT 75
25838: ST_TO_ADDR
25839: GO 25880
25841: LD_INT 1
25843: DOUBLE
25844: EQUAL
25845: IFTRUE 25849
25847: GO 25860
25849: POP
// b_value = 12 ; nation_arabian :
25850: LD_ADDR_VAR 0 13
25854: PUSH
25855: LD_INT 12
25857: ST_TO_ADDR
25858: GO 25880
25860: LD_INT 2
25862: DOUBLE
25863: EQUAL
25864: IFTRUE 25868
25866: GO 25879
25868: POP
// b_value = 45 ; end ;
25869: LD_ADDR_VAR 0 13
25873: PUSH
25874: LD_INT 45
25876: ST_TO_ADDR
25877: GO 25880
25879: POP
// end ; b_ext_stitch :
25880: GO 26152
25882: LD_INT 23
25884: DOUBLE
25885: EQUAL
25886: IFTRUE 25890
25888: GO 25969
25890: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
25891: LD_EXP 46
25895: PUSH
25896: LD_VAR 0 9
25900: ARRAY
25901: PPUSH
25902: CALL_OW 248
25906: PUSH
25907: LD_INT 3
25909: DOUBLE
25910: EQUAL
25911: IFTRUE 25915
25913: GO 25927
25915: POP
// b_value = - 7 ; nation_american :
25916: LD_ADDR_VAR 0 13
25920: PUSH
25921: LD_INT 7
25923: NEG
25924: ST_TO_ADDR
25925: GO 25967
25927: LD_INT 1
25929: DOUBLE
25930: EQUAL
25931: IFTRUE 25935
25933: GO 25947
25935: POP
// b_value = - 7 ; nation_arabian :
25936: LD_ADDR_VAR 0 13
25940: PUSH
25941: LD_INT 7
25943: NEG
25944: ST_TO_ADDR
25945: GO 25967
25947: LD_INT 2
25949: DOUBLE
25950: EQUAL
25951: IFTRUE 25955
25953: GO 25966
25955: POP
// b_value = 43 ; end ;
25956: LD_ADDR_VAR 0 13
25960: PUSH
25961: LD_INT 43
25963: ST_TO_ADDR
25964: GO 25967
25966: POP
// end ; b_ext_computer :
25967: GO 26152
25969: LD_INT 24
25971: DOUBLE
25972: EQUAL
25973: IFTRUE 25977
25975: GO 26055
25977: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
25978: LD_EXP 46
25982: PUSH
25983: LD_VAR 0 9
25987: ARRAY
25988: PPUSH
25989: CALL_OW 248
25993: PUSH
25994: LD_INT 3
25996: DOUBLE
25997: EQUAL
25998: IFTRUE 26002
26000: GO 26013
26002: POP
// b_value = 76 ; nation_american :
26003: LD_ADDR_VAR 0 13
26007: PUSH
26008: LD_INT 76
26010: ST_TO_ADDR
26011: GO 26053
26013: LD_INT 1
26015: DOUBLE
26016: EQUAL
26017: IFTRUE 26021
26019: GO 26032
26021: POP
// b_value = 15 ; nation_arabian :
26022: LD_ADDR_VAR 0 13
26026: PUSH
26027: LD_INT 15
26029: ST_TO_ADDR
26030: GO 26053
26032: LD_INT 2
26034: DOUBLE
26035: EQUAL
26036: IFTRUE 26040
26038: GO 26052
26040: POP
// b_value = - 7 ; end ;
26041: LD_ADDR_VAR 0 13
26045: PUSH
26046: LD_INT 7
26048: NEG
26049: ST_TO_ADDR
26050: GO 26053
26052: POP
// end ; b_ext_laser :
26053: GO 26152
26055: LD_INT 25
26057: DOUBLE
26058: EQUAL
26059: IFTRUE 26063
26061: GO 26142
26063: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
26064: LD_EXP 46
26068: PUSH
26069: LD_VAR 0 9
26073: ARRAY
26074: PPUSH
26075: CALL_OW 248
26079: PUSH
26080: LD_INT 3
26082: DOUBLE
26083: EQUAL
26084: IFTRUE 26088
26086: GO 26100
26088: POP
// b_value = - 7 ; nation_american :
26089: LD_ADDR_VAR 0 13
26093: PUSH
26094: LD_INT 7
26096: NEG
26097: ST_TO_ADDR
26098: GO 26140
26100: LD_INT 1
26102: DOUBLE
26103: EQUAL
26104: IFTRUE 26108
26106: GO 26119
26108: POP
// b_value = 16 ; nation_arabian :
26109: LD_ADDR_VAR 0 13
26113: PUSH
26114: LD_INT 16
26116: ST_TO_ADDR
26117: GO 26140
26119: LD_INT 2
26121: DOUBLE
26122: EQUAL
26123: IFTRUE 26127
26125: GO 26139
26127: POP
// b_value = - 7 ; end ;
26128: LD_ADDR_VAR 0 13
26132: PUSH
26133: LD_INT 7
26135: NEG
26136: ST_TO_ADDR
26137: GO 26140
26139: POP
// end ; else
26140: GO 26152
26142: POP
// b_value = - 42 ; end ;
26143: LD_ADDR_VAR 0 13
26147: PUSH
26148: LD_INT 42
26150: NEG
26151: 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 ] ] ) ;
26152: LD_EXP 46
26156: PUSH
26157: LD_VAR 0 9
26161: ARRAY
26162: PPUSH
26163: LD_STRING B
26165: PUSH
26166: LD_EXP 47
26170: PUSH
26171: LD_VAR 0 9
26175: ARRAY
26176: PUSH
26177: LD_INT 1
26179: ARRAY
26180: PUSH
26181: LD_EXP 47
26185: PUSH
26186: LD_VAR 0 9
26190: ARRAY
26191: PUSH
26192: LD_INT 2
26194: ARRAY
26195: PUSH
26196: LD_INT 0
26198: PUSH
26199: LD_VAR 0 13
26203: PUSH
26204: LD_EXP 47
26208: PUSH
26209: LD_VAR 0 9
26213: ARRAY
26214: PUSH
26215: LD_INT 3
26217: ARRAY
26218: PUSH
26219: LD_INT 0
26221: PUSH
26222: EMPTY
26223: LIST
26224: LIST
26225: LIST
26226: LIST
26227: LIST
26228: LIST
26229: LIST
26230: PUSH
26231: EMPTY
26232: LIST
26233: PPUSH
26234: CALL_OW 446
// end ; b_depot :
26238: GO 26735
26240: LD_INT 0
26242: DOUBLE
26243: EQUAL
26244: IFTRUE 26248
26246: GO 26297
26248: POP
// begin ComUpgrade ( ai_depot [ base ] ) ;
26249: LD_EXP 34
26253: PUSH
26254: LD_VAR 0 9
26258: ARRAY
26259: PPUSH
26260: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , ai_depot [ base ] ) ;
26264: LD_ADDR_EXP 43
26268: PUSH
26269: LD_EXP 43
26273: PPUSH
26274: LD_VAR 0 9
26278: PPUSH
26279: LD_EXP 34
26283: PUSH
26284: LD_VAR 0 9
26288: ARRAY
26289: PPUSH
26290: CALL_OW 1
26294: ST_TO_ADDR
// end ; b_workshop :
26295: GO 26735
26297: LD_INT 2
26299: DOUBLE
26300: EQUAL
26301: IFTRUE 26305
26303: GO 26382
26305: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
26306: LD_ADDR_VAR 0 6
26310: PUSH
26311: LD_EXP 47
26315: PUSH
26316: LD_VAR 0 9
26320: ARRAY
26321: PUSH
26322: LD_INT 1
26324: ARRAY
26325: PPUSH
26326: LD_EXP 47
26330: PUSH
26331: LD_VAR 0 9
26335: ARRAY
26336: PUSH
26337: LD_INT 2
26339: ARRAY
26340: PPUSH
26341: CALL_OW 428
26345: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
26346: LD_VAR 0 6
26350: PPUSH
26351: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
26355: LD_ADDR_EXP 43
26359: PUSH
26360: LD_EXP 43
26364: PPUSH
26365: LD_VAR 0 9
26369: PPUSH
26370: LD_VAR 0 6
26374: PPUSH
26375: CALL_OW 1
26379: ST_TO_ADDR
// end ; b_lab , b_lab_half :
26380: GO 26735
26382: LD_INT 6
26384: DOUBLE
26385: EQUAL
26386: IFTRUE 26396
26388: LD_INT 7
26390: DOUBLE
26391: EQUAL
26392: IFTRUE 26396
26394: GO 26649
26396: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
26397: LD_ADDR_VAR 0 6
26401: PUSH
26402: LD_EXP 47
26406: PUSH
26407: LD_VAR 0 9
26411: ARRAY
26412: PUSH
26413: LD_INT 1
26415: ARRAY
26416: PPUSH
26417: LD_EXP 47
26421: PUSH
26422: LD_VAR 0 9
26426: ARRAY
26427: PUSH
26428: LD_INT 2
26430: ARRAY
26431: PPUSH
26432: CALL_OW 428
26436: 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
26437: LD_EXP 47
26441: PUSH
26442: LD_VAR 0 9
26446: ARRAY
26447: PUSH
26448: LD_INT 5
26450: ARRAY
26451: PUSH
26452: LD_INT 9
26454: NONEQUAL
26455: PUSH
26456: LD_EXP 47
26460: PUSH
26461: LD_VAR 0 9
26465: ARRAY
26466: PUSH
26467: LD_INT 5
26469: ARRAY
26470: PUSH
26471: LD_VAR 0 6
26475: PPUSH
26476: LD_INT 1
26478: PPUSH
26479: CALL_OW 268
26483: PUSH
26484: LD_VAR 0 6
26488: PPUSH
26489: LD_INT 2
26491: PPUSH
26492: CALL_OW 268
26496: PUSH
26497: EMPTY
26498: LIST
26499: LIST
26500: IN
26501: NOT
26502: AND
26503: IFFALSE 26531
// ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 5 ] ) else
26505: LD_VAR 0 6
26509: PPUSH
26510: LD_EXP 47
26514: PUSH
26515: LD_VAR 0 9
26519: ARRAY
26520: PUSH
26521: LD_INT 5
26523: ARRAY
26524: PPUSH
26525: CALL_OW 147
26529: GO 26622
// if ai_upcoming_building_data [ base ] [ 6 ] <> b_lab_basic then
26531: LD_EXP 47
26535: PUSH
26536: LD_VAR 0 9
26540: ARRAY
26541: PUSH
26542: LD_INT 6
26544: ARRAY
26545: PUSH
26546: LD_INT 9
26548: NONEQUAL
26549: IFFALSE 26577
// ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 6 ] ) else
26551: LD_VAR 0 6
26555: PPUSH
26556: LD_EXP 47
26560: PUSH
26561: LD_VAR 0 9
26565: ARRAY
26566: PUSH
26567: LD_INT 6
26569: ARRAY
26570: PPUSH
26571: CALL_OW 147
26575: GO 26622
// begin ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
26577: LD_ADDR_EXP 46
26581: PUSH
26582: LD_EXP 46
26586: PPUSH
26587: LD_VAR 0 9
26591: PPUSH
26592: LD_INT 0
26594: PPUSH
26595: CALL_OW 1
26599: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
26600: LD_ADDR_EXP 47
26604: PUSH
26605: LD_EXP 47
26609: PPUSH
26610: LD_VAR 0 9
26614: PPUSH
26615: EMPTY
26616: PPUSH
26617: CALL_OW 1
26621: ST_TO_ADDR
// end ; ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
26622: LD_ADDR_EXP 43
26626: PUSH
26627: LD_EXP 43
26631: PPUSH
26632: LD_VAR 0 9
26636: PPUSH
26637: LD_VAR 0 6
26641: PPUSH
26642: CALL_OW 1
26646: ST_TO_ADDR
// end ; b_armoury :
26647: GO 26735
26649: LD_INT 4
26651: DOUBLE
26652: EQUAL
26653: IFTRUE 26657
26655: GO 26734
26657: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
26658: LD_ADDR_VAR 0 6
26662: PUSH
26663: LD_EXP 47
26667: PUSH
26668: LD_VAR 0 9
26672: ARRAY
26673: PUSH
26674: LD_INT 1
26676: ARRAY
26677: PPUSH
26678: LD_EXP 47
26682: PUSH
26683: LD_VAR 0 9
26687: ARRAY
26688: PUSH
26689: LD_INT 2
26691: ARRAY
26692: PPUSH
26693: CALL_OW 428
26697: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
26698: LD_VAR 0 6
26702: PPUSH
26703: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
26707: LD_ADDR_EXP 43
26711: PUSH
26712: LD_EXP 43
26716: PPUSH
26717: LD_VAR 0 9
26721: PPUSH
26722: LD_VAR 0 6
26726: PPUSH
26727: CALL_OW 1
26731: ST_TO_ADDR
// end ; end ; end ;
26732: GO 26735
26734: POP
// end else
26735: GO 26995
// if UnitsInside ( ai_vehicle_being_moved [ base ] ) > 0 then
26737: LD_EXP 78
26741: PUSH
26742: LD_VAR 0 9
26746: ARRAY
26747: PPUSH
26748: CALL_OW 313
26752: PUSH
26753: LD_INT 0
26755: GREATER
26756: IFFALSE 26895
// begin if GetDistUnitXY ( ai_vehicle_being_moved [ base ] , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) <= away_dist then
26758: LD_EXP 78
26762: PUSH
26763: LD_VAR 0 9
26767: ARRAY
26768: PPUSH
26769: LD_EXP 47
26773: PUSH
26774: LD_VAR 0 9
26778: ARRAY
26779: PUSH
26780: LD_INT 1
26782: ARRAY
26783: PPUSH
26784: LD_EXP 47
26788: PUSH
26789: LD_VAR 0 9
26793: ARRAY
26794: PUSH
26795: LD_INT 2
26797: ARRAY
26798: PPUSH
26799: CALL_OW 297
26803: PUSH
26804: LD_VAR 0 7
26808: LESSEQUAL
26809: IFFALSE 26870
// AI_GetAwayFromXY ( ai_vehicle_being_moved [ base ] , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , away_dist + 2 , false ) else
26811: LD_EXP 78
26815: PUSH
26816: LD_VAR 0 9
26820: ARRAY
26821: PPUSH
26822: LD_EXP 47
26826: PUSH
26827: LD_VAR 0 9
26831: ARRAY
26832: PUSH
26833: LD_INT 1
26835: ARRAY
26836: PPUSH
26837: LD_EXP 47
26841: PUSH
26842: LD_VAR 0 9
26846: ARRAY
26847: PUSH
26848: LD_INT 2
26850: ARRAY
26851: PPUSH
26852: LD_VAR 0 7
26856: PUSH
26857: LD_INT 2
26859: PLUS
26860: PPUSH
26861: LD_INT 0
26863: PPUSH
26864: CALL 11210 0 5
26868: GO 26893
// ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
26870: LD_ADDR_EXP 78
26874: PUSH
26875: LD_EXP 78
26879: PPUSH
26880: LD_VAR 0 9
26884: PPUSH
26885: LD_INT 0
26887: PPUSH
26888: CALL_OW 1
26892: ST_TO_ADDR
// end else
26893: GO 26995
// case GetType ( IsInUnit ( ai_building_constructor [ base ] ) ) of unit_building :
26895: LD_EXP 46
26899: PUSH
26900: LD_VAR 0 9
26904: ARRAY
26905: PPUSH
26906: CALL_OW 310
26910: PPUSH
26911: CALL_OW 247
26915: PUSH
26916: LD_INT 3
26918: DOUBLE
26919: EQUAL
26920: IFTRUE 26924
26922: GO 26942
26924: POP
// ComExitBuilding ( ai_building_constructor [ base ] ) ; unit_vehicle :
26925: LD_EXP 46
26929: PUSH
26930: LD_VAR 0 9
26934: ARRAY
26935: PPUSH
26936: CALL_OW 122
26940: GO 26995
26942: LD_INT 2
26944: DOUBLE
26945: EQUAL
26946: IFTRUE 26950
26948: GO 26968
26950: POP
// ComExitVehicle ( ai_building_constructor [ base ] ) ; else
26951: LD_EXP 46
26955: PUSH
26956: LD_VAR 0 9
26960: ARRAY
26961: PPUSH
26962: CALL_OW 121
26966: GO 26995
26968: POP
// ComEnterUnit ( ai_building_constructor [ base ] , ai_vehicle_being_moved [ base ] ) ; end ;
26969: LD_EXP 46
26973: PUSH
26974: LD_VAR 0 9
26978: ARRAY
26979: PPUSH
26980: LD_EXP 78
26984: PUSH
26985: LD_VAR 0 9
26989: ARRAY
26990: PPUSH
26991: CALL_OW 120
// end ; end ; end ; if ( engineers_list ^ apemen_engineers_list ) > 0 and ai_depot [ base ] > 0 then
26995: LD_VAR 0 3
26999: PUSH
27000: LD_VAR 0 10
27004: ADD
27005: PUSH
27006: LD_INT 0
27008: GREATER
27009: PUSH
27010: LD_EXP 34
27014: PUSH
27015: LD_VAR 0 9
27019: ARRAY
27020: PUSH
27021: LD_INT 0
27023: GREATER
27024: AND
27025: IFFALSE 27109
// begin temp_list = GetListOfCratesInArea ( GetBaseArea ( base ) ) ;
27027: LD_ADDR_VAR 0 4
27031: PUSH
27032: LD_VAR 0 9
27036: PPUSH
27037: CALL 15877 0 1
27041: PPUSH
27042: CALL_OW 435
27046: ST_TO_ADDR
// if temp_list > 0 then
27047: LD_VAR 0 4
27051: PUSH
27052: LD_INT 0
27054: GREATER
27055: IFFALSE 27109
// begin ComCollect ( GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) , temp_list [ 1 ] , temp_list [ 2 ] ) ;
27057: LD_VAR 0 3
27061: PUSH
27062: LD_VAR 0 10
27066: ADD
27067: PPUSH
27068: CALL 28688 0 1
27072: PPUSH
27073: LD_VAR 0 4
27077: PUSH
27078: LD_INT 1
27080: ARRAY
27081: PPUSH
27082: LD_VAR 0 4
27086: PUSH
27087: LD_INT 2
27089: ARRAY
27090: PPUSH
27091: CALL_OW 117
// engineers_list = [ ] ;
27095: LD_ADDR_VAR 0 3
27099: PUSH
27100: EMPTY
27101: ST_TO_ADDR
// apemen_engineers_list = [ ] ;
27102: LD_ADDR_VAR 0 10
27106: PUSH
27107: EMPTY
27108: ST_TO_ADDR
// end ; end ; end ; DistributeHumansToBuildings ( base , engineers_list ^ apemen_engineers_list , UnitFilter ( ai_depot [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_engineer , 6 , false , false ) ;
27109: LD_VAR 0 9
27113: PPUSH
27114: LD_VAR 0 3
27118: PUSH
27119: LD_VAR 0 10
27123: ADD
27124: PPUSH
27125: LD_EXP 34
27129: PUSH
27130: LD_VAR 0 9
27134: ARRAY
27135: PPUSH
27136: LD_INT 50
27138: PUSH
27139: EMPTY
27140: LIST
27141: PUSH
27142: LD_INT 3
27144: PUSH
27145: LD_INT 57
27147: PUSH
27148: EMPTY
27149: LIST
27150: PUSH
27151: EMPTY
27152: LIST
27153: LIST
27154: PUSH
27155: EMPTY
27156: LIST
27157: LIST
27158: PPUSH
27159: CALL_OW 72
27163: PPUSH
27164: LD_INT 2
27166: PPUSH
27167: LD_INT 6
27169: PPUSH
27170: LD_INT 0
27172: PPUSH
27173: LD_INT 0
27175: PPUSH
27176: CALL 18828 0 7
// if crane_usable and ai_crane [ base ] <> ai_building_constructor [ base ] then
27180: LD_VAR 0 12
27184: PUSH
27185: LD_EXP 69
27189: PUSH
27190: LD_VAR 0 9
27194: ARRAY
27195: PUSH
27196: LD_EXP 46
27200: PUSH
27201: LD_VAR 0 9
27205: ARRAY
27206: NONEQUAL
27207: AND
27208: IFFALSE 27336
// if not IsInArea ( ai_crane [ base ] , GetBaseArea ( base ) ) then
27210: LD_EXP 69
27214: PUSH
27215: LD_VAR 0 9
27219: ARRAY
27220: PPUSH
27221: LD_VAR 0 9
27225: PPUSH
27226: CALL 15877 0 1
27230: PPUSH
27231: CALL_OW 308
27235: NOT
27236: IFFALSE 27285
// ComMoveXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) else
27238: LD_EXP 69
27242: PUSH
27243: LD_VAR 0 9
27247: ARRAY
27248: PPUSH
27249: LD_EXP 41
27253: PUSH
27254: LD_VAR 0 9
27258: ARRAY
27259: PUSH
27260: LD_INT 1
27262: ARRAY
27263: PPUSH
27264: LD_EXP 41
27268: PUSH
27269: LD_VAR 0 9
27273: ARRAY
27274: PUSH
27275: LD_INT 2
27277: ARRAY
27278: PPUSH
27279: CALL_OW 111
27283: GO 27336
// if GetLives ( ai_crane [ base ] ) < 1000 and not under_attack then
27285: LD_EXP 69
27289: PUSH
27290: LD_VAR 0 9
27294: ARRAY
27295: PPUSH
27296: CALL_OW 256
27300: PUSH
27301: LD_INT 1000
27303: LESS
27304: PUSH
27305: LD_VAR 0 19
27309: NOT
27310: AND
27311: IFFALSE 27336
// ai_crane_is_being_repaired = Replace ( ai_crane_is_being_repaired , base , true ) ;
27313: LD_ADDR_EXP 84
27317: PUSH
27318: LD_EXP 84
27322: PPUSH
27323: LD_VAR 0 9
27327: PPUSH
27328: LD_INT 1
27330: PPUSH
27331: CALL_OW 1
27335: ST_TO_ADDR
// end ;
27336: GO 20248
27338: POP
27339: POP
// until false ;
27340: LD_INT 0
27342: IFFALSE 20231
// end ;
27344: PPOPN 21
27346: END
// on BuildingStarted ( building , builder ) do var side , temp_list , base , i ;
27347: LD_INT 0
27349: PPUSH
27350: PPUSH
27351: PPUSH
27352: PPUSH
// begin side = GetSide ( building ) ;
27353: LD_ADDR_VAR 0 3
27357: PUSH
27358: LD_VAR 0 1
27362: PPUSH
27363: CALL_OW 255
27367: ST_TO_ADDR
// if side = you then
27368: LD_VAR 0 3
27372: PUSH
27373: LD_EXP 2
27377: EQUAL
27378: IFFALSE 27382
// exit ;
27380: GO 27479
// base = FindBase ( building ) ;
27382: LD_ADDR_VAR 0 5
27386: PUSH
27387: LD_VAR 0 1
27391: PPUSH
27392: CALL 16096 0 1
27396: ST_TO_ADDR
// if base = 0 then
27397: LD_VAR 0 5
27401: PUSH
27402: LD_INT 0
27404: EQUAL
27405: IFFALSE 27409
// exit ;
27407: GO 27479
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
27409: LD_ADDR_EXP 46
27413: PUSH
27414: LD_EXP 46
27418: PPUSH
27419: LD_VAR 0 5
27423: PPUSH
27424: LD_INT 0
27426: PPUSH
27427: CALL_OW 1
27431: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , [ ] ) ;
27432: LD_ADDR_EXP 79
27436: PUSH
27437: LD_EXP 79
27441: PPUSH
27442: LD_VAR 0 5
27446: PPUSH
27447: EMPTY
27448: PPUSH
27449: CALL_OW 1
27453: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , building ) ;
27454: LD_ADDR_EXP 43
27458: PUSH
27459: LD_EXP 43
27463: PPUSH
27464: LD_VAR 0 5
27468: PPUSH
27469: LD_VAR 0 1
27473: PPUSH
27474: CALL_OW 1
27478: ST_TO_ADDR
// end ;
27479: PPOPN 6
27481: END
// on BuildingComplete ( building ) do var side , temp_list , temp_unit , base , i ;
27482: LD_INT 0
27484: PPUSH
27485: PPUSH
27486: PPUSH
27487: PPUSH
27488: PPUSH
// begin side = GetSide ( building ) ;
27489: LD_ADDR_VAR 0 2
27493: PUSH
27494: LD_VAR 0 1
27498: PPUSH
27499: CALL_OW 255
27503: ST_TO_ADDR
// if side = you then
27504: LD_VAR 0 2
27508: PUSH
27509: LD_EXP 2
27513: EQUAL
27514: IFFALSE 27654
// begin if GetBType ( building ) = b_depot and FilterAllUnits ( [ [ f_side , you ] , [ f_nation , nation_arabian ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) = 1 then
27516: LD_VAR 0 1
27520: PPUSH
27521: CALL_OW 266
27525: PUSH
27526: LD_INT 0
27528: EQUAL
27529: PUSH
27530: LD_INT 22
27532: PUSH
27533: LD_EXP 2
27537: PUSH
27538: EMPTY
27539: LIST
27540: LIST
27541: PUSH
27542: LD_INT 23
27544: PUSH
27545: LD_INT 2
27547: PUSH
27548: EMPTY
27549: LIST
27550: LIST
27551: PUSH
27552: LD_INT 2
27554: PUSH
27555: LD_INT 30
27557: PUSH
27558: LD_INT 0
27560: PUSH
27561: EMPTY
27562: LIST
27563: LIST
27564: PUSH
27565: LD_INT 30
27567: PUSH
27568: LD_INT 1
27570: PUSH
27571: EMPTY
27572: LIST
27573: LIST
27574: PUSH
27575: EMPTY
27576: LIST
27577: LIST
27578: LIST
27579: PUSH
27580: EMPTY
27581: LIST
27582: LIST
27583: LIST
27584: PPUSH
27585: CALL_OW 69
27589: PUSH
27590: LD_INT 1
27592: EQUAL
27593: AND
27594: IFFALSE 27608
// SetBName ( building , campbar ) ;
27596: LD_VAR 0 1
27600: PPUSH
27601: LD_STRING campbar
27603: PPUSH
27604: CALL_OW 500
// player_base_b_types = player_base_b_types diff GetBType ( building ) ;
27608: LD_ADDR_EXP 94
27612: PUSH
27613: LD_EXP 94
27617: PUSH
27618: LD_VAR 0 1
27622: PPUSH
27623: CALL_OW 266
27627: DIFF
27628: ST_TO_ADDR
// if player_base_b_types = 0 and buildup_objective_can_be_completed then
27629: LD_EXP 94
27633: PUSH
27634: LD_INT 0
27636: EQUAL
27637: PUSH
27638: LD_EXP 95
27642: AND
27643: IFFALSE 27652
// ChangeMissionObjectives ( Moutbuildup ) ;
27645: LD_STRING Moutbuildup
27647: PPUSH
27648: CALL_OW 337
// exit ;
27652: GO 27821
// end ; base = FindBase ( building ) ;
27654: LD_ADDR_VAR 0 5
27658: PUSH
27659: LD_VAR 0 1
27663: PPUSH
27664: CALL 16096 0 1
27668: ST_TO_ADDR
// if base = 0 then
27669: LD_VAR 0 5
27673: PUSH
27674: LD_INT 0
27676: EQUAL
27677: IFFALSE 27681
// exit ;
27679: GO 27821
// if ai_upcoming_building_data [ base ] [ 1 ] = sib_rocket_factory_location [ 1 ] and ai_upcoming_building_data [ base ] [ 2 ] = sib_rocket_factory_location [ 2 ] then
27681: LD_EXP 47
27685: PUSH
27686: LD_VAR 0 5
27690: ARRAY
27691: PUSH
27692: LD_INT 1
27694: ARRAY
27695: PUSH
27696: LD_EXP 92
27700: PUSH
27701: LD_INT 1
27703: ARRAY
27704: EQUAL
27705: PUSH
27706: LD_EXP 47
27710: PUSH
27711: LD_VAR 0 5
27715: ARRAY
27716: PUSH
27717: LD_INT 2
27719: ARRAY
27720: PUSH
27721: LD_EXP 92
27725: PUSH
27726: LD_INT 2
27728: ARRAY
27729: EQUAL
27730: AND
27731: IFFALSE 27743
// sib_rocket_factory = building ;
27733: LD_ADDR_EXP 91
27737: PUSH
27738: LD_VAR 0 1
27742: ST_TO_ADDR
// BuildUpgradeCommon ( base , building ) ;
27743: LD_VAR 0 5
27747: PPUSH
27748: LD_VAR 0 1
27752: PPUSH
27753: CALL 27902 0 2
// temp_list = ai_all_buildings [ base ] ^ building ;
27757: LD_ADDR_VAR 0 3
27761: PUSH
27762: LD_EXP 45
27766: PUSH
27767: LD_VAR 0 5
27771: ARRAY
27772: PUSH
27773: LD_VAR 0 1
27777: ADD
27778: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
27779: LD_ADDR_EXP 45
27783: PUSH
27784: LD_EXP 45
27788: PPUSH
27789: LD_VAR 0 5
27793: PPUSH
27794: LD_VAR 0 3
27798: PPUSH
27799: CALL_OW 1
27803: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , true ) ;
27804: LD_VAR 0 5
27808: PPUSH
27809: LD_VAR 0 1
27813: PPUSH
27814: LD_INT 1
27816: PPUSH
27817: CALL 6190 0 3
// end ;
27821: PPOPN 6
27823: END
// on UpgradeComplete ( building ) do var side , temp_list , base ;
27824: LD_INT 0
27826: PPUSH
27827: PPUSH
27828: PPUSH
// begin side = GetSide ( building ) ;
27829: LD_ADDR_VAR 0 2
27833: PUSH
27834: LD_VAR 0 1
27838: PPUSH
27839: CALL_OW 255
27843: ST_TO_ADDR
// if side = you then
27844: LD_VAR 0 2
27848: PUSH
27849: LD_EXP 2
27853: EQUAL
27854: IFFALSE 27858
// exit ;
27856: GO 27899
// base = FindBase ( building ) ;
27858: LD_ADDR_VAR 0 4
27862: PUSH
27863: LD_VAR 0 1
27867: PPUSH
27868: CALL 16096 0 1
27872: ST_TO_ADDR
// if base = 0 then
27873: LD_VAR 0 4
27877: PUSH
27878: LD_INT 0
27880: EQUAL
27881: IFFALSE 27885
// exit ;
27883: GO 27899
// BuildUpgradeCommon ( base , building ) ;
27885: LD_VAR 0 4
27889: PPUSH
27890: LD_VAR 0 1
27894: PPUSH
27895: CALL 27902 0 2
// end ;
27899: PPOPN 4
27901: END
// function BuildUpgradeCommon ( base , building ) ; begin
27902: LD_INT 0
27904: PPUSH
// if GetBType ( building ) = ai_upcoming_building_data [ base ] [ 4 ] then
27905: LD_VAR 0 2
27909: PPUSH
27910: CALL_OW 266
27914: PUSH
27915: LD_EXP 47
27919: PUSH
27920: LD_VAR 0 1
27924: ARRAY
27925: PUSH
27926: LD_INT 4
27928: ARRAY
27929: EQUAL
27930: IFFALSE 27954
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
27932: LD_ADDR_EXP 47
27936: PUSH
27937: LD_EXP 47
27941: PPUSH
27942: LD_VAR 0 1
27946: PPUSH
27947: EMPTY
27948: PPUSH
27949: CALL_OW 1
27953: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
27954: LD_ADDR_EXP 43
27958: PUSH
27959: LD_EXP 43
27963: PPUSH
27964: LD_VAR 0 1
27968: PPUSH
27969: LD_INT 0
27971: PPUSH
27972: CALL_OW 1
27976: ST_TO_ADDR
// end ;
27977: LD_VAR 0 3
27981: RET
// on BuildingCaptured ( captured_building , building_former_side , capturing_unit ) do var temp_list , base ;
27982: LD_INT 0
27984: PPUSH
27985: PPUSH
// begin if captured_building in ai_depot then
27986: LD_VAR 0 1
27990: PUSH
27991: LD_EXP 34
27995: IN
27996: IFFALSE 28200
// begin if captured_building = ai_depot [ 2 ] then
27998: LD_VAR 0 1
28002: PUSH
28003: LD_EXP 34
28007: PUSH
28008: LD_INT 2
28010: ARRAY
28011: EQUAL
28012: IFFALSE 28100
// begin SetResourceType ( GetBase ( captured_building ) , mat_cans , Rand ( 3 , 5 ) * 10 ) ;
28014: LD_VAR 0 1
28018: PPUSH
28019: CALL_OW 274
28023: PPUSH
28024: LD_INT 1
28026: PPUSH
28027: LD_INT 3
28029: PPUSH
28030: LD_INT 5
28032: PPUSH
28033: CALL_OW 12
28037: PUSH
28038: LD_INT 10
28040: MUL
28041: PPUSH
28042: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_oil , 0 ) ;
28046: LD_VAR 0 1
28050: PPUSH
28051: CALL_OW 274
28055: PPUSH
28056: LD_INT 2
28058: PPUSH
28059: LD_INT 0
28061: PPUSH
28062: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_siberit , 20 + Rand ( 0 , 20 ) ) ;
28066: LD_VAR 0 1
28070: PPUSH
28071: CALL_OW 274
28075: PPUSH
28076: LD_INT 3
28078: PPUSH
28079: LD_INT 20
28081: PUSH
28082: LD_INT 0
28084: PPUSH
28085: LD_INT 20
28087: PPUSH
28088: CALL_OW 12
28092: PLUS
28093: PPUSH
28094: CALL_OW 277
// end else
28098: GO 28200
// begin SetResourceType ( GetBase ( captured_building ) , mat_cans , 200 + Rand ( 0 , 7 ) * 10 ) ;
28100: LD_VAR 0 1
28104: PPUSH
28105: CALL_OW 274
28109: PPUSH
28110: LD_INT 1
28112: PPUSH
28113: LD_INT 200
28115: PUSH
28116: LD_INT 0
28118: PPUSH
28119: LD_INT 7
28121: PPUSH
28122: CALL_OW 12
28126: PUSH
28127: LD_INT 10
28129: MUL
28130: PLUS
28131: PPUSH
28132: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_oil , 600 + Rand ( 0 , 100 ) ) ;
28136: LD_VAR 0 1
28140: PPUSH
28141: CALL_OW 274
28145: PPUSH
28146: LD_INT 2
28148: PPUSH
28149: LD_INT 600
28151: PUSH
28152: LD_INT 0
28154: PPUSH
28155: LD_INT 100
28157: PPUSH
28158: CALL_OW 12
28162: PLUS
28163: PPUSH
28164: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_siberit , 150 + Rand ( 0 , 50 ) ) ;
28168: LD_VAR 0 1
28172: PPUSH
28173: CALL_OW 274
28177: PPUSH
28178: LD_INT 3
28180: PPUSH
28181: LD_INT 150
28183: PUSH
28184: LD_INT 0
28186: PPUSH
28187: LD_INT 50
28189: PPUSH
28190: CALL_OW 12
28194: PLUS
28195: PPUSH
28196: CALL_OW 277
// end ; end ; base = FindBase ( captured_building ) ;
28200: LD_ADDR_VAR 0 5
28204: PUSH
28205: LD_VAR 0 1
28209: PPUSH
28210: CALL 16096 0 1
28214: ST_TO_ADDR
// if base = 0 or captured_building = am_br4 then
28215: LD_VAR 0 5
28219: PUSH
28220: LD_INT 0
28222: EQUAL
28223: PUSH
28224: LD_VAR 0 1
28228: PUSH
28229: LD_INT 3
28231: EQUAL
28232: OR
28233: IFFALSE 28237
// exit ;
28235: GO 28468
// if building_former_side = GetBaseSide ( base ) then
28237: LD_VAR 0 2
28241: PUSH
28242: LD_VAR 0 5
28246: PPUSH
28247: CALL 15948 0 1
28251: EQUAL
28252: IFFALSE 28335
// begin if captured_building in ai_all_buildings [ base ] then
28254: LD_VAR 0 1
28258: PUSH
28259: LD_EXP 45
28263: PUSH
28264: LD_VAR 0 5
28268: ARRAY
28269: IN
28270: IFFALSE 28333
// begin RemoveBuildingFromVariables ( base , captured_building ) ;
28272: LD_VAR 0 5
28276: PPUSH
28277: LD_VAR 0 1
28281: PPUSH
28282: CALL 14073 0 2
// temp_list = ai_captured_buildings [ base ] ^ captured_building ;
28286: LD_ADDR_VAR 0 4
28290: PUSH
28291: LD_EXP 87
28295: PUSH
28296: LD_VAR 0 5
28300: ARRAY
28301: PUSH
28302: LD_VAR 0 1
28306: ADD
28307: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
28308: LD_ADDR_EXP 87
28312: PUSH
28313: LD_EXP 87
28317: PPUSH
28318: LD_VAR 0 5
28322: PPUSH
28323: LD_VAR 0 4
28327: PPUSH
28328: CALL_OW 1
28332: ST_TO_ADDR
// end ; end else
28333: GO 28468
// begin if GetSide ( captured_building ) = GetBaseSide ( base ) then
28335: LD_VAR 0 1
28339: PPUSH
28340: CALL_OW 255
28344: PUSH
28345: LD_VAR 0 5
28349: PPUSH
28350: CALL 15948 0 1
28354: EQUAL
28355: IFFALSE 28468
// begin temp_list = ai_all_buildings [ base ] ^ captured_building ;
28357: LD_ADDR_VAR 0 4
28361: PUSH
28362: LD_EXP 45
28366: PUSH
28367: LD_VAR 0 5
28371: ARRAY
28372: PUSH
28373: LD_VAR 0 1
28377: ADD
28378: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
28379: LD_ADDR_EXP 45
28383: PUSH
28384: LD_EXP 45
28388: PPUSH
28389: LD_VAR 0 5
28393: PPUSH
28394: LD_VAR 0 4
28398: PPUSH
28399: CALL_OW 1
28403: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , captured_building , true ) ;
28404: LD_VAR 0 5
28408: PPUSH
28409: LD_VAR 0 1
28413: PPUSH
28414: LD_INT 1
28416: PPUSH
28417: CALL 6190 0 3
// temp_list = ai_captured_buildings [ base ] diff captured_building ;
28421: LD_ADDR_VAR 0 4
28425: PUSH
28426: LD_EXP 87
28430: PUSH
28431: LD_VAR 0 5
28435: ARRAY
28436: PUSH
28437: LD_VAR 0 1
28441: DIFF
28442: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
28443: LD_ADDR_EXP 87
28447: PUSH
28448: LD_EXP 87
28452: PPUSH
28453: LD_VAR 0 5
28457: PPUSH
28458: LD_VAR 0 4
28462: PPUSH
28463: CALL_OW 1
28467: ST_TO_ADDR
// end ; end ; end ;
28468: PPOPN 5
28470: END
// on UnitGoesToRed ( un ) do begin if un in ai_depot then
28471: LD_VAR 0 1
28475: PUSH
28476: LD_EXP 34
28480: IN
28481: IFFALSE 28685
// begin if un = ai_depot [ 2 ] then
28483: LD_VAR 0 1
28487: PUSH
28488: LD_EXP 34
28492: PUSH
28493: LD_INT 2
28495: ARRAY
28496: EQUAL
28497: IFFALSE 28585
// begin SetResourceType ( GetBase ( un ) , mat_cans , Rand ( 3 , 5 ) * 10 ) ;
28499: LD_VAR 0 1
28503: PPUSH
28504: CALL_OW 274
28508: PPUSH
28509: LD_INT 1
28511: PPUSH
28512: LD_INT 3
28514: PPUSH
28515: LD_INT 5
28517: PPUSH
28518: CALL_OW 12
28522: PUSH
28523: LD_INT 10
28525: MUL
28526: PPUSH
28527: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_oil , 0 ) ;
28531: LD_VAR 0 1
28535: PPUSH
28536: CALL_OW 274
28540: PPUSH
28541: LD_INT 2
28543: PPUSH
28544: LD_INT 0
28546: PPUSH
28547: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_siberit , 20 + Rand ( 0 , 20 ) ) ;
28551: LD_VAR 0 1
28555: PPUSH
28556: CALL_OW 274
28560: PPUSH
28561: LD_INT 3
28563: PPUSH
28564: LD_INT 20
28566: PUSH
28567: LD_INT 0
28569: PPUSH
28570: LD_INT 20
28572: PPUSH
28573: CALL_OW 12
28577: PLUS
28578: PPUSH
28579: CALL_OW 277
// end else
28583: GO 28685
// begin SetResourceType ( GetBase ( un ) , mat_cans , 200 + Rand ( 0 , 7 ) * 10 ) ;
28585: LD_VAR 0 1
28589: PPUSH
28590: CALL_OW 274
28594: PPUSH
28595: LD_INT 1
28597: PPUSH
28598: LD_INT 200
28600: PUSH
28601: LD_INT 0
28603: PPUSH
28604: LD_INT 7
28606: PPUSH
28607: CALL_OW 12
28611: PUSH
28612: LD_INT 10
28614: MUL
28615: PLUS
28616: PPUSH
28617: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_oil , 600 + Rand ( 0 , 100 ) ) ;
28621: LD_VAR 0 1
28625: PPUSH
28626: CALL_OW 274
28630: PPUSH
28631: LD_INT 2
28633: PPUSH
28634: LD_INT 600
28636: PUSH
28637: LD_INT 0
28639: PPUSH
28640: LD_INT 100
28642: PPUSH
28643: CALL_OW 12
28647: PLUS
28648: PPUSH
28649: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_siberit , 150 + Rand ( 0 , 50 ) ) ;
28653: LD_VAR 0 1
28657: PPUSH
28658: CALL_OW 274
28662: PPUSH
28663: LD_INT 3
28665: PPUSH
28666: LD_INT 150
28668: PUSH
28669: LD_INT 0
28671: PPUSH
28672: LD_INT 50
28674: PPUSH
28675: CALL_OW 12
28679: PLUS
28680: PPUSH
28681: CALL_OW 277
// end ; end ; end ;
28685: PPOPN 1
28687: END
// export function GetHumansOutOfUnits ( un_list ) ; var i ; begin
28688: LD_INT 0
28690: PPUSH
28691: PPUSH
// result = [ ] ;
28692: LD_ADDR_VAR 0 2
28696: PUSH
28697: EMPTY
28698: ST_TO_ADDR
// for i in un_list do
28699: LD_ADDR_VAR 0 3
28703: PUSH
28704: LD_VAR 0 1
28708: PUSH
28709: FOR_IN
28710: IFFALSE 28786
// case GetType ( IsInUnit ( i ) ) of unit_building :
28712: LD_VAR 0 3
28716: PPUSH
28717: CALL_OW 310
28721: PPUSH
28722: CALL_OW 247
28726: PUSH
28727: LD_INT 3
28729: DOUBLE
28730: EQUAL
28731: IFTRUE 28735
28733: GO 28747
28735: POP
// ComExitBuilding ( i ) ; unit_vehicle :
28736: LD_VAR 0 3
28740: PPUSH
28741: CALL_OW 122
28745: GO 28784
28747: LD_INT 2
28749: DOUBLE
28750: EQUAL
28751: IFTRUE 28755
28753: GO 28767
28755: POP
// ComExitVehicle ( i ) ; else
28756: LD_VAR 0 3
28760: PPUSH
28761: CALL_OW 121
28765: GO 28784
28767: POP
// result = result ^ i ; end ;
28768: LD_ADDR_VAR 0 2
28772: PUSH
28773: LD_VAR 0 2
28777: PUSH
28778: LD_VAR 0 3
28782: ADD
28783: ST_TO_ADDR
28784: GO 28709
28786: POP
28787: POP
// end ;
28788: LD_VAR 0 2
28792: RET
// export function BaseUnderAttack ( base , attack_side ) ; var area , i , val , def_side , temp_list ; begin
28793: LD_INT 0
28795: PPUSH
28796: PPUSH
28797: PPUSH
28798: PPUSH
28799: PPUSH
28800: PPUSH
// result = false ;
28801: LD_ADDR_VAR 0 3
28805: PUSH
28806: LD_INT 0
28808: ST_TO_ADDR
// def_side = GetBaseSide ( base ) ;
28809: LD_ADDR_VAR 0 7
28813: PUSH
28814: LD_VAR 0 1
28818: PPUSH
28819: CALL 15948 0 1
28823: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
28824: LD_ADDR_VAR 0 4
28828: PUSH
28829: LD_VAR 0 1
28833: PPUSH
28834: CALL 15877 0 1
28838: ST_TO_ADDR
// if attack_side = def_side then
28839: LD_VAR 0 2
28843: PUSH
28844: LD_VAR 0 7
28848: EQUAL
28849: IFFALSE 28853
// exit ;
28851: GO 29372
// if attack_side = - 1 then
28853: LD_VAR 0 2
28857: PUSH
28858: LD_INT 1
28860: NEG
28861: EQUAL
28862: IFFALSE 29128
// begin if FilterAllUnits ( [ [ f_enemy , def_side ] , [ f_inarea , area ] ] ) > 0 then
28864: LD_INT 81
28866: PUSH
28867: LD_VAR 0 7
28871: PUSH
28872: EMPTY
28873: LIST
28874: LIST
28875: PUSH
28876: LD_INT 95
28878: PUSH
28879: LD_VAR 0 4
28883: PUSH
28884: EMPTY
28885: LIST
28886: LIST
28887: PUSH
28888: EMPTY
28889: LIST
28890: LIST
28891: PPUSH
28892: CALL_OW 69
28896: PUSH
28897: LD_INT 0
28899: GREATER
28900: IFFALSE 28912
// begin result = true ;
28902: LD_ADDR_VAR 0 3
28906: PUSH
28907: LD_INT 1
28909: ST_TO_ADDR
// exit ;
28910: GO 29372
// end ; val = true ;
28912: LD_ADDR_VAR 0 6
28916: PUSH
28917: LD_INT 1
28919: ST_TO_ADDR
// for i in ai_contact_time [ def_side ] do
28920: LD_ADDR_VAR 0 5
28924: PUSH
28925: LD_EXP 75
28929: PUSH
28930: LD_VAR 0 7
28934: ARRAY
28935: PUSH
28936: FOR_IN
28937: IFFALSE 28961
// if i < 0 0$10 then
28939: LD_VAR 0 5
28943: PUSH
28944: LD_INT 350
28946: LESS
28947: IFFALSE 28959
// begin val = false ;
28949: LD_ADDR_VAR 0 6
28953: PUSH
28954: LD_INT 0
28956: ST_TO_ADDR
// break ;
28957: GO 28961
// end ;
28959: GO 28936
28961: POP
28962: POP
// if ContactTime ( def_side ) >= 0 0$10 and val then
28963: LD_VAR 0 7
28967: PPUSH
28968: CALL_OW 462
28972: PUSH
28973: LD_INT 350
28975: GREATEREQUAL
28976: PUSH
28977: LD_VAR 0 6
28981: AND
28982: IFFALSE 28986
// exit ;
28984: GO 29372
// temp_list = [ ] ;
28986: LD_ADDR_VAR 0 8
28990: PUSH
28991: EMPTY
28992: ST_TO_ADDR
// for i in ( ai_bases diff base ) do
28993: LD_ADDR_VAR 0 5
28997: PUSH
28998: LD_EXP 59
29002: PUSH
29003: LD_VAR 0 1
29007: DIFF
29008: PUSH
29009: FOR_IN
29010: IFFALSE 29056
// temp_list = Insert ( temp_list , 1 , [ f_not , [ f_inarea , GetBaseArea ( i ) ] ] ) ;
29012: LD_ADDR_VAR 0 8
29016: PUSH
29017: LD_VAR 0 8
29021: PPUSH
29022: LD_INT 1
29024: PPUSH
29025: LD_INT 3
29027: PUSH
29028: LD_INT 95
29030: PUSH
29031: LD_VAR 0 5
29035: PPUSH
29036: CALL 15877 0 1
29040: PUSH
29041: EMPTY
29042: LIST
29043: LIST
29044: PUSH
29045: EMPTY
29046: LIST
29047: LIST
29048: PPUSH
29049: CALL_OW 2
29053: ST_TO_ADDR
29054: GO 29009
29056: POP
29057: POP
// temp_list = FilterAllUnits ( [ [ f_enemy , def_side ] , [ f_not , [ f_type , unit_building ] ] ] ^ temp_list ) ;
29058: LD_ADDR_VAR 0 8
29062: PUSH
29063: LD_INT 81
29065: PUSH
29066: LD_VAR 0 7
29070: PUSH
29071: EMPTY
29072: LIST
29073: LIST
29074: PUSH
29075: LD_INT 3
29077: PUSH
29078: LD_INT 21
29080: PUSH
29081: LD_INT 3
29083: PUSH
29084: EMPTY
29085: LIST
29086: LIST
29087: PUSH
29088: EMPTY
29089: LIST
29090: LIST
29091: PUSH
29092: EMPTY
29093: LIST
29094: LIST
29095: PUSH
29096: LD_VAR 0 8
29100: ADD
29101: PPUSH
29102: CALL_OW 69
29106: ST_TO_ADDR
// if not AnyNearBaseArea ( temp_list , base ) then
29107: LD_VAR 0 8
29111: PPUSH
29112: LD_VAR 0 1
29116: PPUSH
29117: CALL 29448 0 2
29121: NOT
29122: IFFALSE 29126
// exit ;
29124: GO 29372
// end else
29126: GO 29364
// begin if FilterAllUnits ( [ [ f_side , attack_side ] , [ f_inarea , area ] ] ) > 0 then
29128: LD_INT 22
29130: PUSH
29131: LD_VAR 0 2
29135: PUSH
29136: EMPTY
29137: LIST
29138: LIST
29139: PUSH
29140: LD_INT 95
29142: PUSH
29143: LD_VAR 0 4
29147: PUSH
29148: EMPTY
29149: LIST
29150: LIST
29151: PUSH
29152: EMPTY
29153: LIST
29154: LIST
29155: PPUSH
29156: CALL_OW 69
29160: PUSH
29161: LD_INT 0
29163: GREATER
29164: IFFALSE 29176
// begin result = true ;
29166: LD_ADDR_VAR 0 3
29170: PUSH
29171: LD_INT 1
29173: ST_TO_ADDR
// exit ;
29174: GO 29372
// end ; if ContactTime ( [ def_side , attack_side ] ) >= 0 0$10 and ai_contact_time [ def_side ] [ attack_side ] >= 0 0$10 then
29176: LD_VAR 0 7
29180: PUSH
29181: LD_VAR 0 2
29185: PUSH
29186: EMPTY
29187: LIST
29188: LIST
29189: PPUSH
29190: CALL_OW 462
29194: PUSH
29195: LD_INT 350
29197: GREATEREQUAL
29198: PUSH
29199: LD_EXP 75
29203: PUSH
29204: LD_VAR 0 7
29208: ARRAY
29209: PUSH
29210: LD_VAR 0 2
29214: ARRAY
29215: PUSH
29216: LD_INT 350
29218: GREATEREQUAL
29219: AND
29220: IFFALSE 29224
// exit ;
29222: GO 29372
// temp_list = [ ] ;
29224: LD_ADDR_VAR 0 8
29228: PUSH
29229: EMPTY
29230: ST_TO_ADDR
// for i in ( ai_bases diff base ) do
29231: LD_ADDR_VAR 0 5
29235: PUSH
29236: LD_EXP 59
29240: PUSH
29241: LD_VAR 0 1
29245: DIFF
29246: PUSH
29247: FOR_IN
29248: IFFALSE 29294
// temp_list = Insert ( temp_list , 1 , [ f_not , [ f_inarea , GetBaseArea ( i ) ] ] ) ;
29250: LD_ADDR_VAR 0 8
29254: PUSH
29255: LD_VAR 0 8
29259: PPUSH
29260: LD_INT 1
29262: PPUSH
29263: LD_INT 3
29265: PUSH
29266: LD_INT 95
29268: PUSH
29269: LD_VAR 0 5
29273: PPUSH
29274: CALL 15877 0 1
29278: PUSH
29279: EMPTY
29280: LIST
29281: LIST
29282: PUSH
29283: EMPTY
29284: LIST
29285: LIST
29286: PPUSH
29287: CALL_OW 2
29291: ST_TO_ADDR
29292: GO 29247
29294: POP
29295: POP
// temp_list = FilterAllUnits ( [ [ f_side , attack_side ] , [ f_not , [ f_type , unit_building ] ] ] ^ temp_list ) ;
29296: LD_ADDR_VAR 0 8
29300: PUSH
29301: LD_INT 22
29303: PUSH
29304: LD_VAR 0 2
29308: PUSH
29309: EMPTY
29310: LIST
29311: LIST
29312: PUSH
29313: LD_INT 3
29315: PUSH
29316: LD_INT 21
29318: PUSH
29319: LD_INT 3
29321: PUSH
29322: EMPTY
29323: LIST
29324: LIST
29325: PUSH
29326: EMPTY
29327: LIST
29328: LIST
29329: PUSH
29330: EMPTY
29331: LIST
29332: LIST
29333: PUSH
29334: LD_VAR 0 8
29338: ADD
29339: PPUSH
29340: CALL_OW 69
29344: ST_TO_ADDR
// if not AnyNearBaseArea ( temp_list , base ) then
29345: LD_VAR 0 8
29349: PPUSH
29350: LD_VAR 0 1
29354: PPUSH
29355: CALL 29448 0 2
29359: NOT
29360: IFFALSE 29364
// exit ;
29362: GO 29372
// end ; result = true ;
29364: LD_ADDR_VAR 0 3
29368: PUSH
29369: LD_INT 1
29371: ST_TO_ADDR
// end ;
29372: LD_VAR 0 3
29376: RET
// export function ListFilterNearArea ( list , area ) ; var i ; begin
29377: LD_INT 0
29379: PPUSH
29380: PPUSH
// result = [ ] ;
29381: LD_ADDR_VAR 0 3
29385: PUSH
29386: EMPTY
29387: ST_TO_ADDR
// for i in list do
29388: LD_ADDR_VAR 0 4
29392: PUSH
29393: LD_VAR 0 1
29397: PUSH
29398: FOR_IN
29399: IFFALSE 29441
// if GetDistUnitArea ( i , area ) <= ai_near_base_dist then
29401: LD_VAR 0 4
29405: PPUSH
29406: LD_VAR 0 2
29410: PPUSH
29411: CALL_OW 299
29415: PUSH
29416: LD_EXP 53
29420: LESSEQUAL
29421: IFFALSE 29439
// result = result ^ i ;
29423: LD_ADDR_VAR 0 3
29427: PUSH
29428: LD_VAR 0 3
29432: PUSH
29433: LD_VAR 0 4
29437: ADD
29438: ST_TO_ADDR
29439: GO 29398
29441: POP
29442: POP
// end ;
29443: LD_VAR 0 3
29447: RET
// function AnyNearBaseArea ( list , base ) ; var i , area ; begin
29448: LD_INT 0
29450: PPUSH
29451: PPUSH
29452: PPUSH
// result = false ;
29453: LD_ADDR_VAR 0 3
29457: PUSH
29458: LD_INT 0
29460: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
29461: LD_ADDR_VAR 0 5
29465: PUSH
29466: LD_VAR 0 2
29470: PPUSH
29471: CALL 15877 0 1
29475: ST_TO_ADDR
// for i in list do
29476: LD_ADDR_VAR 0 4
29480: PUSH
29481: LD_VAR 0 1
29485: PUSH
29486: FOR_IN
29487: IFFALSE 29523
// if GetDistUnitArea ( i , area ) <= ai_near_base_dist then
29489: LD_VAR 0 4
29493: PPUSH
29494: LD_VAR 0 5
29498: PPUSH
29499: CALL_OW 299
29503: PUSH
29504: LD_EXP 53
29508: LESSEQUAL
29509: IFFALSE 29521
// begin result = true ;
29511: LD_ADDR_VAR 0 3
29515: PUSH
29516: LD_INT 1
29518: ST_TO_ADDR
// break ;
29519: GO 29523
// end ;
29521: GO 29486
29523: POP
29524: POP
// end ;
29525: LD_VAR 0 3
29529: RET
// on Command ( com ) do var i , temp_list , hex_list , un , k , target_hex ;
29530: LD_INT 0
29532: PPUSH
29533: PPUSH
29534: PPUSH
29535: PPUSH
29536: PPUSH
29537: PPUSH
// begin if com = 124 then
29538: LD_VAR 0 1
29542: PUSH
29543: LD_INT 124
29545: EQUAL
29546: IFFALSE 29957
// begin for i in FilterAllUnits ( [ f_side , you ] ) do
29548: LD_ADDR_VAR 0 2
29552: PUSH
29553: LD_INT 22
29555: PUSH
29556: LD_EXP 2
29560: PUSH
29561: EMPTY
29562: LIST
29563: LIST
29564: PPUSH
29565: CALL_OW 69
29569: PUSH
29570: FOR_IN
29571: IFFALSE 29955
// if IsSelected ( i ) and HasTask ( i ) then
29573: LD_VAR 0 2
29577: PPUSH
29578: CALL_OW 306
29582: PUSH
29583: LD_VAR 0 2
29587: PPUSH
29588: CALL_OW 314
29592: AND
29593: IFFALSE 29953
// begin target_hex = [ ] ;
29595: LD_ADDR_VAR 0 7
29599: PUSH
29600: EMPTY
29601: ST_TO_ADDR
// for k in GetTaskList ( i ) do
29602: LD_ADDR_VAR 0 6
29606: PUSH
29607: LD_VAR 0 2
29611: PPUSH
29612: CALL_OW 437
29616: PUSH
29617: FOR_IN
29618: IFFALSE 29665
// if k [ 1 ] = | then
29620: LD_VAR 0 6
29624: PUSH
29625: LD_INT 1
29627: ARRAY
29628: PUSH
29629: LD_STRING |
29631: EQUAL
29632: IFFALSE 29663
// begin target_hex = [ k [ 2 ] , k [ 3 ] ] ;
29634: LD_ADDR_VAR 0 7
29638: PUSH
29639: LD_VAR 0 6
29643: PUSH
29644: LD_INT 2
29646: ARRAY
29647: PUSH
29648: LD_VAR 0 6
29652: PUSH
29653: LD_INT 3
29655: ARRAY
29656: PUSH
29657: EMPTY
29658: LIST
29659: LIST
29660: ST_TO_ADDR
// break ;
29661: GO 29665
// end ;
29663: GO 29617
29665: POP
29666: POP
// if target_hex > 0 then
29667: LD_VAR 0 7
29671: PUSH
29672: LD_INT 0
29674: GREATER
29675: IFFALSE 29953
// begin hex_list = target_hex ;
29677: LD_ADDR_VAR 0 4
29681: PUSH
29682: LD_VAR 0 7
29686: ST_TO_ADDR
// temp_list = [ ] ;
29687: LD_ADDR_VAR 0 3
29691: PUSH
29692: EMPTY
29693: ST_TO_ADDR
// for k = 0 to 5 do
29694: LD_ADDR_VAR 0 6
29698: PUSH
29699: DOUBLE
29700: LD_INT 0
29702: DEC
29703: ST_TO_ADDR
29704: LD_INT 5
29706: PUSH
29707: FOR_TO
29708: IFFALSE 29778
// temp_list = Insert ( temp_list , 1 , [ ShiftX ( hex_list [ 1 ] , k , 1 ) , ShiftY ( hex_list [ 2 ] , k , 1 ) ] ) ;
29710: LD_ADDR_VAR 0 3
29714: PUSH
29715: LD_VAR 0 3
29719: PPUSH
29720: LD_INT 1
29722: PPUSH
29723: LD_VAR 0 4
29727: PUSH
29728: LD_INT 1
29730: ARRAY
29731: PPUSH
29732: LD_VAR 0 6
29736: PPUSH
29737: LD_INT 1
29739: PPUSH
29740: CALL_OW 272
29744: PUSH
29745: LD_VAR 0 4
29749: PUSH
29750: LD_INT 2
29752: ARRAY
29753: PPUSH
29754: LD_VAR 0 6
29758: PPUSH
29759: LD_INT 1
29761: PPUSH
29762: CALL_OW 273
29766: PUSH
29767: EMPTY
29768: LIST
29769: LIST
29770: PPUSH
29771: CALL_OW 2
29775: ST_TO_ADDR
29776: GO 29707
29778: POP
29779: POP
// hex_list = [ hex_list ] ^ temp_list ;
29780: LD_ADDR_VAR 0 4
29784: PUSH
29785: LD_VAR 0 4
29789: PUSH
29790: EMPTY
29791: LIST
29792: PUSH
29793: LD_VAR 0 3
29797: ADD
29798: ST_TO_ADDR
// temp_list = [ ] ;
29799: LD_ADDR_VAR 0 3
29803: PUSH
29804: EMPTY
29805: ST_TO_ADDR
// for k in hex_list do
29806: LD_ADDR_VAR 0 6
29810: PUSH
29811: LD_VAR 0 4
29815: PUSH
29816: FOR_IN
29817: IFFALSE 29951
// begin un = HexInfo ( k [ 1 ] , k [ 2 ] ) ;
29819: LD_ADDR_VAR 0 5
29823: PUSH
29824: LD_VAR 0 6
29828: PUSH
29829: LD_INT 1
29831: ARRAY
29832: PPUSH
29833: LD_VAR 0 6
29837: PUSH
29838: LD_INT 2
29840: ARRAY
29841: PPUSH
29842: CALL_OW 428
29846: ST_TO_ADDR
// if un > 0 and not un in temp_list then
29847: LD_VAR 0 5
29851: PUSH
29852: LD_INT 0
29854: GREATER
29855: PUSH
29856: LD_VAR 0 5
29860: PUSH
29861: LD_VAR 0 3
29865: IN
29866: NOT
29867: AND
29868: IFFALSE 29949
// begin ai_attack_ground_info_initial = Insert ( ai_attack_ground_info_initial , 1 , [ i , un , GetSide ( un ) , target_hex [ 1 ] , target_hex [ 2 ] ] ) ;
29870: LD_ADDR_EXP 76
29874: PUSH
29875: LD_EXP 76
29879: PPUSH
29880: LD_INT 1
29882: PPUSH
29883: LD_VAR 0 2
29887: PUSH
29888: LD_VAR 0 5
29892: PUSH
29893: LD_VAR 0 5
29897: PPUSH
29898: CALL_OW 255
29902: PUSH
29903: LD_VAR 0 7
29907: PUSH
29908: LD_INT 1
29910: ARRAY
29911: PUSH
29912: LD_VAR 0 7
29916: PUSH
29917: LD_INT 2
29919: ARRAY
29920: PUSH
29921: EMPTY
29922: LIST
29923: LIST
29924: LIST
29925: LIST
29926: LIST
29927: PPUSH
29928: CALL_OW 2
29932: ST_TO_ADDR
// temp_list = temp_list ^ un ;
29933: LD_ADDR_VAR 0 3
29937: PUSH
29938: LD_VAR 0 3
29942: PUSH
29943: LD_VAR 0 5
29947: ADD
29948: ST_TO_ADDR
// end ; end ;
29949: GO 29816
29951: POP
29952: POP
// end ; end ;
29953: GO 29570
29955: POP
29956: POP
// end ; end ;
29957: PPOPN 7
29959: END
// every 0 0$1 + 0 0$0.1 do var a , b , temp_list , temp_list_2 , yup , i , t ;
29960: GO 29962
29962: DISABLE
29963: LD_INT 0
29965: PPUSH
29966: PPUSH
29967: PPUSH
29968: PPUSH
29969: PPUSH
29970: PPUSH
29971: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
29972: LD_INT 18
29974: PPUSH
29975: CALL_OW 67
// i = 1 ;
29979: LD_ADDR_VAR 0 6
29983: PUSH
29984: LD_INT 1
29986: ST_TO_ADDR
// while i <= ai_attack_ground_info_initial do
29987: LD_VAR 0 6
29991: PUSH
29992: LD_EXP 76
29996: LESSEQUAL
29997: IFFALSE 30160
// begin yup = false ;
29999: LD_ADDR_VAR 0 5
30003: PUSH
30004: LD_INT 0
30006: ST_TO_ADDR
// for t in GetTaskList ( ai_attack_ground_info_initial [ i ] [ 1 ] ) do
30007: LD_ADDR_VAR 0 7
30011: PUSH
30012: LD_EXP 76
30016: PUSH
30017: LD_VAR 0 6
30021: ARRAY
30022: PUSH
30023: LD_INT 1
30025: ARRAY
30026: PPUSH
30027: CALL_OW 437
30031: PUSH
30032: FOR_IN
30033: IFFALSE 30113
// if t [ 1 ] = | then
30035: LD_VAR 0 7
30039: PUSH
30040: LD_INT 1
30042: ARRAY
30043: PUSH
30044: LD_STRING |
30046: EQUAL
30047: IFFALSE 30111
// if t [ 2 ] = ai_attack_ground_info_initial [ i ] [ 4 ] and t [ 3 ] = ai_attack_ground_info_initial [ i ] [ 5 ] then
30049: LD_VAR 0 7
30053: PUSH
30054: LD_INT 2
30056: ARRAY
30057: PUSH
30058: LD_EXP 76
30062: PUSH
30063: LD_VAR 0 6
30067: ARRAY
30068: PUSH
30069: LD_INT 4
30071: ARRAY
30072: EQUAL
30073: PUSH
30074: LD_VAR 0 7
30078: PUSH
30079: LD_INT 3
30081: ARRAY
30082: PUSH
30083: LD_EXP 76
30087: PUSH
30088: LD_VAR 0 6
30092: ARRAY
30093: PUSH
30094: LD_INT 5
30096: ARRAY
30097: EQUAL
30098: AND
30099: IFFALSE 30111
// begin yup = true ;
30101: LD_ADDR_VAR 0 5
30105: PUSH
30106: LD_INT 1
30108: ST_TO_ADDR
// break ;
30109: GO 30113
// end ;
30111: GO 30032
30113: POP
30114: POP
// if not yup then
30115: LD_VAR 0 5
30119: NOT
30120: IFFALSE 30144
// begin ai_attack_ground_info_initial = Delete ( ai_attack_ground_info_initial , i ) ;
30122: LD_ADDR_EXP 76
30126: PUSH
30127: LD_EXP 76
30131: PPUSH
30132: LD_VAR 0 6
30136: PPUSH
30137: CALL_OW 3
30141: ST_TO_ADDR
// continue ;
30142: GO 29987
// end ; i = i + 1 ;
30144: LD_ADDR_VAR 0 6
30148: PUSH
30149: LD_VAR 0 6
30153: PUSH
30154: LD_INT 1
30156: PLUS
30157: ST_TO_ADDR
// end ;
30158: GO 29987
// i = 1 ;
30160: LD_ADDR_VAR 0 6
30164: PUSH
30165: LD_INT 1
30167: ST_TO_ADDR
// while i <= ai_attack_ground_info_sustain do
30168: LD_VAR 0 6
30172: PUSH
30173: LD_EXP 77
30177: LESSEQUAL
30178: IFFALSE 30341
// begin yup = false ;
30180: LD_ADDR_VAR 0 5
30184: PUSH
30185: LD_INT 0
30187: ST_TO_ADDR
// for t in GetTaskList ( ai_attack_ground_info_sustain [ i ] [ 1 ] ) do
30188: LD_ADDR_VAR 0 7
30192: PUSH
30193: LD_EXP 77
30197: PUSH
30198: LD_VAR 0 6
30202: ARRAY
30203: PUSH
30204: LD_INT 1
30206: ARRAY
30207: PPUSH
30208: CALL_OW 437
30212: PUSH
30213: FOR_IN
30214: IFFALSE 30294
// if t [ 1 ] = | then
30216: LD_VAR 0 7
30220: PUSH
30221: LD_INT 1
30223: ARRAY
30224: PUSH
30225: LD_STRING |
30227: EQUAL
30228: IFFALSE 30292
// if t [ 2 ] = ai_attack_ground_info_sustain [ i ] [ 4 ] and t [ 3 ] = ai_attack_ground_info_sustain [ i ] [ 5 ] then
30230: LD_VAR 0 7
30234: PUSH
30235: LD_INT 2
30237: ARRAY
30238: PUSH
30239: LD_EXP 77
30243: PUSH
30244: LD_VAR 0 6
30248: ARRAY
30249: PUSH
30250: LD_INT 4
30252: ARRAY
30253: EQUAL
30254: PUSH
30255: LD_VAR 0 7
30259: PUSH
30260: LD_INT 3
30262: ARRAY
30263: PUSH
30264: LD_EXP 77
30268: PUSH
30269: LD_VAR 0 6
30273: ARRAY
30274: PUSH
30275: LD_INT 5
30277: ARRAY
30278: EQUAL
30279: AND
30280: IFFALSE 30292
// begin yup = true ;
30282: LD_ADDR_VAR 0 5
30286: PUSH
30287: LD_INT 1
30289: ST_TO_ADDR
// break ;
30290: GO 30294
// end ;
30292: GO 30213
30294: POP
30295: POP
// if not yup then
30296: LD_VAR 0 5
30300: NOT
30301: IFFALSE 30325
// begin ai_attack_ground_info_sustain = Delete ( ai_attack_ground_info_sustain , i ) ;
30303: LD_ADDR_EXP 77
30307: PUSH
30308: LD_EXP 77
30312: PPUSH
30313: LD_VAR 0 6
30317: PPUSH
30318: CALL_OW 3
30322: ST_TO_ADDR
// continue ;
30323: GO 30168
// end ; i = i + 1 ;
30325: LD_ADDR_VAR 0 6
30329: PUSH
30330: LD_VAR 0 6
30334: PUSH
30335: LD_INT 1
30337: PLUS
30338: ST_TO_ADDR
// end ;
30339: GO 30168
// temp_list = ai_contact_time ;
30341: LD_ADDR_VAR 0 3
30345: PUSH
30346: LD_EXP 75
30350: ST_TO_ADDR
// for a = 1 to temp_list do
30351: LD_ADDR_VAR 0 1
30355: PUSH
30356: DOUBLE
30357: LD_INT 1
30359: DEC
30360: ST_TO_ADDR
30361: LD_VAR 0 3
30365: PUSH
30366: FOR_TO
30367: IFFALSE 30493
// for b = 1 to temp_list [ a ] do
30369: LD_ADDR_VAR 0 2
30373: PUSH
30374: DOUBLE
30375: LD_INT 1
30377: DEC
30378: ST_TO_ADDR
30379: LD_VAR 0 3
30383: PUSH
30384: LD_VAR 0 1
30388: ARRAY
30389: PUSH
30390: FOR_TO
30391: IFFALSE 30489
// if temp_list [ a ] [ b ] < 100000 then
30393: LD_VAR 0 3
30397: PUSH
30398: LD_VAR 0 1
30402: ARRAY
30403: PUSH
30404: LD_VAR 0 2
30408: ARRAY
30409: PUSH
30410: LD_INT 100000
30412: LESS
30413: IFFALSE 30487
// begin temp_list_2 = Replace ( ai_contact_time [ a ] , b , temp_list [ a ] [ b ] + 0 0$0.5 ) ;
30415: LD_ADDR_VAR 0 4
30419: PUSH
30420: LD_EXP 75
30424: PUSH
30425: LD_VAR 0 1
30429: ARRAY
30430: PPUSH
30431: LD_VAR 0 2
30435: PPUSH
30436: LD_VAR 0 3
30440: PUSH
30441: LD_VAR 0 1
30445: ARRAY
30446: PUSH
30447: LD_VAR 0 2
30451: ARRAY
30452: PUSH
30453: LD_INT 18
30455: PLUS
30456: PPUSH
30457: CALL_OW 1
30461: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a , temp_list_2 ) ;
30462: LD_ADDR_EXP 75
30466: PUSH
30467: LD_EXP 75
30471: PPUSH
30472: LD_VAR 0 1
30476: PPUSH
30477: LD_VAR 0 4
30481: PPUSH
30482: CALL_OW 1
30486: ST_TO_ADDR
// end ;
30487: GO 30390
30489: POP
30490: POP
30491: GO 30366
30493: POP
30494: POP
// for a in ai_attack_ground_info_initial do
30495: LD_ADDR_VAR 0 1
30499: PUSH
30500: LD_EXP 76
30504: PUSH
30505: FOR_IN
30506: IFFALSE 30712
// begin if IsDead ( a [ 2 ] ) or UnitShoot ( a [ 2 ] ) = a [ 1 ] then
30508: LD_VAR 0 1
30512: PUSH
30513: LD_INT 2
30515: ARRAY
30516: PPUSH
30517: CALL_OW 301
30521: PUSH
30522: LD_VAR 0 1
30526: PUSH
30527: LD_INT 2
30529: ARRAY
30530: PPUSH
30531: CALL_OW 504
30535: PUSH
30536: LD_VAR 0 1
30540: PUSH
30541: LD_INT 1
30543: ARRAY
30544: EQUAL
30545: OR
30546: IFFALSE 30710
// begin temp_list = Replace ( ai_contact_time [ you ] , a [ 3 ] , 0 ) ;
30548: LD_ADDR_VAR 0 3
30552: PUSH
30553: LD_EXP 75
30557: PUSH
30558: LD_EXP 2
30562: ARRAY
30563: PPUSH
30564: LD_VAR 0 1
30568: PUSH
30569: LD_INT 3
30571: ARRAY
30572: PPUSH
30573: LD_INT 0
30575: PPUSH
30576: CALL_OW 1
30580: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , you , temp_list ) ;
30581: LD_ADDR_EXP 75
30585: PUSH
30586: LD_EXP 75
30590: PPUSH
30591: LD_EXP 2
30595: PPUSH
30596: LD_VAR 0 3
30600: PPUSH
30601: CALL_OW 1
30605: ST_TO_ADDR
// temp_list = Replace ( ai_contact_time [ a [ 3 ] ] , you , 0 ) ;
30606: LD_ADDR_VAR 0 3
30610: PUSH
30611: LD_EXP 75
30615: PUSH
30616: LD_VAR 0 1
30620: PUSH
30621: LD_INT 3
30623: ARRAY
30624: ARRAY
30625: PPUSH
30626: LD_EXP 2
30630: PPUSH
30631: LD_INT 0
30633: PPUSH
30634: CALL_OW 1
30638: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a [ 3 ] , temp_list ) ;
30639: LD_ADDR_EXP 75
30643: PUSH
30644: LD_EXP 75
30648: PPUSH
30649: LD_VAR 0 1
30653: PUSH
30654: LD_INT 3
30656: ARRAY
30657: PPUSH
30658: LD_VAR 0 3
30662: PPUSH
30663: CALL_OW 1
30667: ST_TO_ADDR
// ai_attack_ground_info_initial = ai_attack_ground_info_initial diff [ a ] ;
30668: LD_ADDR_EXP 76
30672: PUSH
30673: LD_EXP 76
30677: PUSH
30678: LD_VAR 0 1
30682: PUSH
30683: EMPTY
30684: LIST
30685: DIFF
30686: ST_TO_ADDR
// ai_attack_ground_info_sustain = Insert ( ai_attack_ground_info_sustain , 1 , a ) ;
30687: LD_ADDR_EXP 77
30691: PUSH
30692: LD_EXP 77
30696: PPUSH
30697: LD_INT 1
30699: PPUSH
30700: LD_VAR 0 1
30704: PPUSH
30705: CALL_OW 2
30709: ST_TO_ADDR
// end ; end ;
30710: GO 30505
30712: POP
30713: POP
// for a in ai_attack_ground_info_sustain do
30714: LD_ADDR_VAR 0 1
30718: PUSH
30719: LD_EXP 77
30723: PUSH
30724: FOR_IN
30725: IFFALSE 30849
// begin temp_list = Replace ( ai_contact_time [ you ] , a [ 3 ] , 0 ) ;
30727: LD_ADDR_VAR 0 3
30731: PUSH
30732: LD_EXP 75
30736: PUSH
30737: LD_EXP 2
30741: ARRAY
30742: PPUSH
30743: LD_VAR 0 1
30747: PUSH
30748: LD_INT 3
30750: ARRAY
30751: PPUSH
30752: LD_INT 0
30754: PPUSH
30755: CALL_OW 1
30759: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , you , temp_list ) ;
30760: LD_ADDR_EXP 75
30764: PUSH
30765: LD_EXP 75
30769: PPUSH
30770: LD_EXP 2
30774: PPUSH
30775: LD_VAR 0 3
30779: PPUSH
30780: CALL_OW 1
30784: ST_TO_ADDR
// temp_list = Replace ( ai_contact_time [ a [ 3 ] ] , you , 0 ) ;
30785: LD_ADDR_VAR 0 3
30789: PUSH
30790: LD_EXP 75
30794: PUSH
30795: LD_VAR 0 1
30799: PUSH
30800: LD_INT 3
30802: ARRAY
30803: ARRAY
30804: PPUSH
30805: LD_EXP 2
30809: PPUSH
30810: LD_INT 0
30812: PPUSH
30813: CALL_OW 1
30817: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a [ 3 ] , temp_list ) ;
30818: LD_ADDR_EXP 75
30822: PUSH
30823: LD_EXP 75
30827: PPUSH
30828: LD_VAR 0 1
30832: PUSH
30833: LD_INT 3
30835: ARRAY
30836: PPUSH
30837: LD_VAR 0 3
30841: PPUSH
30842: CALL_OW 1
30846: ST_TO_ADDR
// end ;
30847: GO 30724
30849: POP
30850: POP
// until false ;
30851: LD_INT 0
30853: IFFALSE 29972
// end ;
30855: PPOPN 7
30857: 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 , free_spaces , temp_list_2 , remote_mechanics , n ; var vehicles_drivers ;
30858: GO 30860
30860: DISABLE
30861: LD_INT 0
30863: PPUSH
30864: PPUSH
30865: PPUSH
30866: PPUSH
30867: PPUSH
30868: PPUSH
30869: PPUSH
30870: PPUSH
30871: PPUSH
30872: PPUSH
30873: PPUSH
30874: PPUSH
30875: PPUSH
30876: PPUSH
30877: PPUSH
30878: PPUSH
30879: PPUSH
30880: PPUSH
// begin vehicles_drivers = [ ] ;
30881: LD_ADDR_VAR 0 18
30885: PUSH
30886: EMPTY
30887: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
30888: LD_INT 35
30890: PPUSH
30891: CALL_OW 67
// for base in ai_bases do
30895: LD_ADDR_VAR 0 12
30899: PUSH
30900: LD_EXP 59
30904: PUSH
30905: FOR_IN
30906: IFFALSE 35257
// begin side = GetBaseSide ( base ) ;
30908: LD_ADDR_VAR 0 1
30912: PUSH
30913: LD_VAR 0 12
30917: PPUSH
30918: CALL 15948 0 1
30922: ST_TO_ADDR
// under_attack = BaseUnderAttack ( base , - 1 ) ;
30923: LD_ADDR_VAR 0 9
30927: PUSH
30928: LD_VAR 0 12
30932: PPUSH
30933: LD_INT 1
30935: NEG
30936: PPUSH
30937: CALL 28793 0 2
30941: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] do
30942: LD_ADDR_VAR 0 2
30946: PUSH
30947: LD_EXP 39
30951: PUSH
30952: LD_VAR 0 12
30956: ARRAY
30957: PUSH
30958: FOR_IN
30959: IFFALSE 31054
// if vehicles_drivers >= i then
30961: LD_VAR 0 18
30965: PUSH
30966: LD_VAR 0 2
30970: GREATEREQUAL
30971: IFFALSE 31052
// if vehicles_drivers [ i ] > 0 then
30973: LD_VAR 0 18
30977: PUSH
30978: LD_VAR 0 2
30982: ARRAY
30983: PUSH
30984: LD_INT 0
30986: GREATER
30987: IFFALSE 31052
// if IsInUnit ( vehicles_drivers [ i ] ) = i or IsDead ( vehicles_drivers [ i ] ) then
30989: LD_VAR 0 18
30993: PUSH
30994: LD_VAR 0 2
30998: ARRAY
30999: PPUSH
31000: CALL_OW 310
31004: PUSH
31005: LD_VAR 0 2
31009: EQUAL
31010: PUSH
31011: LD_VAR 0 18
31015: PUSH
31016: LD_VAR 0 2
31020: ARRAY
31021: PPUSH
31022: CALL_OW 301
31026: OR
31027: IFFALSE 31052
// vehicles_drivers = Replace ( vehicles_drivers , i , 0 ) ;
31029: LD_ADDR_VAR 0 18
31033: PUSH
31034: LD_VAR 0 18
31038: PPUSH
31039: LD_VAR 0 2
31043: PPUSH
31044: LD_INT 0
31046: PPUSH
31047: CALL_OW 1
31051: ST_TO_ADDR
31052: GO 30958
31054: POP
31055: 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
31056: LD_EXP 69
31060: PUSH
31061: LD_VAR 0 12
31065: ARRAY
31066: PUSH
31067: LD_INT 0
31069: GREATER
31070: PUSH
31071: LD_EXP 69
31075: PUSH
31076: LD_VAR 0 12
31080: ARRAY
31081: PPUSH
31082: CALL_OW 263
31086: PUSH
31087: LD_INT 1
31089: EQUAL
31090: AND
31091: PUSH
31092: LD_EXP 85
31096: PUSH
31097: LD_VAR 0 12
31101: ARRAY
31102: PUSH
31103: LD_INT 0
31105: EQUAL
31106: AND
31107: PUSH
31108: LD_EXP 31
31112: PUSH
31113: LD_VAR 0 12
31117: ARRAY
31118: PUSH
31119: LD_INT 0
31121: GREATER
31122: AND
31123: IFFALSE 31155
// begin ai_crane_driver = Replace ( ai_crane_driver , base , FindBestCraneDriver ( base ) ) ;
31125: LD_ADDR_EXP 85
31129: PUSH
31130: LD_EXP 85
31134: PPUSH
31135: LD_VAR 0 12
31139: PPUSH
31140: LD_VAR 0 12
31144: PPUSH
31145: CALL 35577 0 1
31149: PPUSH
31150: CALL_OW 1
31154: ST_TO_ADDR
// end ; mechanics_list = UnitFilter ( ai_mechanics_defend [ base ] diff ( ai_heal_these_humans [ base ] ^ ai_crane_driver [ base ] ) , [ f_not , [ f_driving ] ] ) ;
31155: LD_ADDR_VAR 0 3
31159: PUSH
31160: LD_EXP 31
31164: PUSH
31165: LD_VAR 0 12
31169: ARRAY
31170: PUSH
31171: LD_EXP 44
31175: PUSH
31176: LD_VAR 0 12
31180: ARRAY
31181: PUSH
31182: LD_EXP 85
31186: PUSH
31187: LD_VAR 0 12
31191: ARRAY
31192: ADD
31193: DIFF
31194: PPUSH
31195: LD_INT 3
31197: PUSH
31198: LD_INT 55
31200: PUSH
31201: EMPTY
31202: LIST
31203: PUSH
31204: EMPTY
31205: LIST
31206: LIST
31207: PPUSH
31208: CALL_OW 72
31212: ST_TO_ADDR
// if ai_crane_driver [ base ] > 0 and not IsOk ( ai_crane [ base ] ) then
31213: LD_EXP 85
31217: PUSH
31218: LD_VAR 0 12
31222: ARRAY
31223: PUSH
31224: LD_INT 0
31226: GREATER
31227: PUSH
31228: LD_EXP 69
31232: PUSH
31233: LD_VAR 0 12
31237: ARRAY
31238: PPUSH
31239: CALL_OW 302
31243: NOT
31244: AND
31245: IFFALSE 31269
// mechanics_list = mechanics_list ^ ai_crane_driver [ base ] ;
31247: LD_ADDR_VAR 0 3
31251: PUSH
31252: LD_VAR 0 3
31256: PUSH
31257: LD_EXP 85
31261: PUSH
31262: LD_VAR 0 12
31266: ARRAY
31267: ADD
31268: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
31269: LD_ADDR_VAR 0 4
31273: PUSH
31274: LD_EXP 44
31278: PUSH
31279: LD_VAR 0 12
31283: ARRAY
31284: ST_TO_ADDR
// i = 1 ;
31285: LD_ADDR_VAR 0 2
31289: PUSH
31290: LD_INT 1
31292: ST_TO_ADDR
// while i <= mechanics_list do
31293: LD_VAR 0 2
31297: PUSH
31298: LD_VAR 0 3
31302: LESSEQUAL
31303: IFFALSE 31386
// begin if GetLives ( mechanics_list [ i ] ) <= 900 then
31305: LD_VAR 0 3
31309: PUSH
31310: LD_VAR 0 2
31314: ARRAY
31315: PPUSH
31316: CALL_OW 256
31320: PUSH
31321: LD_INT 900
31323: LESSEQUAL
31324: IFFALSE 31370
// begin temp_list = temp_list ^ mechanics_list [ i ] ;
31326: LD_ADDR_VAR 0 4
31330: PUSH
31331: LD_VAR 0 4
31335: PUSH
31336: LD_VAR 0 3
31340: PUSH
31341: LD_VAR 0 2
31345: ARRAY
31346: ADD
31347: ST_TO_ADDR
// mechanics_list = Delete ( mechanics_list , i ) ;
31348: LD_ADDR_VAR 0 3
31352: PUSH
31353: LD_VAR 0 3
31357: PPUSH
31358: LD_VAR 0 2
31362: PPUSH
31363: CALL_OW 3
31367: ST_TO_ADDR
// continue ;
31368: GO 31293
// end ; i = i + 1 ;
31370: LD_ADDR_VAR 0 2
31374: PUSH
31375: LD_VAR 0 2
31379: PUSH
31380: LD_INT 1
31382: PLUS
31383: ST_TO_ADDR
// end ;
31384: GO 31293
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
31386: LD_ADDR_EXP 44
31390: PUSH
31391: LD_EXP 44
31395: PPUSH
31396: LD_VAR 0 12
31400: PPUSH
31401: LD_VAR 0 4
31405: PPUSH
31406: CALL_OW 1
31410: ST_TO_ADDR
// temp_list = [ ] ;
31411: LD_ADDR_VAR 0 4
31415: PUSH
31416: EMPTY
31417: ST_TO_ADDR
// for i in ai_vehicles_being_repaired [ base ] do
31418: LD_ADDR_VAR 0 2
31422: PUSH
31423: LD_EXP 88
31427: PUSH
31428: LD_VAR 0 12
31432: ARRAY
31433: PUSH
31434: FOR_IN
31435: IFFALSE 31470
// if GetLives ( i ) < 1000 then
31437: LD_VAR 0 2
31441: PPUSH
31442: CALL_OW 256
31446: PUSH
31447: LD_INT 1000
31449: LESS
31450: IFFALSE 31468
// temp_list = temp_list ^ i ;
31452: LD_ADDR_VAR 0 4
31456: PUSH
31457: LD_VAR 0 4
31461: PUSH
31462: LD_VAR 0 2
31466: ADD
31467: ST_TO_ADDR
31468: GO 31434
31470: POP
31471: POP
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
31472: LD_ADDR_EXP 88
31476: PUSH
31477: LD_EXP 88
31481: PPUSH
31482: LD_VAR 0 12
31486: PPUSH
31487: LD_VAR 0 4
31491: PPUSH
31492: CALL_OW 1
31496: ST_TO_ADDR
// temp_list = [ ] ;
31497: LD_ADDR_VAR 0 4
31501: PUSH
31502: EMPTY
31503: ST_TO_ADDR
// for i in ai_retreating_vehicles_defend [ base ] diff ai_vehicles_being_repaired [ base ] do
31504: LD_ADDR_VAR 0 2
31508: PUSH
31509: LD_EXP 80
31513: PUSH
31514: LD_VAR 0 12
31518: ARRAY
31519: PUSH
31520: LD_EXP 88
31524: PUSH
31525: LD_VAR 0 12
31529: ARRAY
31530: DIFF
31531: PUSH
31532: FOR_IN
31533: IFFALSE 31568
// if GetLives ( i ) < 1000 then
31535: LD_VAR 0 2
31539: PPUSH
31540: CALL_OW 256
31544: PUSH
31545: LD_INT 1000
31547: LESS
31548: IFFALSE 31566
// temp_list = temp_list ^ i ;
31550: LD_ADDR_VAR 0 4
31554: PUSH
31555: LD_VAR 0 4
31559: PUSH
31560: LD_VAR 0 2
31564: ADD
31565: ST_TO_ADDR
31566: GO 31532
31568: POP
31569: POP
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
31570: LD_ADDR_EXP 80
31574: PUSH
31575: LD_EXP 80
31579: PPUSH
31580: LD_VAR 0 12
31584: PPUSH
31585: LD_VAR 0 4
31589: PPUSH
31590: CALL_OW 1
31594: ST_TO_ADDR
// temp_list = ai_retreating_vehicles_defend [ base ] ;
31595: LD_ADDR_VAR 0 4
31599: PUSH
31600: LD_EXP 80
31604: PUSH
31605: LD_VAR 0 12
31609: ARRAY
31610: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] diff ( ai_retreating_vehicles_defend [ base ] ^ ai_vehicles_being_repaired [ base ] ) do
31611: LD_ADDR_VAR 0 2
31615: PUSH
31616: LD_EXP 39
31620: PUSH
31621: LD_VAR 0 12
31625: ARRAY
31626: PUSH
31627: LD_EXP 80
31631: PUSH
31632: LD_VAR 0 12
31636: ARRAY
31637: PUSH
31638: LD_EXP 88
31642: PUSH
31643: LD_VAR 0 12
31647: ARRAY
31648: ADD
31649: DIFF
31650: PUSH
31651: FOR_IN
31652: IFFALSE 31687
// if GetLives ( i ) <= 250 then
31654: LD_VAR 0 2
31658: PPUSH
31659: CALL_OW 256
31663: PUSH
31664: LD_INT 250
31666: LESSEQUAL
31667: IFFALSE 31685
// temp_list = temp_list ^ i ;
31669: LD_ADDR_VAR 0 4
31673: PUSH
31674: LD_VAR 0 4
31678: PUSH
31679: LD_VAR 0 2
31683: ADD
31684: ST_TO_ADDR
31685: GO 31651
31687: POP
31688: POP
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
31689: LD_ADDR_EXP 80
31693: PUSH
31694: LD_EXP 80
31698: PPUSH
31699: LD_VAR 0 12
31703: PPUSH
31704: LD_VAR 0 4
31708: PPUSH
31709: CALL_OW 1
31713: ST_TO_ADDR
// temp_list = [ ] ;
31714: LD_ADDR_VAR 0 4
31718: PUSH
31719: EMPTY
31720: 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
31721: LD_ADDR_VAR 0 2
31725: PUSH
31726: LD_EXP 55
31730: PUSH
31731: LD_VAR 0 12
31735: ARRAY
31736: PUSH
31737: LD_EXP 80
31741: PUSH
31742: LD_VAR 0 12
31746: ARRAY
31747: PUSH
31748: LD_EXP 88
31752: PUSH
31753: LD_VAR 0 12
31757: ARRAY
31758: ADD
31759: PUSH
31760: LD_EXP 78
31764: PUSH
31765: LD_VAR 0 12
31769: ARRAY
31770: ADD
31771: PUSH
31772: LD_EXP 79
31776: PUSH
31777: LD_VAR 0 12
31781: ARRAY
31782: ADD
31783: DIFF
31784: PUSH
31785: FOR_IN
31786: IFFALSE 31821
// if GetFuel ( i ) < 95 then
31788: LD_VAR 0 2
31792: PPUSH
31793: CALL_OW 261
31797: PUSH
31798: LD_INT 95
31800: LESS
31801: IFFALSE 31819
// temp_list = temp_list ^ i ;
31803: LD_ADDR_VAR 0 4
31807: PUSH
31808: LD_VAR 0 4
31812: PUSH
31813: LD_VAR 0 2
31817: ADD
31818: ST_TO_ADDR
31819: GO 31785
31821: POP
31822: POP
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
31823: LD_ADDR_EXP 55
31827: PUSH
31828: LD_EXP 55
31832: PPUSH
31833: LD_VAR 0 12
31837: PPUSH
31838: LD_VAR 0 4
31842: PPUSH
31843: CALL_OW 1
31847: ST_TO_ADDR
// if under_attack then
31848: LD_VAR 0 9
31852: IFFALSE 32514
// begin vehicles_list = ai_vehicles_defend [ base ] diff ( ai_retreating_vehicles_defend [ base ] ^ ai_vehicles_being_repaired [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) ;
31854: LD_ADDR_VAR 0 7
31858: PUSH
31859: LD_EXP 39
31863: PUSH
31864: LD_VAR 0 12
31868: ARRAY
31869: PUSH
31870: LD_EXP 80
31874: PUSH
31875: LD_VAR 0 12
31879: ARRAY
31880: PUSH
31881: LD_EXP 88
31885: PUSH
31886: LD_VAR 0 12
31890: ARRAY
31891: ADD
31892: PUSH
31893: LD_EXP 78
31897: PUSH
31898: LD_VAR 0 12
31902: ARRAY
31903: ADD
31904: PUSH
31905: LD_EXP 79
31909: PUSH
31910: LD_VAR 0 12
31914: ARRAY
31915: ADD
31916: DIFF
31917: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
31918: LD_ADDR_VAR 0 13
31922: PUSH
31923: LD_VAR 0 12
31927: PPUSH
31928: CALL 15877 0 1
31932: ST_TO_ADDR
// temp_list = UnitFilter ( vehicles_list , [ [ f_control , control_manual ] , [ f_ok ] , [ f_empty ] , [ f_inarea , area ] ] ) ;
31933: LD_ADDR_VAR 0 4
31937: PUSH
31938: LD_VAR 0 7
31942: PPUSH
31943: LD_INT 33
31945: PUSH
31946: LD_INT 1
31948: PUSH
31949: EMPTY
31950: LIST
31951: LIST
31952: PUSH
31953: LD_INT 50
31955: PUSH
31956: EMPTY
31957: LIST
31958: PUSH
31959: LD_INT 58
31961: PUSH
31962: EMPTY
31963: LIST
31964: PUSH
31965: LD_INT 95
31967: PUSH
31968: LD_VAR 0 13
31972: PUSH
31973: EMPTY
31974: LIST
31975: LIST
31976: PUSH
31977: EMPTY
31978: LIST
31979: LIST
31980: LIST
31981: LIST
31982: PPUSH
31983: CALL_OW 72
31987: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
31988: LD_ADDR_VAR 0 4
31992: PUSH
31993: LD_VAR 0 4
31997: PPUSH
31998: LD_VAR 0 3
32002: PPUSH
32003: LD_VAR 0 18
32007: PPUSH
32008: CALL 35266 0 3
32012: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
32013: LD_ADDR_VAR 0 3
32017: PUSH
32018: LD_VAR 0 4
32022: PUSH
32023: LD_INT 1
32025: ARRAY
32026: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
32027: LD_ADDR_VAR 0 18
32031: PUSH
32032: LD_VAR 0 4
32036: PUSH
32037: LD_INT 2
32039: ARRAY
32040: ST_TO_ADDR
// temp_list = DangerousUnits ( ListFilterNearArea ( FilterAllUnits ( [ f_enemy , side ] ) , area ) ) ;
32041: LD_ADDR_VAR 0 4
32045: PUSH
32046: LD_INT 81
32048: PUSH
32049: LD_VAR 0 1
32053: PUSH
32054: EMPTY
32055: LIST
32056: LIST
32057: PPUSH
32058: CALL_OW 69
32062: PPUSH
32063: LD_VAR 0 13
32067: PPUSH
32068: CALL 29377 0 2
32072: PPUSH
32073: CALL 37769 0 1
32077: ST_TO_ADDR
// case base of 1 :
32078: LD_VAR 0 12
32082: PUSH
32083: LD_INT 1
32085: DOUBLE
32086: EQUAL
32087: IFTRUE 32091
32089: GO 32126
32091: POP
// temp_list = UnitFilter ( temp_list , [ f_not , [ f_inarea , am_no_vehicle_defend_area ] ] ) ; 2 :
32092: LD_ADDR_VAR 0 4
32096: PUSH
32097: LD_VAR 0 4
32101: PPUSH
32102: LD_INT 3
32104: PUSH
32105: LD_INT 95
32107: PUSH
32108: LD_INT 28
32110: PUSH
32111: EMPTY
32112: LIST
32113: LIST
32114: PUSH
32115: EMPTY
32116: LIST
32117: LIST
32118: PPUSH
32119: CALL_OW 72
32123: ST_TO_ADDR
32124: GO 32138
32126: LD_INT 2
32128: DOUBLE
32129: EQUAL
32130: IFTRUE 32134
32132: GO 32137
32134: POP
// begin end ; end ;
32135: GO 32138
32137: POP
// if temp_list > 0 then
32138: LD_VAR 0 4
32142: PUSH
32143: LD_INT 0
32145: GREATER
32146: IFFALSE 32369
// begin if base = 1 then
32148: LD_VAR 0 12
32152: PUSH
32153: LD_INT 1
32155: EQUAL
32156: IFFALSE 32330
// begin n = 99999 ;
32158: LD_ADDR_VAR 0 17
32162: PUSH
32163: LD_INT 99999
32165: ST_TO_ADDR
// for i in temp_list do
32166: LD_ADDR_VAR 0 2
32170: PUSH
32171: LD_VAR 0 4
32175: PUSH
32176: FOR_IN
32177: IFFALSE 32235
// begin k = GetY ( i ) ;
32179: LD_ADDR_VAR 0 11
32183: PUSH
32184: LD_VAR 0 2
32188: PPUSH
32189: CALL_OW 251
32193: ST_TO_ADDR
// if not IsInArea ( i , area ) and k < n then
32194: LD_VAR 0 2
32198: PPUSH
32199: LD_VAR 0 13
32203: PPUSH
32204: CALL_OW 308
32208: NOT
32209: PUSH
32210: LD_VAR 0 11
32214: PUSH
32215: LD_VAR 0 17
32219: LESS
32220: AND
32221: IFFALSE 32233
// begin n = k ;
32223: LD_ADDR_VAR 0 17
32227: PUSH
32228: LD_VAR 0 11
32232: ST_TO_ADDR
// end ; end ;
32233: GO 32176
32235: POP
32236: POP
// if n < 37 then
32237: LD_VAR 0 17
32241: PUSH
32242: LD_INT 37
32244: LESS
32245: IFFALSE 32264
// ComAgressiveMove ( vehicles_list , 37 , 39 ) else
32247: LD_VAR 0 7
32251: PPUSH
32252: LD_INT 37
32254: PPUSH
32255: LD_INT 39
32257: PPUSH
32258: CALL_OW 114
32262: GO 32328
// if n < 53 then
32264: LD_VAR 0 17
32268: PUSH
32269: LD_INT 53
32271: LESS
32272: IFFALSE 32291
// ComAgressiveMove ( vehicles_List , 45 , 47 ) else
32274: LD_VAR 0 7
32278: PPUSH
32279: LD_INT 45
32281: PPUSH
32282: LD_INT 47
32284: PPUSH
32285: CALL_OW 114
32289: GO 32328
// ComAgressiveMove ( vehicles_list , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
32291: LD_VAR 0 7
32295: PPUSH
32296: LD_VAR 0 4
32300: PUSH
32301: LD_INT 1
32303: ARRAY
32304: PPUSH
32305: CALL_OW 250
32309: PPUSH
32310: LD_VAR 0 4
32314: PUSH
32315: LD_INT 1
32317: ARRAY
32318: PPUSH
32319: CALL_OW 251
32323: PPUSH
32324: CALL_OW 114
// end else
32328: GO 32367
// ComAgressiveMove ( vehicles_list , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) end else
32330: LD_VAR 0 7
32334: PPUSH
32335: LD_VAR 0 4
32339: PUSH
32340: LD_INT 1
32342: ARRAY
32343: PPUSH
32344: CALL_OW 250
32348: PPUSH
32349: LD_VAR 0 4
32353: PUSH
32354: LD_INT 1
32356: ARRAY
32357: PPUSH
32358: CALL_OW 251
32362: PPUSH
32363: CALL_OW 114
32367: GO 32512
// begin temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , area ] ] ) ;
32369: LD_ADDR_VAR 0 4
32373: PUSH
32374: LD_INT 81
32376: PUSH
32377: LD_VAR 0 1
32381: PUSH
32382: EMPTY
32383: LIST
32384: LIST
32385: PUSH
32386: LD_INT 95
32388: PUSH
32389: LD_VAR 0 13
32393: PUSH
32394: EMPTY
32395: LIST
32396: LIST
32397: PUSH
32398: EMPTY
32399: LIST
32400: LIST
32401: PPUSH
32402: CALL_OW 69
32406: ST_TO_ADDR
// if base = 1 then
32407: LD_VAR 0 12
32411: PUSH
32412: LD_INT 1
32414: EQUAL
32415: IFFALSE 32459
// temp_list = temp_list ^ FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , am_attack_buildings_area ] ] ) ;
32417: LD_ADDR_VAR 0 4
32421: PUSH
32422: LD_VAR 0 4
32426: PUSH
32427: LD_INT 81
32429: PUSH
32430: LD_VAR 0 1
32434: PUSH
32435: EMPTY
32436: LIST
32437: LIST
32438: PUSH
32439: LD_INT 95
32441: PUSH
32442: LD_INT 29
32444: PUSH
32445: EMPTY
32446: LIST
32447: LIST
32448: PUSH
32449: EMPTY
32450: LIST
32451: LIST
32452: PPUSH
32453: CALL_OW 69
32457: ADD
32458: ST_TO_ADDR
// if temp_list > 0 then
32459: LD_VAR 0 4
32463: PUSH
32464: LD_INT 0
32466: GREATER
32467: IFFALSE 32512
// begin temp_list_2 = DangerousUnits ( temp_list ) ;
32469: LD_ADDR_VAR 0 15
32473: PUSH
32474: LD_VAR 0 4
32478: PPUSH
32479: CALL 37769 0 1
32483: ST_TO_ADDR
// if temp_list_2 = 0 then
32484: LD_VAR 0 15
32488: PUSH
32489: LD_INT 0
32491: EQUAL
32492: IFFALSE 32512
// ComAttackUnit ( vehicles_list , temp_list [ 1 ] ) ;
32494: LD_VAR 0 7
32498: PPUSH
32499: LD_VAR 0 4
32503: PUSH
32504: LD_INT 1
32506: ARRAY
32507: PPUSH
32508: CALL_OW 115
// end ; end ; end else
32512: GO 32936
// begin area = GetBaseArea ( base ) ;
32514: LD_ADDR_VAR 0 13
32518: PUSH
32519: LD_VAR 0 12
32523: PPUSH
32524: CALL 15877 0 1
32528: ST_TO_ADDR
// if IsOk ( ai_depot [ base ] ) then
32529: LD_EXP 34
32533: PUSH
32534: LD_VAR 0 12
32538: ARRAY
32539: PPUSH
32540: CALL_OW 302
32544: IFFALSE 32936
// begin temp_list = ai_refuel_vehicles_list [ base ] ;
32546: LD_ADDR_VAR 0 4
32550: PUSH
32551: LD_EXP 55
32555: PUSH
32556: LD_VAR 0 12
32560: ARRAY
32561: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] diff ai_refuel_vehicles_list [ base ] do
32562: LD_ADDR_VAR 0 2
32566: PUSH
32567: LD_EXP 39
32571: PUSH
32572: LD_VAR 0 12
32576: ARRAY
32577: PUSH
32578: LD_EXP 55
32582: PUSH
32583: LD_VAR 0 12
32587: ARRAY
32588: DIFF
32589: PUSH
32590: FOR_IN
32591: IFFALSE 32641
// if GetFuel ( i ) < 70 and GetEngine ( i ) = engine_combustion then
32593: LD_VAR 0 2
32597: PPUSH
32598: CALL_OW 261
32602: PUSH
32603: LD_INT 70
32605: LESS
32606: PUSH
32607: LD_VAR 0 2
32611: PPUSH
32612: CALL_OW 262
32616: PUSH
32617: LD_INT 1
32619: EQUAL
32620: AND
32621: IFFALSE 32639
// temp_list = temp_list ^ i ;
32623: LD_ADDR_VAR 0 4
32627: PUSH
32628: LD_VAR 0 4
32632: PUSH
32633: LD_VAR 0 2
32637: ADD
32638: ST_TO_ADDR
32639: GO 32590
32641: POP
32642: 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 ] ) ;
32643: LD_ADDR_VAR 0 4
32647: PUSH
32648: LD_VAR 0 4
32652: PUSH
32653: LD_EXP 80
32657: PUSH
32658: LD_VAR 0 12
32662: ARRAY
32663: PUSH
32664: LD_EXP 88
32668: PUSH
32669: LD_VAR 0 12
32673: ARRAY
32674: ADD
32675: PUSH
32676: LD_EXP 78
32680: PUSH
32681: LD_VAR 0 12
32685: ARRAY
32686: ADD
32687: PUSH
32688: LD_EXP 79
32692: PUSH
32693: LD_VAR 0 12
32697: ARRAY
32698: ADD
32699: DIFF
32700: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
32701: LD_ADDR_EXP 55
32705: PUSH
32706: LD_EXP 55
32710: PPUSH
32711: LD_VAR 0 12
32715: PPUSH
32716: LD_VAR 0 4
32720: PPUSH
32721: CALL_OW 1
32725: ST_TO_ADDR
// temp_list = UnitFilter ( ai_refuel_vehicles_list [ base ] , [ [ f_empty ] , [ f_ok ] ] ) ;
32726: LD_ADDR_VAR 0 4
32730: PUSH
32731: LD_EXP 55
32735: PUSH
32736: LD_VAR 0 12
32740: ARRAY
32741: PPUSH
32742: LD_INT 58
32744: PUSH
32745: EMPTY
32746: LIST
32747: PUSH
32748: LD_INT 50
32750: PUSH
32751: EMPTY
32752: LIST
32753: PUSH
32754: EMPTY
32755: LIST
32756: LIST
32757: PPUSH
32758: CALL_OW 72
32762: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
32763: LD_ADDR_VAR 0 4
32767: PUSH
32768: LD_VAR 0 4
32772: PPUSH
32773: LD_VAR 0 3
32777: PPUSH
32778: LD_VAR 0 18
32782: PPUSH
32783: CALL 35266 0 3
32787: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
32788: LD_ADDR_VAR 0 3
32792: PUSH
32793: LD_VAR 0 4
32797: PUSH
32798: LD_INT 1
32800: ARRAY
32801: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
32802: LD_ADDR_VAR 0 18
32806: PUSH
32807: LD_VAR 0 4
32811: PUSH
32812: LD_INT 2
32814: ARRAY
32815: ST_TO_ADDR
// for i in ai_refuel_vehicles_list [ base ] do
32816: LD_ADDR_VAR 0 2
32820: PUSH
32821: LD_EXP 55
32825: PUSH
32826: LD_VAR 0 12
32830: ARRAY
32831: PUSH
32832: FOR_IN
32833: IFFALSE 32934
// begin if IsInArea ( i , area ) then
32835: LD_VAR 0 2
32839: PPUSH
32840: LD_VAR 0 13
32844: PPUSH
32845: CALL_OW 308
32849: IFFALSE 32893
// begin ComMoveUnit ( i , ai_depot [ base ] ) ;
32851: LD_VAR 0 2
32855: PPUSH
32856: LD_EXP 34
32860: PUSH
32861: LD_VAR 0 12
32865: ARRAY
32866: PPUSH
32867: CALL_OW 112
// AddComRefuel ( i , ai_depot [ base ] ) ;
32871: LD_VAR 0 2
32875: PPUSH
32876: LD_EXP 34
32880: PUSH
32881: LD_VAR 0 12
32885: ARRAY
32886: PPUSH
32887: CALL_OW 210
// end else
32891: GO 32932
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
32893: LD_VAR 0 2
32897: PPUSH
32898: LD_EXP 41
32902: PUSH
32903: LD_VAR 0 12
32907: ARRAY
32908: PUSH
32909: LD_INT 1
32911: ARRAY
32912: PPUSH
32913: LD_EXP 41
32917: PUSH
32918: LD_VAR 0 12
32922: ARRAY
32923: PUSH
32924: LD_INT 2
32926: ARRAY
32927: PPUSH
32928: CALL_OW 114
// end ;
32932: GO 32832
32934: POP
32935: POP
// end ; end ; free_parking_spots = [ ] ;
32936: LD_ADDR_VAR 0 10
32940: PUSH
32941: EMPTY
32942: ST_TO_ADDR
// temp_list_3 = [ ] ;
32943: LD_ADDR_VAR 0 5
32947: PUSH
32948: EMPTY
32949: ST_TO_ADDR
// for i in ai_vehicle_pullback_hexes [ base ] do
32950: LD_ADDR_VAR 0 2
32954: PUSH
32955: LD_EXP 42
32959: PUSH
32960: LD_VAR 0 12
32964: ARRAY
32965: PUSH
32966: FOR_IN
32967: IFFALSE 33274
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
32969: LD_ADDR_VAR 0 6
32973: PUSH
32974: LD_VAR 0 2
32978: PUSH
32979: LD_INT 1
32981: ARRAY
32982: PPUSH
32983: LD_VAR 0 2
32987: PUSH
32988: LD_INT 2
32990: ARRAY
32991: PPUSH
32992: CALL_OW 428
32996: ST_TO_ADDR
// if temp_unit in ai_vehicles_defend [ base ] then
32997: LD_VAR 0 6
33001: PUSH
33002: LD_EXP 39
33006: PUSH
33007: LD_VAR 0 12
33011: ARRAY
33012: IN
33013: IFFALSE 33148
// begin temp_list_3 = temp_list_3 ^ temp_unit ;
33015: LD_ADDR_VAR 0 5
33019: PUSH
33020: LD_VAR 0 5
33024: PUSH
33025: LD_VAR 0 6
33029: ADD
33030: ST_TO_ADDR
// if not under_attack and not temp_unit in ( ai_refuel_vehicles_list [ base ] ^ ai_vehicles_attack [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ^ ai_crane [ base ] ^ ai_cargo_bay [ base ] ) then
33031: LD_VAR 0 9
33035: NOT
33036: PUSH
33037: LD_VAR 0 6
33041: PUSH
33042: LD_EXP 55
33046: PUSH
33047: LD_VAR 0 12
33051: ARRAY
33052: PUSH
33053: LD_EXP 40
33057: PUSH
33058: LD_VAR 0 12
33062: ARRAY
33063: ADD
33064: PUSH
33065: LD_EXP 78
33069: PUSH
33070: LD_VAR 0 12
33074: ARRAY
33075: ADD
33076: PUSH
33077: LD_EXP 79
33081: PUSH
33082: LD_VAR 0 12
33086: ARRAY
33087: ADD
33088: PUSH
33089: LD_EXP 69
33093: PUSH
33094: LD_VAR 0 12
33098: ARRAY
33099: ADD
33100: PUSH
33101: LD_EXP 61
33105: PUSH
33106: LD_VAR 0 12
33110: ARRAY
33111: ADD
33112: IN
33113: NOT
33114: AND
33115: IFFALSE 33146
// begin if GetControl ( temp_unit ) = control_manual then
33117: LD_VAR 0 6
33121: PPUSH
33122: CALL_OW 263
33126: PUSH
33127: LD_INT 1
33129: EQUAL
33130: IFFALSE 33146
// begin ComExitVehicle ( IsDrivenBy ( temp_unit ) ) ;
33132: LD_VAR 0 6
33136: PPUSH
33137: CALL_OW 311
33141: PPUSH
33142: CALL_OW 121
// end ; end ; end else
33146: GO 33272
// if temp_unit = 0 or not ( GetType ( temp_unit ) = unit_building or ( GetType ( temp_unit ) = unit_vehicle and ( ( GetControl ( temp_unit ) = control_manual and IsDrivenBy ( temp_unit ) = 0 ) or ( GetControl ( temp_unit ) = control_remote and IsControledBy ( temp_unit ) = 0 ) ) ) ) then
33148: LD_VAR 0 6
33152: PUSH
33153: LD_INT 0
33155: EQUAL
33156: PUSH
33157: LD_VAR 0 6
33161: PPUSH
33162: CALL_OW 247
33166: PUSH
33167: LD_INT 3
33169: EQUAL
33170: PUSH
33171: LD_VAR 0 6
33175: PPUSH
33176: CALL_OW 247
33180: PUSH
33181: LD_INT 2
33183: EQUAL
33184: PUSH
33185: LD_VAR 0 6
33189: PPUSH
33190: CALL_OW 263
33194: PUSH
33195: LD_INT 1
33197: EQUAL
33198: PUSH
33199: LD_VAR 0 6
33203: PPUSH
33204: CALL_OW 311
33208: PUSH
33209: LD_INT 0
33211: EQUAL
33212: AND
33213: PUSH
33214: LD_VAR 0 6
33218: PPUSH
33219: CALL_OW 263
33223: PUSH
33224: LD_INT 2
33226: EQUAL
33227: PUSH
33228: LD_VAR 0 6
33232: PPUSH
33233: CALL_OW 312
33237: PUSH
33238: LD_INT 0
33240: EQUAL
33241: AND
33242: OR
33243: AND
33244: OR
33245: NOT
33246: OR
33247: IFFALSE 33272
// free_parking_spots = Insert ( free_parking_spots , 1 , i ) ;
33249: LD_ADDR_VAR 0 10
33253: PUSH
33254: LD_VAR 0 10
33258: PPUSH
33259: LD_INT 1
33261: PPUSH
33262: LD_VAR 0 2
33266: PPUSH
33267: CALL_OW 2
33271: ST_TO_ADDR
// end ;
33272: GO 32966
33274: POP
33275: POP
// if under_attack then
33276: LD_VAR 0 9
33280: IFFALSE 33690
// begin allowed_to_repair_vehicles = temp_list_3 ;
33282: LD_ADDR_VAR 0 8
33286: PUSH
33287: LD_VAR 0 5
33291: ST_TO_ADDR
// vehicles_list = UnitFilter ( ( ai_vehicles_being_repaired [ base ] ^ ai_retreating_vehicles_defend [ base ] ) diff temp_list_3 , [ f_ok ] ) ;
33292: LD_ADDR_VAR 0 7
33296: PUSH
33297: LD_EXP 88
33301: PUSH
33302: LD_VAR 0 12
33306: ARRAY
33307: PUSH
33308: LD_EXP 80
33312: PUSH
33313: LD_VAR 0 12
33317: ARRAY
33318: ADD
33319: PUSH
33320: LD_VAR 0 5
33324: DIFF
33325: PPUSH
33326: LD_INT 50
33328: PUSH
33329: EMPTY
33330: LIST
33331: PPUSH
33332: CALL_OW 72
33336: ST_TO_ADDR
// temp_list = [ ] ;
33337: LD_ADDR_VAR 0 4
33341: PUSH
33342: EMPTY
33343: ST_TO_ADDR
// temp_list_3 = temp_list_3 isect UnitFilter ( ai_vehicles_being_repaired [ base ] ^ ai_retreating_vehicles_defend [ base ] , [ f_ok ] ) ;
33344: LD_ADDR_VAR 0 5
33348: PUSH
33349: LD_VAR 0 5
33353: PUSH
33354: LD_EXP 88
33358: PUSH
33359: LD_VAR 0 12
33363: ARRAY
33364: PUSH
33365: LD_EXP 80
33369: PUSH
33370: LD_VAR 0 12
33374: ARRAY
33375: ADD
33376: PPUSH
33377: LD_INT 50
33379: PUSH
33380: EMPTY
33381: LIST
33382: PPUSH
33383: CALL_OW 72
33387: ISECT
33388: ST_TO_ADDR
// for i in temp_list_3 do
33389: LD_ADDR_VAR 0 2
33393: PUSH
33394: LD_VAR 0 5
33398: PUSH
33399: FOR_IN
33400: IFFALSE 33457
// if UnitShoot ( i ) > 0 then
33402: LD_VAR 0 2
33406: PPUSH
33407: CALL_OW 504
33411: PUSH
33412: LD_INT 0
33414: GREATER
33415: IFFALSE 33455
// if GetSide ( UnitShoot ( i ) ) <> side then
33417: LD_VAR 0 2
33421: PPUSH
33422: CALL_OW 504
33426: PPUSH
33427: CALL_OW 255
33431: PUSH
33432: LD_VAR 0 1
33436: NONEQUAL
33437: IFFALSE 33455
// temp_list = temp_list ^ i ;
33439: LD_ADDR_VAR 0 4
33443: PUSH
33444: LD_VAR 0 4
33448: PUSH
33449: LD_VAR 0 2
33453: ADD
33454: ST_TO_ADDR
33455: GO 33399
33457: POP
33458: POP
// for i in ai_mechanics_defend [ base ] do
33459: LD_ADDR_VAR 0 2
33463: PUSH
33464: LD_EXP 31
33468: PUSH
33469: LD_VAR 0 12
33473: ARRAY
33474: PUSH
33475: FOR_IN
33476: IFFALSE 33560
// if UnitShoot ( i ) > 0 then
33478: LD_VAR 0 2
33482: PPUSH
33483: CALL_OW 504
33487: PUSH
33488: LD_INT 0
33490: GREATER
33491: IFFALSE 33558
// if GetSide ( UnitShoot ( i ) ) <> side then
33493: LD_VAR 0 2
33497: PPUSH
33498: CALL_OW 504
33502: PPUSH
33503: CALL_OW 255
33507: PUSH
33508: LD_VAR 0 1
33512: NONEQUAL
33513: IFFALSE 33558
// temp_list = temp_list ^ UnitFilter ( temp_list_3 diff temp_list , [ f_dist , i , 5 ] ) ;
33515: LD_ADDR_VAR 0 4
33519: PUSH
33520: LD_VAR 0 4
33524: PUSH
33525: LD_VAR 0 5
33529: PUSH
33530: LD_VAR 0 4
33534: DIFF
33535: PPUSH
33536: LD_INT 91
33538: PUSH
33539: LD_VAR 0 2
33543: PUSH
33544: LD_INT 5
33546: PUSH
33547: EMPTY
33548: LIST
33549: LIST
33550: LIST
33551: PPUSH
33552: CALL_OW 72
33556: ADD
33557: ST_TO_ADDR
33558: GO 33475
33560: POP
33561: POP
// for i in temp_list_3 diff temp_list do
33562: LD_ADDR_VAR 0 2
33566: PUSH
33567: LD_VAR 0 5
33571: PUSH
33572: LD_VAR 0 4
33576: DIFF
33577: PUSH
33578: FOR_IN
33579: IFFALSE 33612
// if GetControl ( i ) = control_manual then
33581: LD_VAR 0 2
33585: PPUSH
33586: CALL_OW 263
33590: PUSH
33591: LD_INT 1
33593: EQUAL
33594: IFFALSE 33610
// begin ComExitVehicle ( IsDrivenBy ( i ) ) ;
33596: LD_VAR 0 2
33600: PPUSH
33601: CALL_OW 311
33605: PPUSH
33606: CALL_OW 121
// end ;
33610: GO 33578
33612: POP
33613: POP
// temp_list = FindDriverHelper ( UnitFilter ( temp_list , [ [ f_empty ] , [ f_ok ] ] ) , mechanics_list , vehicles_drivers ) ;
33614: LD_ADDR_VAR 0 4
33618: PUSH
33619: LD_VAR 0 4
33623: PPUSH
33624: LD_INT 58
33626: PUSH
33627: EMPTY
33628: LIST
33629: PUSH
33630: LD_INT 50
33632: PUSH
33633: EMPTY
33634: LIST
33635: PUSH
33636: EMPTY
33637: LIST
33638: LIST
33639: PPUSH
33640: CALL_OW 72
33644: PPUSH
33645: LD_VAR 0 3
33649: PPUSH
33650: LD_VAR 0 18
33654: PPUSH
33655: CALL 35266 0 3
33659: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
33660: LD_ADDR_VAR 0 3
33664: PUSH
33665: LD_VAR 0 4
33669: PUSH
33670: LD_INT 1
33672: ARRAY
33673: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
33674: LD_ADDR_VAR 0 18
33678: PUSH
33679: LD_VAR 0 4
33683: PUSH
33684: LD_INT 2
33686: ARRAY
33687: ST_TO_ADDR
// end else
33688: GO 33960
// begin allowed_to_repair_vehicles = ai_vehicles_defend [ base ] diff ( ai_refuel_vehicles_list [ base ] ^ ai_vehicles_having_been_moved [ base ] ^ ai_vehicle_being_moved [ base ] ) ;
33690: LD_ADDR_VAR 0 8
33694: PUSH
33695: LD_EXP 39
33699: PUSH
33700: LD_VAR 0 12
33704: ARRAY
33705: PUSH
33706: LD_EXP 55
33710: PUSH
33711: LD_VAR 0 12
33715: ARRAY
33716: PUSH
33717: LD_EXP 79
33721: PUSH
33722: LD_VAR 0 12
33726: ARRAY
33727: ADD
33728: PUSH
33729: LD_EXP 78
33733: PUSH
33734: LD_VAR 0 12
33738: ARRAY
33739: ADD
33740: DIFF
33741: ST_TO_ADDR
// i = 1 ;
33742: LD_ADDR_VAR 0 2
33746: PUSH
33747: LD_INT 1
33749: ST_TO_ADDR
// while i <= allowed_to_repair_vehicles do
33750: LD_VAR 0 2
33754: PUSH
33755: LD_VAR 0 8
33759: LESSEQUAL
33760: IFFALSE 33849
// begin if not IsOk ( allowed_to_repair_vehicles [ i ] ) and GetDistUnitArea ( allowed_to_repair_vehicles [ i ] , GetBaseArea ( base ) ) > 7 then
33762: LD_VAR 0 8
33766: PUSH
33767: LD_VAR 0 2
33771: ARRAY
33772: PPUSH
33773: CALL_OW 302
33777: NOT
33778: PUSH
33779: LD_VAR 0 8
33783: PUSH
33784: LD_VAR 0 2
33788: ARRAY
33789: PPUSH
33790: LD_VAR 0 12
33794: PPUSH
33795: CALL 15877 0 1
33799: PPUSH
33800: CALL_OW 299
33804: PUSH
33805: LD_INT 7
33807: GREATER
33808: AND
33809: IFFALSE 33833
// begin allowed_to_repair_vehicles = Delete ( allowed_to_repair_vehicles , i ) ;
33811: LD_ADDR_VAR 0 8
33815: PUSH
33816: LD_VAR 0 8
33820: PPUSH
33821: LD_VAR 0 2
33825: PPUSH
33826: CALL_OW 3
33830: ST_TO_ADDR
// continue ;
33831: GO 33750
// end ; i = i + 1 ;
33833: LD_ADDR_VAR 0 2
33837: PUSH
33838: LD_VAR 0 2
33842: PUSH
33843: LD_INT 1
33845: PLUS
33846: ST_TO_ADDR
// end ;
33847: GO 33750
// vehicles_list = UnitFilter ( allowed_to_repair_vehicles diff temp_list_3 , [ f_ok ] ) ;
33849: LD_ADDR_VAR 0 7
33853: PUSH
33854: LD_VAR 0 8
33858: PUSH
33859: LD_VAR 0 5
33863: DIFF
33864: PPUSH
33865: LD_INT 50
33867: PUSH
33868: EMPTY
33869: LIST
33870: PPUSH
33871: CALL_OW 72
33875: ST_TO_ADDR
// temp_list = UnitFilter ( vehicles_list , [ [ f_empty ] , [ f_ok ] ] ) ;
33876: LD_ADDR_VAR 0 4
33880: PUSH
33881: LD_VAR 0 7
33885: PPUSH
33886: LD_INT 58
33888: PUSH
33889: EMPTY
33890: LIST
33891: PUSH
33892: LD_INT 50
33894: PUSH
33895: EMPTY
33896: LIST
33897: PUSH
33898: EMPTY
33899: LIST
33900: LIST
33901: PPUSH
33902: CALL_OW 72
33906: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
33907: LD_ADDR_VAR 0 4
33911: PUSH
33912: LD_VAR 0 4
33916: PPUSH
33917: LD_VAR 0 3
33921: PPUSH
33922: LD_VAR 0 18
33926: PPUSH
33927: CALL 35266 0 3
33931: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
33932: LD_ADDR_VAR 0 3
33936: PUSH
33937: LD_VAR 0 4
33941: PUSH
33942: LD_INT 1
33944: ARRAY
33945: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
33946: LD_ADDR_VAR 0 18
33950: PUSH
33951: LD_VAR 0 4
33955: PUSH
33956: LD_INT 2
33958: ARRAY
33959: ST_TO_ADDR
// end ; for i in vehicles_list do
33960: LD_ADDR_VAR 0 2
33964: PUSH
33965: LD_VAR 0 7
33969: PUSH
33970: FOR_IN
33971: IFFALSE 34127
// if free_parking_spots > 0 then
33973: LD_VAR 0 10
33977: PUSH
33978: LD_INT 0
33980: GREATER
33981: IFFALSE 34123
// begin temp_list = [ ] ;
33983: LD_ADDR_VAR 0 4
33987: PUSH
33988: EMPTY
33989: ST_TO_ADDR
// for k in free_parking_spots do
33990: LD_ADDR_VAR 0 11
33994: PUSH
33995: LD_VAR 0 10
33999: PUSH
34000: FOR_IN
34001: IFFALSE 34044
// temp_list = temp_list ^ GetDistUnitXY ( i , k [ 1 ] , k [ 2 ] ) ;
34003: LD_ADDR_VAR 0 4
34007: PUSH
34008: LD_VAR 0 4
34012: PUSH
34013: LD_VAR 0 2
34017: PPUSH
34018: LD_VAR 0 11
34022: PUSH
34023: LD_INT 1
34025: ARRAY
34026: PPUSH
34027: LD_VAR 0 11
34031: PUSH
34032: LD_INT 2
34034: ARRAY
34035: PPUSH
34036: CALL_OW 297
34040: ADD
34041: ST_TO_ADDR
34042: GO 34000
34044: POP
34045: POP
// temp_list = WorstFromListByList ( free_parking_spots , temp_list ) ;
34046: LD_ADDR_VAR 0 4
34050: PUSH
34051: LD_VAR 0 10
34055: PPUSH
34056: LD_VAR 0 4
34060: PPUSH
34061: CALL_OW 78
34065: ST_TO_ADDR
// ComMoveXY ( i , temp_list [ 1 ] , temp_list [ 2 ] ) ;
34066: LD_VAR 0 2
34070: PPUSH
34071: LD_VAR 0 4
34075: PUSH
34076: LD_INT 1
34078: ARRAY
34079: PPUSH
34080: LD_VAR 0 4
34084: PUSH
34085: LD_INT 2
34087: ARRAY
34088: PPUSH
34089: CALL_OW 111
// AddComHold ( i ) ;
34093: LD_VAR 0 2
34097: PPUSH
34098: CALL_OW 200
// free_parking_spots = free_parking_spots diff [ temp_list ] ;
34102: LD_ADDR_VAR 0 10
34106: PUSH
34107: LD_VAR 0 10
34111: PUSH
34112: LD_VAR 0 4
34116: PUSH
34117: EMPTY
34118: LIST
34119: DIFF
34120: ST_TO_ADDR
// end else
34121: GO 34125
// break ;
34123: GO 34127
34125: GO 33970
34127: POP
34128: POP
// if not under_attack then
34129: LD_VAR 0 9
34133: NOT
34134: IFFALSE 34184
// allowed_to_repair_vehicles = allowed_to_repair_vehicles ^ UnitFilter ( ai_cargo_bay [ base ] diff 0 , [ f_inarea , GetBaseArea ( base ) ] ) ;
34136: LD_ADDR_VAR 0 8
34140: PUSH
34141: LD_VAR 0 8
34145: PUSH
34146: LD_EXP 61
34150: PUSH
34151: LD_VAR 0 12
34155: ARRAY
34156: PUSH
34157: LD_INT 0
34159: DIFF
34160: PPUSH
34161: LD_INT 95
34163: PUSH
34164: LD_VAR 0 12
34168: PPUSH
34169: CALL 15877 0 1
34173: PUSH
34174: EMPTY
34175: LIST
34176: LIST
34177: PPUSH
34178: CALL_OW 72
34182: ADD
34183: ST_TO_ADDR
// allowed_to_repair_vehicles = UnitFilter ( allowed_to_repair_vehicles , [ f_not , [ f_lives , 1000 ] ] ) ;
34184: LD_ADDR_VAR 0 8
34188: PUSH
34189: LD_VAR 0 8
34193: PPUSH
34194: LD_INT 3
34196: PUSH
34197: LD_INT 24
34199: PUSH
34200: LD_INT 1000
34202: PUSH
34203: EMPTY
34204: LIST
34205: LIST
34206: PUSH
34207: EMPTY
34208: LIST
34209: LIST
34210: PPUSH
34211: CALL_OW 72
34215: ST_TO_ADDR
// if ai_crane [ base ] > 0 then
34216: LD_EXP 69
34220: PUSH
34221: LD_VAR 0 12
34225: ARRAY
34226: PUSH
34227: LD_INT 0
34229: GREATER
34230: IFFALSE 34821
// begin k = false ;
34232: LD_ADDR_VAR 0 11
34236: PUSH
34237: LD_INT 0
34239: 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
34240: LD_EXP 84
34244: PUSH
34245: LD_VAR 0 12
34249: ARRAY
34250: PUSH
34251: LD_EXP 69
34255: PUSH
34256: LD_VAR 0 12
34260: ARRAY
34261: PPUSH
34262: LD_EXP 41
34266: PUSH
34267: LD_VAR 0 12
34271: ARRAY
34272: PUSH
34273: LD_INT 1
34275: ARRAY
34276: PPUSH
34277: LD_EXP 41
34281: PUSH
34282: LD_VAR 0 12
34286: ARRAY
34287: PUSH
34288: LD_INT 2
34290: ARRAY
34291: PPUSH
34292: CALL_OW 297
34296: PUSH
34297: LD_INT 6
34299: LESSEQUAL
34300: PUSH
34301: LD_EXP 69
34305: PUSH
34306: LD_VAR 0 12
34310: ARRAY
34311: PPUSH
34312: LD_VAR 0 13
34316: PPUSH
34317: CALL_OW 308
34321: PUSH
34322: LD_VAR 0 9
34326: NOT
34327: AND
34328: OR
34329: AND
34330: IFFALSE 34601
// begin if GetLives ( ai_crane [ base ] ) < 1000 then
34332: LD_EXP 69
34336: PUSH
34337: LD_VAR 0 12
34341: ARRAY
34342: PPUSH
34343: CALL_OW 256
34347: PUSH
34348: LD_INT 1000
34350: LESS
34351: IFFALSE 34375
// allowed_to_repair_vehicles = ai_crane [ base ] ^ allowed_to_repair_vehicles ;
34353: LD_ADDR_VAR 0 8
34357: PUSH
34358: LD_EXP 69
34362: PUSH
34363: LD_VAR 0 12
34367: ARRAY
34368: PUSH
34369: LD_VAR 0 8
34373: ADD
34374: ST_TO_ADDR
// if ai_crane_driver [ base ] > 0 then
34375: LD_EXP 85
34379: PUSH
34380: LD_VAR 0 12
34384: ARRAY
34385: PUSH
34386: LD_INT 0
34388: GREATER
34389: IFFALSE 34599
// begin if GetLives ( ai_crane_driver [ base ] ) = 1000 then
34391: LD_EXP 85
34395: PUSH
34396: LD_VAR 0 12
34400: ARRAY
34401: PPUSH
34402: CALL_OW 256
34406: PUSH
34407: LD_INT 1000
34409: EQUAL
34410: IFFALSE 34436
// begin mechanics_list = mechanics_list ^ ai_crane_driver [ base ] ;
34412: LD_ADDR_VAR 0 3
34416: PUSH
34417: LD_VAR 0 3
34421: PUSH
34422: LD_EXP 85
34426: PUSH
34427: LD_VAR 0 12
34431: ARRAY
34432: ADD
34433: ST_TO_ADDR
// end else
34434: GO 34599
// begin if GetDistUnitXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) <= 6 then
34436: LD_EXP 69
34440: PUSH
34441: LD_VAR 0 12
34445: ARRAY
34446: PPUSH
34447: LD_EXP 41
34451: PUSH
34452: LD_VAR 0 12
34456: ARRAY
34457: PUSH
34458: LD_INT 1
34460: ARRAY
34461: PPUSH
34462: LD_EXP 41
34466: PUSH
34467: LD_VAR 0 12
34471: ARRAY
34472: PUSH
34473: LD_INT 2
34475: ARRAY
34476: PPUSH
34477: CALL_OW 297
34481: PUSH
34482: LD_INT 6
34484: LESSEQUAL
34485: IFFALSE 34591
// begin if GetHumansOutOfUnits ( [ ai_crane_driver [ base ] ] ) > 0 and not ai_crane_driver [ base ] in ai_heal_these_humans [ base ] then
34487: LD_EXP 85
34491: PUSH
34492: LD_VAR 0 12
34496: ARRAY
34497: PUSH
34498: EMPTY
34499: LIST
34500: PPUSH
34501: CALL 28688 0 1
34505: PUSH
34506: LD_INT 0
34508: GREATER
34509: PUSH
34510: LD_EXP 85
34514: PUSH
34515: LD_VAR 0 12
34519: ARRAY
34520: PUSH
34521: LD_EXP 44
34525: PUSH
34526: LD_VAR 0 12
34530: ARRAY
34531: IN
34532: NOT
34533: AND
34534: IFFALSE 34589
// begin temp_list = ai_heal_these_humans [ base ] ^ ai_crane_driver [ base ] ;
34536: LD_ADDR_VAR 0 4
34540: PUSH
34541: LD_EXP 44
34545: PUSH
34546: LD_VAR 0 12
34550: ARRAY
34551: PUSH
34552: LD_EXP 85
34556: PUSH
34557: LD_VAR 0 12
34561: ARRAY
34562: ADD
34563: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
34564: LD_ADDR_EXP 44
34568: PUSH
34569: LD_EXP 44
34573: PPUSH
34574: LD_VAR 0 12
34578: PPUSH
34579: LD_VAR 0 4
34583: PPUSH
34584: CALL_OW 1
34588: ST_TO_ADDR
// end ; end else
34589: GO 34599
// k = true ;
34591: LD_ADDR_VAR 0 11
34595: PUSH
34596: LD_INT 1
34598: ST_TO_ADDR
// end ; end ; end else
34599: GO 34609
// k = true ;
34601: LD_ADDR_VAR 0 11
34605: PUSH
34606: LD_INT 1
34608: ST_TO_ADDR
// if k then
34609: LD_VAR 0 11
34613: IFFALSE 34821
// 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
34615: LD_EXP 69
34619: PUSH
34620: LD_VAR 0 12
34624: ARRAY
34625: PPUSH
34626: CALL_OW 302
34630: PUSH
34631: LD_EXP 85
34635: PUSH
34636: LD_VAR 0 12
34640: ARRAY
34641: PUSH
34642: LD_INT 0
34644: GREATER
34645: AND
34646: PUSH
34647: LD_EXP 85
34651: PUSH
34652: LD_VAR 0 12
34656: ARRAY
34657: PUSH
34658: LD_VAR 0 3
34662: IN
34663: NOT
34664: AND
34665: PUSH
34666: LD_EXP 85
34670: PUSH
34671: LD_VAR 0 12
34675: ARRAY
34676: PUSH
34677: LD_EXP 44
34681: PUSH
34682: LD_VAR 0 12
34686: ARRAY
34687: IN
34688: NOT
34689: AND
34690: IFFALSE 34821
// begin if IsInUnit ( ai_crane_driver [ base ] ) <> ai_crane [ base ] then
34692: LD_EXP 85
34696: PUSH
34697: LD_VAR 0 12
34701: ARRAY
34702: PPUSH
34703: CALL_OW 310
34707: PUSH
34708: LD_EXP 69
34712: PUSH
34713: LD_VAR 0 12
34717: ARRAY
34718: NONEQUAL
34719: IFFALSE 34821
// case GetType ( IsInUnit ( ai_crane_driver [ base ] ) ) of unit_building :
34721: LD_EXP 85
34725: PUSH
34726: LD_VAR 0 12
34730: ARRAY
34731: PPUSH
34732: CALL_OW 310
34736: PPUSH
34737: CALL_OW 247
34741: PUSH
34742: LD_INT 3
34744: DOUBLE
34745: EQUAL
34746: IFTRUE 34750
34748: GO 34768
34750: POP
// ComExitBuilding ( ai_crane_driver [ base ] ) ; unit_vehicle :
34751: LD_EXP 85
34755: PUSH
34756: LD_VAR 0 12
34760: ARRAY
34761: PPUSH
34762: CALL_OW 122
34766: GO 34821
34768: LD_INT 2
34770: DOUBLE
34771: EQUAL
34772: IFTRUE 34776
34774: GO 34794
34776: POP
// ComExitVehicle ( ai_crane_driver [ base ] ) ; else
34777: LD_EXP 85
34781: PUSH
34782: LD_VAR 0 12
34786: ARRAY
34787: PPUSH
34788: CALL_OW 121
34792: GO 34821
34794: POP
// ComEnterUnit ( ai_crane_driver [ base ] , ai_crane [ base ] ) ; end ;
34795: LD_EXP 85
34799: PUSH
34800: LD_VAR 0 12
34804: ARRAY
34805: PPUSH
34806: LD_EXP 69
34810: PUSH
34811: LD_VAR 0 12
34815: ARRAY
34816: PPUSH
34817: CALL_OW 120
// end ; end ; end ; if mechanics_list = 0 then
34821: LD_VAR 0 3
34825: PUSH
34826: LD_INT 0
34828: EQUAL
34829: IFFALSE 34833
// continue ;
34831: GO 30905
// allowed_to_repair_vehicles = allowed_to_repair_vehicles diff ai_vehicles_being_repaired [ base ] ;
34833: LD_ADDR_VAR 0 8
34837: PUSH
34838: LD_VAR 0 8
34842: PUSH
34843: LD_EXP 88
34847: PUSH
34848: LD_VAR 0 12
34852: ARRAY
34853: DIFF
34854: ST_TO_ADDR
// if allowed_to_repair_vehicles > 0 or ai_vehicles_being_repaired [ base ] > 0 then
34855: LD_VAR 0 8
34859: PUSH
34860: LD_INT 0
34862: GREATER
34863: PUSH
34864: LD_EXP 88
34868: PUSH
34869: LD_VAR 0 12
34873: ARRAY
34874: PUSH
34875: LD_INT 0
34877: GREATER
34878: OR
34879: IFFALSE 35184
// begin if allowed_to_repair_vehicles > 0 then
34881: LD_VAR 0 8
34885: PUSH
34886: LD_INT 0
34888: GREATER
34889: IFFALSE 35153
// begin k = false ;
34891: LD_ADDR_VAR 0 11
34895: PUSH
34896: LD_INT 0
34898: ST_TO_ADDR
// if ai_vehicles_being_repaired [ base ] = 0 then
34899: LD_EXP 88
34903: PUSH
34904: LD_VAR 0 12
34908: ARRAY
34909: PUSH
34910: LD_INT 0
34912: EQUAL
34913: IFFALSE 34925
// k = true else
34915: LD_ADDR_VAR 0 11
34919: PUSH
34920: LD_INT 1
34922: ST_TO_ADDR
34923: GO 34988
// if IsOk ( ai_vehicles_being_repaired [ base ] [ 1 ] ) then
34925: LD_EXP 88
34929: PUSH
34930: LD_VAR 0 12
34934: ARRAY
34935: PUSH
34936: LD_INT 1
34938: ARRAY
34939: PPUSH
34940: CALL_OW 302
34944: IFFALSE 34988
// begin allowed_to_repair_vehicles = UnitFilter ( allowed_to_repair_vehicles , [ f_not , [ f_ok ] ] ) ;
34946: LD_ADDR_VAR 0 8
34950: PUSH
34951: LD_VAR 0 8
34955: PPUSH
34956: LD_INT 3
34958: PUSH
34959: LD_INT 50
34961: PUSH
34962: EMPTY
34963: LIST
34964: PUSH
34965: EMPTY
34966: LIST
34967: LIST
34968: PPUSH
34969: CALL_OW 72
34973: ST_TO_ADDR
// k := allowed_to_repair_vehicles > 0 ;
34974: LD_ADDR_VAR 0 11
34978: PUSH
34979: LD_VAR 0 8
34983: PUSH
34984: LD_INT 0
34986: GREATER
34987: ST_TO_ADDR
// end ; if k then
34988: LD_VAR 0 11
34992: IFFALSE 35153
// begin temp_list = [ ] ;
34994: LD_ADDR_VAR 0 4
34998: PUSH
34999: EMPTY
35000: ST_TO_ADDR
// for i in allowed_to_repair_vehicles do
35001: LD_ADDR_VAR 0 2
35005: PUSH
35006: LD_VAR 0 8
35010: PUSH
35011: FOR_IN
35012: IFFALSE 35037
// temp_list = temp_list ^ GetLives ( i ) ;
35014: LD_ADDR_VAR 0 4
35018: PUSH
35019: LD_VAR 0 4
35023: PUSH
35024: LD_VAR 0 2
35028: PPUSH
35029: CALL_OW 256
35033: ADD
35034: ST_TO_ADDR
35035: GO 35011
35037: POP
35038: POP
// temp_unit = WorstFromListByList ( allowed_to_repair_vehicles , temp_list ) ;
35039: LD_ADDR_VAR 0 6
35043: PUSH
35044: LD_VAR 0 8
35048: PPUSH
35049: LD_VAR 0 4
35053: PPUSH
35054: CALL_OW 78
35058: ST_TO_ADDR
// temp_list = temp_unit ^ ai_vehicles_being_repaired [ base ] ;
35059: LD_ADDR_VAR 0 4
35063: PUSH
35064: LD_VAR 0 6
35068: PUSH
35069: LD_EXP 88
35073: PUSH
35074: LD_VAR 0 12
35078: ARRAY
35079: ADD
35080: ST_TO_ADDR
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
35081: LD_ADDR_EXP 88
35085: PUSH
35086: LD_EXP 88
35090: PPUSH
35091: LD_VAR 0 12
35095: PPUSH
35096: LD_VAR 0 4
35100: PPUSH
35101: CALL_OW 1
35105: ST_TO_ADDR
// temp_list = ai_retreating_vehicles_defend [ base ] diff temp_unit ;
35106: LD_ADDR_VAR 0 4
35110: PUSH
35111: LD_EXP 80
35115: PUSH
35116: LD_VAR 0 12
35120: ARRAY
35121: PUSH
35122: LD_VAR 0 6
35126: DIFF
35127: ST_TO_ADDR
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
35128: LD_ADDR_EXP 80
35132: PUSH
35133: LD_EXP 80
35137: PPUSH
35138: LD_VAR 0 12
35142: PPUSH
35143: LD_VAR 0 4
35147: PPUSH
35148: CALL_OW 1
35152: ST_TO_ADDR
// end ; end ; ComRepairVehicle ( GetHumansOutOfUnits ( mechanics_list ) , ai_vehicles_being_repaired [ base ] [ 1 ] ) ;
35153: LD_VAR 0 3
35157: PPUSH
35158: CALL 28688 0 1
35162: PPUSH
35163: LD_EXP 88
35167: PUSH
35168: LD_VAR 0 12
35172: ARRAY
35173: PUSH
35174: LD_INT 1
35176: ARRAY
35177: PPUSH
35178: CALL_OW 129
// end else
35182: GO 35255
// begin DistributeHumansToBuildings ( base , mechanics_list , UnitFilter ( ai_facts [ base ] diff sib_rocket_factory , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
35184: LD_VAR 0 12
35188: PPUSH
35189: LD_VAR 0 3
35193: PPUSH
35194: LD_EXP 48
35198: PUSH
35199: LD_VAR 0 12
35203: ARRAY
35204: PUSH
35205: LD_EXP 91
35209: DIFF
35210: PPUSH
35211: LD_INT 50
35213: PUSH
35214: EMPTY
35215: LIST
35216: PUSH
35217: LD_INT 3
35219: PUSH
35220: LD_INT 57
35222: PUSH
35223: EMPTY
35224: LIST
35225: PUSH
35226: EMPTY
35227: LIST
35228: LIST
35229: PUSH
35230: EMPTY
35231: LIST
35232: LIST
35233: PPUSH
35234: CALL_OW 72
35238: PPUSH
35239: LD_INT 3
35241: PPUSH
35242: LD_INT 6
35244: PPUSH
35245: LD_INT 1
35247: PPUSH
35248: LD_INT 0
35250: PPUSH
35251: CALL 18828 0 7
// end ; end ;
35255: GO 30905
35257: POP
35258: POP
// until false ;
35259: LD_INT 0
35261: IFFALSE 30888
// end ;
35263: PPOPN 18
35265: END
// function FindDriverHelper ( vehicles_list , mechanics_list , vehicles_drivers ) ; var i , k , temp_unit ; begin
35266: LD_INT 0
35268: PPUSH
35269: PPUSH
35270: PPUSH
35271: PPUSH
// for i in vehicles_list do
35272: LD_ADDR_VAR 0 5
35276: PUSH
35277: LD_VAR 0 1
35281: PUSH
35282: FOR_IN
35283: IFFALSE 35551
// begin if mechanics_list = 0 then
35285: LD_VAR 0 2
35289: PUSH
35290: LD_INT 0
35292: EQUAL
35293: IFFALSE 35297
// break ;
35295: GO 35551
// k = false ;
35297: LD_ADDR_VAR 0 6
35301: PUSH
35302: LD_INT 0
35304: ST_TO_ADDR
// if vehicles_drivers < i then
35305: LD_VAR 0 3
35309: PUSH
35310: LD_VAR 0 5
35314: LESS
35315: IFFALSE 35327
// k = true else
35317: LD_ADDR_VAR 0 6
35321: PUSH
35322: LD_INT 1
35324: ST_TO_ADDR
35325: GO 35354
// if not vehicles_drivers [ i ] in mechanics_list then
35327: LD_VAR 0 3
35331: PUSH
35332: LD_VAR 0 5
35336: ARRAY
35337: PUSH
35338: LD_VAR 0 2
35342: IN
35343: NOT
35344: IFFALSE 35354
// k = true ;
35346: LD_ADDR_VAR 0 6
35350: PUSH
35351: LD_INT 1
35353: ST_TO_ADDR
// if k then
35354: LD_VAR 0 6
35358: IFFALSE 35395
// vehicles_drivers = Replace ( vehicles_drivers , i , AllNearestUnitToUnit ( mechanics_list , i ) ) ;
35360: LD_ADDR_VAR 0 3
35364: PUSH
35365: LD_VAR 0 3
35369: PPUSH
35370: LD_VAR 0 5
35374: PPUSH
35375: LD_VAR 0 2
35379: PPUSH
35380: LD_VAR 0 5
35384: PPUSH
35385: CALL_OW 75
35389: PPUSH
35390: CALL_OW 1
35394: ST_TO_ADDR
// if vehicles_drivers [ i ] > 0 then
35395: LD_VAR 0 3
35399: PUSH
35400: LD_VAR 0 5
35404: ARRAY
35405: PUSH
35406: LD_INT 0
35408: GREATER
35409: IFFALSE 35549
// begin temp_unit = IsInUnit ( vehicles_drivers [ i ] ) ;
35411: LD_ADDR_VAR 0 7
35415: PUSH
35416: LD_VAR 0 3
35420: PUSH
35421: LD_VAR 0 5
35425: ARRAY
35426: PPUSH
35427: CALL_OW 310
35431: ST_TO_ADDR
// if temp_unit <> i then
35432: LD_VAR 0 7
35436: PUSH
35437: LD_VAR 0 5
35441: NONEQUAL
35442: IFFALSE 35527
// case GetType ( temp_unit ) of unit_vehicle :
35444: LD_VAR 0 7
35448: PPUSH
35449: CALL_OW 247
35453: PUSH
35454: LD_INT 2
35456: DOUBLE
35457: EQUAL
35458: IFTRUE 35462
35460: GO 35480
35462: POP
// ComExitVehicle ( vehicles_drivers [ i ] ) ; unit_building :
35463: LD_VAR 0 3
35467: PUSH
35468: LD_VAR 0 5
35472: ARRAY
35473: PPUSH
35474: CALL_OW 121
35478: GO 35527
35480: LD_INT 3
35482: DOUBLE
35483: EQUAL
35484: IFTRUE 35488
35486: GO 35506
35488: POP
// ComExitBuilding ( vehicles_drivers [ i ] ) ; else
35489: LD_VAR 0 3
35493: PUSH
35494: LD_VAR 0 5
35498: ARRAY
35499: PPUSH
35500: CALL_OW 122
35504: GO 35527
35506: POP
// ComEnterUnit ( vehicles_drivers [ i ] , i ) ; end ;
35507: LD_VAR 0 3
35511: PUSH
35512: LD_VAR 0 5
35516: ARRAY
35517: PPUSH
35518: LD_VAR 0 5
35522: PPUSH
35523: CALL_OW 120
// mechanics_list = mechanics_list diff vehicles_drivers [ i ] ;
35527: LD_ADDR_VAR 0 2
35531: PUSH
35532: LD_VAR 0 2
35536: PUSH
35537: LD_VAR 0 3
35541: PUSH
35542: LD_VAR 0 5
35546: ARRAY
35547: DIFF
35548: ST_TO_ADDR
// end ; end ;
35549: GO 35282
35551: POP
35552: POP
// result = [ mechanics_list , vehicles_drivers ] ;
35553: LD_ADDR_VAR 0 4
35557: PUSH
35558: LD_VAR 0 2
35562: PUSH
35563: LD_VAR 0 3
35567: PUSH
35568: EMPTY
35569: LIST
35570: LIST
35571: ST_TO_ADDR
// end ;
35572: LD_VAR 0 4
35576: RET
// function FindBestCraneDriver ( base ) ; var i , temp_list ; begin
35577: LD_INT 0
35579: PPUSH
35580: PPUSH
35581: PPUSH
// if ai_mechanics_defend [ base ] = 0 then
35582: LD_EXP 31
35586: PUSH
35587: LD_VAR 0 1
35591: ARRAY
35592: PUSH
35593: LD_INT 0
35595: EQUAL
35596: IFFALSE 35608
// begin result = 0 ;
35598: LD_ADDR_VAR 0 2
35602: PUSH
35603: LD_INT 0
35605: ST_TO_ADDR
// exit ;
35606: GO 35702
// end ; temp_list = [ ] ;
35608: LD_ADDR_VAR 0 4
35612: PUSH
35613: EMPTY
35614: ST_TO_ADDR
// for i in ai_mechanics_defend [ base ] do
35615: LD_ADDR_VAR 0 3
35619: PUSH
35620: LD_EXP 31
35624: PUSH
35625: LD_VAR 0 1
35629: ARRAY
35630: PUSH
35631: FOR_IN
35632: IFFALSE 35674
// temp_list = temp_list ^ ( GetSkill ( i , skill_engineering ) + GetSkill ( i , skill_mechanical ) ) ;
35634: LD_ADDR_VAR 0 4
35638: PUSH
35639: LD_VAR 0 4
35643: PUSH
35644: LD_VAR 0 3
35648: PPUSH
35649: LD_INT 2
35651: PPUSH
35652: CALL_OW 259
35656: PUSH
35657: LD_VAR 0 3
35661: PPUSH
35662: LD_INT 3
35664: PPUSH
35665: CALL_OW 259
35669: PLUS
35670: ADD
35671: ST_TO_ADDR
35672: GO 35631
35674: POP
35675: POP
// result = BestFromListByList ( ai_mechanics_defend [ base ] , temp_list ) ;
35676: LD_ADDR_VAR 0 2
35680: PUSH
35681: LD_EXP 31
35685: PUSH
35686: LD_VAR 0 1
35690: ARRAY
35691: PPUSH
35692: LD_VAR 0 4
35696: PPUSH
35697: CALL_OW 79
35701: ST_TO_ADDR
// end ;
35702: LD_VAR 0 2
35706: RET
// function MaxNumWarVehicles ( base ) ; begin
35707: LD_INT 0
35709: PPUSH
// case base of 1 :
35710: LD_VAR 0 1
35714: PUSH
35715: LD_INT 1
35717: DOUBLE
35718: EQUAL
35719: IFTRUE 35723
35721: GO 35848
35723: POP
// result = WorstFromListByList ( [ ( ai_mechanics_defend [ base ] diff ai_crane_driver [ base ] ) + 0 , difficulty + 1 , ai_vehicle_pullback_hexes [ base ] + 0 ] , [ ( ai_mechanics_defend [ base ] diff ai_crane_driver [ base ] ) + 0 , difficulty + 1 , ai_vehicle_pullback_hexes [ base ] + 0 ] ) ; 2 :
35724: LD_ADDR_VAR 0 2
35728: PUSH
35729: LD_EXP 31
35733: PUSH
35734: LD_VAR 0 1
35738: ARRAY
35739: PUSH
35740: LD_EXP 85
35744: PUSH
35745: LD_VAR 0 1
35749: ARRAY
35750: DIFF
35751: PUSH
35752: LD_INT 0
35754: PLUS
35755: PUSH
35756: LD_OWVAR 67
35760: PUSH
35761: LD_INT 1
35763: PLUS
35764: PUSH
35765: LD_EXP 42
35769: PUSH
35770: LD_VAR 0 1
35774: ARRAY
35775: PUSH
35776: LD_INT 0
35778: PLUS
35779: PUSH
35780: EMPTY
35781: LIST
35782: LIST
35783: LIST
35784: PPUSH
35785: LD_EXP 31
35789: PUSH
35790: LD_VAR 0 1
35794: ARRAY
35795: PUSH
35796: LD_EXP 85
35800: PUSH
35801: LD_VAR 0 1
35805: ARRAY
35806: DIFF
35807: PUSH
35808: LD_INT 0
35810: PLUS
35811: PUSH
35812: LD_OWVAR 67
35816: PUSH
35817: LD_INT 1
35819: PLUS
35820: PUSH
35821: LD_EXP 42
35825: PUSH
35826: LD_VAR 0 1
35830: ARRAY
35831: PUSH
35832: LD_INT 0
35834: PLUS
35835: PUSH
35836: EMPTY
35837: LIST
35838: LIST
35839: LIST
35840: PPUSH
35841: CALL_OW 78
35845: ST_TO_ADDR
35846: GO 35868
35848: LD_INT 2
35850: DOUBLE
35851: EQUAL
35852: IFTRUE 35856
35854: GO 35867
35856: POP
// result = 0 ; end ;
35857: LD_ADDR_VAR 0 2
35861: PUSH
35862: LD_INT 0
35864: ST_TO_ADDR
35865: GO 35868
35867: POP
// end ;
35868: LD_VAR 0 2
35872: RET
// every 0 0$1.1 do var base , i , temp_list , veh , mechanics_list ;
35873: GO 35875
35875: DISABLE
35876: LD_INT 0
35878: PPUSH
35879: PPUSH
35880: PPUSH
35881: PPUSH
35882: PPUSH
// begin repeat wait ( 0 0$1 ) ;
35883: LD_INT 35
35885: PPUSH
35886: CALL_OW 67
// for base in ai_bases do
35890: LD_ADDR_VAR 0 1
35894: PUSH
35895: LD_EXP 59
35899: PUSH
35900: FOR_IN
35901: IFFALSE 36435
// begin if ai_sib_bomb_mechanics [ base ] = 0 then
35903: LD_EXP 90
35907: PUSH
35908: LD_VAR 0 1
35912: ARRAY
35913: PUSH
35914: LD_INT 0
35916: EQUAL
35917: IFFALSE 35921
// continue ;
35919: GO 35900
// mechanics_list = ai_sib_bomb_mechanics [ base ] diff ai_heal_these_humans [ base ] ;
35921: LD_ADDR_VAR 0 5
35925: PUSH
35926: LD_EXP 90
35930: PUSH
35931: LD_VAR 0 1
35935: ARRAY
35936: PUSH
35937: LD_EXP 44
35941: PUSH
35942: LD_VAR 0 1
35946: ARRAY
35947: DIFF
35948: ST_TO_ADDR
// for i in mechanics_list do
35949: LD_ADDR_VAR 0 2
35953: PUSH
35954: LD_VAR 0 5
35958: PUSH
35959: FOR_IN
35960: IFFALSE 36227
// begin veh = IsInUnit ( i ) ;
35962: LD_ADDR_VAR 0 4
35966: PUSH
35967: LD_VAR 0 2
35971: PPUSH
35972: CALL_OW 310
35976: ST_TO_ADDR
// if veh > 0 and GetType ( veh ) = unit_vehicle and GetWeapon ( veh ) = us_siberium_rocket then
35977: LD_VAR 0 4
35981: PUSH
35982: LD_INT 0
35984: GREATER
35985: PUSH
35986: LD_VAR 0 4
35990: PPUSH
35991: CALL_OW 247
35995: PUSH
35996: LD_INT 2
35998: EQUAL
35999: AND
36000: PUSH
36001: LD_VAR 0 4
36005: PPUSH
36006: CALL_OW 264
36010: PUSH
36011: LD_INT 8
36013: EQUAL
36014: AND
36015: IFFALSE 36225
// begin mechanics_list = mechanics_list diff i ;
36017: LD_ADDR_VAR 0 5
36021: PUSH
36022: LD_VAR 0 5
36026: PUSH
36027: LD_VAR 0 2
36031: DIFF
36032: ST_TO_ADDR
// ExclusiveOn ;
36033: CALL_OW 4
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
36037: LD_ADDR_VAR 0 3
36041: PUSH
36042: LD_INT 22
36044: PUSH
36045: LD_EXP 2
36049: PUSH
36050: EMPTY
36051: LIST
36052: LIST
36053: PUSH
36054: LD_INT 2
36056: PUSH
36057: LD_INT 30
36059: PUSH
36060: LD_INT 0
36062: PUSH
36063: EMPTY
36064: LIST
36065: LIST
36066: PUSH
36067: LD_INT 30
36069: PUSH
36070: LD_INT 1
36072: PUSH
36073: EMPTY
36074: LIST
36075: LIST
36076: PUSH
36077: EMPTY
36078: LIST
36079: LIST
36080: LIST
36081: PUSH
36082: EMPTY
36083: LIST
36084: LIST
36085: PPUSH
36086: CALL_OW 69
36090: ST_TO_ADDR
// if temp_list = 0 and IsLive ( Heike ) then
36091: LD_VAR 0 3
36095: PUSH
36096: LD_INT 0
36098: EQUAL
36099: PUSH
36100: LD_EXP 7
36104: PPUSH
36105: CALL_OW 300
36109: AND
36110: IFFALSE 36125
// temp_list = [ Heike ] ;
36112: LD_ADDR_VAR 0 3
36116: PUSH
36117: LD_EXP 7
36121: PUSH
36122: EMPTY
36123: LIST
36124: ST_TO_ADDR
// if temp_list > 0 then
36125: LD_VAR 0 3
36129: PUSH
36130: LD_INT 0
36132: GREATER
36133: IFFALSE 36199
// begin CenterNowOnXY ( GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
36135: LD_VAR 0 3
36139: PUSH
36140: LD_INT 1
36142: ARRAY
36143: PPUSH
36144: CALL_OW 250
36148: PPUSH
36149: LD_VAR 0 3
36153: PUSH
36154: LD_INT 1
36156: ARRAY
36157: PPUSH
36158: CALL_OW 251
36162: PPUSH
36163: CALL_OW 86
// SendSiberiteRocket ( GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
36167: LD_VAR 0 3
36171: PUSH
36172: LD_INT 1
36174: ARRAY
36175: PPUSH
36176: CALL_OW 250
36180: PPUSH
36181: LD_VAR 0 3
36185: PUSH
36186: LD_INT 1
36188: ARRAY
36189: PPUSH
36190: CALL_OW 251
36194: PPUSH
36195: CALL_OW 429
// end ; sib_rocket_fired = true ;
36199: LD_ADDR_EXP 117
36203: PUSH
36204: LD_INT 1
36206: ST_TO_ADDR
// wait ( 0 0$8 ) ;
36207: LD_INT 280
36209: PPUSH
36210: CALL_OW 67
// YouLost ( SibRocketFired ) ;
36214: LD_STRING SibRocketFired
36216: PPUSH
36217: CALL_OW 104
// ExclusiveOff ;
36221: CALL_OW 5
// end ; end ;
36225: GO 35959
36227: POP
36228: POP
// temp_list = ai_heal_these_humans [ base ] ;
36229: LD_ADDR_VAR 0 3
36233: PUSH
36234: LD_EXP 44
36238: PUSH
36239: LD_VAR 0 1
36243: ARRAY
36244: ST_TO_ADDR
// i = 1 ;
36245: LD_ADDR_VAR 0 2
36249: PUSH
36250: LD_INT 1
36252: ST_TO_ADDR
// while i <= mechanics_list do
36253: LD_VAR 0 2
36257: PUSH
36258: LD_VAR 0 5
36262: LESSEQUAL
36263: IFFALSE 36346
// begin if GetLives ( mechanics_list [ i ] ) <= 900 then
36265: LD_VAR 0 5
36269: PUSH
36270: LD_VAR 0 2
36274: ARRAY
36275: PPUSH
36276: CALL_OW 256
36280: PUSH
36281: LD_INT 900
36283: LESSEQUAL
36284: IFFALSE 36330
// begin temp_list = temp_list ^ mechanics_list [ i ] ;
36286: LD_ADDR_VAR 0 3
36290: PUSH
36291: LD_VAR 0 3
36295: PUSH
36296: LD_VAR 0 5
36300: PUSH
36301: LD_VAR 0 2
36305: ARRAY
36306: ADD
36307: ST_TO_ADDR
// mechanics_list = Delete ( mechanics_list , i ) ;
36308: LD_ADDR_VAR 0 5
36312: PUSH
36313: LD_VAR 0 5
36317: PPUSH
36318: LD_VAR 0 2
36322: PPUSH
36323: CALL_OW 3
36327: ST_TO_ADDR
// continue ;
36328: GO 36253
// end ; i = i + 1 ;
36330: LD_ADDR_VAR 0 2
36334: PUSH
36335: LD_VAR 0 2
36339: PUSH
36340: LD_INT 1
36342: PLUS
36343: ST_TO_ADDR
// end ;
36344: GO 36253
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
36346: LD_ADDR_EXP 44
36350: PUSH
36351: LD_EXP 44
36355: PPUSH
36356: LD_VAR 0 1
36360: PPUSH
36361: LD_VAR 0 3
36365: PPUSH
36366: CALL_OW 1
36370: ST_TO_ADDR
// DistributeHumansToBuildings ( base , mechanics_list , UnitFilter ( [ sib_rocket_factory ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
36371: LD_VAR 0 1
36375: PPUSH
36376: LD_VAR 0 5
36380: PPUSH
36381: LD_EXP 91
36385: PUSH
36386: EMPTY
36387: LIST
36388: PPUSH
36389: LD_INT 50
36391: PUSH
36392: EMPTY
36393: LIST
36394: PUSH
36395: LD_INT 3
36397: PUSH
36398: LD_INT 57
36400: PUSH
36401: EMPTY
36402: LIST
36403: PUSH
36404: EMPTY
36405: LIST
36406: LIST
36407: PUSH
36408: EMPTY
36409: LIST
36410: LIST
36411: PPUSH
36412: CALL_OW 72
36416: PPUSH
36417: LD_INT 3
36419: PPUSH
36420: LD_INT 6
36422: PPUSH
36423: LD_INT 1
36425: PPUSH
36426: LD_INT 0
36428: PPUSH
36429: CALL 18828 0 7
// end ;
36433: GO 35900
36435: POP
36436: POP
// until false ;
36437: LD_INT 0
36439: IFFALSE 35883
// end ;
36441: PPOPN 5
36443: END
// every 0 0$1 + 0 0$0.6 do var i , temp_value , temp_unit , temp_list , base , idle_factories , fact ; var vehicle_prod_delay ;
36444: GO 36446
36446: DISABLE
36447: LD_INT 0
36449: PPUSH
36450: PPUSH
36451: PPUSH
36452: PPUSH
36453: PPUSH
36454: PPUSH
36455: PPUSH
36456: PPUSH
// begin vehicle_prod_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
36457: LD_ADDR_VAR 0 8
36461: PUSH
36462: LD_INT 0
36464: PUSH
36465: LD_INT 0
36467: PUSH
36468: LD_INT 0
36470: PUSH
36471: EMPTY
36472: LIST
36473: LIST
36474: LIST
36475: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
36476: LD_INT 35
36478: PPUSH
36479: CALL_OW 67
// for base in ai_bases do
36483: LD_ADDR_VAR 0 5
36487: PUSH
36488: LD_EXP 59
36492: PUSH
36493: FOR_IN
36494: IFFALSE 37383
// begin if BaseUnderAttack ( base , - 1 ) and ai_vehicles_defend [ base ] >= [ 0 , 1 , 2 ] [ difficulty ] then
36496: LD_VAR 0 5
36500: PPUSH
36501: LD_INT 1
36503: NEG
36504: PPUSH
36505: CALL 28793 0 2
36509: PUSH
36510: LD_EXP 39
36514: PUSH
36515: LD_VAR 0 5
36519: ARRAY
36520: PUSH
36521: LD_INT 0
36523: PUSH
36524: LD_INT 1
36526: PUSH
36527: LD_INT 2
36529: PUSH
36530: EMPTY
36531: LIST
36532: LIST
36533: LIST
36534: PUSH
36535: LD_OWVAR 67
36539: ARRAY
36540: GREATEREQUAL
36541: AND
36542: IFFALSE 36584
// begin vehicle_prod_delay = Replace ( vehicle_prod_delay , base , [ 1 1$15 , 0 0$45 , 0 0$30 ] [ difficulty ] ) ;
36544: LD_ADDR_VAR 0 8
36548: PUSH
36549: LD_VAR 0 8
36553: PPUSH
36554: LD_VAR 0 5
36558: PPUSH
36559: LD_INT 2625
36561: PUSH
36562: LD_INT 1575
36564: PUSH
36565: LD_INT 1050
36567: PUSH
36568: EMPTY
36569: LIST
36570: LIST
36571: LIST
36572: PUSH
36573: LD_OWVAR 67
36577: ARRAY
36578: PPUSH
36579: CALL_OW 1
36583: ST_TO_ADDR
// end ; idle_factories = [ ] ;
36584: LD_ADDR_VAR 0 6
36588: PUSH
36589: EMPTY
36590: ST_TO_ADDR
// for i in ai_facts [ base ] diff sib_rocket_factory do
36591: LD_ADDR_VAR 0 1
36595: PUSH
36596: LD_EXP 48
36600: PUSH
36601: LD_VAR 0 5
36605: ARRAY
36606: PUSH
36607: LD_EXP 91
36611: DIFF
36612: PUSH
36613: FOR_IN
36614: IFFALSE 36675
// if BuildingStatus ( i ) = bs_idle and IsOk ( i ) and GetBType ( i ) = b_factory then
36616: LD_VAR 0 1
36620: PPUSH
36621: CALL_OW 461
36625: PUSH
36626: LD_INT 2
36628: EQUAL
36629: PUSH
36630: LD_VAR 0 1
36634: PPUSH
36635: CALL_OW 302
36639: AND
36640: PUSH
36641: LD_VAR 0 1
36645: PPUSH
36646: CALL_OW 266
36650: PUSH
36651: LD_INT 3
36653: EQUAL
36654: AND
36655: IFFALSE 36673
// idle_factories = idle_factories ^ i ;
36657: LD_ADDR_VAR 0 6
36661: PUSH
36662: LD_VAR 0 6
36666: PUSH
36667: LD_VAR 0 1
36671: ADD
36672: ST_TO_ADDR
36673: GO 36613
36675: POP
36676: POP
// if idle_factories = 0 then
36677: LD_VAR 0 6
36681: PUSH
36682: LD_INT 0
36684: EQUAL
36685: IFFALSE 36689
// continue ;
36687: GO 36493
// temp_value = false ;
36689: LD_ADDR_VAR 0 2
36693: PUSH
36694: LD_INT 0
36696: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
36697: LD_ADDR_VAR 0 1
36701: PUSH
36702: LD_EXP 38
36706: PUSH
36707: LD_VAR 0 5
36711: ARRAY
36712: PUSH
36713: FOR_IN
36714: IFFALSE 36886
// if i [ 4 ] in [ b_bunker , b_turret ] then
36716: LD_VAR 0 1
36720: PUSH
36721: LD_INT 4
36723: ARRAY
36724: PUSH
36725: LD_INT 32
36727: PUSH
36728: LD_INT 33
36730: PUSH
36731: EMPTY
36732: LIST
36733: LIST
36734: IN
36735: IFFALSE 36884
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
36737: LD_ADDR_VAR 0 3
36741: PUSH
36742: LD_VAR 0 1
36746: PUSH
36747: LD_INT 1
36749: ARRAY
36750: PPUSH
36751: LD_VAR 0 1
36755: PUSH
36756: LD_INT 2
36758: ARRAY
36759: PPUSH
36760: CALL_OW 428
36764: ST_TO_ADDR
// if GetBType ( temp_unit ) in [ b_bunker , b_turret ] and not IsConstructed ( temp_unit ) and GetBWeapon ( temp_unit ) <> i [ 7 ] then
36765: LD_VAR 0 3
36769: PPUSH
36770: CALL_OW 266
36774: PUSH
36775: LD_INT 32
36777: PUSH
36778: LD_INT 33
36780: PUSH
36781: EMPTY
36782: LIST
36783: LIST
36784: IN
36785: PUSH
36786: LD_VAR 0 3
36790: PPUSH
36791: CALL_OW 304
36795: NOT
36796: AND
36797: PUSH
36798: LD_VAR 0 3
36802: PPUSH
36803: CALL_OW 269
36807: PUSH
36808: LD_VAR 0 1
36812: PUSH
36813: LD_INT 7
36815: ARRAY
36816: NONEQUAL
36817: AND
36818: IFFALSE 36876
// for fact in idle_factories do
36820: LD_ADDR_VAR 0 7
36824: PUSH
36825: LD_VAR 0 6
36829: PUSH
36830: FOR_IN
36831: IFFALSE 36874
// if IsWeaponFactory ( fact ) then
36833: LD_VAR 0 7
36837: PPUSH
36838: CALL 37392 0 1
36842: IFFALSE 36872
// begin ComPlaceWeapon ( temp_unit , i [ 7 ] ) ;
36844: LD_VAR 0 3
36848: PPUSH
36849: LD_VAR 0 1
36853: PUSH
36854: LD_INT 7
36856: ARRAY
36857: PPUSH
36858: CALL_OW 148
// temp_value = true ;
36862: LD_ADDR_VAR 0 2
36866: PUSH
36867: LD_INT 1
36869: ST_TO_ADDR
// break ;
36870: GO 36874
// end ;
36872: GO 36830
36874: POP
36875: POP
// if temp_value then
36876: LD_VAR 0 2
36880: IFFALSE 36884
// break ;
36882: GO 36886
// end ;
36884: GO 36713
36886: POP
36887: POP
// if temp_value then
36888: LD_VAR 0 2
36892: IFFALSE 36896
// continue ;
36894: GO 36493
// temp_value = false ;
36896: LD_ADDR_VAR 0 2
36900: PUSH
36901: LD_INT 0
36903: ST_TO_ADDR
// if ai_crane [ base ] = 0 and not ai_crane_under_construction [ base ] and tick - ai_crane_destroy_tick [ base ] >= [ 6 6$0 , 4 4$30 , 3 3$0 ] [ difficulty ] then
36904: LD_EXP 69
36908: PUSH
36909: LD_VAR 0 5
36913: ARRAY
36914: PUSH
36915: LD_INT 0
36917: EQUAL
36918: PUSH
36919: LD_EXP 70
36923: PUSH
36924: LD_VAR 0 5
36928: ARRAY
36929: NOT
36930: AND
36931: PUSH
36932: LD_OWVAR 1
36936: PUSH
36937: LD_EXP 83
36941: PUSH
36942: LD_VAR 0 5
36946: ARRAY
36947: MINUS
36948: PUSH
36949: LD_INT 12600
36951: PUSH
36952: LD_INT 9450
36954: PUSH
36955: LD_INT 6300
36957: PUSH
36958: EMPTY
36959: LIST
36960: LIST
36961: LIST
36962: PUSH
36963: LD_OWVAR 67
36967: ARRAY
36968: GREATEREQUAL
36969: AND
36970: IFFALSE 37073
// for fact in idle_factories do
36972: LD_ADDR_VAR 0 7
36976: PUSH
36977: LD_VAR 0 6
36981: PUSH
36982: FOR_IN
36983: IFFALSE 37071
// if us_medium_tracked in AvailableChassisList ( fact ) and us_crane in AvailableWeaponList ( fact ) then
36985: LD_INT 3
36987: PUSH
36988: LD_VAR 0 7
36992: PPUSH
36993: CALL_OW 475
36997: IN
36998: PUSH
36999: LD_INT 13
37001: PUSH
37002: LD_VAR 0 7
37006: PPUSH
37007: CALL_OW 478
37011: IN
37012: AND
37013: IFFALSE 37069
// begin ComConstruct ( fact , us_medium_tracked , engine_combustion , control_manual , us_crane ) ;
37015: LD_VAR 0 7
37019: PPUSH
37020: LD_INT 3
37022: PPUSH
37023: LD_INT 1
37025: PPUSH
37026: LD_INT 1
37028: PPUSH
37029: LD_INT 13
37031: PPUSH
37032: CALL_OW 125
// temp_value = true ;
37036: LD_ADDR_VAR 0 2
37040: PUSH
37041: LD_INT 1
37043: ST_TO_ADDR
// ai_crane_under_construction = Replace ( ai_crane_under_construction , base , true ) ;
37044: LD_ADDR_EXP 70
37048: PUSH
37049: LD_EXP 70
37053: PPUSH
37054: LD_VAR 0 5
37058: PPUSH
37059: LD_INT 1
37061: PPUSH
37062: CALL_OW 1
37066: ST_TO_ADDR
// break ;
37067: GO 37071
// end ;
37069: GO 36982
37071: POP
37072: POP
// if temp_value then
37073: LD_VAR 0 2
37077: IFFALSE 37081
// continue ;
37079: GO 36493
// if vehicle_prod_delay [ base ] > 0 0$0 then
37081: LD_VAR 0 8
37085: PUSH
37086: LD_VAR 0 5
37090: ARRAY
37091: PUSH
37092: LD_INT 0
37094: GREATER
37095: IFFALSE 37134
// begin vehicle_prod_delay = Replace ( vehicle_prod_delay , base , vehicle_prod_delay [ base ] - 0 0$1 ) ;
37097: LD_ADDR_VAR 0 8
37101: PUSH
37102: LD_VAR 0 8
37106: PPUSH
37107: LD_VAR 0 5
37111: PPUSH
37112: LD_VAR 0 8
37116: PUSH
37117: LD_VAR 0 5
37121: ARRAY
37122: PUSH
37123: LD_INT 35
37125: MINUS
37126: PPUSH
37127: CALL_OW 1
37131: ST_TO_ADDR
// continue ;
37132: GO 36493
// end ; if ai_vehicles_defend [ base ] < MaxNumWarVehicles ( base ) then
37134: LD_EXP 39
37138: PUSH
37139: LD_VAR 0 5
37143: ARRAY
37144: PUSH
37145: LD_VAR 0 5
37149: PPUSH
37150: CALL 35707 0 1
37154: LESS
37155: IFFALSE 37381
// begin case base of 1 :
37157: LD_VAR 0 5
37161: PUSH
37162: LD_INT 1
37164: DOUBLE
37165: EQUAL
37166: IFTRUE 37170
37168: GO 37369
37170: POP
// begin case Rand ( 1 , 4 ) of 1 :
37171: LD_INT 1
37173: PPUSH
37174: LD_INT 4
37176: PPUSH
37177: CALL_OW 12
37181: PUSH
37182: LD_INT 1
37184: DOUBLE
37185: EQUAL
37186: IFTRUE 37190
37188: GO 37201
37190: POP
// temp_value = us_heavy_gun ; 2 :
37191: LD_ADDR_VAR 0 2
37195: PUSH
37196: LD_INT 6
37198: ST_TO_ADDR
37199: GO 37259
37201: LD_INT 2
37203: DOUBLE
37204: EQUAL
37205: IFTRUE 37209
37207: GO 37220
37209: POP
// temp_value = us_laser ; 3 :
37210: LD_ADDR_VAR 0 2
37214: PUSH
37215: LD_INT 9
37217: ST_TO_ADDR
37218: GO 37259
37220: LD_INT 3
37222: DOUBLE
37223: EQUAL
37224: IFTRUE 37228
37226: GO 37239
37228: POP
// temp_value = us_double_gun ; 4 :
37229: LD_ADDR_VAR 0 2
37233: PUSH
37234: LD_INT 5
37236: ST_TO_ADDR
37237: GO 37259
37239: LD_INT 4
37241: DOUBLE
37242: EQUAL
37243: IFTRUE 37247
37245: GO 37258
37247: POP
// temp_value = us_rocket_launcher ; end ;
37248: LD_ADDR_VAR 0 2
37252: PUSH
37253: LD_INT 7
37255: ST_TO_ADDR
37256: GO 37259
37258: POP
// if difficulty = 1 and temp_value = us_heavy_gun then
37259: LD_OWVAR 67
37263: PUSH
37264: LD_INT 1
37266: EQUAL
37267: PUSH
37268: LD_VAR 0 2
37272: PUSH
37273: LD_INT 6
37275: EQUAL
37276: AND
37277: IFFALSE 37287
// temp_value = us_light_gun ;
37279: LD_ADDR_VAR 0 2
37283: PUSH
37284: LD_INT 3
37286: ST_TO_ADDR
// if Rand ( 1 , [ 1 , 3 , 4 ] [ difficulty ] ) = 1 then
37287: LD_INT 1
37289: PPUSH
37290: LD_INT 1
37292: PUSH
37293: LD_INT 3
37295: PUSH
37296: LD_INT 4
37298: PUSH
37299: EMPTY
37300: LIST
37301: LIST
37302: LIST
37303: PUSH
37304: LD_OWVAR 67
37308: ARRAY
37309: PPUSH
37310: CALL_OW 12
37314: PUSH
37315: LD_INT 1
37317: EQUAL
37318: IFFALSE 37330
// i = us_heavy_tracked else
37320: LD_ADDR_VAR 0 1
37324: PUSH
37325: LD_INT 4
37327: ST_TO_ADDR
37328: GO 37338
// i = us_morphling ;
37330: LD_ADDR_VAR 0 1
37334: PUSH
37335: LD_INT 5
37337: ST_TO_ADDR
// ComConstruct ( idle_factories [ 1 ] , i , engine_combustion , control_manual , temp_value ) ;
37338: LD_VAR 0 6
37342: PUSH
37343: LD_INT 1
37345: ARRAY
37346: PPUSH
37347: LD_VAR 0 1
37351: PPUSH
37352: LD_INT 1
37354: PPUSH
37355: LD_INT 1
37357: PPUSH
37358: LD_VAR 0 2
37362: PPUSH
37363: CALL_OW 125
// end ; 2 :
37367: GO 37381
37369: LD_INT 2
37371: DOUBLE
37372: EQUAL
37373: IFTRUE 37377
37375: GO 37380
37377: POP
// begin end ; end ;
37378: GO 37381
37380: POP
// end ; end ;
37381: GO 36493
37383: POP
37384: POP
// until false ;
37385: LD_INT 0
37387: IFFALSE 36476
// end ;
37389: PPOPN 8
37391: END
// function IsWeaponFactory ( factory ) ; begin
37392: LD_INT 0
37394: PPUSH
// if FilterAllUnits ( [ [ f_dist , factory , 4 ] , [ f_btype , b_ext_gun ] ] ) > 0 then
37395: LD_INT 91
37397: PUSH
37398: LD_VAR 0 1
37402: PUSH
37403: LD_INT 4
37405: PUSH
37406: EMPTY
37407: LIST
37408: LIST
37409: LIST
37410: PUSH
37411: LD_INT 30
37413: PUSH
37414: LD_INT 17
37416: PUSH
37417: EMPTY
37418: LIST
37419: LIST
37420: PUSH
37421: EMPTY
37422: LIST
37423: LIST
37424: PPUSH
37425: CALL_OW 69
37429: PUSH
37430: LD_INT 0
37432: GREATER
37433: IFFALSE 37445
// result = true else
37435: LD_ADDR_VAR 0 2
37439: PUSH
37440: LD_INT 1
37442: ST_TO_ADDR
37443: GO 37453
// result = false ;
37445: LD_ADDR_VAR 0 2
37449: PUSH
37450: LD_INT 0
37452: ST_TO_ADDR
// end ;
37453: LD_VAR 0 2
37457: RET
// on VehicleCaptured ( new_identifier , old_identifier , old_side , capturing_unit ) do var temp_list , base ;
37458: LD_INT 0
37460: PPUSH
37461: PPUSH
// begin if old_side = you then
37462: LD_VAR 0 3
37466: PUSH
37467: LD_EXP 2
37471: EQUAL
37472: IFFALSE 37476
// exit ;
37474: GO 37507
// for base in ai_bases do
37476: LD_ADDR_VAR 0 6
37480: PUSH
37481: LD_EXP 59
37485: PUSH
37486: FOR_IN
37487: IFFALSE 37505
// RemoveVehicleFromVariables ( base , old_identifier ) ;
37489: LD_VAR 0 6
37493: PPUSH
37494: LD_VAR 0 2
37498: PPUSH
37499: CALL 14274 0 2
37503: GO 37486
37505: POP
37506: POP
// end ;
37507: PPOPN 6
37509: END
// on VehicleConstructed ( vehicle , factory ) do var side , temp_list , base , un ;
37510: LD_INT 0
37512: PPUSH
37513: PPUSH
37514: PPUSH
37515: PPUSH
// begin side = GetSide ( vehicle ) ;
37516: LD_ADDR_VAR 0 3
37520: PUSH
37521: LD_VAR 0 1
37525: PPUSH
37526: CALL_OW 255
37530: ST_TO_ADDR
// if side = you then
37531: LD_VAR 0 3
37535: PUSH
37536: LD_EXP 2
37540: EQUAL
37541: IFFALSE 37545
// exit ;
37543: GO 37766
// base = FindBase ( vehicle ) ;
37545: LD_ADDR_VAR 0 5
37549: PUSH
37550: LD_VAR 0 1
37554: PPUSH
37555: CALL 16096 0 1
37559: ST_TO_ADDR
// if base = 0 then
37560: LD_VAR 0 5
37564: PUSH
37565: LD_INT 0
37567: EQUAL
37568: IFFALSE 37572
// exit ;
37570: GO 37766
// case GetWeapon ( vehicle ) of us_cargo_bay , ar_cargo_bay , ru_cargo_bay :
37572: LD_VAR 0 1
37576: PPUSH
37577: CALL_OW 264
37581: PUSH
37582: LD_INT 12
37584: DOUBLE
37585: EQUAL
37586: IFTRUE 37602
37588: LD_INT 32
37590: DOUBLE
37591: EQUAL
37592: IFTRUE 37602
37594: LD_INT 51
37596: DOUBLE
37597: EQUAL
37598: IFTRUE 37602
37600: GO 37653
37602: POP
// begin ai_cargo_bay = Replace ( ai_cargo_bay , base , vehicle ) ;
37603: LD_ADDR_EXP 61
37607: PUSH
37608: LD_EXP 61
37612: PPUSH
37613: LD_VAR 0 5
37617: PPUSH
37618: LD_VAR 0 1
37622: PPUSH
37623: CALL_OW 1
37627: ST_TO_ADDR
// ai_cargo_bay_under_construction = Replace ( ai_cargo_bay_under_construction , base , false ) ;
37628: LD_ADDR_EXP 62
37632: PUSH
37633: LD_EXP 62
37637: PPUSH
37638: LD_VAR 0 5
37642: PPUSH
37643: LD_INT 0
37645: PPUSH
37646: CALL_OW 1
37650: ST_TO_ADDR
// end ; us_crane , ru_crane :
37651: GO 37766
37653: LD_INT 13
37655: DOUBLE
37656: EQUAL
37657: IFTRUE 37667
37659: LD_INT 52
37661: DOUBLE
37662: EQUAL
37663: IFTRUE 37667
37665: GO 37718
37667: POP
// begin ai_crane = Replace ( ai_crane , base , vehicle ) ;
37668: LD_ADDR_EXP 69
37672: PUSH
37673: LD_EXP 69
37677: PPUSH
37678: LD_VAR 0 5
37682: PPUSH
37683: LD_VAR 0 1
37687: PPUSH
37688: CALL_OW 1
37692: ST_TO_ADDR
// ai_crane_under_construction = Replace ( ai_crane_under_construction , base , false ) ;
37693: LD_ADDR_EXP 70
37697: PUSH
37698: LD_EXP 70
37702: PPUSH
37703: LD_VAR 0 5
37707: PPUSH
37708: LD_INT 0
37710: PPUSH
37711: CALL_OW 1
37715: ST_TO_ADDR
// end ; else
37716: GO 37766
37718: POP
// begin temp_list = ai_vehicles_defend [ base ] ^ vehicle ;
37719: LD_ADDR_VAR 0 4
37723: PUSH
37724: LD_EXP 39
37728: PUSH
37729: LD_VAR 0 5
37733: ARRAY
37734: PUSH
37735: LD_VAR 0 1
37739: ADD
37740: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
37741: LD_ADDR_EXP 39
37745: PUSH
37746: LD_EXP 39
37750: PPUSH
37751: LD_VAR 0 5
37755: PPUSH
37756: LD_VAR 0 4
37760: PPUSH
37761: CALL_OW 1
37765: ST_TO_ADDR
// end ; end ; end ;
37766: PPOPN 6
37768: END
// export function DangerousUnits ( list ) ; var weapon_list , i , btype , b , val ; begin
37769: LD_INT 0
37771: PPUSH
37772: PPUSH
37773: PPUSH
37774: PPUSH
37775: PPUSH
37776: 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 ] ;
37777: LD_ADDR_VAR 0 3
37781: PUSH
37782: LD_INT 2
37784: PUSH
37785: LD_INT 3
37787: PUSH
37788: LD_INT 4
37790: PUSH
37791: LD_INT 5
37793: PUSH
37794: LD_INT 6
37796: PUSH
37797: LD_INT 7
37799: PUSH
37800: LD_INT 8
37802: PUSH
37803: LD_INT 9
37805: PUSH
37806: LD_INT 10
37808: PUSH
37809: LD_INT 22
37811: PUSH
37812: LD_INT 23
37814: PUSH
37815: LD_INT 24
37817: PUSH
37818: LD_INT 25
37820: PUSH
37821: LD_INT 26
37823: PUSH
37824: LD_INT 27
37826: PUSH
37827: LD_INT 28
37829: PUSH
37830: LD_INT 29
37832: PUSH
37833: LD_INT 42
37835: PUSH
37836: LD_INT 43
37838: PUSH
37839: LD_INT 44
37841: PUSH
37842: LD_INT 45
37844: PUSH
37845: LD_INT 46
37847: PUSH
37848: LD_INT 47
37850: PUSH
37851: LD_INT 48
37853: PUSH
37854: LD_INT 49
37856: PUSH
37857: EMPTY
37858: LIST
37859: LIST
37860: LIST
37861: LIST
37862: LIST
37863: LIST
37864: LIST
37865: LIST
37866: LIST
37867: LIST
37868: LIST
37869: LIST
37870: LIST
37871: LIST
37872: LIST
37873: LIST
37874: LIST
37875: LIST
37876: LIST
37877: LIST
37878: LIST
37879: LIST
37880: LIST
37881: LIST
37882: LIST
37883: ST_TO_ADDR
// result = [ ] ;
37884: LD_ADDR_VAR 0 2
37888: PUSH
37889: EMPTY
37890: ST_TO_ADDR
// for i in list do
37891: LD_ADDR_VAR 0 4
37895: PUSH
37896: LD_VAR 0 1
37900: PUSH
37901: FOR_IN
37902: IFFALSE 38350
// case GetType ( i ) of unit_human :
37904: LD_VAR 0 4
37908: PPUSH
37909: CALL_OW 247
37913: PUSH
37914: LD_INT 1
37916: DOUBLE
37917: EQUAL
37918: IFTRUE 37922
37920: GO 37955
37922: POP
// begin if not IsOk ( i ) then
37923: LD_VAR 0 4
37927: PPUSH
37928: CALL_OW 302
37932: NOT
37933: IFFALSE 37937
// continue ;
37935: GO 37901
// result = result ^ i ;
37937: LD_ADDR_VAR 0 2
37941: PUSH
37942: LD_VAR 0 2
37946: PUSH
37947: LD_VAR 0 4
37951: ADD
37952: ST_TO_ADDR
// end ; unit_vehicle :
37953: GO 38348
37955: LD_INT 2
37957: DOUBLE
37958: EQUAL
37959: IFTRUE 37963
37961: GO 38103
37963: POP
// begin if not IsOk ( i ) then
37964: LD_VAR 0 4
37968: PPUSH
37969: CALL_OW 302
37973: NOT
37974: IFFALSE 37978
// continue ;
37976: GO 37901
// case GetControl ( i ) of control_manual , control_rider :
37978: LD_VAR 0 4
37982: PPUSH
37983: CALL_OW 263
37987: PUSH
37988: LD_INT 1
37990: DOUBLE
37991: EQUAL
37992: IFTRUE 38002
37994: LD_INT 4
37996: DOUBLE
37997: EQUAL
37998: IFTRUE 38002
38000: GO 38022
38002: POP
// begin if UnitsInside ( i ) = 0 then
38003: LD_VAR 0 4
38007: PPUSH
38008: CALL_OW 313
38012: PUSH
38013: LD_INT 0
38015: EQUAL
38016: IFFALSE 38020
// continue ;
38018: GO 37901
// end ; control_remote :
38020: GO 38068
38022: LD_INT 2
38024: DOUBLE
38025: EQUAL
38026: IFTRUE 38030
38028: GO 38050
38030: POP
// begin if IsControledBy ( i ) = 0 then
38031: LD_VAR 0 4
38035: PPUSH
38036: CALL_OW 312
38040: PUSH
38041: LD_INT 0
38043: EQUAL
38044: IFFALSE 38048
// continue ;
38046: GO 37901
// end ; control_computer , control_apeman :
38048: GO 38068
38050: LD_INT 3
38052: DOUBLE
38053: EQUAL
38054: IFTRUE 38064
38056: LD_INT 5
38058: DOUBLE
38059: EQUAL
38060: IFTRUE 38064
38062: GO 38067
38064: POP
// begin end ; end ;
38065: GO 38068
38067: POP
// if GetWeapon ( i ) in weapon_list then
38068: LD_VAR 0 4
38072: PPUSH
38073: CALL_OW 264
38077: PUSH
38078: LD_VAR 0 3
38082: IN
38083: IFFALSE 38101
// result = result ^ i ;
38085: LD_ADDR_VAR 0 2
38089: PUSH
38090: LD_VAR 0 2
38094: PUSH
38095: LD_VAR 0 4
38099: ADD
38100: ST_TO_ADDR
// end ; unit_building :
38101: GO 38348
38103: LD_INT 3
38105: DOUBLE
38106: EQUAL
38107: IFTRUE 38111
38109: GO 38347
38111: POP
// begin if not IsOk ( i ) then
38112: LD_VAR 0 4
38116: PPUSH
38117: CALL_OW 302
38121: NOT
38122: IFFALSE 38126
// continue ;
38124: GO 37901
// btype = GetBType ( i ) ;
38126: LD_ADDR_VAR 0 5
38130: PUSH
38131: LD_VAR 0 4
38135: PPUSH
38136: CALL_OW 266
38140: ST_TO_ADDR
// case btype of b_turret :
38141: LD_VAR 0 5
38145: PUSH
38146: LD_INT 33
38148: DOUBLE
38149: EQUAL
38150: IFTRUE 38154
38152: GO 38157
38154: POP
// begin end ; b_bunker , b_breastwork , b_armoury , b_barracks , b_fort :
38155: GO 38212
38157: LD_INT 32
38159: DOUBLE
38160: EQUAL
38161: IFTRUE 38189
38163: LD_INT 31
38165: DOUBLE
38166: EQUAL
38167: IFTRUE 38189
38169: LD_INT 4
38171: DOUBLE
38172: EQUAL
38173: IFTRUE 38189
38175: LD_INT 5
38177: DOUBLE
38178: EQUAL
38179: IFTRUE 38189
38181: LD_INT 35
38183: DOUBLE
38184: EQUAL
38185: IFTRUE 38189
38187: GO 38209
38189: POP
// begin if UnitsInside ( i ) = 0 then
38190: LD_VAR 0 4
38194: PPUSH
38195: CALL_OW 313
38199: PUSH
38200: LD_INT 0
38202: EQUAL
38203: IFFALSE 38207
// continue ;
38205: GO 37901
// end ; else
38207: GO 38212
38209: POP
// continue ; end ;
38210: GO 37901
// if btype in [ b_bunker , b_turret ] then
38212: LD_VAR 0 5
38216: PUSH
38217: LD_INT 32
38219: PUSH
38220: LD_INT 33
38222: PUSH
38223: EMPTY
38224: LIST
38225: LIST
38226: IN
38227: IFFALSE 38329
// if not GetBWeapon ( i ) in weapon_list then
38229: LD_VAR 0 4
38233: PPUSH
38234: CALL_OW 269
38238: PUSH
38239: LD_VAR 0 3
38243: IN
38244: NOT
38245: IFFALSE 38251
// continue else
38247: GO 37901
38249: GO 38329
// begin b = GetBase ( i ) ;
38251: LD_ADDR_VAR 0 6
38255: PUSH
38256: LD_VAR 0 4
38260: PPUSH
38261: CALL_OW 274
38265: ST_TO_ADDR
// val = false ;
38266: LD_ADDR_VAR 0 7
38270: PUSH
38271: LD_INT 0
38273: ST_TO_ADDR
// if b = 0 then
38274: LD_VAR 0 6
38278: PUSH
38279: LD_INT 0
38281: EQUAL
38282: IFFALSE 38294
// val = true else
38284: LD_ADDR_VAR 0 7
38288: PUSH
38289: LD_INT 1
38291: ST_TO_ADDR
38292: GO 38321
// if GetEnergy ( b ) [ 4 ] = 0 then
38294: LD_VAR 0 6
38298: PPUSH
38299: CALL_OW 278
38303: PUSH
38304: LD_INT 4
38306: ARRAY
38307: PUSH
38308: LD_INT 0
38310: EQUAL
38311: IFFALSE 38321
// val = true ;
38313: LD_ADDR_VAR 0 7
38317: PUSH
38318: LD_INT 1
38320: ST_TO_ADDR
// if val then
38321: LD_VAR 0 7
38325: IFFALSE 38329
// continue ;
38327: GO 37901
// end ; result = result ^ i ;
38329: LD_ADDR_VAR 0 2
38333: PUSH
38334: LD_VAR 0 2
38338: PUSH
38339: LD_VAR 0 4
38343: ADD
38344: ST_TO_ADDR
// end ; end ;
38345: GO 38348
38347: POP
38348: GO 37901
38350: POP
38351: POP
// end ;
38352: LD_VAR 0 2
38356: RET
// every 0 0$5 do var base , i ;
38357: GO 38359
38359: DISABLE
38360: LD_INT 0
38362: PPUSH
38363: PPUSH
// begin for base in ai_bases do
38364: LD_ADDR_VAR 0 1
38368: PUSH
38369: LD_EXP 59
38373: PUSH
38374: FOR_IN
38375: IFFALSE 38484
// for i in ( ai_vehicles_attack [ base ] ^ ai_vehicles_defend [ base ] ^ ai_cargo_bay [ base ] ^ ai_crane [ base ] ) diff 0 do
38377: LD_ADDR_VAR 0 2
38381: PUSH
38382: LD_EXP 40
38386: PUSH
38387: LD_VAR 0 1
38391: ARRAY
38392: PUSH
38393: LD_EXP 39
38397: PUSH
38398: LD_VAR 0 1
38402: ARRAY
38403: ADD
38404: PUSH
38405: LD_EXP 61
38409: PUSH
38410: LD_VAR 0 1
38414: ARRAY
38415: ADD
38416: PUSH
38417: LD_EXP 69
38421: PUSH
38422: LD_VAR 0 1
38426: ARRAY
38427: ADD
38428: PUSH
38429: LD_INT 0
38431: DIFF
38432: PUSH
38433: FOR_IN
38434: IFFALSE 38480
// if GetFuel ( i ) < 10 and GetEngine ( i ) = engine_combustion then
38436: LD_VAR 0 2
38440: PPUSH
38441: CALL_OW 261
38445: PUSH
38446: LD_INT 10
38448: LESS
38449: PUSH
38450: LD_VAR 0 2
38454: PPUSH
38455: CALL_OW 262
38459: PUSH
38460: LD_INT 1
38462: EQUAL
38463: AND
38464: IFFALSE 38478
// SetFuel ( i , 10 ) ;
38466: LD_VAR 0 2
38470: PPUSH
38471: LD_INT 10
38473: PPUSH
38474: CALL_OW 240
38478: GO 38433
38480: POP
38481: POP
38482: GO 38374
38484: POP
38485: POP
// enable ;
38486: ENABLE
// end ;
38487: PPOPN 2
38489: END
// every 0 0$1.4 do var base , i , val , un ; var veh_hex_map ;
38490: GO 38492
38492: DISABLE
38493: LD_INT 0
38495: PPUSH
38496: PPUSH
38497: PPUSH
38498: PPUSH
38499: PPUSH
// begin base = 1 ;
38500: LD_ADDR_VAR 0 1
38504: PUSH
38505: LD_INT 1
38507: ST_TO_ADDR
// veh_hex_map = [ ] ;
38508: LD_ADDR_VAR 0 5
38512: PUSH
38513: EMPTY
38514: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
38515: LD_INT 35
38517: PPUSH
38518: CALL_OW 67
// if not base in ai_bases then
38522: LD_VAR 0 1
38526: PUSH
38527: LD_EXP 59
38531: IN
38532: NOT
38533: IFFALSE 38537
// exit ;
38535: GO 39467
// for i in ( ai_vehicles_attack [ base ] ^ ai_vehicles_defend [ base ] ^ ai_cargo_bay [ base ] ^ ai_crane [ base ] ) diff 0 do
38537: LD_ADDR_VAR 0 2
38541: PUSH
38542: LD_EXP 40
38546: PUSH
38547: LD_VAR 0 1
38551: ARRAY
38552: PUSH
38553: LD_EXP 39
38557: PUSH
38558: LD_VAR 0 1
38562: ARRAY
38563: ADD
38564: PUSH
38565: LD_EXP 61
38569: PUSH
38570: LD_VAR 0 1
38574: ARRAY
38575: ADD
38576: PUSH
38577: LD_EXP 69
38581: PUSH
38582: LD_VAR 0 1
38586: ARRAY
38587: ADD
38588: PUSH
38589: LD_INT 0
38591: DIFF
38592: PUSH
38593: FOR_IN
38594: IFFALSE 39461
// begin val = false ;
38596: LD_ADDR_VAR 0 3
38600: PUSH
38601: LD_INT 0
38603: ST_TO_ADDR
// if veh_hex_map < i then
38604: LD_VAR 0 5
38608: PUSH
38609: LD_VAR 0 2
38613: LESS
38614: IFFALSE 38626
// val = true else
38616: LD_ADDR_VAR 0 3
38620: PUSH
38621: LD_INT 1
38623: ST_TO_ADDR
38624: GO 38650
// if veh_hex_map [ i ] = 0 then
38626: LD_VAR 0 5
38630: PUSH
38631: LD_VAR 0 2
38635: ARRAY
38636: PUSH
38637: LD_INT 0
38639: EQUAL
38640: IFFALSE 38650
// val = true ;
38642: LD_ADDR_VAR 0 3
38646: PUSH
38647: LD_INT 1
38649: ST_TO_ADDR
// if val then
38650: LD_VAR 0 3
38654: IFFALSE 38690
// veh_hex_map = Replace ( veh_hex_map , i , [ 0 , 0 , 0 0$0 ] ) ;
38656: LD_ADDR_VAR 0 5
38660: PUSH
38661: LD_VAR 0 5
38665: PPUSH
38666: LD_VAR 0 2
38670: PPUSH
38671: LD_INT 0
38673: PUSH
38674: LD_INT 0
38676: PUSH
38677: LD_INT 0
38679: PUSH
38680: EMPTY
38681: LIST
38682: LIST
38683: LIST
38684: PPUSH
38685: CALL_OW 1
38689: ST_TO_ADDR
// if IsInArea ( i , am_veh_stuck_area ) then
38690: LD_VAR 0 2
38694: PPUSH
38695: LD_INT 30
38697: PPUSH
38698: CALL_OW 308
38702: IFFALSE 39425
// begin if veh_hex_map [ i ] [ 1 ] = 0 and veh_hex_map [ i ] [ 2 ] = 0 then
38704: LD_VAR 0 5
38708: PUSH
38709: LD_VAR 0 2
38713: ARRAY
38714: PUSH
38715: LD_INT 1
38717: ARRAY
38718: PUSH
38719: LD_INT 0
38721: EQUAL
38722: PUSH
38723: LD_VAR 0 5
38727: PUSH
38728: LD_VAR 0 2
38732: ARRAY
38733: PUSH
38734: LD_INT 2
38736: ARRAY
38737: PUSH
38738: LD_INT 0
38740: EQUAL
38741: AND
38742: IFFALSE 38794
// veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) else
38744: LD_ADDR_VAR 0 5
38748: PUSH
38749: LD_VAR 0 5
38753: PPUSH
38754: LD_VAR 0 2
38758: PPUSH
38759: LD_VAR 0 2
38763: PPUSH
38764: CALL_OW 250
38768: PUSH
38769: LD_VAR 0 2
38773: PPUSH
38774: CALL_OW 251
38778: PUSH
38779: LD_INT 0
38781: PUSH
38782: EMPTY
38783: LIST
38784: LIST
38785: LIST
38786: PPUSH
38787: CALL_OW 1
38791: ST_TO_ADDR
38792: GO 39423
// if GetDistUnitXY ( i , veh_hex_map [ i ] [ 1 ] , veh_hex_map [ i ] [ 2 ] ) > 2 then
38794: LD_VAR 0 2
38798: PPUSH
38799: LD_VAR 0 5
38803: PUSH
38804: LD_VAR 0 2
38808: ARRAY
38809: PUSH
38810: LD_INT 1
38812: ARRAY
38813: PPUSH
38814: LD_VAR 0 5
38818: PUSH
38819: LD_VAR 0 2
38823: ARRAY
38824: PUSH
38825: LD_INT 2
38827: ARRAY
38828: PPUSH
38829: CALL_OW 297
38833: PUSH
38834: LD_INT 2
38836: GREATER
38837: IFFALSE 38889
// veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) else
38839: LD_ADDR_VAR 0 5
38843: PUSH
38844: LD_VAR 0 5
38848: PPUSH
38849: LD_VAR 0 2
38853: PPUSH
38854: LD_VAR 0 2
38858: PPUSH
38859: CALL_OW 250
38863: PUSH
38864: LD_VAR 0 2
38868: PPUSH
38869: CALL_OW 251
38873: PUSH
38874: LD_INT 0
38876: PUSH
38877: EMPTY
38878: LIST
38879: LIST
38880: LIST
38881: PPUSH
38882: CALL_OW 1
38886: ST_TO_ADDR
38887: GO 39423
// 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 ] ) ;
38889: LD_ADDR_VAR 0 5
38893: PUSH
38894: LD_VAR 0 5
38898: PPUSH
38899: LD_VAR 0 2
38903: PPUSH
38904: LD_VAR 0 5
38908: PUSH
38909: LD_VAR 0 2
38913: ARRAY
38914: PUSH
38915: LD_INT 1
38917: ARRAY
38918: PUSH
38919: LD_VAR 0 5
38923: PUSH
38924: LD_VAR 0 2
38928: ARRAY
38929: PUSH
38930: LD_INT 2
38932: ARRAY
38933: PUSH
38934: LD_VAR 0 5
38938: PUSH
38939: LD_VAR 0 2
38943: ARRAY
38944: PUSH
38945: LD_INT 3
38947: ARRAY
38948: PUSH
38949: LD_INT 35
38951: PLUS
38952: PUSH
38953: EMPTY
38954: LIST
38955: LIST
38956: LIST
38957: PPUSH
38958: CALL_OW 1
38962: ST_TO_ADDR
// if veh_hex_map [ i ] [ 3 ] >= 0 0$8 and not See ( you , i ) then
38963: LD_VAR 0 5
38967: PUSH
38968: LD_VAR 0 2
38972: ARRAY
38973: PUSH
38974: LD_INT 3
38976: ARRAY
38977: PUSH
38978: LD_INT 280
38980: GREATEREQUAL
38981: PUSH
38982: LD_EXP 2
38986: PPUSH
38987: LD_VAR 0 2
38991: PPUSH
38992: CALL_OW 292
38996: NOT
38997: AND
38998: IFFALSE 39423
// begin val = GetTaskList ( i ) ;
39000: LD_ADDR_VAR 0 3
39004: PUSH
39005: LD_VAR 0 2
39009: PPUSH
39010: CALL_OW 437
39014: ST_TO_ADDR
// if val = 0 then
39015: LD_VAR 0 3
39019: PUSH
39020: LD_INT 0
39022: EQUAL
39023: IFFALSE 39075
// begin veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) ;
39025: LD_ADDR_VAR 0 5
39029: PUSH
39030: LD_VAR 0 5
39034: PPUSH
39035: LD_VAR 0 2
39039: PPUSH
39040: LD_VAR 0 2
39044: PPUSH
39045: CALL_OW 250
39049: PUSH
39050: LD_VAR 0 2
39054: PPUSH
39055: CALL_OW 251
39059: PUSH
39060: LD_INT 0
39062: PUSH
39063: EMPTY
39064: LIST
39065: LIST
39066: LIST
39067: PPUSH
39068: CALL_OW 1
39072: ST_TO_ADDR
// end else
39073: GO 39423
// begin if val [ 1 ] [ 2 ] = 0 and val [ 1 ] [ 3 ] = 0 then
39075: LD_VAR 0 3
39079: PUSH
39080: LD_INT 1
39082: ARRAY
39083: PUSH
39084: LD_INT 2
39086: ARRAY
39087: PUSH
39088: LD_INT 0
39090: EQUAL
39091: PUSH
39092: LD_VAR 0 3
39096: PUSH
39097: LD_INT 1
39099: ARRAY
39100: PUSH
39101: LD_INT 3
39103: ARRAY
39104: PUSH
39105: LD_INT 0
39107: EQUAL
39108: AND
39109: IFFALSE 39161
// begin veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) ;
39111: LD_ADDR_VAR 0 5
39115: PUSH
39116: LD_VAR 0 5
39120: PPUSH
39121: LD_VAR 0 2
39125: PPUSH
39126: LD_VAR 0 2
39130: PPUSH
39131: CALL_OW 250
39135: PUSH
39136: LD_VAR 0 2
39140: PPUSH
39141: CALL_OW 251
39145: PUSH
39146: LD_INT 0
39148: PUSH
39149: EMPTY
39150: LIST
39151: LIST
39152: LIST
39153: PPUSH
39154: CALL_OW 1
39158: ST_TO_ADDR
// end else
39159: GO 39423
// if not InArea ( val [ 1 ] [ 2 ] , val [ 1 ] [ 3 ] , GetBaseArea ( base ) ) then
39161: LD_VAR 0 3
39165: PUSH
39166: LD_INT 1
39168: ARRAY
39169: PUSH
39170: LD_INT 2
39172: ARRAY
39173: PPUSH
39174: LD_VAR 0 3
39178: PUSH
39179: LD_INT 1
39181: ARRAY
39182: PUSH
39183: LD_INT 3
39185: ARRAY
39186: PPUSH
39187: LD_VAR 0 1
39191: PPUSH
39192: CALL 15877 0 1
39196: PPUSH
39197: CALL_OW 309
39201: NOT
39202: IFFALSE 39254
// begin veh_hex_map = Replace ( veh_hex_map , i , [ GetX ( i ) , GetY ( i ) , 0 0$0 ] ) ;
39204: LD_ADDR_VAR 0 5
39208: PUSH
39209: LD_VAR 0 5
39213: PPUSH
39214: LD_VAR 0 2
39218: PPUSH
39219: LD_VAR 0 2
39223: PPUSH
39224: CALL_OW 250
39228: PUSH
39229: LD_VAR 0 2
39233: PPUSH
39234: CALL_OW 251
39238: PUSH
39239: LD_INT 0
39241: PUSH
39242: EMPTY
39243: LIST
39244: LIST
39245: LIST
39246: PPUSH
39247: CALL_OW 1
39251: ST_TO_ADDR
// end else
39252: GO 39423
// begin RemoveUnit ( i ) ;
39254: LD_VAR 0 2
39258: PPUSH
39259: CALL_OW 64
// if not PlaceUnitXYR ( i , val [ 1 ] [ 2 ] , val [ 1 ] [ 3 ] , 7 , false ) then
39263: LD_VAR 0 2
39267: PPUSH
39268: LD_VAR 0 3
39272: PUSH
39273: LD_INT 1
39275: ARRAY
39276: PUSH
39277: LD_INT 2
39279: ARRAY
39280: PPUSH
39281: LD_VAR 0 3
39285: PUSH
39286: LD_INT 1
39288: ARRAY
39289: PUSH
39290: LD_INT 3
39292: ARRAY
39293: PPUSH
39294: LD_INT 7
39296: PPUSH
39297: LD_INT 0
39299: PPUSH
39300: CALL_OW 50
39304: NOT
39305: IFFALSE 39389
// begin un = UnitsInside ( i ) ;
39307: LD_ADDR_VAR 0 4
39311: PUSH
39312: LD_VAR 0 2
39316: PPUSH
39317: CALL_OW 313
39321: ST_TO_ADDR
// if un > 0 then
39322: LD_VAR 0 4
39326: PUSH
39327: LD_INT 0
39329: GREATER
39330: IFFALSE 39366
// begin RemoveHumanFromVariables ( base , un [ 1 ] , true ) ;
39332: LD_VAR 0 1
39336: PPUSH
39337: LD_VAR 0 4
39341: PUSH
39342: LD_INT 1
39344: ARRAY
39345: PPUSH
39346: LD_INT 1
39348: PPUSH
39349: CALL 14933 0 3
// DestroyUnit ( un [ 1 ] ) ;
39353: LD_VAR 0 4
39357: PUSH
39358: LD_INT 1
39360: ARRAY
39361: PPUSH
39362: CALL_OW 65
// end ; RemoveVehicleFromVariables ( base , i ) ;
39366: LD_VAR 0 1
39370: PPUSH
39371: LD_VAR 0 2
39375: PPUSH
39376: CALL 14274 0 2
// DestroyUnit ( i ) ;
39380: LD_VAR 0 2
39384: PPUSH
39385: CALL_OW 65
// end ; veh_hex_map = Replace ( veh_hex_map , i , [ 0 , 0 , 0 0$0 ] ) ;
39389: LD_ADDR_VAR 0 5
39393: PUSH
39394: LD_VAR 0 5
39398: PPUSH
39399: LD_VAR 0 2
39403: PPUSH
39404: LD_INT 0
39406: PUSH
39407: LD_INT 0
39409: PUSH
39410: LD_INT 0
39412: PUSH
39413: EMPTY
39414: LIST
39415: LIST
39416: LIST
39417: PPUSH
39418: CALL_OW 1
39422: ST_TO_ADDR
// end ; end ; end ; end ; end else
39423: GO 39459
// begin veh_hex_map = Replace ( veh_hex_map , i , [ 0 , 0 , 0 0$0 ] ) ;
39425: LD_ADDR_VAR 0 5
39429: PUSH
39430: LD_VAR 0 5
39434: PPUSH
39435: LD_VAR 0 2
39439: PPUSH
39440: LD_INT 0
39442: PUSH
39443: LD_INT 0
39445: PUSH
39446: LD_INT 0
39448: PUSH
39449: EMPTY
39450: LIST
39451: LIST
39452: LIST
39453: PPUSH
39454: CALL_OW 1
39458: ST_TO_ADDR
// end ; end ;
39459: GO 38593
39461: POP
39462: POP
// until false ;
39463: LD_INT 0
39465: IFFALSE 38515
// end ;
39467: PPOPN 5
39469: END
// every 0 0$1 + 0 0$0.7 do var side , i , scientists_list , temp_list , temp_unit , base , k , temp_list_3 , free_spaces , area ;
39470: GO 39472
39472: DISABLE
39473: LD_INT 0
39475: PPUSH
39476: PPUSH
39477: PPUSH
39478: PPUSH
39479: PPUSH
39480: PPUSH
39481: PPUSH
39482: PPUSH
39483: PPUSH
39484: PPUSH
// begin for base in ai_bases do
39485: LD_ADDR_VAR 0 6
39489: PUSH
39490: LD_EXP 59
39494: PUSH
39495: FOR_IN
39496: IFFALSE 40179
// begin side = GetBaseSide ( base ) ;
39498: LD_ADDR_VAR 0 1
39502: PUSH
39503: LD_VAR 0 6
39507: PPUSH
39508: CALL 15948 0 1
39512: ST_TO_ADDR
// scientists_list = ai_scientists [ base ] diff ai_heal_these_humans [ base ] ;
39513: LD_ADDR_VAR 0 3
39517: PUSH
39518: LD_EXP 32
39522: PUSH
39523: LD_VAR 0 6
39527: ARRAY
39528: PUSH
39529: LD_EXP 44
39533: PUSH
39534: LD_VAR 0 6
39538: ARRAY
39539: DIFF
39540: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
39541: LD_ADDR_VAR 0 4
39545: PUSH
39546: LD_EXP 44
39550: PUSH
39551: LD_VAR 0 6
39555: ARRAY
39556: ST_TO_ADDR
// i = 1 ;
39557: LD_ADDR_VAR 0 2
39561: PUSH
39562: LD_INT 1
39564: ST_TO_ADDR
// while i <= scientists_list do
39565: LD_VAR 0 2
39569: PUSH
39570: LD_VAR 0 3
39574: LESSEQUAL
39575: IFFALSE 39658
// begin if GetLives ( scientists_list [ i ] ) <= 700 then
39577: LD_VAR 0 3
39581: PUSH
39582: LD_VAR 0 2
39586: ARRAY
39587: PPUSH
39588: CALL_OW 256
39592: PUSH
39593: LD_INT 700
39595: LESSEQUAL
39596: IFFALSE 39642
// begin temp_list = temp_list ^ scientists_list [ i ] ;
39598: LD_ADDR_VAR 0 4
39602: PUSH
39603: LD_VAR 0 4
39607: PUSH
39608: LD_VAR 0 3
39612: PUSH
39613: LD_VAR 0 2
39617: ARRAY
39618: ADD
39619: ST_TO_ADDR
// scientists_list = Delete ( scientists_list , i ) ;
39620: LD_ADDR_VAR 0 3
39624: PUSH
39625: LD_VAR 0 3
39629: PPUSH
39630: LD_VAR 0 2
39634: PPUSH
39635: CALL_OW 3
39639: ST_TO_ADDR
// continue ;
39640: GO 39565
// end ; i = i + 1 ;
39642: LD_ADDR_VAR 0 2
39646: PUSH
39647: LD_VAR 0 2
39651: PUSH
39652: LD_INT 1
39654: PLUS
39655: ST_TO_ADDR
// end ;
39656: GO 39565
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
39658: LD_ADDR_EXP 44
39662: PUSH
39663: LD_EXP 44
39667: PPUSH
39668: LD_VAR 0 6
39672: PPUSH
39673: LD_VAR 0 4
39677: PPUSH
39678: CALL_OW 1
39682: ST_TO_ADDR
// temp_list = [ ] ;
39683: LD_ADDR_VAR 0 4
39687: PUSH
39688: EMPTY
39689: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
39690: LD_ADDR_VAR 0 2
39694: PUSH
39695: LD_EXP 44
39699: PUSH
39700: LD_VAR 0 6
39704: ARRAY
39705: PUSH
39706: FOR_IN
39707: IFFALSE 39757
// if GetLives ( i ) < 1000 and IsInUnit ( i ) = 0 then
39709: LD_VAR 0 2
39713: PPUSH
39714: CALL_OW 256
39718: PUSH
39719: LD_INT 1000
39721: LESS
39722: PUSH
39723: LD_VAR 0 2
39727: PPUSH
39728: CALL_OW 310
39732: PUSH
39733: LD_INT 0
39735: EQUAL
39736: AND
39737: IFFALSE 39755
// temp_list = temp_list ^ i ;
39739: LD_ADDR_VAR 0 4
39743: PUSH
39744: LD_VAR 0 4
39748: PUSH
39749: LD_VAR 0 2
39753: ADD
39754: ST_TO_ADDR
39755: GO 39706
39757: POP
39758: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
39759: LD_ADDR_EXP 44
39763: PUSH
39764: LD_EXP 44
39768: PPUSH
39769: LD_VAR 0 6
39773: PPUSH
39774: LD_VAR 0 4
39778: PPUSH
39779: CALL_OW 1
39783: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
39784: LD_ADDR_VAR 0 2
39788: PUSH
39789: LD_EXP 44
39793: PUSH
39794: LD_VAR 0 6
39798: ARRAY
39799: PUSH
39800: FOR_IN
39801: IFFALSE 39889
// if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
39803: LD_VAR 0 2
39807: PPUSH
39808: LD_EXP 41
39812: PUSH
39813: LD_VAR 0 6
39817: ARRAY
39818: PUSH
39819: LD_INT 1
39821: ARRAY
39822: PPUSH
39823: LD_EXP 41
39827: PUSH
39828: LD_VAR 0 6
39832: ARRAY
39833: PUSH
39834: LD_INT 2
39836: ARRAY
39837: PPUSH
39838: CALL_OW 297
39842: PUSH
39843: LD_INT 4
39845: GREATER
39846: IFFALSE 39887
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
39848: LD_VAR 0 2
39852: PPUSH
39853: LD_EXP 41
39857: PUSH
39858: LD_VAR 0 6
39862: ARRAY
39863: PUSH
39864: LD_INT 1
39866: ARRAY
39867: PPUSH
39868: LD_EXP 41
39872: PUSH
39873: LD_VAR 0 6
39877: ARRAY
39878: PUSH
39879: LD_INT 2
39881: ARRAY
39882: PPUSH
39883: CALL_OW 111
39887: GO 39800
39889: POP
39890: POP
// if scientists_list = 0 then
39891: LD_VAR 0 3
39895: PUSH
39896: LD_INT 0
39898: EQUAL
39899: IFFALSE 39903
// continue ;
39901: GO 39495
// if ai_heal_these_humans [ base ] > 0 then
39903: LD_EXP 44
39907: PUSH
39908: LD_VAR 0 6
39912: ARRAY
39913: PUSH
39914: LD_INT 0
39916: GREATER
39917: IFFALSE 40112
// begin area = GetBaseArea ( base ) ;
39919: LD_ADDR_VAR 0 10
39923: PUSH
39924: LD_VAR 0 6
39928: PPUSH
39929: CALL 15877 0 1
39933: ST_TO_ADDR
// temp_list = UnitFilter ( ai_heal_these_humans [ base ] , [ f_inarea , area ] ) ;
39934: LD_ADDR_VAR 0 4
39938: PUSH
39939: LD_EXP 44
39943: PUSH
39944: LD_VAR 0 6
39948: ARRAY
39949: PPUSH
39950: LD_INT 95
39952: PUSH
39953: LD_VAR 0 10
39957: PUSH
39958: EMPTY
39959: LIST
39960: LIST
39961: PPUSH
39962: CALL_OW 72
39966: ST_TO_ADDR
// if temp_list > 0 then
39967: LD_VAR 0 4
39971: PUSH
39972: LD_INT 0
39974: GREATER
39975: IFFALSE 40112
// begin scientists_list = GetHumansOutOfUnits ( scientists_list ) ;
39977: LD_ADDR_VAR 0 3
39981: PUSH
39982: LD_VAR 0 3
39986: PPUSH
39987: CALL 28688 0 1
39991: ST_TO_ADDR
// repeat i = 1 ;
39992: LD_ADDR_VAR 0 2
39996: PUSH
39997: LD_INT 1
39999: ST_TO_ADDR
// while i <= temp_list do
40000: LD_VAR 0 2
40004: PUSH
40005: LD_VAR 0 4
40009: LESSEQUAL
40010: IFFALSE 40102
// begin if scientists_list = 0 then
40012: LD_VAR 0 3
40016: PUSH
40017: LD_INT 0
40019: EQUAL
40020: IFFALSE 40024
// break ;
40022: GO 40102
// temp_unit = NearestUnitToUnit ( scientists_list , temp_list [ i ] ) ;
40024: LD_ADDR_VAR 0 5
40028: PUSH
40029: LD_VAR 0 3
40033: PPUSH
40034: LD_VAR 0 4
40038: PUSH
40039: LD_VAR 0 2
40043: ARRAY
40044: PPUSH
40045: CALL_OW 74
40049: ST_TO_ADDR
// ComHeal ( temp_unit , temp_list [ i ] ) ;
40050: LD_VAR 0 5
40054: PPUSH
40055: LD_VAR 0 4
40059: PUSH
40060: LD_VAR 0 2
40064: ARRAY
40065: PPUSH
40066: CALL_OW 128
// scientists_list = scientists_list diff temp_unit ;
40070: LD_ADDR_VAR 0 3
40074: PUSH
40075: LD_VAR 0 3
40079: PUSH
40080: LD_VAR 0 5
40084: DIFF
40085: ST_TO_ADDR
// i = i + 1 ;
40086: LD_ADDR_VAR 0 2
40090: PUSH
40091: LD_VAR 0 2
40095: PUSH
40096: LD_INT 1
40098: PLUS
40099: ST_TO_ADDR
// end ;
40100: GO 40000
// until scientists_list = 0 ;
40102: LD_VAR 0 3
40106: PUSH
40107: LD_INT 0
40109: EQUAL
40110: IFFALSE 39992
// end ; end ; DistributeHumansToBuildings ( base , scientists_list , UnitFilter ( ai_labs [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_scientistic , 6 , true , false ) ;
40112: LD_VAR 0 6
40116: PPUSH
40117: LD_VAR 0 3
40121: PPUSH
40122: LD_EXP 35
40126: PUSH
40127: LD_VAR 0 6
40131: ARRAY
40132: PPUSH
40133: LD_INT 50
40135: PUSH
40136: EMPTY
40137: LIST
40138: PUSH
40139: LD_INT 3
40141: PUSH
40142: LD_INT 57
40144: PUSH
40145: EMPTY
40146: LIST
40147: PUSH
40148: EMPTY
40149: LIST
40150: LIST
40151: PUSH
40152: EMPTY
40153: LIST
40154: LIST
40155: PPUSH
40156: CALL_OW 72
40160: PPUSH
40161: LD_INT 4
40163: PPUSH
40164: LD_INT 6
40166: PPUSH
40167: LD_INT 1
40169: PPUSH
40170: LD_INT 0
40172: PPUSH
40173: CALL 18828 0 7
// end ;
40177: GO 39495
40179: POP
40180: POP
// enable ;
40181: ENABLE
// end ; end_of_file
40182: PPOPN 10
40184: END
// export function GetApes ( side ) ; begin
40185: LD_INT 0
40187: 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 ] ] ] ) ;
40188: LD_ADDR_VAR 0 2
40192: PUSH
40193: LD_INT 22
40195: PUSH
40196: LD_VAR 0 1
40200: PUSH
40201: EMPTY
40202: LIST
40203: LIST
40204: PUSH
40205: LD_INT 2
40207: PUSH
40208: LD_INT 25
40210: PUSH
40211: LD_INT 12
40213: PUSH
40214: EMPTY
40215: LIST
40216: LIST
40217: PUSH
40218: LD_INT 25
40220: PUSH
40221: LD_INT 15
40223: PUSH
40224: EMPTY
40225: LIST
40226: LIST
40227: PUSH
40228: LD_INT 25
40230: PUSH
40231: LD_INT 16
40233: PUSH
40234: EMPTY
40235: LIST
40236: LIST
40237: PUSH
40238: LD_INT 25
40240: PUSH
40241: LD_INT 17
40243: PUSH
40244: EMPTY
40245: LIST
40246: LIST
40247: PUSH
40248: EMPTY
40249: LIST
40250: LIST
40251: LIST
40252: LIST
40253: LIST
40254: PUSH
40255: EMPTY
40256: LIST
40257: LIST
40258: PPUSH
40259: CALL_OW 69
40263: ST_TO_ADDR
// end ;
40264: LD_VAR 0 2
40268: RET
// export function GetMainPlayerCharacters ; begin
40269: LD_INT 0
40271: PPUSH
// result = [ Heike , Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt , Martin , Louis , Khattam , upf_deserter , Willard , freelancers_leader ] ;
40272: LD_ADDR_VAR 0 1
40276: PUSH
40277: LD_EXP 7
40281: PUSH
40282: LD_EXP 8
40286: PUSH
40287: LD_EXP 9
40291: PUSH
40292: LD_EXP 10
40296: PUSH
40297: LD_EXP 11
40301: PUSH
40302: LD_EXP 12
40306: PUSH
40307: LD_EXP 13
40311: PUSH
40312: LD_EXP 14
40316: PUSH
40317: LD_EXP 15
40321: PUSH
40322: LD_EXP 16
40326: PUSH
40327: LD_EXP 17
40331: PUSH
40332: LD_EXP 18
40336: PUSH
40337: LD_EXP 19
40341: PUSH
40342: LD_EXP 24
40346: PUSH
40347: LD_EXP 25
40351: PUSH
40352: EMPTY
40353: LIST
40354: LIST
40355: LIST
40356: LIST
40357: LIST
40358: LIST
40359: LIST
40360: LIST
40361: LIST
40362: LIST
40363: LIST
40364: LIST
40365: LIST
40366: LIST
40367: LIST
40368: ST_TO_ADDR
// end ;
40369: LD_VAR 0 1
40373: RET
// export function GetNonmainPlayerCharacters ; begin
40374: LD_INT 0
40376: PPUSH
// result = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) diff ( GetApes ( you ) ^ GetMainPlayerCharacters ) ;
40377: LD_ADDR_VAR 0 1
40381: PUSH
40382: LD_INT 22
40384: PUSH
40385: LD_EXP 2
40389: PUSH
40390: EMPTY
40391: LIST
40392: LIST
40393: PUSH
40394: LD_INT 21
40396: PUSH
40397: LD_INT 1
40399: PUSH
40400: EMPTY
40401: LIST
40402: LIST
40403: PUSH
40404: EMPTY
40405: LIST
40406: LIST
40407: PPUSH
40408: CALL_OW 69
40412: PUSH
40413: LD_EXP 2
40417: PPUSH
40418: CALL 40185 0 1
40422: PUSH
40423: CALL 40269 0 0
40427: ADD
40428: DIFF
40429: ST_TO_ADDR
// end ;
40430: LD_VAR 0 1
40434: RET
// every 0 0$1.6 do var i , lab , base ;
40435: GO 40437
40437: DISABLE
40438: LD_INT 0
40440: PPUSH
40441: PPUSH
40442: PPUSH
// begin base = 1 ;
40443: LD_ADDR_VAR 0 3
40447: PUSH
40448: LD_INT 1
40450: ST_TO_ADDR
// SetTech ( tech_sibdet , americans , state_researched ) ;
40451: LD_INT 20
40453: PPUSH
40454: LD_EXP 5
40458: PPUSH
40459: LD_INT 2
40461: PPUSH
40462: CALL_OW 322
// SetTech ( tech_sibpow , americans , state_researched ) ;
40466: LD_INT 21
40468: PPUSH
40469: LD_EXP 5
40473: PPUSH
40474: LD_INT 2
40476: PPUSH
40477: CALL_OW 322
// SetTech ( tech_sibeng , americans , state_researched ) ;
40481: LD_INT 22
40483: PPUSH
40484: LD_EXP 5
40488: PPUSH
40489: LD_INT 2
40491: PPUSH
40492: CALL_OW 322
// SetTech ( tech_gun , americans , state_researched ) ;
40496: LD_INT 39
40498: PPUSH
40499: LD_EXP 5
40503: PPUSH
40504: LD_INT 2
40506: PPUSH
40507: CALL_OW 322
// SetTech ( tech_rocket , americans , state_researched ) ;
40511: LD_INT 40
40513: PPUSH
40514: LD_EXP 5
40518: PPUSH
40519: LD_INT 2
40521: PPUSH
40522: CALL_OW 322
// wait ( [ 70 70$0 , 60 60$0 , 55 55$0 ] [ difficulty ] ) ;
40526: LD_INT 147000
40528: PUSH
40529: LD_INT 126000
40531: PUSH
40532: LD_INT 115500
40534: PUSH
40535: EMPTY
40536: LIST
40537: LIST
40538: LIST
40539: PUSH
40540: LD_OWVAR 67
40544: ARRAY
40545: PPUSH
40546: CALL_OW 67
// while not Researched ( americans , tech_sibfiss ) do
40550: LD_EXP 5
40554: PPUSH
40555: LD_INT 25
40557: PPUSH
40558: CALL_OW 325
40562: NOT
40563: IFFALSE 40732
// begin wait ( 0 0$3 ) ;
40565: LD_INT 105
40567: PPUSH
40568: CALL_OW 67
// if sib_lab = 0 then
40572: LD_EXP 93
40576: PUSH
40577: LD_INT 0
40579: EQUAL
40580: IFFALSE 40696
// 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
40582: LD_ADDR_VAR 0 1
40586: PUSH
40587: LD_EXP 45
40591: PUSH
40592: LD_VAR 0 3
40596: ARRAY
40597: PPUSH
40598: LD_INT 2
40600: PUSH
40601: LD_INT 30
40603: PUSH
40604: LD_INT 6
40606: PUSH
40607: EMPTY
40608: LIST
40609: LIST
40610: PUSH
40611: LD_INT 30
40613: PUSH
40614: LD_INT 7
40616: PUSH
40617: EMPTY
40618: LIST
40619: LIST
40620: PUSH
40621: LD_INT 30
40623: PUSH
40624: LD_INT 8
40626: PUSH
40627: EMPTY
40628: LIST
40629: LIST
40630: PUSH
40631: EMPTY
40632: LIST
40633: LIST
40634: LIST
40635: LIST
40636: PPUSH
40637: CALL_OW 72
40641: PUSH
40642: FOR_IN
40643: IFFALSE 40694
// if b_lab_siberium in [ GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) ] then
40645: LD_INT 11
40647: PUSH
40648: LD_VAR 0 1
40652: PPUSH
40653: LD_INT 1
40655: PPUSH
40656: CALL_OW 268
40660: PUSH
40661: LD_VAR 0 1
40665: PPUSH
40666: LD_INT 2
40668: PPUSH
40669: CALL_OW 268
40673: PUSH
40674: EMPTY
40675: LIST
40676: LIST
40677: IN
40678: IFFALSE 40692
// begin sib_lab = i ;
40680: LD_ADDR_EXP 93
40684: PUSH
40685: LD_VAR 0 1
40689: ST_TO_ADDR
// break ;
40690: GO 40694
// end ;
40692: GO 40642
40694: POP
40695: POP
// end ; if IsOk ( sib_lab ) and IsIdle ( sib_lab ) then
40696: LD_EXP 93
40700: PPUSH
40701: CALL_OW 302
40705: PUSH
40706: LD_EXP 93
40710: PPUSH
40711: CALL_OW 316
40715: AND
40716: IFFALSE 40730
// ComResearch ( sib_lab , tech_sibfiss ) ;
40718: LD_EXP 93
40722: PPUSH
40723: LD_INT 25
40725: PPUSH
40726: CALL_OW 124
// end ;
40730: GO 40550
// while FilterAllUnits ( [ [ f_side , americans ] , [ f_weapon , us_siberium_rocket ] ] ) = 0 do
40732: LD_INT 22
40734: PUSH
40735: LD_EXP 5
40739: PUSH
40740: EMPTY
40741: LIST
40742: LIST
40743: PUSH
40744: LD_INT 34
40746: PUSH
40747: LD_INT 8
40749: PUSH
40750: EMPTY
40751: LIST
40752: LIST
40753: PUSH
40754: EMPTY
40755: LIST
40756: LIST
40757: PPUSH
40758: CALL_OW 69
40762: PUSH
40763: LD_INT 0
40765: EQUAL
40766: IFFALSE 40835
// begin wait ( 0 0$3 ) ;
40768: LD_INT 105
40770: PPUSH
40771: CALL_OW 67
// if IsOk ( sib_rocket_factory ) and GetBType ( sib_rocket_factory ) = b_factory and IsIdle ( sib_rocket_factory ) then
40775: LD_EXP 91
40779: PPUSH
40780: CALL_OW 302
40784: PUSH
40785: LD_EXP 91
40789: PPUSH
40790: CALL_OW 266
40794: PUSH
40795: LD_INT 3
40797: EQUAL
40798: AND
40799: PUSH
40800: LD_EXP 91
40804: PPUSH
40805: CALL_OW 316
40809: AND
40810: IFFALSE 40833
// ComConstruct ( sib_rocket_factory , us_heavy_tracked , engine_siberite , control_manual , us_siberium_rocket ) ;
40812: LD_EXP 91
40816: PPUSH
40817: LD_INT 4
40819: PPUSH
40820: LD_INT 3
40822: PPUSH
40823: LD_INT 1
40825: PPUSH
40826: LD_INT 8
40828: PPUSH
40829: CALL_OW 125
// end ;
40833: GO 40732
// end ;
40835: PPOPN 3
40837: END
// on ResearchComplete ( technology , lab ) do begin if GetSide ( lab ) = you and technology = tech_biodet and IsOk ( MarkB ) then
40838: LD_VAR 0 2
40842: PPUSH
40843: CALL_OW 255
40847: PUSH
40848: LD_EXP 2
40852: EQUAL
40853: PUSH
40854: LD_VAR 0 1
40858: PUSH
40859: LD_INT 8
40861: EQUAL
40862: AND
40863: PUSH
40864: LD_EXP 14
40868: PPUSH
40869: CALL_OW 302
40873: AND
40874: IFFALSE 41004
// begin DialogueOn ;
40876: CALL_OW 6
// ForceSay ( Heike , D6-H-1 ) ;
40880: LD_EXP 7
40884: PPUSH
40885: LD_STRING D6-H-1
40887: PPUSH
40888: CALL_OW 91
// Say ( MarkB , D6-Ma-1 ) ;
40892: LD_EXP 14
40896: PPUSH
40897: LD_STRING D6-Ma-1
40899: PPUSH
40900: CALL_OW 88
// ForceSay ( Heike , D6-H-2 ) ;
40904: LD_EXP 7
40908: PPUSH
40909: LD_STRING D6-H-2
40911: PPUSH
40912: CALL_OW 91
// Say ( MarkB , D6-Ma-2 ) ;
40916: LD_EXP 14
40920: PPUSH
40921: LD_STRING D6-Ma-2
40923: PPUSH
40924: CALL_OW 88
// ForceSay ( Heike , D6-H-3 ) ;
40928: LD_EXP 7
40932: PPUSH
40933: LD_STRING D6-H-3
40935: PPUSH
40936: CALL_OW 91
// Say ( MarkB , D6-Ma-3 ) ;
40940: LD_EXP 14
40944: PPUSH
40945: LD_STRING D6-Ma-3
40947: PPUSH
40948: CALL_OW 88
// ForceSay ( Heike , D6-H-4 ) ;
40952: LD_EXP 7
40956: PPUSH
40957: LD_STRING D6-H-4
40959: PPUSH
40960: CALL_OW 91
// Say ( MarkB , D6-Ma-4 ) ;
40964: LD_EXP 14
40968: PPUSH
40969: LD_STRING D6-Ma-4
40971: PPUSH
40972: CALL_OW 88
// ForceSay ( Heike , D6-H-5 ) ;
40976: LD_EXP 7
40980: PPUSH
40981: LD_STRING D6-H-5
40983: PPUSH
40984: CALL_OW 91
// Say ( MarkB , D6-Ma-5 ) ;
40988: LD_EXP 14
40992: PPUSH
40993: LD_STRING D6-Ma-5
40995: PPUSH
40996: CALL_OW 88
// DialogueOff ;
41000: CALL_OW 7
// end ; if GetSide ( lab ) = you and technology = tech_stimdrugs then
41004: LD_VAR 0 2
41008: PPUSH
41009: CALL_OW 255
41013: PUSH
41014: LD_EXP 2
41018: EQUAL
41019: PUSH
41020: LD_VAR 0 1
41024: PUSH
41025: LD_INT 5
41027: EQUAL
41028: AND
41029: IFFALSE 41046
// SetTech ( tech_stimdrugs , you_alt , state_researched ) ;
41031: LD_INT 5
41033: PPUSH
41034: LD_EXP 4
41038: PPUSH
41039: LD_INT 2
41041: PPUSH
41042: CALL_OW 322
// end ;
41046: PPOPN 2
41048: END
// every 0 0$1.4 do var i , temp_list , un , time , extra_time ; var louis_speaker , gordon_speaker ;
41049: GO 41051
41051: DISABLE
41052: LD_INT 0
41054: PPUSH
41055: PPUSH
41056: PPUSH
41057: PPUSH
41058: PPUSH
41059: PPUSH
41060: PPUSH
// begin extra_time = [ 1 1$30 , 0 0$45 , 0 0$0 ] [ difficulty ] ;
41061: LD_ADDR_VAR 0 5
41065: PUSH
41066: LD_INT 3150
41068: PUSH
41069: LD_INT 1575
41071: PUSH
41072: LD_INT 0
41074: PUSH
41075: EMPTY
41076: LIST
41077: LIST
41078: LIST
41079: PUSH
41080: LD_OWVAR 67
41084: ARRAY
41085: ST_TO_ADDR
// wait ( Rand ( 6 6$0 , 7 7$0 ) ) ;
41086: LD_INT 12600
41088: PPUSH
41089: LD_INT 14700
41091: PPUSH
41092: CALL_OW 12
41096: PPUSH
41097: CALL_OW 67
// DialogueOn ;
41101: CALL_OW 6
// temp_list = UnitFilter ( [ Sonya , MarkB , Khattam ] , [ f_ok ] ) ;
41105: LD_ADDR_VAR 0 2
41109: PUSH
41110: LD_EXP 9
41114: PUSH
41115: LD_EXP 14
41119: PUSH
41120: LD_EXP 18
41124: PUSH
41125: EMPTY
41126: LIST
41127: LIST
41128: LIST
41129: PPUSH
41130: LD_INT 50
41132: PUSH
41133: EMPTY
41134: LIST
41135: PPUSH
41136: CALL_OW 72
41140: ST_TO_ADDR
// if temp_list > 0 then
41141: LD_VAR 0 2
41145: PUSH
41146: LD_INT 0
41148: GREATER
41149: IFFALSE 41305
// begin un = temp_list [ Rand ( 1 , temp_list ) ] ;
41151: LD_ADDR_VAR 0 3
41155: PUSH
41156: LD_VAR 0 2
41160: PUSH
41161: LD_INT 1
41163: PPUSH
41164: LD_VAR 0 2
41168: PPUSH
41169: CALL_OW 12
41173: ARRAY
41174: ST_TO_ADDR
// case un of Sonya :
41175: LD_VAR 0 3
41179: PUSH
41180: LD_EXP 9
41184: DOUBLE
41185: EQUAL
41186: IFTRUE 41190
41188: GO 41205
41190: POP
// Say ( un , D3-So-1 ) ; MarkB :
41191: LD_VAR 0 3
41195: PPUSH
41196: LD_STRING D3-So-1
41198: PPUSH
41199: CALL_OW 88
41203: GO 41305
41205: LD_EXP 14
41209: DOUBLE
41210: EQUAL
41211: IFTRUE 41215
41213: GO 41279
41215: POP
// begin Say ( un , D3-Ma-1 ) ;
41216: LD_VAR 0 3
41220: PPUSH
41221: LD_STRING D3-Ma-1
41223: PPUSH
41224: CALL_OW 88
// if IsOk ( Ralph ) then
41228: LD_EXP 11
41232: PPUSH
41233: CALL_OW 302
41237: IFFALSE 41253
// Say ( Ralph , D3-Ra-1 ) else
41239: LD_EXP 11
41243: PPUSH
41244: LD_STRING D3-Ra-1
41246: PPUSH
41247: CALL_OW 88
41251: GO 41265
// Say ( Heike , D3-H-1 ) ;
41253: LD_EXP 7
41257: PPUSH
41258: LD_STRING D3-H-1
41260: PPUSH
41261: CALL_OW 88
// Say ( un , D3-Ma-2 ) ;
41265: LD_VAR 0 3
41269: PPUSH
41270: LD_STRING D3-Ma-2
41272: PPUSH
41273: CALL_OW 88
// end ; Khattam :
41277: GO 41305
41279: LD_EXP 18
41283: DOUBLE
41284: EQUAL
41285: IFTRUE 41289
41287: GO 41304
41289: POP
// Say ( un , D3-Kh-1 ) ; end ;
41290: LD_VAR 0 3
41294: PPUSH
41295: LD_STRING D3-Kh-1
41297: PPUSH
41298: CALL_OW 88
41302: GO 41305
41304: POP
// end ; SayRadio ( Hugh , D3-Hu-1 ) ;
41305: LD_EXP 28
41309: PPUSH
41310: LD_STRING D3-Hu-1
41312: PPUSH
41313: CALL_OW 94
// SayRadio ( Powell , D3-Po-1 ) ;
41317: LD_EXP 27
41321: PPUSH
41322: LD_STRING D3-Po-1
41324: PPUSH
41325: CALL_OW 94
// SayRadio ( Hugh , D3-Hu-2 ) ;
41329: LD_EXP 28
41333: PPUSH
41334: LD_STRING D3-Hu-2
41336: PPUSH
41337: CALL_OW 94
// SayRadio ( Powell , D3-Po-2 ) ;
41341: LD_EXP 27
41345: PPUSH
41346: LD_STRING D3-Po-2
41348: PPUSH
41349: CALL_OW 94
// Say ( Heike , D3-H-2 ) ;
41353: LD_EXP 7
41357: PPUSH
41358: LD_STRING D3-H-2
41360: PPUSH
41361: CALL_OW 88
// if IsOk ( Khattam ) then
41365: LD_EXP 18
41369: PPUSH
41370: CALL_OW 302
41374: IFFALSE 41390
// Say ( Khattam , D3-Kh-2 ) else
41376: LD_EXP 18
41380: PPUSH
41381: LD_STRING D3-Kh-2
41383: PPUSH
41384: CALL_OW 88
41388: GO 41438
// if IsOk ( Sonya ) then
41390: LD_EXP 9
41394: PPUSH
41395: CALL_OW 302
41399: IFFALSE 41415
// Say ( Sonya , D3-So-2 ) else
41401: LD_EXP 9
41405: PPUSH
41406: LD_STRING D3-So-2
41408: PPUSH
41409: CALL_OW 88
41413: GO 41438
// if IsOk ( MarkB ) then
41415: LD_EXP 14
41419: PPUSH
41420: CALL_OW 302
41424: IFFALSE 41438
// Say ( MarkB , D3-Ma-3 ) ;
41426: LD_EXP 14
41430: PPUSH
41431: LD_STRING D3-Ma-3
41433: PPUSH
41434: CALL_OW 88
// Say ( Heike , D3-H-3 ) ;
41438: LD_EXP 7
41442: PPUSH
41443: LD_STRING D3-H-3
41445: PPUSH
41446: CALL_OW 88
// Say ( Heike , D3-H-4 ) ;
41450: LD_EXP 7
41454: PPUSH
41455: LD_STRING D3-H-4
41457: PPUSH
41458: CALL_OW 88
// if IsOk ( MarkB ) then
41462: LD_EXP 14
41466: PPUSH
41467: CALL_OW 302
41471: IFFALSE 41497
// begin Say ( MarkB , D3-Ma-4 ) ;
41473: LD_EXP 14
41477: PPUSH
41478: LD_STRING D3-Ma-4
41480: PPUSH
41481: CALL_OW 88
// Say ( Heike , D3-H-5 ) ;
41485: LD_EXP 7
41489: PPUSH
41490: LD_STRING D3-H-5
41492: PPUSH
41493: CALL_OW 88
// end ; Say ( Heike , D3-H-6 ) ;
41497: LD_EXP 7
41501: PPUSH
41502: LD_STRING D3-H-6
41504: PPUSH
41505: CALL_OW 88
// DialogueOff ;
41509: CALL_OW 7
// buildup_objective_can_be_completed = true ;
41513: LD_ADDR_EXP 95
41517: PUSH
41518: LD_INT 1
41520: ST_TO_ADDR
// if player_base_b_types = 0 then
41521: LD_EXP 94
41525: PUSH
41526: LD_INT 0
41528: EQUAL
41529: IFFALSE 41538
// ChangeMissionObjectives ( Moutbuildup ) ;
41531: LD_STRING Moutbuildup
41533: PPUSH
41534: CALL_OW 337
// wait ( 0 0$0.2 ) ;
41538: LD_INT 7
41540: PPUSH
41541: CALL_OW 67
// ChangeMissionObjectives ( M2 ) ;
41545: LD_STRING M2
41547: PPUSH
41548: CALL_OW 337
// time = Rand ( 1 1$0 , 2 2$0 ) ;
41552: LD_ADDR_VAR 0 4
41556: PUSH
41557: LD_INT 2100
41559: PPUSH
41560: LD_INT 4200
41562: PPUSH
41563: CALL_OW 12
41567: ST_TO_ADDR
// while time > 0 0$0 and am_scientists_escape_status <> 2 do
41568: LD_VAR 0 4
41572: PUSH
41573: LD_INT 0
41575: GREATER
41576: PUSH
41577: LD_EXP 111
41581: PUSH
41582: LD_INT 2
41584: NONEQUAL
41585: AND
41586: IFFALSE 41611
// begin wait ( 0 0$1 ) ;
41588: LD_INT 35
41590: PPUSH
41591: CALL_OW 67
// time = time - 0 0$1 ;
41595: LD_ADDR_VAR 0 4
41599: PUSH
41600: LD_VAR 0 4
41604: PUSH
41605: LD_INT 35
41607: MINUS
41608: ST_TO_ADDR
// end ;
41609: GO 41568
// if IsLive ( Khattam ) and am_scientists_escape_status <> 2 then
41611: LD_EXP 18
41615: PPUSH
41616: CALL_OW 300
41620: PUSH
41621: LD_EXP 111
41625: PUSH
41626: LD_INT 2
41628: NONEQUAL
41629: AND
41630: IFFALSE 42077
// begin un = 0 ;
41632: LD_ADDR_VAR 0 3
41636: PUSH
41637: LD_INT 0
41639: ST_TO_ADDR
// DialogueOn ;
41640: CALL_OW 6
// if IsOk ( Sonya ) then
41644: LD_EXP 9
41648: PPUSH
41649: CALL_OW 302
41653: IFFALSE 41703
// begin un = Sonya ;
41655: LD_ADDR_VAR 0 3
41659: PUSH
41660: LD_EXP 9
41664: ST_TO_ADDR
// Say ( Sonya , D4-So-1 ) ;
41665: LD_EXP 9
41669: PPUSH
41670: LD_STRING D4-So-1
41672: PPUSH
41673: CALL_OW 88
// Say ( Sonya , D4-So-2 ) ;
41677: LD_EXP 9
41681: PPUSH
41682: LD_STRING D4-So-2
41684: PPUSH
41685: CALL_OW 88
// Say ( Sonya , D4-So-3 ) ;
41689: LD_EXP 9
41693: PPUSH
41694: LD_STRING D4-So-3
41696: PPUSH
41697: CALL_OW 88
// end else
41701: GO 41847
// if IsOk ( MarkB ) then
41703: LD_EXP 14
41707: PPUSH
41708: CALL_OW 302
41712: IFFALSE 41762
// begin un = MarkB ;
41714: LD_ADDR_VAR 0 3
41718: PUSH
41719: LD_EXP 14
41723: ST_TO_ADDR
// Say ( MarkB , D4-Ma-1 ) ;
41724: LD_EXP 14
41728: PPUSH
41729: LD_STRING D4-Ma-1
41731: PPUSH
41732: CALL_OW 88
// Say ( MarkB , D4-Ma-2 ) ;
41736: LD_EXP 14
41740: PPUSH
41741: LD_STRING D4-Ma-2
41743: PPUSH
41744: CALL_OW 88
// Say ( MarkB , D4-Ma-3 ) ;
41748: LD_EXP 14
41752: PPUSH
41753: LD_STRING D4-Ma-3
41755: PPUSH
41756: CALL_OW 88
// end else
41760: GO 41847
// begin temp_list = GetNonmainPlayerCharacters ;
41762: LD_ADDR_VAR 0 2
41766: PUSH
41767: CALL 40374 0 0
41771: ST_TO_ADDR
// if temp_list > 0 then
41772: LD_VAR 0 2
41776: PUSH
41777: LD_INT 0
41779: GREATER
41780: IFFALSE 41847
// begin un = temp_list [ Rand ( 1 , temp_list ) ] ;
41782: LD_ADDR_VAR 0 3
41786: PUSH
41787: LD_VAR 0 2
41791: PUSH
41792: LD_INT 1
41794: PPUSH
41795: LD_VAR 0 2
41799: PPUSH
41800: CALL_OW 12
41804: ARRAY
41805: ST_TO_ADDR
// if GetSex ( un ) = sex_male then
41806: LD_VAR 0 3
41810: PPUSH
41811: CALL_OW 258
41815: PUSH
41816: LD_INT 1
41818: EQUAL
41819: IFFALSE 41835
// Say ( un , D4-SomeM-1 ) else
41821: LD_VAR 0 3
41825: PPUSH
41826: LD_STRING D4-SomeM-1
41828: PPUSH
41829: CALL_OW 88
41833: GO 41847
// Say ( un , D4-SomeF-1 ) ;
41835: LD_VAR 0 3
41839: PPUSH
41840: LD_STRING D4-SomeF-1
41842: PPUSH
41843: CALL_OW 88
// end ; end ; if un > 0 then
41847: LD_VAR 0 3
41851: PUSH
41852: LD_INT 0
41854: GREATER
41855: IFFALSE 42073
// begin dwait ( 0 0$0.2 ) ;
41857: LD_INT 7
41859: PPUSH
41860: CALL_OW 68
// khattam_choice = Query ( QKhattamWorry ) ;
41864: LD_ADDR_EXP 96
41868: PUSH
41869: LD_STRING QKhattamWorry
41871: PPUSH
41872: CALL_OW 97
41876: ST_TO_ADDR
// case khattam_choice of 1 :
41877: LD_EXP 96
41881: PUSH
41882: LD_INT 1
41884: DOUBLE
41885: EQUAL
41886: IFTRUE 41890
41888: GO 41917
41890: POP
// begin Say ( Heike , D4-1,2-H-1 ) ;
41891: LD_EXP 7
41895: PPUSH
41896: LD_STRING D4-1,2-H-1
41898: PPUSH
41899: CALL_OW 88
// Say ( Khattam , D4-1-Kh-1 ) ;
41903: LD_EXP 18
41907: PPUSH
41908: LD_STRING D4-1-Kh-1
41910: PPUSH
41911: CALL_OW 88
// end ; 2 :
41915: GO 42073
41917: LD_INT 2
41919: DOUBLE
41920: EQUAL
41921: IFTRUE 41925
41923: GO 41952
41925: POP
// begin Say ( Heike , D4-1,2-H-1 ) ;
41926: LD_EXP 7
41930: PPUSH
41931: LD_STRING D4-1,2-H-1
41933: PPUSH
41934: CALL_OW 88
// Say ( Khattam , D4-2-Kh-1 ) ;
41938: LD_EXP 18
41942: PPUSH
41943: LD_STRING D4-2-Kh-1
41945: PPUSH
41946: CALL_OW 88
// end ; 3 :
41950: GO 42073
41952: LD_INT 3
41954: DOUBLE
41955: EQUAL
41956: IFTRUE 41960
41958: GO 42072
41960: POP
// begin Say ( Heike , D4-3-H-1 ) ;
41961: LD_EXP 7
41965: PPUSH
41966: LD_STRING D4-3-H-1
41968: PPUSH
41969: CALL_OW 88
// case un of Sonya :
41973: LD_VAR 0 3
41977: PUSH
41978: LD_EXP 9
41982: DOUBLE
41983: EQUAL
41984: IFTRUE 41988
41986: GO 42003
41988: POP
// Say ( un , D4-3-So-1 ) ; MarkB :
41989: LD_VAR 0 3
41993: PPUSH
41994: LD_STRING D4-3-So-1
41996: PPUSH
41997: CALL_OW 88
42001: GO 42070
42003: LD_EXP 14
42007: DOUBLE
42008: EQUAL
42009: IFTRUE 42013
42011: GO 42028
42013: POP
// Say ( un , D4-3-Ma-1 ) ; else
42014: LD_VAR 0 3
42018: PPUSH
42019: LD_STRING D4-3-Ma-1
42021: PPUSH
42022: CALL_OW 88
42026: GO 42070
42028: POP
// if GetSex ( un ) = sex_male then
42029: LD_VAR 0 3
42033: PPUSH
42034: CALL_OW 258
42038: PUSH
42039: LD_INT 1
42041: EQUAL
42042: IFFALSE 42058
// Say ( un , D4-3-SomeM-1 ) else
42044: LD_VAR 0 3
42048: PPUSH
42049: LD_STRING D4-3-SomeM-1
42051: PPUSH
42052: CALL_OW 88
42056: GO 42070
// Say ( un , D4-3-SomeF-1 ) ; end ;
42058: LD_VAR 0 3
42062: PPUSH
42063: LD_STRING D4-3-SomeF-1
42065: PPUSH
42066: CALL_OW 88
// end ; end ;
42070: GO 42073
42072: POP
// end ; DialogueOff ;
42073: CALL_OW 7
// end ; time = Rand ( 6 6$0 , 7 7$0 ) + extra_time ;
42077: LD_ADDR_VAR 0 4
42081: PUSH
42082: LD_INT 12600
42084: PPUSH
42085: LD_INT 14700
42087: PPUSH
42088: CALL_OW 12
42092: PUSH
42093: LD_VAR 0 5
42097: PLUS
42098: ST_TO_ADDR
// while time > 0 0$0 and am_scientists_escape_status <> 2 do
42099: LD_VAR 0 4
42103: PUSH
42104: LD_INT 0
42106: GREATER
42107: PUSH
42108: LD_EXP 111
42112: PUSH
42113: LD_INT 2
42115: NONEQUAL
42116: AND
42117: IFFALSE 42142
// begin wait ( 0 0$1 ) ;
42119: LD_INT 35
42121: PPUSH
42122: CALL_OW 67
// time = time - 0 0$1 ;
42126: LD_ADDR_VAR 0 4
42130: PUSH
42131: LD_VAR 0 4
42135: PUSH
42136: LD_INT 35
42138: MINUS
42139: ST_TO_ADDR
// end ;
42140: GO 42099
// if IsLive ( upf_deserter ) and am_scientists_escape_status <> 2 then
42142: LD_EXP 19
42146: PPUSH
42147: CALL_OW 300
42151: PUSH
42152: LD_EXP 111
42156: PUSH
42157: LD_INT 2
42159: NONEQUAL
42160: AND
42161: IFFALSE 42830
// begin temp_list = UnitFilter ( [ Kowalski , Suze ] , [ f_ok ] ) ;
42163: LD_ADDR_VAR 0 2
42167: PUSH
42168: LD_EXP 12
42172: PUSH
42173: LD_EXP 13
42177: PUSH
42178: EMPTY
42179: LIST
42180: LIST
42181: PPUSH
42182: LD_INT 50
42184: PUSH
42185: EMPTY
42186: LIST
42187: PPUSH
42188: CALL_OW 72
42192: ST_TO_ADDR
// if temp_list = 0 then
42193: LD_VAR 0 2
42197: PUSH
42198: LD_INT 0
42200: EQUAL
42201: IFFALSE 42219
// temp_list = GetNonmainPlayerCharacters diff other_freelancers ;
42203: LD_ADDR_VAR 0 2
42207: PUSH
42208: CALL 40374 0 0
42212: PUSH
42213: LD_EXP 26
42217: DIFF
42218: ST_TO_ADDR
// if temp_list > 0 then
42219: LD_VAR 0 2
42223: PUSH
42224: LD_INT 0
42226: GREATER
42227: IFFALSE 42830
// begin DialogueOn ;
42229: CALL_OW 6
// un = temp_list [ Rand ( 1 , temp_list ) ] ;
42233: LD_ADDR_VAR 0 3
42237: PUSH
42238: LD_VAR 0 2
42242: PUSH
42243: LD_INT 1
42245: PPUSH
42246: LD_VAR 0 2
42250: PPUSH
42251: CALL_OW 12
42255: ARRAY
42256: ST_TO_ADDR
// upf_speaker = un ;
42257: LD_ADDR_EXP 101
42261: PUSH
42262: LD_VAR 0 3
42266: ST_TO_ADDR
// if un = Kowalski then
42267: LD_VAR 0 3
42271: PUSH
42272: LD_EXP 12
42276: EQUAL
42277: IFFALSE 42341
// begin Say ( Kowalski , D9-Ko-1 ) ;
42279: LD_EXP 12
42283: PPUSH
42284: LD_STRING D9-Ko-1
42286: PPUSH
42287: CALL_OW 88
// Say ( Kowalski , D9-Ko-2 ) ;
42291: LD_EXP 12
42295: PPUSH
42296: LD_STRING D9-Ko-2
42298: PPUSH
42299: CALL_OW 88
// Say ( Kowalski , D9-Ko-3 ) ;
42303: LD_EXP 12
42307: PPUSH
42308: LD_STRING D9-Ko-3
42310: PPUSH
42311: CALL_OW 88
// Say ( Heike , D9-H-1 ) ;
42315: LD_EXP 7
42319: PPUSH
42320: LD_STRING D9-H-1
42322: PPUSH
42323: CALL_OW 88
// Say ( Kowalski , D9-Ko-4 ) ;
42327: LD_EXP 12
42331: PPUSH
42332: LD_STRING D9-Ko-4
42334: PPUSH
42335: CALL_OW 88
// end else
42339: GO 42487
// begin if un = Suze then
42341: LD_VAR 0 3
42345: PUSH
42346: LD_EXP 13
42350: EQUAL
42351: IFFALSE 42367
// Say ( Suze , D9-Su-1 ) else
42353: LD_EXP 13
42357: PPUSH
42358: LD_STRING D9-Su-1
42360: PPUSH
42361: CALL_OW 88
42365: GO 42408
// if GetSex ( un ) = sex_male then
42367: LD_VAR 0 3
42371: PPUSH
42372: CALL_OW 258
42376: PUSH
42377: LD_INT 1
42379: EQUAL
42380: IFFALSE 42396
// Say ( un , D9-SomeM-1 ) else
42382: LD_VAR 0 3
42386: PPUSH
42387: LD_STRING D9-SomeM-1
42389: PPUSH
42390: CALL_OW 88
42394: GO 42408
// Say ( un , D9-SomeF-1 ) ;
42396: LD_VAR 0 3
42400: PPUSH
42401: LD_STRING D9-SomeF-1
42403: PPUSH
42404: CALL_OW 88
// Say ( Heike , D9-H-2 ) ;
42408: LD_EXP 7
42412: PPUSH
42413: LD_STRING D9-H-2
42415: PPUSH
42416: CALL_OW 88
// if un = Suze then
42420: LD_VAR 0 3
42424: PUSH
42425: LD_EXP 13
42429: EQUAL
42430: IFFALSE 42446
// Say ( Suze , D9-Su-2 ) else
42432: LD_EXP 13
42436: PPUSH
42437: LD_STRING D9-Su-2
42439: PPUSH
42440: CALL_OW 88
42444: GO 42487
// if GetSex ( un ) = sex_male then
42446: LD_VAR 0 3
42450: PPUSH
42451: CALL_OW 258
42455: PUSH
42456: LD_INT 1
42458: EQUAL
42459: IFFALSE 42475
// Say ( un , D9-SomeM-2 ) else
42461: LD_VAR 0 3
42465: PPUSH
42466: LD_STRING D9-SomeM-2
42468: PPUSH
42469: CALL_OW 88
42473: GO 42487
// Say ( un , D9-SomeF-2 ) ;
42475: LD_VAR 0 3
42479: PPUSH
42480: LD_STRING D9-SomeF-2
42482: PPUSH
42483: CALL_OW 88
// end ; dwait ( 0 0$0.2 ) ;
42487: LD_INT 7
42489: PPUSH
42490: CALL_OW 68
// upf_deserter_choice = Query ( QRolfWorry ) ;
42494: LD_ADDR_EXP 100
42498: PUSH
42499: LD_STRING QRolfWorry
42501: PPUSH
42502: CALL_OW 97
42506: ST_TO_ADDR
// case upf_deserter_choice of 1 :
42507: LD_EXP 100
42511: PUSH
42512: LD_INT 1
42514: DOUBLE
42515: EQUAL
42516: IFTRUE 42520
42518: GO 42559
42520: POP
// begin if un = Kowalski then
42521: LD_VAR 0 3
42525: PUSH
42526: LD_EXP 12
42530: EQUAL
42531: IFFALSE 42545
// Say ( Heike , D9-1,2-H-1 ) ;
42533: LD_EXP 7
42537: PPUSH
42538: LD_STRING D9-1,2-H-1
42540: PPUSH
42541: CALL_OW 88
// Say ( upf_deserter , D9-1-Ro-1 ) ;
42545: LD_EXP 19
42549: PPUSH
42550: LD_STRING D9-1-Ro-1
42552: PPUSH
42553: CALL_OW 88
// end ; 2 :
42557: GO 42826
42559: LD_INT 2
42561: DOUBLE
42562: EQUAL
42563: IFTRUE 42567
42565: GO 42618
42567: POP
// begin if un = Kowalski then
42568: LD_VAR 0 3
42572: PUSH
42573: LD_EXP 12
42577: EQUAL
42578: IFFALSE 42592
// Say ( Heike , D9-1,2-H-1 ) ;
42580: LD_EXP 7
42584: PPUSH
42585: LD_STRING D9-1,2-H-1
42587: PPUSH
42588: CALL_OW 88
// Say ( Heike , D9-2-H-2 ) ;
42592: LD_EXP 7
42596: PPUSH
42597: LD_STRING D9-2-H-2
42599: PPUSH
42600: CALL_OW 88
// Say ( upf_deserter , D9-2-Ro-1 ) ;
42604: LD_EXP 19
42608: PPUSH
42609: LD_STRING D9-2-Ro-1
42611: PPUSH
42612: CALL_OW 88
// end ; 3 :
42616: GO 42826
42618: LD_INT 3
42620: DOUBLE
42621: EQUAL
42622: IFTRUE 42626
42624: GO 42825
42626: POP
// begin if un = Kowalski then
42627: LD_VAR 0 3
42631: PUSH
42632: LD_EXP 12
42636: EQUAL
42637: IFFALSE 42665
// begin Say ( Heike , D9-3-H-1a ) ;
42639: LD_EXP 7
42643: PPUSH
42644: LD_STRING D9-3-H-1a
42646: PPUSH
42647: CALL_OW 88
// Say ( Kowalski , D9-3-Ko-1a ) ;
42651: LD_EXP 12
42655: PPUSH
42656: LD_STRING D9-3-Ko-1a
42658: PPUSH
42659: CALL_OW 88
// end else
42663: GO 42823
// begin Say ( Heike , D9-3-H-1b ) ;
42665: LD_EXP 7
42669: PPUSH
42670: LD_STRING D9-3-H-1b
42672: PPUSH
42673: CALL_OW 88
// if un = Suze then
42677: LD_VAR 0 3
42681: PUSH
42682: LD_EXP 13
42686: EQUAL
42687: IFFALSE 42703
// Say ( Suze , D9-3-Su-1b ) else
42689: LD_EXP 13
42693: PPUSH
42694: LD_STRING D9-3-Su-1b
42696: PPUSH
42697: CALL_OW 88
42701: GO 42744
// if GetSex ( un ) = sex_male then
42703: LD_VAR 0 3
42707: PPUSH
42708: CALL_OW 258
42712: PUSH
42713: LD_INT 1
42715: EQUAL
42716: IFFALSE 42732
// Say ( un , D9-3-SomeM-1b ) else
42718: LD_VAR 0 3
42722: PPUSH
42723: LD_STRING D9-3-SomeM-1b
42725: PPUSH
42726: CALL_OW 88
42730: GO 42744
// Say ( un , D9-3-SomeF-1b ) ;
42732: LD_VAR 0 3
42736: PPUSH
42737: LD_STRING D9-3-SomeF-1b
42739: PPUSH
42740: CALL_OW 88
// Say ( Heike , D9-3-H-2b ) ;
42744: LD_EXP 7
42748: PPUSH
42749: LD_STRING D9-3-H-2b
42751: PPUSH
42752: CALL_OW 88
// if un = Suze then
42756: LD_VAR 0 3
42760: PUSH
42761: LD_EXP 13
42765: EQUAL
42766: IFFALSE 42782
// Say ( Suze , D9-3-Su-2b ) else
42768: LD_EXP 13
42772: PPUSH
42773: LD_STRING D9-3-Su-2b
42775: PPUSH
42776: CALL_OW 88
42780: GO 42823
// if GetSex ( un ) = sex_male then
42782: LD_VAR 0 3
42786: PPUSH
42787: CALL_OW 258
42791: PUSH
42792: LD_INT 1
42794: EQUAL
42795: IFFALSE 42811
// Say ( un , D9-3-SomeM-2b ) else
42797: LD_VAR 0 3
42801: PPUSH
42802: LD_STRING D9-3-SomeM-2b
42804: PPUSH
42805: CALL_OW 88
42809: GO 42823
// Say ( un , D9-3-SomeF-2b ) ;
42811: LD_VAR 0 3
42815: PPUSH
42816: LD_STRING D9-3-SomeF-2b
42818: PPUSH
42819: CALL_OW 88
// end ; end ; end ;
42823: GO 42826
42825: POP
// DialogueOff ;
42826: CALL_OW 7
// end ; end ; time = Rand ( 4 4$0 , 5 5$0 ) + extra_time ;
42830: LD_ADDR_VAR 0 4
42834: PUSH
42835: LD_INT 8400
42837: PPUSH
42838: LD_INT 10500
42840: PPUSH
42841: CALL_OW 12
42845: PUSH
42846: LD_VAR 0 5
42850: PLUS
42851: ST_TO_ADDR
// while time > 0 0$0 and am_scientists_escape_status <> 2 do
42852: LD_VAR 0 4
42856: PUSH
42857: LD_INT 0
42859: GREATER
42860: PUSH
42861: LD_EXP 111
42865: PUSH
42866: LD_INT 2
42868: NONEQUAL
42869: AND
42870: IFFALSE 42895
// begin wait ( 0 0$1 ) ;
42872: LD_INT 35
42874: PPUSH
42875: CALL_OW 67
// time = time - 0 0$1 ;
42879: LD_ADDR_VAR 0 4
42883: PUSH
42884: LD_VAR 0 4
42888: PUSH
42889: LD_INT 35
42891: MINUS
42892: ST_TO_ADDR
// end ;
42893: GO 42852
// if IsOk ( Louis ) then
42895: LD_EXP 17
42899: PPUSH
42900: CALL_OW 302
42904: IFFALSE 42918
// un = Louis else
42906: LD_ADDR_VAR 0 3
42910: PUSH
42911: LD_EXP 17
42915: ST_TO_ADDR
42916: GO 42992
// begin temp_list = UnitFilter ( [ MarkB , Sonya ] , [ f_ok ] ) ;
42918: LD_ADDR_VAR 0 2
42922: PUSH
42923: LD_EXP 14
42927: PUSH
42928: LD_EXP 9
42932: PUSH
42933: EMPTY
42934: LIST
42935: LIST
42936: PPUSH
42937: LD_INT 50
42939: PUSH
42940: EMPTY
42941: LIST
42942: PPUSH
42943: CALL_OW 72
42947: ST_TO_ADDR
// if temp_list > 0 then
42948: LD_VAR 0 2
42952: PUSH
42953: LD_INT 0
42955: GREATER
42956: IFFALSE 42984
// un = temp_list [ Rand ( 1 , temp_list ) ] else
42958: LD_ADDR_VAR 0 3
42962: PUSH
42963: LD_VAR 0 2
42967: PUSH
42968: LD_INT 1
42970: PPUSH
42971: LD_VAR 0 2
42975: PPUSH
42976: CALL_OW 12
42980: ARRAY
42981: ST_TO_ADDR
42982: GO 42992
// un = 0 ;
42984: LD_ADDR_VAR 0 3
42988: PUSH
42989: LD_INT 0
42991: ST_TO_ADDR
// end ; if un > 0 and am_scientists_escape_status <> 2 then
42992: LD_VAR 0 3
42996: PUSH
42997: LD_INT 0
42999: GREATER
43000: PUSH
43001: LD_EXP 111
43005: PUSH
43006: LD_INT 2
43008: NONEQUAL
43009: AND
43010: IFFALSE 43281
// begin DialogueOn ;
43012: CALL_OW 6
// case un of Louis :
43016: LD_VAR 0 3
43020: PUSH
43021: LD_EXP 17
43025: DOUBLE
43026: EQUAL
43027: IFTRUE 43031
43029: GO 43106
43031: POP
// begin Say ( un , D5-Lo-1 ) ;
43032: LD_VAR 0 3
43036: PPUSH
43037: LD_STRING D5-Lo-1
43039: PPUSH
43040: CALL_OW 88
// Say ( Heike , D5-H-1a ) ;
43044: LD_EXP 7
43048: PPUSH
43049: LD_STRING D5-H-1a
43051: PPUSH
43052: CALL_OW 88
// Say ( un , D5-Lo-2 ) ;
43056: LD_VAR 0 3
43060: PPUSH
43061: LD_STRING D5-Lo-2
43063: PPUSH
43064: CALL_OW 88
// Say ( Heike , D5-H-2 ) ;
43068: LD_EXP 7
43072: PPUSH
43073: LD_STRING D5-H-2
43075: PPUSH
43076: CALL_OW 88
// Say ( un , D5-Lo-3 ) ;
43080: LD_VAR 0 3
43084: PPUSH
43085: LD_STRING D5-Lo-3
43087: PPUSH
43088: CALL_OW 88
// Say ( Heike , D5-H-3 ) ;
43092: LD_EXP 7
43096: PPUSH
43097: LD_STRING D5-H-3
43099: PPUSH
43100: CALL_OW 88
// end ; MarkB :
43104: GO 43277
43106: LD_EXP 14
43110: DOUBLE
43111: EQUAL
43112: IFTRUE 43116
43114: GO 43191
43116: POP
// begin Say ( un , D5-Ma-1 ) ;
43117: LD_VAR 0 3
43121: PPUSH
43122: LD_STRING D5-Ma-1
43124: PPUSH
43125: CALL_OW 88
// Say ( Heike , D5-H-1b ) ;
43129: LD_EXP 7
43133: PPUSH
43134: LD_STRING D5-H-1b
43136: PPUSH
43137: CALL_OW 88
// Say ( un , D5-Ma-2 ) ;
43141: LD_VAR 0 3
43145: PPUSH
43146: LD_STRING D5-Ma-2
43148: PPUSH
43149: CALL_OW 88
// Say ( Heike , D5-H-2 ) ;
43153: LD_EXP 7
43157: PPUSH
43158: LD_STRING D5-H-2
43160: PPUSH
43161: CALL_OW 88
// Say ( un , D5-Ma-3 ) ;
43165: LD_VAR 0 3
43169: PPUSH
43170: LD_STRING D5-Ma-3
43172: PPUSH
43173: CALL_OW 88
// Say ( Heike , D5-H-3 ) ;
43177: LD_EXP 7
43181: PPUSH
43182: LD_STRING D5-H-3
43184: PPUSH
43185: CALL_OW 88
// end ; Sonya :
43189: GO 43277
43191: LD_EXP 9
43195: DOUBLE
43196: EQUAL
43197: IFTRUE 43201
43199: GO 43276
43201: POP
// begin Say ( un , D5-So-1 ) ;
43202: LD_VAR 0 3
43206: PPUSH
43207: LD_STRING D5-So-1
43209: PPUSH
43210: CALL_OW 88
// Say ( Heike , D5-H-1c ) ;
43214: LD_EXP 7
43218: PPUSH
43219: LD_STRING D5-H-1c
43221: PPUSH
43222: CALL_OW 88
// Say ( un , D5-So-2 ) ;
43226: LD_VAR 0 3
43230: PPUSH
43231: LD_STRING D5-So-2
43233: PPUSH
43234: CALL_OW 88
// Say ( Heike , D5-H-2 ) ;
43238: LD_EXP 7
43242: PPUSH
43243: LD_STRING D5-H-2
43245: PPUSH
43246: CALL_OW 88
// Say ( un , D5-So-3 ) ;
43250: LD_VAR 0 3
43254: PPUSH
43255: LD_STRING D5-So-3
43257: PPUSH
43258: CALL_OW 88
// Say ( Heike , D5-H-3 ) ;
43262: LD_EXP 7
43266: PPUSH
43267: LD_STRING D5-H-3
43269: PPUSH
43270: CALL_OW 88
// end ; end ;
43274: GO 43277
43276: POP
// DialogueOff ;
43277: CALL_OW 7
// end ; SetTech ( 72 , you , state_enabled ) ;
43281: LD_INT 72
43283: PPUSH
43284: LD_EXP 2
43288: PPUSH
43289: LD_INT 1
43291: PPUSH
43292: CALL_OW 322
// time = Rand ( 6 6$0 , 7 7$0 ) + extra_time ;
43296: LD_ADDR_VAR 0 4
43300: PUSH
43301: LD_INT 12600
43303: PPUSH
43304: LD_INT 14700
43306: PPUSH
43307: CALL_OW 12
43311: PUSH
43312: LD_VAR 0 5
43316: PLUS
43317: ST_TO_ADDR
// while time > 0 0$0 and am_scientists_escape_status <> 2 do
43318: LD_VAR 0 4
43322: PUSH
43323: LD_INT 0
43325: GREATER
43326: PUSH
43327: LD_EXP 111
43331: PUSH
43332: LD_INT 2
43334: NONEQUAL
43335: AND
43336: IFFALSE 43361
// begin wait ( 0 0$1 ) ;
43338: LD_INT 35
43340: PPUSH
43341: CALL_OW 67
// time = time - 0 0$1 ;
43345: LD_ADDR_VAR 0 4
43349: PUSH
43350: LD_VAR 0 4
43354: PUSH
43355: LD_INT 35
43357: MINUS
43358: ST_TO_ADDR
// end ;
43359: GO 43318
// if not freelancers_are_dead then
43361: LD_EXP 99
43365: NOT
43366: IFFALSE 43393
// begin freelancers_may_appear = true ;
43368: LD_ADDR_EXP 97
43372: PUSH
43373: LD_INT 1
43375: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
43376: LD_INT 35
43378: PPUSH
43379: CALL_OW 67
// until freelancers_choice > 0 ;
43383: LD_EXP 98
43387: PUSH
43388: LD_INT 0
43390: GREATER
43391: IFFALSE 43376
// end ; time = Rand ( 6 6$0 , 7 7$0 ) + extra_time ;
43393: LD_ADDR_VAR 0 4
43397: PUSH
43398: LD_INT 12600
43400: PPUSH
43401: LD_INT 14700
43403: PPUSH
43404: CALL_OW 12
43408: PUSH
43409: LD_VAR 0 5
43413: PLUS
43414: ST_TO_ADDR
// while time > 0 0$0 and am_scientists_escape_status <> 2 do
43415: LD_VAR 0 4
43419: PUSH
43420: LD_INT 0
43422: GREATER
43423: PUSH
43424: LD_EXP 111
43428: PUSH
43429: LD_INT 2
43431: NONEQUAL
43432: AND
43433: IFFALSE 43458
// begin wait ( 0 0$1 ) ;
43435: LD_INT 35
43437: PPUSH
43438: CALL_OW 67
// time = time - 0 0$1 ;
43442: LD_ADDR_VAR 0 4
43446: PUSH
43447: LD_VAR 0 4
43451: PUSH
43452: LD_INT 35
43454: MINUS
43455: ST_TO_ADDR
// end ;
43456: GO 43415
// if freelancers_choice = 1 and am_scientists_escape_status <> 2 then
43458: LD_EXP 98
43462: PUSH
43463: LD_INT 1
43465: EQUAL
43466: PUSH
43467: LD_EXP 111
43471: PUSH
43472: LD_INT 2
43474: NONEQUAL
43475: AND
43476: IFFALSE 45090
// begin if IsOk ( Louis ) then
43478: LD_EXP 17
43482: PPUSH
43483: CALL_OW 302
43487: IFFALSE 43501
// louis_speaker = Louis else
43489: LD_ADDR_VAR 0 6
43493: PUSH
43494: LD_EXP 17
43498: ST_TO_ADDR
43499: GO 43556
// begin temp_list = UnitFilter ( other_louis_folks , [ f_ok ] ) ;
43501: LD_ADDR_VAR 0 2
43505: PUSH
43506: LD_EXP 20
43510: PPUSH
43511: LD_INT 50
43513: PUSH
43514: EMPTY
43515: LIST
43516: PPUSH
43517: CALL_OW 72
43521: ST_TO_ADDR
// if temp_list > 0 then
43522: LD_VAR 0 2
43526: PUSH
43527: LD_INT 0
43529: GREATER
43530: IFFALSE 43548
// louis_speaker = temp_list [ 1 ] else
43532: LD_ADDR_VAR 0 6
43536: PUSH
43537: LD_VAR 0 2
43541: PUSH
43542: LD_INT 1
43544: ARRAY
43545: ST_TO_ADDR
43546: GO 43556
// louis_speaker = 0 ;
43548: LD_ADDR_VAR 0 6
43552: PUSH
43553: LD_INT 0
43555: ST_TO_ADDR
// end ; if IsOk ( freelancers_leader ) then
43556: LD_EXP 25
43560: PPUSH
43561: CALL_OW 302
43565: IFFALSE 43579
// gordon_speaker = freelancers_leader else
43567: LD_ADDR_VAR 0 7
43571: PUSH
43572: LD_EXP 25
43576: ST_TO_ADDR
43577: GO 43657
// if IsOk ( Willard ) then
43579: LD_EXP 24
43583: PPUSH
43584: CALL_OW 302
43588: IFFALSE 43602
// gordon_speaker = Willard else
43590: LD_ADDR_VAR 0 7
43594: PUSH
43595: LD_EXP 24
43599: ST_TO_ADDR
43600: GO 43657
// begin temp_list = UnitFilter ( other_freelancers , [ f_ok ] ) ;
43602: LD_ADDR_VAR 0 2
43606: PUSH
43607: LD_EXP 26
43611: PPUSH
43612: LD_INT 50
43614: PUSH
43615: EMPTY
43616: LIST
43617: PPUSH
43618: CALL_OW 72
43622: ST_TO_ADDR
// if temp_list > 0 then
43623: LD_VAR 0 2
43627: PUSH
43628: LD_INT 0
43630: GREATER
43631: IFFALSE 43649
// gordon_speaker = temp_list [ 1 ] else
43633: LD_ADDR_VAR 0 7
43637: PUSH
43638: LD_VAR 0 2
43642: PUSH
43643: LD_INT 1
43645: ARRAY
43646: ST_TO_ADDR
43647: GO 43657
// gordon_speaker = 0 ;
43649: LD_ADDR_VAR 0 7
43653: PUSH
43654: LD_INT 0
43656: ST_TO_ADDR
// end ; if louis_speaker > 0 and gordon_speaker > 0 then
43657: LD_VAR 0 6
43661: PUSH
43662: LD_INT 0
43664: GREATER
43665: PUSH
43666: LD_VAR 0 7
43670: PUSH
43671: LD_INT 0
43673: GREATER
43674: AND
43675: IFFALSE 45090
// begin DialogueOn ;
43677: CALL_OW 6
// case louis_speaker of Louis :
43681: LD_VAR 0 6
43685: PUSH
43686: LD_EXP 17
43690: DOUBLE
43691: EQUAL
43692: IFTRUE 43696
43694: GO 43711
43696: POP
// Say ( louis_speaker , D7-Lo-1 ) ; else
43697: LD_VAR 0 6
43701: PPUSH
43702: LD_STRING D7-Lo-1
43704: PPUSH
43705: CALL_OW 88
43709: GO 43753
43711: POP
// if GetSex ( louis_speaker ) = sex_male then
43712: LD_VAR 0 6
43716: PPUSH
43717: CALL_OW 258
43721: PUSH
43722: LD_INT 1
43724: EQUAL
43725: IFFALSE 43741
// Say ( louis_speaker , D7-LoM-1 ) else
43727: LD_VAR 0 6
43731: PPUSH
43732: LD_STRING D7-LoM-1
43734: PPUSH
43735: CALL_OW 88
43739: GO 43753
// Say ( louis_speaker , D7-LoF-1 ) ; end ;
43741: LD_VAR 0 6
43745: PPUSH
43746: LD_STRING D7-LoF-1
43748: PPUSH
43749: CALL_OW 88
// case gordon_speaker of Gordon :
43753: LD_VAR 0 7
43757: PUSH
43758: LD_EXP 23
43762: DOUBLE
43763: EQUAL
43764: IFTRUE 43768
43766: GO 43783
43768: POP
// Say ( gordon_speaker , D7-Go-1 ) ; freelancers_leader :
43769: LD_VAR 0 7
43773: PPUSH
43774: LD_STRING D7-Go-1
43776: PPUSH
43777: CALL_OW 88
43781: GO 43875
43783: LD_EXP 25
43787: DOUBLE
43788: EQUAL
43789: IFTRUE 43793
43791: GO 43808
43793: POP
// Say ( gordon_speaker , D7-FLea-1 ) ; Willard :
43794: LD_VAR 0 7
43798: PPUSH
43799: LD_STRING D7-FLea-1
43801: PPUSH
43802: CALL_OW 88
43806: GO 43875
43808: LD_EXP 24
43812: DOUBLE
43813: EQUAL
43814: IFTRUE 43818
43816: GO 43833
43818: POP
// Say ( gordon_speaker , D7-Wi-1 ) ; else
43819: LD_VAR 0 7
43823: PPUSH
43824: LD_STRING D7-Wi-1
43826: PPUSH
43827: CALL_OW 88
43831: GO 43875
43833: POP
// if GetSex ( gordon_speaker ) = sex_male then
43834: LD_VAR 0 7
43838: PPUSH
43839: CALL_OW 258
43843: PUSH
43844: LD_INT 1
43846: EQUAL
43847: IFFALSE 43863
// Say ( gordon_speaker , D7-GoM-1 ) else
43849: LD_VAR 0 7
43853: PPUSH
43854: LD_STRING D7-GoM-1
43856: PPUSH
43857: CALL_OW 88
43861: GO 43875
// Say ( gordon_speaker , D7-GoF-1 ) ; end ;
43863: LD_VAR 0 7
43867: PPUSH
43868: LD_STRING D7-GoF-1
43870: PPUSH
43871: CALL_OW 88
// case louis_speaker of Louis :
43875: LD_VAR 0 6
43879: PUSH
43880: LD_EXP 17
43884: DOUBLE
43885: EQUAL
43886: IFTRUE 43890
43888: GO 43905
43890: POP
// Say ( louis_speaker , D7-Lo-2 ) ; else
43891: LD_VAR 0 6
43895: PPUSH
43896: LD_STRING D7-Lo-2
43898: PPUSH
43899: CALL_OW 88
43903: GO 43947
43905: POP
// if GetSex ( louis_speaker ) = sex_male then
43906: LD_VAR 0 6
43910: PPUSH
43911: CALL_OW 258
43915: PUSH
43916: LD_INT 1
43918: EQUAL
43919: IFFALSE 43935
// Say ( louis_speaker , D7-LoM-2 ) else
43921: LD_VAR 0 6
43925: PPUSH
43926: LD_STRING D7-LoM-2
43928: PPUSH
43929: CALL_OW 88
43933: GO 43947
// Say ( louis_speaker , D7-LoF-2 ) ; end ;
43935: LD_VAR 0 6
43939: PPUSH
43940: LD_STRING D7-LoF-2
43942: PPUSH
43943: CALL_OW 88
// case gordon_speaker of Gordon :
43947: LD_VAR 0 7
43951: PUSH
43952: LD_EXP 23
43956: DOUBLE
43957: EQUAL
43958: IFTRUE 43962
43960: GO 43977
43962: POP
// Say ( gordon_speaker , D7-Go-2 ) ; freelancers_leader :
43963: LD_VAR 0 7
43967: PPUSH
43968: LD_STRING D7-Go-2
43970: PPUSH
43971: CALL_OW 88
43975: GO 44069
43977: LD_EXP 25
43981: DOUBLE
43982: EQUAL
43983: IFTRUE 43987
43985: GO 44002
43987: POP
// Say ( gordon_speaker , D7-FLea-2 ) ; Willard :
43988: LD_VAR 0 7
43992: PPUSH
43993: LD_STRING D7-FLea-2
43995: PPUSH
43996: CALL_OW 88
44000: GO 44069
44002: LD_EXP 24
44006: DOUBLE
44007: EQUAL
44008: IFTRUE 44012
44010: GO 44027
44012: POP
// Say ( gordon_speaker , D7-Wi-2 ) ; else
44013: LD_VAR 0 7
44017: PPUSH
44018: LD_STRING D7-Wi-2
44020: PPUSH
44021: CALL_OW 88
44025: GO 44069
44027: POP
// if GetSex ( gordon_speaker ) = sex_male then
44028: LD_VAR 0 7
44032: PPUSH
44033: CALL_OW 258
44037: PUSH
44038: LD_INT 1
44040: EQUAL
44041: IFFALSE 44057
// Say ( gordon_speaker , D7-GoM-2 ) else
44043: LD_VAR 0 7
44047: PPUSH
44048: LD_STRING D7-GoM-2
44050: PPUSH
44051: CALL_OW 88
44055: GO 44069
// Say ( gordon_speaker , D7-GoF-2 ) ; end ;
44057: LD_VAR 0 7
44061: PPUSH
44062: LD_STRING D7-GoF-2
44064: PPUSH
44065: CALL_OW 88
// Say ( Heike , D7-H-1 ) ;
44069: LD_EXP 7
44073: PPUSH
44074: LD_STRING D7-H-1
44076: PPUSH
44077: CALL_OW 88
// case louis_speaker of Louis :
44081: LD_VAR 0 6
44085: PUSH
44086: LD_EXP 17
44090: DOUBLE
44091: EQUAL
44092: IFTRUE 44096
44094: GO 44111
44096: POP
// Say ( louis_speaker , D7-Lo-3 ) ; else
44097: LD_VAR 0 6
44101: PPUSH
44102: LD_STRING D7-Lo-3
44104: PPUSH
44105: CALL_OW 88
44109: GO 44153
44111: POP
// if GetSex ( louis_speaker ) = sex_male then
44112: LD_VAR 0 6
44116: PPUSH
44117: CALL_OW 258
44121: PUSH
44122: LD_INT 1
44124: EQUAL
44125: IFFALSE 44141
// Say ( louis_speaker , D7-LoM-3 ) else
44127: LD_VAR 0 6
44131: PPUSH
44132: LD_STRING D7-LoM-3
44134: PPUSH
44135: CALL_OW 88
44139: GO 44153
// Say ( louis_speaker , D7-LoF-3 ) ; end ;
44141: LD_VAR 0 6
44145: PPUSH
44146: LD_STRING D7-LoF-3
44148: PPUSH
44149: CALL_OW 88
// case gordon_speaker of Gordon :
44153: LD_VAR 0 7
44157: PUSH
44158: LD_EXP 23
44162: DOUBLE
44163: EQUAL
44164: IFTRUE 44168
44166: GO 44183
44168: POP
// Say ( gordon_speaker , D7-Go-3 ) ; freelancers_leader :
44169: LD_VAR 0 7
44173: PPUSH
44174: LD_STRING D7-Go-3
44176: PPUSH
44177: CALL_OW 88
44181: GO 44275
44183: LD_EXP 25
44187: DOUBLE
44188: EQUAL
44189: IFTRUE 44193
44191: GO 44208
44193: POP
// Say ( gordon_speaker , D7-FLea-3 ) ; Willard :
44194: LD_VAR 0 7
44198: PPUSH
44199: LD_STRING D7-FLea-3
44201: PPUSH
44202: CALL_OW 88
44206: GO 44275
44208: LD_EXP 24
44212: DOUBLE
44213: EQUAL
44214: IFTRUE 44218
44216: GO 44233
44218: POP
// Say ( gordon_speaker , D7-Wi-3 ) ; else
44219: LD_VAR 0 7
44223: PPUSH
44224: LD_STRING D7-Wi-3
44226: PPUSH
44227: CALL_OW 88
44231: GO 44275
44233: POP
// if GetSex ( gordon_speaker ) = sex_male then
44234: LD_VAR 0 7
44238: PPUSH
44239: CALL_OW 258
44243: PUSH
44244: LD_INT 1
44246: EQUAL
44247: IFFALSE 44263
// Say ( gordon_speaker , D7-GoM-3 ) else
44249: LD_VAR 0 7
44253: PPUSH
44254: LD_STRING D7-GoM-3
44256: PPUSH
44257: CALL_OW 88
44261: GO 44275
// Say ( gordon_speaker , D7-GoF-3 ) ; end ;
44263: LD_VAR 0 7
44267: PPUSH
44268: LD_STRING D7-GoF-3
44270: PPUSH
44271: CALL_OW 88
// case louis_speaker of Louis :
44275: LD_VAR 0 6
44279: PUSH
44280: LD_EXP 17
44284: DOUBLE
44285: EQUAL
44286: IFTRUE 44290
44288: GO 44305
44290: POP
// Say ( louis_speaker , D7-Lo-4 ) ; else
44291: LD_VAR 0 6
44295: PPUSH
44296: LD_STRING D7-Lo-4
44298: PPUSH
44299: CALL_OW 88
44303: GO 44347
44305: POP
// if GetSex ( louis_speaker ) = sex_male then
44306: LD_VAR 0 6
44310: PPUSH
44311: CALL_OW 258
44315: PUSH
44316: LD_INT 1
44318: EQUAL
44319: IFFALSE 44335
// Say ( louis_speaker , D7-LoM-4 ) else
44321: LD_VAR 0 6
44325: PPUSH
44326: LD_STRING D7-LoM-4
44328: PPUSH
44329: CALL_OW 88
44333: GO 44347
// Say ( louis_speaker , D7-LoF-4 ) ; end ;
44335: LD_VAR 0 6
44339: PPUSH
44340: LD_STRING D7-LoF-4
44342: PPUSH
44343: CALL_OW 88
// Say ( Heike , D7-H-2 ) ;
44347: LD_EXP 7
44351: PPUSH
44352: LD_STRING D7-H-2
44354: PPUSH
44355: CALL_OW 88
// case louis_speaker of Louis :
44359: LD_VAR 0 6
44363: PUSH
44364: LD_EXP 17
44368: DOUBLE
44369: EQUAL
44370: IFTRUE 44374
44372: GO 44389
44374: POP
// Say ( louis_speaker , D7-Lo-5 ) ; else
44375: LD_VAR 0 6
44379: PPUSH
44380: LD_STRING D7-Lo-5
44382: PPUSH
44383: CALL_OW 88
44387: GO 44431
44389: POP
// if GetSex ( louis_speaker ) = sex_male then
44390: LD_VAR 0 6
44394: PPUSH
44395: CALL_OW 258
44399: PUSH
44400: LD_INT 1
44402: EQUAL
44403: IFFALSE 44419
// Say ( louis_speaker , D7-LoM-5 ) else
44405: LD_VAR 0 6
44409: PPUSH
44410: LD_STRING D7-LoM-5
44412: PPUSH
44413: CALL_OW 88
44417: GO 44431
// Say ( louis_speaker , D7-LoF-5 ) ; end ;
44419: LD_VAR 0 6
44423: PPUSH
44424: LD_STRING D7-LoF-5
44426: PPUSH
44427: CALL_OW 88
// case gordon_speaker of Gordon :
44431: LD_VAR 0 7
44435: PUSH
44436: LD_EXP 23
44440: DOUBLE
44441: EQUAL
44442: IFTRUE 44446
44444: GO 44461
44446: POP
// Say ( gordon_speaker , D7-Go-4 ) ; freelancers_leader :
44447: LD_VAR 0 7
44451: PPUSH
44452: LD_STRING D7-Go-4
44454: PPUSH
44455: CALL_OW 88
44459: GO 44553
44461: LD_EXP 25
44465: DOUBLE
44466: EQUAL
44467: IFTRUE 44471
44469: GO 44486
44471: POP
// Say ( gordon_speaker , D7-FLea-4 ) ; Willard :
44472: LD_VAR 0 7
44476: PPUSH
44477: LD_STRING D7-FLea-4
44479: PPUSH
44480: CALL_OW 88
44484: GO 44553
44486: LD_EXP 24
44490: DOUBLE
44491: EQUAL
44492: IFTRUE 44496
44494: GO 44511
44496: POP
// Say ( gordon_speaker , D7-Wi-4 ) ; else
44497: LD_VAR 0 7
44501: PPUSH
44502: LD_STRING D7-Wi-4
44504: PPUSH
44505: CALL_OW 88
44509: GO 44553
44511: POP
// if GetSex ( gordon_speaker ) = sex_male then
44512: LD_VAR 0 7
44516: PPUSH
44517: CALL_OW 258
44521: PUSH
44522: LD_INT 1
44524: EQUAL
44525: IFFALSE 44541
// Say ( gordon_speaker , D7-GoM-4 ) else
44527: LD_VAR 0 7
44531: PPUSH
44532: LD_STRING D7-GoM-4
44534: PPUSH
44535: CALL_OW 88
44539: GO 44553
// Say ( gordon_speaker , D7-GoF-4 ) ; end ;
44541: LD_VAR 0 7
44545: PPUSH
44546: LD_STRING D7-GoF-4
44548: PPUSH
44549: CALL_OW 88
// dwait ( 0 0$0.2 ) ;
44553: LD_INT 7
44555: PPUSH
44556: CALL_OW 68
// louis_gordon_dispute_choice = Query ( QGordonLouisDispute ) ;
44560: LD_ADDR_EXP 102
44564: PUSH
44565: LD_STRING QGordonLouisDispute
44567: PPUSH
44568: CALL_OW 97
44572: ST_TO_ADDR
// case louis_gordon_dispute_choice of 1 :
44573: LD_EXP 102
44577: PUSH
44578: LD_INT 1
44580: DOUBLE
44581: EQUAL
44582: IFTRUE 44586
44584: GO 44723
44586: POP
// begin Say ( Heike , D7-1-H-1 ) ;
44587: LD_EXP 7
44591: PPUSH
44592: LD_STRING D7-1-H-1
44594: PPUSH
44595: CALL_OW 88
// case gordon_speaker of Gordon :
44599: LD_VAR 0 7
44603: PUSH
44604: LD_EXP 23
44608: DOUBLE
44609: EQUAL
44610: IFTRUE 44614
44612: GO 44629
44614: POP
// Say ( gordon_speaker , D7-1-Go-1 ) ; freelancers_leader :
44615: LD_VAR 0 7
44619: PPUSH
44620: LD_STRING D7-1-Go-1
44622: PPUSH
44623: CALL_OW 88
44627: GO 44721
44629: LD_EXP 25
44633: DOUBLE
44634: EQUAL
44635: IFTRUE 44639
44637: GO 44654
44639: POP
// Say ( gordon_speaker , D7-1-FLea-1 ) ; Willard :
44640: LD_VAR 0 7
44644: PPUSH
44645: LD_STRING D7-1-FLea-1
44647: PPUSH
44648: CALL_OW 88
44652: GO 44721
44654: LD_EXP 24
44658: DOUBLE
44659: EQUAL
44660: IFTRUE 44664
44662: GO 44679
44664: POP
// Say ( gordon_speaker , D7-1-Wi-1 ) ; else
44665: LD_VAR 0 7
44669: PPUSH
44670: LD_STRING D7-1-Wi-1
44672: PPUSH
44673: CALL_OW 88
44677: GO 44721
44679: POP
// if GetSex ( gordon_speaker ) = sex_male then
44680: LD_VAR 0 7
44684: PPUSH
44685: CALL_OW 258
44689: PUSH
44690: LD_INT 1
44692: EQUAL
44693: IFFALSE 44709
// Say ( gordon_speaker , D7-1-GoM-1 ) else
44695: LD_VAR 0 7
44699: PPUSH
44700: LD_STRING D7-1-GoM-1
44702: PPUSH
44703: CALL_OW 88
44707: GO 44721
// Say ( gordon_speaker , D7-1-GoF-1 ) ; end ;
44709: LD_VAR 0 7
44713: PPUSH
44714: LD_STRING D7-1-GoF-1
44716: PPUSH
44717: CALL_OW 88
// end ; 2 :
44721: GO 45086
44723: LD_INT 2
44725: DOUBLE
44726: EQUAL
44727: IFTRUE 44731
44729: GO 44928
44731: POP
// begin if louis_speaker = Louis then
44732: LD_VAR 0 6
44736: PUSH
44737: LD_EXP 17
44741: EQUAL
44742: IFFALSE 44758
// Say ( Heike , D7-2-H-1a ) else
44744: LD_EXP 7
44748: PPUSH
44749: LD_STRING D7-2-H-1a
44751: PPUSH
44752: CALL_OW 88
44756: GO 44770
// Say ( Heike , D7-2-H-1b ) ;
44758: LD_EXP 7
44762: PPUSH
44763: LD_STRING D7-2-H-1b
44765: PPUSH
44766: CALL_OW 88
// case louis_speaker of Louis :
44770: LD_VAR 0 6
44774: PUSH
44775: LD_EXP 17
44779: DOUBLE
44780: EQUAL
44781: IFTRUE 44785
44783: GO 44800
44785: POP
// Say ( louis_speaker , D7-2-Lo-1 ) ; else
44786: LD_VAR 0 6
44790: PPUSH
44791: LD_STRING D7-2-Lo-1
44793: PPUSH
44794: CALL_OW 88
44798: GO 44842
44800: POP
// if GetSex ( louis_speaker ) = sex_male then
44801: LD_VAR 0 6
44805: PPUSH
44806: CALL_OW 258
44810: PUSH
44811: LD_INT 1
44813: EQUAL
44814: IFFALSE 44830
// Say ( louis_speaker , D7-2-LoM-1 ) else
44816: LD_VAR 0 6
44820: PPUSH
44821: LD_STRING D7-2-LoM-1
44823: PPUSH
44824: CALL_OW 88
44828: GO 44842
// Say ( louis_speaker , D7-2-LoF-1 ) ; end ;
44830: LD_VAR 0 6
44834: PPUSH
44835: LD_STRING D7-2-LoF-1
44837: PPUSH
44838: CALL_OW 88
// Say ( Heike , D7-2-H-2 ) ;
44842: LD_EXP 7
44846: PPUSH
44847: LD_STRING D7-2-H-2
44849: PPUSH
44850: CALL_OW 88
// case louis_speaker of Louis :
44854: LD_VAR 0 6
44858: PUSH
44859: LD_EXP 17
44863: DOUBLE
44864: EQUAL
44865: IFTRUE 44869
44867: GO 44884
44869: POP
// Say ( louis_speaker , D7-2-Lo-2 ) ; else
44870: LD_VAR 0 6
44874: PPUSH
44875: LD_STRING D7-2-Lo-2
44877: PPUSH
44878: CALL_OW 88
44882: GO 44926
44884: POP
// if GetSex ( louis_speaker ) = sex_male then
44885: LD_VAR 0 6
44889: PPUSH
44890: CALL_OW 258
44894: PUSH
44895: LD_INT 1
44897: EQUAL
44898: IFFALSE 44914
// Say ( louis_speaker , D7-2-LoM-2 ) else
44900: LD_VAR 0 6
44904: PPUSH
44905: LD_STRING D7-2-LoM-2
44907: PPUSH
44908: CALL_OW 88
44912: GO 44926
// Say ( louis_speaker , D7-2-LoF-2 ) ; end ;
44914: LD_VAR 0 6
44918: PPUSH
44919: LD_STRING D7-2-LoF-2
44921: PPUSH
44922: CALL_OW 88
// end ; 3 :
44926: GO 45086
44928: LD_INT 3
44930: DOUBLE
44931: EQUAL
44932: IFTRUE 44936
44934: GO 45085
44936: POP
// begin Say ( Heike , D7-3-H-1 ) ;
44937: LD_EXP 7
44941: PPUSH
44942: LD_STRING D7-3-H-1
44944: PPUSH
44945: CALL_OW 88
// case gordon_speaker of Gordon :
44949: LD_VAR 0 7
44953: PUSH
44954: LD_EXP 23
44958: DOUBLE
44959: EQUAL
44960: IFTRUE 44964
44962: GO 44979
44964: POP
// Say ( gordon_speaker , D7-3-Go-1 ) ; freelancers_leader :
44965: LD_VAR 0 7
44969: PPUSH
44970: LD_STRING D7-3-Go-1
44972: PPUSH
44973: CALL_OW 88
44977: GO 45071
44979: LD_EXP 25
44983: DOUBLE
44984: EQUAL
44985: IFTRUE 44989
44987: GO 45004
44989: POP
// Say ( gordon_speaker , D7-3-FLea-1 ) ; Willard :
44990: LD_VAR 0 7
44994: PPUSH
44995: LD_STRING D7-3-FLea-1
44997: PPUSH
44998: CALL_OW 88
45002: GO 45071
45004: LD_EXP 24
45008: DOUBLE
45009: EQUAL
45010: IFTRUE 45014
45012: GO 45029
45014: POP
// Say ( gordon_speaker , D7-3-Wi-1 ) ; else
45015: LD_VAR 0 7
45019: PPUSH
45020: LD_STRING D7-3-Wi-1
45022: PPUSH
45023: CALL_OW 88
45027: GO 45071
45029: POP
// if GetSex ( gordon_speaker ) = sex_male then
45030: LD_VAR 0 7
45034: PPUSH
45035: CALL_OW 258
45039: PUSH
45040: LD_INT 1
45042: EQUAL
45043: IFFALSE 45059
// Say ( gordon_speaker , D7-3-GoM-1 ) else
45045: LD_VAR 0 7
45049: PPUSH
45050: LD_STRING D7-3-GoM-1
45052: PPUSH
45053: CALL_OW 88
45057: GO 45071
// Say ( gordon_speaker , D7-3-GoF-1 ) ; end ;
45059: LD_VAR 0 7
45063: PPUSH
45064: LD_STRING D7-3-GoF-1
45066: PPUSH
45067: CALL_OW 88
// Say ( Heike , D7-3-H-2 ) ;
45071: LD_EXP 7
45075: PPUSH
45076: LD_STRING D7-3-H-2
45078: PPUSH
45079: CALL_OW 88
// end ; end ;
45083: GO 45086
45085: POP
// DialogueOff ;
45086: CALL_OW 7
// end ; end ; time = Rand ( 6 6$0 , 7 7$0 ) + extra_time ;
45090: LD_ADDR_VAR 0 4
45094: PUSH
45095: LD_INT 12600
45097: PPUSH
45098: LD_INT 14700
45100: PPUSH
45101: CALL_OW 12
45105: PUSH
45106: LD_VAR 0 5
45110: PLUS
45111: ST_TO_ADDR
// while time > 0 0$0 and am_scientists_escape_status <> 2 do
45112: LD_VAR 0 4
45116: PUSH
45117: LD_INT 0
45119: GREATER
45120: PUSH
45121: LD_EXP 111
45125: PUSH
45126: LD_INT 2
45128: NONEQUAL
45129: AND
45130: IFFALSE 45155
// begin wait ( 0 0$1 ) ;
45132: LD_INT 35
45134: PPUSH
45135: CALL_OW 67
// time = time - 0 0$1 ;
45139: LD_ADDR_VAR 0 4
45143: PUSH
45144: LD_VAR 0 4
45148: PUSH
45149: LD_INT 35
45151: MINUS
45152: ST_TO_ADDR
// end ;
45153: GO 45112
// if am_scientists_escape_status <> 2 then
45155: LD_EXP 111
45159: PUSH
45160: LD_INT 2
45162: NONEQUAL
45163: IFFALSE 45275
// begin DialogueOn ;
45165: CALL_OW 6
// SayRadio ( Heinz , D10-He-1 ) ;
45169: LD_EXP 22
45173: PPUSH
45174: LD_STRING D10-He-1
45176: PPUSH
45177: CALL_OW 94
// ForceSay ( Heike , D10-H-1 ) ;
45181: LD_EXP 7
45185: PPUSH
45186: LD_STRING D10-H-1
45188: PPUSH
45189: CALL_OW 91
// SayRadio ( Heinz , D10-He-2 ) ;
45193: LD_EXP 22
45197: PPUSH
45198: LD_STRING D10-He-2
45200: PPUSH
45201: CALL_OW 94
// ForceSay ( Heike , D10-H-2 ) ;
45205: LD_EXP 7
45209: PPUSH
45210: LD_STRING D10-H-2
45212: PPUSH
45213: CALL_OW 91
// SayRadio ( Heinz , D10-He-3 ) ;
45217: LD_EXP 22
45221: PPUSH
45222: LD_STRING D10-He-3
45224: PPUSH
45225: CALL_OW 94
// dwait ( 0 0$0.2 ) ;
45229: LD_INT 7
45231: PPUSH
45232: CALL_OW 68
// ChangeMissionObjectives ( MStopreinforcements ) ;
45236: LD_STRING MStopreinforcements
45238: PPUSH
45239: CALL_OW 337
// DialogueOff ;
45243: CALL_OW 7
// am_reinforcements_time = 7 7$0 + Rand ( 0 0$0 , 1 1$0 ) ;
45247: LD_ADDR_EXP 103
45251: PUSH
45252: LD_INT 14700
45254: PUSH
45255: LD_INT 0
45257: PPUSH
45258: LD_INT 2100
45260: PPUSH
45261: CALL_OW 12
45265: PLUS
45266: ST_TO_ADDR
// am_reinforcements_start = true ;
45267: LD_ADDR_EXP 104
45271: PUSH
45272: LD_INT 1
45274: ST_TO_ADDR
// end ; time = Rand ( 2 2$30 , 3 3$0 ) ;
45275: LD_ADDR_VAR 0 4
45279: PUSH
45280: LD_INT 5250
45282: PPUSH
45283: LD_INT 6300
45285: PPUSH
45286: CALL_OW 12
45290: ST_TO_ADDR
// while time > 0 0$0 and am_scientists_escape_status <> 2 do
45291: LD_VAR 0 4
45295: PUSH
45296: LD_INT 0
45298: GREATER
45299: PUSH
45300: LD_EXP 111
45304: PUSH
45305: LD_INT 2
45307: NONEQUAL
45308: AND
45309: IFFALSE 45334
// begin wait ( 0 0$1 ) ;
45311: LD_INT 35
45313: PPUSH
45314: CALL_OW 67
// time = time - 0 0$1 ;
45318: LD_ADDR_VAR 0 4
45322: PUSH
45323: LD_VAR 0 4
45327: PUSH
45328: LD_INT 35
45330: MINUS
45331: ST_TO_ADDR
// end ;
45332: GO 45291
// if am_scientists_escape_status = 2 then
45334: LD_EXP 111
45338: PUSH
45339: LD_INT 2
45341: EQUAL
45342: IFFALSE 45359
// wait ( Rand ( 0 0$8 , 0 0$12 ) ) ;
45344: LD_INT 280
45346: PPUSH
45347: LD_INT 420
45349: PPUSH
45350: CALL_OW 12
45354: PPUSH
45355: CALL_OW 67
// upf_attack_status = 1 ;
45359: LD_ADDR_EXP 118
45363: PUSH
45364: LD_INT 1
45366: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
45367: LD_INT 35
45369: PPUSH
45370: CALL_OW 67
// until upf_attack_status in [ 2 , 6 ] ;
45374: LD_EXP 118
45378: PUSH
45379: LD_INT 2
45381: PUSH
45382: LD_INT 6
45384: PUSH
45385: EMPTY
45386: LIST
45387: LIST
45388: IN
45389: IFFALSE 45367
// if freelancers_choice = 1 and louis_gordon_dispute_choice <> 1 and UnitFilter ( freelancers_leader ^ other_freelancers ^ Willard , [ f_alive ] ) > 0 and LoadVariable ( Cooperates_with_UPF_10 , false ) and upf_attack_status <> 6 then
45391: LD_EXP 98
45395: PUSH
45396: LD_INT 1
45398: EQUAL
45399: PUSH
45400: LD_EXP 102
45404: PUSH
45405: LD_INT 1
45407: NONEQUAL
45408: AND
45409: PUSH
45410: LD_EXP 25
45414: PUSH
45415: LD_EXP 26
45419: ADD
45420: PUSH
45421: LD_EXP 24
45425: ADD
45426: PPUSH
45427: LD_INT 51
45429: PUSH
45430: EMPTY
45431: LIST
45432: PPUSH
45433: CALL_OW 72
45437: PUSH
45438: LD_INT 0
45440: GREATER
45441: AND
45442: PUSH
45443: LD_STRING Cooperates_with_UPF_10
45445: PPUSH
45446: LD_INT 0
45448: PPUSH
45449: CALL_OW 30
45453: AND
45454: PUSH
45455: LD_EXP 118
45459: PUSH
45460: LD_INT 6
45462: NONEQUAL
45463: AND
45464: IFFALSE 45489
// begin wait ( Rand ( 0 0$2 , 0 0$4 ) ) ;
45466: LD_INT 70
45468: PPUSH
45469: LD_INT 140
45471: PPUSH
45472: CALL_OW 12
45476: PPUSH
45477: CALL_OW 67
// freelancers_bombing_start = true ;
45481: LD_ADDR_EXP 105
45485: PUSH
45486: LD_INT 1
45488: ST_TO_ADDR
// end ; repeat wait ( 0 0$1 ) ;
45489: LD_INT 35
45491: PPUSH
45492: CALL_OW 67
// until upf_attack_status in [ 3 , 6 ] ;
45496: LD_EXP 118
45500: PUSH
45501: LD_INT 3
45503: PUSH
45504: LD_INT 6
45506: PUSH
45507: EMPTY
45508: LIST
45509: LIST
45510: IN
45511: IFFALSE 45489
// wait ( Rand ( 0 0$15 , 0 0$20 ) ) ;
45513: LD_INT 525
45515: PPUSH
45516: LD_INT 700
45518: PPUSH
45519: CALL_OW 12
45523: PPUSH
45524: CALL_OW 67
// if gensher_accused_deserter and kill_gensher_objective_status <> 2 then
45528: LD_EXP 106
45532: PUSH
45533: LD_EXP 109
45537: PUSH
45538: LD_INT 2
45540: NONEQUAL
45541: AND
45542: IFFALSE 45866
// begin if IsLive ( upf_deserter ) then
45544: LD_EXP 19
45548: PPUSH
45549: CALL_OW 300
45553: IFFALSE 45864
// begin if not IsLive ( upf_speaker ) then
45555: LD_EXP 101
45559: PPUSH
45560: CALL_OW 300
45564: NOT
45565: IFFALSE 45617
// begin temp_list = GetNonmainPlayerCharacters diff other_freelancers ;
45567: LD_ADDR_VAR 0 2
45571: PUSH
45572: CALL 40374 0 0
45576: PUSH
45577: LD_EXP 26
45581: DIFF
45582: ST_TO_ADDR
// if temp_list > 0 then
45583: LD_VAR 0 2
45587: PUSH
45588: LD_INT 0
45590: GREATER
45591: IFFALSE 45617
// upf_speaker = temp_list [ Rand ( 1 , temp_list ) ] ;
45593: LD_ADDR_EXP 101
45597: PUSH
45598: LD_VAR 0 2
45602: PUSH
45603: LD_INT 1
45605: PPUSH
45606: LD_VAR 0 2
45610: PPUSH
45611: CALL_OW 12
45615: ARRAY
45616: ST_TO_ADDR
// end ; if IsLive ( upf_speaker ) then
45617: LD_EXP 101
45621: PPUSH
45622: CALL_OW 300
45626: IFFALSE 45864
// begin DialogueOn ;
45628: CALL_OW 6
// case upf_speaker of Kowalski :
45632: LD_EXP 101
45636: PUSH
45637: LD_EXP 12
45641: DOUBLE
45642: EQUAL
45643: IFTRUE 45647
45645: GO 45662
45647: POP
// ForceSay ( upf_speaker , D14-Ko-1 ) ; Suze :
45648: LD_EXP 101
45652: PPUSH
45653: LD_STRING D14-Ko-1
45655: PPUSH
45656: CALL_OW 91
45660: GO 45729
45662: LD_EXP 13
45666: DOUBLE
45667: EQUAL
45668: IFTRUE 45672
45670: GO 45687
45672: POP
// ForceSay ( upf_speaker , D14-Su-1 ) ; else
45673: LD_EXP 101
45677: PPUSH
45678: LD_STRING D14-Su-1
45680: PPUSH
45681: CALL_OW 91
45685: GO 45729
45687: POP
// if GetSex ( upf_speaker ) = sex_male then
45688: LD_EXP 101
45692: PPUSH
45693: CALL_OW 258
45697: PUSH
45698: LD_INT 1
45700: EQUAL
45701: IFFALSE 45717
// ForceSay ( upf_speaker , D14-SomeM-1 ) else
45703: LD_EXP 101
45707: PPUSH
45708: LD_STRING D14-SomeM-1
45710: PPUSH
45711: CALL_OW 91
45715: GO 45729
// ForceSay ( upf_speaker , D14-SomeF-1 ) ; end ;
45717: LD_EXP 101
45721: PPUSH
45722: LD_STRING D14-SomeF-1
45724: PPUSH
45725: CALL_OW 91
// dwait ( 0 0$0.2 ) ;
45729: LD_INT 7
45731: PPUSH
45732: CALL_OW 68
// upf_deserter_choice = Query ( QRolfWorryAgain ) ;
45736: LD_ADDR_EXP 100
45740: PUSH
45741: LD_STRING QRolfWorryAgain
45743: PPUSH
45744: CALL_OW 97
45748: ST_TO_ADDR
// case upf_deserter_choice of 1 :
45749: LD_EXP 100
45753: PUSH
45754: LD_INT 1
45756: DOUBLE
45757: EQUAL
45758: IFTRUE 45762
45760: GO 45777
45762: POP
// begin ForceSay ( upf_deserter , D9-1-Ro-1 ) ;
45763: LD_EXP 19
45767: PPUSH
45768: LD_STRING D9-1-Ro-1
45770: PPUSH
45771: CALL_OW 91
// end ; 2 :
45775: GO 45860
45777: LD_INT 2
45779: DOUBLE
45780: EQUAL
45781: IFTRUE 45785
45783: GO 45812
45785: POP
// begin ForceSay ( Heike , D9-2-H-2 ) ;
45786: LD_EXP 7
45790: PPUSH
45791: LD_STRING D9-2-H-2
45793: PPUSH
45794: CALL_OW 91
// ForceSay ( upf_deserter , D9-2-Ro-1 ) ;
45798: LD_EXP 19
45802: PPUSH
45803: LD_STRING D9-2-Ro-1
45805: PPUSH
45806: CALL_OW 91
// end ; 3 :
45810: GO 45860
45812: LD_INT 3
45814: DOUBLE
45815: EQUAL
45816: IFTRUE 45820
45818: GO 45859
45820: POP
// begin ForceSay ( Heike , D14-3-H-1 ) ;
45821: LD_EXP 7
45825: PPUSH
45826: LD_STRING D14-3-H-1
45828: PPUSH
45829: CALL_OW 91
// if upf_speaker = Suze then
45833: LD_EXP 101
45837: PUSH
45838: LD_EXP 13
45842: EQUAL
45843: IFFALSE 45857
// Say ( upf_speaker , D14-3-Su-1 ) ;
45845: LD_EXP 101
45849: PPUSH
45850: LD_STRING D14-3-Su-1
45852: PPUSH
45853: CALL_OW 88
// end ; end ;
45857: GO 45860
45859: POP
// DialogueOff ;
45860: CALL_OW 7
// end ; end ; end else
45864: GO 46632
// if gensher_accused_freelancers and kill_gensher_objective_status <> 2 then
45866: LD_EXP 107
45870: PUSH
45871: LD_EXP 109
45875: PUSH
45876: LD_INT 2
45878: NONEQUAL
45879: AND
45880: IFFALSE 46632
// begin if UnitFilter ( freelancers_leader ^ other_freelancers ^ Willard , [ f_alive ] ) > 0 and UnitFilter ( Louis ^ other_louis_folks , [ f_alive ] ) > 0 then
45882: LD_EXP 25
45886: PUSH
45887: LD_EXP 26
45891: ADD
45892: PUSH
45893: LD_EXP 24
45897: ADD
45898: PPUSH
45899: LD_INT 51
45901: PUSH
45902: EMPTY
45903: LIST
45904: PPUSH
45905: CALL_OW 72
45909: PUSH
45910: LD_INT 0
45912: GREATER
45913: PUSH
45914: LD_EXP 17
45918: PUSH
45919: LD_EXP 20
45923: ADD
45924: PPUSH
45925: LD_INT 51
45927: PUSH
45928: EMPTY
45929: LIST
45930: PPUSH
45931: CALL_OW 72
45935: PUSH
45936: LD_INT 0
45938: GREATER
45939: AND
45940: IFFALSE 46632
// begin if IsLive ( Louis ) then
45942: LD_EXP 17
45946: PPUSH
45947: CALL_OW 300
45951: IFFALSE 45965
// louis_speaker = Louis else
45953: LD_ADDR_VAR 0 6
45957: PUSH
45958: LD_EXP 17
45962: ST_TO_ADDR
45963: GO 46020
// begin temp_list = UnitFilter ( other_louis_folks , [ f_alive ] ) ;
45965: LD_ADDR_VAR 0 2
45969: PUSH
45970: LD_EXP 20
45974: PPUSH
45975: LD_INT 51
45977: PUSH
45978: EMPTY
45979: LIST
45980: PPUSH
45981: CALL_OW 72
45985: ST_TO_ADDR
// if temp_list > 0 then
45986: LD_VAR 0 2
45990: PUSH
45991: LD_INT 0
45993: GREATER
45994: IFFALSE 46012
// louis_speaker = temp_list [ 1 ] else
45996: LD_ADDR_VAR 0 6
46000: PUSH
46001: LD_VAR 0 2
46005: PUSH
46006: LD_INT 1
46008: ARRAY
46009: ST_TO_ADDR
46010: GO 46020
// louis_speaker = 0 ;
46012: LD_ADDR_VAR 0 6
46016: PUSH
46017: LD_INT 0
46019: ST_TO_ADDR
// end ; if IsLive ( freelancers_leader ) then
46020: LD_EXP 25
46024: PPUSH
46025: CALL_OW 300
46029: IFFALSE 46043
// gordon_speaker = freelancers_leader else
46031: LD_ADDR_VAR 0 7
46035: PUSH
46036: LD_EXP 25
46040: ST_TO_ADDR
46041: GO 46121
// if IsLive ( Willard ) then
46043: LD_EXP 24
46047: PPUSH
46048: CALL_OW 300
46052: IFFALSE 46066
// gordon_speaker = Willard else
46054: LD_ADDR_VAR 0 7
46058: PUSH
46059: LD_EXP 24
46063: ST_TO_ADDR
46064: GO 46121
// begin temp_list = UnitFilter ( other_freelancers , [ f_alive ] ) ;
46066: LD_ADDR_VAR 0 2
46070: PUSH
46071: LD_EXP 26
46075: PPUSH
46076: LD_INT 51
46078: PUSH
46079: EMPTY
46080: LIST
46081: PPUSH
46082: CALL_OW 72
46086: ST_TO_ADDR
// if temp_list > 0 then
46087: LD_VAR 0 2
46091: PUSH
46092: LD_INT 0
46094: GREATER
46095: IFFALSE 46113
// gordon_speaker = temp_list [ 1 ] else
46097: LD_ADDR_VAR 0 7
46101: PUSH
46102: LD_VAR 0 2
46106: PUSH
46107: LD_INT 1
46109: ARRAY
46110: ST_TO_ADDR
46111: GO 46121
// gordon_speaker = 0 ;
46113: LD_ADDR_VAR 0 7
46117: PUSH
46118: LD_INT 0
46120: ST_TO_ADDR
// end ; if louis_speaker > 0 and gordon_speaker > 0 then
46121: LD_VAR 0 6
46125: PUSH
46126: LD_INT 0
46128: GREATER
46129: PUSH
46130: LD_VAR 0 7
46134: PUSH
46135: LD_INT 0
46137: GREATER
46138: AND
46139: IFFALSE 46632
// begin DialogueOn ;
46141: CALL_OW 6
// case louis_speaker of Louis :
46145: LD_VAR 0 6
46149: PUSH
46150: LD_EXP 17
46154: DOUBLE
46155: EQUAL
46156: IFTRUE 46160
46158: GO 46175
46160: POP
// ForceSay ( louis_speaker , D15-Lo-1 ) ; else
46161: LD_VAR 0 6
46165: PPUSH
46166: LD_STRING D15-Lo-1
46168: PPUSH
46169: CALL_OW 91
46173: GO 46217
46175: POP
// if GetSex ( louis_speaker ) = sex_male then
46176: LD_VAR 0 6
46180: PPUSH
46181: CALL_OW 258
46185: PUSH
46186: LD_INT 1
46188: EQUAL
46189: IFFALSE 46205
// ForceSay ( louis_speaker , D15-LoM-1 ) else
46191: LD_VAR 0 6
46195: PPUSH
46196: LD_STRING D15-LoM-1
46198: PPUSH
46199: CALL_OW 91
46203: GO 46217
// ForceSay ( louis_speaker , D15-LoF-1 ) ; end ;
46205: LD_VAR 0 6
46209: PPUSH
46210: LD_STRING D15-LoF-1
46212: PPUSH
46213: CALL_OW 91
// dwait ( 0 0$0.2 ) ;
46217: LD_INT 7
46219: PPUSH
46220: CALL_OW 68
// freelancers_second_choice = Query ( QFreelancersWorryAgain ) ;
46224: LD_ADDR_EXP 108
46228: PUSH
46229: LD_STRING QFreelancersWorryAgain
46231: PPUSH
46232: CALL_OW 97
46236: ST_TO_ADDR
// case freelancers_second_choice of 1 :
46237: LD_EXP 108
46241: PUSH
46242: LD_INT 1
46244: DOUBLE
46245: EQUAL
46246: IFTRUE 46250
46248: GO 46375
46250: POP
// begin case gordon_speaker of Gordon :
46251: LD_VAR 0 7
46255: PUSH
46256: LD_EXP 23
46260: DOUBLE
46261: EQUAL
46262: IFTRUE 46266
46264: GO 46281
46266: POP
// ForceSay ( gordon_speaker , D15-1-Go-1 ) ; freelancers_leader :
46267: LD_VAR 0 7
46271: PPUSH
46272: LD_STRING D15-1-Go-1
46274: PPUSH
46275: CALL_OW 91
46279: GO 46373
46281: LD_EXP 25
46285: DOUBLE
46286: EQUAL
46287: IFTRUE 46291
46289: GO 46306
46291: POP
// ForceSay ( gordon_speaker , D15-1-FLea-1 ) ; Willard :
46292: LD_VAR 0 7
46296: PPUSH
46297: LD_STRING D15-1-FLea-1
46299: PPUSH
46300: CALL_OW 91
46304: GO 46373
46306: LD_EXP 24
46310: DOUBLE
46311: EQUAL
46312: IFTRUE 46316
46314: GO 46331
46316: POP
// ForceSay ( gordon_speaker , D15-1-Wi-1 ) ; else
46317: LD_VAR 0 7
46321: PPUSH
46322: LD_STRING D15-1-Wi-1
46324: PPUSH
46325: CALL_OW 91
46329: GO 46373
46331: POP
// if GetSex ( gordon_speaker ) = sex_male then
46332: LD_VAR 0 7
46336: PPUSH
46337: CALL_OW 258
46341: PUSH
46342: LD_INT 1
46344: EQUAL
46345: IFFALSE 46361
// ForceSay ( gordon_speaker , D15-1-GoM-1 ) else
46347: LD_VAR 0 7
46351: PPUSH
46352: LD_STRING D15-1-GoM-1
46354: PPUSH
46355: CALL_OW 91
46359: GO 46373
// ForceSay ( gordon_speaker , D15-1-GoF-1 ) ; end ;
46361: LD_VAR 0 7
46365: PPUSH
46366: LD_STRING D15-1-GoF-1
46368: PPUSH
46369: CALL_OW 91
// end ; 2 :
46373: GO 46628
46375: LD_INT 2
46377: DOUBLE
46378: EQUAL
46379: IFTRUE 46383
46381: GO 46520
46383: POP
// begin ForceSay ( Heike , D7-1-H-1 ) ;
46384: LD_EXP 7
46388: PPUSH
46389: LD_STRING D7-1-H-1
46391: PPUSH
46392: CALL_OW 91
// case gordon_speaker of Gordon :
46396: LD_VAR 0 7
46400: PUSH
46401: LD_EXP 23
46405: DOUBLE
46406: EQUAL
46407: IFTRUE 46411
46409: GO 46426
46411: POP
// ForceSay ( gordon_speaker , D7-1-Go-1 ) ; freelancers_leader :
46412: LD_VAR 0 7
46416: PPUSH
46417: LD_STRING D7-1-Go-1
46419: PPUSH
46420: CALL_OW 91
46424: GO 46518
46426: LD_EXP 25
46430: DOUBLE
46431: EQUAL
46432: IFTRUE 46436
46434: GO 46451
46436: POP
// ForceSay ( gordon_speaker , D7-1-FLea-1 ) ; Willard :
46437: LD_VAR 0 7
46441: PPUSH
46442: LD_STRING D7-1-FLea-1
46444: PPUSH
46445: CALL_OW 91
46449: GO 46518
46451: LD_EXP 24
46455: DOUBLE
46456: EQUAL
46457: IFTRUE 46461
46459: GO 46476
46461: POP
// ForceSay ( gordon_speaker , D7-1-Wi-1 ) ; else
46462: LD_VAR 0 7
46466: PPUSH
46467: LD_STRING D7-1-Wi-1
46469: PPUSH
46470: CALL_OW 91
46474: GO 46518
46476: POP
// if GetSex ( gordon_speaker ) = sex_male then
46477: LD_VAR 0 7
46481: PPUSH
46482: CALL_OW 258
46486: PUSH
46487: LD_INT 1
46489: EQUAL
46490: IFFALSE 46506
// ForceSay ( gordon_speaker , D7-1-GoM-1 ) else
46492: LD_VAR 0 7
46496: PPUSH
46497: LD_STRING D7-1-GoM-1
46499: PPUSH
46500: CALL_OW 91
46504: GO 46518
// ForceSay ( gordon_speaker , D7-1-GoF-1 ) ; end ;
46506: LD_VAR 0 7
46510: PPUSH
46511: LD_STRING D7-1-GoF-1
46513: PPUSH
46514: CALL_OW 91
// end ; 3 :
46518: GO 46628
46520: LD_INT 3
46522: DOUBLE
46523: EQUAL
46524: IFTRUE 46528
46526: GO 46627
46528: POP
// begin ForceSay ( Heike , D15-3-H-1 ) ;
46529: LD_EXP 7
46533: PPUSH
46534: LD_STRING D15-3-H-1
46536: PPUSH
46537: CALL_OW 91
// case louis_speaker of Louis :
46541: LD_VAR 0 6
46545: PUSH
46546: LD_EXP 17
46550: DOUBLE
46551: EQUAL
46552: IFTRUE 46556
46554: GO 46571
46556: POP
// ForceSay ( louis_speaker , D15-3-Lo-1 ) ; else
46557: LD_VAR 0 6
46561: PPUSH
46562: LD_STRING D15-3-Lo-1
46564: PPUSH
46565: CALL_OW 91
46569: GO 46613
46571: POP
// if GetSex ( louis_speaker ) = sex_male then
46572: LD_VAR 0 6
46576: PPUSH
46577: CALL_OW 258
46581: PUSH
46582: LD_INT 1
46584: EQUAL
46585: IFFALSE 46601
// ForceSay ( louis_speaker , D15-3-LoM-1 ) else
46587: LD_VAR 0 6
46591: PPUSH
46592: LD_STRING D15-3-LoM-1
46594: PPUSH
46595: CALL_OW 91
46599: GO 46613
// ForceSay ( louis_speaker , D15-3-LoF-1 ) ; end ;
46601: LD_VAR 0 6
46605: PPUSH
46606: LD_STRING D15-3-LoF-1
46608: PPUSH
46609: CALL_OW 91
// ForceSay ( Heike , D15-3-H-2 ) ;
46613: LD_EXP 7
46617: PPUSH
46618: LD_STRING D15-3-H-2
46620: PPUSH
46621: CALL_OW 91
// end ; end ;
46625: GO 46628
46627: POP
// DialogueOff ;
46628: CALL_OW 7
// end ; end ; end ; wait ( Rand ( 0 0$20 , 0 0$30 ) ) ;
46632: LD_INT 700
46634: PPUSH
46635: LD_INT 1050
46637: PPUSH
46638: CALL_OW 12
46642: PPUSH
46643: CALL_OW 67
// if kill_gensher_objective_status <> 2 then
46647: LD_EXP 109
46651: PUSH
46652: LD_INT 2
46654: NONEQUAL
46655: IFFALSE 46771
// begin DialogueOn ;
46657: CALL_OW 6
// ForceSay ( Heike , D16-H-1 ) ;
46661: LD_EXP 7
46665: PPUSH
46666: LD_STRING D16-H-1
46668: PPUSH
46669: CALL_OW 91
// ForceSay ( Heike , D16-H-2 ) ;
46673: LD_EXP 7
46677: PPUSH
46678: LD_STRING D16-H-2
46680: PPUSH
46681: CALL_OW 91
// SayEffect ( D16-All-1 ) ;
46685: LD_STRING D16-All-1
46687: PPUSH
46688: CALL_OW 96
// if IsLive ( upf_deserter ) and not upf_deserter_choice in [ 1 , 2 ] then
46692: LD_EXP 19
46696: PPUSH
46697: CALL_OW 300
46701: PUSH
46702: LD_EXP 100
46706: PUSH
46707: LD_INT 1
46709: PUSH
46710: LD_INT 2
46712: PUSH
46713: EMPTY
46714: LIST
46715: LIST
46716: IN
46717: NOT
46718: AND
46719: IFFALSE 46745
// begin ForceSay ( Heike , D16-H-3 ) ;
46721: LD_EXP 7
46725: PPUSH
46726: LD_STRING D16-H-3
46728: PPUSH
46729: CALL_OW 91
// ForceSay ( upf_deserter , D16-Ro-1 ) ;
46733: LD_EXP 19
46737: PPUSH
46738: LD_STRING D16-Ro-1
46740: PPUSH
46741: CALL_OW 91
// end ; dwait ( 0 0$0.2 ) ;
46745: LD_INT 7
46747: PPUSH
46748: CALL_OW 68
// ChangeMissionObjectives ( MKillGensher ) ;
46752: LD_STRING MKillGensher
46754: PPUSH
46755: CALL_OW 337
// DialogueOff ;
46759: CALL_OW 7
// kill_gensher_objective_status = 1 ;
46763: LD_ADDR_EXP 109
46767: PUSH
46768: LD_INT 1
46770: ST_TO_ADDR
// end ; wait ( Rand ( 0 0$5 , 0 0$10 ) ) ;
46771: LD_INT 175
46773: PPUSH
46774: LD_INT 350
46776: PPUSH
46777: CALL_OW 12
46781: PPUSH
46782: CALL_OW 67
// if freelancers_choice = 1 and not louis_gordon_dispute_choice in [ 1 , 2 ] and not freelancers_second_choice in [ 1 , 2 ] and am_scientists_escape_status = 0 and kill_gensher_objective_status <> 2 and UnitFilter ( freelancers_leader ^ other_freelancers ^ Willard , [ f_alive ] ) > 0 and UnitFilter ( Louis ^ other_louis_folks , [ f_alive ] ) > 0 then
46786: LD_EXP 98
46790: PUSH
46791: LD_INT 1
46793: EQUAL
46794: PUSH
46795: LD_EXP 102
46799: PUSH
46800: LD_INT 1
46802: PUSH
46803: LD_INT 2
46805: PUSH
46806: EMPTY
46807: LIST
46808: LIST
46809: IN
46810: NOT
46811: AND
46812: PUSH
46813: LD_EXP 108
46817: PUSH
46818: LD_INT 1
46820: PUSH
46821: LD_INT 2
46823: PUSH
46824: EMPTY
46825: LIST
46826: LIST
46827: IN
46828: NOT
46829: AND
46830: PUSH
46831: LD_EXP 111
46835: PUSH
46836: LD_INT 0
46838: EQUAL
46839: AND
46840: PUSH
46841: LD_EXP 109
46845: PUSH
46846: LD_INT 2
46848: NONEQUAL
46849: AND
46850: PUSH
46851: LD_EXP 25
46855: PUSH
46856: LD_EXP 26
46860: ADD
46861: PUSH
46862: LD_EXP 24
46866: ADD
46867: PPUSH
46868: LD_INT 51
46870: PUSH
46871: EMPTY
46872: LIST
46873: PPUSH
46874: CALL_OW 72
46878: PUSH
46879: LD_INT 0
46881: GREATER
46882: AND
46883: PUSH
46884: LD_EXP 17
46888: PUSH
46889: LD_EXP 20
46893: ADD
46894: PPUSH
46895: LD_INT 51
46897: PUSH
46898: EMPTY
46899: LIST
46900: PPUSH
46901: CALL_OW 72
46905: PUSH
46906: LD_INT 0
46908: GREATER
46909: AND
46910: IFFALSE 47238
// begin louis_walks_away_himself = true ;
46912: LD_ADDR_EXP 110
46916: PUSH
46917: LD_INT 1
46919: ST_TO_ADDR
// wait ( 0 0$5 ) ;
46920: LD_INT 175
46922: PPUSH
46923: CALL_OW 67
// if IsLive ( Louis ) then
46927: LD_EXP 17
46931: PPUSH
46932: CALL_OW 300
46936: IFFALSE 46950
// louis_speaker = Louis else
46938: LD_ADDR_VAR 0 6
46942: PUSH
46943: LD_EXP 17
46947: ST_TO_ADDR
46948: GO 47005
// begin temp_list = UnitFilter ( other_louis_folks , [ f_alive ] ) ;
46950: LD_ADDR_VAR 0 2
46954: PUSH
46955: LD_EXP 20
46959: PPUSH
46960: LD_INT 51
46962: PUSH
46963: EMPTY
46964: LIST
46965: PPUSH
46966: CALL_OW 72
46970: ST_TO_ADDR
// if temp_list > 0 then
46971: LD_VAR 0 2
46975: PUSH
46976: LD_INT 0
46978: GREATER
46979: IFFALSE 46997
// louis_speaker = temp_list [ 1 ] else
46981: LD_ADDR_VAR 0 6
46985: PUSH
46986: LD_VAR 0 2
46990: PUSH
46991: LD_INT 1
46993: ARRAY
46994: ST_TO_ADDR
46995: GO 47005
// louis_speaker = 0 ;
46997: LD_ADDR_VAR 0 6
47001: PUSH
47002: LD_INT 0
47004: ST_TO_ADDR
// end ; if louis_speaker > 0 then
47005: LD_VAR 0 6
47009: PUSH
47010: LD_INT 0
47012: GREATER
47013: IFFALSE 47238
// begin CenterOnUnits ( louis_speaker ) ;
47015: LD_VAR 0 6
47019: PPUSH
47020: CALL_OW 85
// DialogueOn ;
47024: CALL_OW 6
// if louis_speaker = Louis then
47028: LD_VAR 0 6
47032: PUSH
47033: LD_EXP 17
47037: EQUAL
47038: IFFALSE 47054
// ForceSay ( Heike , D17-H-1a ) else
47040: LD_EXP 7
47044: PPUSH
47045: LD_STRING D17-H-1a
47047: PPUSH
47048: CALL_OW 91
47052: GO 47066
// ForceSay ( Heike , D17-H-1b ) ;
47054: LD_EXP 7
47058: PPUSH
47059: LD_STRING D17-H-1b
47061: PPUSH
47062: CALL_OW 91
// case louis_speaker of Louis :
47066: LD_VAR 0 6
47070: PUSH
47071: LD_EXP 17
47075: DOUBLE
47076: EQUAL
47077: IFTRUE 47081
47079: GO 47096
47081: POP
// ForceSay ( louis_speaker , D17-Lo-1 ) ; else
47082: LD_VAR 0 6
47086: PPUSH
47087: LD_STRING D17-Lo-1
47089: PPUSH
47090: CALL_OW 91
47094: GO 47138
47096: POP
// if GetSex ( louis_speaker ) = sex_male then
47097: LD_VAR 0 6
47101: PPUSH
47102: CALL_OW 258
47106: PUSH
47107: LD_INT 1
47109: EQUAL
47110: IFFALSE 47126
// ForceSay ( louis_speaker , D17-LoM-1 ) else
47112: LD_VAR 0 6
47116: PPUSH
47117: LD_STRING D17-LoM-1
47119: PPUSH
47120: CALL_OW 91
47124: GO 47138
// ForceSay ( louis_speaker , D17-LoF-1 ) ; end ;
47126: LD_VAR 0 6
47130: PPUSH
47131: LD_STRING D17-LoF-1
47133: PPUSH
47134: CALL_OW 91
// ForceSay ( Heike , D17-H-2 ) ;
47138: LD_EXP 7
47142: PPUSH
47143: LD_STRING D17-H-2
47145: PPUSH
47146: CALL_OW 91
// case louis_speaker of Louis :
47150: LD_VAR 0 6
47154: PUSH
47155: LD_EXP 17
47159: DOUBLE
47160: EQUAL
47161: IFTRUE 47165
47163: GO 47180
47165: POP
// ForceSay ( louis_speaker , D17-Lo-2 ) ; else
47166: LD_VAR 0 6
47170: PPUSH
47171: LD_STRING D17-Lo-2
47173: PPUSH
47174: CALL_OW 91
47178: GO 47222
47180: POP
// if GetSex ( louis_speaker ) = sex_male then
47181: LD_VAR 0 6
47185: PPUSH
47186: CALL_OW 258
47190: PUSH
47191: LD_INT 1
47193: EQUAL
47194: IFFALSE 47210
// ForceSay ( louis_speaker , D17-LoM-2 ) else
47196: LD_VAR 0 6
47200: PPUSH
47201: LD_STRING D17-LoM-2
47203: PPUSH
47204: CALL_OW 91
47208: GO 47222
// ForceSay ( louis_speaker , D17-LoF-2 ) ; end ;
47210: LD_VAR 0 6
47214: PPUSH
47215: LD_STRING D17-LoF-2
47217: PPUSH
47218: CALL_OW 91
// ForceSay ( Heike , D17-H-3 ) ;
47222: LD_EXP 7
47226: PPUSH
47227: LD_STRING D17-H-3
47229: PPUSH
47230: CALL_OW 91
// DialogueOff ;
47234: CALL_OW 7
// end ; end ; wait ( Rand ( 7 7$0 , 7 7$30 ) + [ 2 2$0 , 1 1$0 , 0 0$0 ] [ difficulty ] ) ;
47238: LD_INT 14700
47240: PPUSH
47241: LD_INT 15750
47243: PPUSH
47244: CALL_OW 12
47248: PUSH
47249: LD_INT 4200
47251: PUSH
47252: LD_INT 2100
47254: PUSH
47255: LD_INT 0
47257: PUSH
47258: EMPTY
47259: LIST
47260: LIST
47261: LIST
47262: PUSH
47263: LD_OWVAR 67
47267: ARRAY
47268: PLUS
47269: PPUSH
47270: CALL_OW 67
// if upf_attack_status = 3 then
47274: LD_EXP 118
47278: PUSH
47279: LD_INT 3
47281: EQUAL
47282: IFFALSE 47309
// begin upf_attack_status = 4 ;
47284: LD_ADDR_EXP 118
47288: PUSH
47289: LD_INT 4
47291: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
47292: LD_INT 35
47294: PPUSH
47295: CALL_OW 67
// until upf_attack_status = 6 ;
47299: LD_EXP 118
47303: PUSH
47304: LD_INT 6
47306: EQUAL
47307: IFFALSE 47292
// end ; end ;
47309: PPOPN 7
47311: END
// every 0 0$0.7 + 0 0$0.5 trigger khattam_choice in [ 1 , 2 ] do var i , hex , temp_list , temp_list_2 ;
47312: LD_EXP 96
47316: PUSH
47317: LD_INT 1
47319: PUSH
47320: LD_INT 2
47322: PUSH
47323: EMPTY
47324: LIST
47325: LIST
47326: IN
47327: IFFALSE 47671
47329: GO 47331
47331: DISABLE
47332: LD_INT 0
47334: PPUSH
47335: PPUSH
47336: PPUSH
47337: PPUSH
// begin temp_list = [ [ 57 , 1 ] , [ 96 , 1 ] , [ 134 , 31 ] ] ;
47338: LD_ADDR_VAR 0 3
47342: PUSH
47343: LD_INT 57
47345: PUSH
47346: LD_INT 1
47348: PUSH
47349: EMPTY
47350: LIST
47351: LIST
47352: PUSH
47353: LD_INT 96
47355: PUSH
47356: LD_INT 1
47358: PUSH
47359: EMPTY
47360: LIST
47361: LIST
47362: PUSH
47363: LD_INT 134
47365: PUSH
47366: LD_INT 31
47368: PUSH
47369: EMPTY
47370: LIST
47371: LIST
47372: PUSH
47373: EMPTY
47374: LIST
47375: LIST
47376: LIST
47377: ST_TO_ADDR
// temp_list_2 = [ ] ;
47378: LD_ADDR_VAR 0 4
47382: PUSH
47383: EMPTY
47384: ST_TO_ADDR
// for i in temp_list do
47385: LD_ADDR_VAR 0 1
47389: PUSH
47390: LD_VAR 0 3
47394: PUSH
47395: FOR_IN
47396: IFFALSE 47439
// temp_list_2 = temp_list_2 ^ GetDistUnitXY ( Khattam , i [ 1 ] , i [ 2 ] ) ;
47398: LD_ADDR_VAR 0 4
47402: PUSH
47403: LD_VAR 0 4
47407: PUSH
47408: LD_EXP 18
47412: PPUSH
47413: LD_VAR 0 1
47417: PUSH
47418: LD_INT 1
47420: ARRAY
47421: PPUSH
47422: LD_VAR 0 1
47426: PUSH
47427: LD_INT 2
47429: ARRAY
47430: PPUSH
47431: CALL_OW 297
47435: ADD
47436: ST_TO_ADDR
47437: GO 47395
47439: POP
47440: POP
// hex = WorstFromListByList ( temp_list , temp_list_2 ) ;
47441: LD_ADDR_VAR 0 2
47445: PUSH
47446: LD_VAR 0 3
47450: PPUSH
47451: LD_VAR 0 4
47455: PPUSH
47456: CALL_OW 78
47460: ST_TO_ADDR
// SetSide ( Khattam , you_alt ) ;
47461: LD_EXP 18
47465: PPUSH
47466: LD_EXP 4
47470: PPUSH
47471: CALL_OW 235
// if khattam_choice = 1 then
47475: LD_EXP 96
47479: PUSH
47480: LD_INT 1
47482: EQUAL
47483: IFFALSE 47525
// begin SetAttitude ( you , you_alt , att_enemy , false ) ;
47485: LD_EXP 2
47489: PPUSH
47490: LD_EXP 4
47494: PPUSH
47495: LD_INT 2
47497: PPUSH
47498: LD_INT 0
47500: PPUSH
47501: CALL_OW 80
// SetAttitude ( you_alt , you , att_neutral , false ) ;
47505: LD_EXP 4
47509: PPUSH
47510: LD_EXP 2
47514: PPUSH
47515: LD_INT 0
47517: PPUSH
47518: LD_INT 0
47520: PPUSH
47521: CALL_OW 80
// end ; repeat case GetType ( IsInUnit ( Khattam ) ) of unit_building :
47525: LD_EXP 18
47529: PPUSH
47530: CALL_OW 310
47534: PPUSH
47535: CALL_OW 247
47539: PUSH
47540: LD_INT 3
47542: DOUBLE
47543: EQUAL
47544: IFTRUE 47548
47546: GO 47560
47548: POP
// ComExitBuilding ( Khattam ) ; unit_vehicle :
47549: LD_EXP 18
47553: PPUSH
47554: CALL_OW 122
47558: GO 47652
47560: LD_INT 2
47562: DOUBLE
47563: EQUAL
47564: IFTRUE 47568
47566: GO 47580
47568: POP
// ComexitVehicle ( Khattam ) ; else
47569: LD_EXP 18
47573: PPUSH
47574: CALL_OW 121
47578: GO 47652
47580: POP
// begin if GetDistUnitXY ( Khattam , hex [ 1 ] , hex [ 2 ] ) > 2 then
47581: LD_EXP 18
47585: PPUSH
47586: LD_VAR 0 2
47590: PUSH
47591: LD_INT 1
47593: ARRAY
47594: PPUSH
47595: LD_VAR 0 2
47599: PUSH
47600: LD_INT 2
47602: ARRAY
47603: PPUSH
47604: CALL_OW 297
47608: PUSH
47609: LD_INT 2
47611: GREATER
47612: IFFALSE 47643
// ComMoveXY ( Khattam , hex [ 1 ] , hex [ 2 ] ) else
47614: LD_EXP 18
47618: PPUSH
47619: LD_VAR 0 2
47623: PUSH
47624: LD_INT 1
47626: ARRAY
47627: PPUSH
47628: LD_VAR 0 2
47632: PUSH
47633: LD_INT 2
47635: ARRAY
47636: PPUSH
47637: CALL_OW 111
47641: GO 47652
// RemoveUnit ( Khattam ) ;
47643: LD_EXP 18
47647: PPUSH
47648: CALL_OW 64
// end ; end ; wait ( 0 0$0.7 ) ;
47652: LD_INT 24
47654: PPUSH
47655: CALL_OW 67
// until not IsPlaced ( Khattam ) ;
47659: LD_EXP 18
47663: PPUSH
47664: CALL_OW 305
47668: NOT
47669: IFFALSE 47525
// end ;
47671: PPOPN 4
47673: END
// every 0 0$1 + 0 0$0.9 trigger freelancers_may_appear do var vehicles , humans , temp_list , i , hex , un , everyone ;
47674: LD_EXP 97
47678: IFFALSE 49602
47680: GO 47682
47682: DISABLE
47683: LD_INT 0
47685: PPUSH
47686: PPUSH
47687: PPUSH
47688: PPUSH
47689: PPUSH
47690: PPUSH
47691: PPUSH
// begin SetAttitude ( you , you_alt , att_friend , true ) ;
47692: LD_EXP 2
47696: PPUSH
47697: LD_EXP 4
47701: PPUSH
47702: LD_INT 1
47704: PPUSH
47705: LD_INT 1
47707: PPUSH
47708: CALL_OW 80
// InitUc ;
47712: CALL_OW 18
// InitVc ;
47716: CALL_OW 20
// vehicles = [ ] ;
47720: LD_ADDR_VAR 0 1
47724: PUSH
47725: EMPTY
47726: ST_TO_ADDR
// uc_side = you_alt ;
47727: LD_ADDR_OWVAR 20
47731: PUSH
47732: LD_EXP 4
47736: ST_TO_ADDR
// uc_nation = nation_american ;
47737: LD_ADDR_OWVAR 21
47741: PUSH
47742: LD_INT 1
47744: ST_TO_ADDR
// vc_control = control_manual ;
47745: LD_ADDR_OWVAR 38
47749: PUSH
47750: LD_INT 1
47752: ST_TO_ADDR
// vc_engine = [ engine_siberite , engine_combustion ] [ Rand ( 1 , 2 ) ] ;
47753: LD_ADDR_OWVAR 39
47757: PUSH
47758: LD_INT 3
47760: PUSH
47761: LD_INT 1
47763: PUSH
47764: EMPTY
47765: LIST
47766: LIST
47767: PUSH
47768: LD_INT 1
47770: PPUSH
47771: LD_INT 2
47773: PPUSH
47774: CALL_OW 12
47778: ARRAY
47779: ST_TO_ADDR
// vc_chassis = us_medium_tracked ;
47780: LD_ADDR_OWVAR 37
47784: PUSH
47785: LD_INT 3
47787: ST_TO_ADDR
// vc_weapon = [ us_machine_gun , us_gatling_gun , us_light_gun , us_double_gun , us_laser ] [ Rand ( 1 , 5 ) ] ;
47788: LD_ADDR_OWVAR 40
47792: PUSH
47793: LD_INT 2
47795: PUSH
47796: LD_INT 4
47798: PUSH
47799: LD_INT 3
47801: PUSH
47802: LD_INT 5
47804: PUSH
47805: LD_INT 9
47807: PUSH
47808: EMPTY
47809: LIST
47810: LIST
47811: LIST
47812: LIST
47813: LIST
47814: PUSH
47815: LD_INT 1
47817: PPUSH
47818: LD_INT 5
47820: PPUSH
47821: CALL_OW 12
47825: ARRAY
47826: ST_TO_ADDR
// vehicles = vehicles ^ CreateVehicle ;
47827: LD_ADDR_VAR 0 1
47831: PUSH
47832: LD_VAR 0 1
47836: PUSH
47837: CALL_OW 45
47841: ADD
47842: ST_TO_ADDR
// uc_nation = nation_russian ;
47843: LD_ADDR_OWVAR 21
47847: PUSH
47848: LD_INT 3
47850: ST_TO_ADDR
// vc_control = control_manual ;
47851: LD_ADDR_OWVAR 38
47855: PUSH
47856: LD_INT 1
47858: ST_TO_ADDR
// vc_engine = [ engine_siberite , engine_combustion ] [ Rand ( 1 , 2 ) ] ;
47859: LD_ADDR_OWVAR 39
47863: PUSH
47864: LD_INT 3
47866: PUSH
47867: LD_INT 1
47869: PUSH
47870: EMPTY
47871: LIST
47872: LIST
47873: PUSH
47874: LD_INT 1
47876: PPUSH
47877: LD_INT 2
47879: PPUSH
47880: CALL_OW 12
47884: ARRAY
47885: ST_TO_ADDR
// vc_chassis = ru_medium_tracked ;
47886: LD_ADDR_OWVAR 37
47890: PUSH
47891: LD_INT 22
47893: ST_TO_ADDR
// vc_weapon = [ ru_heavy_machine_gun , ru_gatling_gun , ru_gun ] [ Rand ( 1 , 3 ) ] ;
47894: LD_ADDR_OWVAR 40
47898: PUSH
47899: LD_INT 42
47901: PUSH
47902: LD_INT 43
47904: PUSH
47905: LD_INT 44
47907: PUSH
47908: EMPTY
47909: LIST
47910: LIST
47911: LIST
47912: PUSH
47913: LD_INT 1
47915: PPUSH
47916: LD_INT 3
47918: PPUSH
47919: CALL_OW 12
47923: ARRAY
47924: ST_TO_ADDR
// vehicles = vehicles ^ CreateVehicle ;
47925: LD_ADDR_VAR 0 1
47929: PUSH
47930: LD_VAR 0 1
47934: PUSH
47935: CALL_OW 45
47939: ADD
47940: ST_TO_ADDR
// uc_nation = nation_arabian ;
47941: LD_ADDR_OWVAR 21
47945: PUSH
47946: LD_INT 2
47948: ST_TO_ADDR
// vc_control = control_manual ;
47949: LD_ADDR_OWVAR 38
47953: PUSH
47954: LD_INT 1
47956: ST_TO_ADDR
// vc_engine = [ engine_siberite , engine_combustion ] [ Rand ( 1 , 2 ) ] ;
47957: LD_ADDR_OWVAR 39
47961: PUSH
47962: LD_INT 3
47964: PUSH
47965: LD_INT 1
47967: PUSH
47968: EMPTY
47969: LIST
47970: LIST
47971: PUSH
47972: LD_INT 1
47974: PPUSH
47975: LD_INT 2
47977: PPUSH
47978: CALL_OW 12
47982: ARRAY
47983: ST_TO_ADDR
// vc_chassis = ar_half_tracked ;
47984: LD_ADDR_OWVAR 37
47988: PUSH
47989: LD_INT 14
47991: ST_TO_ADDR
// vc_weapon = [ ar_double_machine_gun , ar_gatling_gun , ar_gun , ar_flame_thrower , ar_multimissile_ballista ] [ Rand ( 1 , 3 ) ] ;
47992: LD_ADDR_OWVAR 40
47996: PUSH
47997: LD_INT 24
47999: PUSH
48000: LD_INT 25
48002: PUSH
48003: LD_INT 27
48005: PUSH
48006: LD_INT 26
48008: PUSH
48009: LD_INT 22
48011: PUSH
48012: EMPTY
48013: LIST
48014: LIST
48015: LIST
48016: LIST
48017: LIST
48018: PUSH
48019: LD_INT 1
48021: PPUSH
48022: LD_INT 3
48024: PPUSH
48025: CALL_OW 12
48029: ARRAY
48030: ST_TO_ADDR
// vehicles = vehicles ^ CreateVehicle ;
48031: LD_ADDR_VAR 0 1
48035: PUSH
48036: LD_VAR 0 1
48040: PUSH
48041: CALL_OW 45
48045: ADD
48046: ST_TO_ADDR
// humans = other_freelancers ;
48047: LD_ADDR_VAR 0 2
48051: PUSH
48052: LD_EXP 26
48056: ST_TO_ADDR
// if Willard > 0 then
48057: LD_EXP 24
48061: PUSH
48062: LD_INT 0
48064: GREATER
48065: IFFALSE 48083
// humans = humans ^ Willard ;
48067: LD_ADDR_VAR 0 2
48071: PUSH
48072: LD_VAR 0 2
48076: PUSH
48077: LD_EXP 24
48081: ADD
48082: ST_TO_ADDR
// everyone = humans ^ freelancers_leader ^ vehicles ;
48083: LD_ADDR_VAR 0 7
48087: PUSH
48088: LD_VAR 0 2
48092: PUSH
48093: LD_EXP 25
48097: ADD
48098: PUSH
48099: LD_VAR 0 1
48103: ADD
48104: ST_TO_ADDR
// temp_list = [ ] ;
48105: LD_ADDR_VAR 0 3
48109: PUSH
48110: EMPTY
48111: ST_TO_ADDR
// for i in humans do
48112: LD_ADDR_VAR 0 4
48116: PUSH
48117: LD_VAR 0 2
48121: PUSH
48122: FOR_IN
48123: IFFALSE 48172
// if GetClass ( i ) = class_mechanic then
48125: LD_VAR 0 4
48129: PPUSH
48130: CALL_OW 257
48134: PUSH
48135: LD_INT 3
48137: EQUAL
48138: IFFALSE 48156
// temp_list = temp_list ^ 1 else
48140: LD_ADDR_VAR 0 3
48144: PUSH
48145: LD_VAR 0 3
48149: PUSH
48150: LD_INT 1
48152: ADD
48153: ST_TO_ADDR
48154: GO 48170
// temp_list = temp_list ^ 0 ;
48156: LD_ADDR_VAR 0 3
48160: PUSH
48161: LD_VAR 0 3
48165: PUSH
48166: LD_INT 0
48168: ADD
48169: ST_TO_ADDR
48170: GO 48122
48172: POP
48173: POP
// humans = SortListByListDesc ( humans , temp_list ) ;
48174: LD_ADDR_VAR 0 2
48178: PUSH
48179: LD_VAR 0 2
48183: PPUSH
48184: LD_VAR 0 3
48188: PPUSH
48189: CALL_OW 77
48193: ST_TO_ADDR
// PlaceHumanInUnit ( freelancers_leader , vehicles [ 1 ] ) ;
48194: LD_EXP 25
48198: PPUSH
48199: LD_VAR 0 1
48203: PUSH
48204: LD_INT 1
48206: ARRAY
48207: PPUSH
48208: CALL_OW 52
// if humans > 0 then
48212: LD_VAR 0 2
48216: PUSH
48217: LD_INT 0
48219: GREATER
48220: IFFALSE 48262
// begin PlaceHumanInUnit ( humans [ 1 ] , vehicles [ 2 ] ) ;
48222: LD_VAR 0 2
48226: PUSH
48227: LD_INT 1
48229: ARRAY
48230: PPUSH
48231: LD_VAR 0 1
48235: PUSH
48236: LD_INT 2
48238: ARRAY
48239: PPUSH
48240: CALL_OW 52
// humans = Delete ( humans , 1 ) ;
48244: LD_ADDR_VAR 0 2
48248: PUSH
48249: LD_VAR 0 2
48253: PPUSH
48254: LD_INT 1
48256: PPUSH
48257: CALL_OW 3
48261: ST_TO_ADDR
// end ; if humans > 0 then
48262: LD_VAR 0 2
48266: PUSH
48267: LD_INT 0
48269: GREATER
48270: IFFALSE 48312
// begin PlaceHumanInUnit ( humans [ 1 ] , vehicles [ 3 ] ) ;
48272: LD_VAR 0 2
48276: PUSH
48277: LD_INT 1
48279: ARRAY
48280: PPUSH
48281: LD_VAR 0 1
48285: PUSH
48286: LD_INT 3
48288: ARRAY
48289: PPUSH
48290: CALL_OW 52
// humans = Delete ( humans , 1 ) ;
48294: LD_ADDR_VAR 0 2
48298: PUSH
48299: LD_VAR 0 2
48303: PPUSH
48304: LD_INT 1
48306: PPUSH
48307: CALL_OW 3
48311: ST_TO_ADDR
// end ; repeat wait ( 0 0$0.7 ) ;
48312: LD_INT 24
48314: PPUSH
48315: CALL_OW 67
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
48319: LD_ADDR_VAR 0 3
48323: PUSH
48324: LD_INT 22
48326: PUSH
48327: LD_EXP 2
48331: PUSH
48332: EMPTY
48333: LIST
48334: LIST
48335: PUSH
48336: LD_INT 2
48338: PUSH
48339: LD_INT 30
48341: PUSH
48342: LD_INT 0
48344: PUSH
48345: EMPTY
48346: LIST
48347: LIST
48348: PUSH
48349: LD_INT 30
48351: PUSH
48352: LD_INT 1
48354: PUSH
48355: EMPTY
48356: LIST
48357: LIST
48358: PUSH
48359: EMPTY
48360: LIST
48361: LIST
48362: LIST
48363: PUSH
48364: EMPTY
48365: LIST
48366: LIST
48367: PPUSH
48368: CALL_OW 69
48372: ST_TO_ADDR
// if temp_list > 0 then
48373: LD_VAR 0 3
48377: PUSH
48378: LD_INT 0
48380: GREATER
48381: IFFALSE 48422
// hex = [ GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ] else
48383: LD_ADDR_VAR 0 5
48387: PUSH
48388: LD_VAR 0 3
48392: PUSH
48393: LD_INT 1
48395: ARRAY
48396: PPUSH
48397: CALL_OW 250
48401: PUSH
48402: LD_VAR 0 3
48406: PUSH
48407: LD_INT 1
48409: ARRAY
48410: PPUSH
48411: CALL_OW 251
48415: PUSH
48416: EMPTY
48417: LIST
48418: LIST
48419: ST_TO_ADDR
48420: GO 48451
// hex = [ GetX ( Heike ) , GetY ( Heike ) ] ;
48422: LD_ADDR_VAR 0 5
48426: PUSH
48427: LD_EXP 7
48431: PPUSH
48432: CALL_OW 250
48436: PUSH
48437: LD_EXP 7
48441: PPUSH
48442: CALL_OW 251
48446: PUSH
48447: EMPTY
48448: LIST
48449: LIST
48450: ST_TO_ADDR
// temp_list = [ ] ;
48451: LD_ADDR_VAR 0 3
48455: PUSH
48456: EMPTY
48457: ST_TO_ADDR
// for i in vehicles ^ humans do
48458: LD_ADDR_VAR 0 4
48462: PUSH
48463: LD_VAR 0 1
48467: PUSH
48468: LD_VAR 0 2
48472: ADD
48473: PUSH
48474: FOR_IN
48475: IFFALSE 48524
// if not IsPlaced ( i ) then
48477: LD_VAR 0 4
48481: PPUSH
48482: CALL_OW 305
48486: NOT
48487: IFFALSE 48506
// PlaceUnitArea ( i , enter_area_south , false ) else
48489: LD_VAR 0 4
48493: PPUSH
48494: LD_INT 10
48496: PPUSH
48497: LD_INT 0
48499: PPUSH
48500: CALL_OW 49
48504: GO 48522
// temp_list = temp_list ^ i ;
48506: LD_ADDR_VAR 0 3
48510: PUSH
48511: LD_VAR 0 3
48515: PUSH
48516: LD_VAR 0 4
48520: ADD
48521: ST_TO_ADDR
48522: GO 48474
48524: POP
48525: POP
// MoveUnits ( temp_list , hex ) ;
48526: LD_VAR 0 3
48530: PPUSH
48531: LD_VAR 0 5
48535: PPUSH
48536: CALL 49605 0 2
// until UnitFilter ( everyone , [ f_see , you ] ) > 0 ;
48540: LD_VAR 0 7
48544: PPUSH
48545: LD_INT 101
48547: PUSH
48548: LD_EXP 2
48552: PUSH
48553: EMPTY
48554: LIST
48555: LIST
48556: PPUSH
48557: CALL_OW 72
48561: PUSH
48562: LD_INT 0
48564: GREATER
48565: IFFALSE 48312
// ChangeSideFog ( you_alt , you ) ;
48567: LD_EXP 4
48571: PPUSH
48572: LD_EXP 2
48576: PPUSH
48577: CALL_OW 343
// CenterOnUnits ( [ freelancers_leader , IsInUnit ( freelancers_leader ) ] diff 0 ) ;
48581: LD_EXP 25
48585: PUSH
48586: LD_EXP 25
48590: PPUSH
48591: CALL_OW 310
48595: PUSH
48596: EMPTY
48597: LIST
48598: LIST
48599: PUSH
48600: LD_INT 0
48602: DIFF
48603: PPUSH
48604: CALL_OW 85
// DialogueOn ;
48608: CALL_OW 6
// if freelancers_leader = Gordon then
48612: LD_EXP 25
48616: PUSH
48617: LD_EXP 23
48621: EQUAL
48622: IFFALSE 48662
// begin Say ( freelancers_leader , D8-Go-1 ) ;
48624: LD_EXP 25
48628: PPUSH
48629: LD_STRING D8-Go-1
48631: PPUSH
48632: CALL_OW 88
// Say ( Heike , D8-H-1a ) ;
48636: LD_EXP 7
48640: PPUSH
48641: LD_STRING D8-H-1a
48643: PPUSH
48644: CALL_OW 88
// Say ( freelancers_leader , D8-Go-2 ) ;
48648: LD_EXP 25
48652: PPUSH
48653: LD_STRING D8-Go-2
48655: PPUSH
48656: CALL_OW 88
// end else
48660: GO 48698
// begin Say ( freelancers_leader , D8-FLea-1 ) ;
48662: LD_EXP 25
48666: PPUSH
48667: LD_STRING D8-FLea-1
48669: PPUSH
48670: CALL_OW 88
// Say ( Heike , D8-H-1b ) ;
48674: LD_EXP 7
48678: PPUSH
48679: LD_STRING D8-H-1b
48681: PPUSH
48682: CALL_OW 88
// Say ( freelancers_leader , D8-FLea-2 ) ;
48686: LD_EXP 25
48690: PPUSH
48691: LD_STRING D8-FLea-2
48693: PPUSH
48694: CALL_OW 88
// end ; temp_list = UnitFilter ( [ Olaf , Kowalski ] , [ f_ok ] ) ;
48698: LD_ADDR_VAR 0 3
48702: PUSH
48703: LD_EXP 8
48707: PUSH
48708: LD_EXP 12
48712: PUSH
48713: EMPTY
48714: LIST
48715: LIST
48716: PPUSH
48717: LD_INT 50
48719: PUSH
48720: EMPTY
48721: LIST
48722: PPUSH
48723: CALL_OW 72
48727: ST_TO_ADDR
// if temp_list = 0 then
48728: LD_VAR 0 3
48732: PUSH
48733: LD_INT 0
48735: EQUAL
48736: IFFALSE 48748
// temp_list = GetNonmainPlayerCharacters ;
48738: LD_ADDR_VAR 0 3
48742: PUSH
48743: CALL 40374 0 0
48747: ST_TO_ADDR
// if temp_list > 0 then
48748: LD_VAR 0 3
48752: PUSH
48753: LD_INT 0
48755: GREATER
48756: IFFALSE 48879
// begin un = temp_list [ Rand ( 1 , temp_list ) ] ;
48758: LD_ADDR_VAR 0 6
48762: PUSH
48763: LD_VAR 0 3
48767: PUSH
48768: LD_INT 1
48770: PPUSH
48771: LD_VAR 0 3
48775: PPUSH
48776: CALL_OW 12
48780: ARRAY
48781: ST_TO_ADDR
// case un of Olaf :
48782: LD_VAR 0 6
48786: PUSH
48787: LD_EXP 8
48791: DOUBLE
48792: EQUAL
48793: IFTRUE 48797
48795: GO 48812
48797: POP
// Say ( un , D8-Ola-1 ) ; Kowalski :
48798: LD_VAR 0 6
48802: PPUSH
48803: LD_STRING D8-Ola-1
48805: PPUSH
48806: CALL_OW 88
48810: GO 48879
48812: LD_EXP 12
48816: DOUBLE
48817: EQUAL
48818: IFTRUE 48822
48820: GO 48837
48822: POP
// Say ( un , D8-Ko-1 ) ; else
48823: LD_VAR 0 6
48827: PPUSH
48828: LD_STRING D8-Ko-1
48830: PPUSH
48831: CALL_OW 88
48835: GO 48879
48837: POP
// if GetSex ( un ) = sex_male then
48838: LD_VAR 0 6
48842: PPUSH
48843: CALL_OW 258
48847: PUSH
48848: LD_INT 1
48850: EQUAL
48851: IFFALSE 48867
// Say ( un , D8-SomeM-1 ) else
48853: LD_VAR 0 6
48857: PPUSH
48858: LD_STRING D8-SomeM-1
48860: PPUSH
48861: CALL_OW 88
48865: GO 48879
// Say ( un , D8-SomeF-1 ) ; end ;
48867: LD_VAR 0 6
48871: PPUSH
48872: LD_STRING D8-SomeF-1
48874: PPUSH
48875: CALL_OW 88
// end ; if freelancers_leader = Gordon then
48879: LD_EXP 25
48883: PUSH
48884: LD_EXP 23
48888: EQUAL
48889: IFFALSE 48943
// begin Say ( freelancers_leader , D8-Go-3 ) ;
48891: LD_EXP 25
48895: PPUSH
48896: LD_STRING D8-Go-3
48898: PPUSH
48899: CALL_OW 88
// if LoadVariable ( Cooperates_with_UPF_10 , false ) then
48903: LD_STRING Cooperates_with_UPF_10
48905: PPUSH
48906: LD_INT 0
48908: PPUSH
48909: CALL_OW 30
48913: IFFALSE 48929
// Say ( freelancers_leader , D8-Go-4a ) else
48915: LD_EXP 25
48919: PPUSH
48920: LD_STRING D8-Go-4a
48922: PPUSH
48923: CALL_OW 88
48927: GO 48941
// Say ( freelancers_leader , D8-Go-4b ) ;
48929: LD_EXP 25
48933: PPUSH
48934: LD_STRING D8-Go-4b
48936: PPUSH
48937: CALL_OW 88
// end else
48941: GO 48993
// begin Say ( freelancers_leader , D8-FLea-3 ) ;
48943: LD_EXP 25
48947: PPUSH
48948: LD_STRING D8-FLea-3
48950: PPUSH
48951: CALL_OW 88
// if LoadVariable ( Cooperates_with_UPF_10 , false ) then
48955: LD_STRING Cooperates_with_UPF_10
48957: PPUSH
48958: LD_INT 0
48960: PPUSH
48961: CALL_OW 30
48965: IFFALSE 48981
// Say ( freelancers_leader , D8-FLea-4a ) else
48967: LD_EXP 25
48971: PPUSH
48972: LD_STRING D8-FLea-4a
48974: PPUSH
48975: CALL_OW 88
48979: GO 48993
// Say ( freelancers_leader , D8-FLea-4b ) ;
48981: LD_EXP 25
48985: PPUSH
48986: LD_STRING D8-FLea-4b
48988: PPUSH
48989: CALL_OW 88
// end ; temp_list = UnitFilter ( [ Oswald , Suze ] , [ f_ok ] ) ;
48993: LD_ADDR_VAR 0 3
48997: PUSH
48998: LD_EXP 10
49002: PUSH
49003: LD_EXP 13
49007: PUSH
49008: EMPTY
49009: LIST
49010: LIST
49011: PPUSH
49012: LD_INT 50
49014: PUSH
49015: EMPTY
49016: LIST
49017: PPUSH
49018: CALL_OW 72
49022: ST_TO_ADDR
// if temp_list = 0 then
49023: LD_VAR 0 3
49027: PUSH
49028: LD_INT 0
49030: EQUAL
49031: IFFALSE 49043
// temp_list = GetNonmainPlayerCharacters ;
49033: LD_ADDR_VAR 0 3
49037: PUSH
49038: CALL 40374 0 0
49042: ST_TO_ADDR
// if temp_list > 0 then
49043: LD_VAR 0 3
49047: PUSH
49048: LD_INT 0
49050: GREATER
49051: IFFALSE 49174
// begin un = temp_list [ Rand ( 1 , temp_list ) ] ;
49053: LD_ADDR_VAR 0 6
49057: PUSH
49058: LD_VAR 0 3
49062: PUSH
49063: LD_INT 1
49065: PPUSH
49066: LD_VAR 0 3
49070: PPUSH
49071: CALL_OW 12
49075: ARRAY
49076: ST_TO_ADDR
// case un of Oswald :
49077: LD_VAR 0 6
49081: PUSH
49082: LD_EXP 10
49086: DOUBLE
49087: EQUAL
49088: IFTRUE 49092
49090: GO 49107
49092: POP
// Say ( un , D8-Os-1 ) ; Suze :
49093: LD_VAR 0 6
49097: PPUSH
49098: LD_STRING D8-Os-1
49100: PPUSH
49101: CALL_OW 88
49105: GO 49174
49107: LD_EXP 13
49111: DOUBLE
49112: EQUAL
49113: IFTRUE 49117
49115: GO 49132
49117: POP
// Say ( un , D8-Su-1 ) ; else
49118: LD_VAR 0 6
49122: PPUSH
49123: LD_STRING D8-Su-1
49125: PPUSH
49126: CALL_OW 88
49130: GO 49174
49132: POP
// if GetSex ( un ) = sex_male then
49133: LD_VAR 0 6
49137: PPUSH
49138: CALL_OW 258
49142: PUSH
49143: LD_INT 1
49145: EQUAL
49146: IFFALSE 49162
// Say ( un , D8-SomeM-2 ) else
49148: LD_VAR 0 6
49152: PPUSH
49153: LD_STRING D8-SomeM-2
49155: PPUSH
49156: CALL_OW 88
49160: GO 49174
// Say ( un , D8-SomeF-2 ) ; end ;
49162: LD_VAR 0 6
49166: PPUSH
49167: LD_STRING D8-SomeF-2
49169: PPUSH
49170: CALL_OW 88
// end ; dwait ( 0 0$0.2 ) ;
49174: LD_INT 7
49176: PPUSH
49177: CALL_OW 68
// freelancers_choice = Query ( QFreelancersArrive ) ;
49181: LD_ADDR_EXP 98
49185: PUSH
49186: LD_STRING QFreelancersArrive
49188: PPUSH
49189: CALL_OW 97
49193: ST_TO_ADDR
// case freelancers_choice of 1 :
49194: LD_EXP 98
49198: PUSH
49199: LD_INT 1
49201: DOUBLE
49202: EQUAL
49203: IFTRUE 49207
49205: GO 49245
49207: POP
// begin Say ( Heike , D8-1-H-1 ) ;
49208: LD_EXP 7
49212: PPUSH
49213: LD_STRING D8-1-H-1
49215: PPUSH
49216: CALL_OW 88
// SetSide ( everyone , you ) ;
49220: LD_VAR 0 7
49224: PPUSH
49225: LD_EXP 2
49229: PPUSH
49230: CALL_OW 235
// ComStop ( everyone ) ;
49234: LD_VAR 0 7
49238: PPUSH
49239: CALL_OW 141
// end ; 2 :
49243: GO 49433
49245: LD_INT 2
49247: DOUBLE
49248: EQUAL
49249: IFTRUE 49253
49251: GO 49432
49253: POP
// begin Say ( Heike , D8-2-H-1 ) ;
49254: LD_EXP 7
49258: PPUSH
49259: LD_STRING D8-2-H-1
49261: PPUSH
49262: CALL_OW 88
// if freelancers_leader = Gordon then
49266: LD_EXP 25
49270: PUSH
49271: LD_EXP 23
49275: EQUAL
49276: IFFALSE 49318
// begin if LoadVariable ( Cooperates_with_UPF_10 , false ) then
49278: LD_STRING Cooperates_with_UPF_10
49280: PPUSH
49281: LD_INT 0
49283: PPUSH
49284: CALL_OW 30
49288: IFFALSE 49304
// Say ( freelancers_leader , D8-2-Go-1a ) else
49290: LD_EXP 25
49294: PPUSH
49295: LD_STRING D8-2-Go-1a
49297: PPUSH
49298: CALL_OW 88
49302: GO 49316
// Say ( freelancers_leader , D8-2-Go-1b ) ;
49304: LD_EXP 25
49308: PPUSH
49309: LD_STRING D8-2-Go-1b
49311: PPUSH
49312: CALL_OW 88
// end else
49316: GO 49356
// if LoadVariable ( Cooperates_with_UPF_10 , false ) then
49318: LD_STRING Cooperates_with_UPF_10
49320: PPUSH
49321: LD_INT 0
49323: PPUSH
49324: CALL_OW 30
49328: IFFALSE 49344
// Say ( freelancers_leader , D8-2-FLea-1a ) else
49330: LD_EXP 25
49334: PPUSH
49335: LD_STRING D8-2-FLea-1a
49337: PPUSH
49338: CALL_OW 88
49342: GO 49356
// Say ( freelancers_leader , D8-2-FLea-1b ) ;
49344: LD_EXP 25
49348: PPUSH
49349: LD_STRING D8-2-FLea-1b
49351: PPUSH
49352: CALL_OW 88
// Say ( Heike , D8-2-H-2 ) ;
49356: LD_EXP 7
49360: PPUSH
49361: LD_STRING D8-2-H-2
49363: PPUSH
49364: CALL_OW 88
// if freelancers_leader = Gordon then
49368: LD_EXP 25
49372: PUSH
49373: LD_EXP 23
49377: EQUAL
49378: IFFALSE 49406
// begin Say ( freelancers_leader , D8-2-Go-2 ) ;
49380: LD_EXP 25
49384: PPUSH
49385: LD_STRING D8-2-Go-2
49387: PPUSH
49388: CALL_OW 88
// Say ( Heike , D8-2-H-3a ) ;
49392: LD_EXP 7
49396: PPUSH
49397: LD_STRING D8-2-H-3a
49399: PPUSH
49400: CALL_OW 88
// end else
49404: GO 49430
// begin Say ( freelancers_leader , D8-2-FLea-2 ) ;
49406: LD_EXP 25
49410: PPUSH
49411: LD_STRING D8-2-FLea-2
49413: PPUSH
49414: CALL_OW 88
// Say ( Heike , D8-2-H-3b ) ;
49418: LD_EXP 7
49422: PPUSH
49423: LD_STRING D8-2-H-3b
49425: PPUSH
49426: CALL_OW 88
// end ; end ; end ;
49430: GO 49433
49432: POP
// DialogueOff ;
49433: CALL_OW 7
// ChangeSideFog ( you_alt , you_alt ) ;
49437: LD_EXP 4
49441: PPUSH
49442: LD_EXP 4
49446: PPUSH
49447: CALL_OW 343
// if freelancers_choice = 1 then
49451: LD_EXP 98
49455: PUSH
49456: LD_INT 1
49458: EQUAL
49459: IFFALSE 49463
// exit ;
49461: GO 49602
// hex = [ 162 , 118 ] ;
49463: LD_ADDR_VAR 0 5
49467: PUSH
49468: LD_INT 162
49470: PUSH
49471: LD_INT 118
49473: PUSH
49474: EMPTY
49475: LIST
49476: LIST
49477: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
49478: LD_INT 35
49480: PPUSH
49481: CALL_OW 67
// temp_list = [ ] ;
49485: LD_ADDR_VAR 0 3
49489: PUSH
49490: EMPTY
49491: ST_TO_ADDR
// for i in UnitFilter ( vehicles ^ humans , [ f_placed ] ) do
49492: LD_ADDR_VAR 0 4
49496: PUSH
49497: LD_VAR 0 1
49501: PUSH
49502: LD_VAR 0 2
49506: ADD
49507: PPUSH
49508: LD_INT 52
49510: PUSH
49511: EMPTY
49512: LIST
49513: PPUSH
49514: CALL_OW 72
49518: PUSH
49519: FOR_IN
49520: IFFALSE 49565
// if IsInArea ( i , enter_area_south ) then
49522: LD_VAR 0 4
49526: PPUSH
49527: LD_INT 10
49529: PPUSH
49530: CALL_OW 308
49534: IFFALSE 49547
// RemoveUnit ( i ) else
49536: LD_VAR 0 4
49540: PPUSH
49541: CALL_OW 64
49545: GO 49563
// temp_list = temp_list ^ i ;
49547: LD_ADDR_VAR 0 3
49551: PUSH
49552: LD_VAR 0 3
49556: PUSH
49557: LD_VAR 0 4
49561: ADD
49562: ST_TO_ADDR
49563: GO 49519
49565: POP
49566: POP
// MoveUnits ( temp_list , hex ) ;
49567: LD_VAR 0 3
49571: PPUSH
49572: LD_VAR 0 5
49576: PPUSH
49577: CALL 49605 0 2
// until UnitFilter ( everyone , [ f_placed ] ) = 0 ;
49581: LD_VAR 0 7
49585: PPUSH
49586: LD_INT 52
49588: PUSH
49589: EMPTY
49590: LIST
49591: PPUSH
49592: CALL_OW 72
49596: PUSH
49597: LD_INT 0
49599: EQUAL
49600: IFFALSE 49478
// end ;
49602: PPOPN 7
49604: END
// function MoveUnits ( un_list , hex ) ; var i , temp_list , most_behind_un , max_dist , dist ; begin
49605: LD_INT 0
49607: PPUSH
49608: PPUSH
49609: PPUSH
49610: PPUSH
49611: PPUSH
49612: PPUSH
// if un_list = 0 then
49613: LD_VAR 0 1
49617: PUSH
49618: LD_INT 0
49620: EQUAL
49621: IFFALSE 49625
// exit ;
49623: GO 49845
// temp_list = [ ] ;
49625: LD_ADDR_VAR 0 5
49629: PUSH
49630: EMPTY
49631: ST_TO_ADDR
// for i in un_list do
49632: LD_ADDR_VAR 0 4
49636: PUSH
49637: LD_VAR 0 1
49641: PUSH
49642: FOR_IN
49643: IFFALSE 49686
// temp_list = temp_list ^ GetDistUnitXY ( i , hex [ 1 ] , hex [ 2 ] ) ;
49645: LD_ADDR_VAR 0 5
49649: PUSH
49650: LD_VAR 0 5
49654: PUSH
49655: LD_VAR 0 4
49659: PPUSH
49660: LD_VAR 0 2
49664: PUSH
49665: LD_INT 1
49667: ARRAY
49668: PPUSH
49669: LD_VAR 0 2
49673: PUSH
49674: LD_INT 2
49676: ARRAY
49677: PPUSH
49678: CALL_OW 297
49682: ADD
49683: ST_TO_ADDR
49684: GO 49642
49686: POP
49687: POP
// most_behind_un = BestFromlistByList ( un_list , temp_list ) ;
49688: LD_ADDR_VAR 0 6
49692: PUSH
49693: LD_VAR 0 1
49697: PPUSH
49698: LD_VAR 0 5
49702: PPUSH
49703: CALL_OW 79
49707: ST_TO_ADDR
// max_dist = GetDistUnitXY ( most_behind_un , hex [ 1 ] , hex [ 2 ] ) ;
49708: LD_ADDR_VAR 0 7
49712: PUSH
49713: LD_VAR 0 6
49717: PPUSH
49718: LD_VAR 0 2
49722: PUSH
49723: LD_INT 1
49725: ARRAY
49726: PPUSH
49727: LD_VAR 0 2
49731: PUSH
49732: LD_INT 2
49734: ARRAY
49735: PPUSH
49736: CALL_OW 297
49740: ST_TO_ADDR
// for i in un_list do
49741: LD_ADDR_VAR 0 4
49745: PUSH
49746: LD_VAR 0 1
49750: PUSH
49751: FOR_IN
49752: IFFALSE 49843
// begin dist = GetDistUnitXY ( i , hex [ 1 ] , hex [ 2 ] ) ;
49754: LD_ADDR_VAR 0 8
49758: PUSH
49759: LD_VAR 0 4
49763: PPUSH
49764: LD_VAR 0 2
49768: PUSH
49769: LD_INT 1
49771: ARRAY
49772: PPUSH
49773: LD_VAR 0 2
49777: PUSH
49778: LD_INT 2
49780: ARRAY
49781: PPUSH
49782: CALL_OW 297
49786: ST_TO_ADDR
// if max_dist - dist >= 5 then
49787: LD_VAR 0 7
49791: PUSH
49792: LD_VAR 0 8
49796: MINUS
49797: PUSH
49798: LD_INT 5
49800: GREATEREQUAL
49801: IFFALSE 49814
// ComStop ( i ) else
49803: LD_VAR 0 4
49807: PPUSH
49808: CALL_OW 141
49812: GO 49841
// ComMoveXY ( i , hex [ 1 ] , hex [ 2 ] ) ;
49814: LD_VAR 0 4
49818: PPUSH
49819: LD_VAR 0 2
49823: PUSH
49824: LD_INT 1
49826: ARRAY
49827: PPUSH
49828: LD_VAR 0 2
49832: PUSH
49833: LD_INT 2
49835: ARRAY
49836: PPUSH
49837: CALL_OW 111
// end ;
49841: GO 49751
49843: POP
49844: POP
// end ;
49845: LD_VAR 0 3
49849: RET
// every 0 0$0.7 + 0 0$0.4 trigger upf_deserter_choice in [ 1 , 2 ] do var i , hex , temp_list , temp_list_2 ;
49850: LD_EXP 100
49854: PUSH
49855: LD_INT 1
49857: PUSH
49858: LD_INT 2
49860: PUSH
49861: EMPTY
49862: LIST
49863: LIST
49864: IN
49865: IFFALSE 50209
49867: GO 49869
49869: DISABLE
49870: LD_INT 0
49872: PPUSH
49873: PPUSH
49874: PPUSH
49875: PPUSH
// begin temp_list = [ [ 57 , 1 ] , [ 96 , 1 ] , [ 134 , 31 ] ] ;
49876: LD_ADDR_VAR 0 3
49880: PUSH
49881: LD_INT 57
49883: PUSH
49884: LD_INT 1
49886: PUSH
49887: EMPTY
49888: LIST
49889: LIST
49890: PUSH
49891: LD_INT 96
49893: PUSH
49894: LD_INT 1
49896: PUSH
49897: EMPTY
49898: LIST
49899: LIST
49900: PUSH
49901: LD_INT 134
49903: PUSH
49904: LD_INT 31
49906: PUSH
49907: EMPTY
49908: LIST
49909: LIST
49910: PUSH
49911: EMPTY
49912: LIST
49913: LIST
49914: LIST
49915: ST_TO_ADDR
// temp_list_2 = [ ] ;
49916: LD_ADDR_VAR 0 4
49920: PUSH
49921: EMPTY
49922: ST_TO_ADDR
// for i in temp_list do
49923: LD_ADDR_VAR 0 1
49927: PUSH
49928: LD_VAR 0 3
49932: PUSH
49933: FOR_IN
49934: IFFALSE 49977
// temp_list_2 = temp_list_2 ^ GetDistUnitXY ( upf_deserter , i [ 1 ] , i [ 2 ] ) ;
49936: LD_ADDR_VAR 0 4
49940: PUSH
49941: LD_VAR 0 4
49945: PUSH
49946: LD_EXP 19
49950: PPUSH
49951: LD_VAR 0 1
49955: PUSH
49956: LD_INT 1
49958: ARRAY
49959: PPUSH
49960: LD_VAR 0 1
49964: PUSH
49965: LD_INT 2
49967: ARRAY
49968: PPUSH
49969: CALL_OW 297
49973: ADD
49974: ST_TO_ADDR
49975: GO 49933
49977: POP
49978: POP
// hex = WorstFromListByList ( temp_list , temp_list_2 ) ;
49979: LD_ADDR_VAR 0 2
49983: PUSH
49984: LD_VAR 0 3
49988: PPUSH
49989: LD_VAR 0 4
49993: PPUSH
49994: CALL_OW 78
49998: ST_TO_ADDR
// SetSide ( upf_deserter , you_alt ) ;
49999: LD_EXP 19
50003: PPUSH
50004: LD_EXP 4
50008: PPUSH
50009: CALL_OW 235
// if upf_deserter_choice = 1 then
50013: LD_EXP 100
50017: PUSH
50018: LD_INT 1
50020: EQUAL
50021: IFFALSE 50063
// begin SetAttitude ( you , you_alt , att_enemy , false ) ;
50023: LD_EXP 2
50027: PPUSH
50028: LD_EXP 4
50032: PPUSH
50033: LD_INT 2
50035: PPUSH
50036: LD_INT 0
50038: PPUSH
50039: CALL_OW 80
// SetAttitude ( you_alt , you , att_neutral , false ) ;
50043: LD_EXP 4
50047: PPUSH
50048: LD_EXP 2
50052: PPUSH
50053: LD_INT 0
50055: PPUSH
50056: LD_INT 0
50058: PPUSH
50059: CALL_OW 80
// end ; repeat case GetType ( IsInUnit ( upf_deserter ) ) of unit_building :
50063: LD_EXP 19
50067: PPUSH
50068: CALL_OW 310
50072: PPUSH
50073: CALL_OW 247
50077: PUSH
50078: LD_INT 3
50080: DOUBLE
50081: EQUAL
50082: IFTRUE 50086
50084: GO 50098
50086: POP
// ComExitBuilding ( upf_deserter ) ; unit_vehicle :
50087: LD_EXP 19
50091: PPUSH
50092: CALL_OW 122
50096: GO 50190
50098: LD_INT 2
50100: DOUBLE
50101: EQUAL
50102: IFTRUE 50106
50104: GO 50118
50106: POP
// ComexitVehicle ( upf_deserter ) ; else
50107: LD_EXP 19
50111: PPUSH
50112: CALL_OW 121
50116: GO 50190
50118: POP
// begin if GetDistUnitXY ( upf_deserter , hex [ 1 ] , hex [ 2 ] ) > 2 then
50119: LD_EXP 19
50123: PPUSH
50124: LD_VAR 0 2
50128: PUSH
50129: LD_INT 1
50131: ARRAY
50132: PPUSH
50133: LD_VAR 0 2
50137: PUSH
50138: LD_INT 2
50140: ARRAY
50141: PPUSH
50142: CALL_OW 297
50146: PUSH
50147: LD_INT 2
50149: GREATER
50150: IFFALSE 50181
// ComMoveXY ( upf_deserter , hex [ 1 ] , hex [ 2 ] ) else
50152: LD_EXP 19
50156: PPUSH
50157: LD_VAR 0 2
50161: PUSH
50162: LD_INT 1
50164: ARRAY
50165: PPUSH
50166: LD_VAR 0 2
50170: PUSH
50171: LD_INT 2
50173: ARRAY
50174: PPUSH
50175: CALL_OW 111
50179: GO 50190
// RemoveUnit ( upf_deserter ) ;
50181: LD_EXP 19
50185: PPUSH
50186: CALL_OW 64
// end ; end ; wait ( 0 0$0.7 ) ;
50190: LD_INT 24
50192: PPUSH
50193: CALL_OW 67
// until not IsPlaced ( upf_deserter ) ;
50197: LD_EXP 19
50201: PPUSH
50202: CALL_OW 305
50206: NOT
50207: IFFALSE 50063
// end ;
50209: PPOPN 4
50211: END
// every 0 0$0.7 + 0 0$0.4 trigger louis_gordon_dispute_choice in [ 1 , 2 ] or freelancers_second_choice in [ 1 , 2 ] or louis_walks_away_himself do var i , hex , temp_list , temp_list_2 , people_list ;
50212: LD_EXP 102
50216: PUSH
50217: LD_INT 1
50219: PUSH
50220: LD_INT 2
50222: PUSH
50223: EMPTY
50224: LIST
50225: LIST
50226: IN
50227: PUSH
50228: LD_EXP 108
50232: PUSH
50233: LD_INT 1
50235: PUSH
50236: LD_INT 2
50238: PUSH
50239: EMPTY
50240: LIST
50241: LIST
50242: IN
50243: OR
50244: PUSH
50245: LD_EXP 110
50249: OR
50250: IFFALSE 50742
50252: GO 50254
50254: DISABLE
50255: LD_INT 0
50257: PPUSH
50258: PPUSH
50259: PPUSH
50260: PPUSH
50261: PPUSH
// begin if louis_gordon_dispute_choice = 1 or freelancers_second_choice in [ 1 , 2 ] then
50262: LD_EXP 102
50266: PUSH
50267: LD_INT 1
50269: EQUAL
50270: PUSH
50271: LD_EXP 108
50275: PUSH
50276: LD_INT 1
50278: PUSH
50279: LD_INT 2
50281: PUSH
50282: EMPTY
50283: LIST
50284: LIST
50285: IN
50286: OR
50287: IFFALSE 50324
// people_list = UnitFilter ( other_freelancers ^ freelancers_leader ^ Willard , [ f_alive ] ) else
50289: LD_ADDR_VAR 0 5
50293: PUSH
50294: LD_EXP 26
50298: PUSH
50299: LD_EXP 25
50303: ADD
50304: PUSH
50305: LD_EXP 24
50309: ADD
50310: PPUSH
50311: LD_INT 51
50313: PUSH
50314: EMPTY
50315: LIST
50316: PPUSH
50317: CALL_OW 72
50321: ST_TO_ADDR
50322: GO 50365
// begin people_list = UnitFilter ( other_louis_folks ^ Louis ^ Martin , [ f_alive ] ) ;
50324: LD_ADDR_VAR 0 5
50328: PUSH
50329: LD_EXP 20
50333: PUSH
50334: LD_EXP 17
50338: ADD
50339: PUSH
50340: LD_EXP 16
50344: ADD
50345: PPUSH
50346: LD_INT 51
50348: PUSH
50349: EMPTY
50350: LIST
50351: PPUSH
50352: CALL_OW 72
50356: ST_TO_ADDR
// louis_gone = true ;
50357: LD_ADDR_EXP 114
50361: PUSH
50362: LD_INT 1
50364: ST_TO_ADDR
// end ; if people_list = 0 then
50365: LD_VAR 0 5
50369: PUSH
50370: LD_INT 0
50372: EQUAL
50373: IFFALSE 50377
// exit ;
50375: GO 50742
// temp_list = [ [ 57 , 1 ] , [ 96 , 1 ] , [ 134 , 31 ] ] ;
50377: LD_ADDR_VAR 0 3
50381: PUSH
50382: LD_INT 57
50384: PUSH
50385: LD_INT 1
50387: PUSH
50388: EMPTY
50389: LIST
50390: LIST
50391: PUSH
50392: LD_INT 96
50394: PUSH
50395: LD_INT 1
50397: PUSH
50398: EMPTY
50399: LIST
50400: LIST
50401: PUSH
50402: LD_INT 134
50404: PUSH
50405: LD_INT 31
50407: PUSH
50408: EMPTY
50409: LIST
50410: LIST
50411: PUSH
50412: EMPTY
50413: LIST
50414: LIST
50415: LIST
50416: ST_TO_ADDR
// temp_list_2 = [ ] ;
50417: LD_ADDR_VAR 0 4
50421: PUSH
50422: EMPTY
50423: ST_TO_ADDR
// for i in temp_list do
50424: LD_ADDR_VAR 0 1
50428: PUSH
50429: LD_VAR 0 3
50433: PUSH
50434: FOR_IN
50435: IFFALSE 50482
// temp_list_2 = temp_list_2 ^ GetDistUnitXY ( people_list [ 1 ] , i [ 1 ] , i [ 2 ] ) ;
50437: LD_ADDR_VAR 0 4
50441: PUSH
50442: LD_VAR 0 4
50446: PUSH
50447: LD_VAR 0 5
50451: PUSH
50452: LD_INT 1
50454: ARRAY
50455: PPUSH
50456: LD_VAR 0 1
50460: PUSH
50461: LD_INT 1
50463: ARRAY
50464: PPUSH
50465: LD_VAR 0 1
50469: PUSH
50470: LD_INT 2
50472: ARRAY
50473: PPUSH
50474: CALL_OW 297
50478: ADD
50479: ST_TO_ADDR
50480: GO 50434
50482: POP
50483: POP
// hex = WorstFromListByList ( temp_list , temp_list_2 ) ;
50484: LD_ADDR_VAR 0 2
50488: PUSH
50489: LD_VAR 0 3
50493: PPUSH
50494: LD_VAR 0 4
50498: PPUSH
50499: CALL_OW 78
50503: ST_TO_ADDR
// SetSide ( people_list , you_alt ) ;
50504: LD_VAR 0 5
50508: PPUSH
50509: LD_EXP 4
50513: PPUSH
50514: CALL_OW 235
// if freelancers_second_choice = 1 then
50518: LD_EXP 108
50522: PUSH
50523: LD_INT 1
50525: EQUAL
50526: IFFALSE 50550
// begin SetAttitude ( you , you_alt , att_enemy , true ) ;
50528: LD_EXP 2
50532: PPUSH
50533: LD_EXP 4
50537: PPUSH
50538: LD_INT 2
50540: PPUSH
50541: LD_INT 1
50543: PPUSH
50544: CALL_OW 80
// end else
50548: GO 50570
// SetAttitude ( you , you_alt , att_friend , true ) ;
50550: LD_EXP 2
50554: PPUSH
50555: LD_EXP 4
50559: PPUSH
50560: LD_INT 1
50562: PPUSH
50563: LD_INT 1
50565: PPUSH
50566: CALL_OW 80
// repeat for i in people_list do
50570: LD_ADDR_VAR 0 1
50574: PUSH
50575: LD_VAR 0 5
50579: PUSH
50580: FOR_IN
50581: IFFALSE 50712
// case GetType ( IsInUnit ( i ) ) of unit_building :
50583: LD_VAR 0 1
50587: PPUSH
50588: CALL_OW 310
50592: PPUSH
50593: CALL_OW 247
50597: PUSH
50598: LD_INT 3
50600: DOUBLE
50601: EQUAL
50602: IFTRUE 50606
50604: GO 50618
50606: POP
// ComExitBuilding ( i ) ; unit_vehicle :
50607: LD_VAR 0 1
50611: PPUSH
50612: CALL_OW 122
50616: GO 50710
50618: LD_INT 2
50620: DOUBLE
50621: EQUAL
50622: IFTRUE 50626
50624: GO 50638
50626: POP
// ComexitVehicle ( i ) ; else
50627: LD_VAR 0 1
50631: PPUSH
50632: CALL_OW 121
50636: GO 50710
50638: POP
// begin if GetDistUnitXY ( i , hex [ 1 ] , hex [ 2 ] ) > 2 then
50639: LD_VAR 0 1
50643: PPUSH
50644: LD_VAR 0 2
50648: PUSH
50649: LD_INT 1
50651: ARRAY
50652: PPUSH
50653: LD_VAR 0 2
50657: PUSH
50658: LD_INT 2
50660: ARRAY
50661: PPUSH
50662: CALL_OW 297
50666: PUSH
50667: LD_INT 2
50669: GREATER
50670: IFFALSE 50701
// ComMoveXY ( i , hex [ 1 ] , hex [ 2 ] ) else
50672: LD_VAR 0 1
50676: PPUSH
50677: LD_VAR 0 2
50681: PUSH
50682: LD_INT 1
50684: ARRAY
50685: PPUSH
50686: LD_VAR 0 2
50690: PUSH
50691: LD_INT 2
50693: ARRAY
50694: PPUSH
50695: CALL_OW 111
50699: GO 50710
// RemoveUnit ( i ) ;
50701: LD_VAR 0 1
50705: PPUSH
50706: CALL_OW 64
// end ; end ;
50710: GO 50580
50712: POP
50713: POP
// wait ( 0 0$0.7 ) ;
50714: LD_INT 24
50716: PPUSH
50717: CALL_OW 67
// until UnitFilter ( people_list , [ f_placed ] ) = 0 ;
50721: LD_VAR 0 5
50725: PPUSH
50726: LD_INT 52
50728: PUSH
50729: EMPTY
50730: LIST
50731: PPUSH
50732: CALL_OW 72
50736: PUSH
50737: LD_INT 0
50739: EQUAL
50740: IFFALSE 50570
// end ;
50742: PPOPN 5
50744: END
// every 0 0$1 + 0 0$0.1 trigger am_reinforcements_time > 0 0$0 do var counter , disp ;
50745: LD_EXP 103
50749: PUSH
50750: LD_INT 0
50752: GREATER
50753: IFFALSE 51012
50755: GO 50757
50757: DISABLE
50758: LD_INT 0
50760: PPUSH
50761: PPUSH
// begin counter = 0 0$0 ;
50762: LD_ADDR_VAR 0 1
50766: PUSH
50767: LD_INT 0
50769: ST_TO_ADDR
// disp = am_reinforcements_time div 1 1$0 ;
50770: LD_ADDR_VAR 0 2
50774: PUSH
50775: LD_EXP 103
50779: PUSH
50780: LD_INT 2100
50782: DIV
50783: ST_TO_ADDR
// if am_reinforcements_time mod 1 1$0 > 0 0$30 then
50784: LD_EXP 103
50788: PUSH
50789: LD_INT 2100
50791: MOD
50792: PUSH
50793: LD_INT 1050
50795: GREATER
50796: IFFALSE 50812
// disp = disp + 1 ;
50798: LD_ADDR_VAR 0 2
50802: PUSH
50803: LD_VAR 0 2
50807: PUSH
50808: LD_INT 1
50810: PLUS
50811: ST_TO_ADDR
// display_strings = [ #Ar13a-AmReinforcements , disp ] ;
50812: LD_ADDR_OWVAR 47
50816: PUSH
50817: LD_STRING #Ar13a-AmReinforcements
50819: PUSH
50820: LD_VAR 0 2
50824: PUSH
50825: EMPTY
50826: LIST
50827: LIST
50828: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
50829: LD_INT 35
50831: PPUSH
50832: CALL_OW 67
// if am_scientists_escape_status = 2 and am_reinforcements_time > 0 0$0 then
50836: LD_EXP 111
50840: PUSH
50841: LD_INT 2
50843: EQUAL
50844: PUSH
50845: LD_EXP 103
50849: PUSH
50850: LD_INT 0
50852: GREATER
50853: AND
50854: IFFALSE 50885
// begin DialogueOn ;
50856: CALL_OW 6
// SayRadio ( Heinz , D10-He-4 ) ;
50860: LD_EXP 22
50864: PPUSH
50865: LD_STRING D10-He-4
50867: PPUSH
50868: CALL_OW 94
// DialogueOff ;
50872: CALL_OW 7
// ChangeMissionObjectives ( MOutStopreinforcements ) ;
50876: LD_STRING MOutStopreinforcements
50878: PPUSH
50879: CALL_OW 337
// break ;
50883: GO 50972
// end ; am_reinforcements_time = am_reinforcements_time - 0 0$1 ;
50885: LD_ADDR_EXP 103
50889: PUSH
50890: LD_EXP 103
50894: PUSH
50895: LD_INT 35
50897: MINUS
50898: ST_TO_ADDR
// counter = counter + 0 0$1 ;
50899: LD_ADDR_VAR 0 1
50903: PUSH
50904: LD_VAR 0 1
50908: PUSH
50909: LD_INT 35
50911: PLUS
50912: ST_TO_ADDR
// if counter = 1 1$0 then
50913: LD_VAR 0 1
50917: PUSH
50918: LD_INT 2100
50920: EQUAL
50921: IFFALSE 50962
// begin counter = 0 0$0 ;
50923: LD_ADDR_VAR 0 1
50927: PUSH
50928: LD_INT 0
50930: ST_TO_ADDR
// disp = disp - 1 ;
50931: LD_ADDR_VAR 0 2
50935: PUSH
50936: LD_VAR 0 2
50940: PUSH
50941: LD_INT 1
50943: MINUS
50944: ST_TO_ADDR
// display_strings = [ #Ar13a-AmReinforcements , disp ] ;
50945: LD_ADDR_OWVAR 47
50949: PUSH
50950: LD_STRING #Ar13a-AmReinforcements
50952: PUSH
50953: LD_VAR 0 2
50957: PUSH
50958: EMPTY
50959: LIST
50960: LIST
50961: ST_TO_ADDR
// end ; until disp = 0 ;
50962: LD_VAR 0 2
50966: PUSH
50967: LD_INT 0
50969: EQUAL
50970: IFFALSE 50829
// display_strings = [ ] ;
50972: LD_ADDR_OWVAR 47
50976: PUSH
50977: EMPTY
50978: ST_TO_ADDR
// while am_reinforcements_time > 0 0$0 do
50979: LD_EXP 103
50983: PUSH
50984: LD_INT 0
50986: GREATER
50987: IFFALSE 51012
// begin wait ( 0 0$1 ) ;
50989: LD_INT 35
50991: PPUSH
50992: CALL_OW 67
// am_reinforcements_time = am_reinforcements_time - 0 0$1 ;
50996: LD_ADDR_EXP 103
51000: PUSH
51001: LD_EXP 103
51005: PUSH
51006: LD_INT 35
51008: MINUS
51009: ST_TO_ADDR
// end ;
51010: GO 50979
// end ;
51012: PPOPN 2
51014: END
// every 0 0$1 + 0 0$0.2 trigger am_reinforcements_start and am_reinforcements_time <= 0 0$0 do var num_uns , i , humans_list , vehicles_list , un , fact , temp_list ;
51015: LD_EXP 104
51019: PUSH
51020: LD_EXP 103
51024: PUSH
51025: LD_INT 0
51027: LESSEQUAL
51028: AND
51029: IFFALSE 51898
51031: GO 51033
51033: DISABLE
51034: LD_INT 0
51036: PPUSH
51037: PPUSH
51038: PPUSH
51039: PPUSH
51040: PPUSH
51041: PPUSH
51042: PPUSH
// begin num_uns = [ 2 , 3 , 4 ] [ difficulty ] ;
51043: LD_ADDR_VAR 0 1
51047: PUSH
51048: LD_INT 2
51050: PUSH
51051: LD_INT 3
51053: PUSH
51054: LD_INT 4
51056: PUSH
51057: EMPTY
51058: LIST
51059: LIST
51060: LIST
51061: PUSH
51062: LD_OWVAR 67
51066: ARRAY
51067: ST_TO_ADDR
// InitHc ;
51068: CALL_OW 19
// humans_list = [ ] ;
51072: LD_ADDR_VAR 0 3
51076: PUSH
51077: EMPTY
51078: ST_TO_ADDR
// for i = 1 to num_uns do
51079: LD_ADDR_VAR 0 2
51083: PUSH
51084: DOUBLE
51085: LD_INT 1
51087: DEC
51088: ST_TO_ADDR
51089: LD_VAR 0 1
51093: PUSH
51094: FOR_TO
51095: IFFALSE 51151
// begin humans_list = humans_list ^ CreateUnitsWithClass ( 1 , [ class_sniper , class_engineer , class_mechanic ] [ ( i mod 3 ) + 1 ] , americans ) ;
51097: LD_ADDR_VAR 0 3
51101: PUSH
51102: LD_VAR 0 3
51106: PUSH
51107: LD_INT 1
51109: PPUSH
51110: LD_INT 5
51112: PUSH
51113: LD_INT 2
51115: PUSH
51116: LD_INT 3
51118: PUSH
51119: EMPTY
51120: LIST
51121: LIST
51122: LIST
51123: PUSH
51124: LD_VAR 0 2
51128: PUSH
51129: LD_INT 3
51131: MOD
51132: PUSH
51133: LD_INT 1
51135: PLUS
51136: ARRAY
51137: PPUSH
51138: LD_EXP 5
51142: PPUSH
51143: CALL 9322 0 3
51147: ADD
51148: ST_TO_ADDR
// end ;
51149: GO 51094
51151: POP
51152: POP
// InitUc ;
51153: CALL_OW 18
// InitVc ;
51157: CALL_OW 20
// uc_side = americans ;
51161: LD_ADDR_OWVAR 20
51165: PUSH
51166: LD_EXP 5
51170: ST_TO_ADDR
// uc_nation = nation_american ;
51171: LD_ADDR_OWVAR 21
51175: PUSH
51176: LD_INT 1
51178: ST_TO_ADDR
// uc_direction = 0 ;
51179: LD_ADDR_OWVAR 24
51183: PUSH
51184: LD_INT 0
51186: ST_TO_ADDR
// vc_chassis = us_light_wheeled ;
51187: LD_ADDR_OWVAR 37
51191: PUSH
51192: LD_INT 1
51194: ST_TO_ADDR
// vc_control = control_manual ;
51195: LD_ADDR_OWVAR 38
51199: PUSH
51200: LD_INT 1
51202: ST_TO_ADDR
// vc_engine = engine_combustion ;
51203: LD_ADDR_OWVAR 39
51207: PUSH
51208: LD_INT 1
51210: ST_TO_ADDR
// for i = 1 to num_uns do
51211: LD_ADDR_VAR 0 2
51215: PUSH
51216: DOUBLE
51217: LD_INT 1
51219: DEC
51220: ST_TO_ADDR
51221: LD_VAR 0 1
51225: PUSH
51226: FOR_TO
51227: IFFALSE 51304
// begin vc_weapon = [ us_machine_gun , us_light_gun ] [ Rand ( 1 , 2 ) ] ;
51229: LD_ADDR_OWVAR 40
51233: PUSH
51234: LD_INT 2
51236: PUSH
51237: LD_INT 3
51239: PUSH
51240: EMPTY
51241: LIST
51242: LIST
51243: PUSH
51244: LD_INT 1
51246: PPUSH
51247: LD_INT 2
51249: PPUSH
51250: CALL_OW 12
51254: ARRAY
51255: ST_TO_ADDR
// un = CreateVehicle ;
51256: LD_ADDR_VAR 0 5
51260: PUSH
51261: CALL_OW 45
51265: ST_TO_ADDR
// vehicles_list = vehicles_list ^ un ;
51266: LD_ADDR_VAR 0 4
51270: PUSH
51271: LD_VAR 0 4
51275: PUSH
51276: LD_VAR 0 5
51280: ADD
51281: ST_TO_ADDR
// PlaceHumanInUnit ( humans_list [ i ] , un ) ;
51282: LD_VAR 0 3
51286: PUSH
51287: LD_VAR 0 2
51291: ARRAY
51292: PPUSH
51293: LD_VAR 0 5
51297: PPUSH
51298: CALL_OW 52
// end ;
51302: GO 51226
51304: POP
51305: POP
// repeat wait ( 0 0$1 ) ;
51306: LD_INT 35
51308: PPUSH
51309: CALL_OW 67
// fact = 0 ;
51313: LD_ADDR_VAR 0 6
51317: PUSH
51318: LD_INT 0
51320: ST_TO_ADDR
// temp_list = ai_facts [ 1 ] diff sib_rocket_factory ;
51321: LD_ADDR_VAR 0 7
51325: PUSH
51326: LD_EXP 48
51330: PUSH
51331: LD_INT 1
51333: ARRAY
51334: PUSH
51335: LD_EXP 91
51339: DIFF
51340: ST_TO_ADDR
// if temp_list > 0 then
51341: LD_VAR 0 7
51345: PUSH
51346: LD_INT 0
51348: GREATER
51349: IFFALSE 51399
// if IsOk ( temp_list [ 1 ] ) and BuildingStatus ( temp_list [ 1 ] ) = bs_idle then
51351: LD_VAR 0 7
51355: PUSH
51356: LD_INT 1
51358: ARRAY
51359: PPUSH
51360: CALL_OW 302
51364: PUSH
51365: LD_VAR 0 7
51369: PUSH
51370: LD_INT 1
51372: ARRAY
51373: PPUSH
51374: CALL_OW 461
51378: PUSH
51379: LD_INT 2
51381: EQUAL
51382: AND
51383: IFFALSE 51399
// fact = temp_list [ 1 ] ;
51385: LD_ADDR_VAR 0 6
51389: PUSH
51390: LD_VAR 0 7
51394: PUSH
51395: LD_INT 1
51397: ARRAY
51398: ST_TO_ADDR
// vehicles_list = UnitFilter ( vehicles_list , [ f_lives , 1 ] ) ;
51399: LD_ADDR_VAR 0 4
51403: PUSH
51404: LD_VAR 0 4
51408: PPUSH
51409: LD_INT 24
51411: PUSH
51412: LD_INT 1
51414: PUSH
51415: EMPTY
51416: LIST
51417: LIST
51418: PPUSH
51419: CALL_OW 72
51423: ST_TO_ADDR
// humans_list = UnitFilter ( humans_list , [ f_lives , 1 ] ) ;
51424: LD_ADDR_VAR 0 3
51428: PUSH
51429: LD_VAR 0 3
51433: PPUSH
51434: LD_INT 24
51436: PUSH
51437: LD_INT 1
51439: PUSH
51440: EMPTY
51441: LIST
51442: LIST
51443: PPUSH
51444: CALL_OW 72
51448: ST_TO_ADDR
// for i in vehicles_list do
51449: LD_ADDR_VAR 0 2
51453: PUSH
51454: LD_VAR 0 4
51458: PUSH
51459: FOR_IN
51460: IFFALSE 51593
// begin if not IsPlaced ( i ) then
51462: LD_VAR 0 2
51466: PPUSH
51467: CALL_OW 305
51471: NOT
51472: IFFALSE 51489
// PlaceUnitArea ( i , am_enter_exit_south , false ) ;
51474: LD_VAR 0 2
51478: PPUSH
51479: LD_INT 11
51481: PPUSH
51482: LD_INT 0
51484: PPUSH
51485: CALL_OW 49
// if fact > 0 then
51489: LD_VAR 0 6
51493: PUSH
51494: LD_INT 0
51496: GREATER
51497: IFFALSE 51515
// ComRecycle ( i , fact ) else
51499: LD_VAR 0 2
51503: PPUSH
51504: LD_VAR 0 6
51508: PPUSH
51509: CALL_OW 168
51513: GO 51591
// if GetDistUnitXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) > 13 then
51515: LD_VAR 0 2
51519: PPUSH
51520: LD_EXP 41
51524: PUSH
51525: LD_INT 1
51527: ARRAY
51528: PUSH
51529: LD_INT 1
51531: ARRAY
51532: PPUSH
51533: LD_EXP 41
51537: PUSH
51538: LD_INT 1
51540: ARRAY
51541: PUSH
51542: LD_INT 2
51544: ARRAY
51545: PPUSH
51546: CALL_OW 297
51550: PUSH
51551: LD_INT 13
51553: GREATER
51554: IFFALSE 51591
// ComMoveXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) ;
51556: LD_VAR 0 2
51560: PPUSH
51561: LD_EXP 41
51565: PUSH
51566: LD_INT 1
51568: ARRAY
51569: PUSH
51570: LD_INT 1
51572: ARRAY
51573: PPUSH
51574: LD_EXP 41
51578: PUSH
51579: LD_INT 1
51581: ARRAY
51582: PUSH
51583: LD_INT 2
51585: ARRAY
51586: PPUSH
51587: CALL_OW 111
// end ;
51591: GO 51459
51593: POP
51594: POP
// for i in humans_list do
51595: LD_ADDR_VAR 0 2
51599: PUSH
51600: LD_VAR 0 3
51604: PUSH
51605: FOR_IN
51606: IFFALSE 51879
// if GetType ( IsInUnit ( i ) ) <> unit_vehicle then
51608: LD_VAR 0 2
51612: PPUSH
51613: CALL_OW 310
51617: PPUSH
51618: CALL_OW 247
51622: PUSH
51623: LD_INT 2
51625: NONEQUAL
51626: IFFALSE 51877
// if not IsInArea ( i , Am_base ) then
51628: LD_VAR 0 2
51632: PPUSH
51633: LD_INT 2
51635: PPUSH
51636: CALL_OW 308
51640: NOT
51641: IFFALSE 51680
// ComMoveXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) else
51643: LD_VAR 0 2
51647: PPUSH
51648: LD_EXP 41
51652: PUSH
51653: LD_INT 1
51655: ARRAY
51656: PUSH
51657: LD_INT 1
51659: ARRAY
51660: PPUSH
51661: LD_EXP 41
51665: PUSH
51666: LD_INT 1
51668: ARRAY
51669: PUSH
51670: LD_INT 2
51672: ARRAY
51673: PPUSH
51674: CALL_OW 111
51678: GO 51877
// begin case GetClass ( i ) of class_sniper :
51680: LD_VAR 0 2
51684: PPUSH
51685: CALL_OW 257
51689: PUSH
51690: LD_INT 5
51692: DOUBLE
51693: EQUAL
51694: IFTRUE 51698
51696: GO 51744
51698: POP
// begin temp_list = ai_soldiers [ 1 ] ^ i ;
51699: LD_ADDR_VAR 0 7
51703: PUSH
51704: LD_EXP 29
51708: PUSH
51709: LD_INT 1
51711: ARRAY
51712: PUSH
51713: LD_VAR 0 2
51717: ADD
51718: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , 1 , temp_list ) ;
51719: LD_ADDR_EXP 29
51723: PUSH
51724: LD_EXP 29
51728: PPUSH
51729: LD_INT 1
51731: PPUSH
51732: LD_VAR 0 7
51736: PPUSH
51737: CALL_OW 1
51741: ST_TO_ADDR
// end ; class_mechanic :
51742: GO 51853
51744: LD_INT 3
51746: DOUBLE
51747: EQUAL
51748: IFTRUE 51752
51750: GO 51798
51752: POP
// begin temp_list = ai_mechanics_defend [ 1 ] ^ i ;
51753: LD_ADDR_VAR 0 7
51757: PUSH
51758: LD_EXP 31
51762: PUSH
51763: LD_INT 1
51765: ARRAY
51766: PUSH
51767: LD_VAR 0 2
51771: ADD
51772: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , 1 , temp_list ) ;
51773: LD_ADDR_EXP 31
51777: PUSH
51778: LD_EXP 31
51782: PPUSH
51783: LD_INT 1
51785: PPUSH
51786: LD_VAR 0 7
51790: PPUSH
51791: CALL_OW 1
51795: ST_TO_ADDR
// end ; class_engineer :
51796: GO 51853
51798: LD_INT 2
51800: DOUBLE
51801: EQUAL
51802: IFTRUE 51806
51804: GO 51852
51806: POP
// begin temp_list = ai_engineers [ 1 ] ^ i ;
51807: LD_ADDR_VAR 0 7
51811: PUSH
51812: LD_EXP 30
51816: PUSH
51817: LD_INT 1
51819: ARRAY
51820: PUSH
51821: LD_VAR 0 2
51825: ADD
51826: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , 1 , temp_list ) ;
51827: LD_ADDR_EXP 30
51831: PUSH
51832: LD_EXP 30
51836: PPUSH
51837: LD_INT 1
51839: PPUSH
51840: LD_VAR 0 7
51844: PPUSH
51845: CALL_OW 1
51849: ST_TO_ADDR
// end ; end ;
51850: GO 51853
51852: POP
// humans_list = humans_list diff i ;
51853: LD_ADDR_VAR 0 3
51857: PUSH
51858: LD_VAR 0 3
51862: PUSH
51863: LD_VAR 0 2
51867: DIFF
51868: ST_TO_ADDR
// am_reinforcements_got_through = true ;
51869: LD_ADDR_EXP 113
51873: PUSH
51874: LD_INT 1
51876: ST_TO_ADDR
// end ;
51877: GO 51605
51879: POP
51880: POP
// until humans_list = 0 ;
51881: LD_VAR 0 3
51885: PUSH
51886: LD_INT 0
51888: EQUAL
51889: IFFALSE 51306
// ChangeMissionObjectives ( MOutStopreinforcements ) ;
51891: LD_STRING MOutStopreinforcements
51893: PPUSH
51894: CALL_OW 337
// end ;
51898: PPOPN 7
51900: END
// every 0 0$1 + 0 0$0.6 trigger freelancers_bombing_start do var human_list , countdown , i , temp_list , temp_list_2 , buildings_list , temp_list_3 , b , x , y , dir ; var hex_list , unit_hex_index ;
51901: LD_EXP 105
51905: IFFALSE 53249
51907: GO 51909
51909: DISABLE
51910: LD_INT 0
51912: PPUSH
51913: PPUSH
51914: PPUSH
51915: PPUSH
51916: PPUSH
51917: PPUSH
51918: PPUSH
51919: PPUSH
51920: PPUSH
51921: PPUSH
51922: PPUSH
51923: PPUSH
51924: PPUSH
// begin human_list = UnitFilter ( freelancers_leader ^ other_freelancers ^ Willard , [ f_alive ] ) ;
51925: LD_ADDR_VAR 0 1
51929: PUSH
51930: LD_EXP 25
51934: PUSH
51935: LD_EXP 26
51939: ADD
51940: PUSH
51941: LD_EXP 24
51945: ADD
51946: PPUSH
51947: LD_INT 51
51949: PUSH
51950: EMPTY
51951: LIST
51952: PPUSH
51953: CALL_OW 72
51957: ST_TO_ADDR
// if human_list = 0 then
51958: LD_VAR 0 1
51962: PUSH
51963: LD_INT 0
51965: EQUAL
51966: IFFALSE 51970
// exit ;
51968: GO 53249
// SetSide ( human_list , you_alt ) ;
51970: LD_VAR 0 1
51974: PPUSH
51975: LD_EXP 4
51979: PPUSH
51980: CALL_OW 235
// SetAttitude ( you_alt , you , att_friend , true ) ;
51984: LD_EXP 4
51988: PPUSH
51989: LD_EXP 2
51993: PPUSH
51994: LD_INT 1
51996: PPUSH
51997: LD_INT 1
51999: PPUSH
52000: CALL_OW 80
// countdown = 0 0$5 ;
52004: LD_ADDR_VAR 0 2
52008: PUSH
52009: LD_INT 175
52011: ST_TO_ADDR
// hex_list = [ [ 75 , 47 ] , [ 60 , 35 ] , [ 50 , 25 ] , [ 44 , 16 ] , [ 39 , 7 ] , [ 33 , 1 ] ] ;
52012: LD_ADDR_VAR 0 12
52016: PUSH
52017: LD_INT 75
52019: PUSH
52020: LD_INT 47
52022: PUSH
52023: EMPTY
52024: LIST
52025: LIST
52026: PUSH
52027: LD_INT 60
52029: PUSH
52030: LD_INT 35
52032: PUSH
52033: EMPTY
52034: LIST
52035: LIST
52036: PUSH
52037: LD_INT 50
52039: PUSH
52040: LD_INT 25
52042: PUSH
52043: EMPTY
52044: LIST
52045: LIST
52046: PUSH
52047: LD_INT 44
52049: PUSH
52050: LD_INT 16
52052: PUSH
52053: EMPTY
52054: LIST
52055: LIST
52056: PUSH
52057: LD_INT 39
52059: PUSH
52060: LD_INT 7
52062: PUSH
52063: EMPTY
52064: LIST
52065: LIST
52066: PUSH
52067: LD_INT 33
52069: PUSH
52070: LD_INT 1
52072: PUSH
52073: EMPTY
52074: LIST
52075: LIST
52076: PUSH
52077: EMPTY
52078: LIST
52079: LIST
52080: LIST
52081: LIST
52082: LIST
52083: LIST
52084: ST_TO_ADDR
// unit_hex_index = [ ] ;
52085: LD_ADDR_VAR 0 13
52089: PUSH
52090: EMPTY
52091: ST_TO_ADDR
// for i in human_list do
52092: LD_ADDR_VAR 0 3
52096: PUSH
52097: LD_VAR 0 1
52101: PUSH
52102: FOR_IN
52103: IFFALSE 52130
// unit_hex_index = Replace ( unit_hex_index , i , 1 ) ;
52105: LD_ADDR_VAR 0 13
52109: PUSH
52110: LD_VAR 0 13
52114: PPUSH
52115: LD_VAR 0 3
52119: PPUSH
52120: LD_INT 1
52122: PPUSH
52123: CALL_OW 1
52127: ST_TO_ADDR
52128: GO 52102
52130: POP
52131: POP
// repeat wait ( 0 0$1 ) ;
52132: LD_INT 35
52134: PPUSH
52135: CALL_OW 67
// human_list = UnitFilter ( human_list , [ f_alive ] ) ;
52139: LD_ADDR_VAR 0 1
52143: PUSH
52144: LD_VAR 0 1
52148: PPUSH
52149: LD_INT 51
52151: PUSH
52152: EMPTY
52153: LIST
52154: PPUSH
52155: CALL_OW 72
52159: ST_TO_ADDR
// countdown = countdown - 0 0$1 ;
52160: LD_ADDR_VAR 0 2
52164: PUSH
52165: LD_VAR 0 2
52169: PUSH
52170: LD_INT 35
52172: MINUS
52173: ST_TO_ADDR
// if countdown = 0 0$0 then
52174: LD_VAR 0 2
52178: PUSH
52179: LD_INT 0
52181: EQUAL
52182: IFFALSE 53033
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_breastwork ] , [ f_btype , b_bunker ] , [ f_btype , b_armoury ] , [ f_btype , b_barracks ] ] ] ) ;
52184: LD_ADDR_VAR 0 4
52188: PUSH
52189: LD_INT 22
52191: PUSH
52192: LD_EXP 2
52196: PUSH
52197: EMPTY
52198: LIST
52199: LIST
52200: PUSH
52201: LD_INT 2
52203: PUSH
52204: LD_INT 30
52206: PUSH
52207: LD_INT 31
52209: PUSH
52210: EMPTY
52211: LIST
52212: LIST
52213: PUSH
52214: LD_INT 30
52216: PUSH
52217: LD_INT 32
52219: PUSH
52220: EMPTY
52221: LIST
52222: LIST
52223: PUSH
52224: LD_INT 30
52226: PUSH
52227: LD_INT 4
52229: PUSH
52230: EMPTY
52231: LIST
52232: LIST
52233: PUSH
52234: LD_INT 30
52236: PUSH
52237: LD_INT 5
52239: PUSH
52240: EMPTY
52241: LIST
52242: LIST
52243: PUSH
52244: EMPTY
52245: LIST
52246: LIST
52247: LIST
52248: LIST
52249: LIST
52250: PUSH
52251: EMPTY
52252: LIST
52253: LIST
52254: PPUSH
52255: CALL_OW 69
52259: ST_TO_ADDR
// temp_list_2 = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] ] ) diff temp_list ;
52260: LD_ADDR_VAR 0 5
52264: PUSH
52265: LD_INT 22
52267: PUSH
52268: LD_EXP 2
52272: PUSH
52273: EMPTY
52274: LIST
52275: LIST
52276: PUSH
52277: LD_INT 21
52279: PUSH
52280: LD_INT 3
52282: PUSH
52283: EMPTY
52284: LIST
52285: LIST
52286: PUSH
52287: EMPTY
52288: LIST
52289: LIST
52290: PPUSH
52291: CALL_OW 69
52295: PUSH
52296: LD_VAR 0 4
52300: DIFF
52301: ST_TO_ADDR
// buildings_list = [ ] ;
52302: LD_ADDR_VAR 0 6
52306: PUSH
52307: EMPTY
52308: ST_TO_ADDR
// for i = 1 to [ 1 , 2 , 3 ] [ difficulty ] do
52309: LD_ADDR_VAR 0 3
52313: PUSH
52314: DOUBLE
52315: LD_INT 1
52317: DEC
52318: ST_TO_ADDR
52319: LD_INT 1
52321: PUSH
52322: LD_INT 2
52324: PUSH
52325: LD_INT 3
52327: PUSH
52328: EMPTY
52329: LIST
52330: LIST
52331: LIST
52332: PUSH
52333: LD_OWVAR 67
52337: ARRAY
52338: PUSH
52339: FOR_TO
52340: IFFALSE 52422
// begin if temp_list = 0 then
52342: LD_VAR 0 4
52346: PUSH
52347: LD_INT 0
52349: EQUAL
52350: IFFALSE 52354
// break ;
52352: GO 52422
// temp_list_3 = temp_list ;
52354: LD_ADDR_VAR 0 7
52358: PUSH
52359: LD_VAR 0 4
52363: ST_TO_ADDR
// b = temp_list_3 [ Rand ( 1 , temp_list_3 ) ] ;
52364: LD_ADDR_VAR 0 8
52368: PUSH
52369: LD_VAR 0 7
52373: PUSH
52374: LD_INT 1
52376: PPUSH
52377: LD_VAR 0 7
52381: PPUSH
52382: CALL_OW 12
52386: ARRAY
52387: ST_TO_ADDR
// buildings_list = buildings_list ^ b ;
52388: LD_ADDR_VAR 0 6
52392: PUSH
52393: LD_VAR 0 6
52397: PUSH
52398: LD_VAR 0 8
52402: ADD
52403: ST_TO_ADDR
// temp_list = temp_list diff b ;
52404: LD_ADDR_VAR 0 4
52408: PUSH
52409: LD_VAR 0 4
52413: PUSH
52414: LD_VAR 0 8
52418: DIFF
52419: ST_TO_ADDR
// end ;
52420: GO 52339
52422: POP
52423: POP
// for i = 1 to [ 1 , 2 , 3 ] [ difficulty ] do
52424: LD_ADDR_VAR 0 3
52428: PUSH
52429: DOUBLE
52430: LD_INT 1
52432: DEC
52433: ST_TO_ADDR
52434: LD_INT 1
52436: PUSH
52437: LD_INT 2
52439: PUSH
52440: LD_INT 3
52442: PUSH
52443: EMPTY
52444: LIST
52445: LIST
52446: LIST
52447: PUSH
52448: LD_OWVAR 67
52452: ARRAY
52453: PUSH
52454: FOR_TO
52455: IFFALSE 52537
// begin if temp_list_2 = 0 then
52457: LD_VAR 0 5
52461: PUSH
52462: LD_INT 0
52464: EQUAL
52465: IFFALSE 52469
// break ;
52467: GO 52537
// temp_list_3 = temp_list_2 ;
52469: LD_ADDR_VAR 0 7
52473: PUSH
52474: LD_VAR 0 5
52478: ST_TO_ADDR
// b = temp_list_3 [ Rand ( 1 , temp_list_3 ) ] ;
52479: LD_ADDR_VAR 0 8
52483: PUSH
52484: LD_VAR 0 7
52488: PUSH
52489: LD_INT 1
52491: PPUSH
52492: LD_VAR 0 7
52496: PPUSH
52497: CALL_OW 12
52501: ARRAY
52502: ST_TO_ADDR
// buildings_list = buildings_list ^ b ;
52503: LD_ADDR_VAR 0 6
52507: PUSH
52508: LD_VAR 0 6
52512: PUSH
52513: LD_VAR 0 8
52517: ADD
52518: ST_TO_ADDR
// temp_list_2 = temp_list_2 diff b ;
52519: LD_ADDR_VAR 0 5
52523: PUSH
52524: LD_VAR 0 5
52528: PUSH
52529: LD_VAR 0 8
52533: DIFF
52534: ST_TO_ADDR
// end ;
52535: GO 52454
52537: POP
52538: POP
// temp_list = [ ] ;
52539: LD_ADDR_VAR 0 4
52543: PUSH
52544: EMPTY
52545: ST_TO_ADDR
// for b in buildings_list do
52546: LD_ADDR_VAR 0 8
52550: PUSH
52551: LD_VAR 0 6
52555: PUSH
52556: FOR_IN
52557: IFFALSE 52705
// begin dir = Rand ( 0 , 5 ) ;
52559: LD_ADDR_VAR 0 11
52563: PUSH
52564: LD_INT 0
52566: PPUSH
52567: LD_INT 5
52569: PPUSH
52570: CALL_OW 12
52574: ST_TO_ADDR
// x = GetX ( b ) ;
52575: LD_ADDR_VAR 0 9
52579: PUSH
52580: LD_VAR 0 8
52584: PPUSH
52585: CALL_OW 250
52589: ST_TO_ADDR
// y = GetY ( b ) ;
52590: LD_ADDR_VAR 0 10
52594: PUSH
52595: LD_VAR 0 8
52599: PPUSH
52600: CALL_OW 251
52604: ST_TO_ADDR
// while HexInfo ( x , y ) = b do
52605: LD_VAR 0 9
52609: PPUSH
52610: LD_VAR 0 10
52614: PPUSH
52615: CALL_OW 428
52619: PUSH
52620: LD_VAR 0 8
52624: EQUAL
52625: IFFALSE 52675
// begin x = ShiftX ( x , dir , 1 ) ;
52627: LD_ADDR_VAR 0 9
52631: PUSH
52632: LD_VAR 0 9
52636: PPUSH
52637: LD_VAR 0 11
52641: PPUSH
52642: LD_INT 1
52644: PPUSH
52645: CALL_OW 272
52649: ST_TO_ADDR
// y = Shifty ( y , dir , 1 ) ;
52650: LD_ADDR_VAR 0 10
52654: PUSH
52655: LD_VAR 0 10
52659: PPUSH
52660: LD_VAR 0 11
52664: PPUSH
52665: LD_INT 1
52667: PPUSH
52668: CALL_OW 273
52672: ST_TO_ADDR
// end ;
52673: GO 52605
// temp_list = temp_list ^ [ [ x , y ] ] ;
52675: LD_ADDR_VAR 0 4
52679: PUSH
52680: LD_VAR 0 4
52684: PUSH
52685: LD_VAR 0 9
52689: PUSH
52690: LD_VAR 0 10
52694: PUSH
52695: EMPTY
52696: LIST
52697: LIST
52698: PUSH
52699: EMPTY
52700: LIST
52701: ADD
52702: ST_TO_ADDR
// end ;
52703: GO 52556
52705: POP
52706: POP
// for i in temp_list do
52707: LD_ADDR_VAR 0 3
52711: PUSH
52712: LD_VAR 0 4
52716: PUSH
52717: FOR_IN
52718: IFFALSE 52762
// begin wait ( Rand ( 0 0$0.3 , 0 0$0.8 ) ) ;
52720: LD_INT 10
52722: PPUSH
52723: LD_INT 28
52725: PPUSH
52726: CALL_OW 12
52730: PPUSH
52731: CALL_OW 67
// MineExplosion ( i [ 1 ] , i [ 2 ] , 1 ) ;
52735: LD_VAR 0 3
52739: PUSH
52740: LD_INT 1
52742: ARRAY
52743: PPUSH
52744: LD_VAR 0 3
52748: PUSH
52749: LD_INT 2
52751: ARRAY
52752: PPUSH
52753: LD_INT 1
52755: PPUSH
52756: CALL_OW 453
// end ;
52760: GO 52717
52762: POP
52763: POP
// wait ( 0 0$0.5 ) ;
52764: LD_INT 18
52766: PPUSH
52767: CALL_OW 67
// if freelancers_leader in human_list then
52771: LD_EXP 25
52775: PUSH
52776: LD_VAR 0 1
52780: IN
52781: IFFALSE 52795
// i = freelancers_leader else
52783: LD_ADDR_VAR 0 3
52787: PUSH
52788: LD_EXP 25
52792: ST_TO_ADDR
52793: GO 52873
// if Willard in human_list then
52795: LD_EXP 24
52799: PUSH
52800: LD_VAR 0 1
52804: IN
52805: IFFALSE 52819
// i = Willard else
52807: LD_ADDR_VAR 0 3
52811: PUSH
52812: LD_EXP 24
52816: ST_TO_ADDR
52817: GO 52873
// begin temp_list = human_list ;
52819: LD_ADDR_VAR 0 4
52823: PUSH
52824: LD_VAR 0 1
52828: ST_TO_ADDR
// if temp_list > 0 then
52829: LD_VAR 0 4
52833: PUSH
52834: LD_INT 0
52836: GREATER
52837: IFFALSE 52865
// i = temp_list [ Rand ( 1 , temp_list ) ] else
52839: LD_ADDR_VAR 0 3
52843: PUSH
52844: LD_VAR 0 4
52848: PUSH
52849: LD_INT 1
52851: PPUSH
52852: LD_VAR 0 4
52856: PPUSH
52857: CALL_OW 12
52861: ARRAY
52862: ST_TO_ADDR
52863: GO 52873
// i = 0 ;
52865: LD_ADDR_VAR 0 3
52869: PUSH
52870: LD_INT 0
52872: ST_TO_ADDR
// end ; if i > 0 then
52873: LD_VAR 0 3
52877: PUSH
52878: LD_INT 0
52880: GREATER
52881: IFFALSE 53013
// begin DialogueOn ;
52883: CALL_OW 6
// case i of Gordon :
52887: LD_VAR 0 3
52891: PUSH
52892: LD_EXP 23
52896: DOUBLE
52897: EQUAL
52898: IFTRUE 52902
52900: GO 52917
52902: POP
// ForceSay ( i , D12-Go-1 ) ; freelancers_leader :
52903: LD_VAR 0 3
52907: PPUSH
52908: LD_STRING D12-Go-1
52910: PPUSH
52911: CALL_OW 91
52915: GO 53009
52917: LD_EXP 25
52921: DOUBLE
52922: EQUAL
52923: IFTRUE 52927
52925: GO 52942
52927: POP
// ForceSay ( i , D12-FLea-1 ) ; Willard :
52928: LD_VAR 0 3
52932: PPUSH
52933: LD_STRING D12-FLea-1
52935: PPUSH
52936: CALL_OW 91
52940: GO 53009
52942: LD_EXP 24
52946: DOUBLE
52947: EQUAL
52948: IFTRUE 52952
52950: GO 52967
52952: POP
// ForceSay ( i , D12-Wi-1 ) ; else
52953: LD_VAR 0 3
52957: PPUSH
52958: LD_STRING D12-Wi-1
52960: PPUSH
52961: CALL_OW 91
52965: GO 53009
52967: POP
// if GetSex ( i ) = sex_male then
52968: LD_VAR 0 3
52972: PPUSH
52973: CALL_OW 258
52977: PUSH
52978: LD_INT 1
52980: EQUAL
52981: IFFALSE 52997
// ForceSay ( i , D12-SomeM-1 ) else
52983: LD_VAR 0 3
52987: PPUSH
52988: LD_STRING D12-SomeM-1
52990: PPUSH
52991: CALL_OW 91
52995: GO 53009
// ForceSay ( i , D12-SomeM-1 ) ; end ;
52997: LD_VAR 0 3
53001: PPUSH
53002: LD_STRING D12-SomeM-1
53004: PPUSH
53005: CALL_OW 91
// DialogueOff ;
53009: CALL_OW 7
// end ; SetAttitude ( you_alt , you , att_neutral , true ) ;
53013: LD_EXP 4
53017: PPUSH
53018: LD_EXP 2
53022: PPUSH
53023: LD_INT 0
53025: PPUSH
53026: LD_INT 1
53028: PPUSH
53029: CALL_OW 80
// end ; temp_list = GetHumansOutOfUnits ( human_list ) ;
53033: LD_ADDR_VAR 0 4
53037: PUSH
53038: LD_VAR 0 1
53042: PPUSH
53043: CALL 28688 0 1
53047: ST_TO_ADDR
// for i in temp_list do
53048: LD_ADDR_VAR 0 3
53052: PUSH
53053: LD_VAR 0 4
53057: PUSH
53058: FOR_IN
53059: IFFALSE 53237
// begin if GetDistUnitXY ( i , hex_list [ unit_hex_index [ i ] ] [ 1 ] , hex_list [ unit_hex_index [ i ] ] [ 2 ] ) > 2 then
53061: LD_VAR 0 3
53065: PPUSH
53066: LD_VAR 0 12
53070: PUSH
53071: LD_VAR 0 13
53075: PUSH
53076: LD_VAR 0 3
53080: ARRAY
53081: ARRAY
53082: PUSH
53083: LD_INT 1
53085: ARRAY
53086: PPUSH
53087: LD_VAR 0 12
53091: PUSH
53092: LD_VAR 0 13
53096: PUSH
53097: LD_VAR 0 3
53101: ARRAY
53102: ARRAY
53103: PUSH
53104: LD_INT 2
53106: ARRAY
53107: PPUSH
53108: CALL_OW 297
53112: PUSH
53113: LD_INT 2
53115: GREATER
53116: IFFALSE 53171
// ComMoveXY ( i , hex_list [ unit_hex_index [ i ] ] [ 1 ] , hex_list [ unit_hex_index [ i ] ] [ 2 ] ) else
53118: LD_VAR 0 3
53122: PPUSH
53123: LD_VAR 0 12
53127: PUSH
53128: LD_VAR 0 13
53132: PUSH
53133: LD_VAR 0 3
53137: ARRAY
53138: ARRAY
53139: PUSH
53140: LD_INT 1
53142: ARRAY
53143: PPUSH
53144: LD_VAR 0 12
53148: PUSH
53149: LD_VAR 0 13
53153: PUSH
53154: LD_VAR 0 3
53158: ARRAY
53159: ARRAY
53160: PUSH
53161: LD_INT 2
53163: ARRAY
53164: PPUSH
53165: CALL_OW 111
53169: GO 53235
// if unit_hex_index [ i ] < hex_list then
53171: LD_VAR 0 13
53175: PUSH
53176: LD_VAR 0 3
53180: ARRAY
53181: PUSH
53182: LD_VAR 0 12
53186: LESS
53187: IFFALSE 53226
// begin unit_hex_index = Replace ( unit_hex_index , i , unit_hex_index [ i ] + 1 ) ;
53189: LD_ADDR_VAR 0 13
53193: PUSH
53194: LD_VAR 0 13
53198: PPUSH
53199: LD_VAR 0 3
53203: PPUSH
53204: LD_VAR 0 13
53208: PUSH
53209: LD_VAR 0 3
53213: ARRAY
53214: PUSH
53215: LD_INT 1
53217: PLUS
53218: PPUSH
53219: CALL_OW 1
53223: ST_TO_ADDR
// end else
53224: GO 53235
// RemoveUnit ( i ) ;
53226: LD_VAR 0 3
53230: PPUSH
53231: CALL_OW 64
// end ;
53235: GO 53058
53237: POP
53238: POP
// until human_list = 0 ;
53239: LD_VAR 0 1
53243: PUSH
53244: LD_INT 0
53246: EQUAL
53247: IFFALSE 52132
// end ;
53249: PPOPN 13
53251: END
// every 0 0$1 + 0 0$0.5 trigger kill_gensher_objective_status = 1 do
53252: LD_EXP 109
53256: PUSH
53257: LD_INT 1
53259: EQUAL
53260: IFFALSE 53289
53262: GO 53264
53264: DISABLE
// begin repeat wait ( 0 0$1 ) ;
53265: LD_INT 35
53267: PPUSH
53268: CALL_OW 67
// until kill_gensher_objective_status = 2 ;
53272: LD_EXP 109
53276: PUSH
53277: LD_INT 2
53279: EQUAL
53280: IFFALSE 53265
// ChangeMissionObjectives ( MOutKillGensher ) ;
53282: LD_STRING MOutKillGensher
53284: PPUSH
53285: CALL_OW 337
// end ;
53289: END
// every 0 0$1 + 0 0$0.1 do var temp_list , temp_list_2 , i , num ; var north_defences , east_defences , south_defences , initial_people , group_1 , group_2 , hexes_group_1 , hexes_group_2 ; var unit_hex_index , base , small_base_people , hexes_small_base_people ;
53290: GO 53292
53292: DISABLE
53293: LD_INT 0
53295: PPUSH
53296: PPUSH
53297: PPUSH
53298: PPUSH
53299: PPUSH
53300: PPUSH
53301: PPUSH
53302: PPUSH
53303: PPUSH
53304: PPUSH
53305: PPUSH
53306: PPUSH
53307: PPUSH
53308: PPUSH
53309: PPUSH
53310: PPUSH
// begin base = 1 ;
53311: LD_ADDR_VAR 0 14
53315: PUSH
53316: LD_INT 1
53318: ST_TO_ADDR
// north_defences = FilterAllUnits ( [ [ f_side , americans ] , [ f_inarea , am_base_north ] , [ f_or , [ f_btype , b_breastwork ] , [ f_btype , b_bunker ] , [ f_btype , b_turret ] , [ f_btype , b_armoury ] , [ f_btype , b_barracks ] , [ f_btype , b_fort ] ] ] ) + 0 ;
53319: LD_ADDR_VAR 0 5
53323: PUSH
53324: LD_INT 22
53326: PUSH
53327: LD_EXP 5
53331: PUSH
53332: EMPTY
53333: LIST
53334: LIST
53335: PUSH
53336: LD_INT 95
53338: PUSH
53339: LD_INT 19
53341: PUSH
53342: EMPTY
53343: LIST
53344: LIST
53345: PUSH
53346: LD_INT 2
53348: PUSH
53349: LD_INT 30
53351: PUSH
53352: LD_INT 31
53354: PUSH
53355: EMPTY
53356: LIST
53357: LIST
53358: PUSH
53359: LD_INT 30
53361: PUSH
53362: LD_INT 32
53364: PUSH
53365: EMPTY
53366: LIST
53367: LIST
53368: PUSH
53369: LD_INT 30
53371: PUSH
53372: LD_INT 33
53374: PUSH
53375: EMPTY
53376: LIST
53377: LIST
53378: PUSH
53379: LD_INT 30
53381: PUSH
53382: LD_INT 4
53384: PUSH
53385: EMPTY
53386: LIST
53387: LIST
53388: PUSH
53389: LD_INT 30
53391: PUSH
53392: LD_INT 5
53394: PUSH
53395: EMPTY
53396: LIST
53397: LIST
53398: PUSH
53399: LD_INT 30
53401: PUSH
53402: LD_INT 35
53404: PUSH
53405: EMPTY
53406: LIST
53407: LIST
53408: PUSH
53409: EMPTY
53410: LIST
53411: LIST
53412: LIST
53413: LIST
53414: LIST
53415: LIST
53416: LIST
53417: PUSH
53418: EMPTY
53419: LIST
53420: LIST
53421: LIST
53422: PPUSH
53423: CALL_OW 69
53427: PUSH
53428: LD_INT 0
53430: PLUS
53431: ST_TO_ADDR
// east_defences = FilterAllUnits ( [ [ f_side , americans ] , [ f_inarea , am_base_east ] , [ f_or , [ f_btype , b_breastwork ] , [ f_btype , b_bunker ] , [ f_btype , b_turret ] , [ f_btype , b_armoury ] , [ f_btype , b_barracks ] , [ f_btype , b_fort ] ] ] ) + 0 ;
53432: LD_ADDR_VAR 0 6
53436: PUSH
53437: LD_INT 22
53439: PUSH
53440: LD_EXP 5
53444: PUSH
53445: EMPTY
53446: LIST
53447: LIST
53448: PUSH
53449: LD_INT 95
53451: PUSH
53452: LD_INT 20
53454: PUSH
53455: EMPTY
53456: LIST
53457: LIST
53458: PUSH
53459: LD_INT 2
53461: PUSH
53462: LD_INT 30
53464: PUSH
53465: LD_INT 31
53467: PUSH
53468: EMPTY
53469: LIST
53470: LIST
53471: PUSH
53472: LD_INT 30
53474: PUSH
53475: LD_INT 32
53477: PUSH
53478: EMPTY
53479: LIST
53480: LIST
53481: PUSH
53482: LD_INT 30
53484: PUSH
53485: LD_INT 33
53487: PUSH
53488: EMPTY
53489: LIST
53490: LIST
53491: PUSH
53492: LD_INT 30
53494: PUSH
53495: LD_INT 4
53497: PUSH
53498: EMPTY
53499: LIST
53500: LIST
53501: PUSH
53502: LD_INT 30
53504: PUSH
53505: LD_INT 5
53507: PUSH
53508: EMPTY
53509: LIST
53510: LIST
53511: PUSH
53512: LD_INT 30
53514: PUSH
53515: LD_INT 35
53517: PUSH
53518: EMPTY
53519: LIST
53520: LIST
53521: PUSH
53522: EMPTY
53523: LIST
53524: LIST
53525: LIST
53526: LIST
53527: LIST
53528: LIST
53529: LIST
53530: PUSH
53531: EMPTY
53532: LIST
53533: LIST
53534: LIST
53535: PPUSH
53536: CALL_OW 69
53540: PUSH
53541: LD_INT 0
53543: PLUS
53544: ST_TO_ADDR
// south_defences = FilterAllUnits ( [ [ f_side , americans ] , [ f_inarea , am_base_south ] , [ f_or , [ f_btype , b_breastwork ] , [ f_btype , b_bunker ] , [ f_btype , b_turret ] , [ f_btype , b_armoury ] , [ f_btype , b_barracks ] , [ f_btype , b_fort ] ] ] ) + 0 ;
53545: LD_ADDR_VAR 0 7
53549: PUSH
53550: LD_INT 22
53552: PUSH
53553: LD_EXP 5
53557: PUSH
53558: EMPTY
53559: LIST
53560: LIST
53561: PUSH
53562: LD_INT 95
53564: PUSH
53565: LD_INT 21
53567: PUSH
53568: EMPTY
53569: LIST
53570: LIST
53571: PUSH
53572: LD_INT 2
53574: PUSH
53575: LD_INT 30
53577: PUSH
53578: LD_INT 31
53580: PUSH
53581: EMPTY
53582: LIST
53583: LIST
53584: PUSH
53585: LD_INT 30
53587: PUSH
53588: LD_INT 32
53590: PUSH
53591: EMPTY
53592: LIST
53593: LIST
53594: PUSH
53595: LD_INT 30
53597: PUSH
53598: LD_INT 33
53600: PUSH
53601: EMPTY
53602: LIST
53603: LIST
53604: PUSH
53605: LD_INT 30
53607: PUSH
53608: LD_INT 4
53610: PUSH
53611: EMPTY
53612: LIST
53613: LIST
53614: PUSH
53615: LD_INT 30
53617: PUSH
53618: LD_INT 5
53620: PUSH
53621: EMPTY
53622: LIST
53623: LIST
53624: PUSH
53625: LD_INT 30
53627: PUSH
53628: LD_INT 35
53630: PUSH
53631: EMPTY
53632: LIST
53633: LIST
53634: PUSH
53635: EMPTY
53636: LIST
53637: LIST
53638: LIST
53639: LIST
53640: LIST
53641: LIST
53642: LIST
53643: PUSH
53644: EMPTY
53645: LIST
53646: LIST
53647: LIST
53648: PPUSH
53649: CALL_OW 69
53653: PUSH
53654: LD_INT 0
53656: PLUS
53657: ST_TO_ADDR
// initial_people = FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_human ] ] ) + 0 ;
53658: LD_ADDR_VAR 0 8
53662: PUSH
53663: LD_INT 22
53665: PUSH
53666: LD_EXP 5
53670: PUSH
53671: EMPTY
53672: LIST
53673: LIST
53674: PUSH
53675: LD_INT 21
53677: PUSH
53678: LD_INT 1
53680: PUSH
53681: EMPTY
53682: LIST
53683: LIST
53684: PUSH
53685: EMPTY
53686: LIST
53687: LIST
53688: PPUSH
53689: CALL_OW 69
53693: PUSH
53694: LD_INT 0
53696: PLUS
53697: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
53698: LD_INT 35
53700: PPUSH
53701: CALL_OW 67
// if sib_rocket_fired then
53705: LD_EXP 117
53709: IFFALSE 53713
// exit ;
53711: GO 56613
// if not BaseUnderAttack ( base , - 1 ) then
53713: LD_VAR 0 14
53717: PPUSH
53718: LD_INT 1
53720: NEG
53721: PPUSH
53722: CALL 28793 0 2
53726: NOT
53727: IFFALSE 53731
// continue ;
53729: GO 53698
// if FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , Am_base ] ] ) = 0 then
53731: LD_INT 22
53733: PUSH
53734: LD_EXP 2
53738: PUSH
53739: EMPTY
53740: LIST
53741: LIST
53742: PUSH
53743: LD_INT 95
53745: PUSH
53746: LD_INT 2
53748: PUSH
53749: EMPTY
53750: LIST
53751: LIST
53752: PUSH
53753: EMPTY
53754: LIST
53755: LIST
53756: PPUSH
53757: CALL_OW 69
53761: PUSH
53762: LD_INT 0
53764: EQUAL
53765: IFFALSE 53769
// continue ;
53767: GO 53698
// temp_list = FilterAllUnits ( [ [ f_side , americans ] , [ f_ok ] , [ f_inarea , am_base_north ] , [ f_or , [ f_btype , b_breastwork ] , [ f_btype , b_bunker ] , [ f_btype , b_turret ] , [ f_btype , b_armoury ] , [ f_btype , b_barracks ] , [ f_btype , b_fort ] ] ] ) ;
53769: LD_ADDR_VAR 0 1
53773: PUSH
53774: LD_INT 22
53776: PUSH
53777: LD_EXP 5
53781: PUSH
53782: EMPTY
53783: LIST
53784: LIST
53785: PUSH
53786: LD_INT 50
53788: PUSH
53789: EMPTY
53790: LIST
53791: PUSH
53792: LD_INT 95
53794: PUSH
53795: LD_INT 19
53797: PUSH
53798: EMPTY
53799: LIST
53800: LIST
53801: PUSH
53802: LD_INT 2
53804: PUSH
53805: LD_INT 30
53807: PUSH
53808: LD_INT 31
53810: PUSH
53811: EMPTY
53812: LIST
53813: LIST
53814: PUSH
53815: LD_INT 30
53817: PUSH
53818: LD_INT 32
53820: PUSH
53821: EMPTY
53822: LIST
53823: LIST
53824: PUSH
53825: LD_INT 30
53827: PUSH
53828: LD_INT 33
53830: PUSH
53831: EMPTY
53832: LIST
53833: LIST
53834: PUSH
53835: LD_INT 30
53837: PUSH
53838: LD_INT 4
53840: PUSH
53841: EMPTY
53842: LIST
53843: LIST
53844: PUSH
53845: LD_INT 30
53847: PUSH
53848: LD_INT 5
53850: PUSH
53851: EMPTY
53852: LIST
53853: LIST
53854: PUSH
53855: LD_INT 30
53857: PUSH
53858: LD_INT 35
53860: PUSH
53861: EMPTY
53862: LIST
53863: LIST
53864: PUSH
53865: EMPTY
53866: LIST
53867: LIST
53868: LIST
53869: LIST
53870: LIST
53871: LIST
53872: LIST
53873: PUSH
53874: EMPTY
53875: LIST
53876: LIST
53877: LIST
53878: LIST
53879: PPUSH
53880: CALL_OW 69
53884: ST_TO_ADDR
// if temp_list <= 1 or temp_list <= RoundToNearestInteger ( north_defences * 0.25 ) and FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , am_base_north ] ] ) > 0 then
53885: LD_VAR 0 1
53889: PUSH
53890: LD_INT 1
53892: LESSEQUAL
53893: PUSH
53894: LD_VAR 0 1
53898: PUSH
53899: LD_VAR 0 5
53903: PUSH
53904: LD_REAL  2.50000000000000E-0001
53907: MUL
53908: PPUSH
53909: CALL 56616 0 1
53913: LESSEQUAL
53914: PUSH
53915: LD_INT 22
53917: PUSH
53918: LD_EXP 2
53922: PUSH
53923: EMPTY
53924: LIST
53925: LIST
53926: PUSH
53927: LD_INT 95
53929: PUSH
53930: LD_INT 19
53932: PUSH
53933: EMPTY
53934: LIST
53935: LIST
53936: PUSH
53937: EMPTY
53938: LIST
53939: LIST
53940: PPUSH
53941: CALL_OW 69
53945: PUSH
53946: LD_INT 0
53948: GREATER
53949: AND
53950: OR
53951: IFFALSE 53963
// begin am_scientists_escape_status = 1 ;
53953: LD_ADDR_EXP 111
53957: PUSH
53958: LD_INT 1
53960: ST_TO_ADDR
// break ;
53961: GO 54475
// end ; temp_list = FilterAllUnits ( [ [ f_side , americans ] , [ f_ok ] , [ f_inarea , am_base_east ] , [ f_or , [ f_btype , b_breastwork ] , [ f_btype , b_bunker ] , [ f_btype , b_turret ] , [ f_btype , b_armoury ] , [ f_btype , b_barracks ] , [ f_btype , b_fort ] ] ] ) ;
53963: LD_ADDR_VAR 0 1
53967: PUSH
53968: LD_INT 22
53970: PUSH
53971: LD_EXP 5
53975: PUSH
53976: EMPTY
53977: LIST
53978: LIST
53979: PUSH
53980: LD_INT 50
53982: PUSH
53983: EMPTY
53984: LIST
53985: PUSH
53986: LD_INT 95
53988: PUSH
53989: LD_INT 20
53991: PUSH
53992: EMPTY
53993: LIST
53994: LIST
53995: PUSH
53996: LD_INT 2
53998: PUSH
53999: LD_INT 30
54001: PUSH
54002: LD_INT 31
54004: PUSH
54005: EMPTY
54006: LIST
54007: LIST
54008: PUSH
54009: LD_INT 30
54011: PUSH
54012: LD_INT 32
54014: PUSH
54015: EMPTY
54016: LIST
54017: LIST
54018: PUSH
54019: LD_INT 30
54021: PUSH
54022: LD_INT 33
54024: PUSH
54025: EMPTY
54026: LIST
54027: LIST
54028: PUSH
54029: LD_INT 30
54031: PUSH
54032: LD_INT 4
54034: PUSH
54035: EMPTY
54036: LIST
54037: LIST
54038: PUSH
54039: LD_INT 30
54041: PUSH
54042: LD_INT 5
54044: PUSH
54045: EMPTY
54046: LIST
54047: LIST
54048: PUSH
54049: LD_INT 30
54051: PUSH
54052: LD_INT 35
54054: PUSH
54055: EMPTY
54056: LIST
54057: LIST
54058: PUSH
54059: EMPTY
54060: LIST
54061: LIST
54062: LIST
54063: LIST
54064: LIST
54065: LIST
54066: LIST
54067: PUSH
54068: EMPTY
54069: LIST
54070: LIST
54071: LIST
54072: LIST
54073: PPUSH
54074: CALL_OW 69
54078: ST_TO_ADDR
// if temp_list <= 1 or temp_list <= RoundToNearestInteger ( east_defences * 0.25 ) and FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , am_base_east_near ] ] ) > 0 then
54079: LD_VAR 0 1
54083: PUSH
54084: LD_INT 1
54086: LESSEQUAL
54087: PUSH
54088: LD_VAR 0 1
54092: PUSH
54093: LD_VAR 0 6
54097: PUSH
54098: LD_REAL  2.50000000000000E-0001
54101: MUL
54102: PPUSH
54103: CALL 56616 0 1
54107: LESSEQUAL
54108: PUSH
54109: LD_INT 22
54111: PUSH
54112: LD_EXP 2
54116: PUSH
54117: EMPTY
54118: LIST
54119: LIST
54120: PUSH
54121: LD_INT 95
54123: PUSH
54124: LD_INT 23
54126: PUSH
54127: EMPTY
54128: LIST
54129: LIST
54130: PUSH
54131: EMPTY
54132: LIST
54133: LIST
54134: PPUSH
54135: CALL_OW 69
54139: PUSH
54140: LD_INT 0
54142: GREATER
54143: AND
54144: OR
54145: IFFALSE 54157
// begin am_scientists_escape_status = 1 ;
54147: LD_ADDR_EXP 111
54151: PUSH
54152: LD_INT 1
54154: ST_TO_ADDR
// break ;
54155: GO 54475
// end ; temp_list = FilterAllUnits ( [ [ f_side , americans ] , [ f_ok ] , [ f_inarea , am_base_south ] , [ f_or , [ f_btype , b_breastwork ] , [ f_btype , b_bunker ] , [ f_btype , b_turret ] , [ f_btype , b_armoury ] , [ f_btype , b_barracks ] , [ f_btype , b_fort ] ] ] ) ;
54157: LD_ADDR_VAR 0 1
54161: PUSH
54162: LD_INT 22
54164: PUSH
54165: LD_EXP 5
54169: PUSH
54170: EMPTY
54171: LIST
54172: LIST
54173: PUSH
54174: LD_INT 50
54176: PUSH
54177: EMPTY
54178: LIST
54179: PUSH
54180: LD_INT 95
54182: PUSH
54183: LD_INT 21
54185: PUSH
54186: EMPTY
54187: LIST
54188: LIST
54189: PUSH
54190: LD_INT 2
54192: PUSH
54193: LD_INT 30
54195: PUSH
54196: LD_INT 31
54198: PUSH
54199: EMPTY
54200: LIST
54201: LIST
54202: PUSH
54203: LD_INT 30
54205: PUSH
54206: LD_INT 32
54208: PUSH
54209: EMPTY
54210: LIST
54211: LIST
54212: PUSH
54213: LD_INT 30
54215: PUSH
54216: LD_INT 33
54218: PUSH
54219: EMPTY
54220: LIST
54221: LIST
54222: PUSH
54223: LD_INT 30
54225: PUSH
54226: LD_INT 4
54228: PUSH
54229: EMPTY
54230: LIST
54231: LIST
54232: PUSH
54233: LD_INT 30
54235: PUSH
54236: LD_INT 5
54238: PUSH
54239: EMPTY
54240: LIST
54241: LIST
54242: PUSH
54243: LD_INT 30
54245: PUSH
54246: LD_INT 35
54248: PUSH
54249: EMPTY
54250: LIST
54251: LIST
54252: PUSH
54253: EMPTY
54254: LIST
54255: LIST
54256: LIST
54257: LIST
54258: LIST
54259: LIST
54260: LIST
54261: PUSH
54262: EMPTY
54263: LIST
54264: LIST
54265: LIST
54266: LIST
54267: PPUSH
54268: CALL_OW 69
54272: ST_TO_ADDR
// if ( temp_list <= 1 or temp_list <= RoundToNearestInteger ( south_defences * 0.25 ) ) and FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , am_base_south ] ] ) > 0 then
54273: LD_VAR 0 1
54277: PUSH
54278: LD_INT 1
54280: LESSEQUAL
54281: PUSH
54282: LD_VAR 0 1
54286: PUSH
54287: LD_VAR 0 7
54291: PUSH
54292: LD_REAL  2.50000000000000E-0001
54295: MUL
54296: PPUSH
54297: CALL 56616 0 1
54301: LESSEQUAL
54302: OR
54303: PUSH
54304: LD_INT 22
54306: PUSH
54307: LD_EXP 2
54311: PUSH
54312: EMPTY
54313: LIST
54314: LIST
54315: PUSH
54316: LD_INT 95
54318: PUSH
54319: LD_INT 21
54321: PUSH
54322: EMPTY
54323: LIST
54324: LIST
54325: PUSH
54326: EMPTY
54327: LIST
54328: LIST
54329: PPUSH
54330: CALL_OW 69
54334: PUSH
54335: LD_INT 0
54337: GREATER
54338: AND
54339: IFFALSE 54351
// begin am_scientists_escape_status = 1 ;
54341: LD_ADDR_EXP 111
54345: PUSH
54346: LD_INT 1
54348: ST_TO_ADDR
// break ;
54349: GO 54475
// end ; if FilterAllUnits ( [ [ f_side , americans ] , [ f_ok ] , [ f_type , unit_human ] ] ) <= RoundToNearestInteger ( initial_people * 0.6 ) then
54351: LD_INT 22
54353: PUSH
54354: LD_EXP 5
54358: PUSH
54359: EMPTY
54360: LIST
54361: LIST
54362: PUSH
54363: LD_INT 50
54365: PUSH
54366: EMPTY
54367: LIST
54368: PUSH
54369: LD_INT 21
54371: PUSH
54372: LD_INT 1
54374: PUSH
54375: EMPTY
54376: LIST
54377: LIST
54378: PUSH
54379: EMPTY
54380: LIST
54381: LIST
54382: LIST
54383: PPUSH
54384: CALL_OW 69
54388: PUSH
54389: LD_VAR 0 8
54393: PUSH
54394: LD_REAL  6.00000000000000E-0001
54397: MUL
54398: PPUSH
54399: CALL 56616 0 1
54403: LESSEQUAL
54404: IFFALSE 54416
// begin am_scientists_escape_status = 1 ;
54406: LD_ADDR_EXP 111
54410: PUSH
54411: LD_INT 1
54413: ST_TO_ADDR
// break ;
54414: GO 54475
// end ; if not IsOk ( ai_depot [ base ] ) or UnitFilter ( ai_facts [ base ] , [ f_ok ] ) <= 1 then
54416: LD_EXP 34
54420: PUSH
54421: LD_VAR 0 14
54425: ARRAY
54426: PPUSH
54427: CALL_OW 302
54431: NOT
54432: PUSH
54433: LD_EXP 48
54437: PUSH
54438: LD_VAR 0 14
54442: ARRAY
54443: PPUSH
54444: LD_INT 50
54446: PUSH
54447: EMPTY
54448: LIST
54449: PPUSH
54450: CALL_OW 72
54454: PUSH
54455: LD_INT 1
54457: LESSEQUAL
54458: OR
54459: IFFALSE 54471
// begin am_scientists_escape_status = 1 ;
54461: LD_ADDR_EXP 111
54465: PUSH
54466: LD_INT 1
54468: ST_TO_ADDR
// break ;
54469: GO 54475
// end ; until false ;
54471: LD_INT 0
54473: IFFALSE 53698
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , am_base_north ] ] ) ;
54475: LD_ADDR_VAR 0 1
54479: PUSH
54480: LD_INT 22
54482: PUSH
54483: LD_EXP 2
54487: PUSH
54488: EMPTY
54489: LIST
54490: LIST
54491: PUSH
54492: LD_INT 95
54494: PUSH
54495: LD_INT 19
54497: PUSH
54498: EMPTY
54499: LIST
54500: LIST
54501: PUSH
54502: EMPTY
54503: LIST
54504: LIST
54505: PPUSH
54506: CALL_OW 69
54510: ST_TO_ADDR
// temp_list_2 = FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , am_base_south ] ] ) ;
54511: LD_ADDR_VAR 0 2
54515: PUSH
54516: LD_INT 22
54518: PUSH
54519: LD_EXP 2
54523: PUSH
54524: EMPTY
54525: LIST
54526: LIST
54527: PUSH
54528: LD_INT 95
54530: PUSH
54531: LD_INT 21
54533: PUSH
54534: EMPTY
54535: LIST
54536: LIST
54537: PUSH
54538: EMPTY
54539: LIST
54540: LIST
54541: PPUSH
54542: CALL_OW 69
54546: ST_TO_ADDR
// hexes_group_1 = [ ] ;
54547: LD_ADDR_VAR 0 11
54551: PUSH
54552: EMPTY
54553: ST_TO_ADDR
// hexes_group_2 = [ ] ;
54554: LD_ADDR_VAR 0 12
54558: PUSH
54559: EMPTY
54560: ST_TO_ADDR
// if temp_list = 0 and temp_list_2 = 0 then
54561: LD_VAR 0 1
54565: PUSH
54566: LD_INT 0
54568: EQUAL
54569: PUSH
54570: LD_VAR 0 2
54574: PUSH
54575: LD_INT 0
54577: EQUAL
54578: AND
54579: IFFALSE 54674
// begin hexes_group_1 = [ [ 29 , 41 ] , [ 18 , 18 ] , [ 5 , 1 ] ] ;
54581: LD_ADDR_VAR 0 11
54585: PUSH
54586: LD_INT 29
54588: PUSH
54589: LD_INT 41
54591: PUSH
54592: EMPTY
54593: LIST
54594: LIST
54595: PUSH
54596: LD_INT 18
54598: PUSH
54599: LD_INT 18
54601: PUSH
54602: EMPTY
54603: LIST
54604: LIST
54605: PUSH
54606: LD_INT 5
54608: PUSH
54609: LD_INT 1
54611: PUSH
54612: EMPTY
54613: LIST
54614: LIST
54615: PUSH
54616: EMPTY
54617: LIST
54618: LIST
54619: LIST
54620: ST_TO_ADDR
// hexes_group_2 = [ [ 50 , 88 ] , [ 55 , 106 ] , [ 65 , 106 ] , [ 74 , 118 ] ] ;
54621: LD_ADDR_VAR 0 12
54625: PUSH
54626: LD_INT 50
54628: PUSH
54629: LD_INT 88
54631: PUSH
54632: EMPTY
54633: LIST
54634: LIST
54635: PUSH
54636: LD_INT 55
54638: PUSH
54639: LD_INT 106
54641: PUSH
54642: EMPTY
54643: LIST
54644: LIST
54645: PUSH
54646: LD_INT 65
54648: PUSH
54649: LD_INT 106
54651: PUSH
54652: EMPTY
54653: LIST
54654: LIST
54655: PUSH
54656: LD_INT 74
54658: PUSH
54659: LD_INT 118
54661: PUSH
54662: EMPTY
54663: LIST
54664: LIST
54665: PUSH
54666: EMPTY
54667: LIST
54668: LIST
54669: LIST
54670: LIST
54671: ST_TO_ADDR
// end else
54672: GO 54912
// if temp_list_2 = 0 then
54674: LD_VAR 0 2
54678: PUSH
54679: LD_INT 0
54681: EQUAL
54682: IFFALSE 54788
// begin hexes_group_1 = [ [ 50 , 88 ] , [ 55 , 106 ] , [ 65 , 106 ] , [ 74 , 118 ] ] ;
54684: LD_ADDR_VAR 0 11
54688: PUSH
54689: LD_INT 50
54691: PUSH
54692: LD_INT 88
54694: PUSH
54695: EMPTY
54696: LIST
54697: LIST
54698: PUSH
54699: LD_INT 55
54701: PUSH
54702: LD_INT 106
54704: PUSH
54705: EMPTY
54706: LIST
54707: LIST
54708: PUSH
54709: LD_INT 65
54711: PUSH
54712: LD_INT 106
54714: PUSH
54715: EMPTY
54716: LIST
54717: LIST
54718: PUSH
54719: LD_INT 74
54721: PUSH
54722: LD_INT 118
54724: PUSH
54725: EMPTY
54726: LIST
54727: LIST
54728: PUSH
54729: EMPTY
54730: LIST
54731: LIST
54732: LIST
54733: LIST
54734: ST_TO_ADDR
// hexes_group_2 = [ [ 50 , 88 ] , [ 55 , 106 ] , [ 65 , 106 ] , [ 74 , 118 ] ] ;
54735: LD_ADDR_VAR 0 12
54739: PUSH
54740: LD_INT 50
54742: PUSH
54743: LD_INT 88
54745: PUSH
54746: EMPTY
54747: LIST
54748: LIST
54749: PUSH
54750: LD_INT 55
54752: PUSH
54753: LD_INT 106
54755: PUSH
54756: EMPTY
54757: LIST
54758: LIST
54759: PUSH
54760: LD_INT 65
54762: PUSH
54763: LD_INT 106
54765: PUSH
54766: EMPTY
54767: LIST
54768: LIST
54769: PUSH
54770: LD_INT 74
54772: PUSH
54773: LD_INT 118
54775: PUSH
54776: EMPTY
54777: LIST
54778: LIST
54779: PUSH
54780: EMPTY
54781: LIST
54782: LIST
54783: LIST
54784: LIST
54785: ST_TO_ADDR
// end else
54786: GO 54912
// begin hexes_group_1 = [ [ 66 , 76 ] , [ 74 , 68 ] , [ 69 , 56 ] , [ 59 , 43 ] , [ 51 , 30 ] , [ 42 , 19 ] , [ 32 , 10 ] , [ 5 , 1 ] ] ;
54788: LD_ADDR_VAR 0 11
54792: PUSH
54793: LD_INT 66
54795: PUSH
54796: LD_INT 76
54798: PUSH
54799: EMPTY
54800: LIST
54801: LIST
54802: PUSH
54803: LD_INT 74
54805: PUSH
54806: LD_INT 68
54808: PUSH
54809: EMPTY
54810: LIST
54811: LIST
54812: PUSH
54813: LD_INT 69
54815: PUSH
54816: LD_INT 56
54818: PUSH
54819: EMPTY
54820: LIST
54821: LIST
54822: PUSH
54823: LD_INT 59
54825: PUSH
54826: LD_INT 43
54828: PUSH
54829: EMPTY
54830: LIST
54831: LIST
54832: PUSH
54833: LD_INT 51
54835: PUSH
54836: LD_INT 30
54838: PUSH
54839: EMPTY
54840: LIST
54841: LIST
54842: PUSH
54843: LD_INT 42
54845: PUSH
54846: LD_INT 19
54848: PUSH
54849: EMPTY
54850: LIST
54851: LIST
54852: PUSH
54853: LD_INT 32
54855: PUSH
54856: LD_INT 10
54858: PUSH
54859: EMPTY
54860: LIST
54861: LIST
54862: PUSH
54863: LD_INT 5
54865: PUSH
54866: LD_INT 1
54868: PUSH
54869: EMPTY
54870: LIST
54871: LIST
54872: PUSH
54873: EMPTY
54874: LIST
54875: LIST
54876: LIST
54877: LIST
54878: LIST
54879: LIST
54880: LIST
54881: LIST
54882: ST_TO_ADDR
// hexes_group_2 = [ [ 66 , 76 ] , [ 74 , 118 ] ] ;
54883: LD_ADDR_VAR 0 12
54887: PUSH
54888: LD_INT 66
54890: PUSH
54891: LD_INT 76
54893: PUSH
54894: EMPTY
54895: LIST
54896: LIST
54897: PUSH
54898: LD_INT 74
54900: PUSH
54901: LD_INT 118
54903: PUSH
54904: EMPTY
54905: LIST
54906: LIST
54907: PUSH
54908: EMPTY
54909: LIST
54910: LIST
54911: ST_TO_ADDR
// end ; group_1 = [ ] ;
54912: LD_ADDR_VAR 0 9
54916: PUSH
54917: EMPTY
54918: ST_TO_ADDR
// group_2 = [ ] ;
54919: LD_ADDR_VAR 0 10
54923: PUSH
54924: EMPTY
54925: ST_TO_ADDR
// temp_list = [ ] ;
54926: LD_ADDR_VAR 0 1
54930: PUSH
54931: EMPTY
54932: ST_TO_ADDR
// for i in ai_scientists [ base ] do
54933: LD_ADDR_VAR 0 3
54937: PUSH
54938: LD_EXP 32
54942: PUSH
54943: LD_VAR 0 14
54947: ARRAY
54948: PUSH
54949: FOR_IN
54950: IFFALSE 54975
// temp_list = temp_list ^ GetY ( i ) ;
54952: LD_ADDR_VAR 0 1
54956: PUSH
54957: LD_VAR 0 1
54961: PUSH
54962: LD_VAR 0 3
54966: PPUSH
54967: CALL_OW 251
54971: ADD
54972: ST_TO_ADDR
54973: GO 54949
54975: POP
54976: POP
// if temp_list > 0 then
54977: LD_VAR 0 1
54981: PUSH
54982: LD_INT 0
54984: GREATER
54985: IFFALSE 55015
// temp_list_2 = SortListByListAsc ( ai_scientists [ base ] , temp_list ) else
54987: LD_ADDR_VAR 0 2
54991: PUSH
54992: LD_EXP 32
54996: PUSH
54997: LD_VAR 0 14
55001: ARRAY
55002: PPUSH
55003: LD_VAR 0 1
55007: PPUSH
55008: CALL_OW 76
55012: ST_TO_ADDR
55013: GO 55022
// temp_list_2 = [ ] ;
55015: LD_ADDR_VAR 0 2
55019: PUSH
55020: EMPTY
55021: ST_TO_ADDR
// unit_hex_index = [ ] ;
55022: LD_ADDR_VAR 0 13
55026: PUSH
55027: EMPTY
55028: ST_TO_ADDR
// for i in temp_list_2 do
55029: LD_ADDR_VAR 0 3
55033: PUSH
55034: LD_VAR 0 2
55038: PUSH
55039: FOR_IN
55040: IFFALSE 55067
// unit_hex_index = Replace ( unit_hex_index , i , 1 ) ;
55042: LD_ADDR_VAR 0 13
55046: PUSH
55047: LD_VAR 0 13
55051: PPUSH
55052: LD_VAR 0 3
55056: PPUSH
55057: LD_INT 1
55059: PPUSH
55060: CALL_OW 1
55064: ST_TO_ADDR
55065: GO 55039
55067: POP
55068: POP
// num = temp_list_2 div 2 ;
55069: LD_ADDR_VAR 0 4
55073: PUSH
55074: LD_VAR 0 2
55078: PUSH
55079: LD_INT 2
55081: DIV
55082: ST_TO_ADDR
// for i = 1 to num do
55083: LD_ADDR_VAR 0 3
55087: PUSH
55088: DOUBLE
55089: LD_INT 1
55091: DEC
55092: ST_TO_ADDR
55093: LD_VAR 0 4
55097: PUSH
55098: FOR_TO
55099: IFFALSE 55141
// begin group_1 = group_1 ^ temp_list_2 [ 1 ] ;
55101: LD_ADDR_VAR 0 9
55105: PUSH
55106: LD_VAR 0 9
55110: PUSH
55111: LD_VAR 0 2
55115: PUSH
55116: LD_INT 1
55118: ARRAY
55119: ADD
55120: ST_TO_ADDR
// temp_list_2 = Delete ( temp_list_2 , 1 ) ;
55121: LD_ADDR_VAR 0 2
55125: PUSH
55126: LD_VAR 0 2
55130: PPUSH
55131: LD_INT 1
55133: PPUSH
55134: CALL_OW 3
55138: ST_TO_ADDR
// end ;
55139: GO 55098
55141: POP
55142: POP
// group_2 = temp_list_2 ;
55143: LD_ADDR_VAR 0 10
55147: PUSH
55148: LD_VAR 0 2
55152: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] diff ai_scientists [ base ] ;
55153: LD_ADDR_VAR 0 1
55157: PUSH
55158: LD_EXP 44
55162: PUSH
55163: LD_VAR 0 14
55167: ARRAY
55168: PUSH
55169: LD_EXP 32
55173: PUSH
55174: LD_VAR 0 14
55178: ARRAY
55179: DIFF
55180: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
55181: LD_ADDR_EXP 44
55185: PUSH
55186: LD_EXP 44
55190: PPUSH
55191: LD_VAR 0 14
55195: PPUSH
55196: LD_VAR 0 1
55200: PPUSH
55201: CALL_OW 1
55205: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , [ ] ) ;
55206: LD_ADDR_EXP 32
55210: PUSH
55211: LD_EXP 32
55215: PPUSH
55216: LD_VAR 0 14
55220: PPUSH
55221: EMPTY
55222: PPUSH
55223: CALL_OW 1
55227: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
55228: LD_INT 35
55230: PPUSH
55231: CALL_OW 67
// group_1 = UnitFilter ( group_1 , [ f_alive ] ) ;
55235: LD_ADDR_VAR 0 9
55239: PUSH
55240: LD_VAR 0 9
55244: PPUSH
55245: LD_INT 51
55247: PUSH
55248: EMPTY
55249: LIST
55250: PPUSH
55251: CALL_OW 72
55255: ST_TO_ADDR
// group_2 = UnitFilter ( group_2 , [ f_alive ] ) ;
55256: LD_ADDR_VAR 0 10
55260: PUSH
55261: LD_VAR 0 10
55265: PPUSH
55266: LD_INT 51
55268: PUSH
55269: EMPTY
55270: LIST
55271: PPUSH
55272: CALL_OW 72
55276: ST_TO_ADDR
// if group_1 = 0 and group_2 = 0 then
55277: LD_VAR 0 9
55281: PUSH
55282: LD_INT 0
55284: EQUAL
55285: PUSH
55286: LD_VAR 0 10
55290: PUSH
55291: LD_INT 0
55293: EQUAL
55294: AND
55295: IFFALSE 55299
// break ;
55297: GO 55580
// temp_list = GetHumansOutOfUnits ( group_1 ^ group_2 ) ;
55299: LD_ADDR_VAR 0 1
55303: PUSH
55304: LD_VAR 0 9
55308: PUSH
55309: LD_VAR 0 10
55313: ADD
55314: PPUSH
55315: CALL 28688 0 1
55319: ST_TO_ADDR
// for i in temp_list do
55320: LD_ADDR_VAR 0 3
55324: PUSH
55325: LD_VAR 0 1
55329: PUSH
55330: FOR_IN
55331: IFFALSE 55574
// begin if i in group_1 then
55333: LD_VAR 0 3
55337: PUSH
55338: LD_VAR 0 9
55342: IN
55343: IFFALSE 55357
// temp_list_2 = hexes_group_1 else
55345: LD_ADDR_VAR 0 2
55349: PUSH
55350: LD_VAR 0 11
55354: ST_TO_ADDR
55355: GO 55367
// temp_list_2 = hexes_group_2 ;
55357: LD_ADDR_VAR 0 2
55361: PUSH
55362: LD_VAR 0 12
55366: ST_TO_ADDR
// if GetDistUnitXY ( i , temp_list_2 [ unit_hex_index [ i ] ] [ 1 ] , temp_list_2 [ unit_hex_index [ i ] ] [ 2 ] ) > 3 then
55367: LD_VAR 0 3
55371: PPUSH
55372: LD_VAR 0 2
55376: PUSH
55377: LD_VAR 0 13
55381: PUSH
55382: LD_VAR 0 3
55386: ARRAY
55387: ARRAY
55388: PUSH
55389: LD_INT 1
55391: ARRAY
55392: PPUSH
55393: LD_VAR 0 2
55397: PUSH
55398: LD_VAR 0 13
55402: PUSH
55403: LD_VAR 0 3
55407: ARRAY
55408: ARRAY
55409: PUSH
55410: LD_INT 2
55412: ARRAY
55413: PPUSH
55414: CALL_OW 297
55418: PUSH
55419: LD_INT 3
55421: GREATER
55422: IFFALSE 55477
// ComMoveXY ( i , temp_list_2 [ unit_hex_index [ i ] ] [ 1 ] , temp_list_2 [ unit_hex_index [ i ] ] [ 2 ] ) else
55424: LD_VAR 0 3
55428: PPUSH
55429: LD_VAR 0 2
55433: PUSH
55434: LD_VAR 0 13
55438: PUSH
55439: LD_VAR 0 3
55443: ARRAY
55444: ARRAY
55445: PUSH
55446: LD_INT 1
55448: ARRAY
55449: PPUSH
55450: LD_VAR 0 2
55454: PUSH
55455: LD_VAR 0 13
55459: PUSH
55460: LD_VAR 0 3
55464: ARRAY
55465: ARRAY
55466: PUSH
55467: LD_INT 2
55469: ARRAY
55470: PPUSH
55471: CALL_OW 111
55475: GO 55572
// if unit_hex_index [ i ] < temp_list_2 then
55477: LD_VAR 0 13
55481: PUSH
55482: LD_VAR 0 3
55486: ARRAY
55487: PUSH
55488: LD_VAR 0 2
55492: LESS
55493: IFFALSE 55532
// begin unit_hex_index = Replace ( unit_hex_index , i , unit_hex_index [ i ] + 1 ) ;
55495: LD_ADDR_VAR 0 13
55499: PUSH
55500: LD_VAR 0 13
55504: PPUSH
55505: LD_VAR 0 3
55509: PPUSH
55510: LD_VAR 0 13
55514: PUSH
55515: LD_VAR 0 3
55519: ARRAY
55520: PUSH
55521: LD_INT 1
55523: PLUS
55524: PPUSH
55525: CALL_OW 1
55529: ST_TO_ADDR
// end else
55530: GO 55572
// begin if i = Hugh then
55532: LD_VAR 0 3
55536: PUSH
55537: LD_EXP 28
55541: EQUAL
55542: IFFALSE 55555
// RemoveUnit ( i ) else
55544: LD_VAR 0 3
55548: PPUSH
55549: CALL_OW 64
55553: GO 55564
// DestroyUnit ( i ) ;
55555: LD_VAR 0 3
55559: PPUSH
55560: CALL_OW 65
// scientist_escaped = true ;
55564: LD_ADDR_EXP 112
55568: PUSH
55569: LD_INT 1
55571: ST_TO_ADDR
// end ; end ;
55572: GO 55330
55574: POP
55575: POP
// until false ;
55576: LD_INT 0
55578: IFFALSE 55228
// am_scientists_escape_status = 2 ;
55580: LD_ADDR_EXP 111
55584: PUSH
55585: LD_INT 2
55587: ST_TO_ADDR
// ChangeMissionObjectives ( MOutscikill ) ;
55588: LD_STRING MOutscikill
55590: PPUSH
55591: CALL_OW 337
// repeat wait ( 0 0$1 ) ;
55595: LD_INT 35
55597: PPUSH
55598: CALL_OW 67
// if sib_rocket_fired then
55602: LD_EXP 117
55606: IFFALSE 55610
// exit ;
55608: GO 56613
// until not BaseUnderAttack ( base , - 1 ) or ( FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_human ] , [ f_ok ] ] ) diff GetApes ( americans ) ) = 0 ;
55610: LD_VAR 0 14
55614: PPUSH
55615: LD_INT 1
55617: NEG
55618: PPUSH
55619: CALL 28793 0 2
55623: NOT
55624: PUSH
55625: LD_INT 22
55627: PUSH
55628: LD_EXP 5
55632: PUSH
55633: EMPTY
55634: LIST
55635: LIST
55636: PUSH
55637: LD_INT 21
55639: PUSH
55640: LD_INT 1
55642: PUSH
55643: EMPTY
55644: LIST
55645: LIST
55646: PUSH
55647: LD_INT 50
55649: PUSH
55650: EMPTY
55651: LIST
55652: PUSH
55653: EMPTY
55654: LIST
55655: LIST
55656: LIST
55657: PPUSH
55658: CALL_OW 69
55662: PUSH
55663: LD_EXP 5
55667: PPUSH
55668: CALL 40185 0 1
55672: DIFF
55673: PUSH
55674: LD_INT 0
55676: EQUAL
55677: OR
55678: IFFALSE 55595
// hexes_group_1 = [ [ 29 , 41 ] , [ 18 , 18 ] , [ 5 , 1 ] ] ;
55680: LD_ADDR_VAR 0 11
55684: PUSH
55685: LD_INT 29
55687: PUSH
55688: LD_INT 41
55690: PUSH
55691: EMPTY
55692: LIST
55693: LIST
55694: PUSH
55695: LD_INT 18
55697: PUSH
55698: LD_INT 18
55700: PUSH
55701: EMPTY
55702: LIST
55703: LIST
55704: PUSH
55705: LD_INT 5
55707: PUSH
55708: LD_INT 1
55710: PUSH
55711: EMPTY
55712: LIST
55713: LIST
55714: PUSH
55715: EMPTY
55716: LIST
55717: LIST
55718: LIST
55719: ST_TO_ADDR
// hexes_group_2 = [ [ 50 , 88 ] , [ 55 , 106 ] , [ 65 , 106 ] , [ 74 , 118 ] ] ;
55720: LD_ADDR_VAR 0 12
55724: PUSH
55725: LD_INT 50
55727: PUSH
55728: LD_INT 88
55730: PUSH
55731: EMPTY
55732: LIST
55733: LIST
55734: PUSH
55735: LD_INT 55
55737: PUSH
55738: LD_INT 106
55740: PUSH
55741: EMPTY
55742: LIST
55743: LIST
55744: PUSH
55745: LD_INT 65
55747: PUSH
55748: LD_INT 106
55750: PUSH
55751: EMPTY
55752: LIST
55753: LIST
55754: PUSH
55755: LD_INT 74
55757: PUSH
55758: LD_INT 118
55760: PUSH
55761: EMPTY
55762: LIST
55763: LIST
55764: PUSH
55765: EMPTY
55766: LIST
55767: LIST
55768: LIST
55769: LIST
55770: ST_TO_ADDR
// hexes_small_base_people = [ [ 78 , 118 ] ] ;
55771: LD_ADDR_VAR 0 16
55775: PUSH
55776: LD_INT 78
55778: PUSH
55779: LD_INT 118
55781: PUSH
55782: EMPTY
55783: LIST
55784: LIST
55785: PUSH
55786: EMPTY
55787: LIST
55788: ST_TO_ADDR
// group_1 = [ ] ;
55789: LD_ADDR_VAR 0 9
55793: PUSH
55794: EMPTY
55795: ST_TO_ADDR
// group_2 = [ ] ;
55796: LD_ADDR_VAR 0 10
55800: PUSH
55801: EMPTY
55802: ST_TO_ADDR
// small_base_people = FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_human ] , [ f_inarea , Am_small_base ] ] ) ;
55803: LD_ADDR_VAR 0 15
55807: PUSH
55808: LD_INT 22
55810: PUSH
55811: LD_EXP 5
55815: PUSH
55816: EMPTY
55817: LIST
55818: LIST
55819: PUSH
55820: LD_INT 21
55822: PUSH
55823: LD_INT 1
55825: PUSH
55826: EMPTY
55827: LIST
55828: LIST
55829: PUSH
55830: LD_INT 95
55832: PUSH
55833: LD_INT 3
55835: PUSH
55836: EMPTY
55837: LIST
55838: LIST
55839: PUSH
55840: EMPTY
55841: LIST
55842: LIST
55843: LIST
55844: PPUSH
55845: CALL_OW 69
55849: ST_TO_ADDR
// temp_list_2 = FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_human ] ] ) diff small_base_people ;
55850: LD_ADDR_VAR 0 2
55854: PUSH
55855: LD_INT 22
55857: PUSH
55858: LD_EXP 5
55862: PUSH
55863: EMPTY
55864: LIST
55865: LIST
55866: PUSH
55867: LD_INT 21
55869: PUSH
55870: LD_INT 1
55872: PUSH
55873: EMPTY
55874: LIST
55875: LIST
55876: PUSH
55877: EMPTY
55878: LIST
55879: LIST
55880: PPUSH
55881: CALL_OW 69
55885: PUSH
55886: LD_VAR 0 15
55890: DIFF
55891: ST_TO_ADDR
// temp_list = [ ] ;
55892: LD_ADDR_VAR 0 1
55896: PUSH
55897: EMPTY
55898: ST_TO_ADDR
// for i in temp_list_2 do
55899: LD_ADDR_VAR 0 3
55903: PUSH
55904: LD_VAR 0 2
55908: PUSH
55909: FOR_IN
55910: IFFALSE 55935
// temp_list = temp_list ^ GetY ( i ) ;
55912: LD_ADDR_VAR 0 1
55916: PUSH
55917: LD_VAR 0 1
55921: PUSH
55922: LD_VAR 0 3
55926: PPUSH
55927: CALL_OW 251
55931: ADD
55932: ST_TO_ADDR
55933: GO 55909
55935: POP
55936: POP
// temp_list_2 = SortListByListAsc ( temp_list_2 , temp_list ) ;
55937: LD_ADDR_VAR 0 2
55941: PUSH
55942: LD_VAR 0 2
55946: PPUSH
55947: LD_VAR 0 1
55951: PPUSH
55952: CALL_OW 76
55956: ST_TO_ADDR
// unit_hex_index = [ ] ;
55957: LD_ADDR_VAR 0 13
55961: PUSH
55962: EMPTY
55963: ST_TO_ADDR
// for i in temp_list_2 do
55964: LD_ADDR_VAR 0 3
55968: PUSH
55969: LD_VAR 0 2
55973: PUSH
55974: FOR_IN
55975: IFFALSE 56002
// unit_hex_index = Replace ( unit_hex_index , i , 1 ) ;
55977: LD_ADDR_VAR 0 13
55981: PUSH
55982: LD_VAR 0 13
55986: PPUSH
55987: LD_VAR 0 3
55991: PPUSH
55992: LD_INT 1
55994: PPUSH
55995: CALL_OW 1
55999: ST_TO_ADDR
56000: GO 55974
56002: POP
56003: POP
// num = temp_list_2 div 2 ;
56004: LD_ADDR_VAR 0 4
56008: PUSH
56009: LD_VAR 0 2
56013: PUSH
56014: LD_INT 2
56016: DIV
56017: ST_TO_ADDR
// for i = 1 to num do
56018: LD_ADDR_VAR 0 3
56022: PUSH
56023: DOUBLE
56024: LD_INT 1
56026: DEC
56027: ST_TO_ADDR
56028: LD_VAR 0 4
56032: PUSH
56033: FOR_TO
56034: IFFALSE 56076
// begin group_1 = group_1 ^ temp_list_2 [ 1 ] ;
56036: LD_ADDR_VAR 0 9
56040: PUSH
56041: LD_VAR 0 9
56045: PUSH
56046: LD_VAR 0 2
56050: PUSH
56051: LD_INT 1
56053: ARRAY
56054: ADD
56055: ST_TO_ADDR
// temp_list_2 = Delete ( temp_list_2 , 1 ) ;
56056: LD_ADDR_VAR 0 2
56060: PUSH
56061: LD_VAR 0 2
56065: PPUSH
56066: LD_INT 1
56068: PPUSH
56069: CALL_OW 3
56073: ST_TO_ADDR
// end ;
56074: GO 56033
56076: POP
56077: POP
// group_2 = temp_list_2 ;
56078: LD_ADDR_VAR 0 10
56082: PUSH
56083: LD_VAR 0 2
56087: ST_TO_ADDR
// ai_bases = [ ] ;
56088: LD_ADDR_EXP 59
56092: PUSH
56093: EMPTY
56094: ST_TO_ADDR
// temp_list_2 = UnitFilter ( ( group_1 ^ group_2 ^ small_base_people ) diff GetApes ( americans ) , [ f_ok ] ) ;
56095: LD_ADDR_VAR 0 2
56099: PUSH
56100: LD_VAR 0 9
56104: PUSH
56105: LD_VAR 0 10
56109: ADD
56110: PUSH
56111: LD_VAR 0 15
56115: ADD
56116: PUSH
56117: LD_EXP 5
56121: PPUSH
56122: CALL 40185 0 1
56126: DIFF
56127: PPUSH
56128: LD_INT 50
56130: PUSH
56131: EMPTY
56132: LIST
56133: PPUSH
56134: CALL_OW 72
56138: ST_TO_ADDR
// if temp_list_2 > 0 then
56139: LD_VAR 0 2
56143: PUSH
56144: LD_INT 0
56146: GREATER
56147: IFFALSE 56222
// begin i = temp_list_2 [ Rand ( 1 , temp_list_2 ) ] ;
56149: LD_ADDR_VAR 0 3
56153: PUSH
56154: LD_VAR 0 2
56158: PUSH
56159: LD_INT 1
56161: PPUSH
56162: LD_VAR 0 2
56166: PPUSH
56167: CALL_OW 12
56171: ARRAY
56172: ST_TO_ADDR
// DialogueOn ;
56173: CALL_OW 6
// if GetSex ( i ) = sex_male then
56177: LD_VAR 0 3
56181: PPUSH
56182: CALL_OW 258
56186: PUSH
56187: LD_INT 1
56189: EQUAL
56190: IFFALSE 56206
// SayRadio ( i , D19-SomeM-1 ) else
56192: LD_VAR 0 3
56196: PPUSH
56197: LD_STRING D19-SomeM-1
56199: PPUSH
56200: CALL_OW 94
56204: GO 56218
// SayRadio ( i , D19-SomeF-1 ) ;
56206: LD_VAR 0 3
56210: PPUSH
56211: LD_STRING D19-SomeF-1
56213: PPUSH
56214: CALL_OW 94
// DialogueOff ;
56218: CALL_OW 7
// end ; americans_retreat = true ;
56222: LD_ADDR_EXP 116
56226: PUSH
56227: LD_INT 1
56229: ST_TO_ADDR
// ChangeMissionObjectives ( MOutsibbombdeny ) ;
56230: LD_STRING MOutsibbombdeny
56232: PPUSH
56233: CALL_OW 337
// repeat wait ( 0 0$1 ) ;
56237: LD_INT 35
56239: PPUSH
56240: CALL_OW 67
// group_1 = UnitFilter ( group_1 , [ f_alive ] ) ;
56244: LD_ADDR_VAR 0 9
56248: PUSH
56249: LD_VAR 0 9
56253: PPUSH
56254: LD_INT 51
56256: PUSH
56257: EMPTY
56258: LIST
56259: PPUSH
56260: CALL_OW 72
56264: ST_TO_ADDR
// group_2 = UnitFilter ( group_2 , [ f_alive ] ) ;
56265: LD_ADDR_VAR 0 10
56269: PUSH
56270: LD_VAR 0 10
56274: PPUSH
56275: LD_INT 51
56277: PUSH
56278: EMPTY
56279: LIST
56280: PPUSH
56281: CALL_OW 72
56285: ST_TO_ADDR
// small_base_people = UnitFilter ( small_base_people , [ f_alive ] ) ;
56286: LD_ADDR_VAR 0 15
56290: PUSH
56291: LD_VAR 0 15
56295: PPUSH
56296: LD_INT 51
56298: PUSH
56299: EMPTY
56300: LIST
56301: PPUSH
56302: CALL_OW 72
56306: ST_TO_ADDR
// temp_list = GetHumansOutOfUnits ( group_1 ^ group_2 ^ small_base_people ) ;
56307: LD_ADDR_VAR 0 1
56311: PUSH
56312: LD_VAR 0 9
56316: PUSH
56317: LD_VAR 0 10
56321: ADD
56322: PUSH
56323: LD_VAR 0 15
56327: ADD
56328: PPUSH
56329: CALL 28688 0 1
56333: ST_TO_ADDR
// for i in temp_list do
56334: LD_ADDR_VAR 0 3
56338: PUSH
56339: LD_VAR 0 1
56343: PUSH
56344: FOR_IN
56345: IFFALSE 56581
// begin if i in group_1 then
56347: LD_VAR 0 3
56351: PUSH
56352: LD_VAR 0 9
56356: IN
56357: IFFALSE 56371
// temp_list_2 = hexes_group_1 else
56359: LD_ADDR_VAR 0 2
56363: PUSH
56364: LD_VAR 0 11
56368: ST_TO_ADDR
56369: GO 56405
// if i in group_2 then
56371: LD_VAR 0 3
56375: PUSH
56376: LD_VAR 0 10
56380: IN
56381: IFFALSE 56395
// temp_list_2 = hexes_group_2 else
56383: LD_ADDR_VAR 0 2
56387: PUSH
56388: LD_VAR 0 12
56392: ST_TO_ADDR
56393: GO 56405
// temp_list_2 = hexes_small_base_people ;
56395: LD_ADDR_VAR 0 2
56399: PUSH
56400: LD_VAR 0 16
56404: ST_TO_ADDR
// if GetDistUnitXY ( i , temp_list_2 [ unit_hex_index [ i ] ] [ 1 ] , temp_list_2 [ unit_hex_index [ i ] ] [ 2 ] ) > 3 then
56405: LD_VAR 0 3
56409: PPUSH
56410: LD_VAR 0 2
56414: PUSH
56415: LD_VAR 0 13
56419: PUSH
56420: LD_VAR 0 3
56424: ARRAY
56425: ARRAY
56426: PUSH
56427: LD_INT 1
56429: ARRAY
56430: PPUSH
56431: LD_VAR 0 2
56435: PUSH
56436: LD_VAR 0 13
56440: PUSH
56441: LD_VAR 0 3
56445: ARRAY
56446: ARRAY
56447: PUSH
56448: LD_INT 2
56450: ARRAY
56451: PPUSH
56452: CALL_OW 297
56456: PUSH
56457: LD_INT 3
56459: GREATER
56460: IFFALSE 56515
// ComMoveXY ( i , temp_list_2 [ unit_hex_index [ i ] ] [ 1 ] , temp_list_2 [ unit_hex_index [ i ] ] [ 2 ] ) else
56462: LD_VAR 0 3
56466: PPUSH
56467: LD_VAR 0 2
56471: PUSH
56472: LD_VAR 0 13
56476: PUSH
56477: LD_VAR 0 3
56481: ARRAY
56482: ARRAY
56483: PUSH
56484: LD_INT 1
56486: ARRAY
56487: PPUSH
56488: LD_VAR 0 2
56492: PUSH
56493: LD_VAR 0 13
56497: PUSH
56498: LD_VAR 0 3
56502: ARRAY
56503: ARRAY
56504: PUSH
56505: LD_INT 2
56507: ARRAY
56508: PPUSH
56509: CALL_OW 111
56513: GO 56579
// if unit_hex_index [ i ] < temp_list_2 then
56515: LD_VAR 0 13
56519: PUSH
56520: LD_VAR 0 3
56524: ARRAY
56525: PUSH
56526: LD_VAR 0 2
56530: LESS
56531: IFFALSE 56570
// begin unit_hex_index = Replace ( unit_hex_index , i , unit_hex_index [ i ] + 1 ) ;
56533: LD_ADDR_VAR 0 13
56537: PUSH
56538: LD_VAR 0 13
56542: PPUSH
56543: LD_VAR 0 3
56547: PPUSH
56548: LD_VAR 0 13
56552: PUSH
56553: LD_VAR 0 3
56557: ARRAY
56558: PUSH
56559: LD_INT 1
56561: PLUS
56562: PPUSH
56563: CALL_OW 1
56567: ST_TO_ADDR
// end else
56568: GO 56579
// begin DestroyUnit ( i ) ;
56570: LD_VAR 0 3
56574: PPUSH
56575: CALL_OW 65
// end ; end ;
56579: GO 56344
56581: POP
56582: POP
// until group_1 = 0 and group_2 = 0 and small_base_people = 0 ;
56583: LD_VAR 0 9
56587: PUSH
56588: LD_INT 0
56590: EQUAL
56591: PUSH
56592: LD_VAR 0 10
56596: PUSH
56597: LD_INT 0
56599: EQUAL
56600: AND
56601: PUSH
56602: LD_VAR 0 15
56606: PUSH
56607: LD_INT 0
56609: EQUAL
56610: AND
56611: IFFALSE 56237
// end ;
56613: PPOPN 16
56615: END
// function RoundToNearestInteger ( double ) ; begin
56616: LD_INT 0
56618: PPUSH
// result = double div 1 ;
56619: LD_ADDR_VAR 0 2
56623: PUSH
56624: LD_VAR 0 1
56628: PUSH
56629: LD_INT 1
56631: DIV
56632: ST_TO_ADDR
// if ( double * 10 ) mod 10 = 5 then
56633: LD_VAR 0 1
56637: PUSH
56638: LD_INT 10
56640: MUL
56641: PUSH
56642: LD_INT 10
56644: MOD
56645: PUSH
56646: LD_INT 5
56648: EQUAL
56649: IFFALSE 56665
// result = result + 1 ;
56651: LD_ADDR_VAR 0 2
56655: PUSH
56656: LD_VAR 0 2
56660: PUSH
56661: LD_INT 1
56663: PLUS
56664: ST_TO_ADDR
// end ;
56665: LD_VAR 0 2
56669: RET
// every 0 0$1 + 0 0$0.2 trigger am_scientists_escape_status = 1 do var base , lab , hex_list , x , y , dir , i , temp_list ;
56670: LD_EXP 111
56674: PUSH
56675: LD_INT 1
56677: EQUAL
56678: IFFALSE 57261
56680: GO 56682
56682: DISABLE
56683: LD_INT 0
56685: PPUSH
56686: PPUSH
56687: PPUSH
56688: PPUSH
56689: PPUSH
56690: PPUSH
56691: PPUSH
56692: PPUSH
// begin base = 1 ;
56693: LD_ADDR_VAR 0 1
56697: PUSH
56698: LD_INT 1
56700: ST_TO_ADDR
// wait ( 0 0$5 ) ;
56701: LD_INT 175
56703: PPUSH
56704: CALL_OW 67
// repeat wait ( 0 0$0.5 ) ;
56708: LD_INT 18
56710: PPUSH
56711: CALL_OW 67
// until UnitFilter ( ai_labs [ base ] , [ f_see , you ] ) > 0 or ai_labs [ base ] = 0 ;
56715: LD_EXP 35
56719: PUSH
56720: LD_VAR 0 1
56724: ARRAY
56725: PPUSH
56726: LD_INT 101
56728: PUSH
56729: LD_EXP 2
56733: PUSH
56734: EMPTY
56735: LIST
56736: LIST
56737: PPUSH
56738: CALL_OW 72
56742: PUSH
56743: LD_INT 0
56745: GREATER
56746: PUSH
56747: LD_EXP 35
56751: PUSH
56752: LD_VAR 0 1
56756: ARRAY
56757: PUSH
56758: LD_INT 0
56760: EQUAL
56761: OR
56762: IFFALSE 56708
// for i in ai_buildings_locations [ base ] do
56764: LD_ADDR_VAR 0 7
56768: PUSH
56769: LD_EXP 38
56773: PUSH
56774: LD_VAR 0 1
56778: ARRAY
56779: PUSH
56780: FOR_IN
56781: IFFALSE 56860
// if i [ 4 ] in [ b_lab , b_lab_half , b_lab_full ] then
56783: LD_VAR 0 7
56787: PUSH
56788: LD_INT 4
56790: ARRAY
56791: PUSH
56792: LD_INT 6
56794: PUSH
56795: LD_INT 7
56797: PUSH
56798: LD_INT 8
56800: PUSH
56801: EMPTY
56802: LIST
56803: LIST
56804: LIST
56805: IN
56806: IFFALSE 56858
// begin temp_list = ai_buildings_locations [ base ] diff [ i ] ;
56808: LD_ADDR_VAR 0 8
56812: PUSH
56813: LD_EXP 38
56817: PUSH
56818: LD_VAR 0 1
56822: ARRAY
56823: PUSH
56824: LD_VAR 0 7
56828: PUSH
56829: EMPTY
56830: LIST
56831: DIFF
56832: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
56833: LD_ADDR_EXP 38
56837: PUSH
56838: LD_EXP 38
56842: PPUSH
56843: LD_VAR 0 1
56847: PPUSH
56848: LD_VAR 0 8
56852: PPUSH
56853: CALL_OW 1
56857: ST_TO_ADDR
// end ;
56858: GO 56780
56860: POP
56861: POP
// hex_list = [ ] ;
56862: LD_ADDR_VAR 0 3
56866: PUSH
56867: EMPTY
56868: ST_TO_ADDR
// for lab in ai_labs [ base ] do
56869: LD_ADDR_VAR 0 2
56873: PUSH
56874: LD_EXP 35
56878: PUSH
56879: LD_VAR 0 1
56883: ARRAY
56884: PUSH
56885: FOR_IN
56886: IFFALSE 57088
// begin x = GetX ( lab ) ;
56888: LD_ADDR_VAR 0 4
56892: PUSH
56893: LD_VAR 0 2
56897: PPUSH
56898: CALL_OW 250
56902: ST_TO_ADDR
// y = GetY ( lab ) ;
56903: LD_ADDR_VAR 0 5
56907: PUSH
56908: LD_VAR 0 2
56912: PPUSH
56913: CALL_OW 251
56917: ST_TO_ADDR
// hex_list = hex_list ^ [ [ x , y ] ] ;
56918: LD_ADDR_VAR 0 3
56922: PUSH
56923: LD_VAR 0 3
56927: PUSH
56928: LD_VAR 0 4
56932: PUSH
56933: LD_VAR 0 5
56937: PUSH
56938: EMPTY
56939: LIST
56940: LIST
56941: PUSH
56942: EMPTY
56943: LIST
56944: ADD
56945: ST_TO_ADDR
// dir = Rand ( 0 , 5 ) ;
56946: LD_ADDR_VAR 0 6
56950: PUSH
56951: LD_INT 0
56953: PPUSH
56954: LD_INT 5
56956: PPUSH
56957: CALL_OW 12
56961: ST_TO_ADDR
// hex_list = hex_list ^ [ [ ShiftX ( x , dir , 2 ) , ShiftY ( y , dir , 2 ) ] ] ;
56962: LD_ADDR_VAR 0 3
56966: PUSH
56967: LD_VAR 0 3
56971: PUSH
56972: LD_VAR 0 4
56976: PPUSH
56977: LD_VAR 0 6
56981: PPUSH
56982: LD_INT 2
56984: PPUSH
56985: CALL_OW 272
56989: PUSH
56990: LD_VAR 0 5
56994: PPUSH
56995: LD_VAR 0 6
56999: PPUSH
57000: LD_INT 2
57002: PPUSH
57003: CALL_OW 273
57007: PUSH
57008: EMPTY
57009: LIST
57010: LIST
57011: PUSH
57012: EMPTY
57013: LIST
57014: ADD
57015: ST_TO_ADDR
// dir = Rand ( 0 , 5 ) ;
57016: LD_ADDR_VAR 0 6
57020: PUSH
57021: LD_INT 0
57023: PPUSH
57024: LD_INT 5
57026: PPUSH
57027: CALL_OW 12
57031: ST_TO_ADDR
// hex_list = hex_list ^ [ [ ShiftX ( x , dir , 2 ) , ShiftY ( y , dir , 2 ) ] ] ;
57032: LD_ADDR_VAR 0 3
57036: PUSH
57037: LD_VAR 0 3
57041: PUSH
57042: LD_VAR 0 4
57046: PPUSH
57047: LD_VAR 0 6
57051: PPUSH
57052: LD_INT 2
57054: PPUSH
57055: CALL_OW 272
57059: PUSH
57060: LD_VAR 0 5
57064: PPUSH
57065: LD_VAR 0 6
57069: PPUSH
57070: LD_INT 2
57072: PPUSH
57073: CALL_OW 273
57077: PUSH
57078: EMPTY
57079: LIST
57080: LIST
57081: PUSH
57082: EMPTY
57083: LIST
57084: ADD
57085: ST_TO_ADDR
// end ;
57086: GO 56885
57088: POP
57089: POP
// for i in hex_list do
57090: LD_ADDR_VAR 0 7
57094: PUSH
57095: LD_VAR 0 3
57099: PUSH
57100: FOR_IN
57101: IFFALSE 57145
// begin wait ( Rand ( 0 0$0.3 , 0 0$0.6 ) ) ;
57103: LD_INT 10
57105: PPUSH
57106: LD_INT 21
57108: PPUSH
57109: CALL_OW 12
57113: PPUSH
57114: CALL_OW 67
// MineExplosion ( i [ 1 ] , i [ 2 ] , 1 ) ;
57118: LD_VAR 0 7
57122: PUSH
57123: LD_INT 1
57125: ARRAY
57126: PPUSH
57127: LD_VAR 0 7
57131: PUSH
57132: LD_INT 2
57134: ARRAY
57135: PPUSH
57136: LD_INT 1
57138: PPUSH
57139: CALL_OW 453
// end ;
57143: GO 57100
57145: POP
57146: POP
// for i in ai_labs [ base ] do
57147: LD_ADDR_VAR 0 7
57151: PUSH
57152: LD_EXP 35
57156: PUSH
57157: LD_VAR 0 1
57161: ARRAY
57162: PUSH
57163: FOR_IN
57164: IFFALSE 57177
// KillUnit ( i ) ;
57166: LD_VAR 0 7
57170: PPUSH
57171: CALL_OW 66
57175: GO 57163
57177: POP
57178: POP
// wait ( 0 0$0.5 ) ;
57179: LD_INT 18
57181: PPUSH
57182: CALL_OW 67
// if hex_list > 0 then
57186: LD_VAR 0 3
57190: PUSH
57191: LD_INT 0
57193: GREATER
57194: IFFALSE 57246
// begin CenterOnXY ( hex_list [ 1 ] [ 1 ] , hex_list [ 1 ] [ 2 ] ) ;
57196: LD_VAR 0 3
57200: PUSH
57201: LD_INT 1
57203: ARRAY
57204: PUSH
57205: LD_INT 1
57207: ARRAY
57208: PPUSH
57209: LD_VAR 0 3
57213: PUSH
57214: LD_INT 1
57216: ARRAY
57217: PUSH
57218: LD_INT 2
57220: ARRAY
57221: PPUSH
57222: CALL_OW 84
// DialogueOn ;
57226: CALL_OW 6
// ForceSay ( Heike , D18-H-1 ) ;
57230: LD_EXP 7
57234: PPUSH
57235: LD_STRING D18-H-1
57237: PPUSH
57238: CALL_OW 91
// DialogueOff ;
57242: CALL_OW 7
// end ; player_has_seen_am_labs_explode = true ;
57246: LD_ADDR_EXP 115
57250: PUSH
57251: LD_INT 1
57253: ST_TO_ADDR
// ChangeMissionObjectives ( MOutlabcapture ) ;
57254: LD_STRING MOutlabcapture
57256: PPUSH
57257: CALL_OW 337
// end ; end_of_file
57261: PPOPN 8
57263: END
// function CreateUPFUnitsFirstAttack ; var i , un , num , temp_list ; var base ; begin
57264: LD_INT 0
57266: PPUSH
57267: PPUSH
57268: PPUSH
57269: PPUSH
57270: PPUSH
57271: PPUSH
// base = 3 ;
57272: LD_ADDR_VAR 0 6
57276: PUSH
57277: LD_INT 3
57279: ST_TO_ADDR
// upf_gensher_guards = CreateUnitsWithClass ( [ 0 , 1 , 2 ] [ difficulty ] , class_mechanic , upf ) ;
57280: LD_ADDR_EXP 119
57284: PUSH
57285: LD_INT 0
57287: PUSH
57288: LD_INT 1
57290: PUSH
57291: LD_INT 2
57293: PUSH
57294: EMPTY
57295: LIST
57296: LIST
57297: LIST
57298: PUSH
57299: LD_OWVAR 67
57303: ARRAY
57304: PPUSH
57305: LD_INT 3
57307: PPUSH
57308: LD_EXP 6
57312: PPUSH
57313: CALL 9322 0 3
57317: ST_TO_ADDR
// InitUc ;
57318: CALL_OW 18
// InitVc ;
57322: CALL_OW 20
// uc_side = upf ;
57326: LD_ADDR_OWVAR 20
57330: PUSH
57331: LD_EXP 6
57335: ST_TO_ADDR
// uc_nation = nation_arabian ;
57336: LD_ADDR_OWVAR 21
57340: PUSH
57341: LD_INT 2
57343: ST_TO_ADDR
// uc_direction = 0 ;
57344: LD_ADDR_OWVAR 24
57348: PUSH
57349: LD_INT 0
57351: ST_TO_ADDR
// vc_engine = engine_siberite ;
57352: LD_ADDR_OWVAR 39
57356: PUSH
57357: LD_INT 3
57359: ST_TO_ADDR
// vc_chassis = ar_half_tracked ;
57360: LD_ADDR_OWVAR 37
57364: PUSH
57365: LD_INT 14
57367: ST_TO_ADDR
// vc_control = control_manual ;
57368: LD_ADDR_OWVAR 38
57372: PUSH
57373: LD_INT 1
57375: ST_TO_ADDR
// for i in upf_gensher_guards do
57376: LD_ADDR_VAR 0 2
57380: PUSH
57381: LD_EXP 119
57385: PUSH
57386: FOR_IN
57387: IFFALSE 57462
// begin vc_weapon = [ ar_gun , ar_rocket_launcher , ar_gatling_gun ] [ Rand ( 1 , 3 ) ] ;
57389: LD_ADDR_OWVAR 40
57393: PUSH
57394: LD_INT 27
57396: PUSH
57397: LD_INT 28
57399: PUSH
57400: LD_INT 25
57402: PUSH
57403: EMPTY
57404: LIST
57405: LIST
57406: LIST
57407: PUSH
57408: LD_INT 1
57410: PPUSH
57411: LD_INT 3
57413: PPUSH
57414: CALL_OW 12
57418: ARRAY
57419: ST_TO_ADDR
// un = CreateVehicle ;
57420: LD_ADDR_VAR 0 3
57424: PUSH
57425: CALL_OW 45
57429: ST_TO_ADDR
// PlaceHumanInUnit ( i , un ) ;
57430: LD_VAR 0 2
57434: PPUSH
57435: LD_VAR 0 3
57439: PPUSH
57440: CALL_OW 52
// upf_gensher_guards_vehicles = upf_gensher_guards_vehicles ^ un ;
57444: LD_ADDR_EXP 125
57448: PUSH
57449: LD_EXP 125
57453: PUSH
57454: LD_VAR 0 3
57458: ADD
57459: ST_TO_ADDR
// end ;
57460: GO 57386
57462: POP
57463: POP
// vc_weapon = ar_gun ;
57464: LD_ADDR_OWVAR 40
57468: PUSH
57469: LD_INT 27
57471: ST_TO_ADDR
// gensher_vehicle = CreateVehicle ;
57472: LD_ADDR_EXP 128
57476: PUSH
57477: CALL_OW 45
57481: ST_TO_ADDR
// PlaceHumanInUnit ( Gensher , gensher_vehicle ) ;
57482: LD_EXP 21
57486: PPUSH
57487: LD_EXP 128
57491: PPUSH
57492: CALL_OW 52
// uc_direction = 4 ;
57496: LD_ADDR_OWVAR 24
57500: PUSH
57501: LD_INT 4
57503: ST_TO_ADDR
// vc_control = control_remote ;
57504: LD_ADDR_OWVAR 38
57508: PUSH
57509: LD_INT 2
57511: ST_TO_ADDR
// vc_weapon = ar_rocket_launcher ;
57512: LD_ADDR_OWVAR 40
57516: PUSH
57517: LD_INT 28
57519: ST_TO_ADDR
// vc_chassis = ar_half_tracked ;
57520: LD_ADDR_OWVAR 37
57524: PUSH
57525: LD_INT 14
57527: ST_TO_ADDR
// for i = 1 to [ 4 , 6 , 7 ] [ difficulty ] do
57528: LD_ADDR_VAR 0 2
57532: PUSH
57533: DOUBLE
57534: LD_INT 1
57536: DEC
57537: ST_TO_ADDR
57538: LD_INT 4
57540: PUSH
57541: LD_INT 6
57543: PUSH
57544: LD_INT 7
57546: PUSH
57547: EMPTY
57548: LIST
57549: LIST
57550: LIST
57551: PUSH
57552: LD_OWVAR 67
57556: ARRAY
57557: PUSH
57558: FOR_TO
57559: IFFALSE 57589
// begin un = CreateVehicle ;
57561: LD_ADDR_VAR 0 3
57565: PUSH
57566: CALL_OW 45
57570: ST_TO_ADDR
// upf_vehicles_attack = upf_vehicles_attack ^ un ;
57571: LD_ADDR_EXP 124
57575: PUSH
57576: LD_EXP 124
57580: PUSH
57581: LD_VAR 0 3
57585: ADD
57586: ST_TO_ADDR
// end ;
57587: GO 57558
57589: POP
57590: POP
// num = upf_vehicles_attack div 2 ;
57591: LD_ADDR_VAR 0 4
57595: PUSH
57596: LD_EXP 124
57600: PUSH
57601: LD_INT 2
57603: DIV
57604: ST_TO_ADDR
// if upf_vehicles_attack mod 2 > 0 then
57605: LD_EXP 124
57609: PUSH
57610: LD_INT 2
57612: MOD
57613: PUSH
57614: LD_INT 0
57616: GREATER
57617: IFFALSE 57633
// num = num + 1 ;
57619: LD_ADDR_VAR 0 4
57623: PUSH
57624: LD_VAR 0 4
57628: PUSH
57629: LD_INT 1
57631: PLUS
57632: ST_TO_ADDR
// upf_mechanics = CreateUnitsWithClass ( num , class_mechanic , upf ) ;
57633: LD_ADDR_EXP 120
57637: PUSH
57638: LD_VAR 0 4
57642: PPUSH
57643: LD_INT 3
57645: PPUSH
57646: LD_EXP 6
57650: PPUSH
57651: CALL 9322 0 3
57655: ST_TO_ADDR
// InitUc ;
57656: CALL_OW 18
// uc_side = upf ;
57660: LD_ADDR_OWVAR 20
57664: PUSH
57665: LD_EXP 6
57669: ST_TO_ADDR
// uc_nation = nation_arabian ;
57670: LD_ADDR_OWVAR 21
57674: PUSH
57675: LD_INT 2
57677: ST_TO_ADDR
// uc_direction = 4 ;
57678: LD_ADDR_OWVAR 24
57682: PUSH
57683: LD_INT 4
57685: ST_TO_ADDR
// vc_engine = engine_siberite ;
57686: LD_ADDR_OWVAR 39
57690: PUSH
57691: LD_INT 3
57693: ST_TO_ADDR
// vc_control = control_manual ;
57694: LD_ADDR_OWVAR 38
57698: PUSH
57699: LD_INT 1
57701: ST_TO_ADDR
// vc_weapon = ar_control_tower ;
57702: LD_ADDR_OWVAR 40
57706: PUSH
57707: LD_INT 31
57709: ST_TO_ADDR
// for i in upf_mechanics do
57710: LD_ADDR_VAR 0 2
57714: PUSH
57715: LD_EXP 120
57719: PUSH
57720: FOR_IN
57721: IFFALSE 57817
// begin vc_chassis = [ ar_medium_trike , ar_half_tracked ] [ Rand ( 1 , 2 ) ] ;
57723: LD_ADDR_OWVAR 37
57727: PUSH
57728: LD_INT 13
57730: PUSH
57731: LD_INT 14
57733: PUSH
57734: EMPTY
57735: LIST
57736: LIST
57737: PUSH
57738: LD_INT 1
57740: PPUSH
57741: LD_INT 2
57743: PPUSH
57744: CALL_OW 12
57748: ARRAY
57749: ST_TO_ADDR
// un = CreateVehicle ;
57750: LD_ADDR_VAR 0 3
57754: PUSH
57755: CALL_OW 45
57759: ST_TO_ADDR
// PlaceHumanInUnit ( i , un ) ;
57760: LD_VAR 0 2
57764: PPUSH
57765: LD_VAR 0 3
57769: PPUSH
57770: CALL_OW 52
// upf_vehicles_control = upf_vehicles_control ^ un ;
57774: LD_ADDR_EXP 123
57778: PUSH
57779: LD_EXP 123
57783: PUSH
57784: LD_VAR 0 3
57788: ADD
57789: ST_TO_ADDR
// upf_mechanic_control_map = Replace ( upf_mechanic_control_map , i , un ) ;
57790: LD_ADDR_EXP 127
57794: PUSH
57795: LD_EXP 127
57799: PPUSH
57800: LD_VAR 0 2
57804: PPUSH
57805: LD_VAR 0 3
57809: PPUSH
57810: CALL_OW 1
57814: ST_TO_ADDR
// end ;
57815: GO 57720
57817: POP
57818: POP
// for i in upf_mechanics do
57819: LD_ADDR_VAR 0 2
57823: PUSH
57824: LD_EXP 120
57828: PUSH
57829: FOR_IN
57830: IFFALSE 57856
// upf_mechanic_attack_map = Replace ( upf_mechanic_attack_map , i , [ ] ) ;
57832: LD_ADDR_EXP 126
57836: PUSH
57837: LD_EXP 126
57841: PPUSH
57842: LD_VAR 0 2
57846: PPUSH
57847: EMPTY
57848: PPUSH
57849: CALL_OW 1
57853: ST_TO_ADDR
57854: GO 57829
57856: POP
57857: POP
// for i = 1 to upf_vehicles_attack do
57858: LD_ADDR_VAR 0 2
57862: PUSH
57863: DOUBLE
57864: LD_INT 1
57866: DEC
57867: ST_TO_ADDR
57868: LD_EXP 124
57872: PUSH
57873: FOR_TO
57874: IFFALSE 57959
// begin un = upf_mechanics [ ( i - 1 ) div 2 + 1 ] ;
57876: LD_ADDR_VAR 0 3
57880: PUSH
57881: LD_EXP 120
57885: PUSH
57886: LD_VAR 0 2
57890: PUSH
57891: LD_INT 1
57893: MINUS
57894: PUSH
57895: LD_INT 2
57897: DIV
57898: PUSH
57899: LD_INT 1
57901: PLUS
57902: ARRAY
57903: ST_TO_ADDR
// temp_list = upf_mechanic_attack_map [ un ] ^ upf_vehicles_attack [ i ] ;
57904: LD_ADDR_VAR 0 5
57908: PUSH
57909: LD_EXP 126
57913: PUSH
57914: LD_VAR 0 3
57918: ARRAY
57919: PUSH
57920: LD_EXP 124
57924: PUSH
57925: LD_VAR 0 2
57929: ARRAY
57930: ADD
57931: ST_TO_ADDR
// upf_mechanic_attack_map = Replace ( upf_mechanic_attack_map , un , temp_list ) ;
57932: LD_ADDR_EXP 126
57936: PUSH
57937: LD_EXP 126
57941: PPUSH
57942: LD_VAR 0 3
57946: PPUSH
57947: LD_VAR 0 5
57951: PPUSH
57952: CALL_OW 1
57956: ST_TO_ADDR
// end ;
57957: GO 57873
57959: POP
57960: POP
// upf_soldiers_west = CreateUnitsWithClass ( [ 1 , 2 , 3 ] [ difficulty ] , class_soldier , upf ) ^ CreateUnitsWithClass ( [ 2 , 4 , 5 ] [ difficulty ] , class_mortar , upf ) ;
57961: LD_ADDR_EXP 121
57965: PUSH
57966: LD_INT 1
57968: PUSH
57969: LD_INT 2
57971: PUSH
57972: LD_INT 3
57974: PUSH
57975: EMPTY
57976: LIST
57977: LIST
57978: LIST
57979: PUSH
57980: LD_OWVAR 67
57984: ARRAY
57985: PPUSH
57986: LD_INT 1
57988: PPUSH
57989: LD_EXP 6
57993: PPUSH
57994: CALL 9322 0 3
57998: PUSH
57999: LD_INT 2
58001: PUSH
58002: LD_INT 4
58004: PUSH
58005: LD_INT 5
58007: PUSH
58008: EMPTY
58009: LIST
58010: LIST
58011: LIST
58012: PUSH
58013: LD_OWVAR 67
58017: ARRAY
58018: PPUSH
58019: LD_INT 8
58021: PPUSH
58022: LD_EXP 6
58026: PPUSH
58027: CALL 9322 0 3
58031: ADD
58032: ST_TO_ADDR
// upf_soldiers_east = CreateUnitsWithClass ( [ 1 , 2 , 3 ] [ difficulty ] , class_soldier , upf ) ^ CreateUnitsWithClass ( [ 2 , 4 , 5 ] [ difficulty ] , class_mortar , upf ) ;
58033: LD_ADDR_EXP 122
58037: PUSH
58038: LD_INT 1
58040: PUSH
58041: LD_INT 2
58043: PUSH
58044: LD_INT 3
58046: PUSH
58047: EMPTY
58048: LIST
58049: LIST
58050: LIST
58051: PUSH
58052: LD_OWVAR 67
58056: ARRAY
58057: PPUSH
58058: LD_INT 1
58060: PPUSH
58061: LD_EXP 6
58065: PPUSH
58066: CALL 9322 0 3
58070: PUSH
58071: LD_INT 2
58073: PUSH
58074: LD_INT 4
58076: PUSH
58077: LD_INT 5
58079: PUSH
58080: EMPTY
58081: LIST
58082: LIST
58083: LIST
58084: PUSH
58085: LD_OWVAR 67
58089: ARRAY
58090: PPUSH
58091: LD_INT 8
58093: PPUSH
58094: LD_EXP 6
58098: PPUSH
58099: CALL 9322 0 3
58103: ADD
58104: ST_TO_ADDR
// upf_scientists_west = CreateUnitsWithClass ( [ 0 , 1 , 2 ] [ difficulty ] , class_scientistic , upf ) ;
58105: LD_ADDR_EXP 129
58109: PUSH
58110: LD_INT 0
58112: PUSH
58113: LD_INT 1
58115: PUSH
58116: LD_INT 2
58118: PUSH
58119: EMPTY
58120: LIST
58121: LIST
58122: LIST
58123: PUSH
58124: LD_OWVAR 67
58128: ARRAY
58129: PPUSH
58130: LD_INT 4
58132: PPUSH
58133: LD_EXP 6
58137: PPUSH
58138: CALL 9322 0 3
58142: ST_TO_ADDR
// upf_scientists_east = CreateUnitsWithClass ( [ 0 , 1 , 2 ] [ difficulty ] , class_scientistic , upf ) ;
58143: LD_ADDR_EXP 130
58147: PUSH
58148: LD_INT 0
58150: PUSH
58151: LD_INT 1
58153: PUSH
58154: LD_INT 2
58156: PUSH
58157: EMPTY
58158: LIST
58159: LIST
58160: LIST
58161: PUSH
58162: LD_OWVAR 67
58166: ARRAY
58167: PPUSH
58168: LD_INT 4
58170: PPUSH
58171: LD_EXP 6
58175: PPUSH
58176: CALL 9322 0 3
58180: ST_TO_ADDR
// case Rand ( 1 , 3 ) of 1 :
58181: LD_INT 1
58183: PPUSH
58184: LD_INT 3
58186: PPUSH
58187: CALL_OW 12
58191: PUSH
58192: LD_INT 1
58194: DOUBLE
58195: EQUAL
58196: IFTRUE 58200
58198: GO 58203
58200: POP
// begin end ; 2 :
58201: GO 58318
58203: LD_INT 2
58205: DOUBLE
58206: EQUAL
58207: IFTRUE 58211
58209: GO 58260
58211: POP
// begin upf_soldiers_west = upf_soldiers_west ^ upf_soldiers_east ;
58212: LD_ADDR_EXP 121
58216: PUSH
58217: LD_EXP 121
58221: PUSH
58222: LD_EXP 122
58226: ADD
58227: ST_TO_ADDR
// upf_soldiers_east = [ ] ;
58228: LD_ADDR_EXP 122
58232: PUSH
58233: EMPTY
58234: ST_TO_ADDR
// upf_scientists_west = upf_scientists_west ^ upf_scientists_east ;
58235: LD_ADDR_EXP 129
58239: PUSH
58240: LD_EXP 129
58244: PUSH
58245: LD_EXP 130
58249: ADD
58250: ST_TO_ADDR
// upf_scientists_east = [ ] ;
58251: LD_ADDR_EXP 130
58255: PUSH
58256: EMPTY
58257: ST_TO_ADDR
// end ; 3 :
58258: GO 58318
58260: LD_INT 3
58262: DOUBLE
58263: EQUAL
58264: IFTRUE 58268
58266: GO 58317
58268: POP
// begin upf_soldiers_east = upf_soldiers_east ^ upf_soldiers_west ;
58269: LD_ADDR_EXP 122
58273: PUSH
58274: LD_EXP 122
58278: PUSH
58279: LD_EXP 121
58283: ADD
58284: ST_TO_ADDR
// upf_soldiers_west = [ ] ;
58285: LD_ADDR_EXP 121
58289: PUSH
58290: EMPTY
58291: ST_TO_ADDR
// upf_scientists_east = upf_scientists_east ^ upf_scientists_west ;
58292: LD_ADDR_EXP 130
58296: PUSH
58297: LD_EXP 130
58301: PUSH
58302: LD_EXP 129
58306: ADD
58307: ST_TO_ADDR
// upf_scientists_west = [ ] ;
58308: LD_ADDR_EXP 129
58312: PUSH
58313: EMPTY
58314: ST_TO_ADDR
// end ; end ;
58315: GO 58318
58317: POP
// for i in upf_soldiers_west ^ upf_soldiers_east ^ upf_scientists_west ^ upf_scientists_east do
58318: LD_ADDR_VAR 0 2
58322: PUSH
58323: LD_EXP 121
58327: PUSH
58328: LD_EXP 122
58332: ADD
58333: PUSH
58334: LD_EXP 129
58338: ADD
58339: PUSH
58340: LD_EXP 130
58344: ADD
58345: PUSH
58346: FOR_IN
58347: IFFALSE 58363
// begin SetDir ( i , 3 ) ;
58349: LD_VAR 0 2
58353: PPUSH
58354: LD_INT 3
58356: PPUSH
58357: CALL_OW 233
// end ;
58361: GO 58346
58363: POP
58364: POP
// end ;
58365: LD_VAR 0 1
58369: RET
// function CreateUPFUnitsSecondAttack ; var i , un , num , temp_list , mec_list , veh_list , human_list , temp_list_2 ; var base ; begin
58370: LD_INT 0
58372: PPUSH
58373: PPUSH
58374: PPUSH
58375: PPUSH
58376: PPUSH
58377: PPUSH
58378: PPUSH
58379: PPUSH
58380: PPUSH
58381: PPUSH
// base = 3 ;
58382: LD_ADDR_VAR 0 10
58386: PUSH
58387: LD_INT 3
58389: ST_TO_ADDR
// InitUc ;
58390: CALL_OW 18
// InitVc ;
58394: CALL_OW 20
// uc_side = upf ;
58398: LD_ADDR_OWVAR 20
58402: PUSH
58403: LD_EXP 6
58407: ST_TO_ADDR
// uc_nation = nation_arabian ;
58408: LD_ADDR_OWVAR 21
58412: PUSH
58413: LD_INT 2
58415: ST_TO_ADDR
// uc_direction = 4 ;
58416: LD_ADDR_OWVAR 24
58420: PUSH
58421: LD_INT 4
58423: ST_TO_ADDR
// vc_engine = engine_siberite ;
58424: LD_ADDR_OWVAR 39
58428: PUSH
58429: LD_INT 3
58431: ST_TO_ADDR
// vc_control = control_remote ;
58432: LD_ADDR_OWVAR 38
58436: PUSH
58437: LD_INT 2
58439: ST_TO_ADDR
// vc_weapon = ar_rocket_launcher ;
58440: LD_ADDR_OWVAR 40
58444: PUSH
58445: LD_INT 28
58447: ST_TO_ADDR
// vc_chassis = ar_half_tracked ;
58448: LD_ADDR_OWVAR 37
58452: PUSH
58453: LD_INT 14
58455: ST_TO_ADDR
// veh_list = [ ] ;
58456: LD_ADDR_VAR 0 7
58460: PUSH
58461: EMPTY
58462: ST_TO_ADDR
// for i = 1 to [ 4 , 6 , 7 ] [ difficulty ] do
58463: LD_ADDR_VAR 0 2
58467: PUSH
58468: DOUBLE
58469: LD_INT 1
58471: DEC
58472: ST_TO_ADDR
58473: LD_INT 4
58475: PUSH
58476: LD_INT 6
58478: PUSH
58479: LD_INT 7
58481: PUSH
58482: EMPTY
58483: LIST
58484: LIST
58485: LIST
58486: PUSH
58487: LD_OWVAR 67
58491: ARRAY
58492: PUSH
58493: FOR_TO
58494: IFFALSE 58540
// begin un = CreateVehicle ;
58496: LD_ADDR_VAR 0 3
58500: PUSH
58501: CALL_OW 45
58505: ST_TO_ADDR
// upf_vehicles_attack = upf_vehicles_attack ^ un ;
58506: LD_ADDR_EXP 124
58510: PUSH
58511: LD_EXP 124
58515: PUSH
58516: LD_VAR 0 3
58520: ADD
58521: ST_TO_ADDR
// veh_list = veh_list ^ un ;
58522: LD_ADDR_VAR 0 7
58526: PUSH
58527: LD_VAR 0 7
58531: PUSH
58532: LD_VAR 0 3
58536: ADD
58537: ST_TO_ADDR
// end ;
58538: GO 58493
58540: POP
58541: POP
// num = veh_list div 2 ;
58542: LD_ADDR_VAR 0 4
58546: PUSH
58547: LD_VAR 0 7
58551: PUSH
58552: LD_INT 2
58554: DIV
58555: ST_TO_ADDR
// if veh_list mod 2 > 0 then
58556: LD_VAR 0 7
58560: PUSH
58561: LD_INT 2
58563: MOD
58564: PUSH
58565: LD_INT 0
58567: GREATER
58568: IFFALSE 58584
// num = num + 1 ;
58570: LD_ADDR_VAR 0 4
58574: PUSH
58575: LD_VAR 0 4
58579: PUSH
58580: LD_INT 1
58582: PLUS
58583: ST_TO_ADDR
// mec_list = CreateUnitsWithClass ( num , class_mechanic , upf ) ;
58584: LD_ADDR_VAR 0 6
58588: PUSH
58589: LD_VAR 0 4
58593: PPUSH
58594: LD_INT 3
58596: PPUSH
58597: LD_EXP 6
58601: PPUSH
58602: CALL 9322 0 3
58606: ST_TO_ADDR
// upf_mechanics = upf_mechanics ^ mec_list ;
58607: LD_ADDR_EXP 120
58611: PUSH
58612: LD_EXP 120
58616: PUSH
58617: LD_VAR 0 6
58621: ADD
58622: ST_TO_ADDR
// InitUc ;
58623: CALL_OW 18
// uc_side = upf ;
58627: LD_ADDR_OWVAR 20
58631: PUSH
58632: LD_EXP 6
58636: ST_TO_ADDR
// uc_nation = nation_arabian ;
58637: LD_ADDR_OWVAR 21
58641: PUSH
58642: LD_INT 2
58644: ST_TO_ADDR
// uc_direction = 4 ;
58645: LD_ADDR_OWVAR 24
58649: PUSH
58650: LD_INT 4
58652: ST_TO_ADDR
// vc_engine = engine_siberite ;
58653: LD_ADDR_OWVAR 39
58657: PUSH
58658: LD_INT 3
58660: ST_TO_ADDR
// vc_control = control_manual ;
58661: LD_ADDR_OWVAR 38
58665: PUSH
58666: LD_INT 1
58668: ST_TO_ADDR
// vc_weapon = ar_control_tower ;
58669: LD_ADDR_OWVAR 40
58673: PUSH
58674: LD_INT 31
58676: ST_TO_ADDR
// for i in mec_list do
58677: LD_ADDR_VAR 0 2
58681: PUSH
58682: LD_VAR 0 6
58686: PUSH
58687: FOR_IN
58688: IFFALSE 58784
// begin vc_chassis = [ ar_medium_trike , ar_half_tracked ] [ Rand ( 1 , 2 ) ] ;
58690: LD_ADDR_OWVAR 37
58694: PUSH
58695: LD_INT 13
58697: PUSH
58698: LD_INT 14
58700: PUSH
58701: EMPTY
58702: LIST
58703: LIST
58704: PUSH
58705: LD_INT 1
58707: PPUSH
58708: LD_INT 2
58710: PPUSH
58711: CALL_OW 12
58715: ARRAY
58716: ST_TO_ADDR
// un = CreateVehicle ;
58717: LD_ADDR_VAR 0 3
58721: PUSH
58722: CALL_OW 45
58726: ST_TO_ADDR
// PlaceHumanInUnit ( i , un ) ;
58727: LD_VAR 0 2
58731: PPUSH
58732: LD_VAR 0 3
58736: PPUSH
58737: CALL_OW 52
// upf_vehicles_control = upf_vehicles_control ^ un ;
58741: LD_ADDR_EXP 123
58745: PUSH
58746: LD_EXP 123
58750: PUSH
58751: LD_VAR 0 3
58755: ADD
58756: ST_TO_ADDR
// upf_mechanic_control_map = Replace ( upf_mechanic_control_map , i , un ) ;
58757: LD_ADDR_EXP 127
58761: PUSH
58762: LD_EXP 127
58766: PPUSH
58767: LD_VAR 0 2
58771: PPUSH
58772: LD_VAR 0 3
58776: PPUSH
58777: CALL_OW 1
58781: ST_TO_ADDR
// end ;
58782: GO 58687
58784: POP
58785: POP
// for i in mec_list do
58786: LD_ADDR_VAR 0 2
58790: PUSH
58791: LD_VAR 0 6
58795: PUSH
58796: FOR_IN
58797: IFFALSE 58823
// upf_mechanic_attack_map = Replace ( upf_mechanic_attack_map , i , [ ] ) ;
58799: LD_ADDR_EXP 126
58803: PUSH
58804: LD_EXP 126
58808: PPUSH
58809: LD_VAR 0 2
58813: PPUSH
58814: EMPTY
58815: PPUSH
58816: CALL_OW 1
58820: ST_TO_ADDR
58821: GO 58796
58823: POP
58824: POP
// for i = 1 to veh_list do
58825: LD_ADDR_VAR 0 2
58829: PUSH
58830: DOUBLE
58831: LD_INT 1
58833: DEC
58834: ST_TO_ADDR
58835: LD_VAR 0 7
58839: PUSH
58840: FOR_TO
58841: IFFALSE 58926
// begin un = mec_list [ ( i - 1 ) div 2 + 1 ] ;
58843: LD_ADDR_VAR 0 3
58847: PUSH
58848: LD_VAR 0 6
58852: PUSH
58853: LD_VAR 0 2
58857: PUSH
58858: LD_INT 1
58860: MINUS
58861: PUSH
58862: LD_INT 2
58864: DIV
58865: PUSH
58866: LD_INT 1
58868: PLUS
58869: ARRAY
58870: ST_TO_ADDR
// temp_list = upf_mechanic_attack_map [ un ] ^ veh_list [ i ] ;
58871: LD_ADDR_VAR 0 5
58875: PUSH
58876: LD_EXP 126
58880: PUSH
58881: LD_VAR 0 3
58885: ARRAY
58886: PUSH
58887: LD_VAR 0 7
58891: PUSH
58892: LD_VAR 0 2
58896: ARRAY
58897: ADD
58898: ST_TO_ADDR
// upf_mechanic_attack_map = Replace ( upf_mechanic_attack_map , un , temp_list ) ;
58899: LD_ADDR_EXP 126
58903: PUSH
58904: LD_EXP 126
58908: PPUSH
58909: LD_VAR 0 3
58913: PPUSH
58914: LD_VAR 0 5
58918: PPUSH
58919: CALL_OW 1
58923: ST_TO_ADDR
// end ;
58924: GO 58840
58926: POP
58927: POP
// human_list = [ ] ;
58928: LD_ADDR_VAR 0 8
58932: PUSH
58933: EMPTY
58934: ST_TO_ADDR
// num = Rand ( 1 , 3 ) ;
58935: LD_ADDR_VAR 0 4
58939: PUSH
58940: LD_INT 1
58942: PPUSH
58943: LD_INT 3
58945: PPUSH
58946: CALL_OW 12
58950: ST_TO_ADDR
// temp_list_2 = CreateUnitsWithClass ( [ 1 , 3 , 5 ] [ difficulty ] , class_soldier , upf ) ^ CreateUnitsWithClass ( [ 2 , 4 , 6 ] [ difficulty ] , class_mortar , upf ) ;
58951: LD_ADDR_VAR 0 9
58955: PUSH
58956: LD_INT 1
58958: PUSH
58959: LD_INT 3
58961: PUSH
58962: LD_INT 5
58964: PUSH
58965: EMPTY
58966: LIST
58967: LIST
58968: LIST
58969: PUSH
58970: LD_OWVAR 67
58974: ARRAY
58975: PPUSH
58976: LD_INT 1
58978: PPUSH
58979: LD_EXP 6
58983: PPUSH
58984: CALL 9322 0 3
58988: PUSH
58989: LD_INT 2
58991: PUSH
58992: LD_INT 4
58994: PUSH
58995: LD_INT 6
58997: PUSH
58998: EMPTY
58999: LIST
59000: LIST
59001: LIST
59002: PUSH
59003: LD_OWVAR 67
59007: ARRAY
59008: PPUSH
59009: LD_INT 8
59011: PPUSH
59012: LD_EXP 6
59016: PPUSH
59017: CALL 9322 0 3
59021: ADD
59022: ST_TO_ADDR
// if num in [ 1 , 2 ] then
59023: LD_VAR 0 4
59027: PUSH
59028: LD_INT 1
59030: PUSH
59031: LD_INT 2
59033: PUSH
59034: EMPTY
59035: LIST
59036: LIST
59037: IN
59038: IFFALSE 59058
// upf_soldiers_west = upf_soldiers_west ^ temp_list_2 else
59040: LD_ADDR_EXP 121
59044: PUSH
59045: LD_EXP 121
59049: PUSH
59050: LD_VAR 0 9
59054: ADD
59055: ST_TO_ADDR
59056: GO 59074
// upf_soldiers_east = upf_soldiers_east ^ temp_list_2 ;
59058: LD_ADDR_EXP 122
59062: PUSH
59063: LD_EXP 122
59067: PUSH
59068: LD_VAR 0 9
59072: ADD
59073: ST_TO_ADDR
// human_list = human_list ^ temp_list_2 ;
59074: LD_ADDR_VAR 0 8
59078: PUSH
59079: LD_VAR 0 8
59083: PUSH
59084: LD_VAR 0 9
59088: ADD
59089: ST_TO_ADDR
// temp_list_2 = CreateUnitsWithClass ( [ 1 , 3 , 5 ] [ difficulty ] , class_soldier , upf ) ^ CreateUnitsWithClass ( [ 2 , 4 , 6 ] [ difficulty ] , class_mortar , upf ) ;
59090: LD_ADDR_VAR 0 9
59094: PUSH
59095: LD_INT 1
59097: PUSH
59098: LD_INT 3
59100: PUSH
59101: LD_INT 5
59103: PUSH
59104: EMPTY
59105: LIST
59106: LIST
59107: LIST
59108: PUSH
59109: LD_OWVAR 67
59113: ARRAY
59114: PPUSH
59115: LD_INT 1
59117: PPUSH
59118: LD_EXP 6
59122: PPUSH
59123: CALL 9322 0 3
59127: PUSH
59128: LD_INT 2
59130: PUSH
59131: LD_INT 4
59133: PUSH
59134: LD_INT 6
59136: PUSH
59137: EMPTY
59138: LIST
59139: LIST
59140: LIST
59141: PUSH
59142: LD_OWVAR 67
59146: ARRAY
59147: PPUSH
59148: LD_INT 8
59150: PPUSH
59151: LD_EXP 6
59155: PPUSH
59156: CALL 9322 0 3
59160: ADD
59161: ST_TO_ADDR
// ; if num in [ 1 , 3 ] then
59162: LD_VAR 0 4
59166: PUSH
59167: LD_INT 1
59169: PUSH
59170: LD_INT 3
59172: PUSH
59173: EMPTY
59174: LIST
59175: LIST
59176: IN
59177: IFFALSE 59197
// upf_soldiers_east = upf_soldiers_east ^ temp_list_2 else
59179: LD_ADDR_EXP 122
59183: PUSH
59184: LD_EXP 122
59188: PUSH
59189: LD_VAR 0 9
59193: ADD
59194: ST_TO_ADDR
59195: GO 59213
// upf_soldiers_west = upf_soldiers_west ^ temp_list_2 ;
59197: LD_ADDR_EXP 121
59201: PUSH
59202: LD_EXP 121
59206: PUSH
59207: LD_VAR 0 9
59211: ADD
59212: ST_TO_ADDR
// human_list = human_list ^ temp_list_2 ;
59213: LD_ADDR_VAR 0 8
59217: PUSH
59218: LD_VAR 0 8
59222: PUSH
59223: LD_VAR 0 9
59227: ADD
59228: ST_TO_ADDR
// temp_list_2 = CreateUnitsWithClass ( [ 1 , 2 , 3 ] [ difficulty ] , class_scientistic , upf ) ;
59229: LD_ADDR_VAR 0 9
59233: PUSH
59234: LD_INT 1
59236: PUSH
59237: LD_INT 2
59239: PUSH
59240: LD_INT 3
59242: PUSH
59243: EMPTY
59244: LIST
59245: LIST
59246: LIST
59247: PUSH
59248: LD_OWVAR 67
59252: ARRAY
59253: PPUSH
59254: LD_INT 4
59256: PPUSH
59257: LD_EXP 6
59261: PPUSH
59262: CALL 9322 0 3
59266: ST_TO_ADDR
// if num in [ 1 , 2 ] then
59267: LD_VAR 0 4
59271: PUSH
59272: LD_INT 1
59274: PUSH
59275: LD_INT 2
59277: PUSH
59278: EMPTY
59279: LIST
59280: LIST
59281: IN
59282: IFFALSE 59302
// upf_scientists_west = upf_scientists_west ^ temp_list_2 else
59284: LD_ADDR_EXP 129
59288: PUSH
59289: LD_EXP 129
59293: PUSH
59294: LD_VAR 0 9
59298: ADD
59299: ST_TO_ADDR
59300: GO 59318
// upf_scientists_east = upf_scientists_east ^ temp_list_2 ;
59302: LD_ADDR_EXP 130
59306: PUSH
59307: LD_EXP 130
59311: PUSH
59312: LD_VAR 0 9
59316: ADD
59317: ST_TO_ADDR
// human_list = human_list ^ temp_list_2 ;
59318: LD_ADDR_VAR 0 8
59322: PUSH
59323: LD_VAR 0 8
59327: PUSH
59328: LD_VAR 0 9
59332: ADD
59333: ST_TO_ADDR
// temp_list_2 = CreateUnitsWithClass ( [ 1 , 2 , 3 ] [ difficulty ] , class_scientistic , upf ) ;
59334: LD_ADDR_VAR 0 9
59338: PUSH
59339: LD_INT 1
59341: PUSH
59342: LD_INT 2
59344: PUSH
59345: LD_INT 3
59347: PUSH
59348: EMPTY
59349: LIST
59350: LIST
59351: LIST
59352: PUSH
59353: LD_OWVAR 67
59357: ARRAY
59358: PPUSH
59359: LD_INT 4
59361: PPUSH
59362: LD_EXP 6
59366: PPUSH
59367: CALL 9322 0 3
59371: ST_TO_ADDR
// if num in [ 1 , 3 ] then
59372: LD_VAR 0 4
59376: PUSH
59377: LD_INT 1
59379: PUSH
59380: LD_INT 3
59382: PUSH
59383: EMPTY
59384: LIST
59385: LIST
59386: IN
59387: IFFALSE 59407
// upf_scientists_east = upf_scientists_east ^ temp_list_2 else
59389: LD_ADDR_EXP 130
59393: PUSH
59394: LD_EXP 130
59398: PUSH
59399: LD_VAR 0 9
59403: ADD
59404: ST_TO_ADDR
59405: GO 59423
// upf_scientists_west = upf_scientists_west ^ temp_list_2 ;
59407: LD_ADDR_EXP 129
59411: PUSH
59412: LD_EXP 129
59416: PUSH
59417: LD_VAR 0 9
59421: ADD
59422: ST_TO_ADDR
// human_list = human_list ^ temp_list_2 ;
59423: LD_ADDR_VAR 0 8
59427: PUSH
59428: LD_VAR 0 8
59432: PUSH
59433: LD_VAR 0 9
59437: ADD
59438: ST_TO_ADDR
// for i in human_list do
59439: LD_ADDR_VAR 0 2
59443: PUSH
59444: LD_VAR 0 8
59448: PUSH
59449: FOR_IN
59450: IFFALSE 59466
// begin SetDir ( i , 3 ) ;
59452: LD_VAR 0 2
59456: PPUSH
59457: LD_INT 3
59459: PPUSH
59460: CALL_OW 233
// end ;
59464: GO 59449
59466: POP
59467: POP
// end ;
59468: LD_VAR 0 1
59472: RET
// every 0 0$1 + 0 0$0.2 trigger upf_attack_status in [ 1 , 4 ] do var i , temp_list , controller , temp_list_2 , do_enable ;
59473: LD_EXP 118
59477: PUSH
59478: LD_INT 1
59480: PUSH
59481: LD_INT 4
59483: PUSH
59484: EMPTY
59485: LIST
59486: LIST
59487: IN
59488: IFFALSE 61049
59490: GO 59492
59492: DISABLE
59493: LD_INT 0
59495: PPUSH
59496: PPUSH
59497: PPUSH
59498: PPUSH
59499: PPUSH
// begin if upf_attack_status = 1 then
59500: LD_EXP 118
59504: PUSH
59505: LD_INT 1
59507: EQUAL
59508: IFFALSE 59524
// begin CreateUPFUnitsFirstAttack ;
59510: CALL 57264 0 0
// upf_start_mineclearing = true ;
59514: LD_ADDR_EXP 133
59518: PUSH
59519: LD_INT 1
59521: ST_TO_ADDR
// end else
59522: GO 59528
// CreateUPFUnitsSecondAttack ;
59524: CALL 58370 0 0
// temp_list = [ ] ;
59528: LD_ADDR_VAR 0 2
59532: PUSH
59533: EMPTY
59534: ST_TO_ADDR
// while UnitFilter ( upf_vehicles_attack ^ upf_vehicles_control , [ f_not , [ f_placed ] ] ) > 0 do
59535: LD_EXP 124
59539: PUSH
59540: LD_EXP 123
59544: ADD
59545: PPUSH
59546: LD_INT 3
59548: PUSH
59549: LD_INT 52
59551: PUSH
59552: EMPTY
59553: LIST
59554: PUSH
59555: EMPTY
59556: LIST
59557: LIST
59558: PPUSH
59559: CALL_OW 72
59563: PUSH
59564: LD_INT 0
59566: GREATER
59567: IFFALSE 59927
// begin temp_list = UnitFilter ( temp_list , [ [ f_placed ] , [ f_inarea , enter_area_east ] ] ) ;
59569: LD_ADDR_VAR 0 2
59573: PUSH
59574: LD_VAR 0 2
59578: PPUSH
59579: LD_INT 52
59581: PUSH
59582: EMPTY
59583: LIST
59584: PUSH
59585: LD_INT 95
59587: PUSH
59588: LD_INT 1
59590: PUSH
59591: EMPTY
59592: LIST
59593: LIST
59594: PUSH
59595: EMPTY
59596: LIST
59597: LIST
59598: PPUSH
59599: CALL_OW 72
59603: ST_TO_ADDR
// if temp_list = 0 then
59604: LD_VAR 0 2
59608: PUSH
59609: LD_INT 0
59611: EQUAL
59612: IFFALSE 59829
// begin temp_list_2 = UnitFilter ( upf_vehicles_control , [ f_not , [ f_placed ] ] ) ;
59614: LD_ADDR_VAR 0 4
59618: PUSH
59619: LD_EXP 123
59623: PPUSH
59624: LD_INT 3
59626: PUSH
59627: LD_INT 52
59629: PUSH
59630: EMPTY
59631: LIST
59632: PUSH
59633: EMPTY
59634: LIST
59635: LIST
59636: PPUSH
59637: CALL_OW 72
59641: ST_TO_ADDR
// if temp_list_2 = 0 then
59642: LD_VAR 0 4
59646: PUSH
59647: LD_INT 0
59649: EQUAL
59650: IFFALSE 59654
// break ;
59652: GO 59927
// PlaceUnitArea ( temp_list_2 [ 1 ] , enter_area_east , false ) ;
59654: LD_VAR 0 4
59658: PUSH
59659: LD_INT 1
59661: ARRAY
59662: PPUSH
59663: LD_INT 1
59665: PPUSH
59666: LD_INT 0
59668: PPUSH
59669: CALL_OW 49
// if UnitsInside ( temp_list_2 [ 1 ] ) > 0 then
59673: LD_VAR 0 4
59677: PUSH
59678: LD_INT 1
59680: ARRAY
59681: PPUSH
59682: CALL_OW 313
59686: PUSH
59687: LD_INT 0
59689: GREATER
59690: IFFALSE 59717
// controller = UnitsInside ( temp_list_2 [ 1 ] ) [ 1 ] else
59692: LD_ADDR_VAR 0 3
59696: PUSH
59697: LD_VAR 0 4
59701: PUSH
59702: LD_INT 1
59704: ARRAY
59705: PPUSH
59706: CALL_OW 313
59710: PUSH
59711: LD_INT 1
59713: ARRAY
59714: ST_TO_ADDR
59715: GO 59726
// controller = - 3 ;
59717: LD_ADDR_VAR 0 3
59721: PUSH
59722: LD_INT 3
59724: NEG
59725: ST_TO_ADDR
// temp_list = [ temp_list_2 [ 1 ] ] ;
59726: LD_ADDR_VAR 0 2
59730: PUSH
59731: LD_VAR 0 4
59735: PUSH
59736: LD_INT 1
59738: ARRAY
59739: PUSH
59740: EMPTY
59741: LIST
59742: ST_TO_ADDR
// if upf_mechanic_attack_map >= controller then
59743: LD_EXP 126
59747: PUSH
59748: LD_VAR 0 3
59752: GREATEREQUAL
59753: IFFALSE 59829
// begin for i in upf_mechanic_attack_map [ controller ] do
59755: LD_ADDR_VAR 0 1
59759: PUSH
59760: LD_EXP 126
59764: PUSH
59765: LD_VAR 0 3
59769: ARRAY
59770: PUSH
59771: FOR_IN
59772: IFFALSE 59805
// begin PlaceUnitArea ( i , enter_area_east , false ) ;
59774: LD_VAR 0 1
59778: PPUSH
59779: LD_INT 1
59781: PPUSH
59782: LD_INT 0
59784: PPUSH
59785: CALL_OW 49
// ComLinkTo ( i , controller ) ;
59789: LD_VAR 0 1
59793: PPUSH
59794: LD_VAR 0 3
59798: PPUSH
59799: CALL_OW 135
// end ;
59803: GO 59771
59805: POP
59806: POP
// temp_list = temp_list ^ upf_mechanic_attack_map [ controller ] ;
59807: LD_ADDR_VAR 0 2
59811: PUSH
59812: LD_VAR 0 2
59816: PUSH
59817: LD_EXP 126
59821: PUSH
59822: LD_VAR 0 3
59826: ARRAY
59827: ADD
59828: ST_TO_ADDR
// end ; end ; for i in temp_list do
59829: LD_ADDR_VAR 0 1
59833: PUSH
59834: LD_VAR 0 2
59838: PUSH
59839: FOR_IN
59840: IFFALSE 59916
// if GetControl ( i ) = control_remote then
59842: LD_VAR 0 1
59846: PPUSH
59847: CALL_OW 263
59851: PUSH
59852: LD_INT 2
59854: EQUAL
59855: IFFALSE 59902
// begin if IsControledBy ( i ) = 0 then
59857: LD_VAR 0 1
59861: PPUSH
59862: CALL_OW 312
59866: PUSH
59867: LD_INT 0
59869: EQUAL
59870: IFFALSE 59888
// ComLinkTo ( i , controller ) else
59872: LD_VAR 0 1
59876: PPUSH
59877: LD_VAR 0 3
59881: PPUSH
59882: CALL_OW 135
59886: GO 59900
// ComMoveToArea ( i , attack_vehicle_area ) ;
59888: LD_VAR 0 1
59892: PPUSH
59893: LD_INT 13
59895: PPUSH
59896: CALL_OW 113
// end else
59900: GO 59914
// ComMoveToArea ( i , control_vehicle_area ) ;
59902: LD_VAR 0 1
59906: PPUSH
59907: LD_INT 12
59909: PPUSH
59910: CALL_OW 113
59914: GO 59839
59916: POP
59917: POP
// wait ( 0 0$1 ) ;
59918: LD_INT 35
59920: PPUSH
59921: CALL_OW 67
// end ;
59925: GO 59535
// if upf_attack_status = 1 then
59927: LD_EXP 118
59931: PUSH
59932: LD_INT 1
59934: EQUAL
59935: IFFALSE 60687
// begin DialogueOn ;
59937: CALL_OW 6
// SayRadio ( Gensher , D11-Ge-1 ) ;
59941: LD_EXP 21
59945: PPUSH
59946: LD_STRING D11-Ge-1
59948: PPUSH
59949: CALL_OW 94
// if IsLive ( upf_deserter ) and not upf_deserter_choice in [ 1 , 2 ] and am_scientists_escape_status <> 2 then
59953: LD_EXP 19
59957: PPUSH
59958: CALL_OW 300
59962: PUSH
59963: LD_EXP 100
59967: PUSH
59968: LD_INT 1
59970: PUSH
59971: LD_INT 2
59973: PUSH
59974: EMPTY
59975: LIST
59976: LIST
59977: IN
59978: NOT
59979: AND
59980: PUSH
59981: LD_EXP 111
59985: PUSH
59986: LD_INT 2
59988: NONEQUAL
59989: AND
59990: IFFALSE 60146
// begin SayRadio ( Gensher , D11-Ge-2a ) ;
59992: LD_EXP 21
59996: PPUSH
59997: LD_STRING D11-Ge-2a
59999: PPUSH
60000: CALL_OW 94
// if IsLive ( upf_speaker ) then
60004: LD_EXP 101
60008: PPUSH
60009: CALL_OW 300
60013: IFFALSE 60112
// case upf_speaker of Suze :
60015: LD_EXP 101
60019: PUSH
60020: LD_EXP 13
60024: DOUBLE
60025: EQUAL
60026: IFTRUE 60030
60028: GO 60045
60030: POP
// ForceSay ( upf_speaker , D11-Su-1 ) ; Kowalski :
60031: LD_EXP 101
60035: PPUSH
60036: LD_STRING D11-Su-1
60038: PPUSH
60039: CALL_OW 91
60043: GO 60112
60045: LD_EXP 12
60049: DOUBLE
60050: EQUAL
60051: IFTRUE 60055
60053: GO 60070
60055: POP
// ForceSay ( upf_speaker , D11-Ko-1 ) ; else
60056: LD_EXP 101
60060: PPUSH
60061: LD_STRING D11-Ko-1
60063: PPUSH
60064: CALL_OW 91
60068: GO 60112
60070: POP
// if GetSex ( upf_speaker ) = sex_male then
60071: LD_EXP 101
60075: PPUSH
60076: CALL_OW 258
60080: PUSH
60081: LD_INT 1
60083: EQUAL
60084: IFFALSE 60100
// Say ( upf_speaker , D11-SomeM1-1 ) else
60086: LD_EXP 101
60090: PPUSH
60091: LD_STRING D11-SomeM1-1
60093: PPUSH
60094: CALL_OW 88
60098: GO 60112
// Say ( upf_speaker , D11-SomeF1-1 ) ; end ;
60100: LD_EXP 101
60104: PPUSH
60105: LD_STRING D11-SomeF1-1
60107: PPUSH
60108: CALL_OW 88
// ForceSay ( upf_deserter , D11-Ro-1 ) ;
60112: LD_EXP 19
60116: PPUSH
60117: LD_STRING D11-Ro-1
60119: PPUSH
60120: CALL_OW 91
// ForceSay ( Heike , D11-H-1 ) ;
60124: LD_EXP 7
60128: PPUSH
60129: LD_STRING D11-H-1
60131: PPUSH
60132: CALL_OW 91
// gensher_accused_deserter = true ;
60136: LD_ADDR_EXP 106
60140: PUSH
60141: LD_INT 1
60143: ST_TO_ADDR
// end else
60144: GO 60671
// if UnitFilter ( freelancers_leader ^ other_freelancers ^ Willard , [ f_alive ] ) > 0 and freelancers_choice = 1 and not louis_gordon_dispute_choice in [ 1 , 2 ] and am_scientists_escape_status <> 2 then
60146: LD_EXP 25
60150: PUSH
60151: LD_EXP 26
60155: ADD
60156: PUSH
60157: LD_EXP 24
60161: ADD
60162: PPUSH
60163: LD_INT 51
60165: PUSH
60166: EMPTY
60167: LIST
60168: PPUSH
60169: CALL_OW 72
60173: PUSH
60174: LD_INT 0
60176: GREATER
60177: PUSH
60178: LD_EXP 98
60182: PUSH
60183: LD_INT 1
60185: EQUAL
60186: AND
60187: PUSH
60188: LD_EXP 102
60192: PUSH
60193: LD_INT 1
60195: PUSH
60196: LD_INT 2
60198: PUSH
60199: EMPTY
60200: LIST
60201: LIST
60202: IN
60203: NOT
60204: AND
60205: PUSH
60206: LD_EXP 111
60210: PUSH
60211: LD_INT 2
60213: NONEQUAL
60214: AND
60215: IFFALSE 60520
// begin SayRadio ( Gensher , D11-Ge-2b ) ;
60217: LD_EXP 21
60221: PPUSH
60222: LD_STRING D11-Ge-2b
60224: PPUSH
60225: CALL_OW 94
// if IsLive ( Louis ) then
60229: LD_EXP 17
60233: PPUSH
60234: CALL_OW 300
60238: IFFALSE 60254
// ForceSay ( Louis , D11-Lo-1 ) else
60240: LD_EXP 17
60244: PPUSH
60245: LD_STRING D11-Lo-1
60247: PPUSH
60248: CALL_OW 91
60252: GO 60338
// begin temp_list = UnitFilter ( other_louis_folks , [ f_alive ] ) ;
60254: LD_ADDR_VAR 0 2
60258: PUSH
60259: LD_EXP 20
60263: PPUSH
60264: LD_INT 51
60266: PUSH
60267: EMPTY
60268: LIST
60269: PPUSH
60270: CALL_OW 72
60274: ST_TO_ADDR
// if temp_list > 0 then
60275: LD_VAR 0 2
60279: PUSH
60280: LD_INT 0
60282: GREATER
60283: IFFALSE 60338
// if GetSex ( temp_list [ 1 ] ) = sex_male then
60285: LD_VAR 0 2
60289: PUSH
60290: LD_INT 1
60292: ARRAY
60293: PPUSH
60294: CALL_OW 258
60298: PUSH
60299: LD_INT 1
60301: EQUAL
60302: IFFALSE 60322
// ForceSay ( temp_list [ 1 ] , D11-SomeM1-1 ) else
60304: LD_VAR 0 2
60308: PUSH
60309: LD_INT 1
60311: ARRAY
60312: PPUSH
60313: LD_STRING D11-SomeM1-1
60315: PPUSH
60316: CALL_OW 91
60320: GO 60338
// ForceSay ( temp_list [ 1 ] , D11-SomeF1-1 ) ;
60322: LD_VAR 0 2
60326: PUSH
60327: LD_INT 1
60329: ARRAY
60330: PPUSH
60331: LD_STRING D11-SomeF1-1
60333: PPUSH
60334: CALL_OW 91
// end ; if IsLive ( freelancers_leader ) then
60338: LD_EXP 25
60342: PPUSH
60343: CALL_OW 300
60347: IFFALSE 60389
// begin if freelancers_leader = Gordon then
60349: LD_EXP 25
60353: PUSH
60354: LD_EXP 23
60358: EQUAL
60359: IFFALSE 60375
// ForceSay ( Gordon , D11-Go-1 ) else
60361: LD_EXP 23
60365: PPUSH
60366: LD_STRING D11-Go-1
60368: PPUSH
60369: CALL_OW 91
60373: GO 60387
// ForceSay ( freelancers_leader , D11-FLea-1 ) ;
60375: LD_EXP 25
60379: PPUSH
60380: LD_STRING D11-FLea-1
60382: PPUSH
60383: CALL_OW 91
// end else
60387: GO 60498
// if IsLive ( Willard ) then
60389: LD_EXP 24
60393: PPUSH
60394: CALL_OW 300
60398: IFFALSE 60414
// ForceSay ( Willard , D11-Wi-1 ) else
60400: LD_EXP 24
60404: PPUSH
60405: LD_STRING D11-Wi-1
60407: PPUSH
60408: CALL_OW 91
60412: GO 60498
// begin temp_list = UnitFilter ( other_freelancers , [ f_alive ] ) ;
60414: LD_ADDR_VAR 0 2
60418: PUSH
60419: LD_EXP 26
60423: PPUSH
60424: LD_INT 51
60426: PUSH
60427: EMPTY
60428: LIST
60429: PPUSH
60430: CALL_OW 72
60434: ST_TO_ADDR
// if temp_list > 0 then
60435: LD_VAR 0 2
60439: PUSH
60440: LD_INT 0
60442: GREATER
60443: IFFALSE 60498
// if GetSex ( temp_list [ 1 ] ) = sex_male then
60445: LD_VAR 0 2
60449: PUSH
60450: LD_INT 1
60452: ARRAY
60453: PPUSH
60454: CALL_OW 258
60458: PUSH
60459: LD_INT 1
60461: EQUAL
60462: IFFALSE 60482
// ForceSay ( temp_list [ 1 ] , D11-SomeM2-1 ) else
60464: LD_VAR 0 2
60468: PUSH
60469: LD_INT 1
60471: ARRAY
60472: PPUSH
60473: LD_STRING D11-SomeM2-1
60475: PPUSH
60476: CALL_OW 91
60480: GO 60498
// ForceSay ( temp_list [ 1 ] , D11-SomeF2-1 ) ;
60482: LD_VAR 0 2
60486: PUSH
60487: LD_INT 1
60489: ARRAY
60490: PPUSH
60491: LD_STRING D11-SomeF2-1
60493: PPUSH
60494: CALL_OW 91
// end ; ForceSay ( Heike , D11-H-1 ) ;
60498: LD_EXP 7
60502: PPUSH
60503: LD_STRING D11-H-1
60505: PPUSH
60506: CALL_OW 91
// gensher_accused_freelancers = true ;
60510: LD_ADDR_EXP 107
60514: PUSH
60515: LD_INT 1
60517: ST_TO_ADDR
// end else
60518: GO 60671
// begin temp_list = UnitFilter ( [ Olaf , Oswald , Suze ] , [ f_alive ] ) ;
60520: LD_ADDR_VAR 0 2
60524: PUSH
60525: LD_EXP 8
60529: PUSH
60530: LD_EXP 10
60534: PUSH
60535: LD_EXP 13
60539: PUSH
60540: EMPTY
60541: LIST
60542: LIST
60543: LIST
60544: PPUSH
60545: LD_INT 51
60547: PUSH
60548: EMPTY
60549: LIST
60550: PPUSH
60551: CALL_OW 72
60555: ST_TO_ADDR
// if temp_list > 0 then
60556: LD_VAR 0 2
60560: PUSH
60561: LD_INT 0
60563: GREATER
60564: IFFALSE 60671
// begin i = temp_list [ Rand ( 1 , temp_list ) ] ;
60566: LD_ADDR_VAR 0 1
60570: PUSH
60571: LD_VAR 0 2
60575: PUSH
60576: LD_INT 1
60578: PPUSH
60579: LD_VAR 0 2
60583: PPUSH
60584: CALL_OW 12
60588: ARRAY
60589: ST_TO_ADDR
// case i of Olaf :
60590: LD_VAR 0 1
60594: PUSH
60595: LD_EXP 8
60599: DOUBLE
60600: EQUAL
60601: IFTRUE 60605
60603: GO 60620
60605: POP
// ForceSay ( i , D11-Ola-1 ) ; Oswald :
60606: LD_VAR 0 1
60610: PPUSH
60611: LD_STRING D11-Ola-1
60613: PPUSH
60614: CALL_OW 91
60618: GO 60671
60620: LD_EXP 10
60624: DOUBLE
60625: EQUAL
60626: IFTRUE 60630
60628: GO 60645
60630: POP
// ForceSay ( i , D11-Os-1 ) ; Suze :
60631: LD_VAR 0 1
60635: PPUSH
60636: LD_STRING D11-Os-1
60638: PPUSH
60639: CALL_OW 91
60643: GO 60671
60645: LD_EXP 13
60649: DOUBLE
60650: EQUAL
60651: IFTRUE 60655
60653: GO 60670
60655: POP
// ForceSay ( i , D11-Su-2 ) ; end ;
60656: LD_VAR 0 1
60660: PPUSH
60661: LD_STRING D11-Su-2
60663: PPUSH
60664: CALL_OW 91
60668: GO 60671
60670: POP
// end ; end ; ForceSay ( Heike , D11-H-2 ) ;
60671: LD_EXP 7
60675: PPUSH
60676: LD_STRING D11-H-2
60678: PPUSH
60679: CALL_OW 91
// DialogueOff ;
60683: CALL_OW 7
// end ; if upf_attack_status = 1 and am_scientists_escape_status = 2 then
60687: LD_EXP 118
60691: PUSH
60692: LD_INT 1
60694: EQUAL
60695: PUSH
60696: LD_EXP 111
60700: PUSH
60701: LD_INT 2
60703: EQUAL
60704: AND
60705: IFFALSE 60728
// begin wait ( 0 0$0.2 ) ;
60707: LD_INT 7
60709: PPUSH
60710: CALL_OW 67
// ChangeMissionObjectives ( MSurviveIfFast ) ;
60714: LD_STRING MSurviveIfFast
60716: PPUSH
60717: CALL_OW 337
// wait ( 1 1$40 ) ;
60721: LD_INT 3500
60723: PPUSH
60724: CALL_OW 67
// end ; if upf_attack_status = 6 then
60728: LD_EXP 118
60732: PUSH
60733: LD_INT 6
60735: EQUAL
60736: IFFALSE 60740
// exit ;
60738: GO 61049
// do_enable := upf_attack_status = 1 ;
60740: LD_ADDR_VAR 0 5
60744: PUSH
60745: LD_EXP 118
60749: PUSH
60750: LD_INT 1
60752: EQUAL
60753: ST_TO_ADDR
// upf_attack_status = upf_attack_status + 1 ;
60754: LD_ADDR_EXP 118
60758: PUSH
60759: LD_EXP 118
60763: PUSH
60764: LD_INT 1
60766: PLUS
60767: ST_TO_ADDR
// wait ( 0 0$3 ) ;
60768: LD_INT 105
60770: PPUSH
60771: CALL_OW 67
// if upf_attack_status = 6 then
60775: LD_EXP 118
60779: PUSH
60780: LD_INT 6
60782: EQUAL
60783: IFFALSE 60787
// exit ;
60785: GO 61049
// while UnitFilter ( upf_soldiers_west ^ upf_soldiers_east ^ upf_scientists_west ^ upf_scientists_east , [ f_not , [ f_placed ] ] ) > 0 do
60787: LD_EXP 121
60791: PUSH
60792: LD_EXP 122
60796: ADD
60797: PUSH
60798: LD_EXP 129
60802: ADD
60803: PUSH
60804: LD_EXP 130
60808: ADD
60809: PPUSH
60810: LD_INT 3
60812: PUSH
60813: LD_INT 52
60815: PUSH
60816: EMPTY
60817: LIST
60818: PUSH
60819: EMPTY
60820: LIST
60821: LIST
60822: PPUSH
60823: CALL_OW 72
60827: PUSH
60828: LD_INT 0
60830: GREATER
60831: IFFALSE 61042
// begin for i in UnitFilter ( upf_soldiers_west , [ f_not , [ f_placed ] ] ) do
60833: LD_ADDR_VAR 0 1
60837: PUSH
60838: LD_EXP 121
60842: PPUSH
60843: LD_INT 3
60845: PUSH
60846: LD_INT 52
60848: PUSH
60849: EMPTY
60850: LIST
60851: PUSH
60852: EMPTY
60853: LIST
60854: LIST
60855: PPUSH
60856: CALL_OW 72
60860: PUSH
60861: FOR_IN
60862: IFFALSE 60881
// PlaceUnitArea ( i , upf_enter_north_west , false ) ;
60864: LD_VAR 0 1
60868: PPUSH
60869: LD_INT 15
60871: PPUSH
60872: LD_INT 0
60874: PPUSH
60875: CALL_OW 49
60879: GO 60861
60881: POP
60882: POP
// for i in UnitFilter ( upf_soldiers_east , [ f_not , [ f_placed ] ] ) do
60883: LD_ADDR_VAR 0 1
60887: PUSH
60888: LD_EXP 122
60892: PPUSH
60893: LD_INT 3
60895: PUSH
60896: LD_INT 52
60898: PUSH
60899: EMPTY
60900: LIST
60901: PUSH
60902: EMPTY
60903: LIST
60904: LIST
60905: PPUSH
60906: CALL_OW 72
60910: PUSH
60911: FOR_IN
60912: IFFALSE 60931
// PlaceUnitArea ( i , upf_enter_north_east , false ) ;
60914: LD_VAR 0 1
60918: PPUSH
60919: LD_INT 14
60921: PPUSH
60922: LD_INT 0
60924: PPUSH
60925: CALL_OW 49
60929: GO 60911
60931: POP
60932: POP
// for i in UnitFilter ( upf_scientists_west , [ f_not , [ f_placed ] ] ) do
60933: LD_ADDR_VAR 0 1
60937: PUSH
60938: LD_EXP 129
60942: PPUSH
60943: LD_INT 3
60945: PUSH
60946: LD_INT 52
60948: PUSH
60949: EMPTY
60950: LIST
60951: PUSH
60952: EMPTY
60953: LIST
60954: LIST
60955: PPUSH
60956: CALL_OW 72
60960: PUSH
60961: FOR_IN
60962: IFFALSE 60981
// PlaceUnitArea ( i , upf_enter_north_west , false ) ;
60964: LD_VAR 0 1
60968: PPUSH
60969: LD_INT 15
60971: PPUSH
60972: LD_INT 0
60974: PPUSH
60975: CALL_OW 49
60979: GO 60961
60981: POP
60982: POP
// for i in UnitFilter ( upf_scientists_east , [ f_not , [ f_placed ] ] ) do
60983: LD_ADDR_VAR 0 1
60987: PUSH
60988: LD_EXP 130
60992: PPUSH
60993: LD_INT 3
60995: PUSH
60996: LD_INT 52
60998: PUSH
60999: EMPTY
61000: LIST
61001: PUSH
61002: EMPTY
61003: LIST
61004: LIST
61005: PPUSH
61006: CALL_OW 72
61010: PUSH
61011: FOR_IN
61012: IFFALSE 61031
// PlaceUnitArea ( i , upf_enter_north_east , false ) ;
61014: LD_VAR 0 1
61018: PPUSH
61019: LD_INT 14
61021: PPUSH
61022: LD_INT 0
61024: PPUSH
61025: CALL_OW 49
61029: GO 61011
61031: POP
61032: POP
// wait ( 0 0$1 ) ;
61033: LD_INT 35
61035: PPUSH
61036: CALL_OW 67
// end ;
61040: GO 60787
// if do_enable then
61042: LD_VAR 0 5
61046: IFFALSE 61049
// enable ;
61048: ENABLE
// end ;
61049: PPOPN 5
61051: END
// every 0 0$1 + 0 0$0.8 trigger upf_start_mineclearing do var i , minehex_soldier_list , hex , engineers_list , engineer_hex_map , engineer_time_map , working ; var temp_list ;
61052: LD_EXP 133
61056: IFFALSE 62242
61058: GO 61060
61060: DISABLE
61061: LD_INT 0
61063: PPUSH
61064: PPUSH
61065: PPUSH
61066: PPUSH
61067: PPUSH
61068: PPUSH
61069: PPUSH
61070: PPUSH
// begin minehex_soldier_list = [ ] ;
61071: LD_ADDR_VAR 0 2
61075: PUSH
61076: EMPTY
61077: ST_TO_ADDR
// engineer_hex_map = [ ] ;
61078: LD_ADDR_VAR 0 5
61082: PUSH
61083: EMPTY
61084: ST_TO_ADDR
// engineer_time_map = [ ] ;
61085: LD_ADDR_VAR 0 6
61089: PUSH
61090: EMPTY
61091: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_class , class_soldier ] ] ) do
61092: LD_ADDR_VAR 0 1
61096: PUSH
61097: LD_INT 22
61099: PUSH
61100: LD_EXP 2
61104: PUSH
61105: EMPTY
61106: LIST
61107: LIST
61108: PUSH
61109: LD_INT 25
61111: PUSH
61112: LD_INT 1
61114: PUSH
61115: EMPTY
61116: LIST
61117: LIST
61118: PUSH
61119: EMPTY
61120: LIST
61121: LIST
61122: PPUSH
61123: CALL_OW 69
61127: PUSH
61128: FOR_IN
61129: IFFALSE 61254
// begin hex = MineOfUnit ( i ) ;
61131: LD_ADDR_VAR 0 3
61135: PUSH
61136: LD_VAR 0 1
61140: PPUSH
61141: CALL_OW 459
61145: ST_TO_ADDR
// if hex > 0 then
61146: LD_VAR 0 3
61150: PUSH
61151: LD_INT 0
61153: GREATER
61154: IFFALSE 61252
// if InArea ( hex [ 1 ] , hex [ 2 ] , upf_mine_clearing_area ) or InArea ( hex [ 1 ] , hex [ 2 ] , control_vehicle_area ) then
61156: LD_VAR 0 3
61160: PUSH
61161: LD_INT 1
61163: ARRAY
61164: PPUSH
61165: LD_VAR 0 3
61169: PUSH
61170: LD_INT 2
61172: ARRAY
61173: PPUSH
61174: LD_INT 25
61176: PPUSH
61177: CALL_OW 309
61181: PUSH
61182: LD_VAR 0 3
61186: PUSH
61187: LD_INT 1
61189: ARRAY
61190: PPUSH
61191: LD_VAR 0 3
61195: PUSH
61196: LD_INT 2
61198: ARRAY
61199: PPUSH
61200: LD_INT 12
61202: PPUSH
61203: CALL_OW 309
61207: OR
61208: IFFALSE 61252
// begin minehex_soldier_list = minehex_soldier_list ^ [ [ hex [ 1 ] , hex [ 2 ] , i ] ] ;
61210: LD_ADDR_VAR 0 2
61214: PUSH
61215: LD_VAR 0 2
61219: PUSH
61220: LD_VAR 0 3
61224: PUSH
61225: LD_INT 1
61227: ARRAY
61228: PUSH
61229: LD_VAR 0 3
61233: PUSH
61234: LD_INT 2
61236: ARRAY
61237: PUSH
61238: LD_VAR 0 1
61242: PUSH
61243: EMPTY
61244: LIST
61245: LIST
61246: LIST
61247: PUSH
61248: EMPTY
61249: LIST
61250: ADD
61251: ST_TO_ADDR
// end ; end ;
61252: GO 61128
61254: POP
61255: POP
// if minehex_soldier_list > 0 then
61256: LD_VAR 0 2
61260: PUSH
61261: LD_INT 0
61263: GREATER
61264: IFFALSE 62167
// begin engineers_list = CreateUnitsWithClass ( 3 , class_engineer , upf ) ;
61266: LD_ADDR_VAR 0 4
61270: PUSH
61271: LD_INT 3
61273: PPUSH
61274: LD_INT 2
61276: PPUSH
61277: LD_EXP 6
61281: PPUSH
61282: CALL 9322 0 3
61286: ST_TO_ADDR
// for i in engineers_list do
61287: LD_ADDR_VAR 0 1
61291: PUSH
61292: LD_VAR 0 4
61296: PUSH
61297: FOR_IN
61298: IFFALSE 61393
// begin SetDir ( i , [ 0 , 5 ] [ Rand ( 1 , 2 ) ] ) ;
61300: LD_VAR 0 1
61304: PPUSH
61305: LD_INT 0
61307: PUSH
61308: LD_INT 5
61310: PUSH
61311: EMPTY
61312: LIST
61313: LIST
61314: PUSH
61315: LD_INT 1
61317: PPUSH
61318: LD_INT 2
61320: PPUSH
61321: CALL_OW 12
61325: ARRAY
61326: PPUSH
61327: CALL_OW 233
// PlaceUnitArea ( i , enter_area_south , false ) ;
61331: LD_VAR 0 1
61335: PPUSH
61336: LD_INT 10
61338: PPUSH
61339: LD_INT 0
61341: PPUSH
61342: CALL_OW 49
// engineer_hex_map = Replace ( engineer_hex_map , i , [ ] ) ;
61346: LD_ADDR_VAR 0 5
61350: PUSH
61351: LD_VAR 0 5
61355: PPUSH
61356: LD_VAR 0 1
61360: PPUSH
61361: EMPTY
61362: PPUSH
61363: CALL_OW 1
61367: ST_TO_ADDR
// engineer_time_map = Replace ( engineer_time_map , i , 0 0$0 ) ;
61368: LD_ADDR_VAR 0 6
61372: PUSH
61373: LD_VAR 0 6
61377: PPUSH
61378: LD_VAR 0 1
61382: PPUSH
61383: LD_INT 0
61385: PPUSH
61386: CALL_OW 1
61390: ST_TO_ADDR
// end ;
61391: GO 61297
61393: POP
61394: POP
// repeat wait ( 0 0$0.5 ) ;
61395: LD_INT 18
61397: PPUSH
61398: CALL_OW 67
// working = false ;
61402: LD_ADDR_VAR 0 7
61406: PUSH
61407: LD_INT 0
61409: ST_TO_ADDR
// for i in engineers_list do
61410: LD_ADDR_VAR 0 1
61414: PUSH
61415: LD_VAR 0 4
61419: PUSH
61420: FOR_IN
61421: IFFALSE 62016
// begin if not IsLive ( i ) then
61423: LD_VAR 0 1
61427: PPUSH
61428: CALL_OW 300
61432: NOT
61433: IFFALSE 61494
// begin engineers_list = engineers_list diff i ;
61435: LD_ADDR_VAR 0 4
61439: PUSH
61440: LD_VAR 0 4
61444: PUSH
61445: LD_VAR 0 1
61449: DIFF
61450: ST_TO_ADDR
// if engineer_hex_map [ i ] > 0 then
61451: LD_VAR 0 5
61455: PUSH
61456: LD_VAR 0 1
61460: ARRAY
61461: PUSH
61462: LD_INT 0
61464: GREATER
61465: IFFALSE 61492
// minehex_soldier_list = minehex_soldier_list ^ [ engineer_hex_map [ i ] ] ;
61467: LD_ADDR_VAR 0 2
61471: PUSH
61472: LD_VAR 0 2
61476: PUSH
61477: LD_VAR 0 5
61481: PUSH
61482: LD_VAR 0 1
61486: ARRAY
61487: PUSH
61488: EMPTY
61489: LIST
61490: ADD
61491: ST_TO_ADDR
// continue ;
61492: GO 61420
// end ; if engineer_hex_map [ i ] = 0 then
61494: LD_VAR 0 5
61498: PUSH
61499: LD_VAR 0 1
61503: ARRAY
61504: PUSH
61505: LD_INT 0
61507: EQUAL
61508: IFFALSE 61661
// begin if minehex_soldier_list = 0 then
61510: LD_VAR 0 2
61514: PUSH
61515: LD_INT 0
61517: EQUAL
61518: IFFALSE 61534
// begin ComMoveToArea ( i , enter_area_south ) ;
61520: LD_VAR 0 1
61524: PPUSH
61525: LD_INT 10
61527: PPUSH
61528: CALL_OW 113
// continue ;
61532: GO 61420
// end ; temp_list = [ ] ;
61534: LD_ADDR_VAR 0 8
61538: PUSH
61539: EMPTY
61540: ST_TO_ADDR
// for hex in minehex_soldier_list do
61541: LD_ADDR_VAR 0 3
61545: PUSH
61546: LD_VAR 0 2
61550: PUSH
61551: FOR_IN
61552: IFFALSE 61595
// temp_list = temp_list ^ GetDistUnitXY ( i , hex [ 1 ] , hex [ 2 ] ) ;
61554: LD_ADDR_VAR 0 8
61558: PUSH
61559: LD_VAR 0 8
61563: PUSH
61564: LD_VAR 0 1
61568: PPUSH
61569: LD_VAR 0 3
61573: PUSH
61574: LD_INT 1
61576: ARRAY
61577: PPUSH
61578: LD_VAR 0 3
61582: PUSH
61583: LD_INT 2
61585: ARRAY
61586: PPUSH
61587: CALL_OW 297
61591: ADD
61592: ST_TO_ADDR
61593: GO 61551
61595: POP
61596: POP
// hex = WorstFromListByList ( minehex_soldier_list , temp_list ) ;
61597: LD_ADDR_VAR 0 3
61601: PUSH
61602: LD_VAR 0 2
61606: PPUSH
61607: LD_VAR 0 8
61611: PPUSH
61612: CALL_OW 78
61616: ST_TO_ADDR
// minehex_soldier_list = minehex_soldier_list diff [ hex ] ;
61617: LD_ADDR_VAR 0 2
61621: PUSH
61622: LD_VAR 0 2
61626: PUSH
61627: LD_VAR 0 3
61631: PUSH
61632: EMPTY
61633: LIST
61634: DIFF
61635: ST_TO_ADDR
// engineer_hex_map = Replace ( engineer_hex_map , i , hex ) ;
61636: LD_ADDR_VAR 0 5
61640: PUSH
61641: LD_VAR 0 5
61645: PPUSH
61646: LD_VAR 0 1
61650: PPUSH
61651: LD_VAR 0 3
61655: PPUSH
61656: CALL_OW 1
61660: ST_TO_ADDR
// end ; working = true ;
61661: LD_ADDR_VAR 0 7
61665: PUSH
61666: LD_INT 1
61668: ST_TO_ADDR
// hex = engineer_hex_map [ i ] ;
61669: LD_ADDR_VAR 0 3
61673: PUSH
61674: LD_VAR 0 5
61678: PUSH
61679: LD_VAR 0 1
61683: ARRAY
61684: ST_TO_ADDR
// if HexInfo ( hex [ 1 ] , hex [ 2 ] ) <> i then
61685: LD_VAR 0 3
61689: PUSH
61690: LD_INT 1
61692: ARRAY
61693: PPUSH
61694: LD_VAR 0 3
61698: PUSH
61699: LD_INT 2
61701: ARRAY
61702: PPUSH
61703: CALL_OW 428
61707: PUSH
61708: LD_VAR 0 1
61712: NONEQUAL
61713: IFFALSE 61766
// AI_GetAwayFromXY ( HexInfo ( hex [ 1 ] , hex [ 2 ] ) , hex [ 1 ] , hex [ 2 ] , 4 , false ) ;
61715: LD_VAR 0 3
61719: PUSH
61720: LD_INT 1
61722: ARRAY
61723: PPUSH
61724: LD_VAR 0 3
61728: PUSH
61729: LD_INT 2
61731: ARRAY
61732: PPUSH
61733: CALL_OW 428
61737: PPUSH
61738: LD_VAR 0 3
61742: PUSH
61743: LD_INT 1
61745: ARRAY
61746: PPUSH
61747: LD_VAR 0 3
61751: PUSH
61752: LD_INT 2
61754: ARRAY
61755: PPUSH
61756: LD_INT 4
61758: PPUSH
61759: LD_INT 0
61761: PPUSH
61762: CALL 11210 0 5
// if not IsAt ( i , hex [ 1 ] , hex [ 2 ] ) then
61766: LD_VAR 0 1
61770: PPUSH
61771: LD_VAR 0 3
61775: PUSH
61776: LD_INT 1
61778: ARRAY
61779: PPUSH
61780: LD_VAR 0 3
61784: PUSH
61785: LD_INT 2
61787: ARRAY
61788: PPUSH
61789: CALL_OW 307
61793: NOT
61794: IFFALSE 61834
// begin ComMoveXY ( i , hex [ 1 ] , hex [ 2 ] ) ;
61796: LD_VAR 0 1
61800: PPUSH
61801: LD_VAR 0 3
61805: PUSH
61806: LD_INT 1
61808: ARRAY
61809: PPUSH
61810: LD_VAR 0 3
61814: PUSH
61815: LD_INT 2
61817: ARRAY
61818: PPUSH
61819: CALL_OW 111
// AddComHold ( i ) ;
61823: LD_VAR 0 1
61827: PPUSH
61828: CALL_OW 200
// end else
61832: GO 62014
// if engineer_time_map [ i ] < 0 0$1 then
61834: LD_VAR 0 6
61838: PUSH
61839: LD_VAR 0 1
61843: ARRAY
61844: PUSH
61845: LD_INT 35
61847: LESS
61848: IFFALSE 61887
// begin engineer_time_map = Replace ( engineer_time_map , i , engineer_time_map [ i ] + 0 0$0.5 ) ;
61850: LD_ADDR_VAR 0 6
61854: PUSH
61855: LD_VAR 0 6
61859: PPUSH
61860: LD_VAR 0 1
61864: PPUSH
61865: LD_VAR 0 6
61869: PUSH
61870: LD_VAR 0 1
61874: ARRAY
61875: PUSH
61876: LD_INT 18
61878: PLUS
61879: PPUSH
61880: CALL_OW 1
61884: ST_TO_ADDR
// end else
61885: GO 62014
// begin temp_list = MineOfUnit ( hex [ 3 ] ) ;
61887: LD_ADDR_VAR 0 8
61891: PUSH
61892: LD_VAR 0 3
61896: PUSH
61897: LD_INT 3
61899: ARRAY
61900: PPUSH
61901: CALL_OW 459
61905: ST_TO_ADDR
// if temp_list > 0 then
61906: LD_VAR 0 8
61910: PUSH
61911: LD_INT 0
61913: GREATER
61914: IFFALSE 61969
// if temp_list [ 1 ] = hex [ 1 ] and temp_list [ 2 ] = hex [ 2 ] then
61916: LD_VAR 0 8
61920: PUSH
61921: LD_INT 1
61923: ARRAY
61924: PUSH
61925: LD_VAR 0 3
61929: PUSH
61930: LD_INT 1
61932: ARRAY
61933: EQUAL
61934: PUSH
61935: LD_VAR 0 8
61939: PUSH
61940: LD_INT 2
61942: ARRAY
61943: PUSH
61944: LD_VAR 0 3
61948: PUSH
61949: LD_INT 2
61951: ARRAY
61952: EQUAL
61953: AND
61954: IFFALSE 61969
// RemoveMineOfUnit ( hex [ 3 ] ) ;
61956: LD_VAR 0 3
61960: PUSH
61961: LD_INT 3
61963: ARRAY
61964: PPUSH
61965: CALL_OW 460
// engineer_hex_map = Replace ( engineer_hex_map , i , [ ] ) ;
61969: LD_ADDR_VAR 0 5
61973: PUSH
61974: LD_VAR 0 5
61978: PPUSH
61979: LD_VAR 0 1
61983: PPUSH
61984: EMPTY
61985: PPUSH
61986: CALL_OW 1
61990: ST_TO_ADDR
// engineer_time_map = Replace ( engineer_time_map , i , 0 0$0 ) ;
61991: LD_ADDR_VAR 0 6
61995: PUSH
61996: LD_VAR 0 6
62000: PPUSH
62001: LD_VAR 0 1
62005: PPUSH
62006: LD_INT 0
62008: PPUSH
62009: CALL_OW 1
62013: ST_TO_ADDR
// end ; end ;
62014: GO 61420
62016: POP
62017: POP
// until not working or engineers_list = 0 ;
62018: LD_VAR 0 7
62022: NOT
62023: PUSH
62024: LD_VAR 0 4
62028: PUSH
62029: LD_INT 0
62031: EQUAL
62032: OR
62033: IFFALSE 61395
// for i in upf_vehicles_control do
62035: LD_ADDR_VAR 0 1
62039: PUSH
62040: LD_EXP 123
62044: PUSH
62045: FOR_IN
62046: IFFALSE 62077
// if not IsInArea ( i , control_vehicle_area ) then
62048: LD_VAR 0 1
62052: PPUSH
62053: LD_INT 12
62055: PPUSH
62056: CALL_OW 308
62060: NOT
62061: IFFALSE 62075
// ComMoveToArea ( i , control_vehicle_area ) ;
62063: LD_VAR 0 1
62067: PPUSH
62068: LD_INT 12
62070: PPUSH
62071: CALL_OW 113
62075: GO 62045
62077: POP
62078: POP
// repeat wait ( 0 0$0.7 ) ;
62079: LD_INT 24
62081: PPUSH
62082: CALL_OW 67
// for i in engineers_list do
62086: LD_ADDR_VAR 0 1
62090: PUSH
62091: LD_VAR 0 4
62095: PUSH
62096: FOR_IN
62097: IFFALSE 62155
// if not IsInArea ( i , enter_area_south ) then
62099: LD_VAR 0 1
62103: PPUSH
62104: LD_INT 10
62106: PPUSH
62107: CALL_OW 308
62111: NOT
62112: IFFALSE 62128
// ComMoveToArea ( i , enter_area_south ) else
62114: LD_VAR 0 1
62118: PPUSH
62119: LD_INT 10
62121: PPUSH
62122: CALL_OW 113
62126: GO 62153
// begin engineers_list = engineers_list diff i ;
62128: LD_ADDR_VAR 0 4
62132: PUSH
62133: LD_VAR 0 4
62137: PUSH
62138: LD_VAR 0 1
62142: DIFF
62143: ST_TO_ADDR
// DestroyUnit ( i ) ;
62144: LD_VAR 0 1
62148: PPUSH
62149: CALL_OW 65
// end ;
62153: GO 62096
62155: POP
62156: POP
// until engineers_list = 0 ;
62157: LD_VAR 0 4
62161: PUSH
62162: LD_INT 0
62164: EQUAL
62165: IFFALSE 62079
// end ; while upf_attack_status < 3 do
62167: LD_EXP 118
62171: PUSH
62172: LD_INT 3
62174: LESS
62175: IFFALSE 62186
// wait ( 0 0$1 ) ;
62177: LD_INT 35
62179: PPUSH
62180: CALL_OW 67
62184: GO 62167
// for i in UnitFilter ( upf_gensher_guards_vehicles ^ gensher_vehicle , [ f_not , [ f_placed ] ] ) do
62186: LD_ADDR_VAR 0 1
62190: PUSH
62191: LD_EXP 125
62195: PUSH
62196: LD_EXP 128
62200: ADD
62201: PPUSH
62202: LD_INT 3
62204: PUSH
62205: LD_INT 52
62207: PUSH
62208: EMPTY
62209: LIST
62210: PUSH
62211: EMPTY
62212: LIST
62213: LIST
62214: PPUSH
62215: CALL_OW 72
62219: PUSH
62220: FOR_IN
62221: IFFALSE 62240
// PlaceUnitArea ( i , enter_area_south , false ) ;
62223: LD_VAR 0 1
62227: PPUSH
62228: LD_INT 10
62230: PPUSH
62231: LD_INT 0
62233: PPUSH
62234: CALL_OW 49
62238: GO 62220
62240: POP
62241: POP
// end ;
62242: PPOPN 8
62244: END
// every 0 0$1 + 0 0$0.3 trigger upf_attack_status = 1 do var temp_list , i , temp_list_2 , num , humans_list , vehicles_list , under_attack ; var gensher_position , guards_positions , base ;
62245: LD_EXP 118
62249: PUSH
62250: LD_INT 1
62252: EQUAL
62253: IFFALSE 63108
62255: GO 62257
62257: DISABLE
62258: LD_INT 0
62260: PPUSH
62261: PPUSH
62262: PPUSH
62263: PPUSH
62264: PPUSH
62265: PPUSH
62266: PPUSH
62267: PPUSH
62268: PPUSH
62269: PPUSH
// begin gensher_position = [ 153 , 106 ] ;
62270: LD_ADDR_VAR 0 8
62274: PUSH
62275: LD_INT 153
62277: PUSH
62278: LD_INT 106
62280: PUSH
62281: EMPTY
62282: LIST
62283: LIST
62284: ST_TO_ADDR
// guards_positions = [ [ 151 , 108 ] , [ 154 , 113 ] ] ;
62285: LD_ADDR_VAR 0 9
62289: PUSH
62290: LD_INT 151
62292: PUSH
62293: LD_INT 108
62295: PUSH
62296: EMPTY
62297: LIST
62298: LIST
62299: PUSH
62300: LD_INT 154
62302: PUSH
62303: LD_INT 113
62305: PUSH
62306: EMPTY
62307: LIST
62308: LIST
62309: PUSH
62310: EMPTY
62311: LIST
62312: LIST
62313: ST_TO_ADDR
// base = 3 ;
62314: LD_ADDR_VAR 0 10
62318: PUSH
62319: LD_INT 3
62321: ST_TO_ADDR
// repeat wait ( 0 0$0.7 ) ;
62322: LD_INT 24
62324: PPUSH
62325: CALL_OW 67
// under_attack = BaseUnderAttack ( base , - 1 ) ;
62329: LD_ADDR_VAR 0 7
62333: PUSH
62334: LD_VAR 0 10
62338: PPUSH
62339: LD_INT 1
62341: NEG
62342: PPUSH
62343: CALL 28793 0 2
62347: ST_TO_ADDR
// humans_list = UnitFilter ( Gensher ^ upf_gensher_guards , [ f_alive ] ) ;
62348: LD_ADDR_VAR 0 5
62352: PUSH
62353: LD_EXP 21
62357: PUSH
62358: LD_EXP 119
62362: ADD
62363: PPUSH
62364: LD_INT 51
62366: PUSH
62367: EMPTY
62368: LIST
62369: PPUSH
62370: CALL_OW 72
62374: ST_TO_ADDR
// vehicles_list = UnitFilter ( gensher_vehicle ^ upf_gensher_guards_vehicles , [ f_alive ] ) ;
62375: LD_ADDR_VAR 0 6
62379: PUSH
62380: LD_EXP 128
62384: PUSH
62385: LD_EXP 125
62389: ADD
62390: PPUSH
62391: LD_INT 51
62393: PUSH
62394: EMPTY
62395: LIST
62396: PPUSH
62397: CALL_OW 72
62401: ST_TO_ADDR
// if not under_attack and upf_attack_status <> 6 then
62402: LD_VAR 0 7
62406: NOT
62407: PUSH
62408: LD_EXP 118
62412: PUSH
62413: LD_INT 6
62415: NONEQUAL
62416: AND
62417: IFFALSE 62568
// begin temp_list = [ ] ;
62419: LD_ADDR_VAR 0 1
62423: PUSH
62424: EMPTY
62425: ST_TO_ADDR
// for i in vehicles_list do
62426: LD_ADDR_VAR 0 2
62430: PUSH
62431: LD_VAR 0 6
62435: PUSH
62436: FOR_IN
62437: IFFALSE 62472
// if GetLives ( i ) < 1000 then
62439: LD_VAR 0 2
62443: PPUSH
62444: CALL_OW 256
62448: PUSH
62449: LD_INT 1000
62451: LESS
62452: IFFALSE 62470
// temp_list = temp_list ^ i ;
62454: LD_ADDR_VAR 0 1
62458: PUSH
62459: LD_VAR 0 1
62463: PUSH
62464: LD_VAR 0 2
62468: ADD
62469: ST_TO_ADDR
62470: GO 62436
62472: POP
62473: POP
// temp_list_2 = UnitFilter ( humans_list , [ f_class , class_mechanic ] ) ;
62474: LD_ADDR_VAR 0 3
62478: PUSH
62479: LD_VAR 0 5
62483: PPUSH
62484: LD_INT 25
62486: PUSH
62487: LD_INT 3
62489: PUSH
62490: EMPTY
62491: LIST
62492: LIST
62493: PPUSH
62494: CALL_OW 72
62498: ST_TO_ADDR
// if temp_list > 0 and temp_list_2 > 0 then
62499: LD_VAR 0 1
62503: PUSH
62504: LD_INT 0
62506: GREATER
62507: PUSH
62508: LD_VAR 0 3
62512: PUSH
62513: LD_INT 0
62515: GREATER
62516: AND
62517: IFFALSE 62568
// begin temp_list_2 = GetHumansOutOfUnits ( temp_list_2 ) ;
62519: LD_ADDR_VAR 0 3
62523: PUSH
62524: LD_VAR 0 3
62528: PPUSH
62529: CALL 28688 0 1
62533: ST_TO_ADDR
// ComRepairVehicle ( temp_list_2 , temp_list [ 1 ] ) ;
62534: LD_VAR 0 3
62538: PPUSH
62539: LD_VAR 0 1
62543: PUSH
62544: LD_INT 1
62546: ARRAY
62547: PPUSH
62548: CALL_OW 129
// humans_list = humans_list diff temp_list_2 ;
62552: LD_ADDR_VAR 0 5
62556: PUSH
62557: LD_VAR 0 5
62561: PUSH
62562: LD_VAR 0 3
62566: DIFF
62567: ST_TO_ADDR
// end ; end ; num = 0 ;
62568: LD_ADDR_VAR 0 4
62572: PUSH
62573: LD_INT 0
62575: ST_TO_ADDR
// vehicles_list = UnitFilter ( vehicles_list , [ f_ok ] ) ;
62576: LD_ADDR_VAR 0 6
62580: PUSH
62581: LD_VAR 0 6
62585: PPUSH
62586: LD_INT 50
62588: PUSH
62589: EMPTY
62590: LIST
62591: PPUSH
62592: CALL_OW 72
62596: ST_TO_ADDR
// for i = 1 to humans_list do
62597: LD_ADDR_VAR 0 2
62601: PUSH
62602: DOUBLE
62603: LD_INT 1
62605: DEC
62606: ST_TO_ADDR
62607: LD_VAR 0 5
62611: PUSH
62612: FOR_TO
62613: IFFALSE 63069
// begin if IsInUnit ( humans_list [ i ] ) = 0 and vehicles_list > 0 then
62615: LD_VAR 0 5
62619: PUSH
62620: LD_VAR 0 2
62624: ARRAY
62625: PPUSH
62626: CALL_OW 310
62630: PUSH
62631: LD_INT 0
62633: EQUAL
62634: PUSH
62635: LD_VAR 0 6
62639: PUSH
62640: LD_INT 0
62642: GREATER
62643: AND
62644: IFFALSE 62708
// begin ComEnterUnit ( humans_list [ i ] , vehicles_list [ 1 ] ) ;
62646: LD_VAR 0 5
62650: PUSH
62651: LD_VAR 0 2
62655: ARRAY
62656: PPUSH
62657: LD_VAR 0 6
62661: PUSH
62662: LD_INT 1
62664: ARRAY
62665: PPUSH
62666: CALL_OW 120
// ComExitVehicle ( UnitsInside ( vehicles_list [ 1 ] ) ) ;
62670: LD_VAR 0 6
62674: PUSH
62675: LD_INT 1
62677: ARRAY
62678: PPUSH
62679: CALL_OW 313
62683: PPUSH
62684: CALL_OW 121
// vehicles_list = Delete ( vehicles_list , 1 ) ;
62688: LD_ADDR_VAR 0 6
62692: PUSH
62693: LD_VAR 0 6
62697: PPUSH
62698: LD_INT 1
62700: PPUSH
62701: CALL_OW 3
62705: ST_TO_ADDR
// end else
62706: GO 63067
// begin vehicles_list = vehicles_list diff IsInUnit ( humans_list [ i ] ) ;
62708: LD_ADDR_VAR 0 6
62712: PUSH
62713: LD_VAR 0 6
62717: PUSH
62718: LD_VAR 0 5
62722: PUSH
62723: LD_VAR 0 2
62727: ARRAY
62728: PPUSH
62729: CALL_OW 310
62733: DIFF
62734: ST_TO_ADDR
// if not under_attack then
62735: LD_VAR 0 7
62739: NOT
62740: IFFALSE 63067
// begin if upf_attack_status <> 6 then
62742: LD_EXP 118
62746: PUSH
62747: LD_INT 6
62749: NONEQUAL
62750: IFFALSE 62956
// begin if humans_list [ i ] = Gensher then
62752: LD_VAR 0 5
62756: PUSH
62757: LD_VAR 0 2
62761: ARRAY
62762: PUSH
62763: LD_EXP 21
62767: EQUAL
62768: IFFALSE 62844
// begin if GetDistUnitXY ( humans_list [ i ] , gensher_position [ 1 ] , gensher_position [ 2 ] ) > 1 then
62770: LD_VAR 0 5
62774: PUSH
62775: LD_VAR 0 2
62779: ARRAY
62780: PPUSH
62781: LD_VAR 0 8
62785: PUSH
62786: LD_INT 1
62788: ARRAY
62789: PPUSH
62790: LD_VAR 0 8
62794: PUSH
62795: LD_INT 2
62797: ARRAY
62798: PPUSH
62799: CALL_OW 297
62803: PUSH
62804: LD_INT 1
62806: GREATER
62807: IFFALSE 62842
// ComMoveXY ( humans_list [ i ] , gensher_position [ 1 ] , gensher_position [ 2 ] ) end else
62809: LD_VAR 0 5
62813: PUSH
62814: LD_VAR 0 2
62818: ARRAY
62819: PPUSH
62820: LD_VAR 0 8
62824: PUSH
62825: LD_INT 1
62827: ARRAY
62828: PPUSH
62829: LD_VAR 0 8
62833: PUSH
62834: LD_INT 2
62836: ARRAY
62837: PPUSH
62838: CALL_OW 111
62842: GO 62954
// begin num = num + 1 ;
62844: LD_ADDR_VAR 0 4
62848: PUSH
62849: LD_VAR 0 4
62853: PUSH
62854: LD_INT 1
62856: PLUS
62857: ST_TO_ADDR
// if GetDistUnitXY ( humans_list [ i ] , guards_positions [ num ] [ 1 ] , guards_positions [ num ] [ 2 ] ) > 1 then
62858: LD_VAR 0 5
62862: PUSH
62863: LD_VAR 0 2
62867: ARRAY
62868: PPUSH
62869: LD_VAR 0 9
62873: PUSH
62874: LD_VAR 0 4
62878: ARRAY
62879: PUSH
62880: LD_INT 1
62882: ARRAY
62883: PPUSH
62884: LD_VAR 0 9
62888: PUSH
62889: LD_VAR 0 4
62893: ARRAY
62894: PUSH
62895: LD_INT 2
62897: ARRAY
62898: PPUSH
62899: CALL_OW 297
62903: PUSH
62904: LD_INT 1
62906: GREATER
62907: IFFALSE 62954
// ComMoveXY ( humans_list [ i ] , guards_positions [ num ] [ 1 ] , guards_positions [ num ] [ 2 ] ) ;
62909: LD_VAR 0 5
62913: PUSH
62914: LD_VAR 0 2
62918: ARRAY
62919: PPUSH
62920: LD_VAR 0 9
62924: PUSH
62925: LD_VAR 0 4
62929: ARRAY
62930: PUSH
62931: LD_INT 1
62933: ARRAY
62934: PPUSH
62935: LD_VAR 0 9
62939: PUSH
62940: LD_VAR 0 4
62944: ARRAY
62945: PUSH
62946: LD_INT 2
62948: ARRAY
62949: PPUSH
62950: CALL_OW 111
// end ; end else
62954: GO 63067
// begin if not IsInArea ( humans_list [ i ] , enter_area_south ) then
62956: LD_VAR 0 5
62960: PUSH
62961: LD_VAR 0 2
62965: ARRAY
62966: PPUSH
62967: LD_INT 10
62969: PPUSH
62970: CALL_OW 308
62974: NOT
62975: IFFALSE 62997
// ComMoveToArea ( humans_list [ i ] , enter_area_south ) else
62977: LD_VAR 0 5
62981: PUSH
62982: LD_VAR 0 2
62986: ARRAY
62987: PPUSH
62988: LD_INT 10
62990: PPUSH
62991: CALL_OW 113
62995: GO 63067
// begin DestroyUnit ( IsInUnit ( humans_list [ i ] ) ) ;
62997: LD_VAR 0 5
63001: PUSH
63002: LD_VAR 0 2
63006: ARRAY
63007: PPUSH
63008: CALL_OW 310
63012: PPUSH
63013: CALL_OW 65
// if humans_list [ i ] = Gensher then
63017: LD_VAR 0 5
63021: PUSH
63022: LD_VAR 0 2
63026: ARRAY
63027: PUSH
63028: LD_EXP 21
63032: EQUAL
63033: IFFALSE 63052
// RemoveUnit ( humans_list [ i ] ) else
63035: LD_VAR 0 5
63039: PUSH
63040: LD_VAR 0 2
63044: ARRAY
63045: PPUSH
63046: CALL_OW 64
63050: GO 63067
// DestroyUnit ( humans_list [ i ] ) ;
63052: LD_VAR 0 5
63056: PUSH
63057: LD_VAR 0 2
63061: ARRAY
63062: PPUSH
63063: CALL_OW 65
// end ; end ; end ; end ; end ;
63067: GO 62612
63069: POP
63070: POP
// until upf_attack_status = 6 and UnitFilter ( Gensher ^ upf_gensher_guards , [ f_alive ] ) = 0 ;
63071: LD_EXP 118
63075: PUSH
63076: LD_INT 6
63078: EQUAL
63079: PUSH
63080: LD_EXP 21
63084: PUSH
63085: LD_EXP 119
63089: ADD
63090: PPUSH
63091: LD_INT 51
63093: PUSH
63094: EMPTY
63095: LIST
63096: PPUSH
63097: CALL_OW 72
63101: PUSH
63102: LD_INT 0
63104: EQUAL
63105: AND
63106: IFFALSE 62322
// end ;
63108: PPOPN 10
63110: END
// every 0 0$1 + 0 0$0.4 trigger upf_attack_status = 2 do var i , temp_list , turn , attacking_soldiers , attacking_scientists , temp_value , attack_hexes , temp_list_2 , attacking_units ; var x , y , k , temp_unit , un_list , active ; var retreated_vehicles , base , human_dist , vehicle_dist , side , make_reset , vehicle_attack_strategy ;
63111: LD_EXP 118
63115: PUSH
63116: LD_INT 2
63118: EQUAL
63119: IFFALSE 66127
63121: GO 63123
63123: DISABLE
63124: LD_INT 0
63126: PPUSH
63127: PPUSH
63128: PPUSH
63129: PPUSH
63130: PPUSH
63131: PPUSH
63132: PPUSH
63133: PPUSH
63134: PPUSH
63135: PPUSH
63136: PPUSH
63137: PPUSH
63138: PPUSH
63139: PPUSH
63140: PPUSH
63141: PPUSH
63142: PPUSH
63143: PPUSH
63144: PPUSH
63145: PPUSH
63146: PPUSH
63147: PPUSH
// begin base = 3 ;
63148: LD_ADDR_VAR 0 17
63152: PUSH
63153: LD_INT 3
63155: ST_TO_ADDR
// human_dist = 5 ;
63156: LD_ADDR_VAR 0 18
63160: PUSH
63161: LD_INT 5
63163: ST_TO_ADDR
// vehicle_dist = 6 ;
63164: LD_ADDR_VAR 0 19
63168: PUSH
63169: LD_INT 6
63171: ST_TO_ADDR
// side = upf ;
63172: LD_ADDR_VAR 0 20
63176: PUSH
63177: LD_EXP 6
63181: ST_TO_ADDR
// make_reset = false ;
63182: LD_ADDR_VAR 0 21
63186: PUSH
63187: LD_INT 0
63189: ST_TO_ADDR
// retreated_vehicles = [ ] ;
63190: LD_ADDR_VAR 0 16
63194: PUSH
63195: EMPTY
63196: ST_TO_ADDR
// for i in upf_soldiers_west ^ upf_soldiers_east ^ upf_scientists_west ^ upf_scientists_east ^ upf_vehicles_attack do
63197: LD_ADDR_VAR 0 1
63201: PUSH
63202: LD_EXP 121
63206: PUSH
63207: LD_EXP 122
63211: ADD
63212: PUSH
63213: LD_EXP 129
63217: ADD
63218: PUSH
63219: LD_EXP 130
63223: ADD
63224: PUSH
63225: LD_EXP 124
63229: ADD
63230: PUSH
63231: FOR_IN
63232: IFFALSE 63290
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , i , 1 ) ;
63234: LD_ADDR_VAR 0 2
63238: PUSH
63239: LD_EXP 74
63243: PUSH
63244: LD_VAR 0 17
63248: ARRAY
63249: PPUSH
63250: LD_VAR 0 1
63254: PPUSH
63255: LD_INT 1
63257: PPUSH
63258: CALL_OW 1
63262: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
63263: LD_ADDR_EXP 74
63267: PUSH
63268: LD_EXP 74
63272: PPUSH
63273: LD_VAR 0 17
63277: PPUSH
63278: LD_VAR 0 2
63282: PPUSH
63283: CALL_OW 1
63287: ST_TO_ADDR
// end ;
63288: GO 63231
63290: POP
63291: POP
// vehicle_attack_strategy = DetermineVehicleAttackStrategy ;
63292: LD_ADDR_VAR 0 22
63296: PUSH
63297: CALL 66493 0 0
63301: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
63302: LD_INT 35
63304: PPUSH
63305: CALL_OW 67
// if upf_attack_status = 6 then
63309: LD_EXP 118
63313: PUSH
63314: LD_INT 6
63316: EQUAL
63317: IFFALSE 63321
// exit ;
63319: GO 66127
// if upf_attack_status = 4 then
63321: LD_EXP 118
63325: PUSH
63326: LD_INT 4
63328: EQUAL
63329: IFFALSE 63333
// continue ;
63331: GO 63302
// if upf_attack_status = 5 and not make_reset then
63333: LD_EXP 118
63337: PUSH
63338: LD_INT 5
63340: EQUAL
63341: PUSH
63342: LD_VAR 0 21
63346: NOT
63347: AND
63348: IFFALSE 63470
// begin make_reset = true ;
63350: LD_ADDR_VAR 0 21
63354: PUSH
63355: LD_INT 1
63357: ST_TO_ADDR
// retreated_vehicles = [ ] ;
63358: LD_ADDR_VAR 0 16
63362: PUSH
63363: EMPTY
63364: ST_TO_ADDR
// for i in upf_soldiers_west ^ upf_soldiers_east ^ upf_scientists_west ^ upf_scientists_east ^ upf_vehicles_attack do
63365: LD_ADDR_VAR 0 1
63369: PUSH
63370: LD_EXP 121
63374: PUSH
63375: LD_EXP 122
63379: ADD
63380: PUSH
63381: LD_EXP 129
63385: ADD
63386: PUSH
63387: LD_EXP 130
63391: ADD
63392: PUSH
63393: LD_EXP 124
63397: ADD
63398: PUSH
63399: FOR_IN
63400: IFFALSE 63458
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , i , 1 ) ;
63402: LD_ADDR_VAR 0 2
63406: PUSH
63407: LD_EXP 74
63411: PUSH
63412: LD_VAR 0 17
63416: ARRAY
63417: PPUSH
63418: LD_VAR 0 1
63422: PPUSH
63423: LD_INT 1
63425: PPUSH
63426: CALL_OW 1
63430: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
63431: LD_ADDR_EXP 74
63435: PUSH
63436: LD_EXP 74
63440: PPUSH
63441: LD_VAR 0 17
63445: PPUSH
63446: LD_VAR 0 2
63450: PPUSH
63451: CALL_OW 1
63455: ST_TO_ADDR
// end ;
63456: GO 63399
63458: POP
63459: POP
// vehicle_attack_strategy = DetermineVehicleAttackStrategy ;
63460: LD_ADDR_VAR 0 22
63464: PUSH
63465: CALL 66493 0 0
63469: ST_TO_ADDR
// end ; temp_list = upf_soldiers_west ^ upf_soldiers_east ^ upf_scientists_west ^ upf_scientists_east ;
63470: LD_ADDR_VAR 0 2
63474: PUSH
63475: LD_EXP 121
63479: PUSH
63480: LD_EXP 122
63484: ADD
63485: PUSH
63486: LD_EXP 129
63490: ADD
63491: PUSH
63492: LD_EXP 130
63496: ADD
63497: ST_TO_ADDR
// if UnitFilter ( upf_vehicles_attack diff retreated_vehicles , [ f_ok ] ) = 0 and ( UnitFilter ( temp_list , [ f_alive ] ) = 0 or ( UnitFilter ( temp_list , [ f_ok ] ) = 0 and not Researched ( upf , tech_stimdrugs ) ) ) then
63498: LD_EXP 124
63502: PUSH
63503: LD_VAR 0 16
63507: DIFF
63508: PPUSH
63509: LD_INT 50
63511: PUSH
63512: EMPTY
63513: LIST
63514: PPUSH
63515: CALL_OW 72
63519: PUSH
63520: LD_INT 0
63522: EQUAL
63523: PUSH
63524: LD_VAR 0 2
63528: PPUSH
63529: LD_INT 51
63531: PUSH
63532: EMPTY
63533: LIST
63534: PPUSH
63535: CALL_OW 72
63539: PUSH
63540: LD_INT 0
63542: EQUAL
63543: PUSH
63544: LD_VAR 0 2
63548: PPUSH
63549: LD_INT 50
63551: PUSH
63552: EMPTY
63553: LIST
63554: PPUSH
63555: CALL_OW 72
63559: PUSH
63560: LD_INT 0
63562: EQUAL
63563: PUSH
63564: LD_EXP 6
63568: PPUSH
63569: LD_INT 5
63571: PPUSH
63572: CALL_OW 325
63576: NOT
63577: AND
63578: OR
63579: AND
63580: IFFALSE 63632
// begin active = false ;
63582: LD_ADDR_VAR 0 15
63586: PUSH
63587: LD_INT 0
63589: ST_TO_ADDR
// if upf_attack_status = 5 then
63590: LD_EXP 118
63594: PUSH
63595: LD_INT 5
63597: EQUAL
63598: IFFALSE 63630
// begin DialogueOn ;
63600: CALL_OW 6
// SayRadio ( Gensher , D13-Ge-1 ) ;
63604: LD_EXP 21
63608: PPUSH
63609: LD_STRING D13-Ge-1
63611: PPUSH
63612: CALL_OW 94
// DialogueOff ;
63616: CALL_OW 7
// upf_attack_status = 6 ;
63620: LD_ADDR_EXP 118
63624: PUSH
63625: LD_INT 6
63627: ST_TO_ADDR
// exit ;
63628: GO 66127
// end ; end else
63630: GO 63640
// active = true ;
63632: LD_ADDR_VAR 0 15
63636: PUSH
63637: LD_INT 1
63639: ST_TO_ADDR
// for turn = 1 to 3 do
63640: LD_ADDR_VAR 0 3
63644: PUSH
63645: DOUBLE
63646: LD_INT 1
63648: DEC
63649: ST_TO_ADDR
63650: LD_INT 3
63652: PUSH
63653: FOR_TO
63654: IFFALSE 66096
// begin case turn of 1 :
63656: LD_VAR 0 3
63660: PUSH
63661: LD_INT 1
63663: DOUBLE
63664: EQUAL
63665: IFTRUE 63669
63667: GO 64369
63669: POP
// begin if upf_attack_status = 3 then
63670: LD_EXP 118
63674: PUSH
63675: LD_INT 3
63677: EQUAL
63678: IFFALSE 63682
// continue ;
63680: GO 63653
// if vehicle_attack_strategy = 1 then
63682: LD_VAR 0 22
63686: PUSH
63687: LD_INT 1
63689: EQUAL
63690: IFFALSE 63734
// begin attack_hexes = [ [ 131 , 68 ] , [ 120 , 63 ] , [ 100 , 45 ] ] ;
63692: LD_ADDR_VAR 0 7
63696: PUSH
63697: LD_INT 131
63699: PUSH
63700: LD_INT 68
63702: PUSH
63703: EMPTY
63704: LIST
63705: LIST
63706: PUSH
63707: LD_INT 120
63709: PUSH
63710: LD_INT 63
63712: PUSH
63713: EMPTY
63714: LIST
63715: LIST
63716: PUSH
63717: LD_INT 100
63719: PUSH
63720: LD_INT 45
63722: PUSH
63723: EMPTY
63724: LIST
63725: LIST
63726: PUSH
63727: EMPTY
63728: LIST
63729: LIST
63730: LIST
63731: ST_TO_ADDR
// end else
63732: GO 63807
// begin attack_hexes = [ [ 137 , 98 ] , [ 118 , 92 ] , [ 93 , 82 ] , [ 87 , 65 ] , [ 87 , 54 ] , [ 100 , 45 ] ] ;
63734: LD_ADDR_VAR 0 7
63738: PUSH
63739: LD_INT 137
63741: PUSH
63742: LD_INT 98
63744: PUSH
63745: EMPTY
63746: LIST
63747: LIST
63748: PUSH
63749: LD_INT 118
63751: PUSH
63752: LD_INT 92
63754: PUSH
63755: EMPTY
63756: LIST
63757: LIST
63758: PUSH
63759: LD_INT 93
63761: PUSH
63762: LD_INT 82
63764: PUSH
63765: EMPTY
63766: LIST
63767: LIST
63768: PUSH
63769: LD_INT 87
63771: PUSH
63772: LD_INT 65
63774: PUSH
63775: EMPTY
63776: LIST
63777: LIST
63778: PUSH
63779: LD_INT 87
63781: PUSH
63782: LD_INT 54
63784: PUSH
63785: EMPTY
63786: LIST
63787: LIST
63788: PUSH
63789: LD_INT 100
63791: PUSH
63792: LD_INT 45
63794: PUSH
63795: EMPTY
63796: LIST
63797: LIST
63798: PUSH
63799: EMPTY
63800: LIST
63801: LIST
63802: LIST
63803: LIST
63804: LIST
63805: LIST
63806: ST_TO_ADDR
// end ; attack_hexes = attack_hexes ^ [ [ 101 , 27 ] , [ 77 , 29 ] , [ 91 , 47 ] , [ 87 , 65 ] , [ 93 , 82 ] , [ 77 , 82 ] , [ 49 , 59 ] , ai_human_pullback_hex [ 1 ] ] ;
63807: LD_ADDR_VAR 0 7
63811: PUSH
63812: LD_VAR 0 7
63816: PUSH
63817: LD_INT 101
63819: PUSH
63820: LD_INT 27
63822: PUSH
63823: EMPTY
63824: LIST
63825: LIST
63826: PUSH
63827: LD_INT 77
63829: PUSH
63830: LD_INT 29
63832: PUSH
63833: EMPTY
63834: LIST
63835: LIST
63836: PUSH
63837: LD_INT 91
63839: PUSH
63840: LD_INT 47
63842: PUSH
63843: EMPTY
63844: LIST
63845: LIST
63846: PUSH
63847: LD_INT 87
63849: PUSH
63850: LD_INT 65
63852: PUSH
63853: EMPTY
63854: LIST
63855: LIST
63856: PUSH
63857: LD_INT 93
63859: PUSH
63860: LD_INT 82
63862: PUSH
63863: EMPTY
63864: LIST
63865: LIST
63866: PUSH
63867: LD_INT 77
63869: PUSH
63870: LD_INT 82
63872: PUSH
63873: EMPTY
63874: LIST
63875: LIST
63876: PUSH
63877: LD_INT 49
63879: PUSH
63880: LD_INT 59
63882: PUSH
63883: EMPTY
63884: LIST
63885: LIST
63886: PUSH
63887: LD_EXP 41
63891: PUSH
63892: LD_INT 1
63894: ARRAY
63895: PUSH
63896: EMPTY
63897: LIST
63898: LIST
63899: LIST
63900: LIST
63901: LIST
63902: LIST
63903: LIST
63904: LIST
63905: ADD
63906: ST_TO_ADDR
// un_list = InitialVehicleCheck ;
63907: LD_ADDR_VAR 0 14
63911: PUSH
63912: CALL 66247 0 0
63916: ST_TO_ADDR
// for i in upf_vehicles_attack diff retreated_vehicles do
63917: LD_ADDR_VAR 0 1
63921: PUSH
63922: LD_EXP 124
63926: PUSH
63927: LD_VAR 0 16
63931: DIFF
63932: PUSH
63933: FOR_IN
63934: IFFALSE 64041
// if GetLives ( i ) <= 500 then
63936: LD_VAR 0 1
63940: PPUSH
63941: CALL_OW 256
63945: PUSH
63946: LD_INT 500
63948: LESSEQUAL
63949: IFFALSE 64039
// begin retreated_vehicles = retreated_vehicles ^ i ;
63951: LD_ADDR_VAR 0 16
63955: PUSH
63956: LD_VAR 0 16
63960: PUSH
63961: LD_VAR 0 1
63965: ADD
63966: ST_TO_ADDR
// temp_list_2 = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] - 1 ) ;
63967: LD_ADDR_VAR 0 8
63971: PUSH
63972: LD_EXP 74
63976: PUSH
63977: LD_VAR 0 17
63981: ARRAY
63982: PPUSH
63983: LD_VAR 0 1
63987: PPUSH
63988: LD_EXP 74
63992: PUSH
63993: LD_VAR 0 17
63997: ARRAY
63998: PUSH
63999: LD_VAR 0 1
64003: ARRAY
64004: PUSH
64005: LD_INT 1
64007: MINUS
64008: PPUSH
64009: CALL_OW 1
64013: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list_2 ) ;
64014: LD_ADDR_EXP 74
64018: PUSH
64019: LD_EXP 74
64023: PPUSH
64024: LD_VAR 0 17
64028: PPUSH
64029: LD_VAR 0 8
64033: PPUSH
64034: CALL_OW 1
64038: ST_TO_ADDR
// end ;
64039: GO 63933
64041: POP
64042: POP
// for i in retreated_vehicles do
64043: LD_ADDR_VAR 0 1
64047: PUSH
64048: LD_VAR 0 16
64052: PUSH
64053: FOR_IN
64054: IFFALSE 64337
// if not IsInArea ( i , attack_vehicle_area ) and i in un_list then
64056: LD_VAR 0 1
64060: PPUSH
64061: LD_INT 13
64063: PPUSH
64064: CALL_OW 308
64068: NOT
64069: PUSH
64070: LD_VAR 0 1
64074: PUSH
64075: LD_VAR 0 14
64079: IN
64080: AND
64081: IFFALSE 64335
// begin active = true ;
64083: LD_ADDR_VAR 0 15
64087: PUSH
64088: LD_INT 1
64090: ST_TO_ADDR
// if ai_attacking_unit_hex_index [ base ] [ i ] = 0 then
64091: LD_EXP 74
64095: PUSH
64096: LD_VAR 0 17
64100: ARRAY
64101: PUSH
64102: LD_VAR 0 1
64106: ARRAY
64107: PUSH
64108: LD_INT 0
64110: EQUAL
64111: IFFALSE 64127
// ComMoveToArea ( i , attack_vehicle_area ) else
64113: LD_VAR 0 1
64117: PPUSH
64118: LD_INT 13
64120: PPUSH
64121: CALL_OW 113
64125: GO 64335
// if GetDistUnitXY ( i , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) > vehicle_dist then
64127: LD_VAR 0 1
64131: PPUSH
64132: LD_VAR 0 7
64136: PUSH
64137: LD_EXP 74
64141: PUSH
64142: LD_VAR 0 17
64146: ARRAY
64147: PUSH
64148: LD_VAR 0 1
64152: ARRAY
64153: ARRAY
64154: PUSH
64155: LD_INT 1
64157: ARRAY
64158: PPUSH
64159: LD_VAR 0 7
64163: PUSH
64164: LD_EXP 74
64168: PUSH
64169: LD_VAR 0 17
64173: ARRAY
64174: PUSH
64175: LD_VAR 0 1
64179: ARRAY
64180: ARRAY
64181: PUSH
64182: LD_INT 2
64184: ARRAY
64185: PPUSH
64186: CALL_OW 297
64190: PUSH
64191: LD_VAR 0 19
64195: GREATER
64196: IFFALSE 64263
// ComMoveXY ( i , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) else
64198: LD_VAR 0 1
64202: PPUSH
64203: LD_VAR 0 7
64207: PUSH
64208: LD_EXP 74
64212: PUSH
64213: LD_VAR 0 17
64217: ARRAY
64218: PUSH
64219: LD_VAR 0 1
64223: ARRAY
64224: ARRAY
64225: PUSH
64226: LD_INT 1
64228: ARRAY
64229: PPUSH
64230: LD_VAR 0 7
64234: PUSH
64235: LD_EXP 74
64239: PUSH
64240: LD_VAR 0 17
64244: ARRAY
64245: PUSH
64246: LD_VAR 0 1
64250: ARRAY
64251: ARRAY
64252: PUSH
64253: LD_INT 2
64255: ARRAY
64256: PPUSH
64257: CALL_OW 111
64261: GO 64335
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] - 1 ) ;
64263: LD_ADDR_VAR 0 2
64267: PUSH
64268: LD_EXP 74
64272: PUSH
64273: LD_VAR 0 17
64277: ARRAY
64278: PPUSH
64279: LD_VAR 0 1
64283: PPUSH
64284: LD_EXP 74
64288: PUSH
64289: LD_VAR 0 17
64293: ARRAY
64294: PUSH
64295: LD_VAR 0 1
64299: ARRAY
64300: PUSH
64301: LD_INT 1
64303: MINUS
64304: PPUSH
64305: CALL_OW 1
64309: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
64310: LD_ADDR_EXP 74
64314: PUSH
64315: LD_EXP 74
64319: PPUSH
64320: LD_VAR 0 17
64324: PPUSH
64325: LD_VAR 0 2
64329: PPUSH
64330: CALL_OW 1
64334: ST_TO_ADDR
// end ; end ;
64335: GO 64053
64337: POP
64338: POP
// attacking_units = un_list diff retreated_vehicles ;
64339: LD_ADDR_VAR 0 9
64343: PUSH
64344: LD_VAR 0 14
64348: PUSH
64349: LD_VAR 0 16
64353: DIFF
64354: ST_TO_ADDR
// if attacking_units = 0 then
64355: LD_VAR 0 9
64359: PUSH
64360: LD_INT 0
64362: EQUAL
64363: IFFALSE 64367
// continue ;
64365: GO 63653
// end ; 2 :
64367: GO 64842
64369: LD_INT 2
64371: DOUBLE
64372: EQUAL
64373: IFTRUE 64377
64375: GO 64605
64377: POP
// begin attack_hexes = [ [ 59 , 9 ] , [ 69 , 19 ] , [ 77 , 29 ] , [ 101 , 27 ] , [ 100 , 45 ] , [ 91 , 47 ] , [ 87 , 65 ] , [ 93 , 82 ] , [ 77 , 82 ] , [ 49 , 59 ] , ai_human_pullback_hex [ 1 ] ] ;
64378: LD_ADDR_VAR 0 7
64382: PUSH
64383: LD_INT 59
64385: PUSH
64386: LD_INT 9
64388: PUSH
64389: EMPTY
64390: LIST
64391: LIST
64392: PUSH
64393: LD_INT 69
64395: PUSH
64396: LD_INT 19
64398: PUSH
64399: EMPTY
64400: LIST
64401: LIST
64402: PUSH
64403: LD_INT 77
64405: PUSH
64406: LD_INT 29
64408: PUSH
64409: EMPTY
64410: LIST
64411: LIST
64412: PUSH
64413: LD_INT 101
64415: PUSH
64416: LD_INT 27
64418: PUSH
64419: EMPTY
64420: LIST
64421: LIST
64422: PUSH
64423: LD_INT 100
64425: PUSH
64426: LD_INT 45
64428: PUSH
64429: EMPTY
64430: LIST
64431: LIST
64432: PUSH
64433: LD_INT 91
64435: PUSH
64436: LD_INT 47
64438: PUSH
64439: EMPTY
64440: LIST
64441: LIST
64442: PUSH
64443: LD_INT 87
64445: PUSH
64446: LD_INT 65
64448: PUSH
64449: EMPTY
64450: LIST
64451: LIST
64452: PUSH
64453: LD_INT 93
64455: PUSH
64456: LD_INT 82
64458: PUSH
64459: EMPTY
64460: LIST
64461: LIST
64462: PUSH
64463: LD_INT 77
64465: PUSH
64466: LD_INT 82
64468: PUSH
64469: EMPTY
64470: LIST
64471: LIST
64472: PUSH
64473: LD_INT 49
64475: PUSH
64476: LD_INT 59
64478: PUSH
64479: EMPTY
64480: LIST
64481: LIST
64482: PUSH
64483: LD_EXP 41
64487: PUSH
64488: LD_INT 1
64490: ARRAY
64491: PUSH
64492: EMPTY
64493: LIST
64494: LIST
64495: LIST
64496: LIST
64497: LIST
64498: LIST
64499: LIST
64500: LIST
64501: LIST
64502: LIST
64503: LIST
64504: ST_TO_ADDR
// upf_soldiers_west = UnitFilter ( upf_soldiers_west , [ f_lives , 1 ] ) ;
64505: LD_ADDR_EXP 121
64509: PUSH
64510: LD_EXP 121
64514: PPUSH
64515: LD_INT 24
64517: PUSH
64518: LD_INT 1
64520: PUSH
64521: EMPTY
64522: LIST
64523: LIST
64524: PPUSH
64525: CALL_OW 72
64529: ST_TO_ADDR
// upf_scientists_west = UnitFilter ( upf_scientists_west , [ f_lives , 1 ] ) ;
64530: LD_ADDR_EXP 129
64534: PUSH
64535: LD_EXP 129
64539: PPUSH
64540: LD_INT 24
64542: PUSH
64543: LD_INT 1
64545: PUSH
64546: EMPTY
64547: LIST
64548: LIST
64549: PPUSH
64550: CALL_OW 72
64554: ST_TO_ADDR
// if ( upf_soldiers_west ^ upf_scientists_west ) = 0 then
64555: LD_EXP 121
64559: PUSH
64560: LD_EXP 129
64564: ADD
64565: PUSH
64566: LD_INT 0
64568: EQUAL
64569: IFFALSE 64573
// continue ;
64571: GO 63653
// attacking_soldiers = upf_soldiers_west ;
64573: LD_ADDR_VAR 0 4
64577: PUSH
64578: LD_EXP 121
64582: ST_TO_ADDR
// attacking_scientists = upf_scientists_west ;
64583: LD_ADDR_VAR 0 5
64587: PUSH
64588: LD_EXP 129
64592: ST_TO_ADDR
// attacking_units = attacking_soldiers ;
64593: LD_ADDR_VAR 0 9
64597: PUSH
64598: LD_VAR 0 4
64602: ST_TO_ADDR
// end ; 3 :
64603: GO 64842
64605: LD_INT 3
64607: DOUBLE
64608: EQUAL
64609: IFTRUE 64613
64611: GO 64841
64613: POP
// begin attack_hexes = [ [ 100 , 9 ] , [ 101 , 17 ] , [ 101 , 27 ] , [ 77 , 29 ] , [ 100 , 45 ] , [ 91 , 47 ] , [ 87 , 65 ] , [ 93 , 82 ] , [ 77 , 82 ] , [ 49 , 59 ] , ai_human_pullback_hex [ 1 ] ] ;
64614: LD_ADDR_VAR 0 7
64618: PUSH
64619: LD_INT 100
64621: PUSH
64622: LD_INT 9
64624: PUSH
64625: EMPTY
64626: LIST
64627: LIST
64628: PUSH
64629: LD_INT 101
64631: PUSH
64632: LD_INT 17
64634: PUSH
64635: EMPTY
64636: LIST
64637: LIST
64638: PUSH
64639: LD_INT 101
64641: PUSH
64642: LD_INT 27
64644: PUSH
64645: EMPTY
64646: LIST
64647: LIST
64648: PUSH
64649: LD_INT 77
64651: PUSH
64652: LD_INT 29
64654: PUSH
64655: EMPTY
64656: LIST
64657: LIST
64658: PUSH
64659: LD_INT 100
64661: PUSH
64662: LD_INT 45
64664: PUSH
64665: EMPTY
64666: LIST
64667: LIST
64668: PUSH
64669: LD_INT 91
64671: PUSH
64672: LD_INT 47
64674: PUSH
64675: EMPTY
64676: LIST
64677: LIST
64678: PUSH
64679: LD_INT 87
64681: PUSH
64682: LD_INT 65
64684: PUSH
64685: EMPTY
64686: LIST
64687: LIST
64688: PUSH
64689: LD_INT 93
64691: PUSH
64692: LD_INT 82
64694: PUSH
64695: EMPTY
64696: LIST
64697: LIST
64698: PUSH
64699: LD_INT 77
64701: PUSH
64702: LD_INT 82
64704: PUSH
64705: EMPTY
64706: LIST
64707: LIST
64708: PUSH
64709: LD_INT 49
64711: PUSH
64712: LD_INT 59
64714: PUSH
64715: EMPTY
64716: LIST
64717: LIST
64718: PUSH
64719: LD_EXP 41
64723: PUSH
64724: LD_INT 1
64726: ARRAY
64727: PUSH
64728: EMPTY
64729: LIST
64730: LIST
64731: LIST
64732: LIST
64733: LIST
64734: LIST
64735: LIST
64736: LIST
64737: LIST
64738: LIST
64739: LIST
64740: ST_TO_ADDR
// upf_soldiers_east = UnitFilter ( upf_soldiers_east , [ f_lives , 1 ] ) ;
64741: LD_ADDR_EXP 122
64745: PUSH
64746: LD_EXP 122
64750: PPUSH
64751: LD_INT 24
64753: PUSH
64754: LD_INT 1
64756: PUSH
64757: EMPTY
64758: LIST
64759: LIST
64760: PPUSH
64761: CALL_OW 72
64765: ST_TO_ADDR
// upf_scientists_east = UnitFilter ( upf_scientists_east , [ f_lives , 1 ] ) ;
64766: LD_ADDR_EXP 130
64770: PUSH
64771: LD_EXP 130
64775: PPUSH
64776: LD_INT 24
64778: PUSH
64779: LD_INT 1
64781: PUSH
64782: EMPTY
64783: LIST
64784: LIST
64785: PPUSH
64786: CALL_OW 72
64790: ST_TO_ADDR
// if ( upf_soldiers_east ^ upf_scientists_east ) = 0 then
64791: LD_EXP 122
64795: PUSH
64796: LD_EXP 130
64800: ADD
64801: PUSH
64802: LD_INT 0
64804: EQUAL
64805: IFFALSE 64809
// continue ;
64807: GO 63653
// attacking_soldiers = upf_soldiers_east ;
64809: LD_ADDR_VAR 0 4
64813: PUSH
64814: LD_EXP 122
64818: ST_TO_ADDR
// attacking_scientists = upf_scientists_east ;
64819: LD_ADDR_VAR 0 5
64823: PUSH
64824: LD_EXP 130
64828: ST_TO_ADDR
// attacking_units = attacking_soldiers ;
64829: LD_ADDR_VAR 0 9
64833: PUSH
64834: LD_VAR 0 4
64838: ST_TO_ADDR
// end ; end ;
64839: GO 64842
64841: POP
// active = true ;
64842: LD_ADDR_VAR 0 15
64846: PUSH
64847: LD_INT 1
64849: ST_TO_ADDR
// if turn in [ 2 , 3 ] then
64850: LD_VAR 0 3
64854: PUSH
64855: LD_INT 2
64857: PUSH
64858: LD_INT 3
64860: PUSH
64861: EMPTY
64862: LIST
64863: LIST
64864: IN
64865: IFFALSE 65197
// begin if attacking_scientists > 0 then
64867: LD_VAR 0 5
64871: PUSH
64872: LD_INT 0
64874: GREATER
64875: IFFALSE 65197
// if attacking_soldiers = 0 then
64877: LD_VAR 0 4
64881: PUSH
64882: LD_INT 0
64884: EQUAL
64885: IFFALSE 64899
// begin attacking_units = attacking_scientists ;
64887: LD_ADDR_VAR 0 9
64891: PUSH
64892: LD_VAR 0 5
64896: ST_TO_ADDR
// end else
64897: GO 65197
// begin x = 0 ;
64899: LD_ADDR_VAR 0 10
64903: PUSH
64904: LD_INT 0
64906: ST_TO_ADDR
// y = 0 ;
64907: LD_ADDR_VAR 0 11
64911: PUSH
64912: LD_INT 0
64914: ST_TO_ADDR
// for i in attacking_soldiers do
64915: LD_ADDR_VAR 0 1
64919: PUSH
64920: LD_VAR 0 4
64924: PUSH
64925: FOR_IN
64926: IFFALSE 64972
// begin x = x + GetX ( i ) ;
64928: LD_ADDR_VAR 0 10
64932: PUSH
64933: LD_VAR 0 10
64937: PUSH
64938: LD_VAR 0 1
64942: PPUSH
64943: CALL_OW 250
64947: PLUS
64948: ST_TO_ADDR
// y = y + GetY ( i ) ;
64949: LD_ADDR_VAR 0 11
64953: PUSH
64954: LD_VAR 0 11
64958: PUSH
64959: LD_VAR 0 1
64963: PPUSH
64964: CALL_OW 251
64968: PLUS
64969: ST_TO_ADDR
// end ;
64970: GO 64925
64972: POP
64973: POP
// x = x div attacking_soldiers ;
64974: LD_ADDR_VAR 0 10
64978: PUSH
64979: LD_VAR 0 10
64983: PUSH
64984: LD_VAR 0 4
64988: DIV
64989: ST_TO_ADDR
// y = y div attacking_soldiers ;
64990: LD_ADDR_VAR 0 11
64994: PUSH
64995: LD_VAR 0 11
64999: PUSH
65000: LD_VAR 0 4
65004: DIV
65005: ST_TO_ADDR
// temp_value = 0 ;
65006: LD_ADDR_VAR 0 6
65010: PUSH
65011: LD_INT 0
65013: ST_TO_ADDR
// for i in attacking_soldiers do
65014: LD_ADDR_VAR 0 1
65018: PUSH
65019: LD_VAR 0 4
65023: PUSH
65024: FOR_IN
65025: IFFALSE 65076
// begin k = GetDistUnitXY ( i , x , y ) ;
65027: LD_ADDR_VAR 0 12
65031: PUSH
65032: LD_VAR 0 1
65036: PPUSH
65037: LD_VAR 0 10
65041: PPUSH
65042: LD_VAR 0 11
65046: PPUSH
65047: CALL_OW 297
65051: ST_TO_ADDR
// if k > temp_value then
65052: LD_VAR 0 12
65056: PUSH
65057: LD_VAR 0 6
65061: GREATER
65062: IFFALSE 65074
// temp_value = k ;
65064: LD_ADDR_VAR 0 6
65068: PUSH
65069: LD_VAR 0 12
65073: ST_TO_ADDR
// end ;
65074: GO 65024
65076: POP
65077: POP
// for i in attacking_scientists do
65078: LD_ADDR_VAR 0 1
65082: PUSH
65083: LD_VAR 0 5
65087: PUSH
65088: FOR_IN
65089: IFFALSE 65195
// if GetDistUnitXY ( i , x , y ) > temp_value then
65091: LD_VAR 0 1
65095: PPUSH
65096: LD_VAR 0 10
65100: PPUSH
65101: LD_VAR 0 11
65105: PPUSH
65106: CALL_OW 297
65110: PUSH
65111: LD_VAR 0 6
65115: GREATER
65116: IFFALSE 65193
// case GetType ( IsInUnit ( i ) ) of unit_building :
65118: LD_VAR 0 1
65122: PPUSH
65123: CALL_OW 310
65127: PPUSH
65128: CALL_OW 247
65132: PUSH
65133: LD_INT 3
65135: DOUBLE
65136: EQUAL
65137: IFTRUE 65141
65139: GO 65153
65141: POP
// ComExitBuilding ( i ) ; unit_vehicle :
65142: LD_VAR 0 1
65146: PPUSH
65147: CALL_OW 122
65151: GO 65193
65153: LD_INT 2
65155: DOUBLE
65156: EQUAL
65157: IFTRUE 65161
65159: GO 65173
65161: POP
// ComExitVehicle ( i ) ; else
65162: LD_VAR 0 1
65166: PPUSH
65167: CALL_OW 121
65171: GO 65193
65173: POP
// ComMoveXY ( i , x , y ) ; end ;
65174: LD_VAR 0 1
65178: PPUSH
65179: LD_VAR 0 10
65183: PPUSH
65184: LD_VAR 0 11
65188: PPUSH
65189: CALL_OW 111
65193: GO 65088
65195: POP
65196: POP
// end ; end ; if turn in [ 2 , 3 ] then
65197: LD_VAR 0 3
65201: PUSH
65202: LD_INT 2
65204: PUSH
65205: LD_INT 3
65207: PUSH
65208: EMPTY
65209: LIST
65210: LIST
65211: IN
65212: IFFALSE 65457
// begin temp_value = true ;
65214: LD_ADDR_VAR 0 6
65218: PUSH
65219: LD_INT 1
65221: ST_TO_ADDR
// for i in attacking_units do
65222: LD_ADDR_VAR 0 1
65226: PUSH
65227: LD_VAR 0 9
65231: PUSH
65232: FOR_IN
65233: IFFALSE 65354
// if ai_attacking_unit_hex_index [ base ] [ i ] < attack_hexes then
65235: LD_EXP 74
65239: PUSH
65240: LD_VAR 0 17
65244: ARRAY
65245: PUSH
65246: LD_VAR 0 1
65250: ARRAY
65251: PUSH
65252: LD_VAR 0 7
65256: LESS
65257: IFFALSE 65342
// begin if GetDistUnitXY ( i , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) > human_dist then
65259: LD_VAR 0 1
65263: PPUSH
65264: LD_VAR 0 7
65268: PUSH
65269: LD_EXP 74
65273: PUSH
65274: LD_VAR 0 17
65278: ARRAY
65279: PUSH
65280: LD_VAR 0 1
65284: ARRAY
65285: ARRAY
65286: PUSH
65287: LD_INT 1
65289: ARRAY
65290: PPUSH
65291: LD_VAR 0 7
65295: PUSH
65296: LD_EXP 74
65300: PUSH
65301: LD_VAR 0 17
65305: ARRAY
65306: PUSH
65307: LD_VAR 0 1
65311: ARRAY
65312: ARRAY
65313: PUSH
65314: LD_INT 2
65316: ARRAY
65317: PPUSH
65318: CALL_OW 297
65322: PUSH
65323: LD_VAR 0 18
65327: GREATER
65328: IFFALSE 65340
// begin temp_value = false ;
65330: LD_ADDR_VAR 0 6
65334: PUSH
65335: LD_INT 0
65337: ST_TO_ADDR
// break ;
65338: GO 65354
// end ; end else
65340: GO 65352
// begin temp_value = false ;
65342: LD_ADDR_VAR 0 6
65346: PUSH
65347: LD_INT 0
65349: ST_TO_ADDR
// break ;
65350: GO 65354
// end ;
65352: GO 65232
65354: POP
65355: POP
// if temp_value then
65356: LD_VAR 0 6
65360: IFFALSE 65457
// for i in attacking_units union attacking_scientists do
65362: LD_ADDR_VAR 0 1
65366: PUSH
65367: LD_VAR 0 9
65371: PUSH
65372: LD_VAR 0 5
65376: UNION
65377: PUSH
65378: FOR_IN
65379: IFFALSE 65455
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] + 1 ) ;
65381: LD_ADDR_VAR 0 2
65385: PUSH
65386: LD_EXP 74
65390: PUSH
65391: LD_VAR 0 17
65395: ARRAY
65396: PPUSH
65397: LD_VAR 0 1
65401: PPUSH
65402: LD_EXP 74
65406: PUSH
65407: LD_VAR 0 17
65411: ARRAY
65412: PUSH
65413: LD_VAR 0 1
65417: ARRAY
65418: PUSH
65419: LD_INT 1
65421: PLUS
65422: PPUSH
65423: CALL_OW 1
65427: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
65428: LD_ADDR_EXP 74
65432: PUSH
65433: LD_EXP 74
65437: PPUSH
65438: LD_VAR 0 17
65442: PPUSH
65443: LD_VAR 0 2
65447: PPUSH
65448: CALL_OW 1
65452: ST_TO_ADDR
// end ;
65453: GO 65378
65455: POP
65456: POP
// end ; for i in attacking_units do
65457: LD_ADDR_VAR 0 1
65461: PUSH
65462: LD_VAR 0 9
65466: PUSH
65467: FOR_IN
65468: IFFALSE 66092
// begin temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_dist , i , 14 ] , [ f_see , side ] ] ) ;
65470: LD_ADDR_VAR 0 2
65474: PUSH
65475: LD_INT 81
65477: PUSH
65478: LD_VAR 0 20
65482: PUSH
65483: EMPTY
65484: LIST
65485: LIST
65486: PUSH
65487: LD_INT 21
65489: PUSH
65490: LD_INT 1
65492: PUSH
65493: EMPTY
65494: LIST
65495: LIST
65496: PUSH
65497: LD_INT 91
65499: PUSH
65500: LD_VAR 0 1
65504: PUSH
65505: LD_INT 14
65507: PUSH
65508: EMPTY
65509: LIST
65510: LIST
65511: LIST
65512: PUSH
65513: LD_INT 101
65515: PUSH
65516: LD_VAR 0 20
65520: PUSH
65521: EMPTY
65522: LIST
65523: LIST
65524: PUSH
65525: EMPTY
65526: LIST
65527: LIST
65528: LIST
65529: LIST
65530: PPUSH
65531: CALL_OW 69
65535: ST_TO_ADDR
// if temp_list > 0 then
65536: LD_VAR 0 2
65540: PUSH
65541: LD_INT 0
65543: GREATER
65544: IFFALSE 65680
// begin temp_list_2 = UnitFilter ( temp_list , [ f_not , [ f_lives , 250 ] ] ) ;
65546: LD_ADDR_VAR 0 8
65550: PUSH
65551: LD_VAR 0 2
65555: PPUSH
65556: LD_INT 3
65558: PUSH
65559: LD_INT 24
65561: PUSH
65562: LD_INT 250
65564: PUSH
65565: EMPTY
65566: LIST
65567: LIST
65568: PUSH
65569: EMPTY
65570: LIST
65571: LIST
65572: PPUSH
65573: CALL_OW 72
65577: ST_TO_ADDR
// if temp_list_2 > 0 then
65578: LD_VAR 0 8
65582: PUSH
65583: LD_INT 0
65585: GREATER
65586: IFFALSE 65598
// temp_list = temp_list_2 ;
65588: LD_ADDR_VAR 0 2
65592: PUSH
65593: LD_VAR 0 8
65597: ST_TO_ADDR
// temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
65598: LD_ADDR_VAR 0 13
65602: PUSH
65603: LD_VAR 0 2
65607: PPUSH
65608: LD_VAR 0 1
65612: PPUSH
65613: CALL_OW 75
65617: ST_TO_ADDR
// if GetLives ( temp_unit ) > 250 then
65618: LD_VAR 0 13
65622: PPUSH
65623: CALL_OW 256
65627: PUSH
65628: LD_INT 250
65630: GREATER
65631: IFFALSE 65664
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
65633: LD_VAR 0 1
65637: PPUSH
65638: LD_VAR 0 13
65642: PPUSH
65643: CALL_OW 250
65647: PPUSH
65648: LD_VAR 0 13
65652: PPUSH
65653: CALL_OW 251
65657: PPUSH
65658: CALL_OW 114
65662: GO 65678
// ComAttackUnit ( i , temp_unit ) ;
65664: LD_VAR 0 1
65668: PPUSH
65669: LD_VAR 0 13
65673: PPUSH
65674: CALL_OW 115
// end else
65678: GO 66090
// begin temp_list = FindNonhumansNearUnit ( side , i , 20 , true ) ;
65680: LD_ADDR_VAR 0 2
65684: PUSH
65685: LD_VAR 0 20
65689: PPUSH
65690: LD_VAR 0 1
65694: PPUSH
65695: LD_INT 20
65697: PPUSH
65698: LD_INT 1
65700: PPUSH
65701: CALL 66130 0 4
65705: ST_TO_ADDR
// if temp_list > 0 then
65706: LD_VAR 0 2
65710: PUSH
65711: LD_INT 0
65713: GREATER
65714: IFFALSE 65755
// begin ComAgressiveMove ( i , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
65716: LD_VAR 0 1
65720: PPUSH
65721: LD_VAR 0 2
65725: PUSH
65726: LD_INT 1
65728: ARRAY
65729: PPUSH
65730: CALL_OW 250
65734: PPUSH
65735: LD_VAR 0 2
65739: PUSH
65740: LD_INT 1
65742: ARRAY
65743: PPUSH
65744: CALL_OW 251
65748: PPUSH
65749: CALL_OW 114
// end else
65753: GO 66090
// begin temp_list = FindNonhumansNearUnit ( side , i , 20 , false ) ;
65755: LD_ADDR_VAR 0 2
65759: PUSH
65760: LD_VAR 0 20
65764: PPUSH
65765: LD_VAR 0 1
65769: PPUSH
65770: LD_INT 20
65772: PPUSH
65773: LD_INT 0
65775: PPUSH
65776: CALL 66130 0 4
65780: ST_TO_ADDR
// if temp_list > 0 then
65781: LD_VAR 0 2
65785: PUSH
65786: LD_INT 0
65788: GREATER
65789: IFFALSE 65827
// begin temp_unit = NearestUnitToUnit ( temp_list , i ) ;
65791: LD_ADDR_VAR 0 13
65795: PUSH
65796: LD_VAR 0 2
65800: PPUSH
65801: LD_VAR 0 1
65805: PPUSH
65806: CALL_OW 74
65810: ST_TO_ADDR
// ComAttackUnit ( i , temp_unit ) ;
65811: LD_VAR 0 1
65815: PPUSH
65816: LD_VAR 0 13
65820: PPUSH
65821: CALL_OW 115
// end else
65825: GO 66090
// if ai_attacking_unit_hex_index [ base ] [ i ] <= attack_hexes then
65827: LD_EXP 74
65831: PUSH
65832: LD_VAR 0 17
65836: ARRAY
65837: PUSH
65838: LD_VAR 0 1
65842: ARRAY
65843: PUSH
65844: LD_VAR 0 7
65848: LESSEQUAL
65849: IFFALSE 66090
// if GetDistUnitXY ( i , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) > [ vehicle_dist , human_dist , human_dist ] [ turn ] then
65851: LD_VAR 0 1
65855: PPUSH
65856: LD_VAR 0 7
65860: PUSH
65861: LD_EXP 74
65865: PUSH
65866: LD_VAR 0 17
65870: ARRAY
65871: PUSH
65872: LD_VAR 0 1
65876: ARRAY
65877: ARRAY
65878: PUSH
65879: LD_INT 1
65881: ARRAY
65882: PPUSH
65883: LD_VAR 0 7
65887: PUSH
65888: LD_EXP 74
65892: PUSH
65893: LD_VAR 0 17
65897: ARRAY
65898: PUSH
65899: LD_VAR 0 1
65903: ARRAY
65904: ARRAY
65905: PUSH
65906: LD_INT 2
65908: ARRAY
65909: PPUSH
65910: CALL_OW 297
65914: PUSH
65915: LD_VAR 0 19
65919: PUSH
65920: LD_VAR 0 18
65924: PUSH
65925: LD_VAR 0 18
65929: PUSH
65930: EMPTY
65931: LIST
65932: LIST
65933: LIST
65934: PUSH
65935: LD_VAR 0 3
65939: ARRAY
65940: GREATER
65941: IFFALSE 66008
// begin ComAgressiveMove ( i , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) ;
65943: LD_VAR 0 1
65947: PPUSH
65948: LD_VAR 0 7
65952: PUSH
65953: LD_EXP 74
65957: PUSH
65958: LD_VAR 0 17
65962: ARRAY
65963: PUSH
65964: LD_VAR 0 1
65968: ARRAY
65969: ARRAY
65970: PUSH
65971: LD_INT 1
65973: ARRAY
65974: PPUSH
65975: LD_VAR 0 7
65979: PUSH
65980: LD_EXP 74
65984: PUSH
65985: LD_VAR 0 17
65989: ARRAY
65990: PUSH
65991: LD_VAR 0 1
65995: ARRAY
65996: ARRAY
65997: PUSH
65998: LD_INT 2
66000: ARRAY
66001: PPUSH
66002: CALL_OW 114
// end else
66006: GO 66090
// if turn = 1 then
66008: LD_VAR 0 3
66012: PUSH
66013: LD_INT 1
66015: EQUAL
66016: IFFALSE 66090
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] + 1 ) ;
66018: LD_ADDR_VAR 0 2
66022: PUSH
66023: LD_EXP 74
66027: PUSH
66028: LD_VAR 0 17
66032: ARRAY
66033: PPUSH
66034: LD_VAR 0 1
66038: PPUSH
66039: LD_EXP 74
66043: PUSH
66044: LD_VAR 0 17
66048: ARRAY
66049: PUSH
66050: LD_VAR 0 1
66054: ARRAY
66055: PUSH
66056: LD_INT 1
66058: PLUS
66059: PPUSH
66060: CALL_OW 1
66064: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
66065: LD_ADDR_EXP 74
66069: PUSH
66070: LD_EXP 74
66074: PPUSH
66075: LD_VAR 0 17
66079: PPUSH
66080: LD_VAR 0 2
66084: PPUSH
66085: CALL_OW 1
66089: ST_TO_ADDR
// end ; end ; end ; end ;
66090: GO 65467
66092: POP
66093: POP
// end ;
66094: GO 63653
66096: POP
66097: POP
// if not active then
66098: LD_VAR 0 15
66102: NOT
66103: IFFALSE 66123
// begin if upf_attack_status = 2 then
66105: LD_EXP 118
66109: PUSH
66110: LD_INT 2
66112: EQUAL
66113: IFFALSE 66123
// upf_attack_status = 3 ;
66115: LD_ADDR_EXP 118
66119: PUSH
66120: LD_INT 3
66122: ST_TO_ADDR
// end ; until false ;
66123: LD_INT 0
66125: IFFALSE 63302
// end ;
66127: PPOPN 22
66129: END
// function FindNonhumansNearUnit ( side , un , dist , only_dangerous ) ; var temp_list ; begin
66130: LD_INT 0
66132: PPUSH
66133: PPUSH
// temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_not , [ f_type , unit_human ] ] , [ f_dist , un , dist ] , [ f_see , side ] ] ) ;
66134: LD_ADDR_VAR 0 6
66138: PUSH
66139: LD_INT 81
66141: PUSH
66142: LD_VAR 0 1
66146: PUSH
66147: EMPTY
66148: LIST
66149: LIST
66150: PUSH
66151: LD_INT 3
66153: PUSH
66154: LD_INT 21
66156: PUSH
66157: LD_INT 1
66159: PUSH
66160: EMPTY
66161: LIST
66162: LIST
66163: PUSH
66164: EMPTY
66165: LIST
66166: LIST
66167: PUSH
66168: LD_INT 91
66170: PUSH
66171: LD_VAR 0 2
66175: PUSH
66176: LD_VAR 0 3
66180: PUSH
66181: EMPTY
66182: LIST
66183: LIST
66184: LIST
66185: PUSH
66186: LD_INT 101
66188: PUSH
66189: LD_VAR 0 1
66193: PUSH
66194: EMPTY
66195: LIST
66196: LIST
66197: PUSH
66198: EMPTY
66199: LIST
66200: LIST
66201: LIST
66202: LIST
66203: PPUSH
66204: CALL_OW 69
66208: ST_TO_ADDR
// if only_dangerous then
66209: LD_VAR 0 4
66213: IFFALSE 66232
// begin result = DangerousUnits ( temp_list ) ;
66215: LD_ADDR_VAR 0 5
66219: PUSH
66220: LD_VAR 0 6
66224: PPUSH
66225: CALL 37769 0 1
66229: ST_TO_ADDR
// end else
66230: GO 66242
// result = temp_list end ;
66232: LD_ADDR_VAR 0 5
66236: PUSH
66237: LD_VAR 0 6
66241: ST_TO_ADDR
66242: LD_VAR 0 5
66246: RET
// function InitialVehicleCheck ; var i , k , temp_list ; begin
66247: LD_INT 0
66249: PPUSH
66250: PPUSH
66251: PPUSH
66252: PPUSH
// upf_vehicles_attack = UnitFilter ( upf_vehicles_attack , [ f_alive ] ) ;
66253: LD_ADDR_EXP 124
66257: PUSH
66258: LD_EXP 124
66262: PPUSH
66263: LD_INT 51
66265: PUSH
66266: EMPTY
66267: LIST
66268: PPUSH
66269: CALL_OW 72
66273: ST_TO_ADDR
// for i in upf_mechanics do
66274: LD_ADDR_VAR 0 2
66278: PUSH
66279: LD_EXP 120
66283: PUSH
66284: FOR_IN
66285: IFFALSE 66353
// begin if upf_mechanic_attack_map >= i then
66287: LD_EXP 126
66291: PUSH
66292: LD_VAR 0 2
66296: GREATEREQUAL
66297: IFFALSE 66351
// begin temp_list = UnitFilter ( upf_mechanic_attack_map [ i ] , [ f_alive ] ) ;
66299: LD_ADDR_VAR 0 4
66303: PUSH
66304: LD_EXP 126
66308: PUSH
66309: LD_VAR 0 2
66313: ARRAY
66314: PPUSH
66315: LD_INT 51
66317: PUSH
66318: EMPTY
66319: LIST
66320: PPUSH
66321: CALL_OW 72
66325: ST_TO_ADDR
// upf_mechanic_attack_map = Replace ( upf_mechanic_attack_map , i , temp_list ) ;
66326: LD_ADDR_EXP 126
66330: PUSH
66331: LD_EXP 126
66335: PPUSH
66336: LD_VAR 0 2
66340: PPUSH
66341: LD_VAR 0 4
66345: PPUSH
66346: CALL_OW 1
66350: ST_TO_ADDR
// end ; end ;
66351: GO 66284
66353: POP
66354: POP
// result = [ ] ;
66355: LD_ADDR_VAR 0 1
66359: PUSH
66360: EMPTY
66361: ST_TO_ADDR
// for i in upf_mechanics do
66362: LD_ADDR_VAR 0 2
66366: PUSH
66367: LD_EXP 120
66371: PUSH
66372: FOR_IN
66373: IFFALSE 66486
// if upf_mechanic_attack_map >= i then
66375: LD_EXP 126
66379: PUSH
66380: LD_VAR 0 2
66384: GREATEREQUAL
66385: IFFALSE 66484
// begin for k in upf_mechanic_attack_map [ i ] do
66387: LD_ADDR_VAR 0 3
66391: PUSH
66392: LD_EXP 126
66396: PUSH
66397: LD_VAR 0 2
66401: ARRAY
66402: PUSH
66403: FOR_IN
66404: IFFALSE 66482
// case IsControledBy ( k ) of 0 :
66406: LD_VAR 0 3
66410: PPUSH
66411: CALL_OW 312
66415: PUSH
66416: LD_INT 0
66418: DOUBLE
66419: EQUAL
66420: IFTRUE 66424
66422: GO 66441
66424: POP
// ComLinkTo ( k , i ) ; i :
66425: LD_VAR 0 3
66429: PPUSH
66430: LD_VAR 0 2
66434: PPUSH
66435: CALL_OW 135
66439: GO 66480
66441: LD_VAR 0 2
66445: DOUBLE
66446: EQUAL
66447: IFTRUE 66451
66449: GO 66470
66451: POP
// result = result ^ k ; else
66452: LD_ADDR_VAR 0 1
66456: PUSH
66457: LD_VAR 0 1
66461: PUSH
66462: LD_VAR 0 3
66466: ADD
66467: ST_TO_ADDR
66468: GO 66480
66470: POP
// ComUnlink ( k ) ; end ;
66471: LD_VAR 0 3
66475: PPUSH
66476: CALL_OW 136
66480: GO 66403
66482: POP
66483: POP
// end ;
66484: GO 66372
66486: POP
66487: POP
// end ;
66488: LD_VAR 0 1
66492: RET
// function DetermineVehicleAttackStrategy ; var south_east , south_west ; begin
66493: LD_INT 0
66495: PPUSH
66496: PPUSH
66497: PPUSH
// south_east = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_breastwork ] , [ f_btype , b_bunker ] , [ f_btype , b_turret ] , [ f_btype , b_armoury ] , [ f_btype , b_barracks ] ] , [ f_inarea , player_base_south_east ] ] ) ;
66498: LD_ADDR_VAR 0 2
66502: PUSH
66503: LD_INT 22
66505: PUSH
66506: LD_EXP 2
66510: PUSH
66511: EMPTY
66512: LIST
66513: LIST
66514: PUSH
66515: LD_INT 2
66517: PUSH
66518: LD_INT 30
66520: PUSH
66521: LD_INT 31
66523: PUSH
66524: EMPTY
66525: LIST
66526: LIST
66527: PUSH
66528: LD_INT 30
66530: PUSH
66531: LD_INT 32
66533: PUSH
66534: EMPTY
66535: LIST
66536: LIST
66537: PUSH
66538: LD_INT 30
66540: PUSH
66541: LD_INT 33
66543: PUSH
66544: EMPTY
66545: LIST
66546: LIST
66547: PUSH
66548: LD_INT 30
66550: PUSH
66551: LD_INT 4
66553: PUSH
66554: EMPTY
66555: LIST
66556: LIST
66557: PUSH
66558: LD_INT 30
66560: PUSH
66561: LD_INT 5
66563: PUSH
66564: EMPTY
66565: LIST
66566: LIST
66567: PUSH
66568: EMPTY
66569: LIST
66570: LIST
66571: LIST
66572: LIST
66573: LIST
66574: LIST
66575: PUSH
66576: LD_INT 95
66578: PUSH
66579: LD_INT 31
66581: PUSH
66582: EMPTY
66583: LIST
66584: LIST
66585: PUSH
66586: EMPTY
66587: LIST
66588: LIST
66589: LIST
66590: PPUSH
66591: CALL_OW 69
66595: ST_TO_ADDR
// south_west = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_breastwork ] , [ f_btype , b_bunker ] , [ f_btype , b_turret ] , [ f_btype , b_armoury ] , [ f_btype , b_barracks ] ] , [ f_inarea , player_base_south_west ] ] ) ;
66596: LD_ADDR_VAR 0 3
66600: PUSH
66601: LD_INT 22
66603: PUSH
66604: LD_EXP 2
66608: PUSH
66609: EMPTY
66610: LIST
66611: LIST
66612: PUSH
66613: LD_INT 2
66615: PUSH
66616: LD_INT 30
66618: PUSH
66619: LD_INT 31
66621: PUSH
66622: EMPTY
66623: LIST
66624: LIST
66625: PUSH
66626: LD_INT 30
66628: PUSH
66629: LD_INT 32
66631: PUSH
66632: EMPTY
66633: LIST
66634: LIST
66635: PUSH
66636: LD_INT 30
66638: PUSH
66639: LD_INT 33
66641: PUSH
66642: EMPTY
66643: LIST
66644: LIST
66645: PUSH
66646: LD_INT 30
66648: PUSH
66649: LD_INT 4
66651: PUSH
66652: EMPTY
66653: LIST
66654: LIST
66655: PUSH
66656: LD_INT 30
66658: PUSH
66659: LD_INT 5
66661: PUSH
66662: EMPTY
66663: LIST
66664: LIST
66665: PUSH
66666: EMPTY
66667: LIST
66668: LIST
66669: LIST
66670: LIST
66671: LIST
66672: LIST
66673: PUSH
66674: LD_INT 95
66676: PUSH
66677: LD_INT 32
66679: PUSH
66680: EMPTY
66681: LIST
66682: LIST
66683: PUSH
66684: EMPTY
66685: LIST
66686: LIST
66687: LIST
66688: PPUSH
66689: CALL_OW 69
66693: ST_TO_ADDR
// if south_east + 0 = 0 and south_west + 0 = 0 then
66694: LD_VAR 0 2
66698: PUSH
66699: LD_INT 0
66701: PLUS
66702: PUSH
66703: LD_INT 0
66705: EQUAL
66706: PUSH
66707: LD_VAR 0 3
66711: PUSH
66712: LD_INT 0
66714: PLUS
66715: PUSH
66716: LD_INT 0
66718: EQUAL
66719: AND
66720: IFFALSE 66732
// result = 2 else
66722: LD_ADDR_VAR 0 1
66726: PUSH
66727: LD_INT 2
66729: ST_TO_ADDR
66730: GO 66770
// if south_east + 0 <= south_west + 0 then
66732: LD_VAR 0 2
66736: PUSH
66737: LD_INT 0
66739: PLUS
66740: PUSH
66741: LD_VAR 0 3
66745: PUSH
66746: LD_INT 0
66748: PLUS
66749: LESSEQUAL
66750: IFFALSE 66762
// result = 1 else
66752: LD_ADDR_VAR 0 1
66756: PUSH
66757: LD_INT 1
66759: ST_TO_ADDR
66760: GO 66770
// result = 2 ;
66762: LD_ADDR_VAR 0 1
66766: PUSH
66767: LD_INT 2
66769: ST_TO_ADDR
// end ;
66770: LD_VAR 0 1
66774: RET
// every 0 0$1 + 0 0$0.6 trigger upf_attack_status = 2 do var num_mines , hex_list , safety , hex , i , temp_list , area_list , area_num ; var mine_guy ;
66775: LD_EXP 118
66779: PUSH
66780: LD_INT 2
66782: EQUAL
66783: IFFALSE 67594
66785: GO 66787
66787: DISABLE
66788: LD_INT 0
66790: PPUSH
66791: PPUSH
66792: PPUSH
66793: PPUSH
66794: PPUSH
66795: PPUSH
66796: PPUSH
66797: PPUSH
66798: PPUSH
// begin mine_guy = CreateUnitsWithClass ( 1 , class_soldier , upf ) [ 1 ] ;
66799: LD_ADDR_VAR 0 9
66803: PUSH
66804: LD_INT 1
66806: PPUSH
66807: LD_INT 1
66809: PPUSH
66810: LD_EXP 6
66814: PPUSH
66815: CALL 9322 0 3
66819: PUSH
66820: LD_INT 1
66822: ARRAY
66823: ST_TO_ADDR
// PlaceUnitArea ( mine_guy , enter_area_east , false ) ;
66824: LD_VAR 0 9
66828: PPUSH
66829: LD_INT 1
66831: PPUSH
66832: LD_INT 0
66834: PPUSH
66835: CALL_OW 49
// area_list = [ mine_area_1 , mine_area_2 ] ;
66839: LD_ADDR_VAR 0 7
66843: PUSH
66844: LD_INT 16
66846: PUSH
66847: LD_INT 17
66849: PUSH
66850: EMPTY
66851: LIST
66852: LIST
66853: ST_TO_ADDR
// area_num = 1 ;
66854: LD_ADDR_VAR 0 8
66858: PUSH
66859: LD_INT 1
66861: ST_TO_ADDR
// num_mines = [ [ 0 , 0 ] , [ 12 , 12 ] , [ 15 , 18 ] ] [ difficulty ] ;
66862: LD_ADDR_VAR 0 1
66866: PUSH
66867: LD_INT 0
66869: PUSH
66870: LD_INT 0
66872: PUSH
66873: EMPTY
66874: LIST
66875: LIST
66876: PUSH
66877: LD_INT 12
66879: PUSH
66880: LD_INT 12
66882: PUSH
66883: EMPTY
66884: LIST
66885: LIST
66886: PUSH
66887: LD_INT 15
66889: PUSH
66890: LD_INT 18
66892: PUSH
66893: EMPTY
66894: LIST
66895: LIST
66896: PUSH
66897: EMPTY
66898: LIST
66899: LIST
66900: LIST
66901: PUSH
66902: LD_OWVAR 67
66906: ARRAY
66907: ST_TO_ADDR
// hex_list = [ ] ;
66908: LD_ADDR_VAR 0 2
66912: PUSH
66913: EMPTY
66914: ST_TO_ADDR
// repeat while num_mines [ area_num ] = 0 do
66915: LD_VAR 0 1
66919: PUSH
66920: LD_VAR 0 8
66924: ARRAY
66925: PUSH
66926: LD_INT 0
66928: EQUAL
66929: IFFALSE 66961
// begin area_num = area_num + 1 ;
66931: LD_ADDR_VAR 0 8
66935: PUSH
66936: LD_VAR 0 8
66940: PUSH
66941: LD_INT 1
66943: PLUS
66944: ST_TO_ADDR
// if area_num > area_list then
66945: LD_VAR 0 8
66949: PUSH
66950: LD_VAR 0 7
66954: GREATER
66955: IFFALSE 66959
// break ;
66957: GO 66961
// end ;
66959: GO 66915
// if area_num > area_list then
66961: LD_VAR 0 8
66965: PUSH
66966: LD_VAR 0 7
66970: GREATER
66971: IFFALSE 66975
// break ;
66973: GO 67175
// safety = 0 ;
66975: LD_ADDR_VAR 0 3
66979: PUSH
66980: LD_INT 0
66982: ST_TO_ADDR
// repeat safety = safety + 1 ;
66983: LD_ADDR_VAR 0 3
66987: PUSH
66988: LD_VAR 0 3
66992: PUSH
66993: LD_INT 1
66995: PLUS
66996: ST_TO_ADDR
// hex = RandHexArea ( area_list [ area_num ] , false ) ;
66997: LD_ADDR_VAR 0 4
67001: PUSH
67002: LD_VAR 0 7
67006: PUSH
67007: LD_VAR 0 8
67011: ARRAY
67012: PPUSH
67013: LD_INT 0
67015: PPUSH
67016: CALL_OW 16
67020: ST_TO_ADDR
// until ( not hex in hex_list and HexInfo ( hex [ 1 ] , hex [ 2 ] ) = 0 ) or safety = 10 ;
67021: LD_VAR 0 4
67025: PUSH
67026: LD_VAR 0 2
67030: IN
67031: NOT
67032: PUSH
67033: LD_VAR 0 4
67037: PUSH
67038: LD_INT 1
67040: ARRAY
67041: PPUSH
67042: LD_VAR 0 4
67046: PUSH
67047: LD_INT 2
67049: ARRAY
67050: PPUSH
67051: CALL_OW 428
67055: PUSH
67056: LD_INT 0
67058: EQUAL
67059: AND
67060: PUSH
67061: LD_VAR 0 3
67065: PUSH
67066: LD_INT 10
67068: EQUAL
67069: OR
67070: IFFALSE 66983
// if not hex in hex_list and HexInfo ( hex [ 1 ] , hex [ 2 ] ) = 0 then
67072: LD_VAR 0 4
67076: PUSH
67077: LD_VAR 0 2
67081: IN
67082: NOT
67083: PUSH
67084: LD_VAR 0 4
67088: PUSH
67089: LD_INT 1
67091: ARRAY
67092: PPUSH
67093: LD_VAR 0 4
67097: PUSH
67098: LD_INT 2
67100: ARRAY
67101: PPUSH
67102: CALL_OW 428
67106: PUSH
67107: LD_INT 0
67109: EQUAL
67110: AND
67111: IFFALSE 67134
// hex_list = hex_list ^ [ hex ] else
67113: LD_ADDR_VAR 0 2
67117: PUSH
67118: LD_VAR 0 2
67122: PUSH
67123: LD_VAR 0 4
67127: PUSH
67128: EMPTY
67129: LIST
67130: ADD
67131: ST_TO_ADDR
67132: GO 67136
// break ;
67134: GO 67175
// num_mines = Replace ( num_mines , area_num , num_mines [ area_num ] - 1 ) ;
67136: LD_ADDR_VAR 0 1
67140: PUSH
67141: LD_VAR 0 1
67145: PPUSH
67146: LD_VAR 0 8
67150: PPUSH
67151: LD_VAR 0 1
67155: PUSH
67156: LD_VAR 0 8
67160: ARRAY
67161: PUSH
67162: LD_INT 1
67164: MINUS
67165: PPUSH
67166: CALL_OW 1
67170: ST_TO_ADDR
// until false ;
67171: LD_INT 0
67173: IFFALSE 66915
// while hex_list > 0 and IsLive ( mine_guy ) and upf_attack_status <> 6 do
67175: LD_VAR 0 2
67179: PUSH
67180: LD_INT 0
67182: GREATER
67183: PUSH
67184: LD_VAR 0 9
67188: PPUSH
67189: CALL_OW 300
67193: AND
67194: PUSH
67195: LD_EXP 118
67199: PUSH
67200: LD_INT 6
67202: NONEQUAL
67203: AND
67204: IFFALSE 67528
// begin temp_list = [ ] ;
67206: LD_ADDR_VAR 0 6
67210: PUSH
67211: EMPTY
67212: ST_TO_ADDR
// for i in hex_list do
67213: LD_ADDR_VAR 0 5
67217: PUSH
67218: LD_VAR 0 2
67222: PUSH
67223: FOR_IN
67224: IFFALSE 67267
// temp_list = temp_list ^ GetDistUnitXY ( mine_guy , i [ 1 ] , i [ 2 ] ) ;
67226: LD_ADDR_VAR 0 6
67230: PUSH
67231: LD_VAR 0 6
67235: PUSH
67236: LD_VAR 0 9
67240: PPUSH
67241: LD_VAR 0 5
67245: PUSH
67246: LD_INT 1
67248: ARRAY
67249: PPUSH
67250: LD_VAR 0 5
67254: PUSH
67255: LD_INT 2
67257: ARRAY
67258: PPUSH
67259: CALL_OW 297
67263: ADD
67264: ST_TO_ADDR
67265: GO 67223
67267: POP
67268: POP
// hex = WorstFromListByList ( hex_list , temp_list ) ;
67269: LD_ADDR_VAR 0 4
67273: PUSH
67274: LD_VAR 0 2
67278: PPUSH
67279: LD_VAR 0 6
67283: PPUSH
67284: CALL_OW 78
67288: ST_TO_ADDR
// hex_list = hex_list diff [ hex ] ;
67289: LD_ADDR_VAR 0 2
67293: PUSH
67294: LD_VAR 0 2
67298: PUSH
67299: LD_VAR 0 4
67303: PUSH
67304: EMPTY
67305: LIST
67306: DIFF
67307: ST_TO_ADDR
// repeat if GetDistUnitXY ( mine_guy , hex [ 1 ] , hex [ 2 ] ) > 1 then
67308: LD_VAR 0 9
67312: PPUSH
67313: LD_VAR 0 4
67317: PUSH
67318: LD_INT 1
67320: ARRAY
67321: PPUSH
67322: LD_VAR 0 4
67326: PUSH
67327: LD_INT 2
67329: ARRAY
67330: PPUSH
67331: CALL_OW 297
67335: PUSH
67336: LD_INT 1
67338: GREATER
67339: IFFALSE 67370
// ComAgressiveMove ( mine_guy , hex [ 1 ] , hex [ 2 ] ) else
67341: LD_VAR 0 9
67345: PPUSH
67346: LD_VAR 0 4
67350: PUSH
67351: LD_INT 1
67353: ARRAY
67354: PPUSH
67355: LD_VAR 0 4
67359: PUSH
67360: LD_INT 2
67362: ARRAY
67363: PPUSH
67364: CALL_OW 114
67368: GO 67400
// ComPlaceRemoteCharge ( mine_guy , hex [ 1 ] , hex [ 2 ] , 0 ) ;
67370: LD_VAR 0 9
67374: PPUSH
67375: LD_VAR 0 4
67379: PUSH
67380: LD_INT 1
67382: ARRAY
67383: PPUSH
67384: LD_VAR 0 4
67388: PUSH
67389: LD_INT 2
67391: ARRAY
67392: PPUSH
67393: LD_INT 0
67395: PPUSH
67396: CALL_OW 133
// wait ( 0 0$1 ) ;
67400: LD_INT 35
67402: PPUSH
67403: CALL_OW 67
// until MineOfUnit ( mine_guy ) > 0 or IsDead ( mine_guy ) or upf_attack_status = 6 ;
67407: LD_VAR 0 9
67411: PPUSH
67412: CALL_OW 459
67416: PUSH
67417: LD_INT 0
67419: GREATER
67420: PUSH
67421: LD_VAR 0 9
67425: PPUSH
67426: CALL_OW 301
67430: OR
67431: PUSH
67432: LD_EXP 118
67436: PUSH
67437: LD_INT 6
67439: EQUAL
67440: OR
67441: IFFALSE 67308
// hex = MineOfUnit ( mine_guy ) ;
67443: LD_ADDR_VAR 0 4
67447: PUSH
67448: LD_VAR 0 9
67452: PPUSH
67453: CALL_OW 459
67457: ST_TO_ADDR
// if hex > 0 then
67458: LD_VAR 0 4
67462: PUSH
67463: LD_INT 0
67465: GREATER
67466: IFFALSE 67526
// begin PlaceMine ( hex [ 1 ] , hex [ 2 ] , upf , 0 ) ;
67468: LD_VAR 0 4
67472: PUSH
67473: LD_INT 1
67475: ARRAY
67476: PPUSH
67477: LD_VAR 0 4
67481: PUSH
67482: LD_INT 2
67484: ARRAY
67485: PPUSH
67486: LD_EXP 6
67490: PPUSH
67491: LD_INT 0
67493: PPUSH
67494: CALL_OW 454
// upf_mine_list = upf_mine_list ^ [ hex ] ;
67498: LD_ADDR_EXP 131
67502: PUSH
67503: LD_EXP 131
67507: PUSH
67508: LD_VAR 0 4
67512: PUSH
67513: EMPTY
67514: LIST
67515: ADD
67516: ST_TO_ADDR
// RemoveMineOfUnit ( mine_guy ) ;
67517: LD_VAR 0 9
67521: PPUSH
67522: CALL_OW 460
// end ; end ;
67526: GO 67175
// upf_mines_are_placed = true ;
67528: LD_ADDR_EXP 132
67532: PUSH
67533: LD_INT 1
67535: ST_TO_ADDR
// while IsPlaced ( mine_guy ) do
67536: LD_VAR 0 9
67540: PPUSH
67541: CALL_OW 305
67545: IFFALSE 67594
// begin wait ( 0 0$1 ) ;
67547: LD_INT 35
67549: PPUSH
67550: CALL_OW 67
// if not IsInArea ( mine_guy , enter_area_east ) then
67554: LD_VAR 0 9
67558: PPUSH
67559: LD_INT 1
67561: PPUSH
67562: CALL_OW 308
67566: NOT
67567: IFFALSE 67583
// ComMoveToArea ( mine_guy , enter_area_east ) else
67569: LD_VAR 0 9
67573: PPUSH
67574: LD_INT 1
67576: PPUSH
67577: CALL_OW 113
67581: GO 67592
// DestroyUnit ( mine_guy ) ;
67583: LD_VAR 0 9
67587: PPUSH
67588: CALL_OW 65
// end ;
67592: GO 67536
// end ;
67594: PPOPN 9
67596: END
// every 0 0$1 + 0 0$0.1 trigger upf_mine_list > 0 do var area , i ;
67597: LD_EXP 131
67601: PUSH
67602: LD_INT 0
67604: GREATER
67605: IFFALSE 67791
67607: GO 67609
67609: DISABLE
67610: LD_INT 0
67612: PPUSH
67613: PPUSH
// begin repeat wait ( 0 0$0.7 ) ;
67614: LD_INT 24
67616: PPUSH
67617: CALL_OW 67
// i = 1 ;
67621: LD_ADDR_VAR 0 2
67625: PUSH
67626: LD_INT 1
67628: ST_TO_ADDR
// while i <= upf_mine_list do
67629: LD_VAR 0 2
67633: PUSH
67634: LD_EXP 131
67638: LESSEQUAL
67639: IFFALSE 67765
// begin if GetSide ( HexInfo ( upf_mine_list [ i ] [ 1 ] , upf_mine_list [ i ] [ 2 ] ) ) = you then
67641: LD_EXP 131
67645: PUSH
67646: LD_VAR 0 2
67650: ARRAY
67651: PUSH
67652: LD_INT 1
67654: ARRAY
67655: PPUSH
67656: LD_EXP 131
67660: PUSH
67661: LD_VAR 0 2
67665: ARRAY
67666: PUSH
67667: LD_INT 2
67669: ARRAY
67670: PPUSH
67671: CALL_OW 428
67675: PPUSH
67676: CALL_OW 255
67680: PUSH
67681: LD_EXP 2
67685: EQUAL
67686: IFFALSE 67749
// begin LaunchMineAtPos ( upf_mine_list [ i ] [ 1 ] , upf_mine_list [ i ] [ 2 ] , upf ) ;
67688: LD_EXP 131
67692: PUSH
67693: LD_VAR 0 2
67697: ARRAY
67698: PUSH
67699: LD_INT 1
67701: ARRAY
67702: PPUSH
67703: LD_EXP 131
67707: PUSH
67708: LD_VAR 0 2
67712: ARRAY
67713: PUSH
67714: LD_INT 2
67716: ARRAY
67717: PPUSH
67718: LD_EXP 6
67722: PPUSH
67723: CALL_OW 456
// upf_mine_list = Delete ( upf_mine_list , i ) ;
67727: LD_ADDR_EXP 131
67731: PUSH
67732: LD_EXP 131
67736: PPUSH
67737: LD_VAR 0 2
67741: PPUSH
67742: CALL_OW 3
67746: ST_TO_ADDR
// continue ;
67747: GO 67629
// end ; i = i + 1 ;
67749: LD_ADDR_VAR 0 2
67753: PUSH
67754: LD_VAR 0 2
67758: PUSH
67759: LD_INT 1
67761: PLUS
67762: ST_TO_ADDR
// end ;
67763: GO 67629
// until ( upf_mines_are_placed and upf_mine_list = 0 ) or upf_attack_status = 6 ;
67765: LD_EXP 132
67769: PUSH
67770: LD_EXP 131
67774: PUSH
67775: LD_INT 0
67777: EQUAL
67778: AND
67779: PUSH
67780: LD_EXP 118
67784: PUSH
67785: LD_INT 6
67787: EQUAL
67788: OR
67789: IFFALSE 67614
// end ;
67791: PPOPN 2
67793: END
// every 0 0$1 + 0 0$0.7 trigger upf_attack_status = 2 do var i , temp_list , temp_value , under_attack ; var base ;
67794: LD_EXP 118
67798: PUSH
67799: LD_INT 2
67801: EQUAL
67802: IFFALSE 68452
67804: GO 67806
67806: DISABLE
67807: LD_INT 0
67809: PPUSH
67810: PPUSH
67811: PPUSH
67812: PPUSH
67813: PPUSH
// begin base = 3 ;
67814: LD_ADDR_VAR 0 5
67818: PUSH
67819: LD_INT 3
67821: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
67822: LD_INT 35
67824: PPUSH
67825: CALL_OW 67
// if upf_attack_status = 4 then
67829: LD_EXP 118
67833: PUSH
67834: LD_INT 4
67836: EQUAL
67837: IFFALSE 67841
// continue ;
67839: GO 67822
// for i in upf_mechanics do
67841: LD_ADDR_VAR 0 1
67845: PUSH
67846: LD_EXP 120
67850: PUSH
67851: FOR_IN
67852: IFFALSE 67949
// begin if IsDead ( i ) then
67854: LD_VAR 0 1
67858: PPUSH
67859: CALL_OW 301
67863: IFFALSE 67947
// begin upf_mechanics = upf_mechanics diff i ;
67865: LD_ADDR_EXP 120
67869: PUSH
67870: LD_EXP 120
67874: PUSH
67875: LD_VAR 0 1
67879: DIFF
67880: ST_TO_ADDR
// if upf_mechanic_control_map >= i then
67881: LD_EXP 127
67885: PUSH
67886: LD_VAR 0 1
67890: GREATEREQUAL
67891: IFFALSE 67938
// begin upf_vehicles_control = upf_vehicles_control diff upf_mechanic_control_map [ i ] ;
67893: LD_ADDR_EXP 123
67897: PUSH
67898: LD_EXP 123
67902: PUSH
67903: LD_EXP 127
67907: PUSH
67908: LD_VAR 0 1
67912: ARRAY
67913: DIFF
67914: ST_TO_ADDR
// upf_mechanic_control_map = Replace ( upf_mechanic_control_map , i , 0 ) ;
67915: LD_ADDR_EXP 127
67919: PUSH
67920: LD_EXP 127
67924: PPUSH
67925: LD_VAR 0 1
67929: PPUSH
67930: LD_INT 0
67932: PPUSH
67933: CALL_OW 1
67937: ST_TO_ADDR
// end ; ReallocateAttackVehiclesToOtherMecs ( i ) ;
67938: LD_VAR 0 1
67942: PPUSH
67943: CALL 68455 0 1
// end ; end ;
67947: GO 67851
67949: POP
67950: POP
// under_attack = BaseUnderAttack ( base , - 1 ) ;
67951: LD_ADDR_VAR 0 4
67955: PUSH
67956: LD_VAR 0 5
67960: PPUSH
67961: LD_INT 1
67963: NEG
67964: PPUSH
67965: CALL 28793 0 2
67969: ST_TO_ADDR
// for i in upf_mechanics do
67970: LD_ADDR_VAR 0 1
67974: PUSH
67975: LD_EXP 120
67979: PUSH
67980: FOR_IN
67981: IFFALSE 68419
// begin temp_value = false ;
67983: LD_ADDR_VAR 0 3
67987: PUSH
67988: LD_INT 0
67990: ST_TO_ADDR
// if upf_attack_status in [ 2 , 3 , 5 ] and not under_attack and upf_mechanic_attack_map >= i and upf_mechanic_control_map >= i then
67991: LD_EXP 118
67995: PUSH
67996: LD_INT 2
67998: PUSH
67999: LD_INT 3
68001: PUSH
68002: LD_INT 5
68004: PUSH
68005: EMPTY
68006: LIST
68007: LIST
68008: LIST
68009: IN
68010: PUSH
68011: LD_VAR 0 4
68015: NOT
68016: AND
68017: PUSH
68018: LD_EXP 126
68022: PUSH
68023: LD_VAR 0 1
68027: GREATEREQUAL
68028: AND
68029: PUSH
68030: LD_EXP 127
68034: PUSH
68035: LD_VAR 0 1
68039: GREATEREQUAL
68040: AND
68041: IFFALSE 68205
// begin temp_list = UnitFilter ( upf_mechanic_attack_map [ i ] ^ upf_mechanic_control_map [ i ] , [ f_not , [ f_lives , 1000 ] ] ) ;
68043: LD_ADDR_VAR 0 2
68047: PUSH
68048: LD_EXP 126
68052: PUSH
68053: LD_VAR 0 1
68057: ARRAY
68058: PUSH
68059: LD_EXP 127
68063: PUSH
68064: LD_VAR 0 1
68068: ARRAY
68069: ADD
68070: PPUSH
68071: LD_INT 3
68073: PUSH
68074: LD_INT 24
68076: PUSH
68077: LD_INT 1000
68079: PUSH
68080: EMPTY
68081: LIST
68082: LIST
68083: PUSH
68084: EMPTY
68085: LIST
68086: LIST
68087: PPUSH
68088: CALL_OW 72
68092: ST_TO_ADDR
// if AreUnitsNearArea ( upf_mechanic_attack_map [ i ] , attack_vehicle_area ) and temp_list > 0 then
68093: LD_EXP 126
68097: PUSH
68098: LD_VAR 0 1
68102: ARRAY
68103: PPUSH
68104: LD_INT 13
68106: PPUSH
68107: CALL 68753 0 2
68111: PUSH
68112: LD_VAR 0 2
68116: PUSH
68117: LD_INT 0
68119: GREATER
68120: AND
68121: IFFALSE 68205
// begin case GetType ( IsInUnit ( i ) ) of unit_vehicle :
68123: LD_VAR 0 1
68127: PPUSH
68128: CALL_OW 310
68132: PPUSH
68133: CALL_OW 247
68137: PUSH
68138: LD_INT 2
68140: DOUBLE
68141: EQUAL
68142: IFTRUE 68146
68144: GO 68158
68146: POP
// ComExitVehicle ( i ) ; unit_building :
68147: LD_VAR 0 1
68151: PPUSH
68152: CALL_OW 121
68156: GO 68197
68158: LD_INT 3
68160: DOUBLE
68161: EQUAL
68162: IFTRUE 68166
68164: GO 68178
68166: POP
// ComExitBuilding ( i ) ; else
68167: LD_VAR 0 1
68171: PPUSH
68172: CALL_OW 122
68176: GO 68197
68178: POP
// ComRepairVehicle ( i , temp_list [ 1 ] ) ; end ;
68179: LD_VAR 0 1
68183: PPUSH
68184: LD_VAR 0 2
68188: PUSH
68189: LD_INT 1
68191: ARRAY
68192: PPUSH
68193: CALL_OW 129
// temp_value = true ;
68197: LD_ADDR_VAR 0 3
68201: PUSH
68202: LD_INT 1
68204: ST_TO_ADDR
// end ; end ; if not temp_value then
68205: LD_VAR 0 3
68209: NOT
68210: IFFALSE 68417
// begin temp_value = false ;
68212: LD_ADDR_VAR 0 3
68216: PUSH
68217: LD_INT 0
68219: ST_TO_ADDR
// if upf_mechanic_control_map >= i then
68220: LD_EXP 127
68224: PUSH
68225: LD_VAR 0 1
68229: GREATEREQUAL
68230: IFFALSE 68257
// if IsOk ( upf_mechanic_control_map [ i ] ) then
68232: LD_EXP 127
68236: PUSH
68237: LD_VAR 0 1
68241: ARRAY
68242: PPUSH
68243: CALL_OW 302
68247: IFFALSE 68257
// temp_value = true ;
68249: LD_ADDR_VAR 0 3
68253: PUSH
68254: LD_INT 1
68256: ST_TO_ADDR
// if not temp_value then
68257: LD_VAR 0 3
68261: NOT
68262: IFFALSE 68313
// begin ReallocateAttackVehiclesToOtherMecs ( i ) ;
68264: LD_VAR 0 1
68268: PPUSH
68269: CALL 68455 0 1
// if not IsInArea ( i , enter_area_east ) then
68273: LD_VAR 0 1
68277: PPUSH
68278: LD_INT 1
68280: PPUSH
68281: CALL_OW 308
68285: NOT
68286: IFFALSE 68302
// ComMoveToArea ( i , enter_area_east ) else
68288: LD_VAR 0 1
68292: PPUSH
68293: LD_INT 1
68295: PPUSH
68296: CALL_OW 113
68300: GO 68311
// DestroyUnit ( i ) ;
68302: LD_VAR 0 1
68306: PPUSH
68307: CALL_OW 65
// end else
68311: GO 68417
// begin temp_value = IsInUnit ( i ) ;
68313: LD_ADDR_VAR 0 3
68317: PUSH
68318: LD_VAR 0 1
68322: PPUSH
68323: CALL_OW 310
68327: ST_TO_ADDR
// case GetType ( temp_value ) of unit_building :
68328: LD_VAR 0 3
68332: PPUSH
68333: CALL_OW 247
68337: PUSH
68338: LD_INT 3
68340: DOUBLE
68341: EQUAL
68342: IFTRUE 68346
68344: GO 68358
68346: POP
// ComExitBuilding ( i ) ; unit_vehicle :
68347: LD_VAR 0 1
68351: PPUSH
68352: CALL_OW 122
68356: GO 68417
68358: LD_INT 2
68360: DOUBLE
68361: EQUAL
68362: IFTRUE 68366
68364: GO 68396
68366: POP
// begin if temp_value <> upf_mechanic_control_map [ i ] then
68367: LD_VAR 0 3
68371: PUSH
68372: LD_EXP 127
68376: PUSH
68377: LD_VAR 0 1
68381: ARRAY
68382: NONEQUAL
68383: IFFALSE 68394
// ComExitVehicle ( i ) ;
68385: LD_VAR 0 1
68389: PPUSH
68390: CALL_OW 121
// end ; else
68394: GO 68417
68396: POP
// ComEnterUnit ( i , upf_mechanic_control_map [ i ] ) ; end ;
68397: LD_VAR 0 1
68401: PPUSH
68402: LD_EXP 127
68406: PUSH
68407: LD_VAR 0 1
68411: ARRAY
68412: PPUSH
68413: CALL_OW 120
// end ; end ; end ;
68417: GO 67980
68419: POP
68420: POP
// until upf_attack_status = 6 and UnitFilter ( upf_mechanics , [ f_alive ] ) = 0 ;
68421: LD_EXP 118
68425: PUSH
68426: LD_INT 6
68428: EQUAL
68429: PUSH
68430: LD_EXP 120
68434: PPUSH
68435: LD_INT 51
68437: PUSH
68438: EMPTY
68439: LIST
68440: PPUSH
68441: CALL_OW 72
68445: PUSH
68446: LD_INT 0
68448: EQUAL
68449: AND
68450: IFFALSE 67822
// end ;
68452: PPOPN 5
68454: END
// function ReallocateAttackVehiclesToOtherMecs ( mec ) ; var temp_list , k , num , temp_list_2 , h ; begin
68455: LD_INT 0
68457: PPUSH
68458: PPUSH
68459: PPUSH
68460: PPUSH
68461: PPUSH
68462: PPUSH
// if upf_mechanic_attack_map < mec then
68463: LD_EXP 126
68467: PUSH
68468: LD_VAR 0 1
68472: LESS
68473: IFFALSE 68477
// exit ;
68475: GO 68748
// if upf_mechanic_attack_map [ mec ] = 0 then
68477: LD_EXP 126
68481: PUSH
68482: LD_VAR 0 1
68486: ARRAY
68487: PUSH
68488: LD_INT 0
68490: EQUAL
68491: IFFALSE 68495
// exit ;
68493: GO 68748
// temp_list = upf_mechanic_attack_map [ mec ] ;
68495: LD_ADDR_VAR 0 3
68499: PUSH
68500: LD_EXP 126
68504: PUSH
68505: LD_VAR 0 1
68509: ARRAY
68510: ST_TO_ADDR
// for k in upf_mechanics diff mec do
68511: LD_ADDR_VAR 0 4
68515: PUSH
68516: LD_EXP 120
68520: PUSH
68521: LD_VAR 0 1
68525: DIFF
68526: PUSH
68527: FOR_IN
68528: IFFALSE 68724
// begin if temp_list = 0 then
68530: LD_VAR 0 3
68534: PUSH
68535: LD_INT 0
68537: EQUAL
68538: IFFALSE 68542
// break ;
68540: GO 68724
// if upf_mechanic_attack_map >= k then
68542: LD_EXP 126
68546: PUSH
68547: LD_VAR 0 4
68551: GREATEREQUAL
68552: IFFALSE 68722
// begin num = GetSkill ( k , skill_mechanical ) - upf_mechanic_attack_map [ k ] ;
68554: LD_ADDR_VAR 0 5
68558: PUSH
68559: LD_VAR 0 4
68563: PPUSH
68564: LD_INT 3
68566: PPUSH
68567: CALL_OW 259
68571: PUSH
68572: LD_EXP 126
68576: PUSH
68577: LD_VAR 0 4
68581: ARRAY
68582: MINUS
68583: ST_TO_ADDR
// temp_list_2 = upf_mechanic_attack_map [ k ] ;
68584: LD_ADDR_VAR 0 6
68588: PUSH
68589: LD_EXP 126
68593: PUSH
68594: LD_VAR 0 4
68598: ARRAY
68599: ST_TO_ADDR
// if num >= temp_list then
68600: LD_VAR 0 5
68604: PUSH
68605: LD_VAR 0 3
68609: GREATEREQUAL
68610: IFFALSE 68637
// begin temp_list_2 = temp_list_2 ^ temp_list ;
68612: LD_ADDR_VAR 0 6
68616: PUSH
68617: LD_VAR 0 6
68621: PUSH
68622: LD_VAR 0 3
68626: ADD
68627: ST_TO_ADDR
// temp_list = [ ] ;
68628: LD_ADDR_VAR 0 3
68632: PUSH
68633: EMPTY
68634: ST_TO_ADDR
// end else
68635: GO 68697
// for h = 1 to num do
68637: LD_ADDR_VAR 0 7
68641: PUSH
68642: DOUBLE
68643: LD_INT 1
68645: DEC
68646: ST_TO_ADDR
68647: LD_VAR 0 5
68651: PUSH
68652: FOR_TO
68653: IFFALSE 68695
// begin temp_list_2 = temp_list_2 ^ temp_list [ 1 ] ;
68655: LD_ADDR_VAR 0 6
68659: PUSH
68660: LD_VAR 0 6
68664: PUSH
68665: LD_VAR 0 3
68669: PUSH
68670: LD_INT 1
68672: ARRAY
68673: ADD
68674: ST_TO_ADDR
// temp_list = Delete ( temp_list , 1 ) ;
68675: LD_ADDR_VAR 0 3
68679: PUSH
68680: LD_VAR 0 3
68684: PPUSH
68685: LD_INT 1
68687: PPUSH
68688: CALL_OW 3
68692: ST_TO_ADDR
// end ;
68693: GO 68652
68695: POP
68696: POP
// upf_mechanic_attack_map = Replace ( upf_mechanic_attack_map , k , temp_list_2 ) ;
68697: LD_ADDR_EXP 126
68701: PUSH
68702: LD_EXP 126
68706: PPUSH
68707: LD_VAR 0 4
68711: PPUSH
68712: LD_VAR 0 6
68716: PPUSH
68717: CALL_OW 1
68721: ST_TO_ADDR
// end ; end ;
68722: GO 68527
68724: POP
68725: POP
// upf_mechanic_attack_map = Replace ( upf_mechanic_attack_map , mec , [ ] ) ;
68726: LD_ADDR_EXP 126
68730: PUSH
68731: LD_EXP 126
68735: PPUSH
68736: LD_VAR 0 1
68740: PPUSH
68741: EMPTY
68742: PPUSH
68743: CALL_OW 1
68747: ST_TO_ADDR
// end ;
68748: LD_VAR 0 2
68752: RET
// function AreUnitsNearArea ( list , area ) ; var i ; begin
68753: LD_INT 0
68755: PPUSH
68756: PPUSH
// result = true ;
68757: LD_ADDR_VAR 0 3
68761: PUSH
68762: LD_INT 1
68764: ST_TO_ADDR
// for i in list do
68765: LD_ADDR_VAR 0 4
68769: PUSH
68770: LD_VAR 0 1
68774: PUSH
68775: FOR_IN
68776: IFFALSE 68812
// if GetDistUnitArea ( i , area ) > 3 then
68778: LD_VAR 0 4
68782: PPUSH
68783: LD_VAR 0 2
68787: PPUSH
68788: CALL_OW 299
68792: PUSH
68793: LD_INT 3
68795: GREATER
68796: IFFALSE 68810
// begin result = false ;
68798: LD_ADDR_VAR 0 3
68802: PUSH
68803: LD_INT 0
68805: ST_TO_ADDR
// exit ;
68806: POP
68807: POP
68808: GO 68814
// end ;
68810: GO 68775
68812: POP
68813: POP
// end ;
68814: LD_VAR 0 3
68818: RET
// every 0 0$1 + 0 0$0.8 trigger upf_attack_status = 3 do var vehicle_list , temp_list , temp_list_2 , i ; var base ;
68819: LD_EXP 118
68823: PUSH
68824: LD_INT 3
68826: EQUAL
68827: IFFALSE 69082
68829: GO 68831
68831: DISABLE
68832: LD_INT 0
68834: PPUSH
68835: PPUSH
68836: PPUSH
68837: PPUSH
68838: PPUSH
// begin base = 3 ;
68839: LD_ADDR_VAR 0 5
68843: PUSH
68844: LD_INT 3
68846: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
68847: LD_INT 35
68849: PPUSH
68850: CALL_OW 67
// if upf_attack_status > 3 then
68854: LD_EXP 118
68858: PUSH
68859: LD_INT 3
68861: GREATER
68862: IFFALSE 68866
// exit ;
68864: GO 69082
// vehicle_list = InitialVehicleCheck ;
68866: LD_ADDR_VAR 0 1
68870: PUSH
68871: CALL 66247 0 0
68875: ST_TO_ADDR
// if upf_vehicles_attack = 0 then
68876: LD_EXP 124
68880: PUSH
68881: LD_INT 0
68883: EQUAL
68884: IFFALSE 68888
// continue ;
68886: GO 68847
// if BaseUnderAttack ( base , - 1 ) then
68888: LD_VAR 0 5
68892: PPUSH
68893: LD_INT 1
68895: NEG
68896: PPUSH
68897: CALL 28793 0 2
68901: IFFALSE 69034
// begin temp_list = ListFilterNearArea ( FilterAllUnits ( [ f_enemy , upf ] ) , GetBaseArea ( base ) ) ;
68903: LD_ADDR_VAR 0 2
68907: PUSH
68908: LD_INT 81
68910: PUSH
68911: LD_EXP 6
68915: PUSH
68916: EMPTY
68917: LIST
68918: LIST
68919: PPUSH
68920: CALL_OW 69
68924: PPUSH
68925: LD_VAR 0 5
68929: PPUSH
68930: CALL 15877 0 1
68934: PPUSH
68935: CALL 29377 0 2
68939: ST_TO_ADDR
// if temp_list > 0 then
68940: LD_VAR 0 2
68944: PUSH
68945: LD_INT 0
68947: GREATER
68948: IFFALSE 69032
// begin temp_list_2 = DangerousUnits ( temp_list ) ;
68950: LD_ADDR_VAR 0 3
68954: PUSH
68955: LD_VAR 0 2
68959: PPUSH
68960: CALL 37769 0 1
68964: ST_TO_ADDR
// if temp_list_2 > 0 then
68965: LD_VAR 0 3
68969: PUSH
68970: LD_INT 0
68972: GREATER
68973: IFFALSE 69014
// ComAgressiveMove ( vehicle_list , GetX ( temp_list_2 [ 1 ] ) , GetY ( temp_list_2 [ 1 ] ) ) else
68975: LD_VAR 0 1
68979: PPUSH
68980: LD_VAR 0 3
68984: PUSH
68985: LD_INT 1
68987: ARRAY
68988: PPUSH
68989: CALL_OW 250
68993: PPUSH
68994: LD_VAR 0 3
68998: PUSH
68999: LD_INT 1
69001: ARRAY
69002: PPUSH
69003: CALL_OW 251
69007: PPUSH
69008: CALL_OW 114
69012: GO 69032
// ComAttackUnit ( vehicle_list , temp_list [ 1 ] ) ;
69014: LD_VAR 0 1
69018: PPUSH
69019: LD_VAR 0 2
69023: PUSH
69024: LD_INT 1
69026: ARRAY
69027: PPUSH
69028: CALL_OW 115
// end ; end else
69032: GO 69078
// begin for i in vehicle_list do
69034: LD_ADDR_VAR 0 4
69038: PUSH
69039: LD_VAR 0 1
69043: PUSH
69044: FOR_IN
69045: IFFALSE 69076
// if not IsInArea ( i , attack_vehicle_area ) then
69047: LD_VAR 0 4
69051: PPUSH
69052: LD_INT 13
69054: PPUSH
69055: CALL_OW 308
69059: NOT
69060: IFFALSE 69074
// ComMoveToArea ( i , attack_vehicle_area ) ;
69062: LD_VAR 0 4
69066: PPUSH
69067: LD_INT 13
69069: PPUSH
69070: CALL_OW 113
69074: GO 69044
69076: POP
69077: POP
// end ; until false ;
69078: LD_INT 0
69080: IFFALSE 68847
// end ;
69082: PPOPN 5
69084: END
// every 0 0$1 + 0 0$0.9 trigger upf_attack_status = 6 do var vehicle_list , i ;
69085: LD_EXP 118
69089: PUSH
69090: LD_INT 6
69092: EQUAL
69093: IFFALSE 69343
69095: GO 69097
69097: DISABLE
69098: LD_INT 0
69100: PPUSH
69101: PPUSH
// begin repeat wait ( 0 0$1 ) ;
69102: LD_INT 35
69104: PPUSH
69105: CALL_OW 67
// vehicle_list = InitialVehicleCheck ;
69109: LD_ADDR_VAR 0 1
69113: PUSH
69114: CALL 66247 0 0
69118: ST_TO_ADDR
// upf_vehicles_attack = UnitFilter ( upf_vehicles_attack , [ f_ok ] ) ;
69119: LD_ADDR_EXP 124
69123: PUSH
69124: LD_EXP 124
69128: PPUSH
69129: LD_INT 50
69131: PUSH
69132: EMPTY
69133: LIST
69134: PPUSH
69135: CALL_OW 72
69139: ST_TO_ADDR
// vehicle_list = UnitFilter ( vehicle_list , [ f_ok ] ) ;
69140: LD_ADDR_VAR 0 1
69144: PUSH
69145: LD_VAR 0 1
69149: PPUSH
69150: LD_INT 50
69152: PUSH
69153: EMPTY
69154: LIST
69155: PPUSH
69156: CALL_OW 72
69160: ST_TO_ADDR
// if upf_vehicles_attack = 0 then
69161: LD_EXP 124
69165: PUSH
69166: LD_INT 0
69168: EQUAL
69169: IFFALSE 69173
// break ;
69171: GO 69232
// for i in vehicle_list do
69173: LD_ADDR_VAR 0 2
69177: PUSH
69178: LD_VAR 0 1
69182: PUSH
69183: FOR_IN
69184: IFFALSE 69226
// if not IsInArea ( i , enter_area_east ) then
69186: LD_VAR 0 2
69190: PPUSH
69191: LD_INT 1
69193: PPUSH
69194: CALL_OW 308
69198: NOT
69199: IFFALSE 69215
// ComMoveToArea ( i , enter_area_east ) else
69201: LD_VAR 0 2
69205: PPUSH
69206: LD_INT 1
69208: PPUSH
69209: CALL_OW 113
69213: GO 69224
// DestroyUnit ( i ) ;
69215: LD_VAR 0 2
69219: PPUSH
69220: CALL_OW 65
69224: GO 69183
69226: POP
69227: POP
// until false ;
69228: LD_INT 0
69230: IFFALSE 69102
// repeat wait ( 0 0$1 ) ;
69232: LD_INT 35
69234: PPUSH
69235: CALL_OW 67
// if upf_vehicles_control = 0 then
69239: LD_EXP 123
69243: PUSH
69244: LD_INT 0
69246: EQUAL
69247: IFFALSE 69251
// break ;
69249: GO 69343
// for i in upf_vehicles_control do
69251: LD_ADDR_VAR 0 2
69255: PUSH
69256: LD_EXP 123
69260: PUSH
69261: FOR_IN
69262: IFFALSE 69337
// if not IsInArea ( i , enter_area_east ) then
69264: LD_VAR 0 2
69268: PPUSH
69269: LD_INT 1
69271: PPUSH
69272: CALL_OW 308
69276: NOT
69277: IFFALSE 69293
// ComMoveToArea ( i , enter_area_east ) else
69279: LD_VAR 0 2
69283: PPUSH
69284: LD_INT 1
69286: PPUSH
69287: CALL_OW 113
69291: GO 69335
// begin if UnitsInside ( i ) > 0 then
69293: LD_VAR 0 2
69297: PPUSH
69298: CALL_OW 313
69302: PUSH
69303: LD_INT 0
69305: GREATER
69306: IFFALSE 69326
// DestroyUnit ( UnitsInside ( i ) [ 1 ] ) ;
69308: LD_VAR 0 2
69312: PPUSH
69313: CALL_OW 313
69317: PUSH
69318: LD_INT 1
69320: ARRAY
69321: PPUSH
69322: CALL_OW 65
// DestroyUnit ( i ) ;
69326: LD_VAR 0 2
69330: PPUSH
69331: CALL_OW 65
// end ;
69335: GO 69261
69337: POP
69338: POP
// until false ;
69339: LD_INT 0
69341: IFFALSE 69232
// end ;
69343: PPOPN 2
69345: END
// every 0 0$1 + 0 0$0.2 trigger upf_attack_status = 6 do var i ;
69346: LD_EXP 118
69350: PUSH
69351: LD_INT 6
69353: EQUAL
69354: IFFALSE 69559
69356: GO 69358
69358: DISABLE
69359: LD_INT 0
69361: PPUSH
// begin repeat wait ( 0 0$1 ) ;
69362: LD_INT 35
69364: PPUSH
69365: CALL_OW 67
// for i in UnitFilter ( upf_soldiers_west ^ upf_scientists_west , [ f_alive ] ) do
69369: LD_ADDR_VAR 0 1
69373: PUSH
69374: LD_EXP 121
69378: PUSH
69379: LD_EXP 129
69383: ADD
69384: PPUSH
69385: LD_INT 51
69387: PUSH
69388: EMPTY
69389: LIST
69390: PPUSH
69391: CALL_OW 72
69395: PUSH
69396: FOR_IN
69397: IFFALSE 69439
// if not IsInArea ( i , upf_enter_north_west ) then
69399: LD_VAR 0 1
69403: PPUSH
69404: LD_INT 15
69406: PPUSH
69407: CALL_OW 308
69411: NOT
69412: IFFALSE 69428
// ComMoveToArea ( i , upf_enter_north_west ) else
69414: LD_VAR 0 1
69418: PPUSH
69419: LD_INT 15
69421: PPUSH
69422: CALL_OW 113
69426: GO 69437
// DestroyUnit ( i ) ;
69428: LD_VAR 0 1
69432: PPUSH
69433: CALL_OW 65
69437: GO 69396
69439: POP
69440: POP
// wait ( 0 0$0.3 ) ;
69441: LD_INT 10
69443: PPUSH
69444: CALL_OW 67
// for i in UnitFilter ( upf_soldiers_east ^ upf_scientists_east , [ f_alive ] ) do
69448: LD_ADDR_VAR 0 1
69452: PUSH
69453: LD_EXP 122
69457: PUSH
69458: LD_EXP 130
69462: ADD
69463: PPUSH
69464: LD_INT 51
69466: PUSH
69467: EMPTY
69468: LIST
69469: PPUSH
69470: CALL_OW 72
69474: PUSH
69475: FOR_IN
69476: IFFALSE 69518
// if not IsInArea ( i , upf_enter_north_east ) then
69478: LD_VAR 0 1
69482: PPUSH
69483: LD_INT 14
69485: PPUSH
69486: CALL_OW 308
69490: NOT
69491: IFFALSE 69507
// ComMoveToArea ( i , upf_enter_north_east ) else
69493: LD_VAR 0 1
69497: PPUSH
69498: LD_INT 14
69500: PPUSH
69501: CALL_OW 113
69505: GO 69516
// DestroyUnit ( i ) ;
69507: LD_VAR 0 1
69511: PPUSH
69512: CALL_OW 65
69516: GO 69475
69518: POP
69519: POP
// until UnitFilter ( upf_soldiers_west ^ upf_soldiers_east ^ upf_scientists_west ^ upf_scientists_east , [ f_alive ] ) = 0 ;
69520: LD_EXP 121
69524: PUSH
69525: LD_EXP 122
69529: ADD
69530: PUSH
69531: LD_EXP 129
69535: ADD
69536: PUSH
69537: LD_EXP 130
69541: ADD
69542: PPUSH
69543: LD_INT 51
69545: PUSH
69546: EMPTY
69547: LIST
69548: PPUSH
69549: CALL_OW 72
69553: PUSH
69554: LD_INT 0
69556: EQUAL
69557: IFFALSE 69362
// end ;
69559: PPOPN 1
69561: END
// every 0 0$1 + 0 0$0.1 do
69562: GO 69564
69564: DISABLE
// begin repeat wait ( 0 0$1 ) ;
69565: LD_INT 35
69567: PPUSH
69568: CALL_OW 67
// if upf_attack_status = 6 then
69572: LD_EXP 118
69576: PUSH
69577: LD_INT 6
69579: EQUAL
69580: IFFALSE 69584
// exit ;
69582: GO 69602
// until kill_gensher_objective_status = 2 ;
69584: LD_EXP 109
69588: PUSH
69589: LD_INT 2
69591: EQUAL
69592: IFFALSE 69565
// upf_attack_status = 6 ;
69594: LD_ADDR_EXP 118
69598: PUSH
69599: LD_INT 6
69601: ST_TO_ADDR
// end ; end_of_file
69602: END
// every 0 0$1 + 0 0$0.2 trigger buildup_objective_can_be_completed and player_base_b_types = 0 and am_scientists_escape_status = 2 and player_has_seen_am_labs_explode and americans_retreat and upf_attack_status = 6 and not sib_rocket_fired do
69603: LD_EXP 95
69607: PUSH
69608: LD_EXP 94
69612: PUSH
69613: LD_INT 0
69615: EQUAL
69616: AND
69617: PUSH
69618: LD_EXP 111
69622: PUSH
69623: LD_INT 2
69625: EQUAL
69626: AND
69627: PUSH
69628: LD_EXP 115
69632: AND
69633: PUSH
69634: LD_EXP 116
69638: AND
69639: PUSH
69640: LD_EXP 118
69644: PUSH
69645: LD_INT 6
69647: EQUAL
69648: AND
69649: PUSH
69650: LD_EXP 117
69654: NOT
69655: AND
69656: IFFALSE 69672
69658: GO 69660
69660: DISABLE
// begin Wait ( 0 0$0.5 ) ;
69661: LD_INT 18
69663: PPUSH
69664: CALL_OW 67
// EndMission ;
69668: CALL 69673 0 0
// end ;
69672: END
// function EndMission ; var val , all_list , un_list , name_list ; var fast2 , i , temp_list ; begin
69673: LD_INT 0
69675: PPUSH
69676: PPUSH
69677: PPUSH
69678: PPUSH
69679: PPUSH
69680: PPUSH
69681: PPUSH
69682: PPUSH
// if scientist_escaped then
69683: LD_EXP 112
69687: IFFALSE 69700
// val = - 1 else
69689: LD_ADDR_VAR 0 2
69693: PUSH
69694: LD_INT 1
69696: NEG
69697: ST_TO_ADDR
69698: GO 69708
// val = 1 ;
69700: LD_ADDR_VAR 0 2
69704: PUSH
69705: LD_INT 1
69707: ST_TO_ADDR
// AddMedal ( AmScisEscape , val ) ;
69708: LD_STRING AmScisEscape
69710: PPUSH
69711: LD_VAR 0 2
69715: PPUSH
69716: CALL_OW 101
// if kill_gensher_objective_status = 2 then
69720: LD_EXP 109
69724: PUSH
69725: LD_INT 2
69727: EQUAL
69728: IFFALSE 69740
// val = 1 else
69730: LD_ADDR_VAR 0 2
69734: PUSH
69735: LD_INT 1
69737: ST_TO_ADDR
69738: GO 69749
// val = - 1 ;
69740: LD_ADDR_VAR 0 2
69744: PUSH
69745: LD_INT 1
69747: NEG
69748: ST_TO_ADDR
// AddMedal ( GensherEliminate , val ) ;
69749: LD_STRING GensherEliminate
69751: PPUSH
69752: LD_VAR 0 2
69756: PPUSH
69757: CALL_OW 101
// if am_reinforcements_start and am_reinforcements_time <= 0 0$0 then
69761: LD_EXP 104
69765: PUSH
69766: LD_EXP 103
69770: PUSH
69771: LD_INT 0
69773: LESSEQUAL
69774: AND
69775: IFFALSE 69824
// begin if am_reinforcements_got_through then
69777: LD_EXP 113
69781: IFFALSE 69794
// val = - 1 else
69783: LD_ADDR_VAR 0 2
69787: PUSH
69788: LD_INT 1
69790: NEG
69791: ST_TO_ADDR
69792: GO 69802
// val = 1 ;
69794: LD_ADDR_VAR 0 2
69798: PUSH
69799: LD_INT 1
69801: ST_TO_ADDR
// AddMedal ( AmReinforcements , val ) ;
69802: LD_STRING AmReinforcements
69804: PPUSH
69805: LD_VAR 0 2
69809: PPUSH
69810: CALL_OW 101
// fast2 = false ;
69814: LD_ADDR_VAR 0 6
69818: PUSH
69819: LD_INT 0
69821: ST_TO_ADDR
// end else
69822: GO 69842
// begin AddMedal ( DamnYouAreFast , 1 ) ;
69824: LD_STRING DamnYouAreFast
69826: PPUSH
69827: LD_INT 1
69829: PPUSH
69830: CALL_OW 101
// fast2 = true ;
69834: LD_ADDR_VAR 0 6
69838: PUSH
69839: LD_INT 1
69841: ST_TO_ADDR
// end ; GiveMedals ( Medals ) ;
69842: LD_STRING Medals
69844: PPUSH
69845: CALL_OW 102
// SaveVariable ( khattam_choice in [ 0 , 3 ] , Khattam_trusted_13a_cont ) ;
69849: LD_EXP 96
69853: PUSH
69854: LD_INT 0
69856: PUSH
69857: LD_INT 3
69859: PUSH
69860: EMPTY
69861: LIST
69862: LIST
69863: IN
69864: PPUSH
69865: LD_STRING Khattam_trusted_13a_cont
69867: PPUSH
69868: CALL_OW 39
// SaveVariable ( khattam_choice = 2 , Khattam_exiled_13a_cont ) ;
69872: LD_EXP 96
69876: PUSH
69877: LD_INT 2
69879: EQUAL
69880: PPUSH
69881: LD_STRING Khattam_exiled_13a_cont
69883: PPUSH
69884: CALL_OW 39
// SaveVariable ( khattam_choice = 1 , Khattam_killed_13a_cont ) ;
69888: LD_EXP 96
69892: PUSH
69893: LD_INT 1
69895: EQUAL
69896: PPUSH
69897: LD_STRING Khattam_killed_13a_cont
69899: PPUSH
69900: CALL_OW 39
// SaveVariable ( upf_deserter_choice in [ 0 , 3 ] , UPF_deserter_trusted_13a_cont ) ;
69904: LD_EXP 100
69908: PUSH
69909: LD_INT 0
69911: PUSH
69912: LD_INT 3
69914: PUSH
69915: EMPTY
69916: LIST
69917: LIST
69918: IN
69919: PPUSH
69920: LD_STRING UPF_deserter_trusted_13a_cont
69922: PPUSH
69923: CALL_OW 39
// SaveVariable ( upf_deserter_choice = 2 , UPF_deserter_exiled_13a_cont ) ;
69927: LD_EXP 100
69931: PUSH
69932: LD_INT 2
69934: EQUAL
69935: PPUSH
69936: LD_STRING UPF_deserter_exiled_13a_cont
69938: PPUSH
69939: CALL_OW 39
// SaveVariable ( upf_deserter_choice = 1 , UPF_deserter_killed_13a_cont ) ;
69943: LD_EXP 100
69947: PUSH
69948: LD_INT 1
69950: EQUAL
69951: PPUSH
69952: LD_STRING UPF_deserter_killed_13a_cont
69954: PPUSH
69955: CALL_OW 39
// SaveVariable ( scientist_escaped , Am_scientists_escaped_13a_cont ) ;
69959: LD_EXP 112
69963: PPUSH
69964: LD_STRING Am_scientists_escaped_13a_cont
69966: PPUSH
69967: CALL_OW 39
// SaveVariable ( am_reinforcements_got_through , Am_reinforcements_got_through_13a_cont ) ;
69971: LD_EXP 113
69975: PPUSH
69976: LD_STRING Am_reinforcements_got_through_13a_cont
69978: PPUSH
69979: CALL_OW 39
// SaveVariable ( fast2 , Am_reinforcements_never_spawned_13a_cont ) ;
69983: LD_VAR 0 6
69987: PPUSH
69988: LD_STRING Am_reinforcements_never_spawned_13a_cont
69990: PPUSH
69991: CALL_OW 39
// SaveVariable ( freelancers_bombing_start , Freelancers_betray_Heike_13a_cont ) ;
69995: LD_EXP 105
69999: PPUSH
70000: LD_STRING Freelancers_betray_Heike_13a_cont
70002: PPUSH
70003: CALL_OW 39
// SaveVariable ( freelancers_choice = 2 or louis_gordon_dispute_choice = 1 or freelancers_second_choice = 2 , Freelancers_sent_away_13a_cont ) ;
70007: LD_EXP 98
70011: PUSH
70012: LD_INT 2
70014: EQUAL
70015: PUSH
70016: LD_EXP 102
70020: PUSH
70021: LD_INT 1
70023: EQUAL
70024: OR
70025: PUSH
70026: LD_EXP 108
70030: PUSH
70031: LD_INT 2
70033: EQUAL
70034: OR
70035: PPUSH
70036: LD_STRING Freelancers_sent_away_13a_cont
70038: PPUSH
70039: CALL_OW 39
// SaveVariable ( freelancers_second_choice = 1 , Freelancers_killed_13a_cont ) ;
70043: LD_EXP 108
70047: PUSH
70048: LD_INT 1
70050: EQUAL
70051: PPUSH
70052: LD_STRING Freelancers_killed_13a_cont
70054: PPUSH
70055: CALL_OW 39
// SaveVariable ( not louis_gone , Louis_stays_13a_cont ) ;
70059: LD_EXP 114
70063: NOT
70064: PPUSH
70065: LD_STRING Louis_stays_13a_cont
70067: PPUSH
70068: CALL_OW 39
// SaveVariable ( ListEnvironmentArea ( whole_map_area ) , Environment_13a_cont ) ;
70072: LD_INT 26
70074: PPUSH
70075: CALL_OW 353
70079: PPUSH
70080: LD_STRING Environment_13a_cont
70082: PPUSH
70083: CALL_OW 39
// temp_list = [ ] ;
70087: LD_ADDR_VAR 0 8
70091: PUSH
70092: EMPTY
70093: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] ] ) do
70094: LD_ADDR_VAR 0 7
70098: PUSH
70099: LD_INT 22
70101: PUSH
70102: LD_EXP 2
70106: PUSH
70107: EMPTY
70108: LIST
70109: LIST
70110: PUSH
70111: LD_INT 21
70113: PUSH
70114: LD_INT 3
70116: PUSH
70117: EMPTY
70118: LIST
70119: LIST
70120: PUSH
70121: EMPTY
70122: LIST
70123: LIST
70124: PPUSH
70125: CALL_OW 69
70129: PUSH
70130: FOR_IN
70131: IFFALSE 70249
// temp_list = Insert ( temp_list , 1 , [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , GetBWeapon ( i ) , GetNation ( i ) ] ) ;
70133: LD_ADDR_VAR 0 8
70137: PUSH
70138: LD_VAR 0 8
70142: PPUSH
70143: LD_INT 1
70145: PPUSH
70146: LD_VAR 0 7
70150: PPUSH
70151: CALL_OW 250
70155: PUSH
70156: LD_VAR 0 7
70160: PPUSH
70161: CALL_OW 251
70165: PUSH
70166: LD_VAR 0 7
70170: PPUSH
70171: CALL_OW 254
70175: PUSH
70176: LD_VAR 0 7
70180: PPUSH
70181: CALL_OW 266
70185: PUSH
70186: LD_VAR 0 7
70190: PPUSH
70191: LD_INT 1
70193: PPUSH
70194: CALL_OW 268
70198: PUSH
70199: LD_VAR 0 7
70203: PPUSH
70204: LD_INT 2
70206: PPUSH
70207: CALL_OW 268
70211: PUSH
70212: LD_VAR 0 7
70216: PPUSH
70217: CALL_OW 269
70221: PUSH
70222: LD_VAR 0 7
70226: PPUSH
70227: CALL_OW 248
70231: PUSH
70232: EMPTY
70233: LIST
70234: LIST
70235: LIST
70236: LIST
70237: LIST
70238: LIST
70239: LIST
70240: LIST
70241: PPUSH
70242: CALL_OW 2
70246: ST_TO_ADDR
70247: GO 70130
70249: POP
70250: POP
// SaveVariable ( temp_list , Player_buildings_13a_cont ) ;
70251: LD_VAR 0 8
70255: PPUSH
70256: LD_STRING Player_buildings_13a_cont
70258: PPUSH
70259: CALL_OW 39
// all_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_alive ] ] ) diff GetApes ( you ) ;
70263: LD_ADDR_VAR 0 3
70267: PUSH
70268: LD_INT 22
70270: PUSH
70271: LD_EXP 2
70275: PUSH
70276: EMPTY
70277: LIST
70278: LIST
70279: PUSH
70280: LD_INT 21
70282: PUSH
70283: LD_INT 1
70285: PUSH
70286: EMPTY
70287: LIST
70288: LIST
70289: PUSH
70290: LD_INT 51
70292: PUSH
70293: EMPTY
70294: LIST
70295: PUSH
70296: EMPTY
70297: LIST
70298: LIST
70299: LIST
70300: PPUSH
70301: CALL_OW 69
70305: PUSH
70306: LD_EXP 2
70310: PPUSH
70311: CALL 40185 0 1
70315: DIFF
70316: ST_TO_ADDR
// RewardPeople ( all_list ) ;
70317: LD_VAR 0 3
70321: PPUSH
70322: CALL_OW 43
// SaveCharacters ( Heike , Heike_13a_cont ) ;
70326: LD_EXP 7
70330: PPUSH
70331: LD_STRING Heike_13a_cont
70333: PPUSH
70334: CALL_OW 38
// un_list = [ Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt ] ;
70338: LD_ADDR_VAR 0 4
70342: PUSH
70343: LD_EXP 8
70347: PUSH
70348: LD_EXP 9
70352: PUSH
70353: LD_EXP 10
70357: PUSH
70358: LD_EXP 11
70362: PUSH
70363: LD_EXP 12
70367: PUSH
70368: LD_EXP 13
70372: PUSH
70373: LD_EXP 14
70377: PUSH
70378: LD_EXP 15
70382: PUSH
70383: EMPTY
70384: LIST
70385: LIST
70386: LIST
70387: LIST
70388: LIST
70389: LIST
70390: LIST
70391: LIST
70392: ST_TO_ADDR
// name_list = [ Olaf , Sonya , Oswald , Ralph , Kowalski , Suze , MarkB , Kurt ] ;
70393: LD_ADDR_VAR 0 5
70397: PUSH
70398: LD_STRING Olaf
70400: PUSH
70401: LD_STRING Sonya
70403: PUSH
70404: LD_STRING Oswald
70406: PUSH
70407: LD_STRING Ralph
70409: PUSH
70410: LD_STRING Kowalski
70412: PUSH
70413: LD_STRING Suze
70415: PUSH
70416: LD_STRING MarkB
70418: PUSH
70419: LD_STRING Kurt
70421: PUSH
70422: EMPTY
70423: LIST
70424: LIST
70425: LIST
70426: LIST
70427: LIST
70428: LIST
70429: LIST
70430: LIST
70431: ST_TO_ADDR
// for val = 1 to un_list do
70432: LD_ADDR_VAR 0 2
70436: PUSH
70437: DOUBLE
70438: LD_INT 1
70440: DEC
70441: ST_TO_ADDR
70442: LD_VAR 0 4
70446: PUSH
70447: FOR_TO
70448: IFFALSE 70500
// if un_list [ val ] in all_list then
70450: LD_VAR 0 4
70454: PUSH
70455: LD_VAR 0 2
70459: ARRAY
70460: PUSH
70461: LD_VAR 0 3
70465: IN
70466: IFFALSE 70498
// SaveCharacters ( un_list [ val ] , name_list [ val ] & _13a_cont ) ;
70468: LD_VAR 0 4
70472: PUSH
70473: LD_VAR 0 2
70477: ARRAY
70478: PPUSH
70479: LD_VAR 0 5
70483: PUSH
70484: LD_VAR 0 2
70488: ARRAY
70489: PUSH
70490: LD_STRING _13a_cont
70492: STR
70493: PPUSH
70494: CALL_OW 38
70498: GO 70447
70500: POP
70501: POP
// SaveCharacters ( all_list diff ( GetMainPlayerCharacters ^ other_louis_folks ^ other_freelancers ) , Others_13a_cont ) ;
70502: LD_VAR 0 3
70506: PUSH
70507: CALL 40269 0 0
70511: PUSH
70512: LD_EXP 20
70516: ADD
70517: PUSH
70518: LD_EXP 26
70522: ADD
70523: DIFF
70524: PPUSH
70525: LD_STRING Others_13a_cont
70527: PPUSH
70528: CALL_OW 38
// if GetLives ( Khattam ) > 0 then
70532: LD_EXP 18
70536: PPUSH
70537: CALL_OW 256
70541: PUSH
70542: LD_INT 0
70544: GREATER
70545: IFFALSE 70559
// SaveCharacters ( Khattam , Khattam_13a_cont ) ;
70547: LD_EXP 18
70551: PPUSH
70552: LD_STRING Khattam_13a_cont
70554: PPUSH
70555: CALL_OW 38
// if GetLives ( upf_deserter ) > 0 then
70559: LD_EXP 19
70563: PPUSH
70564: CALL_OW 256
70568: PUSH
70569: LD_INT 0
70571: GREATER
70572: IFFALSE 70586
// SaveCharacters ( upf_deserter , upf_deserter_13a_cont ) ;
70574: LD_EXP 19
70578: PPUSH
70579: LD_STRING upf_deserter_13a_cont
70581: PPUSH
70582: CALL_OW 38
// if GetLives ( Louis ) > 0 then
70586: LD_EXP 17
70590: PPUSH
70591: CALL_OW 256
70595: PUSH
70596: LD_INT 0
70598: GREATER
70599: IFFALSE 70613
// SaveCharacters ( Louis , Louis_13a_cont ) ;
70601: LD_EXP 17
70605: PPUSH
70606: LD_STRING Louis_13a_cont
70608: PPUSH
70609: CALL_OW 38
// if GetLives ( Martin ) > 0 then
70613: LD_EXP 16
70617: PPUSH
70618: CALL_OW 256
70622: PUSH
70623: LD_INT 0
70625: GREATER
70626: IFFALSE 70640
// SaveCharacters ( Martin , Martin_13a_cont ) ;
70628: LD_EXP 16
70632: PPUSH
70633: LD_STRING Martin_13a_cont
70635: PPUSH
70636: CALL_OW 38
// SaveCharacters ( UnitFilter ( other_louis_folks , [ f_lives , 1 ] ) , Other_louis_folks_13a_cont ) ;
70640: LD_EXP 20
70644: PPUSH
70645: LD_INT 24
70647: PUSH
70648: LD_INT 1
70650: PUSH
70651: EMPTY
70652: LIST
70653: LIST
70654: PPUSH
70655: CALL_OW 72
70659: PPUSH
70660: LD_STRING Other_louis_folks_13a_cont
70662: PPUSH
70663: CALL_OW 38
// if GetLives ( Gensher ) > 0 then
70667: LD_EXP 21
70671: PPUSH
70672: CALL_OW 256
70676: PUSH
70677: LD_INT 0
70679: GREATER
70680: IFFALSE 70694
// SaveCharacters ( Gensher , Gensher_13a_cont ) ;
70682: LD_EXP 21
70686: PPUSH
70687: LD_STRING Gensher_13a_cont
70689: PPUSH
70690: CALL_OW 38
// SaveCharacters ( Heinz , Heinz_13a_cont ) ;
70694: LD_EXP 22
70698: PPUSH
70699: LD_STRING Heinz_13a_cont
70701: PPUSH
70702: CALL_OW 38
// if GetLives ( Gordon ) > 0 then
70706: LD_EXP 23
70710: PPUSH
70711: CALL_OW 256
70715: PUSH
70716: LD_INT 0
70718: GREATER
70719: IFFALSE 70733
// SaveCharacters ( Gordon , Gordon_13a_cont ) ;
70721: LD_EXP 23
70725: PPUSH
70726: LD_STRING Gordon_13a_cont
70728: PPUSH
70729: CALL_OW 38
// if GetLives ( Willard ) > 0 then
70733: LD_EXP 24
70737: PPUSH
70738: CALL_OW 256
70742: PUSH
70743: LD_INT 0
70745: GREATER
70746: IFFALSE 70760
// SaveCharacters ( Willard , Willard_13a_cont ) ;
70748: LD_EXP 24
70752: PPUSH
70753: LD_STRING Willard_13a_cont
70755: PPUSH
70756: CALL_OW 38
// SaveCharacters ( UnitFilter ( other_freelancers , [ f_lives , 1 ] ) , Other_freelancers_13a_cont ) ;
70760: LD_EXP 26
70764: PPUSH
70765: LD_INT 24
70767: PUSH
70768: LD_INT 1
70770: PUSH
70771: EMPTY
70772: LIST
70773: LIST
70774: PPUSH
70775: CALL_OW 72
70779: PPUSH
70780: LD_STRING Other_freelancers_13a_cont
70782: PPUSH
70783: CALL_OW 38
// if GetLives ( Hugh ) > 0 then
70787: LD_EXP 28
70791: PPUSH
70792: CALL_OW 256
70796: PUSH
70797: LD_INT 0
70799: GREATER
70800: IFFALSE 70814
// SaveCharacters ( Hugh , Hugh_13a_cont ) ;
70802: LD_EXP 28
70806: PPUSH
70807: LD_STRING Hugh_13a_cont
70809: PPUSH
70810: CALL_OW 38
// YouWin ;
70814: CALL_OW 103
// end ;
70818: LD_VAR 0 1
70822: RET
