// export testing ; export you , russians , nature , you_alt , americans , scout_side , americans_alt ; export Heike , Sonya , Oswald , Ralph , Kowalski , Evelyn , Suze , Olaf , Kurt , Dwayne , MarkB , Aviradze , Swansson , Gonzo ; export Gensher ; export Simms , Cornell , Khattam , Joan , Powell ; 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 ; 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_excepted_buildings , ai_new_attack_commencing ; export ai_crane , 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_captured_buildings , ai_vehicles_being_repaired ; export oswald_is_substitute , kurt_is_substitute , original_gensher_people , russian_attack_strategy , special_russian_attackers ; export yashin_alive , num_russian_attacks , gensher_spec_research_progress , game_phase , first_teleport , camera_engineers ; export cameras_placed , scout_event_over , russians_allowed_to_attack_gensher_time , saved_gensher_people , khattam_choice ; export russian_interference_points , camera_engineers_task_map ; starting begin RandomizeAll ;
   0: CALL_OW 11
// ResetFog ;
   4: CALL_OW 335
// testing = false ;
   8: LD_ADDR_EXP 1
  12: PUSH
  13: LD_INT 0
  15: ST_TO_ADDR
// ai_bases = [ 1 , 2 , 3 ] ;
  16: LD_ADDR_EXP 58
  20: PUSH
  21: LD_INT 1
  23: PUSH
  24: LD_INT 2
  26: PUSH
  27: LD_INT 3
  29: PUSH
  30: EMPTY
  31: LIST
  32: LIST
  33: LIST
  34: ST_TO_ADDR
// ai_soldiers = [ [ ] , [ ] , [ ] ] ;
  35: LD_ADDR_EXP 29
  39: PUSH
  40: EMPTY
  41: PUSH
  42: EMPTY
  43: PUSH
  44: EMPTY
  45: PUSH
  46: EMPTY
  47: LIST
  48: LIST
  49: LIST
  50: ST_TO_ADDR
// ai_attacking_soldiers = [ [ ] , [ ] , [ ] ] ;
  51: LD_ADDR_EXP 63
  55: PUSH
  56: EMPTY
  57: PUSH
  58: EMPTY
  59: PUSH
  60: EMPTY
  61: PUSH
  62: EMPTY
  63: LIST
  64: LIST
  65: LIST
  66: ST_TO_ADDR
// ai_engineers = [ [ ] , [ ] , [ ] ] ;
  67: LD_ADDR_EXP 30
  71: PUSH
  72: EMPTY
  73: PUSH
  74: EMPTY
  75: PUSH
  76: EMPTY
  77: PUSH
  78: EMPTY
  79: LIST
  80: LIST
  81: LIST
  82: ST_TO_ADDR
// ai_mechanics_defend = [ [ ] , [ ] , [ ] ] ;
  83: LD_ADDR_EXP 31
  87: PUSH
  88: EMPTY
  89: PUSH
  90: EMPTY
  91: PUSH
  92: EMPTY
  93: PUSH
  94: EMPTY
  95: LIST
  96: LIST
  97: LIST
  98: ST_TO_ADDR
// ai_scientists = [ [ ] , [ ] , [ ] ] ;
  99: LD_ADDR_EXP 32
 103: PUSH
 104: EMPTY
 105: PUSH
 106: EMPTY
 107: PUSH
 108: EMPTY
 109: PUSH
 110: EMPTY
 111: LIST
 112: LIST
 113: LIST
 114: ST_TO_ADDR
// ai_attacking_scientists = [ [ ] , [ ] , [ ] ] ;
 115: LD_ADDR_EXP 64
 119: PUSH
 120: EMPTY
 121: PUSH
 122: EMPTY
 123: PUSH
 124: EMPTY
 125: PUSH
 126: EMPTY
 127: LIST
 128: LIST
 129: LIST
 130: ST_TO_ADDR
// ai_apemen_engineers = [ [ ] , [ ] , [ ] ] ;
 131: LD_ADDR_EXP 62
 135: PUSH
 136: EMPTY
 137: PUSH
 138: EMPTY
 139: PUSH
 140: EMPTY
 141: PUSH
 142: EMPTY
 143: LIST
 144: LIST
 145: LIST
 146: ST_TO_ADDR
// ai_depot = [ 0 , 0 , 0 ] ;
 147: LD_ADDR_EXP 34
 151: PUSH
 152: LD_INT 0
 154: PUSH
 155: LD_INT 0
 157: PUSH
 158: LD_INT 0
 160: PUSH
 161: EMPTY
 162: LIST
 163: LIST
 164: LIST
 165: ST_TO_ADDR
// ai_labs = [ [ ] , [ ] , [ ] ] ;
 166: LD_ADDR_EXP 35
 170: PUSH
 171: EMPTY
 172: PUSH
 173: EMPTY
 174: PUSH
 175: EMPTY
 176: PUSH
 177: EMPTY
 178: LIST
 179: LIST
 180: LIST
 181: ST_TO_ADDR
// ai_facts = [ [ ] , [ ] , [ ] ] ;
 182: LD_ADDR_EXP 47
 186: PUSH
 187: EMPTY
 188: PUSH
 189: EMPTY
 190: PUSH
 191: EMPTY
 192: PUSH
 193: EMPTY
 194: LIST
 195: LIST
 196: LIST
 197: ST_TO_ADDR
// ai_armouries = [ [ ] , [ ] , [ ] ] ;
 198: LD_ADDR_EXP 48
 202: PUSH
 203: EMPTY
 204: PUSH
 205: EMPTY
 206: PUSH
 207: EMPTY
 208: PUSH
 209: EMPTY
 210: LIST
 211: LIST
 212: LIST
 213: ST_TO_ADDR
// ai_bunkers = [ [ ] , [ ] , [ ] ] ;
 214: LD_ADDR_EXP 49
 218: PUSH
 219: EMPTY
 220: PUSH
 221: EMPTY
 222: PUSH
 223: EMPTY
 224: PUSH
 225: EMPTY
 226: LIST
 227: LIST
 228: LIST
 229: ST_TO_ADDR
// ai_turrets = [ [ ] , [ ] , [ ] ] ;
 230: LD_ADDR_EXP 55
 234: PUSH
 235: EMPTY
 236: PUSH
 237: EMPTY
 238: PUSH
 239: EMPTY
 240: PUSH
 241: EMPTY
 242: LIST
 243: LIST
 244: LIST
 245: ST_TO_ADDR
// ai_oil_mine = [ 0 , 0 , 0 ] ;
 246: LD_ADDR_EXP 50
 250: PUSH
 251: LD_INT 0
 253: PUSH
 254: LD_INT 0
 256: PUSH
 257: LD_INT 0
 259: PUSH
 260: EMPTY
 261: LIST
 262: LIST
 263: LIST
 264: ST_TO_ADDR
// ai_siberite_mines = [ [ ] , [ ] , [ ] ] ;
 265: LD_ADDR_EXP 36
 269: PUSH
 270: EMPTY
 271: PUSH
 272: EMPTY
 273: PUSH
 274: EMPTY
 275: PUSH
 276: EMPTY
 277: LIST
 278: LIST
 279: LIST
 280: ST_TO_ADDR
// ai_fact_extensions = [ [ ] , [ ] , [ ] ] ;
 281: LD_ADDR_EXP 51
 285: PUSH
 286: EMPTY
 287: PUSH
 288: EMPTY
 289: PUSH
 290: EMPTY
 291: PUSH
 292: EMPTY
 293: LIST
 294: LIST
 295: LIST
 296: ST_TO_ADDR
// ai_power_plants = [ [ ] , [ ] , [ ] ] ;
 297: LD_ADDR_EXP 37
 301: PUSH
 302: EMPTY
 303: PUSH
 304: EMPTY
 305: PUSH
 306: EMPTY
 307: PUSH
 308: EMPTY
 309: LIST
 310: LIST
 311: LIST
 312: ST_TO_ADDR
// ai_control_tower = [ 0 , 0 , 0 ] ;
 313: LD_ADDR_EXP 56
 317: PUSH
 318: LD_INT 0
 320: PUSH
 321: LD_INT 0
 323: PUSH
 324: LD_INT 0
 326: PUSH
 327: EMPTY
 328: LIST
 329: LIST
 330: LIST
 331: ST_TO_ADDR
// ai_buildings_locations = [ [ ] , [ ] , [ ] ] ;
 332: LD_ADDR_EXP 38
 336: PUSH
 337: EMPTY
 338: PUSH
 339: EMPTY
 340: PUSH
 341: EMPTY
 342: PUSH
 343: EMPTY
 344: LIST
 345: LIST
 346: LIST
 347: ST_TO_ADDR
// ai_captured_buildings = [ [ ] , [ ] , [ ] ] ;
 348: LD_ADDR_EXP 78
 352: PUSH
 353: EMPTY
 354: PUSH
 355: EMPTY
 356: PUSH
 357: EMPTY
 358: PUSH
 359: EMPTY
 360: LIST
 361: LIST
 362: LIST
 363: ST_TO_ADDR
// ai_vehicles_defend = [ [ ] , [ ] , [ ] ] ;
 364: LD_ADDR_EXP 39
 368: PUSH
 369: EMPTY
 370: PUSH
 371: EMPTY
 372: PUSH
 373: EMPTY
 374: PUSH
 375: EMPTY
 376: LIST
 377: LIST
 378: LIST
 379: ST_TO_ADDR
// ai_vehicles_attack = [ [ ] , [ ] , [ ] ] ;
 380: LD_ADDR_EXP 40
 384: PUSH
 385: EMPTY
 386: PUSH
 387: EMPTY
 388: PUSH
 389: EMPTY
 390: PUSH
 391: EMPTY
 392: LIST
 393: LIST
 394: LIST
 395: ST_TO_ADDR
// ai_vehicles_being_repaired = [ [ ] , [ ] , [ ] ] ;
 396: LD_ADDR_EXP 79
 400: PUSH
 401: EMPTY
 402: PUSH
 403: EMPTY
 404: PUSH
 405: EMPTY
 406: PUSH
 407: EMPTY
 408: LIST
 409: LIST
 410: LIST
 411: ST_TO_ADDR
// ai_refuel_vehicles_list = [ [ ] , [ ] , [ ] ] ;
 412: LD_ADDR_EXP 54
 416: PUSH
 417: EMPTY
 418: PUSH
 419: EMPTY
 420: PUSH
 421: EMPTY
 422: PUSH
 423: EMPTY
 424: LIST
 425: LIST
 426: LIST
 427: ST_TO_ADDR
// ai_human_pullback_hex = [ [ 106 , 40 ] , [ 75 , 22 ] , [ 60 , 81 ] ] ;
 428: LD_ADDR_EXP 41
 432: PUSH
 433: LD_INT 106
 435: PUSH
 436: LD_INT 40
 438: PUSH
 439: EMPTY
 440: LIST
 441: LIST
 442: PUSH
 443: LD_INT 75
 445: PUSH
 446: LD_INT 22
 448: PUSH
 449: EMPTY
 450: LIST
 451: LIST
 452: PUSH
 453: LD_INT 60
 455: PUSH
 456: LD_INT 81
 458: PUSH
 459: EMPTY
 460: LIST
 461: LIST
 462: PUSH
 463: EMPTY
 464: LIST
 465: LIST
 466: LIST
 467: ST_TO_ADDR
// ai_building_under_construction = [ 0 , 0 , 0 ] ;
 468: LD_ADDR_EXP 42
 472: PUSH
 473: LD_INT 0
 475: PUSH
 476: LD_INT 0
 478: PUSH
 479: LD_INT 0
 481: PUSH
 482: EMPTY
 483: LIST
 484: LIST
 485: LIST
 486: ST_TO_ADDR
// ai_heal_these_humans = [ [ ] , [ ] , [ ] ] ;
 487: LD_ADDR_EXP 43
 491: PUSH
 492: EMPTY
 493: PUSH
 494: EMPTY
 495: PUSH
 496: EMPTY
 497: PUSH
 498: EMPTY
 499: LIST
 500: LIST
 501: LIST
 502: ST_TO_ADDR
// ai_all_buildings = [ [ ] , [ ] , [ ] ] ;
 503: LD_ADDR_EXP 44
 507: PUSH
 508: EMPTY
 509: PUSH
 510: EMPTY
 511: PUSH
 512: EMPTY
 513: PUSH
 514: EMPTY
 515: LIST
 516: LIST
 517: LIST
 518: ST_TO_ADDR
// ai_building_constructor = [ 0 , 0 , 0 ] ;
 519: LD_ADDR_EXP 45
 523: PUSH
 524: LD_INT 0
 526: PUSH
 527: LD_INT 0
 529: PUSH
 530: LD_INT 0
 532: PUSH
 533: EMPTY
 534: LIST
 535: LIST
 536: LIST
 537: ST_TO_ADDR
// ai_upcoming_building_data = [ [ ] , [ ] , [ ] ] ;
 538: LD_ADDR_EXP 46
 542: PUSH
 543: EMPTY
 544: PUSH
 545: EMPTY
 546: PUSH
 547: EMPTY
 548: PUSH
 549: EMPTY
 550: LIST
 551: LIST
 552: LIST
 553: ST_TO_ADDR
// ai_near_base_dist = 18 ;
 554: LD_ADDR_EXP 52
 558: PUSH
 559: LD_INT 18
 561: ST_TO_ADDR
// ai_vehicle_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
 562: LD_ADDR_EXP 57
 566: PUSH
 567: LD_INT 0
 569: PUSH
 570: LD_INT 0
 572: PUSH
 573: LD_INT 0
 575: PUSH
 576: EMPTY
 577: LIST
 578: LIST
 579: LIST
 580: ST_TO_ADDR
// ai_human_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
 581: LD_ADDR_EXP 67
 585: PUSH
 586: LD_INT 0
 588: PUSH
 589: LD_INT 0
 591: PUSH
 592: LD_INT 0
 594: PUSH
 595: EMPTY
 596: LIST
 597: LIST
 598: LIST
 599: ST_TO_ADDR
// ai_cargo_bay = [ 0 , 0 , 0 ] ;
 600: LD_ADDR_EXP 60
 604: PUSH
 605: LD_INT 0
 607: PUSH
 608: LD_INT 0
 610: PUSH
 611: LD_INT 0
 613: PUSH
 614: EMPTY
 615: LIST
 616: LIST
 617: LIST
 618: ST_TO_ADDR
// ai_cargo_bay_under_construction = [ false , false , false ] ;
 619: LD_ADDR_EXP 61
 623: PUSH
 624: LD_INT 0
 626: PUSH
 627: LD_INT 0
 629: PUSH
 630: LD_INT 0
 632: PUSH
 633: EMPTY
 634: LIST
 635: LIST
 636: LIST
 637: ST_TO_ADDR
// ai_crane = [ 0 , 0 , 0 ] ;
 638: LD_ADDR_EXP 70
 642: PUSH
 643: LD_INT 0
 645: PUSH
 646: LD_INT 0
 648: PUSH
 649: LD_INT 0
 651: PUSH
 652: EMPTY
 653: LIST
 654: LIST
 655: LIST
 656: ST_TO_ADDR
// ai_attacking_unit_hex_index = [ [ ] , [ ] , [ ] ] ;
 657: LD_ADDR_EXP 74
 661: PUSH
 662: EMPTY
 663: PUSH
 664: EMPTY
 665: PUSH
 666: EMPTY
 667: PUSH
 668: EMPTY
 669: LIST
 670: LIST
 671: LIST
 672: ST_TO_ADDR
// ai_retreating_attacking_humans = [ [ ] , [ ] , [ ] ] ;
 673: LD_ADDR_EXP 66
 677: PUSH
 678: EMPTY
 679: PUSH
 680: EMPTY
 681: PUSH
 682: EMPTY
 683: PUSH
 684: EMPTY
 685: LIST
 686: LIST
 687: LIST
 688: ST_TO_ADDR
// ai_excepted_buildings = [ [ ] , [ ] , [ ] ] ;
 689: LD_ADDR_EXP 68
 693: PUSH
 694: EMPTY
 695: PUSH
 696: EMPTY
 697: PUSH
 698: EMPTY
 699: PUSH
 700: EMPTY
 701: LIST
 702: LIST
 703: LIST
 704: ST_TO_ADDR
// ai_new_attack_commencing = [ false , false , false ] ;
 705: LD_ADDR_EXP 69
 709: PUSH
 710: LD_INT 0
 712: PUSH
 713: LD_INT 0
 715: PUSH
 716: LD_INT 0
 718: PUSH
 719: EMPTY
 720: LIST
 721: LIST
 722: LIST
 723: ST_TO_ADDR
// ai_time_shift_data = [ [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] ] ;
 724: LD_ADDR_EXP 71
 728: PUSH
 729: EMPTY
 730: PUSH
 731: EMPTY
 732: PUSH
 733: EMPTY
 734: PUSH
 735: EMPTY
 736: PUSH
 737: EMPTY
 738: PUSH
 739: EMPTY
 740: PUSH
 741: EMPTY
 742: PUSH
 743: EMPTY
 744: PUSH
 745: EMPTY
 746: LIST
 747: LIST
 748: LIST
 749: LIST
 750: LIST
 751: LIST
 752: LIST
 753: LIST
 754: ST_TO_ADDR
// ai_time_shift_hexes = [ [ ] , [ ] , [ ] ] ;
 755: LD_ADDR_EXP 72
 759: PUSH
 760: EMPTY
 761: PUSH
 762: EMPTY
 763: PUSH
 764: EMPTY
 765: PUSH
 766: EMPTY
 767: LIST
 768: LIST
 769: LIST
 770: ST_TO_ADDR
// ai_time_shift_hexes_underway = [ [ ] , [ ] , [ ] ] ;
 771: LD_ADDR_EXP 73
 775: PUSH
 776: EMPTY
 777: PUSH
 778: EMPTY
 779: PUSH
 780: EMPTY
 781: PUSH
 782: EMPTY
 783: LIST
 784: LIST
 785: LIST
 786: ST_TO_ADDR
// Initiate_ai_contact_time ;
 787: CALL 989 0 0
// ai_attack_ground_info_initial = [ ] ;
 791: LD_ADDR_EXP 76
 795: PUSH
 796: EMPTY
 797: ST_TO_ADDR
// ai_attack_ground_info_sustain = [ ] ;
 798: LD_ADDR_EXP 77
 802: PUSH
 803: EMPTY
 804: ST_TO_ADDR
// oswald_is_substitute = false ;
 805: LD_ADDR_EXP 80
 809: PUSH
 810: LD_INT 0
 812: ST_TO_ADDR
// kurt_is_substitute = false ;
 813: LD_ADDR_EXP 81
 817: PUSH
 818: LD_INT 0
 820: ST_TO_ADDR
// original_gensher_people = [ ] ;
 821: LD_ADDR_EXP 82
 825: PUSH
 826: EMPTY
 827: ST_TO_ADDR
// russian_attack_strategy = - 1 ;
 828: LD_ADDR_EXP 83
 832: PUSH
 833: LD_INT 1
 835: NEG
 836: ST_TO_ADDR
// special_russian_attackers = [ ] ;
 837: LD_ADDR_EXP 84
 841: PUSH
 842: EMPTY
 843: ST_TO_ADDR
// yashin_alive = TestCharacters ( Yashin_08 ) ;
 844: LD_ADDR_EXP 85
 848: PUSH
 849: LD_STRING Yashin_08
 851: PPUSH
 852: CALL_OW 28
 856: ST_TO_ADDR
// num_russian_attacks = 0 ;
 857: LD_ADDR_EXP 86
 861: PUSH
 862: LD_INT 0
 864: ST_TO_ADDR
// gensher_spec_research_progress = 0 ;
 865: LD_ADDR_EXP 87
 869: PUSH
 870: LD_INT 0
 872: ST_TO_ADDR
// game_phase = 1 ;
 873: LD_ADDR_EXP 88
 877: PUSH
 878: LD_INT 1
 880: ST_TO_ADDR
// first_teleport = true ;
 881: LD_ADDR_EXP 89
 885: PUSH
 886: LD_INT 1
 888: ST_TO_ADDR
// camera_engineers = [ ] ;
 889: LD_ADDR_EXP 90
 893: PUSH
 894: EMPTY
 895: ST_TO_ADDR
// cameras_placed = false ;
 896: LD_ADDR_EXP 91
 900: PUSH
 901: LD_INT 0
 903: ST_TO_ADDR
// scout_event_over = false ;
 904: LD_ADDR_EXP 92
 908: PUSH
 909: LD_INT 0
 911: ST_TO_ADDR
// russians_allowed_to_attack_gensher_time = [ 20 20$0 , 15 15$0 , 10 10$0 ] [ difficulty ] ;
 912: LD_ADDR_EXP 93
 916: PUSH
 917: LD_INT 42000
 919: PUSH
 920: LD_INT 31500
 922: PUSH
 923: LD_INT 21000
 925: PUSH
 926: EMPTY
 927: LIST
 928: LIST
 929: LIST
 930: PUSH
 931: LD_OWVAR 67
 935: ARRAY
 936: ST_TO_ADDR
// saved_gensher_people = [ ] ;
 937: LD_ADDR_EXP 94
 941: PUSH
 942: EMPTY
 943: ST_TO_ADDR
// khattam_choice = 0 ;
 944: LD_ADDR_EXP 95
 948: PUSH
 949: LD_INT 0
 951: ST_TO_ADDR
// russian_interference_points = 0 ;
 952: LD_ADDR_EXP 96
 956: PUSH
 957: LD_INT 0
 959: ST_TO_ADDR
// PrepareSides ;
 960: CALL 1270 0 0
// PrepareNature ;
 964: CALL 1723 0 0
// PrepareArabians ;
 968: CALL 2183 0 0
// ScanBuildings ;
 972: CALL 4973 0 0
// PrepareComputerSides ;
 976: CALL 7460 0 0
// InitiateTimeShiftData ;
 980: CALL 1073 0 0
// Action ;
 984: CALL 8989 0 0
// end ;
 988: END
// function Initiate_ai_contact_time ; var i ; begin
 989: LD_INT 0
 991: PPUSH
 992: PPUSH
// ai_contact_time = [ ] ;
 993: LD_ADDR_EXP 75
 997: PUSH
 998: EMPTY
 999: ST_TO_ADDR
// for i = 1 to 8 do
1000: LD_ADDR_VAR 0 2
1004: PUSH
1005: DOUBLE
1006: LD_INT 1
1008: DEC
1009: ST_TO_ADDR
1010: LD_INT 8
1012: PUSH
1013: FOR_TO
1014: IFFALSE 1066
// ai_contact_time = ai_contact_time ^ [ [ 100000 , 100000 , 100000 , 100000 , 100000 , 100000 , 100000 , 100000 ] ] ;
1016: LD_ADDR_EXP 75
1020: PUSH
1021: LD_EXP 75
1025: PUSH
1026: LD_INT 100000
1028: PUSH
1029: LD_INT 100000
1031: PUSH
1032: LD_INT 100000
1034: PUSH
1035: LD_INT 100000
1037: PUSH
1038: LD_INT 100000
1040: PUSH
1041: LD_INT 100000
1043: PUSH
1044: LD_INT 100000
1046: PUSH
1047: LD_INT 100000
1049: PUSH
1050: EMPTY
1051: LIST
1052: LIST
1053: LIST
1054: LIST
1055: LIST
1056: LIST
1057: LIST
1058: LIST
1059: PUSH
1060: EMPTY
1061: LIST
1062: ADD
1063: ST_TO_ADDR
1064: GO 1013
1066: POP
1067: POP
// end ;
1068: LD_VAR 0 1
1072: RET
// function InitiateTimeShiftData ; var side ; begin
1073: LD_INT 0
1075: PPUSH
1076: PPUSH
// for side = 1 to 8 do
1077: LD_ADDR_VAR 0 2
1081: PUSH
1082: DOUBLE
1083: LD_INT 1
1085: DEC
1086: ST_TO_ADDR
1087: LD_INT 8
1089: PUSH
1090: FOR_TO
1091: IFFALSE 1263
// if Researched ( side , tech_st3 ) then
1093: LD_VAR 0 2
1097: PPUSH
1098: LD_INT 65
1100: PPUSH
1101: CALL_OW 325
1105: IFFALSE 1139
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 420 , 10 ] ) else
1107: LD_ADDR_EXP 71
1111: PUSH
1112: LD_EXP 71
1116: PPUSH
1117: LD_VAR 0 2
1121: PPUSH
1122: LD_INT 420
1124: PUSH
1125: LD_INT 10
1127: PUSH
1128: EMPTY
1129: LIST
1130: LIST
1131: PPUSH
1132: CALL_OW 1
1136: ST_TO_ADDR
1137: GO 1261
// if Researched ( side , tech_st2 ) then
1139: LD_VAR 0 2
1143: PPUSH
1144: LD_INT 64
1146: PPUSH
1147: CALL_OW 325
1151: IFFALSE 1185
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 420 , 10 ] ) else
1153: LD_ADDR_EXP 71
1157: PUSH
1158: LD_EXP 71
1162: PPUSH
1163: LD_VAR 0 2
1167: PPUSH
1168: LD_INT 420
1170: PUSH
1171: LD_INT 10
1173: PUSH
1174: EMPTY
1175: LIST
1176: LIST
1177: PPUSH
1178: CALL_OW 1
1182: ST_TO_ADDR
1183: GO 1261
// if Researched ( side , tech_st1 ) then
1185: LD_VAR 0 2
1189: PPUSH
1190: LD_INT 63
1192: PPUSH
1193: CALL_OW 325
1197: IFFALSE 1231
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 320 , 7 ] ) else
1199: LD_ADDR_EXP 71
1203: PUSH
1204: LD_EXP 71
1208: PPUSH
1209: LD_VAR 0 2
1213: PPUSH
1214: LD_INT 320
1216: PUSH
1217: LD_INT 7
1219: PUSH
1220: EMPTY
1221: LIST
1222: LIST
1223: PPUSH
1224: CALL_OW 1
1228: ST_TO_ADDR
1229: GO 1261
// ai_time_shift_data = Replace ( ai_time_shift_data , side , [ 215 , 4 ] ) ;
1231: LD_ADDR_EXP 71
1235: PUSH
1236: LD_EXP 71
1240: PPUSH
1241: LD_VAR 0 2
1245: PPUSH
1246: LD_INT 215
1248: PUSH
1249: LD_INT 4
1251: PUSH
1252: EMPTY
1253: LIST
1254: LIST
1255: PPUSH
1256: CALL_OW 1
1260: ST_TO_ADDR
1261: GO 1090
1263: POP
1264: POP
// end ;
1265: LD_VAR 0 1
1269: RET
// function PrepareSides ; begin
1270: LD_INT 0
1272: PPUSH
// nature = 0 ;
1273: LD_ADDR_EXP 4
1277: PUSH
1278: LD_INT 0
1280: ST_TO_ADDR
// americans = 1 ;
1281: LD_ADDR_EXP 6
1285: PUSH
1286: LD_INT 1
1288: ST_TO_ADDR
// you = 2 ;
1289: LD_ADDR_EXP 2
1293: PUSH
1294: LD_INT 2
1296: ST_TO_ADDR
// russians = 3 ;
1297: LD_ADDR_EXP 3
1301: PUSH
1302: LD_INT 3
1304: ST_TO_ADDR
// americans_alt = 4 ;
1305: LD_ADDR_EXP 8
1309: PUSH
1310: LD_INT 4
1312: ST_TO_ADDR
// you_alt = 5 ;
1313: LD_ADDR_EXP 5
1317: PUSH
1318: LD_INT 5
1320: ST_TO_ADDR
// scout_side = 8 ;
1321: LD_ADDR_EXP 7
1325: PUSH
1326: LD_INT 8
1328: ST_TO_ADDR
// SetAttitude ( americans , you , att_enemy , true ) ;
1329: LD_EXP 6
1333: PPUSH
1334: LD_EXP 2
1338: PPUSH
1339: LD_INT 2
1341: PPUSH
1342: LD_INT 1
1344: PPUSH
1345: CALL_OW 80
// SetAttitude ( americans , russians , att_enemy , true ) ;
1349: LD_EXP 6
1353: PPUSH
1354: LD_EXP 3
1358: PPUSH
1359: LD_INT 2
1361: PPUSH
1362: LD_INT 1
1364: PPUSH
1365: CALL_OW 80
// SetAttitude ( americans , americans_alt , att_friend , true ) ;
1369: LD_EXP 6
1373: PPUSH
1374: LD_EXP 8
1378: PPUSH
1379: LD_INT 1
1381: PPUSH
1382: LD_INT 1
1384: PPUSH
1385: CALL_OW 80
// SetAttitude ( americans , you_alt , att_friend , true ) ;
1389: LD_EXP 6
1393: PPUSH
1394: LD_EXP 5
1398: PPUSH
1399: LD_INT 1
1401: PPUSH
1402: LD_INT 1
1404: PPUSH
1405: CALL_OW 80
// SetAttitude ( americans , scout_side , att_friend , true ) ;
1409: LD_EXP 6
1413: PPUSH
1414: LD_EXP 7
1418: PPUSH
1419: LD_INT 1
1421: PPUSH
1422: LD_INT 1
1424: PPUSH
1425: CALL_OW 80
// SetAttitude ( you , russians , att_enemy , true ) ;
1429: LD_EXP 2
1433: PPUSH
1434: LD_EXP 3
1438: PPUSH
1439: LD_INT 2
1441: PPUSH
1442: LD_INT 1
1444: PPUSH
1445: CALL_OW 80
// SetAttitude ( you , americans_alt , att_enemy , true ) ;
1449: LD_EXP 2
1453: PPUSH
1454: LD_EXP 8
1458: PPUSH
1459: LD_INT 2
1461: PPUSH
1462: LD_INT 1
1464: PPUSH
1465: CALL_OW 80
// SetAttitude ( you , you_alt , att_friend , true ) ;
1469: LD_EXP 2
1473: PPUSH
1474: LD_EXP 5
1478: PPUSH
1479: LD_INT 1
1481: PPUSH
1482: LD_INT 1
1484: PPUSH
1485: CALL_OW 80
// SetAttitude ( you , scout_side , att_friend , true ) ;
1489: LD_EXP 2
1493: PPUSH
1494: LD_EXP 7
1498: PPUSH
1499: LD_INT 1
1501: PPUSH
1502: LD_INT 1
1504: PPUSH
1505: CALL_OW 80
// SetAttitude ( russians , americans_alt , att_enemy , true ) ;
1509: LD_EXP 3
1513: PPUSH
1514: LD_EXP 8
1518: PPUSH
1519: LD_INT 2
1521: PPUSH
1522: LD_INT 1
1524: PPUSH
1525: CALL_OW 80
// SetAttitude ( russians , you_alt , att_enemy , true ) ;
1529: LD_EXP 3
1533: PPUSH
1534: LD_EXP 5
1538: PPUSH
1539: LD_INT 2
1541: PPUSH
1542: LD_INT 1
1544: PPUSH
1545: CALL_OW 80
// SetAttitude ( russians , scout_side , att_friend , true ) ;
1549: LD_EXP 3
1553: PPUSH
1554: LD_EXP 7
1558: PPUSH
1559: LD_INT 1
1561: PPUSH
1562: LD_INT 1
1564: PPUSH
1565: CALL_OW 80
// SetAttitude ( americans_alt , you_alt , att_enemy , true ) ;
1569: LD_EXP 8
1573: PPUSH
1574: LD_EXP 5
1578: PPUSH
1579: LD_INT 2
1581: PPUSH
1582: LD_INT 1
1584: PPUSH
1585: CALL_OW 80
// SetAttitude ( americans_alt , scout_side , att_friend , true ) ;
1589: LD_EXP 8
1593: PPUSH
1594: LD_EXP 7
1598: PPUSH
1599: LD_INT 1
1601: PPUSH
1602: LD_INT 1
1604: PPUSH
1605: CALL_OW 80
// SetAttitude ( you_alt , scout_side , att_friend , true ) ;
1609: LD_EXP 5
1613: PPUSH
1614: LD_EXP 7
1618: PPUSH
1619: LD_INT 1
1621: PPUSH
1622: LD_INT 1
1624: PPUSH
1625: CALL_OW 80
// ChangeSideFog ( you_alt , you ) ;
1629: LD_EXP 5
1633: PPUSH
1634: LD_EXP 2
1638: PPUSH
1639: CALL_OW 343
// if difficulty = 3 then
1643: LD_OWVAR 67
1647: PUSH
1648: LD_INT 3
1650: EQUAL
1651: IFFALSE 1668
// SetTech ( tech_opto1 , americans , state_researched ) ;
1653: LD_INT 60
1655: PPUSH
1656: LD_EXP 6
1660: PPUSH
1661: LD_INT 2
1663: PPUSH
1664: CALL_OW 322
// if difficulty = 3 then
1668: LD_OWVAR 67
1672: PUSH
1673: LD_INT 3
1675: EQUAL
1676: IFFALSE 1693
// SetTech ( tech_comp3 , russians , state_researched ) ;
1678: LD_INT 59
1680: PPUSH
1681: LD_EXP 3
1685: PPUSH
1686: LD_INT 2
1688: PPUSH
1689: CALL_OW 322
// if difficulty = 3 then
1693: LD_OWVAR 67
1697: PUSH
1698: LD_INT 3
1700: EQUAL
1701: IFFALSE 1718
// SetTech ( tech_st3 , russians , state_researched ) ;
1703: LD_INT 65
1705: PPUSH
1706: LD_EXP 3
1710: PPUSH
1711: LD_INT 2
1713: PPUSH
1714: CALL_OW 322
// end ;
1718: LD_VAR 0 1
1722: RET
// function PrepareNature ; var i , spots , num , agres , count , temp_unit ; begin
1723: LD_INT 0
1725: PPUSH
1726: PPUSH
1727: PPUSH
1728: PPUSH
1729: PPUSH
1730: PPUSH
1731: PPUSH
// for i in FilterAllUnits ( [ f_side , nature ] ) do
1732: LD_ADDR_VAR 0 2
1736: PUSH
1737: LD_INT 22
1739: PUSH
1740: LD_EXP 4
1744: PUSH
1745: EMPTY
1746: LIST
1747: LIST
1748: PPUSH
1749: CALL_OW 69
1753: PUSH
1754: FOR_IN
1755: IFFALSE 1768
// DestroyUnit ( i ) ;
1757: LD_VAR 0 2
1761: PPUSH
1762: CALL_OW 65
1766: GO 1754
1768: POP
1769: POP
// spots = [ [ 158 , 91 ] , [ 140 , 107 ] , [ 37 , 27 ] , [ 22 , 4 ] , [ 38 , 10 ] , [ 50 , 23 ] , [ 40 , 20 ] ] ;
1770: LD_ADDR_VAR 0 3
1774: PUSH
1775: LD_INT 158
1777: PUSH
1778: LD_INT 91
1780: PUSH
1781: EMPTY
1782: LIST
1783: LIST
1784: PUSH
1785: LD_INT 140
1787: PUSH
1788: LD_INT 107
1790: PUSH
1791: EMPTY
1792: LIST
1793: LIST
1794: PUSH
1795: LD_INT 37
1797: PUSH
1798: LD_INT 27
1800: PUSH
1801: EMPTY
1802: LIST
1803: LIST
1804: PUSH
1805: LD_INT 22
1807: PUSH
1808: LD_INT 4
1810: PUSH
1811: EMPTY
1812: LIST
1813: LIST
1814: PUSH
1815: LD_INT 38
1817: PUSH
1818: LD_INT 10
1820: PUSH
1821: EMPTY
1822: LIST
1823: LIST
1824: PUSH
1825: LD_INT 50
1827: PUSH
1828: LD_INT 23
1830: PUSH
1831: EMPTY
1832: LIST
1833: LIST
1834: PUSH
1835: LD_INT 40
1837: PUSH
1838: LD_INT 20
1840: PUSH
1841: EMPTY
1842: LIST
1843: LIST
1844: PUSH
1845: EMPTY
1846: LIST
1847: LIST
1848: LIST
1849: LIST
1850: LIST
1851: LIST
1852: LIST
1853: ST_TO_ADDR
// InitUc ;
1854: CALL_OW 18
// InitHc ;
1858: CALL_OW 19
// uc_side = nature ;
1862: LD_ADDR_OWVAR 20
1866: PUSH
1867: LD_EXP 4
1871: ST_TO_ADDR
// uc_nation = nation_nature ;
1872: LD_ADDR_OWVAR 21
1876: PUSH
1877: LD_INT 0
1879: ST_TO_ADDR
// agres = - 10 + difficulty * 20 ;
1880: LD_ADDR_VAR 0 5
1884: PUSH
1885: LD_INT 10
1887: NEG
1888: PUSH
1889: LD_OWVAR 67
1893: PUSH
1894: LD_INT 20
1896: MUL
1897: PLUS
1898: ST_TO_ADDR
// count = [ 4 , 3 , 2 ] [ difficulty ] ;
1899: LD_ADDR_VAR 0 6
1903: PUSH
1904: LD_INT 4
1906: PUSH
1907: LD_INT 3
1909: PUSH
1910: LD_INT 2
1912: PUSH
1913: EMPTY
1914: LIST
1915: LIST
1916: LIST
1917: PUSH
1918: LD_OWVAR 67
1922: ARRAY
1923: ST_TO_ADDR
// hc_class = class_apeman ;
1924: LD_ADDR_OWVAR 28
1928: PUSH
1929: LD_INT 12
1931: ST_TO_ADDR
// for i = 1 to count do
1932: LD_ADDR_VAR 0 2
1936: PUSH
1937: DOUBLE
1938: LD_INT 1
1940: DEC
1941: ST_TO_ADDR
1942: LD_VAR 0 6
1946: PUSH
1947: FOR_TO
1948: IFFALSE 2176
// begin if spots = 0 then
1950: LD_VAR 0 3
1954: PUSH
1955: LD_INT 0
1957: EQUAL
1958: IFFALSE 1964
// exit ;
1960: POP
1961: POP
1962: GO 2178
// uc_direction = Rand ( 0 , 5 ) ;
1964: LD_ADDR_OWVAR 24
1968: PUSH
1969: LD_INT 0
1971: PPUSH
1972: LD_INT 5
1974: PPUSH
1975: CALL_OW 12
1979: ST_TO_ADDR
// hc_agressivity = Rand ( - 1 * agres , agres ) ;
1980: LD_ADDR_OWVAR 35
1984: PUSH
1985: LD_INT 1
1987: NEG
1988: PUSH
1989: LD_VAR 0 5
1993: MUL
1994: PPUSH
1995: LD_VAR 0 5
1999: PPUSH
2000: CALL_OW 12
2004: ST_TO_ADDR
// hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
2005: LD_ADDR_OWVAR 29
2009: PUSH
2010: LD_INT 11
2012: PPUSH
2013: LD_INT 13
2015: PPUSH
2016: CALL_OW 12
2020: PUSH
2021: LD_INT 10
2023: PPUSH
2024: LD_INT 11
2026: PPUSH
2027: CALL_OW 12
2031: PUSH
2032: EMPTY
2033: LIST
2034: LIST
2035: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
2036: LD_ADDR_OWVAR 27
2040: PUSH
2041: LD_INT 1
2043: PPUSH
2044: LD_INT 2
2046: PPUSH
2047: CALL_OW 12
2051: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 1 ) , Rand ( 0 , 1 ) , 0 , 0 ] ;
2052: LD_ADDR_OWVAR 31
2056: PUSH
2057: LD_INT 0
2059: PPUSH
2060: LD_INT 1
2062: PPUSH
2063: CALL_OW 12
2067: PUSH
2068: LD_INT 0
2070: PPUSH
2071: LD_INT 1
2073: PPUSH
2074: CALL_OW 12
2078: PUSH
2079: LD_INT 0
2081: PUSH
2082: LD_INT 0
2084: PUSH
2085: EMPTY
2086: LIST
2087: LIST
2088: LIST
2089: LIST
2090: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
2091: LD_ADDR_VAR 0 4
2095: PUSH
2096: LD_INT 1
2098: PPUSH
2099: LD_VAR 0 3
2103: PPUSH
2104: CALL_OW 12
2108: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
2109: CALL_OW 44
2113: PPUSH
2114: LD_VAR 0 3
2118: PUSH
2119: LD_VAR 0 4
2123: ARRAY
2124: PUSH
2125: LD_INT 1
2127: ARRAY
2128: PPUSH
2129: LD_VAR 0 3
2133: PUSH
2134: LD_VAR 0 4
2138: ARRAY
2139: PUSH
2140: LD_INT 2
2142: ARRAY
2143: PPUSH
2144: LD_INT 5
2146: PPUSH
2147: LD_INT 0
2149: PPUSH
2150: CALL_OW 50
// spots = Delete ( spots , num ) ;
2154: LD_ADDR_VAR 0 3
2158: PUSH
2159: LD_VAR 0 3
2163: PPUSH
2164: LD_VAR 0 4
2168: PPUSH
2169: CALL_OW 3
2173: ST_TO_ADDR
// end ;
2174: GO 1947
2176: POP
2177: POP
// end ;
2178: LD_VAR 0 1
2182: RET
// function PrepareArabians ; var human_list , i , temp_unit , val , k ; begin
2183: LD_INT 0
2185: PPUSH
2186: PPUSH
2187: PPUSH
2188: PPUSH
2189: PPUSH
2190: PPUSH
// InitHc ;
2191: CALL_OW 19
// InitUc ;
2195: CALL_OW 18
// uc_side = you ;
2199: LD_ADDR_OWVAR 20
2203: PUSH
2204: LD_EXP 2
2208: ST_TO_ADDR
// uc_nation = nation_arabian ;
2209: LD_ADDR_OWVAR 21
2213: PUSH
2214: LD_INT 2
2216: ST_TO_ADDR
// if not testing then
2217: LD_EXP 1
2221: NOT
2222: IFFALSE 2815
// begin Heike = CreateCharacter ( Heike_11_sel ) ;
2224: LD_ADDR_EXP 9
2228: PUSH
2229: LD_STRING Heike_11_sel
2231: PPUSH
2232: CALL_OW 34
2236: ST_TO_ADDR
// if TestCharacters ( Oswald_11_sel ) then
2237: LD_STRING Oswald_11_sel
2239: PPUSH
2240: CALL_OW 28
2244: IFFALSE 2261
// Oswald = CreateCharacter ( Oswald_11_sel ) else
2246: LD_ADDR_EXP 11
2250: PUSH
2251: LD_STRING Oswald_11_sel
2253: PPUSH
2254: CALL_OW 34
2258: ST_TO_ADDR
2259: GO 2269
// Oswald = 0 ;
2261: LD_ADDR_EXP 11
2265: PUSH
2266: LD_INT 0
2268: ST_TO_ADDR
// oswald_is_substitute = LoadVariable ( Oswald_is_substitute_10 , false ) ;
2269: LD_ADDR_EXP 80
2273: PUSH
2274: LD_STRING Oswald_is_substitute_10
2276: PPUSH
2277: LD_INT 0
2279: PPUSH
2280: CALL_OW 30
2284: ST_TO_ADDR
// if TestCharacters ( Kurt_11_sel ) then
2285: LD_STRING Kurt_11_sel
2287: PPUSH
2288: CALL_OW 28
2292: IFFALSE 2309
// Kurt = CreateCharacter ( Kurt_11_sel ) else
2294: LD_ADDR_EXP 17
2298: PUSH
2299: LD_STRING Kurt_11_sel
2301: PPUSH
2302: CALL_OW 34
2306: ST_TO_ADDR
2307: GO 2317
// Kurt = 0 ;
2309: LD_ADDR_EXP 17
2313: PUSH
2314: LD_INT 0
2316: ST_TO_ADDR
// kurt_is_substitute = LoadVariable ( Kurt_is_substitute_10 , false ) ;
2317: LD_ADDR_EXP 81
2321: PUSH
2322: LD_STRING Kurt_is_substitute_10
2324: PPUSH
2325: LD_INT 0
2327: PPUSH
2328: CALL_OW 30
2332: ST_TO_ADDR
// if TestCharacters ( Sonya_11_sel ) then
2333: LD_STRING Sonya_11_sel
2335: PPUSH
2336: CALL_OW 28
2340: IFFALSE 2357
// Sonya = CreateCharacter ( Sonya_11_sel ) else
2342: LD_ADDR_EXP 10
2346: PUSH
2347: LD_STRING Sonya_11_sel
2349: PPUSH
2350: CALL_OW 34
2354: ST_TO_ADDR
2355: GO 2365
// Sonya = 0 ;
2357: LD_ADDR_EXP 10
2361: PUSH
2362: LD_INT 0
2364: ST_TO_ADDR
// if TestCharacters ( Ralph_11_sel ) then
2365: LD_STRING Ralph_11_sel
2367: PPUSH
2368: CALL_OW 28
2372: IFFALSE 2389
// Ralph = CreateCharacter ( Ralph_11_sel ) else
2374: LD_ADDR_EXP 12
2378: PUSH
2379: LD_STRING Ralph_11_sel
2381: PPUSH
2382: CALL_OW 34
2386: ST_TO_ADDR
2387: GO 2397
// Ralph = 0 ;
2389: LD_ADDR_EXP 12
2393: PUSH
2394: LD_INT 0
2396: ST_TO_ADDR
// if TestCharacters ( Kowalski_11_sel ) then
2397: LD_STRING Kowalski_11_sel
2399: PPUSH
2400: CALL_OW 28
2404: IFFALSE 2421
// Kowalski = CreateCharacter ( Kowalski_11_sel ) else
2406: LD_ADDR_EXP 13
2410: PUSH
2411: LD_STRING Kowalski_11_sel
2413: PPUSH
2414: CALL_OW 34
2418: ST_TO_ADDR
2419: GO 2429
// Kowalski = 0 ;
2421: LD_ADDR_EXP 13
2425: PUSH
2426: LD_INT 0
2428: ST_TO_ADDR
// if TestCharacters ( Evelyn_11_sel ) then
2429: LD_STRING Evelyn_11_sel
2431: PPUSH
2432: CALL_OW 28
2436: IFFALSE 2453
// Evelyn = CreateCharacter ( Evelyn_11_sel ) else
2438: LD_ADDR_EXP 14
2442: PUSH
2443: LD_STRING Evelyn_11_sel
2445: PPUSH
2446: CALL_OW 34
2450: ST_TO_ADDR
2451: GO 2461
// Evelyn = 0 ;
2453: LD_ADDR_EXP 14
2457: PUSH
2458: LD_INT 0
2460: ST_TO_ADDR
// if TestCharacters ( Suze_11_sel ) then
2461: LD_STRING Suze_11_sel
2463: PPUSH
2464: CALL_OW 28
2468: IFFALSE 2485
// Suze = CreateCharacter ( Suze_11_sel ) else
2470: LD_ADDR_EXP 15
2474: PUSH
2475: LD_STRING Suze_11_sel
2477: PPUSH
2478: CALL_OW 34
2482: ST_TO_ADDR
2483: GO 2493
// Suze = 0 ;
2485: LD_ADDR_EXP 15
2489: PUSH
2490: LD_INT 0
2492: ST_TO_ADDR
// if TestCharacters ( Olaf_11_sel ) then
2493: LD_STRING Olaf_11_sel
2495: PPUSH
2496: CALL_OW 28
2500: IFFALSE 2517
// Olaf = CreateCharacter ( Olaf_11_sel ) else
2502: LD_ADDR_EXP 16
2506: PUSH
2507: LD_STRING Olaf_11_sel
2509: PPUSH
2510: CALL_OW 34
2514: ST_TO_ADDR
2515: GO 2525
// Olaf = 0 ;
2517: LD_ADDR_EXP 16
2521: PUSH
2522: LD_INT 0
2524: ST_TO_ADDR
// if TestCharacters ( Dwayne_11_sel ) then
2525: LD_STRING Dwayne_11_sel
2527: PPUSH
2528: CALL_OW 28
2532: IFFALSE 2549
// Dwayne = CreateCharacter ( Dwayne_11_sel ) else
2534: LD_ADDR_EXP 18
2538: PUSH
2539: LD_STRING Dwayne_11_sel
2541: PPUSH
2542: CALL_OW 34
2546: ST_TO_ADDR
2547: GO 2557
// Dwayne = 0 ;
2549: LD_ADDR_EXP 18
2553: PUSH
2554: LD_INT 0
2556: ST_TO_ADDR
// if TestCharacters ( MarkB_11_sel ) then
2557: LD_STRING MarkB_11_sel
2559: PPUSH
2560: CALL_OW 28
2564: IFFALSE 2581
// MarkB = CreateCharacter ( MarkB_11_sel ) else
2566: LD_ADDR_EXP 19
2570: PUSH
2571: LD_STRING MarkB_11_sel
2573: PPUSH
2574: CALL_OW 34
2578: ST_TO_ADDR
2579: GO 2589
// MarkB = 0 ;
2581: LD_ADDR_EXP 19
2585: PUSH
2586: LD_INT 0
2588: ST_TO_ADDR
// if TestCharacters ( Aviradze_11_sel ) then
2589: LD_STRING Aviradze_11_sel
2591: PPUSH
2592: CALL_OW 28
2596: IFFALSE 2613
// Aviradze = CreateCharacter ( Aviradze_11_sel ) else
2598: LD_ADDR_EXP 20
2602: PUSH
2603: LD_STRING Aviradze_11_sel
2605: PPUSH
2606: CALL_OW 34
2610: ST_TO_ADDR
2611: GO 2621
// Aviradze = 0 ;
2613: LD_ADDR_EXP 20
2617: PUSH
2618: LD_INT 0
2620: ST_TO_ADDR
// if TestCharacters ( Swansson_11_sel ) then
2621: LD_STRING Swansson_11_sel
2623: PPUSH
2624: CALL_OW 28
2628: IFFALSE 2645
// Swansson = CreateCharacter ( Swansson_11_sel ) else
2630: LD_ADDR_EXP 21
2634: PUSH
2635: LD_STRING Swansson_11_sel
2637: PPUSH
2638: CALL_OW 34
2642: ST_TO_ADDR
2643: GO 2653
// Swansson = 0 ;
2645: LD_ADDR_EXP 21
2649: PUSH
2650: LD_INT 0
2652: ST_TO_ADDR
// human_list = [ Heike , Sonya , Oswald , Ralph , Kowalski , Evelyn , Suze , Olaf , Kurt , Dwayne , MarkB , Aviradze , Swansson ] diff 0 ;
2653: LD_ADDR_VAR 0 2
2657: PUSH
2658: LD_EXP 9
2662: PUSH
2663: LD_EXP 10
2667: PUSH
2668: LD_EXP 11
2672: PUSH
2673: LD_EXP 12
2677: PUSH
2678: LD_EXP 13
2682: PUSH
2683: LD_EXP 14
2687: PUSH
2688: LD_EXP 15
2692: PUSH
2693: LD_EXP 16
2697: PUSH
2698: LD_EXP 17
2702: PUSH
2703: LD_EXP 18
2707: PUSH
2708: LD_EXP 19
2712: PUSH
2713: LD_EXP 20
2717: PUSH
2718: LD_EXP 21
2722: PUSH
2723: EMPTY
2724: LIST
2725: LIST
2726: LIST
2727: LIST
2728: LIST
2729: LIST
2730: LIST
2731: LIST
2732: LIST
2733: LIST
2734: LIST
2735: LIST
2736: LIST
2737: PUSH
2738: LD_INT 0
2740: DIFF
2741: ST_TO_ADDR
// human_list = human_list ^ ( CreateCharacterSet ( Others_11_sel ) diff 0 ) ;
2742: LD_ADDR_VAR 0 2
2746: PUSH
2747: LD_VAR 0 2
2751: PUSH
2752: LD_STRING Others_11_sel
2754: PPUSH
2755: CALL_OW 31
2759: PUSH
2760: LD_INT 0
2762: DIFF
2763: ADD
2764: ST_TO_ADDR
// if TestCharacters ( Gonzo_10 ) then
2765: LD_STRING Gonzo_10
2767: PPUSH
2768: CALL_OW 28
2772: IFFALSE 2805
// begin Gonzo = CreateCharacter ( Gonzo_10 ) ;
2774: LD_ADDR_EXP 22
2778: PUSH
2779: LD_STRING Gonzo_10
2781: PPUSH
2782: CALL_OW 34
2786: ST_TO_ADDR
// human_list = human_list ^ Gonzo ;
2787: LD_ADDR_VAR 0 2
2791: PUSH
2792: LD_VAR 0 2
2796: PUSH
2797: LD_EXP 22
2801: ADD
2802: ST_TO_ADDR
// end else
2803: GO 2813
// Gonzo = 0 ;
2805: LD_ADDR_EXP 22
2809: PUSH
2810: LD_INT 0
2812: ST_TO_ADDR
// end else
2813: GO 3348
// begin InitHc ;
2815: CALL_OW 19
// PrepareSoldier ( sex_female , 7 ) ;
2819: LD_INT 2
2821: PPUSH
2822: LD_INT 7
2824: PPUSH
2825: CALL_OW 381
// hc_name = Heike ;
2829: LD_ADDR_OWVAR 26
2833: PUSH
2834: LD_STRING Heike
2836: ST_TO_ADDR
// Heike = CreateHuman ;
2837: LD_ADDR_EXP 9
2841: PUSH
2842: CALL_OW 44
2846: ST_TO_ADDR
// PrepareScientist ( sex_female , 7 ) ;
2847: LD_INT 2
2849: PPUSH
2850: LD_INT 7
2852: PPUSH
2853: CALL_OW 384
// hc_name = Sonya ;
2857: LD_ADDR_OWVAR 26
2861: PUSH
2862: LD_STRING Sonya
2864: ST_TO_ADDR
// Sonya = CreateHuman ;
2865: LD_ADDR_EXP 10
2869: PUSH
2870: CALL_OW 44
2874: ST_TO_ADDR
// PrepareSoldier ( sex_male , 7 ) ;
2875: LD_INT 1
2877: PPUSH
2878: LD_INT 7
2880: PPUSH
2881: CALL_OW 381
// hc_name = Oswald ;
2885: LD_ADDR_OWVAR 26
2889: PUSH
2890: LD_STRING Oswald
2892: ST_TO_ADDR
// Oswald = CreateHuman ;
2893: LD_ADDR_EXP 11
2897: PUSH
2898: CALL_OW 44
2902: ST_TO_ADDR
// oswald_is_substitute = false ;
2903: LD_ADDR_EXP 80
2907: PUSH
2908: LD_INT 0
2910: ST_TO_ADDR
// PrepareSoldier ( sex_male , 7 ) ;
2911: LD_INT 1
2913: PPUSH
2914: LD_INT 7
2916: PPUSH
2917: CALL_OW 381
// hc_name = Ralph ;
2921: LD_ADDR_OWVAR 26
2925: PUSH
2926: LD_STRING Ralph
2928: ST_TO_ADDR
// Ralph = CreateHuman ;
2929: LD_ADDR_EXP 12
2933: PUSH
2934: CALL_OW 44
2938: ST_TO_ADDR
// PrepareSoldier ( sex_male , 7 ) ;
2939: LD_INT 1
2941: PPUSH
2942: LD_INT 7
2944: PPUSH
2945: CALL_OW 381
// hc_name = Kowalski ;
2949: LD_ADDR_OWVAR 26
2953: PUSH
2954: LD_STRING Kowalski
2956: ST_TO_ADDR
// Kowalski = CreateHuman ;
2957: LD_ADDR_EXP 13
2961: PUSH
2962: CALL_OW 44
2966: ST_TO_ADDR
// PrepareEngineer ( sex_female , 7 ) ;
2967: LD_INT 2
2969: PPUSH
2970: LD_INT 7
2972: PPUSH
2973: CALL_OW 382
// hc_name = Evelyn ;
2977: LD_ADDR_OWVAR 26
2981: PUSH
2982: LD_STRING Evelyn
2984: ST_TO_ADDR
// Evelyn = CreateHuman ;
2985: LD_ADDR_EXP 14
2989: PUSH
2990: CALL_OW 44
2994: ST_TO_ADDR
// PrepareSoldier ( sex_female , 7 ) ;
2995: LD_INT 2
2997: PPUSH
2998: LD_INT 7
3000: PPUSH
3001: CALL_OW 381
// hc_name = Suze ;
3005: LD_ADDR_OWVAR 26
3009: PUSH
3010: LD_STRING Suze
3012: ST_TO_ADDR
// Suze = CreateHuman ;
3013: LD_ADDR_EXP 15
3017: PUSH
3018: CALL_OW 44
3022: ST_TO_ADDR
// PrepareMechanic ( sex_male , 7 ) ;
3023: LD_INT 1
3025: PPUSH
3026: LD_INT 7
3028: PPUSH
3029: CALL_OW 383
// hc_name = Olaf ;
3033: LD_ADDR_OWVAR 26
3037: PUSH
3038: LD_STRING Olaf
3040: ST_TO_ADDR
// Olaf = CreateHuman ;
3041: LD_ADDR_EXP 16
3045: PUSH
3046: CALL_OW 44
3050: ST_TO_ADDR
// PrepareSoldier ( sex_male , 7 ) ;
3051: LD_INT 1
3053: PPUSH
3054: LD_INT 7
3056: PPUSH
3057: CALL_OW 381
// hc_name = Kurt ;
3061: LD_ADDR_OWVAR 26
3065: PUSH
3066: LD_STRING Kurt
3068: ST_TO_ADDR
// Kurt = CreateHuman ;
3069: LD_ADDR_EXP 17
3073: PUSH
3074: CALL_OW 44
3078: ST_TO_ADDR
// kurt_is_substitute = false ;
3079: LD_ADDR_EXP 81
3083: PUSH
3084: LD_INT 0
3086: ST_TO_ADDR
// PrepareMechanic ( sex_male , 7 ) ;
3087: LD_INT 1
3089: PPUSH
3090: LD_INT 7
3092: PPUSH
3093: CALL_OW 383
// hc_name = Dwayne ;
3097: LD_ADDR_OWVAR 26
3101: PUSH
3102: LD_STRING Dwayne
3104: ST_TO_ADDR
// Dwayne = CreateHuman ;
3105: LD_ADDR_EXP 18
3109: PUSH
3110: CALL_OW 44
3114: ST_TO_ADDR
// PrepareScientist ( sex_male , 7 ) ;
3115: LD_INT 1
3117: PPUSH
3118: LD_INT 7
3120: PPUSH
3121: CALL_OW 384
// hc_name = Mark ;
3125: LD_ADDR_OWVAR 26
3129: PUSH
3130: LD_STRING Mark
3132: ST_TO_ADDR
// MarkB = CreateHuman ;
3133: LD_ADDR_EXP 19
3137: PUSH
3138: CALL_OW 44
3142: ST_TO_ADDR
// Aviradze = 0 ;
3143: LD_ADDR_EXP 20
3147: PUSH
3148: LD_INT 0
3150: ST_TO_ADDR
// Swansson = 0 ;
3151: LD_ADDR_EXP 21
3155: PUSH
3156: LD_INT 0
3158: ST_TO_ADDR
// human_list = [ Heike , Sonya , Oswald , Ralph , Kowalski , Evelyn , Suze , Olaf , Kurt , Dwayne , MarkB , Aviradze , Swansson ] diff 0 ;
3159: LD_ADDR_VAR 0 2
3163: PUSH
3164: LD_EXP 9
3168: PUSH
3169: LD_EXP 10
3173: PUSH
3174: LD_EXP 11
3178: PUSH
3179: LD_EXP 12
3183: PUSH
3184: LD_EXP 13
3188: PUSH
3189: LD_EXP 14
3193: PUSH
3194: LD_EXP 15
3198: PUSH
3199: LD_EXP 16
3203: PUSH
3204: LD_EXP 17
3208: PUSH
3209: LD_EXP 18
3213: PUSH
3214: LD_EXP 19
3218: PUSH
3219: LD_EXP 20
3223: PUSH
3224: LD_EXP 21
3228: PUSH
3229: EMPTY
3230: LIST
3231: LIST
3232: LIST
3233: LIST
3234: LIST
3235: LIST
3236: LIST
3237: LIST
3238: LIST
3239: LIST
3240: LIST
3241: LIST
3242: LIST
3243: PUSH
3244: LD_INT 0
3246: DIFF
3247: ST_TO_ADDR
// InitHc ;
3248: CALL_OW 19
// uc_nation = nation_nature ;
3252: LD_ADDR_OWVAR 21
3256: PUSH
3257: LD_INT 0
3259: ST_TO_ADDR
// hc_class = class_apeman_soldier ;
3260: LD_ADDR_OWVAR 28
3264: PUSH
3265: LD_INT 15
3267: ST_TO_ADDR
// hc_name = Gonzo ;
3268: LD_ADDR_OWVAR 26
3272: PUSH
3273: LD_STRING Gonzo
3275: ST_TO_ADDR
// hc_skills = [ 3 , 1 , 0 , 0 ] ;
3276: LD_ADDR_OWVAR 31
3280: PUSH
3281: LD_INT 3
3283: PUSH
3284: LD_INT 1
3286: PUSH
3287: LD_INT 0
3289: PUSH
3290: LD_INT 0
3292: PUSH
3293: EMPTY
3294: LIST
3295: LIST
3296: LIST
3297: LIST
3298: ST_TO_ADDR
// hc_attr = [ 13 , 12 ] ;
3299: LD_ADDR_OWVAR 29
3303: PUSH
3304: LD_INT 13
3306: PUSH
3307: LD_INT 12
3309: PUSH
3310: EMPTY
3311: LIST
3312: LIST
3313: ST_TO_ADDR
// hc_sex = sex_male ;
3314: LD_ADDR_OWVAR 27
3318: PUSH
3319: LD_INT 1
3321: ST_TO_ADDR
// Gonzo = CreateHuman ;
3322: LD_ADDR_EXP 22
3326: PUSH
3327: CALL_OW 44
3331: ST_TO_ADDR
// human_list = human_list ^ Gonzo ;
3332: LD_ADDR_VAR 0 2
3336: PUSH
3337: LD_VAR 0 2
3341: PUSH
3342: LD_EXP 22
3346: ADD
3347: ST_TO_ADDR
// end ; InitVc ;
3348: CALL_OW 20
// uc_direction = 5 ;
3352: LD_ADDR_OWVAR 24
3356: PUSH
3357: LD_INT 5
3359: ST_TO_ADDR
// uc_nation = nation_arabian ;
3360: LD_ADDR_OWVAR 21
3364: PUSH
3365: LD_INT 2
3367: ST_TO_ADDR
// vc_engine = engine_combustion ;
3368: LD_ADDR_OWVAR 39
3372: PUSH
3373: LD_INT 1
3375: ST_TO_ADDR
// vc_chassis = ar_half_tracked ;
3376: LD_ADDR_OWVAR 37
3380: PUSH
3381: LD_INT 14
3383: ST_TO_ADDR
// vc_control = control_manual ;
3384: LD_ADDR_OWVAR 38
3388: PUSH
3389: LD_INT 1
3391: ST_TO_ADDR
// vc_weapon = ar_cargo_bay ;
3392: LD_ADDR_OWVAR 40
3396: PUSH
3397: LD_INT 32
3399: ST_TO_ADDR
// for i = 1 to 2 do
3400: LD_ADDR_VAR 0 3
3404: PUSH
3405: DOUBLE
3406: LD_INT 1
3408: DEC
3409: ST_TO_ADDR
3410: LD_INT 2
3412: PUSH
3413: FOR_TO
3414: IFFALSE 3735
// begin temp_unit = CreateVehicle ;
3416: LD_ADDR_VAR 0 4
3420: PUSH
3421: CALL_OW 45
3425: ST_TO_ADDR
// SetFuel ( temp_unit , Rand ( 50 , 70 ) ) ;
3426: LD_VAR 0 4
3430: PPUSH
3431: LD_INT 50
3433: PPUSH
3434: LD_INT 70
3436: PPUSH
3437: CALL_OW 12
3441: PPUSH
3442: CALL_OW 240
// val = Rand ( 1 , human_list - 1 ) ;
3446: LD_ADDR_VAR 0 5
3450: PUSH
3451: LD_INT 1
3453: PPUSH
3454: LD_VAR 0 2
3458: PUSH
3459: LD_INT 1
3461: MINUS
3462: PPUSH
3463: CALL_OW 12
3467: ST_TO_ADDR
// PlaceHumanInUnit ( human_list [ val ] , temp_unit ) ;
3468: LD_VAR 0 2
3472: PUSH
3473: LD_VAR 0 5
3477: ARRAY
3478: PPUSH
3479: LD_VAR 0 4
3483: PPUSH
3484: CALL_OW 52
// human_list = Delete ( human_list , val ) ;
3488: LD_ADDR_VAR 0 2
3492: PUSH
3493: LD_VAR 0 2
3497: PPUSH
3498: LD_VAR 0 5
3502: PPUSH
3503: CALL_OW 3
3507: ST_TO_ADDR
// case i of 1 :
3508: LD_VAR 0 3
3512: PUSH
3513: LD_INT 1
3515: DOUBLE
3516: EQUAL
3517: IFTRUE 3521
3519: GO 3539
3521: POP
// begin SetCargo ( temp_unit , mat_cans , 100 ) ;
3522: LD_VAR 0 4
3526: PPUSH
3527: LD_INT 1
3529: PPUSH
3530: LD_INT 100
3532: PPUSH
3533: CALL_OW 290
// end ; 2 :
3537: GO 3718
3539: LD_INT 2
3541: DOUBLE
3542: EQUAL
3543: IFTRUE 3547
3545: GO 3717
3547: POP
// begin val = [ 90 , 70 , 50 ] [ difficulty ] ;
3548: LD_ADDR_VAR 0 5
3552: PUSH
3553: LD_INT 90
3555: PUSH
3556: LD_INT 70
3558: PUSH
3559: LD_INT 50
3561: PUSH
3562: EMPTY
3563: LIST
3564: LIST
3565: LIST
3566: PUSH
3567: LD_OWVAR 67
3571: ARRAY
3572: ST_TO_ADDR
// if LoadVariable ( Abdul_doubt_07 , false ) then
3573: LD_STRING Abdul_doubt_07
3575: PPUSH
3576: LD_INT 0
3578: PPUSH
3579: CALL_OW 30
3583: IFFALSE 3599
// val = val - 50 ;
3585: LD_ADDR_VAR 0 5
3589: PUSH
3590: LD_VAR 0 5
3594: PUSH
3595: LD_INT 50
3597: MINUS
3598: ST_TO_ADDR
// if LoadVariable ( Siberite_gathered_on_time_07_cont , true ) then
3599: LD_STRING Siberite_gathered_on_time_07_cont
3601: PPUSH
3602: LD_INT 1
3604: PPUSH
3605: CALL_OW 30
3609: IFFALSE 3645
// begin val = val + 20 ;
3611: LD_ADDR_VAR 0 5
3615: PUSH
3616: LD_VAR 0 5
3620: PUSH
3621: LD_INT 20
3623: PLUS
3624: ST_TO_ADDR
// if val > 100 then
3625: LD_VAR 0 5
3629: PUSH
3630: LD_INT 100
3632: GREATER
3633: IFFALSE 3643
// val = 100 ;
3635: LD_ADDR_VAR 0 5
3639: PUSH
3640: LD_INT 100
3642: ST_TO_ADDR
// end else
3643: GO 3659
// val = val - 50 ;
3645: LD_ADDR_VAR 0 5
3649: PUSH
3650: LD_VAR 0 5
3654: PUSH
3655: LD_INT 50
3657: MINUS
3658: ST_TO_ADDR
// if val < 0 then
3659: LD_VAR 0 5
3663: PUSH
3664: LD_INT 0
3666: LESS
3667: IFFALSE 3677
// val = 0 ;
3669: LD_ADDR_VAR 0 5
3673: PUSH
3674: LD_INT 0
3676: ST_TO_ADDR
// SetCargo ( temp_unit , mat_cans , val ) ;
3677: LD_VAR 0 4
3681: PPUSH
3682: LD_INT 1
3684: PPUSH
3685: LD_VAR 0 5
3689: PPUSH
3690: CALL_OW 290
// AddCargo ( temp_unit , mat_oil , 100 - val ) ;
3694: LD_VAR 0 4
3698: PPUSH
3699: LD_INT 2
3701: PPUSH
3702: LD_INT 100
3704: PUSH
3705: LD_VAR 0 5
3709: MINUS
3710: PPUSH
3711: CALL_OW 291
// end ; end ;
3715: GO 3718
3717: POP
// PlaceUnitArea ( temp_unit , enter_area , false ) ;
3718: LD_VAR 0 4
3722: PPUSH
3723: LD_INT 8
3725: PPUSH
3726: LD_INT 0
3728: PPUSH
3729: CALL_OW 49
// end ;
3733: GO 3413
3735: POP
3736: POP
// val = 0 ;
3737: LD_ADDR_VAR 0 5
3741: PUSH
3742: LD_INT 0
3744: ST_TO_ADDR
// for i = 1 to [ 3 , 2 , 1 ] [ difficulty ] - LoadVariable ( Abdul_doubt_07 , false ) do
3745: LD_ADDR_VAR 0 3
3749: PUSH
3750: DOUBLE
3751: LD_INT 1
3753: DEC
3754: ST_TO_ADDR
3755: LD_INT 3
3757: PUSH
3758: LD_INT 2
3760: PUSH
3761: LD_INT 1
3763: PUSH
3764: EMPTY
3765: LIST
3766: LIST
3767: LIST
3768: PUSH
3769: LD_OWVAR 67
3773: ARRAY
3774: PUSH
3775: LD_STRING Abdul_doubt_07
3777: PPUSH
3778: LD_INT 0
3780: PPUSH
3781: CALL_OW 30
3785: MINUS
3786: PUSH
3787: FOR_TO
3788: IFFALSE 4334
// begin vc_engine = engine_combustion ;
3790: LD_ADDR_OWVAR 39
3794: PUSH
3795: LD_INT 1
3797: ST_TO_ADDR
// if val = 0 then
3798: LD_VAR 0 5
3802: PUSH
3803: LD_INT 0
3805: EQUAL
3806: IFFALSE 3898
// begin case Rand ( 1 , 4 ) of 1 :
3808: LD_INT 1
3810: PPUSH
3811: LD_INT 4
3813: PPUSH
3814: CALL_OW 12
3818: PUSH
3819: LD_INT 1
3821: DOUBLE
3822: EQUAL
3823: IFTRUE 3827
3825: GO 3838
3827: POP
// vc_chassis = ar_hovercraft ; 2 :
3828: LD_ADDR_OWVAR 37
3832: PUSH
3833: LD_INT 11
3835: ST_TO_ADDR
3836: GO 3896
3838: LD_INT 2
3840: DOUBLE
3841: EQUAL
3842: IFTRUE 3846
3844: GO 3857
3846: POP
// vc_chassis = ar_light_trike ; 3 :
3847: LD_ADDR_OWVAR 37
3851: PUSH
3852: LD_INT 12
3854: ST_TO_ADDR
3855: GO 3896
3857: LD_INT 3
3859: DOUBLE
3860: EQUAL
3861: IFTRUE 3865
3863: GO 3876
3865: POP
// vc_chassis = ar_medium_trike ; 4 :
3866: LD_ADDR_OWVAR 37
3870: PUSH
3871: LD_INT 13
3873: ST_TO_ADDR
3874: GO 3896
3876: LD_INT 4
3878: DOUBLE
3879: EQUAL
3880: IFTRUE 3884
3882: GO 3895
3884: POP
// vc_chassis = ar_half_tracked ; end ;
3885: LD_ADDR_OWVAR 37
3889: PUSH
3890: LD_INT 14
3892: ST_TO_ADDR
3893: GO 3896
3895: POP
// end else
3896: GO 3948
// begin case Rand ( 1 , 2 ) of 1 :
3898: LD_INT 1
3900: PPUSH
3901: LD_INT 2
3903: PPUSH
3904: CALL_OW 12
3908: PUSH
3909: LD_INT 1
3911: DOUBLE
3912: EQUAL
3913: IFTRUE 3917
3915: GO 3928
3917: POP
// vc_chassis = ar_medium_trike ; 2 :
3918: LD_ADDR_OWVAR 37
3922: PUSH
3923: LD_INT 13
3925: ST_TO_ADDR
3926: GO 3948
3928: LD_INT 2
3930: DOUBLE
3931: EQUAL
3932: IFTRUE 3936
3934: GO 3947
3936: POP
// vc_chassis = ar_half_tracked ; end ;
3937: LD_ADDR_OWVAR 37
3941: PUSH
3942: LD_INT 14
3944: ST_TO_ADDR
3945: GO 3948
3947: POP
// end ; if vc_chassis in [ ar_hovercraft , ar_light_trike ] then
3948: LD_OWVAR 37
3952: PUSH
3953: LD_INT 11
3955: PUSH
3956: LD_INT 12
3958: PUSH
3959: EMPTY
3960: LIST
3961: LIST
3962: IN
3963: IFFALSE 4093
// begin val = val + 1 ;
3965: LD_ADDR_VAR 0 5
3969: PUSH
3970: LD_VAR 0 5
3974: PUSH
3975: LD_INT 1
3977: PLUS
3978: ST_TO_ADDR
// case Rand ( 1 , 4 ) of 1 :
3979: LD_INT 1
3981: PPUSH
3982: LD_INT 4
3984: PPUSH
3985: CALL_OW 12
3989: PUSH
3990: LD_INT 1
3992: DOUBLE
3993: EQUAL
3994: IFTRUE 3998
3996: GO 4009
3998: POP
// vc_weapon = ar_multimissile_ballista ; 2 :
3999: LD_ADDR_OWVAR 40
4003: PUSH
4004: LD_INT 22
4006: ST_TO_ADDR
4007: GO 4067
4009: LD_INT 2
4011: DOUBLE
4012: EQUAL
4013: IFTRUE 4017
4015: GO 4028
4017: POP
// vc_weapon = ar_light_gun ; 3 :
4018: LD_ADDR_OWVAR 40
4022: PUSH
4023: LD_INT 23
4025: ST_TO_ADDR
4026: GO 4067
4028: LD_INT 3
4030: DOUBLE
4031: EQUAL
4032: IFTRUE 4036
4034: GO 4047
4036: POP
// vc_weapon = ar_double_machine_gun ; 4 :
4037: LD_ADDR_OWVAR 40
4041: PUSH
4042: LD_INT 24
4044: ST_TO_ADDR
4045: GO 4067
4047: LD_INT 4
4049: DOUBLE
4050: EQUAL
4051: IFTRUE 4055
4053: GO 4066
4055: POP
// vc_weapon = ar_radar ; end ;
4056: LD_ADDR_OWVAR 40
4060: PUSH
4061: LD_INT 30
4063: ST_TO_ADDR
4064: GO 4067
4066: POP
// if Rand ( 1 , 2 ) = 1 then
4067: LD_INT 1
4069: PPUSH
4070: LD_INT 2
4072: PPUSH
4073: CALL_OW 12
4077: PUSH
4078: LD_INT 1
4080: EQUAL
4081: IFFALSE 4091
// vc_engine = engine_solar ;
4083: LD_ADDR_OWVAR 39
4087: PUSH
4088: LD_INT 2
4090: ST_TO_ADDR
// end else
4091: GO 4181
// begin case Rand ( 1 , 4 ) of 1 :
4093: LD_INT 1
4095: PPUSH
4096: LD_INT 4
4098: PPUSH
4099: CALL_OW 12
4103: PUSH
4104: LD_INT 1
4106: DOUBLE
4107: EQUAL
4108: IFTRUE 4112
4110: GO 4123
4112: POP
// vc_weapon = ar_gatling_gun ; 2 :
4113: LD_ADDR_OWVAR 40
4117: PUSH
4118: LD_INT 25
4120: ST_TO_ADDR
4121: GO 4181
4123: LD_INT 2
4125: DOUBLE
4126: EQUAL
4127: IFTRUE 4131
4129: GO 4142
4131: POP
// vc_weapon = ar_gun ; 3 :
4132: LD_ADDR_OWVAR 40
4136: PUSH
4137: LD_INT 27
4139: ST_TO_ADDR
4140: GO 4181
4142: LD_INT 3
4144: DOUBLE
4145: EQUAL
4146: IFTRUE 4150
4148: GO 4161
4150: POP
// vc_weapon = ar_flame_thrower ; 4 :
4151: LD_ADDR_OWVAR 40
4155: PUSH
4156: LD_INT 26
4158: ST_TO_ADDR
4159: GO 4181
4161: LD_INT 4
4163: DOUBLE
4164: EQUAL
4165: IFTRUE 4169
4167: GO 4180
4169: POP
// vc_weapon = ar_rocket_launcher ; end ;
4170: LD_ADDR_OWVAR 40
4174: PUSH
4175: LD_INT 28
4177: ST_TO_ADDR
4178: GO 4181
4180: POP
// end ; if Rand ( 1 , 5 ) <= 2 then
4181: LD_INT 1
4183: PPUSH
4184: LD_INT 5
4186: PPUSH
4187: CALL_OW 12
4191: PUSH
4192: LD_INT 2
4194: LESSEQUAL
4195: IFFALSE 4207
// vc_control = control_apeman else
4197: LD_ADDR_OWVAR 38
4201: PUSH
4202: LD_INT 5
4204: ST_TO_ADDR
4205: GO 4215
// vc_control = control_manual ;
4207: LD_ADDR_OWVAR 38
4211: PUSH
4212: LD_INT 1
4214: ST_TO_ADDR
// temp_unit = CreateVehicle ;
4215: LD_ADDR_VAR 0 4
4219: PUSH
4220: CALL_OW 45
4224: ST_TO_ADDR
// SetFuel ( temp_unit , Rand ( 50 , 70 ) ) ;
4225: LD_VAR 0 4
4229: PPUSH
4230: LD_INT 50
4232: PPUSH
4233: LD_INT 70
4235: PPUSH
4236: CALL_OW 12
4240: PPUSH
4241: CALL_OW 240
// if vc_control = control_manual then
4245: LD_OWVAR 38
4249: PUSH
4250: LD_INT 1
4252: EQUAL
4253: IFFALSE 4317
// begin val = Rand ( 1 , human_list - 1 ) ;
4255: LD_ADDR_VAR 0 5
4259: PUSH
4260: LD_INT 1
4262: PPUSH
4263: LD_VAR 0 2
4267: PUSH
4268: LD_INT 1
4270: MINUS
4271: PPUSH
4272: CALL_OW 12
4276: ST_TO_ADDR
// PlaceHumanInUnit ( human_list [ val ] , temp_unit ) ;
4277: LD_VAR 0 2
4281: PUSH
4282: LD_VAR 0 5
4286: ARRAY
4287: PPUSH
4288: LD_VAR 0 4
4292: PPUSH
4293: CALL_OW 52
// human_list = Delete ( human_list , val ) ;
4297: LD_ADDR_VAR 0 2
4301: PUSH
4302: LD_VAR 0 2
4306: PPUSH
4307: LD_VAR 0 5
4311: PPUSH
4312: CALL_OW 3
4316: ST_TO_ADDR
// end ; PlaceUnitArea ( temp_unit , enter_area , false ) ;
4317: LD_VAR 0 4
4321: PPUSH
4322: LD_INT 8
4324: PPUSH
4325: LD_INT 0
4327: PPUSH
4328: CALL_OW 49
// end ;
4332: GO 3787
4334: POP
4335: POP
// for i in human_list do
4336: LD_ADDR_VAR 0 3
4340: PUSH
4341: LD_VAR 0 2
4345: PUSH
4346: FOR_IN
4347: IFFALSE 4366
// PlaceUnitArea ( i , enter_area , false ) ;
4349: LD_VAR 0 3
4353: PPUSH
4354: LD_INT 8
4356: PPUSH
4357: LD_INT 0
4359: PPUSH
4360: CALL_OW 49
4364: GO 4346
4366: POP
4367: POP
// Gensher = NewCharacter ( Dietrich ) ;
4368: LD_ADDR_EXP 23
4372: PUSH
4373: LD_STRING Dietrich
4375: PPUSH
4376: CALL_OW 25
4380: ST_TO_ADDR
// SetSide ( Gensher , you_alt ) ;
4381: LD_EXP 23
4385: PPUSH
4386: LD_EXP 5
4390: PPUSH
4391: CALL_OW 235
// PlaceHumanInUnit ( Gensher , ar_bar ) ;
4395: LD_EXP 23
4399: PPUSH
4400: LD_INT 61
4402: PPUSH
4403: CALL_OW 52
// InitHc ;
4407: CALL_OW 19
// uc_side = you_alt ;
4411: LD_ADDR_OWVAR 20
4415: PUSH
4416: LD_EXP 5
4420: ST_TO_ADDR
// for i = 1 to 4 do
4421: LD_ADDR_VAR 0 3
4425: PUSH
4426: DOUBLE
4427: LD_INT 1
4429: DEC
4430: ST_TO_ADDR
4431: LD_INT 4
4433: PUSH
4434: FOR_TO
4435: IFFALSE 4487
// begin PrepareScientist ( false , 7 ) ;
4437: LD_INT 0
4439: PPUSH
4440: LD_INT 7
4442: PPUSH
4443: CALL_OW 384
// temp_unit = CreateHuman ;
4447: LD_ADDR_VAR 0 4
4451: PUSH
4452: CALL_OW 44
4456: ST_TO_ADDR
// original_gensher_people = original_gensher_people ^ temp_unit ;
4457: LD_ADDR_EXP 82
4461: PUSH
4462: LD_EXP 82
4466: PUSH
4467: LD_VAR 0 4
4471: ADD
4472: ST_TO_ADDR
// PlaceHumanInUnit ( temp_unit , ar_lab ) ;
4473: LD_VAR 0 4
4477: PPUSH
4478: LD_INT 59
4480: PPUSH
4481: CALL_OW 52
// end ;
4485: GO 4434
4487: POP
4488: POP
// ai_scientists = Replace ( ai_scientists , 2 , original_gensher_people ) ;
4489: LD_ADDR_EXP 32
4493: PUSH
4494: LD_EXP 32
4498: PPUSH
4499: LD_INT 2
4501: PPUSH
4502: LD_EXP 82
4506: PPUSH
4507: CALL_OW 1
4511: ST_TO_ADDR
// PrepareEngineer ( false , [ 7 , 6 , 5 ] [ difficulty ] ) ;
4512: LD_INT 0
4514: PPUSH
4515: LD_INT 7
4517: PUSH
4518: LD_INT 6
4520: PUSH
4521: LD_INT 5
4523: PUSH
4524: EMPTY
4525: LIST
4526: LIST
4527: LIST
4528: PUSH
4529: LD_OWVAR 67
4533: ARRAY
4534: PPUSH
4535: CALL_OW 382
// temp_unit = CreateHuman ;
4539: LD_ADDR_VAR 0 4
4543: PUSH
4544: CALL_OW 44
4548: ST_TO_ADDR
// original_gensher_people = original_gensher_people ^ temp_unit ;
4549: LD_ADDR_EXP 82
4553: PUSH
4554: LD_EXP 82
4558: PUSH
4559: LD_VAR 0 4
4563: ADD
4564: ST_TO_ADDR
// PlaceHumanInUnit ( temp_unit , ar_dep ) ;
4565: LD_VAR 0 4
4569: PPUSH
4570: LD_INT 58
4572: PPUSH
4573: CALL_OW 52
// ai_engineers = Replace ( ai_engineers , 2 , [ temp_unit ] ) ;
4577: LD_ADDR_EXP 30
4581: PUSH
4582: LD_EXP 30
4586: PPUSH
4587: LD_INT 2
4589: PPUSH
4590: LD_VAR 0 4
4594: PUSH
4595: EMPTY
4596: LIST
4597: PPUSH
4598: CALL_OW 1
4602: ST_TO_ADDR
// InitHc ;
4603: CALL_OW 19
// uc_nation = nation_nature ;
4607: LD_ADDR_OWVAR 21
4611: PUSH
4612: LD_INT 0
4614: ST_TO_ADDR
// hc_class = class_apeman_soldier ;
4615: LD_ADDR_OWVAR 28
4619: PUSH
4620: LD_INT 15
4622: ST_TO_ADDR
// hc_skills = [ Rand ( 1 , 2 ) , Rand ( 0 , 1 ) , 0 , 0 ] ;
4623: LD_ADDR_OWVAR 31
4627: PUSH
4628: LD_INT 1
4630: PPUSH
4631: LD_INT 2
4633: PPUSH
4634: CALL_OW 12
4638: PUSH
4639: LD_INT 0
4641: PPUSH
4642: LD_INT 1
4644: PPUSH
4645: CALL_OW 12
4649: PUSH
4650: LD_INT 0
4652: PUSH
4653: LD_INT 0
4655: PUSH
4656: EMPTY
4657: LIST
4658: LIST
4659: LIST
4660: LIST
4661: ST_TO_ADDR
// hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 12 ) ] ;
4662: LD_ADDR_OWVAR 29
4666: PUSH
4667: LD_INT 11
4669: PPUSH
4670: LD_INT 13
4672: PPUSH
4673: CALL_OW 12
4677: PUSH
4678: LD_INT 10
4680: PPUSH
4681: LD_INT 12
4683: PPUSH
4684: CALL_OW 12
4688: PUSH
4689: EMPTY
4690: LIST
4691: LIST
4692: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
4693: LD_ADDR_OWVAR 27
4697: PUSH
4698: LD_INT 1
4700: PPUSH
4701: LD_INT 2
4703: PPUSH
4704: CALL_OW 12
4708: ST_TO_ADDR
// temp_unit = CreateHuman ;
4709: LD_ADDR_VAR 0 4
4713: PUSH
4714: CALL_OW 44
4718: ST_TO_ADDR
// PlaceHumanInUnit ( temp_unit , ar_bu1 ) ;
4719: LD_VAR 0 4
4723: PPUSH
4724: LD_INT 73
4726: PPUSH
4727: CALL_OW 52
// human_list = [ temp_unit ] ;
4731: LD_ADDR_VAR 0 2
4735: PUSH
4736: LD_VAR 0 4
4740: PUSH
4741: EMPTY
4742: LIST
4743: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
4744: LD_ADDR_OWVAR 27
4748: PUSH
4749: LD_INT 1
4751: PPUSH
4752: LD_INT 2
4754: PPUSH
4755: CALL_OW 12
4759: ST_TO_ADDR
// temp_unit = CreateHuman ;
4760: LD_ADDR_VAR 0 4
4764: PUSH
4765: CALL_OW 44
4769: ST_TO_ADDR
// PlaceHumanInUnit ( temp_unit , ar_bu2 ) ;
4770: LD_VAR 0 4
4774: PPUSH
4775: LD_INT 78
4777: PPUSH
4778: CALL_OW 52
// human_list = human_list ^ temp_unit ;
4782: LD_ADDR_VAR 0 2
4786: PUSH
4787: LD_VAR 0 2
4791: PUSH
4792: LD_VAR 0 4
4796: ADD
4797: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , 2 , human_list ^ Gensher ) ;
4798: LD_ADDR_EXP 29
4802: PUSH
4803: LD_EXP 29
4807: PPUSH
4808: LD_INT 2
4810: PPUSH
4811: LD_VAR 0 2
4815: PUSH
4816: LD_EXP 23
4820: ADD
4821: PPUSH
4822: CALL_OW 1
4826: ST_TO_ADDR
// val = GetSkill ( ai_engineers [ 2 ] [ 1 ] , skill_engineering ) ;
4827: LD_ADDR_VAR 0 5
4831: PUSH
4832: LD_EXP 30
4836: PUSH
4837: LD_INT 2
4839: ARRAY
4840: PUSH
4841: LD_INT 1
4843: ARRAY
4844: PPUSH
4845: LD_INT 2
4847: PPUSH
4848: CALL_OW 259
4852: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , you_alt ] , [ f_type , unit_building ] ] ) do
4853: LD_ADDR_VAR 0 3
4857: PUSH
4858: LD_INT 22
4860: PUSH
4861: LD_EXP 5
4865: PUSH
4866: EMPTY
4867: LIST
4868: LIST
4869: PUSH
4870: LD_INT 21
4872: PUSH
4873: LD_INT 3
4875: PUSH
4876: EMPTY
4877: LIST
4878: LIST
4879: PUSH
4880: EMPTY
4881: LIST
4882: LIST
4883: PPUSH
4884: CALL_OW 69
4888: PUSH
4889: FOR_IN
4890: IFFALSE 4908
// SetBLevel ( i , val ) ;
4892: LD_VAR 0 3
4896: PPUSH
4897: LD_VAR 0 5
4901: PPUSH
4902: CALL_OW 241
4906: GO 4889
4908: POP
4909: POP
// for i in ai_engineers [ 2 ] do
4910: LD_ADDR_VAR 0 3
4914: PUSH
4915: LD_EXP 30
4919: PUSH
4920: LD_INT 2
4922: ARRAY
4923: PUSH
4924: FOR_IN
4925: IFFALSE 4966
// if GetSkill ( i , skill_engineering ) > val then
4927: LD_VAR 0 3
4931: PPUSH
4932: LD_INT 2
4934: PPUSH
4935: CALL_OW 259
4939: PUSH
4940: LD_VAR 0 5
4944: GREATER
4945: IFFALSE 4964
// SetSkill ( i , skill_engineering , val ) ;
4947: LD_VAR 0 3
4951: PPUSH
4952: LD_INT 2
4954: PPUSH
4955: LD_VAR 0 5
4959: PPUSH
4960: CALL_OW 237
4964: GO 4924
4966: POP
4967: POP
// end ;
4968: LD_VAR 0 1
4972: RET
// function ScanBuildings ; var side , i , temp_list , base , area , temp_list_2 ; begin
4973: LD_INT 0
4975: PPUSH
4976: PPUSH
4977: PPUSH
4978: PPUSH
4979: PPUSH
4980: PPUSH
4981: PPUSH
// if difficulty <= 2 then
4982: LD_OWVAR 67
4986: PUSH
4987: LD_INT 2
4989: LESSEQUAL
4990: IFFALSE 5131
// begin temp_list = [ GetX ( rub3 ) , GetY ( rub3 ) , GetDir ( rub3 ) , GetBWeapon ( rub3 ) ] ;
4992: LD_ADDR_VAR 0 4
4996: PUSH
4997: LD_INT 269
4999: PPUSH
5000: CALL_OW 250
5004: PUSH
5005: LD_INT 269
5007: PPUSH
5008: CALL_OW 251
5012: PUSH
5013: LD_INT 269
5015: PPUSH
5016: CALL_OW 254
5020: PUSH
5021: LD_INT 269
5023: PPUSH
5024: CALL_OW 269
5028: PUSH
5029: EMPTY
5030: LIST
5031: LIST
5032: LIST
5033: LIST
5034: ST_TO_ADDR
// DestroyUnit ( rub3 ) ;
5035: LD_INT 269
5037: PPUSH
5038: CALL_OW 65
// InitUc ;
5042: CALL_OW 18
// InitBc ;
5046: CALL_OW 21
// uc_nation = nation_russian ;
5050: LD_ADDR_OWVAR 21
5054: PUSH
5055: LD_INT 3
5057: ST_TO_ADDR
// uc_side = russians ;
5058: LD_ADDR_OWVAR 20
5062: PUSH
5063: LD_EXP 3
5067: ST_TO_ADDR
// bc_type = b_turret ;
5068: LD_ADDR_OWVAR 42
5072: PUSH
5073: LD_INT 33
5075: ST_TO_ADDR
// i = CreateAndPlaceBuildingXYD ( temp_list [ 1 ] , temp_list [ 2 ] , temp_list [ 3 ] ) ;
5076: LD_ADDR_VAR 0 3
5080: PUSH
5081: LD_VAR 0 4
5085: PUSH
5086: LD_INT 1
5088: ARRAY
5089: PPUSH
5090: LD_VAR 0 4
5094: PUSH
5095: LD_INT 2
5097: ARRAY
5098: PPUSH
5099: LD_VAR 0 4
5103: PUSH
5104: LD_INT 3
5106: ARRAY
5107: PPUSH
5108: CALL_OW 47
5112: ST_TO_ADDR
// PlaceWeaponTurret ( i , temp_list [ 4 ] ) ;
5113: LD_VAR 0 3
5117: PPUSH
5118: LD_VAR 0 4
5122: PUSH
5123: LD_INT 4
5125: ARRAY
5126: PPUSH
5127: CALL_OW 431
// end ; if difficulty = 1 then
5131: LD_OWVAR 67
5135: PUSH
5136: LD_INT 1
5138: EQUAL
5139: IFFALSE 5280
// begin temp_list = [ GetX ( rub1 ) , GetY ( rub1 ) , GetDir ( rub1 ) , GetBWeapon ( rub1 ) ] ;
5141: LD_ADDR_VAR 0 4
5145: PUSH
5146: LD_INT 273
5148: PPUSH
5149: CALL_OW 250
5153: PUSH
5154: LD_INT 273
5156: PPUSH
5157: CALL_OW 251
5161: PUSH
5162: LD_INT 273
5164: PPUSH
5165: CALL_OW 254
5169: PUSH
5170: LD_INT 273
5172: PPUSH
5173: CALL_OW 269
5177: PUSH
5178: EMPTY
5179: LIST
5180: LIST
5181: LIST
5182: LIST
5183: ST_TO_ADDR
// DestroyUnit ( rub1 ) ;
5184: LD_INT 273
5186: PPUSH
5187: CALL_OW 65
// InitUc ;
5191: CALL_OW 18
// InitBc ;
5195: CALL_OW 21
// uc_nation = nation_russian ;
5199: LD_ADDR_OWVAR 21
5203: PUSH
5204: LD_INT 3
5206: ST_TO_ADDR
// uc_side = russians ;
5207: LD_ADDR_OWVAR 20
5211: PUSH
5212: LD_EXP 3
5216: ST_TO_ADDR
// bc_type = b_turret ;
5217: LD_ADDR_OWVAR 42
5221: PUSH
5222: LD_INT 33
5224: ST_TO_ADDR
// i = CreateAndPlaceBuildingXYD ( temp_list [ 1 ] , temp_list [ 2 ] , temp_list [ 3 ] ) ;
5225: LD_ADDR_VAR 0 3
5229: PUSH
5230: LD_VAR 0 4
5234: PUSH
5235: LD_INT 1
5237: ARRAY
5238: PPUSH
5239: LD_VAR 0 4
5243: PUSH
5244: LD_INT 2
5246: ARRAY
5247: PPUSH
5248: LD_VAR 0 4
5252: PUSH
5253: LD_INT 3
5255: ARRAY
5256: PPUSH
5257: CALL_OW 47
5261: ST_TO_ADDR
// PlaceWeaponTurret ( i , temp_list [ 4 ] ) ;
5262: LD_VAR 0 3
5266: PPUSH
5267: LD_VAR 0 4
5271: PUSH
5272: LD_INT 4
5274: ARRAY
5275: PPUSH
5276: CALL_OW 431
// end ; for base in ai_bases do
5280: LD_ADDR_VAR 0 5
5284: PUSH
5285: LD_EXP 58
5289: PUSH
5290: FOR_IN
5291: IFFALSE 5917
// begin case base of 1 :
5293: LD_VAR 0 5
5297: PUSH
5298: LD_INT 1
5300: DOUBLE
5301: EQUAL
5302: IFTRUE 5306
5304: GO 5327
5306: POP
// begin area = Am_base ;
5307: LD_ADDR_VAR 0 6
5311: PUSH
5312: LD_INT 4
5314: ST_TO_ADDR
// side = americans ;
5315: LD_ADDR_VAR 0 2
5319: PUSH
5320: LD_EXP 6
5324: ST_TO_ADDR
// end ; 2 :
5325: GO 5386
5327: LD_INT 2
5329: DOUBLE
5330: EQUAL
5331: IFTRUE 5335
5333: GO 5356
5335: POP
// begin area = Gensher_base ;
5336: LD_ADDR_VAR 0 6
5340: PUSH
5341: LD_INT 7
5343: ST_TO_ADDR
// side = you_alt ;
5344: LD_ADDR_VAR 0 2
5348: PUSH
5349: LD_EXP 5
5353: ST_TO_ADDR
// end ; 3 :
5354: GO 5386
5356: LD_INT 3
5358: DOUBLE
5359: EQUAL
5360: IFTRUE 5364
5362: GO 5385
5364: POP
// begin area = Ru_base ;
5365: LD_ADDR_VAR 0 6
5369: PUSH
5370: LD_INT 3
5372: ST_TO_ADDR
// side = russians ;
5373: LD_ADDR_VAR 0 2
5377: PUSH
5378: LD_EXP 3
5382: ST_TO_ADDR
// end ; end ;
5383: GO 5386
5385: POP
// ai_all_buildings = Replace ( ai_all_buildings , base , FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_building ] , [ f_inarea , area ] ] ) ) ;
5386: LD_ADDR_EXP 44
5390: PUSH
5391: LD_EXP 44
5395: PPUSH
5396: LD_VAR 0 5
5400: PPUSH
5401: LD_INT 22
5403: PUSH
5404: LD_VAR 0 2
5408: PUSH
5409: EMPTY
5410: LIST
5411: LIST
5412: PUSH
5413: LD_INT 21
5415: PUSH
5416: LD_INT 3
5418: PUSH
5419: EMPTY
5420: LIST
5421: LIST
5422: PUSH
5423: LD_INT 95
5425: PUSH
5426: LD_VAR 0 6
5430: PUSH
5431: EMPTY
5432: LIST
5433: LIST
5434: PUSH
5435: EMPTY
5436: LIST
5437: LIST
5438: LIST
5439: PPUSH
5440: CALL_OW 69
5444: PPUSH
5445: CALL_OW 1
5449: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
5450: LD_ADDR_VAR 0 3
5454: PUSH
5455: LD_EXP 44
5459: PUSH
5460: LD_VAR 0 5
5464: ARRAY
5465: PUSH
5466: FOR_IN
5467: IFFALSE 5488
// UpdateBuildingBasicVariables ( base , i , true ) ;
5469: LD_VAR 0 5
5473: PPUSH
5474: LD_VAR 0 3
5478: PPUSH
5479: LD_INT 1
5481: PPUSH
5482: CALL 5924 0 3
5486: GO 5466
5488: POP
5489: POP
// if base = 1 then
5490: LD_VAR 0 5
5494: PUSH
5495: LD_INT 1
5497: EQUAL
5498: IFFALSE 5518
// SetBName ( ai_depot [ base ] , epsilon ) ;
5500: LD_EXP 34
5504: PUSH
5505: LD_VAR 0 5
5509: ARRAY
5510: PPUSH
5511: LD_STRING epsilon
5513: PPUSH
5514: CALL_OW 500
// temp_list = [ ] ;
5518: LD_ADDR_VAR 0 4
5522: PUSH
5523: EMPTY
5524: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
5525: LD_ADDR_VAR 0 3
5529: PUSH
5530: LD_EXP 44
5534: PUSH
5535: LD_VAR 0 5
5539: ARRAY
5540: PUSH
5541: FOR_IN
5542: IFFALSE 5815
// begin if base = 3 and i in [ rub1 , rub2 ] then
5544: LD_VAR 0 5
5548: PUSH
5549: LD_INT 3
5551: EQUAL
5552: PUSH
5553: LD_VAR 0 3
5557: PUSH
5558: LD_INT 273
5560: PUSH
5561: LD_INT 271
5563: PUSH
5564: EMPTY
5565: LIST
5566: LIST
5567: IN
5568: AND
5569: IFFALSE 5620
// begin temp_list_2 = ai_excepted_buildings [ base ] ^ i ;
5571: LD_ADDR_VAR 0 7
5575: PUSH
5576: LD_EXP 68
5580: PUSH
5581: LD_VAR 0 5
5585: ARRAY
5586: PUSH
5587: LD_VAR 0 3
5591: ADD
5592: ST_TO_ADDR
// ai_excepted_buildings = Replace ( ai_excepted_buildings , base , temp_list_2 ) ;
5593: LD_ADDR_EXP 68
5597: PUSH
5598: LD_EXP 68
5602: PPUSH
5603: LD_VAR 0 5
5607: PPUSH
5608: LD_VAR 0 7
5612: PPUSH
5613: CALL_OW 1
5617: ST_TO_ADDR
// continue ;
5618: GO 5541
// end ; temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , GetBWeapon ( i ) ] ] ;
5620: LD_ADDR_VAR 0 4
5624: PUSH
5625: LD_VAR 0 4
5629: PUSH
5630: LD_VAR 0 3
5634: PPUSH
5635: CALL_OW 250
5639: PUSH
5640: LD_VAR 0 3
5644: PPUSH
5645: CALL_OW 251
5649: PUSH
5650: LD_VAR 0 3
5654: PPUSH
5655: CALL_OW 254
5659: PUSH
5660: LD_VAR 0 3
5664: PPUSH
5665: CALL_OW 266
5669: PUSH
5670: LD_VAR 0 3
5674: PPUSH
5675: LD_INT 1
5677: PPUSH
5678: CALL_OW 268
5682: PUSH
5683: LD_VAR 0 3
5687: PPUSH
5688: LD_INT 2
5690: PPUSH
5691: CALL_OW 268
5695: PUSH
5696: LD_VAR 0 3
5700: PPUSH
5701: CALL_OW 269
5705: PUSH
5706: EMPTY
5707: LIST
5708: LIST
5709: LIST
5710: LIST
5711: LIST
5712: LIST
5713: LIST
5714: PUSH
5715: EMPTY
5716: LIST
5717: ADD
5718: ST_TO_ADDR
// if base = 2 and temp_list [ temp_list + 0 ] [ 4 ] = b_bunker then
5719: LD_VAR 0 5
5723: PUSH
5724: LD_INT 2
5726: EQUAL
5727: PUSH
5728: LD_VAR 0 4
5732: PUSH
5733: LD_VAR 0 4
5737: PUSH
5738: LD_INT 0
5740: PLUS
5741: ARRAY
5742: PUSH
5743: LD_INT 4
5745: ARRAY
5746: PUSH
5747: LD_INT 32
5749: EQUAL
5750: AND
5751: IFFALSE 5813
// begin temp_list_2 = Replace ( temp_list [ temp_list + 0 ] , 4 , b_breastwork ) ;
5753: LD_ADDR_VAR 0 7
5757: PUSH
5758: LD_VAR 0 4
5762: PUSH
5763: LD_VAR 0 4
5767: PUSH
5768: LD_INT 0
5770: PLUS
5771: ARRAY
5772: PPUSH
5773: LD_INT 4
5775: PPUSH
5776: LD_INT 31
5778: PPUSH
5779: CALL_OW 1
5783: ST_TO_ADDR
// temp_list = Replace ( temp_list , temp_list + 0 , temp_list_2 ) ;
5784: LD_ADDR_VAR 0 4
5788: PUSH
5789: LD_VAR 0 4
5793: PPUSH
5794: LD_VAR 0 4
5798: PUSH
5799: LD_INT 0
5801: PLUS
5802: PPUSH
5803: LD_VAR 0 7
5807: PPUSH
5808: CALL_OW 1
5812: ST_TO_ADDR
// end ; end ;
5813: GO 5541
5815: POP
5816: POP
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
5817: LD_ADDR_EXP 38
5821: PUSH
5822: LD_EXP 38
5826: PPUSH
5827: LD_VAR 0 5
5831: PPUSH
5832: LD_VAR 0 4
5836: PPUSH
5837: CALL_OW 1
5841: ST_TO_ADDR
// SortBuildingLocationsListInCorrectOrder ( base ) ;
5842: LD_VAR 0 5
5846: PPUSH
5847: CALL 6999 0 1
// for i in ai_siberite_mines [ base ] ^ ai_oil_mine [ base ] do
5851: LD_ADDR_VAR 0 3
5855: PUSH
5856: LD_EXP 36
5860: PUSH
5861: LD_VAR 0 5
5865: ARRAY
5866: PUSH
5867: LD_EXP 50
5871: PUSH
5872: LD_VAR 0 5
5876: ARRAY
5877: ADD
5878: PUSH
5879: FOR_IN
5880: IFFALSE 5913
// SetResourceVisibility ( GetX ( i ) , GetY ( i ) , side ) ;
5882: LD_VAR 0 3
5886: PPUSH
5887: CALL_OW 250
5891: PPUSH
5892: LD_VAR 0 3
5896: PPUSH
5897: CALL_OW 251
5901: PPUSH
5902: LD_VAR 0 2
5906: PPUSH
5907: CALL_OW 441
5911: GO 5879
5913: POP
5914: POP
// end ;
5915: GO 5290
5917: POP
5918: POP
// end ;
5919: LD_VAR 0 1
5923: RET
// export function UpdateBuildingBasicVariables ( base , un , add ) ; var temp_list ; begin
5924: LD_INT 0
5926: PPUSH
5927: PPUSH
// case GetBType ( un ) of b_depot , b_warehouse :
5928: LD_VAR 0 2
5932: PPUSH
5933: CALL_OW 266
5937: PUSH
5938: LD_INT 0
5940: DOUBLE
5941: EQUAL
5942: IFTRUE 5952
5944: LD_INT 1
5946: DOUBLE
5947: EQUAL
5948: IFTRUE 5952
5950: GO 6029
5952: POP
// if add then
5953: LD_VAR 0 3
5957: IFFALSE 5986
// ai_depot = Replace ( ai_depot , base , un ) else
5959: LD_ADDR_EXP 34
5963: PUSH
5964: LD_EXP 34
5968: PPUSH
5969: LD_VAR 0 1
5973: PPUSH
5974: LD_VAR 0 2
5978: PPUSH
5979: CALL_OW 1
5983: ST_TO_ADDR
5984: GO 6027
// if un = ai_depot [ base ] then
5986: LD_VAR 0 2
5990: PUSH
5991: LD_EXP 34
5995: PUSH
5996: LD_VAR 0 1
6000: ARRAY
6001: EQUAL
6002: IFFALSE 6027
// ai_depot = Replace ( ai_depot , base , 0 ) ; b_lab , b_lab_half , b_lab_full :
6004: LD_ADDR_EXP 34
6008: PUSH
6009: LD_EXP 34
6013: PPUSH
6014: LD_VAR 0 1
6018: PPUSH
6019: LD_INT 0
6021: PPUSH
6022: CALL_OW 1
6026: ST_TO_ADDR
6027: GO 6994
6029: LD_INT 6
6031: DOUBLE
6032: EQUAL
6033: IFTRUE 6049
6035: LD_INT 7
6037: DOUBLE
6038: EQUAL
6039: IFTRUE 6049
6041: LD_INT 8
6043: DOUBLE
6044: EQUAL
6045: IFTRUE 6049
6047: GO 6129
6049: POP
// begin if add then
6050: LD_VAR 0 3
6054: IFFALSE 6080
// temp_list = ai_labs [ base ] ^ un else
6056: LD_ADDR_VAR 0 5
6060: PUSH
6061: LD_EXP 35
6065: PUSH
6066: LD_VAR 0 1
6070: ARRAY
6071: PUSH
6072: LD_VAR 0 2
6076: ADD
6077: ST_TO_ADDR
6078: GO 6102
// temp_list = ai_labs [ base ] diff un ;
6080: LD_ADDR_VAR 0 5
6084: PUSH
6085: LD_EXP 35
6089: PUSH
6090: LD_VAR 0 1
6094: ARRAY
6095: PUSH
6096: LD_VAR 0 2
6100: DIFF
6101: ST_TO_ADDR
// ai_labs = Replace ( ai_labs , base , temp_list ) ;
6102: LD_ADDR_EXP 35
6106: PUSH
6107: LD_EXP 35
6111: PPUSH
6112: LD_VAR 0 1
6116: PPUSH
6117: LD_VAR 0 5
6121: PPUSH
6122: CALL_OW 1
6126: ST_TO_ADDR
// end ; b_factory , b_workshop :
6127: GO 6994
6129: LD_INT 3
6131: DOUBLE
6132: EQUAL
6133: IFTRUE 6143
6135: LD_INT 2
6137: DOUBLE
6138: EQUAL
6139: IFTRUE 6143
6141: GO 6223
6143: POP
// begin if add then
6144: LD_VAR 0 3
6148: IFFALSE 6174
// temp_list = ai_facts [ base ] ^ un else
6150: LD_ADDR_VAR 0 5
6154: PUSH
6155: LD_EXP 47
6159: PUSH
6160: LD_VAR 0 1
6164: ARRAY
6165: PUSH
6166: LD_VAR 0 2
6170: ADD
6171: ST_TO_ADDR
6172: GO 6196
// temp_list = ai_facts [ base ] diff un ;
6174: LD_ADDR_VAR 0 5
6178: PUSH
6179: LD_EXP 47
6183: PUSH
6184: LD_VAR 0 1
6188: ARRAY
6189: PUSH
6190: LD_VAR 0 2
6194: DIFF
6195: ST_TO_ADDR
// ai_facts = Replace ( ai_facts , base , temp_list ) ;
6196: LD_ADDR_EXP 47
6200: PUSH
6201: LD_EXP 47
6205: PPUSH
6206: LD_VAR 0 1
6210: PPUSH
6211: LD_VAR 0 5
6215: PPUSH
6216: CALL_OW 1
6220: ST_TO_ADDR
// end ; b_armoury , b_barracks :
6221: GO 6994
6223: LD_INT 4
6225: DOUBLE
6226: EQUAL
6227: IFTRUE 6237
6229: LD_INT 5
6231: DOUBLE
6232: EQUAL
6233: IFTRUE 6237
6235: GO 6317
6237: POP
// begin if add then
6238: LD_VAR 0 3
6242: IFFALSE 6268
// temp_list = ai_armouries [ base ] ^ un else
6244: LD_ADDR_VAR 0 5
6248: PUSH
6249: LD_EXP 48
6253: PUSH
6254: LD_VAR 0 1
6258: ARRAY
6259: PUSH
6260: LD_VAR 0 2
6264: ADD
6265: ST_TO_ADDR
6266: GO 6290
// temp_list = ai_armouries [ base ] diff un ;
6268: LD_ADDR_VAR 0 5
6272: PUSH
6273: LD_EXP 48
6277: PUSH
6278: LD_VAR 0 1
6282: ARRAY
6283: PUSH
6284: LD_VAR 0 2
6288: DIFF
6289: ST_TO_ADDR
// ai_armouries = Replace ( ai_armouries , base , temp_list ) ;
6290: LD_ADDR_EXP 48
6294: PUSH
6295: LD_EXP 48
6299: PPUSH
6300: LD_VAR 0 1
6304: PPUSH
6305: LD_VAR 0 5
6309: PPUSH
6310: CALL_OW 1
6314: ST_TO_ADDR
// end ; b_breastwork , b_bunker :
6315: GO 6994
6317: LD_INT 31
6319: DOUBLE
6320: EQUAL
6321: IFTRUE 6331
6323: LD_INT 32
6325: DOUBLE
6326: EQUAL
6327: IFTRUE 6331
6329: GO 6411
6331: POP
// begin if add then
6332: LD_VAR 0 3
6336: IFFALSE 6362
// temp_list = ai_bunkers [ base ] ^ un else
6338: LD_ADDR_VAR 0 5
6342: PUSH
6343: LD_EXP 49
6347: PUSH
6348: LD_VAR 0 1
6352: ARRAY
6353: PUSH
6354: LD_VAR 0 2
6358: ADD
6359: ST_TO_ADDR
6360: GO 6384
// temp_list = ai_bunkers [ base ] diff un ;
6362: LD_ADDR_VAR 0 5
6366: PUSH
6367: LD_EXP 49
6371: PUSH
6372: LD_VAR 0 1
6376: ARRAY
6377: PUSH
6378: LD_VAR 0 2
6382: DIFF
6383: ST_TO_ADDR
// ai_bunkers = Replace ( ai_bunkers , base , temp_list ) ;
6384: LD_ADDR_EXP 49
6388: PUSH
6389: LD_EXP 49
6393: PPUSH
6394: LD_VAR 0 1
6398: PPUSH
6399: LD_VAR 0 5
6403: PPUSH
6404: CALL_OW 1
6408: ST_TO_ADDR
// end ; b_turret :
6409: GO 6994
6411: LD_INT 33
6413: DOUBLE
6414: EQUAL
6415: IFTRUE 6419
6417: GO 6499
6419: POP
// begin if add then
6420: LD_VAR 0 3
6424: IFFALSE 6450
// temp_list = ai_turrets [ base ] ^ un else
6426: LD_ADDR_VAR 0 5
6430: PUSH
6431: LD_EXP 55
6435: PUSH
6436: LD_VAR 0 1
6440: ARRAY
6441: PUSH
6442: LD_VAR 0 2
6446: ADD
6447: ST_TO_ADDR
6448: GO 6472
// temp_list = ai_turrets [ base ] diff un ;
6450: LD_ADDR_VAR 0 5
6454: PUSH
6455: LD_EXP 55
6459: PUSH
6460: LD_VAR 0 1
6464: ARRAY
6465: PUSH
6466: LD_VAR 0 2
6470: DIFF
6471: ST_TO_ADDR
// ai_turrets = Replace ( ai_turrets , base , temp_list ) ;
6472: LD_ADDR_EXP 55
6476: PUSH
6477: LD_EXP 55
6481: PPUSH
6482: LD_VAR 0 1
6486: PPUSH
6487: LD_VAR 0 5
6491: PPUSH
6492: CALL_OW 1
6496: ST_TO_ADDR
// end ; b_oil_mine :
6497: GO 6994
6499: LD_INT 29
6501: DOUBLE
6502: EQUAL
6503: IFTRUE 6507
6505: GO 6584
6507: POP
// if add then
6508: LD_VAR 0 3
6512: IFFALSE 6541
// ai_oil_mine = Replace ( ai_oil_mine , base , un ) else
6514: LD_ADDR_EXP 50
6518: PUSH
6519: LD_EXP 50
6523: PPUSH
6524: LD_VAR 0 1
6528: PPUSH
6529: LD_VAR 0 2
6533: PPUSH
6534: CALL_OW 1
6538: ST_TO_ADDR
6539: GO 6582
// if un = ai_oil_mine [ base ] then
6541: LD_VAR 0 2
6545: PUSH
6546: LD_EXP 50
6550: PUSH
6551: LD_VAR 0 1
6555: ARRAY
6556: EQUAL
6557: IFFALSE 6582
// ai_oil_mine = Replace ( ai_oil_mine , base , 0 ) ; b_siberite_mine :
6559: LD_ADDR_EXP 50
6563: PUSH
6564: LD_EXP 50
6568: PPUSH
6569: LD_VAR 0 1
6573: PPUSH
6574: LD_INT 0
6576: PPUSH
6577: CALL_OW 1
6581: ST_TO_ADDR
6582: GO 6994
6584: LD_INT 30
6586: DOUBLE
6587: EQUAL
6588: IFTRUE 6592
6590: GO 6672
6592: POP
// begin if add then
6593: LD_VAR 0 3
6597: IFFALSE 6623
// temp_list = ai_siberite_mines [ base ] ^ un else
6599: LD_ADDR_VAR 0 5
6603: PUSH
6604: LD_EXP 36
6608: PUSH
6609: LD_VAR 0 1
6613: ARRAY
6614: PUSH
6615: LD_VAR 0 2
6619: ADD
6620: ST_TO_ADDR
6621: GO 6645
// temp_list = ai_siberite_mines [ base ] diff un ;
6623: LD_ADDR_VAR 0 5
6627: PUSH
6628: LD_EXP 36
6632: PUSH
6633: LD_VAR 0 1
6637: ARRAY
6638: PUSH
6639: LD_VAR 0 2
6643: DIFF
6644: ST_TO_ADDR
// ai_siberite_mines = Replace ( ai_siberite_mines , base , temp_list ) ;
6645: LD_ADDR_EXP 36
6649: PUSH
6650: LD_EXP 36
6654: PPUSH
6655: LD_VAR 0 1
6659: PPUSH
6660: LD_VAR 0 5
6664: PPUSH
6665: CALL_OW 1
6669: 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 :
6670: GO 6994
6672: LD_INT 17
6674: DOUBLE
6675: EQUAL
6676: IFTRUE 6728
6678: LD_INT 19
6680: DOUBLE
6681: EQUAL
6682: IFTRUE 6728
6684: LD_INT 25
6686: DOUBLE
6687: EQUAL
6688: IFTRUE 6728
6690: LD_INT 24
6692: DOUBLE
6693: EQUAL
6694: IFTRUE 6728
6696: LD_INT 20
6698: DOUBLE
6699: EQUAL
6700: IFTRUE 6728
6702: LD_INT 18
6704: DOUBLE
6705: EQUAL
6706: IFTRUE 6728
6708: LD_INT 21
6710: DOUBLE
6711: EQUAL
6712: IFTRUE 6728
6714: LD_INT 16
6716: DOUBLE
6717: EQUAL
6718: IFTRUE 6728
6720: LD_INT 23
6722: DOUBLE
6723: EQUAL
6724: IFTRUE 6728
6726: GO 6808
6728: POP
// begin if add then
6729: LD_VAR 0 3
6733: IFFALSE 6759
// temp_list = ai_fact_extensions [ base ] ^ un else
6735: LD_ADDR_VAR 0 5
6739: PUSH
6740: LD_EXP 51
6744: PUSH
6745: LD_VAR 0 1
6749: ARRAY
6750: PUSH
6751: LD_VAR 0 2
6755: ADD
6756: ST_TO_ADDR
6757: GO 6781
// temp_list = ai_fact_extensions [ base ] diff un ;
6759: LD_ADDR_VAR 0 5
6763: PUSH
6764: LD_EXP 51
6768: PUSH
6769: LD_VAR 0 1
6773: ARRAY
6774: PUSH
6775: LD_VAR 0 2
6779: DIFF
6780: ST_TO_ADDR
// ai_fact_extensions = Replace ( ai_fact_extensions , base , temp_list ) ;
6781: LD_ADDR_EXP 51
6785: PUSH
6786: LD_EXP 51
6790: PPUSH
6791: LD_VAR 0 1
6795: PPUSH
6796: LD_VAR 0 5
6800: PPUSH
6801: CALL_OW 1
6805: ST_TO_ADDR
// end ; b_solar_power , b_oil_power , b_siberite_power :
6806: GO 6994
6808: LD_INT 27
6810: DOUBLE
6811: EQUAL
6812: IFTRUE 6828
6814: LD_INT 26
6816: DOUBLE
6817: EQUAL
6818: IFTRUE 6828
6820: LD_INT 28
6822: DOUBLE
6823: EQUAL
6824: IFTRUE 6828
6826: GO 6908
6828: POP
// begin if add then
6829: LD_VAR 0 3
6833: IFFALSE 6859
// temp_list = ai_power_plants [ base ] ^ un else
6835: LD_ADDR_VAR 0 5
6839: PUSH
6840: LD_EXP 37
6844: PUSH
6845: LD_VAR 0 1
6849: ARRAY
6850: PUSH
6851: LD_VAR 0 2
6855: ADD
6856: ST_TO_ADDR
6857: GO 6881
// temp_list = ai_power_plants [ base ] diff un ;
6859: LD_ADDR_VAR 0 5
6863: PUSH
6864: LD_EXP 37
6868: PUSH
6869: LD_VAR 0 1
6873: ARRAY
6874: PUSH
6875: LD_VAR 0 2
6879: DIFF
6880: ST_TO_ADDR
// ai_power_plants = Replace ( ai_power_plants , base , temp_list ) ;
6881: LD_ADDR_EXP 37
6885: PUSH
6886: LD_EXP 37
6890: PPUSH
6891: LD_VAR 0 1
6895: PPUSH
6896: LD_VAR 0 5
6900: PPUSH
6901: CALL_OW 1
6905: ST_TO_ADDR
// end ; b_control_tower :
6906: GO 6994
6908: LD_INT 36
6910: DOUBLE
6911: EQUAL
6912: IFTRUE 6916
6914: GO 6993
6916: POP
// begin if add then
6917: LD_VAR 0 3
6921: IFFALSE 6950
// ai_control_tower = Replace ( ai_control_tower , base , un ) else
6923: LD_ADDR_EXP 56
6927: PUSH
6928: LD_EXP 56
6932: PPUSH
6933: LD_VAR 0 1
6937: PPUSH
6938: LD_VAR 0 2
6942: PPUSH
6943: CALL_OW 1
6947: ST_TO_ADDR
6948: GO 6991
// if un = ai_control_tower [ base ] then
6950: LD_VAR 0 2
6954: PUSH
6955: LD_EXP 56
6959: PUSH
6960: LD_VAR 0 1
6964: ARRAY
6965: EQUAL
6966: IFFALSE 6991
// ai_control_tower = Replace ( ai_control_tower , base , 0 ) ;
6968: LD_ADDR_EXP 56
6972: PUSH
6973: LD_EXP 56
6977: PPUSH
6978: LD_VAR 0 1
6982: PPUSH
6983: LD_INT 0
6985: PPUSH
6986: CALL_OW 1
6990: ST_TO_ADDR
// end ; end ;
6991: GO 6994
6993: POP
// end ;
6994: LD_VAR 0 4
6998: RET
// function SortBuildingLocationsListInCorrectOrder ( base ) ; var i , temp_list , p ; begin
6999: LD_INT 0
7001: PPUSH
7002: PPUSH
7003: PPUSH
7004: PPUSH
// temp_list = [ ] ;
7005: LD_ADDR_VAR 0 4
7009: PUSH
7010: EMPTY
7011: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
7012: LD_ADDR_VAR 0 3
7016: PUSH
7017: LD_EXP 38
7021: PUSH
7022: LD_VAR 0 1
7026: ARRAY
7027: PUSH
7028: FOR_IN
7029: IFFALSE 7402
// begin case i [ 4 ] of b_depot , b_warehouse :
7031: LD_VAR 0 3
7035: PUSH
7036: LD_INT 4
7038: ARRAY
7039: PUSH
7040: LD_INT 0
7042: DOUBLE
7043: EQUAL
7044: IFTRUE 7054
7046: LD_INT 1
7048: DOUBLE
7049: EQUAL
7050: IFTRUE 7054
7052: GO 7065
7054: POP
// p = 100 ; b_armoury , b_barracks , b_fort :
7055: LD_ADDR_VAR 0 5
7059: PUSH
7060: LD_INT 100
7062: ST_TO_ADDR
7063: GO 7384
7065: LD_INT 4
7067: DOUBLE
7068: EQUAL
7069: IFTRUE 7085
7071: LD_INT 5
7073: DOUBLE
7074: EQUAL
7075: IFTRUE 7085
7077: LD_INT 35
7079: DOUBLE
7080: EQUAL
7081: IFTRUE 7085
7083: GO 7096
7085: POP
// p = 99 ; b_solar_power , b_oil_power , b_siberite_power :
7086: LD_ADDR_VAR 0 5
7090: PUSH
7091: LD_INT 99
7093: ST_TO_ADDR
7094: GO 7384
7096: LD_INT 27
7098: DOUBLE
7099: EQUAL
7100: IFTRUE 7116
7102: LD_INT 26
7104: DOUBLE
7105: EQUAL
7106: IFTRUE 7116
7108: LD_INT 28
7110: DOUBLE
7111: EQUAL
7112: IFTRUE 7116
7114: GO 7127
7116: POP
// p = 98 ; b_breastwork :
7117: LD_ADDR_VAR 0 5
7121: PUSH
7122: LD_INT 98
7124: ST_TO_ADDR
7125: GO 7384
7127: LD_INT 31
7129: DOUBLE
7130: EQUAL
7131: IFTRUE 7135
7133: GO 7146
7135: POP
// p = 97 ; b_factory , b_workshop :
7136: LD_ADDR_VAR 0 5
7140: PUSH
7141: LD_INT 97
7143: ST_TO_ADDR
7144: GO 7384
7146: LD_INT 3
7148: DOUBLE
7149: EQUAL
7150: IFTRUE 7160
7152: LD_INT 2
7154: DOUBLE
7155: EQUAL
7156: IFTRUE 7160
7158: GO 7171
7160: 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 :
7161: LD_ADDR_VAR 0 5
7165: PUSH
7166: LD_INT 96
7168: ST_TO_ADDR
7169: GO 7384
7171: LD_INT 17
7173: DOUBLE
7174: EQUAL
7175: IFTRUE 7227
7177: LD_INT 19
7179: DOUBLE
7180: EQUAL
7181: IFTRUE 7227
7183: LD_INT 25
7185: DOUBLE
7186: EQUAL
7187: IFTRUE 7227
7189: LD_INT 24
7191: DOUBLE
7192: EQUAL
7193: IFTRUE 7227
7195: LD_INT 20
7197: DOUBLE
7198: EQUAL
7199: IFTRUE 7227
7201: LD_INT 18
7203: DOUBLE
7204: EQUAL
7205: IFTRUE 7227
7207: LD_INT 21
7209: DOUBLE
7210: EQUAL
7211: IFTRUE 7227
7213: LD_INT 16
7215: DOUBLE
7216: EQUAL
7217: IFTRUE 7227
7219: LD_INT 23
7221: DOUBLE
7222: EQUAL
7223: IFTRUE 7227
7225: GO 7238
7227: POP
// p = 95 ; b_bunker :
7228: LD_ADDR_VAR 0 5
7232: PUSH
7233: LD_INT 95
7235: ST_TO_ADDR
7236: GO 7384
7238: LD_INT 32
7240: DOUBLE
7241: EQUAL
7242: IFTRUE 7246
7244: GO 7257
7246: POP
// p = 94 ; b_control_tower :
7247: LD_ADDR_VAR 0 5
7251: PUSH
7252: LD_INT 94
7254: ST_TO_ADDR
7255: GO 7384
7257: LD_INT 36
7259: DOUBLE
7260: EQUAL
7261: IFTRUE 7265
7263: GO 7276
7265: POP
// p = 93 ; b_turret :
7266: LD_ADDR_VAR 0 5
7270: PUSH
7271: LD_INT 93
7273: ST_TO_ADDR
7274: GO 7384
7276: LD_INT 33
7278: DOUBLE
7279: EQUAL
7280: IFTRUE 7284
7282: GO 7295
7284: POP
// p = 92 ; b_lab , b_lab_half , b_lab_full :
7285: LD_ADDR_VAR 0 5
7289: PUSH
7290: LD_INT 92
7292: ST_TO_ADDR
7293: GO 7384
7295: LD_INT 6
7297: DOUBLE
7298: EQUAL
7299: IFTRUE 7315
7301: LD_INT 7
7303: DOUBLE
7304: EQUAL
7305: IFTRUE 7315
7307: LD_INT 8
7309: DOUBLE
7310: EQUAL
7311: IFTRUE 7315
7313: GO 7326
7315: POP
// p = 91 ; b_teleport :
7316: LD_ADDR_VAR 0 5
7320: PUSH
7321: LD_INT 91
7323: ST_TO_ADDR
7324: GO 7384
7326: LD_INT 34
7328: DOUBLE
7329: EQUAL
7330: IFTRUE 7334
7332: GO 7345
7334: POP
// p = 90 ; b_siberite_mine :
7335: LD_ADDR_VAR 0 5
7339: PUSH
7340: LD_INT 90
7342: ST_TO_ADDR
7343: GO 7384
7345: LD_INT 30
7347: DOUBLE
7348: EQUAL
7349: IFTRUE 7353
7351: GO 7364
7353: POP
// p = 89 ; b_oil_mine :
7354: LD_ADDR_VAR 0 5
7358: PUSH
7359: LD_INT 89
7361: ST_TO_ADDR
7362: GO 7384
7364: LD_INT 29
7366: DOUBLE
7367: EQUAL
7368: IFTRUE 7372
7370: GO 7383
7372: POP
// p = 88 ; end ;
7373: LD_ADDR_VAR 0 5
7377: PUSH
7378: LD_INT 88
7380: ST_TO_ADDR
7381: GO 7384
7383: POP
// temp_list = temp_list ^ p ;
7384: LD_ADDR_VAR 0 4
7388: PUSH
7389: LD_VAR 0 4
7393: PUSH
7394: LD_VAR 0 5
7398: ADD
7399: ST_TO_ADDR
// end ;
7400: GO 7028
7402: POP
7403: POP
// temp_list = SortListByListDesc ( ai_buildings_locations [ base ] , temp_list ) ;
7404: LD_ADDR_VAR 0 4
7408: PUSH
7409: LD_EXP 38
7413: PUSH
7414: LD_VAR 0 1
7418: ARRAY
7419: PPUSH
7420: LD_VAR 0 4
7424: PPUSH
7425: CALL_OW 77
7429: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
7430: LD_ADDR_EXP 38
7434: PUSH
7435: LD_EXP 38
7439: PPUSH
7440: LD_VAR 0 1
7444: PPUSH
7445: LD_VAR 0 4
7449: PPUSH
7450: CALL_OW 1
7454: ST_TO_ADDR
// end ;
7455: LD_VAR 0 2
7459: RET
// function PrepareComputerSides ; var i , temp_list , side , base , num ; begin
7460: LD_INT 0
7462: PPUSH
7463: PPUSH
7464: PPUSH
7465: PPUSH
7466: PPUSH
7467: PPUSH
// for base in ai_bases do
7468: LD_ADDR_VAR 0 5
7472: PUSH
7473: LD_EXP 58
7477: PUSH
7478: FOR_IN
7479: IFFALSE 8392
// begin case base of 1 :
7481: LD_VAR 0 5
7485: PUSH
7486: LD_INT 1
7488: DOUBLE
7489: EQUAL
7490: IFTRUE 7494
7492: GO 7507
7494: POP
// begin side = americans ;
7495: LD_ADDR_VAR 0 4
7499: PUSH
7500: LD_EXP 6
7504: ST_TO_ADDR
// end ; 2 :
7505: GO 7542
7507: LD_INT 2
7509: DOUBLE
7510: EQUAL
7511: IFTRUE 7515
7513: GO 7520
7515: POP
// begin continue ;
7516: GO 7478
// end ; 3 :
7518: GO 7542
7520: LD_INT 3
7522: DOUBLE
7523: EQUAL
7524: IFTRUE 7528
7526: GO 7541
7528: POP
// begin side = russians ;
7529: LD_ADDR_VAR 0 4
7533: PUSH
7534: LD_EXP 3
7538: ST_TO_ADDR
// end ; end ;
7539: GO 7542
7541: POP
// InitUc ;
7542: CALL_OW 18
// InitHc ;
7546: CALL_OW 19
// uc_side = side ;
7550: LD_ADDR_OWVAR 20
7554: PUSH
7555: LD_VAR 0 4
7559: ST_TO_ADDR
// case side of americans :
7560: LD_VAR 0 4
7564: PUSH
7565: LD_EXP 6
7569: DOUBLE
7570: EQUAL
7571: IFTRUE 7575
7573: GO 7586
7575: POP
// uc_nation = nation_american ; russians :
7576: LD_ADDR_OWVAR 21
7580: PUSH
7581: LD_INT 1
7583: ST_TO_ADDR
7584: GO 7608
7586: LD_EXP 3
7590: DOUBLE
7591: EQUAL
7592: IFTRUE 7596
7594: GO 7607
7596: POP
// uc_nation = nation_russian ; end ;
7597: LD_ADDR_OWVAR 21
7601: PUSH
7602: LD_INT 3
7604: ST_TO_ADDR
7605: GO 7608
7607: POP
// temp_list = CreateUnitsWithClass ( ai_bunkers [ base ] + ai_armouries [ base ] , class_soldier , side ) ;
7608: LD_ADDR_VAR 0 3
7612: PUSH
7613: LD_EXP 49
7617: PUSH
7618: LD_VAR 0 5
7622: ARRAY
7623: PUSH
7624: LD_EXP 48
7628: PUSH
7629: LD_VAR 0 5
7633: ARRAY
7634: PLUS
7635: PPUSH
7636: LD_INT 1
7638: PPUSH
7639: LD_VAR 0 4
7643: PPUSH
7644: CALL 8527 0 3
7648: ST_TO_ADDR
// temp_list = temp_list ^ CreateUnitsWithClass ( [ 3 , 4 , 5 ] [ difficulty ] * ai_armouries [ base ] , [ class_sniper , 0 , class_bazooker ] [ base ] , side ) ;
7649: LD_ADDR_VAR 0 3
7653: PUSH
7654: LD_VAR 0 3
7658: PUSH
7659: LD_INT 3
7661: PUSH
7662: LD_INT 4
7664: PUSH
7665: LD_INT 5
7667: PUSH
7668: EMPTY
7669: LIST
7670: LIST
7671: LIST
7672: PUSH
7673: LD_OWVAR 67
7677: ARRAY
7678: PUSH
7679: LD_EXP 48
7683: PUSH
7684: LD_VAR 0 5
7688: ARRAY
7689: MUL
7690: PPUSH
7691: LD_INT 5
7693: PUSH
7694: LD_INT 0
7696: PUSH
7697: LD_INT 9
7699: PUSH
7700: EMPTY
7701: LIST
7702: LIST
7703: LIST
7704: PUSH
7705: LD_VAR 0 5
7709: ARRAY
7710: PPUSH
7711: LD_VAR 0 4
7715: PPUSH
7716: CALL 8527 0 3
7720: ADD
7721: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
7722: LD_ADDR_EXP 29
7726: PUSH
7727: LD_EXP 29
7731: PPUSH
7732: LD_VAR 0 5
7736: PPUSH
7737: LD_VAR 0 3
7741: PPUSH
7742: CALL_OW 1
7746: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , base , CreateUnitsWithClass ( [ 2 , 3 , 4 ] [ difficulty ] , class_engineer , side ) ) ;
7747: LD_ADDR_EXP 30
7751: PUSH
7752: LD_EXP 30
7756: PPUSH
7757: LD_VAR 0 5
7761: PPUSH
7762: LD_INT 2
7764: PUSH
7765: LD_INT 3
7767: PUSH
7768: LD_INT 4
7770: PUSH
7771: EMPTY
7772: LIST
7773: LIST
7774: LIST
7775: PUSH
7776: LD_OWVAR 67
7780: ARRAY
7781: PPUSH
7782: LD_INT 2
7784: PPUSH
7785: LD_VAR 0 4
7789: PPUSH
7790: CALL 8527 0 3
7794: PPUSH
7795: CALL_OW 1
7799: ST_TO_ADDR
// temp_list = [ ] ;
7800: LD_ADDR_VAR 0 3
7804: PUSH
7805: EMPTY
7806: ST_TO_ADDR
// for i in ai_engineers [ base ] do
7807: LD_ADDR_VAR 0 2
7811: PUSH
7812: LD_EXP 30
7816: PUSH
7817: LD_VAR 0 5
7821: ARRAY
7822: PUSH
7823: FOR_IN
7824: IFFALSE 7852
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
7826: LD_ADDR_VAR 0 3
7830: PUSH
7831: LD_VAR 0 3
7835: PUSH
7836: LD_VAR 0 2
7840: PPUSH
7841: LD_INT 2
7843: PPUSH
7844: CALL_OW 259
7848: ADD
7849: ST_TO_ADDR
7850: GO 7823
7852: POP
7853: POP
// num = BestFromListByList ( temp_list , temp_list ) ;
7854: LD_ADDR_VAR 0 6
7858: PUSH
7859: LD_VAR 0 3
7863: PPUSH
7864: LD_VAR 0 3
7868: PPUSH
7869: CALL_OW 79
7873: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
7874: LD_ADDR_VAR 0 2
7878: PUSH
7879: LD_EXP 44
7883: PUSH
7884: LD_VAR 0 5
7888: ARRAY
7889: PUSH
7890: FOR_IN
7891: IFFALSE 7909
// SetBLevel ( i , num ) ;
7893: LD_VAR 0 2
7897: PPUSH
7898: LD_VAR 0 6
7902: PPUSH
7903: CALL_OW 241
7907: GO 7890
7909: POP
7910: POP
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , CreateApemenWithClass ( 2 , class_apeman_engineer , side ) ) ;
7911: LD_ADDR_EXP 62
7915: PUSH
7916: LD_EXP 62
7920: PPUSH
7921: LD_VAR 0 5
7925: PPUSH
7926: LD_INT 2
7928: PPUSH
7929: LD_INT 16
7931: PPUSH
7932: LD_VAR 0 4
7936: PPUSH
7937: CALL 8715 0 3
7941: PPUSH
7942: CALL_OW 1
7946: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , CreateUnitsWithClass ( [ 4 + Rand ( 0 , 1 ) , 5 + Rand ( 0 , 1 ) , 6 ] [ difficulty ] , class_mechanic , side ) ) ;
7947: LD_ADDR_EXP 31
7951: PUSH
7952: LD_EXP 31
7956: PPUSH
7957: LD_VAR 0 5
7961: PPUSH
7962: LD_INT 4
7964: PUSH
7965: LD_INT 0
7967: PPUSH
7968: LD_INT 1
7970: PPUSH
7971: CALL_OW 12
7975: PLUS
7976: PUSH
7977: LD_INT 5
7979: PUSH
7980: LD_INT 0
7982: PPUSH
7983: LD_INT 1
7985: PPUSH
7986: CALL_OW 12
7990: PLUS
7991: PUSH
7992: LD_INT 6
7994: PUSH
7995: EMPTY
7996: LIST
7997: LIST
7998: LIST
7999: PUSH
8000: LD_OWVAR 67
8004: ARRAY
8005: PPUSH
8006: LD_INT 3
8008: PPUSH
8009: LD_VAR 0 4
8013: PPUSH
8014: CALL 8527 0 3
8018: PPUSH
8019: CALL_OW 1
8023: ST_TO_ADDR
// num = [ 3 , 4 , 5 ] [ difficulty ] ;
8024: LD_ADDR_VAR 0 6
8028: PUSH
8029: LD_INT 3
8031: PUSH
8032: LD_INT 4
8034: PUSH
8035: LD_INT 5
8037: PUSH
8038: EMPTY
8039: LIST
8040: LIST
8041: LIST
8042: PUSH
8043: LD_OWVAR 67
8047: ARRAY
8048: ST_TO_ADDR
// for i = 1 to ai_labs [ base ] do
8049: LD_ADDR_VAR 0 2
8053: PUSH
8054: DOUBLE
8055: LD_INT 1
8057: DEC
8058: ST_TO_ADDR
8059: LD_EXP 35
8063: PUSH
8064: LD_VAR 0 5
8068: ARRAY
8069: PUSH
8070: FOR_TO
8071: IFFALSE 8097
// num = num + Rand ( 0 , 1 ) ;
8073: LD_ADDR_VAR 0 6
8077: PUSH
8078: LD_VAR 0 6
8082: PUSH
8083: LD_INT 0
8085: PPUSH
8086: LD_INT 1
8088: PPUSH
8089: CALL_OW 12
8093: PLUS
8094: ST_TO_ADDR
8095: GO 8070
8097: POP
8098: POP
// if base = 1 then
8099: LD_VAR 0 5
8103: PUSH
8104: LD_INT 1
8106: EQUAL
8107: IFFALSE 8140
// num = num + [ 3 , 4 , 5 ] [ difficulty ] ;
8109: LD_ADDR_VAR 0 6
8113: PUSH
8114: LD_VAR 0 6
8118: PUSH
8119: LD_INT 3
8121: PUSH
8122: LD_INT 4
8124: PUSH
8125: LD_INT 5
8127: PUSH
8128: EMPTY
8129: LIST
8130: LIST
8131: LIST
8132: PUSH
8133: LD_OWVAR 67
8137: ARRAY
8138: PLUS
8139: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , CreateUnitsWithClass ( num , class_scientistic , side ) ) ;
8140: LD_ADDR_EXP 32
8144: PUSH
8145: LD_EXP 32
8149: PPUSH
8150: LD_VAR 0 5
8154: PPUSH
8155: LD_VAR 0 6
8159: PPUSH
8160: LD_INT 4
8162: PPUSH
8163: LD_VAR 0 4
8167: PPUSH
8168: CALL 8527 0 3
8172: PPUSH
8173: CALL_OW 1
8177: ST_TO_ADDR
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_cans , 300 ) ;
8178: LD_EXP 34
8182: PUSH
8183: LD_VAR 0 5
8187: ARRAY
8188: PPUSH
8189: CALL_OW 274
8193: PPUSH
8194: LD_INT 1
8196: PPUSH
8197: LD_INT 300
8199: PPUSH
8200: CALL_OW 277
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_oil , 300 ) ;
8204: LD_EXP 34
8208: PUSH
8209: LD_VAR 0 5
8213: ARRAY
8214: PPUSH
8215: CALL_OW 274
8219: PPUSH
8220: LD_INT 2
8222: PPUSH
8223: LD_INT 300
8225: PPUSH
8226: CALL_OW 277
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_siberit , 300 ) ;
8230: LD_EXP 34
8234: PUSH
8235: LD_VAR 0 5
8239: ARRAY
8240: PPUSH
8241: CALL_OW 274
8245: PPUSH
8246: LD_INT 3
8248: PPUSH
8249: LD_INT 300
8251: PPUSH
8252: CALL_OW 277
// for i in ai_soldiers [ base ] ^ ai_engineers [ base ] ^ ai_mechanics_defend [ base ] ^ ai_scientists [ base ] ^ ai_apemen_engineers [ base ] do
8256: LD_ADDR_VAR 0 2
8260: PUSH
8261: LD_EXP 29
8265: PUSH
8266: LD_VAR 0 5
8270: ARRAY
8271: PUSH
8272: LD_EXP 30
8276: PUSH
8277: LD_VAR 0 5
8281: ARRAY
8282: ADD
8283: PUSH
8284: LD_EXP 31
8288: PUSH
8289: LD_VAR 0 5
8293: ARRAY
8294: ADD
8295: PUSH
8296: LD_EXP 32
8300: PUSH
8301: LD_VAR 0 5
8305: ARRAY
8306: ADD
8307: PUSH
8308: LD_EXP 62
8312: PUSH
8313: LD_VAR 0 5
8317: ARRAY
8318: ADD
8319: PUSH
8320: FOR_IN
8321: IFFALSE 8370
// PlaceUnitXYR ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] , 7 , false ) ;
8323: LD_VAR 0 2
8327: PPUSH
8328: LD_EXP 41
8332: PUSH
8333: LD_VAR 0 5
8337: ARRAY
8338: PUSH
8339: LD_INT 1
8341: ARRAY
8342: PPUSH
8343: LD_EXP 41
8347: PUSH
8348: LD_VAR 0 5
8352: ARRAY
8353: PUSH
8354: LD_INT 2
8356: ARRAY
8357: PPUSH
8358: LD_INT 7
8360: PPUSH
8361: LD_INT 0
8363: PPUSH
8364: CALL_OW 50
8368: GO 8320
8370: POP
8371: POP
// ResetVehicleAttackDelay ( base ) ;
8372: LD_VAR 0 5
8376: PPUSH
8377: CALL 8891 0 1
// ResetHumanAttackDelay ( base ) ;
8381: LD_VAR 0 5
8385: PPUSH
8386: CALL 8940 0 1
// end ;
8390: GO 7478
8392: POP
8393: POP
// uc_side = americans ;
8394: LD_ADDR_OWVAR 20
8398: PUSH
8399: LD_EXP 6
8403: ST_TO_ADDR
// Simms = NewCharacter ( Simms ) ;
8404: LD_ADDR_EXP 24
8408: PUSH
8409: LD_STRING Simms
8411: PPUSH
8412: CALL_OW 25
8416: ST_TO_ADDR
// Joan = NewCharacter ( Joan ) ;
8417: LD_ADDR_EXP 27
8421: PUSH
8422: LD_STRING Joan
8424: PPUSH
8425: CALL_OW 25
8429: ST_TO_ADDR
// Powell = NewCharacter ( Powell ) ;
8430: LD_ADDR_EXP 28
8434: PUSH
8435: LD_STRING Powell
8437: PPUSH
8438: CALL_OW 25
8442: ST_TO_ADDR
// uc_side = americans_alt ;
8443: LD_ADDR_OWVAR 20
8447: PUSH
8448: LD_EXP 8
8452: ST_TO_ADDR
// Cornell = NewCharacter ( Cornell ) ;
8453: LD_ADDR_EXP 25
8457: PUSH
8458: LD_STRING Cornell
8460: PPUSH
8461: CALL_OW 25
8465: ST_TO_ADDR
// Khattam = NewCharacter ( Khatam ) ;
8466: LD_ADDR_EXP 26
8470: PUSH
8471: LD_STRING Khatam
8473: PPUSH
8474: CALL_OW 25
8478: ST_TO_ADDR
// for i in FilterAllUnits ( [ f_side , americans ] ) do
8479: LD_ADDR_VAR 0 2
8483: PUSH
8484: LD_INT 22
8486: PUSH
8487: LD_EXP 6
8491: PUSH
8492: EMPTY
8493: LIST
8494: LIST
8495: PPUSH
8496: CALL_OW 69
8500: PUSH
8501: FOR_IN
8502: IFFALSE 8520
// DoNotAttack ( you , i ) ;
8504: LD_EXP 2
8508: PPUSH
8509: LD_VAR 0 2
8513: PPUSH
8514: CALL_OW 471
8518: GO 8501
8520: POP
8521: POP
// end ;
8522: LD_VAR 0 1
8526: RET
// export function CreateUnitsWithClass ( num_units , un_class , side ) ; var i , overskill ; begin
8527: LD_INT 0
8529: PPUSH
8530: PPUSH
8531: PPUSH
// result = [ ] ;
8532: LD_ADDR_VAR 0 4
8536: PUSH
8537: EMPTY
8538: ST_TO_ADDR
// InitUc ;
8539: CALL_OW 18
// InitHc ;
8543: CALL_OW 19
// case side of americans :
8547: LD_VAR 0 3
8551: PUSH
8552: LD_EXP 6
8556: DOUBLE
8557: EQUAL
8558: IFTRUE 8562
8560: GO 8573
8562: POP
// begin uc_nation = nation_american ;
8563: LD_ADDR_OWVAR 21
8567: PUSH
8568: LD_INT 1
8570: ST_TO_ADDR
// end ; russians :
8571: GO 8595
8573: LD_EXP 3
8577: DOUBLE
8578: EQUAL
8579: IFTRUE 8583
8581: GO 8594
8583: POP
// begin uc_nation = nation_russian ;
8584: LD_ADDR_OWVAR 21
8588: PUSH
8589: LD_INT 3
8591: ST_TO_ADDR
// end ; end ;
8592: GO 8595
8594: POP
// uc_side = side ;
8595: LD_ADDR_OWVAR 20
8599: PUSH
8600: LD_VAR 0 3
8604: ST_TO_ADDR
// overskill = difficulty + 4 ;
8605: LD_ADDR_VAR 0 6
8609: PUSH
8610: LD_OWVAR 67
8614: PUSH
8615: LD_INT 4
8617: PLUS
8618: ST_TO_ADDR
// for i = 1 to num_units do
8619: LD_ADDR_VAR 0 5
8623: PUSH
8624: DOUBLE
8625: LD_INT 1
8627: DEC
8628: ST_TO_ADDR
8629: LD_VAR 0 1
8633: PUSH
8634: FOR_TO
8635: IFFALSE 8708
// begin if Rand ( 1 , 3 ) = 1 then
8637: LD_INT 1
8639: PPUSH
8640: LD_INT 3
8642: PPUSH
8643: CALL_OW 12
8647: PUSH
8648: LD_INT 1
8650: EQUAL
8651: IFFALSE 8673
// PrepareHuman ( false , un_class , - overskill ) else
8653: LD_INT 0
8655: PPUSH
8656: LD_VAR 0 2
8660: PPUSH
8661: LD_VAR 0 6
8665: NEG
8666: PPUSH
8667: CALL_OW 380
8671: GO 8690
// PrepareHuman ( false , un_class , overskill ) ;
8673: LD_INT 0
8675: PPUSH
8676: LD_VAR 0 2
8680: PPUSH
8681: LD_VAR 0 6
8685: PPUSH
8686: CALL_OW 380
// result = result ^ CreateHuman ;
8690: LD_ADDR_VAR 0 4
8694: PUSH
8695: LD_VAR 0 4
8699: PUSH
8700: CALL_OW 44
8704: ADD
8705: ST_TO_ADDR
// end ;
8706: GO 8634
8708: POP
8709: POP
// end ;
8710: LD_VAR 0 4
8714: RET
// export function CreateApemenWithClass ( num_units , un_class , side ) ; var i ; begin
8715: LD_INT 0
8717: PPUSH
8718: PPUSH
// result = [ ] ;
8719: LD_ADDR_VAR 0 4
8723: PUSH
8724: EMPTY
8725: ST_TO_ADDR
// InitUc ;
8726: CALL_OW 18
// InitHc ;
8730: CALL_OW 19
// uc_side = side ;
8734: LD_ADDR_OWVAR 20
8738: PUSH
8739: LD_VAR 0 3
8743: ST_TO_ADDR
// uc_nation = nation_nature ;
8744: LD_ADDR_OWVAR 21
8748: PUSH
8749: LD_INT 0
8751: ST_TO_ADDR
// hc_class = un_class ;
8752: LD_ADDR_OWVAR 28
8756: PUSH
8757: LD_VAR 0 2
8761: ST_TO_ADDR
// for i = 1 to num_units do
8762: LD_ADDR_VAR 0 5
8766: PUSH
8767: DOUBLE
8768: LD_INT 1
8770: DEC
8771: ST_TO_ADDR
8772: LD_VAR 0 1
8776: PUSH
8777: FOR_TO
8778: IFFALSE 8884
// begin hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
8780: LD_ADDR_OWVAR 29
8784: PUSH
8785: LD_INT 11
8787: PPUSH
8788: LD_INT 13
8790: PPUSH
8791: CALL_OW 12
8795: PUSH
8796: LD_INT 10
8798: PPUSH
8799: LD_INT 11
8801: PPUSH
8802: CALL_OW 12
8806: PUSH
8807: EMPTY
8808: LIST
8809: LIST
8810: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
8811: LD_ADDR_OWVAR 27
8815: PUSH
8816: LD_INT 1
8818: PPUSH
8819: LD_INT 2
8821: PPUSH
8822: CALL_OW 12
8826: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 2 ) , Rand ( 0 , 2 ) , 0 , 0 ] ;
8827: LD_ADDR_OWVAR 31
8831: PUSH
8832: LD_INT 0
8834: PPUSH
8835: LD_INT 2
8837: PPUSH
8838: CALL_OW 12
8842: PUSH
8843: LD_INT 0
8845: PPUSH
8846: LD_INT 2
8848: PPUSH
8849: CALL_OW 12
8853: PUSH
8854: LD_INT 0
8856: PUSH
8857: LD_INT 0
8859: PUSH
8860: EMPTY
8861: LIST
8862: LIST
8863: LIST
8864: LIST
8865: ST_TO_ADDR
// result = result ^ CreateHuman ;
8866: LD_ADDR_VAR 0 4
8870: PUSH
8871: LD_VAR 0 4
8875: PUSH
8876: CALL_OW 44
8880: ADD
8881: ST_TO_ADDR
// end ;
8882: GO 8777
8884: POP
8885: POP
// end ;
8886: LD_VAR 0 4
8890: RET
// export function ResetVehicleAttackDelay ( base ) ; begin
8891: LD_INT 0
8893: PPUSH
// ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , base , Rand ( 5 5$30 , 7 7$30 ) - 1 1$0 * difficulty ) ;
8894: LD_ADDR_EXP 57
8898: PUSH
8899: LD_EXP 57
8903: PPUSH
8904: LD_VAR 0 1
8908: PPUSH
8909: LD_INT 11550
8911: PPUSH
8912: LD_INT 15750
8914: PPUSH
8915: CALL_OW 12
8919: PUSH
8920: LD_INT 2100
8922: PUSH
8923: LD_OWVAR 67
8927: MUL
8928: MINUS
8929: PPUSH
8930: CALL_OW 1
8934: ST_TO_ADDR
// end ;
8935: LD_VAR 0 2
8939: RET
// export function ResetHumanAttackDelay ( base ) ; begin
8940: LD_INT 0
8942: PPUSH
// ai_human_attack_delay = Replace ( ai_human_attack_delay , base , Rand ( 6 6$30 , 8 8$30 ) - 0 0$45 * difficulty ) ;
8943: LD_ADDR_EXP 67
8947: PUSH
8948: LD_EXP 67
8952: PPUSH
8953: LD_VAR 0 1
8957: PPUSH
8958: LD_INT 13650
8960: PPUSH
8961: LD_INT 17850
8963: PPUSH
8964: CALL_OW 12
8968: PUSH
8969: LD_INT 1575
8971: PUSH
8972: LD_OWVAR 67
8976: MUL
8977: MINUS
8978: PPUSH
8979: CALL_OW 1
8983: ST_TO_ADDR
// end ;
8984: LD_VAR 0 2
8988: RET
// function Action ; begin
8989: LD_INT 0
8991: PPUSH
// wait ( 2 ) ;
8992: LD_INT 2
8994: PPUSH
8995: CALL_OW 67
// CenterNowOnXY ( 168 , 109 ) ;
8999: LD_INT 168
9001: PPUSH
9002: LD_INT 109
9004: PPUSH
9005: CALL_OW 86
// RevealFogArea ( you , Am_base ) ;
9009: LD_EXP 2
9013: PPUSH
9014: LD_INT 4
9016: PPUSH
9017: CALL_OW 332
// wait ( 0 0$0.2 ) ;
9021: LD_INT 7
9023: PPUSH
9024: CALL_OW 67
// ChangeMissionObjectives ( M1 ) ;
9028: LD_STRING M1
9030: PPUSH
9031: CALL_OW 337
// wait ( 0 0$0.2 ) ;
9035: LD_INT 7
9037: PPUSH
9038: CALL_OW 67
// SaveForQuickRestart ;
9042: CALL_OW 22
// end ; end_of_file
9046: LD_VAR 0 1
9050: RET
// every 0 0$1 + 0 0$0.4 do
9051: GO 9053
9053: DISABLE
// begin repeat wait ( Rand ( 1 1$10 , 2 2$40 ) ) ;
9054: LD_INT 2450
9056: PPUSH
9057: LD_INT 5600
9059: PPUSH
9060: CALL_OW 12
9064: PPUSH
9065: CALL_OW 67
// CreateCratesAnywhere ( Rand ( 3 , 5 ) , true ) ;
9069: LD_INT 3
9071: PPUSH
9072: LD_INT 5
9074: PPUSH
9075: CALL_OW 12
9079: PPUSH
9080: LD_INT 1
9082: PPUSH
9083: CALL_OW 57
// if Rand ( 1 , 4 ) = 1 then
9087: LD_INT 1
9089: PPUSH
9090: LD_INT 4
9092: PPUSH
9093: CALL_OW 12
9097: PUSH
9098: LD_INT 1
9100: EQUAL
9101: IFFALSE 9136
// begin wait ( Rand ( 0 0$5 , 0 0$20 ) ) ;
9103: LD_INT 175
9105: PPUSH
9106: LD_INT 700
9108: PPUSH
9109: CALL_OW 12
9113: PPUSH
9114: CALL_OW 67
// CreateCratesAnywhere ( Rand ( 2 , 4 ) , true ) ;
9118: LD_INT 2
9120: PPUSH
9121: LD_INT 4
9123: PPUSH
9124: CALL_OW 12
9128: PPUSH
9129: LD_INT 1
9131: PPUSH
9132: CALL_OW 57
// end ; until false ;
9136: LD_INT 0
9138: IFFALSE 9054
// end ;
9140: END
// every 0 0$1 + 0 0$0.5 do var count , time ;
9141: GO 9143
9143: DISABLE
9144: LD_INT 0
9146: PPUSH
9147: PPUSH
// begin count = 0 ;
9148: LD_ADDR_VAR 0 1
9152: PUSH
9153: LD_INT 0
9155: ST_TO_ADDR
// repeat if game_phase < 3 then
9156: LD_EXP 88
9160: PUSH
9161: LD_INT 3
9163: LESS
9164: IFFALSE 9213
// time = [ 1 1$0 , 1 1$15 , 1 1$30 ] [ difficulty ] + ( 0 0$45 * count / ( count + 6 ) ) else
9166: LD_ADDR_VAR 0 2
9170: PUSH
9171: LD_INT 2100
9173: PUSH
9174: LD_INT 2625
9176: PUSH
9177: LD_INT 3150
9179: PUSH
9180: EMPTY
9181: LIST
9182: LIST
9183: LIST
9184: PUSH
9185: LD_OWVAR 67
9189: ARRAY
9190: PUSH
9191: LD_INT 1575
9193: PUSH
9194: LD_VAR 0 1
9198: MUL
9199: PUSH
9200: LD_VAR 0 1
9204: PUSH
9205: LD_INT 6
9207: PLUS
9208: DIVREAL
9209: PLUS
9210: ST_TO_ADDR
9211: GO 9238
// time = [ 1 1$40 , 1 1$55 , 2 2$10 ] [ difficulty ] ;
9213: LD_ADDR_VAR 0 2
9217: PUSH
9218: LD_INT 3500
9220: PUSH
9221: LD_INT 4025
9223: PUSH
9224: LD_INT 4550
9226: PUSH
9227: EMPTY
9228: LIST
9229: LIST
9230: LIST
9231: PUSH
9232: LD_OWVAR 67
9236: ARRAY
9237: ST_TO_ADDR
// wait ( Rand ( time , time + 0 0$30 ) ) ;
9238: LD_VAR 0 2
9242: PPUSH
9243: LD_VAR 0 2
9247: PUSH
9248: LD_INT 1050
9250: PLUS
9251: PPUSH
9252: CALL_OW 12
9256: PPUSH
9257: CALL_OW 67
// CreateCratesArea ( Rand ( 3 , 5 ) , player_crate_area , true ) ;
9261: LD_INT 3
9263: PPUSH
9264: LD_INT 5
9266: PPUSH
9267: CALL_OW 12
9271: PPUSH
9272: LD_INT 9
9274: PPUSH
9275: LD_INT 1
9277: PPUSH
9278: CALL_OW 55
// count = count + 1 ;
9282: LD_ADDR_VAR 0 1
9286: PUSH
9287: LD_VAR 0 1
9291: PUSH
9292: LD_INT 1
9294: PLUS
9295: ST_TO_ADDR
// until false ;
9296: LD_INT 0
9298: IFFALSE 9156
// end ; end_of_file
9300: PPOPN 2
9302: END
// every 0 0$10 do var i , base ;
9303: GO 9305
9305: DISABLE
9306: LD_INT 0
9308: PPUSH
9309: PPUSH
// begin for i = 1 to ai_depot do
9310: LD_ADDR_VAR 0 1
9314: PUSH
9315: DOUBLE
9316: LD_INT 1
9318: DEC
9319: ST_TO_ADDR
9320: LD_EXP 34
9324: PUSH
9325: FOR_TO
9326: IFFALSE 9436
// if IsOk ( ai_depot [ i ] ) and GetSide ( ai_depot [ i ] ) <> you then
9328: LD_EXP 34
9332: PUSH
9333: LD_VAR 0 1
9337: ARRAY
9338: PPUSH
9339: CALL_OW 302
9343: PUSH
9344: LD_EXP 34
9348: PUSH
9349: LD_VAR 0 1
9353: ARRAY
9354: PPUSH
9355: CALL_OW 255
9359: PUSH
9360: LD_EXP 2
9364: NONEQUAL
9365: AND
9366: IFFALSE 9434
// begin base = GetBase ( ai_depot [ i ] ) ;
9368: LD_ADDR_VAR 0 2
9372: PUSH
9373: LD_EXP 34
9377: PUSH
9378: LD_VAR 0 1
9382: ARRAY
9383: PPUSH
9384: CALL_OW 274
9388: ST_TO_ADDR
// SetResourceType ( base , mat_cans , 300 ) ;
9389: LD_VAR 0 2
9393: PPUSH
9394: LD_INT 1
9396: PPUSH
9397: LD_INT 300
9399: PPUSH
9400: CALL_OW 277
// SetResourceType ( base , mat_oil , 300 ) ;
9404: LD_VAR 0 2
9408: PPUSH
9409: LD_INT 2
9411: PPUSH
9412: LD_INT 300
9414: PPUSH
9415: CALL_OW 277
// SetResourceType ( base , mat_siberit , 300 ) ;
9419: LD_VAR 0 2
9423: PPUSH
9424: LD_INT 3
9426: PPUSH
9427: LD_INT 300
9429: PPUSH
9430: CALL_OW 277
// end ;
9434: GO 9325
9436: POP
9437: POP
// enable ;
9438: ENABLE
// end ;
9439: PPOPN 2
9441: END
// on UnitDestroyed ( un ) do var side , temp_list , base ;
9442: LD_INT 0
9444: PPUSH
9445: PPUSH
9446: PPUSH
// begin if un = Heike then
9447: LD_VAR 0 1
9451: PUSH
9452: LD_EXP 9
9456: EQUAL
9457: IFFALSE 9481
// begin ExclusiveOn ;
9459: CALL_OW 4
// Wait ( 0 0$1 ) ;
9463: LD_INT 35
9465: PPUSH
9466: CALL_OW 67
// YouLost ( HeikeDead ) ;
9470: LD_STRING HeikeDead
9472: PPUSH
9473: CALL_OW 104
// ExclusiveOff ;
9477: CALL_OW 5
// end ; if un = Gensher then
9481: LD_VAR 0 1
9485: PUSH
9486: LD_EXP 23
9490: EQUAL
9491: IFFALSE 9515
// begin ExclusiveOn ;
9493: CALL_OW 4
// Wait ( 0 0$1 ) ;
9497: LD_INT 35
9499: PPUSH
9500: CALL_OW 67
// YouLost ( GensherDead ) ;
9504: LD_STRING GensherDead
9506: PPUSH
9507: CALL_OW 104
// ExclusiveOff ;
9511: CALL_OW 5
// end ; if UnitFilter ( original_gensher_people , [ [ f_class , class_scientistic ] , [ f_lives , 1 ] ] ) = 0 then
9515: LD_EXP 82
9519: PPUSH
9520: LD_INT 25
9522: PUSH
9523: LD_INT 4
9525: PUSH
9526: EMPTY
9527: LIST
9528: LIST
9529: PUSH
9530: LD_INT 24
9532: PUSH
9533: LD_INT 1
9535: PUSH
9536: EMPTY
9537: LIST
9538: LIST
9539: PUSH
9540: EMPTY
9541: LIST
9542: LIST
9543: PPUSH
9544: CALL_OW 72
9548: PUSH
9549: LD_INT 0
9551: EQUAL
9552: IFFALSE 9576
// begin ExclusiveOn ;
9554: CALL_OW 4
// wait ( 0 0$1 ) ;
9558: LD_INT 35
9560: PPUSH
9561: CALL_OW 67
// YouLost ( GensherScisDead ) ;
9565: LD_STRING GensherScisDead
9567: PPUSH
9568: CALL_OW 104
// ExclusiveOff ;
9572: CALL_OW 5
// end ; for base in ai_bases do
9576: LD_ADDR_VAR 0 4
9580: PUSH
9581: LD_EXP 58
9585: PUSH
9586: FOR_IN
9587: IFFALSE 9638
// begin temp_list = ai_captured_buildings [ base ] diff un ;
9589: LD_ADDR_VAR 0 3
9593: PUSH
9594: LD_EXP 78
9598: PUSH
9599: LD_VAR 0 4
9603: ARRAY
9604: PUSH
9605: LD_VAR 0 1
9609: DIFF
9610: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
9611: LD_ADDR_EXP 78
9615: PUSH
9616: LD_EXP 78
9620: PPUSH
9621: LD_VAR 0 4
9625: PPUSH
9626: LD_VAR 0 3
9630: PPUSH
9631: CALL_OW 1
9635: ST_TO_ADDR
// end ;
9636: GO 9586
9638: POP
9639: POP
// side = GetSide ( un ) ;
9640: LD_ADDR_VAR 0 2
9644: PUSH
9645: LD_VAR 0 1
9649: PPUSH
9650: CALL_OW 255
9654: ST_TO_ADDR
// if side = you then
9655: LD_VAR 0 2
9659: PUSH
9660: LD_EXP 2
9664: EQUAL
9665: IFFALSE 9669
// exit ;
9667: GO 9892
// if side = you_alt and game_phase = 1 then
9669: LD_VAR 0 2
9673: PUSH
9674: LD_EXP 5
9678: EQUAL
9679: PUSH
9680: LD_EXP 88
9684: PUSH
9685: LD_INT 1
9687: EQUAL
9688: AND
9689: IFFALSE 9752
// begin case GetType ( un ) of unit_human :
9691: LD_VAR 0 1
9695: PPUSH
9696: CALL_OW 247
9700: PUSH
9701: LD_INT 1
9703: DOUBLE
9704: EQUAL
9705: IFTRUE 9709
9707: GO 9726
9709: POP
// russian_interference_points = russian_interference_points + 3 ; unit_building :
9710: LD_ADDR_EXP 96
9714: PUSH
9715: LD_EXP 96
9719: PUSH
9720: LD_INT 3
9722: PLUS
9723: ST_TO_ADDR
9724: GO 9752
9726: LD_INT 3
9728: DOUBLE
9729: EQUAL
9730: IFTRUE 9734
9732: GO 9751
9734: POP
// russian_interference_points = russian_interference_points + 2 ; end ;
9735: LD_ADDR_EXP 96
9739: PUSH
9740: LD_EXP 96
9744: PUSH
9745: LD_INT 2
9747: PLUS
9748: ST_TO_ADDR
9749: GO 9752
9751: POP
// end ; case GetType ( un ) of unit_human :
9752: LD_VAR 0 1
9756: PPUSH
9757: CALL_OW 247
9761: PUSH
9762: LD_INT 1
9764: DOUBLE
9765: EQUAL
9766: IFTRUE 9770
9768: GO 9807
9770: POP
// for base in ai_bases do
9771: LD_ADDR_VAR 0 4
9775: PUSH
9776: LD_EXP 58
9780: PUSH
9781: FOR_IN
9782: IFFALSE 9803
// RemoveHumanFromVariables ( base , un , true ) ; unit_vehicle :
9784: LD_VAR 0 4
9788: PPUSH
9789: LD_VAR 0 1
9793: PPUSH
9794: LD_INT 1
9796: PPUSH
9797: CALL 10448 0 3
9801: GO 9781
9803: POP
9804: POP
9805: GO 9892
9807: LD_INT 2
9809: DOUBLE
9810: EQUAL
9811: IFTRUE 9815
9813: GO 9849
9815: POP
// for base in ai_bases do
9816: LD_ADDR_VAR 0 4
9820: PUSH
9821: LD_EXP 58
9825: PUSH
9826: FOR_IN
9827: IFFALSE 9845
// RemoveVehicleFromVariables ( base , un ) ; unit_building :
9829: LD_VAR 0 4
9833: PPUSH
9834: LD_VAR 0 1
9838: PPUSH
9839: CALL 10056 0 2
9843: GO 9826
9845: POP
9846: POP
9847: GO 9892
9849: LD_INT 3
9851: DOUBLE
9852: EQUAL
9853: IFTRUE 9857
9855: GO 9891
9857: POP
// for base in ai_bases do
9858: LD_ADDR_VAR 0 4
9862: PUSH
9863: LD_EXP 58
9867: PUSH
9868: FOR_IN
9869: IFFALSE 9887
// RemoveBuildingFromVariables ( base , un ) ; end ;
9871: LD_VAR 0 4
9875: PPUSH
9876: LD_VAR 0 1
9880: PPUSH
9881: CALL 9895 0 2
9885: GO 9868
9887: POP
9888: POP
9889: GO 9892
9891: POP
// end ;
9892: PPOPN 4
9894: END
// function RemoveBuildingFromVariables ( base , building ) ; var temp_list ; begin
9895: LD_INT 0
9897: PPUSH
9898: PPUSH
// temp_list = ai_all_buildings [ base ] diff building ;
9899: LD_ADDR_VAR 0 4
9903: PUSH
9904: LD_EXP 44
9908: PUSH
9909: LD_VAR 0 1
9913: ARRAY
9914: PUSH
9915: LD_VAR 0 2
9919: DIFF
9920: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
9921: LD_ADDR_EXP 44
9925: PUSH
9926: LD_EXP 44
9930: PPUSH
9931: LD_VAR 0 1
9935: PPUSH
9936: LD_VAR 0 4
9940: PPUSH
9941: CALL_OW 1
9945: ST_TO_ADDR
// temp_list = ai_excepted_buildings [ base ] diff building ;
9946: LD_ADDR_VAR 0 4
9950: PUSH
9951: LD_EXP 68
9955: PUSH
9956: LD_VAR 0 1
9960: ARRAY
9961: PUSH
9962: LD_VAR 0 2
9966: DIFF
9967: ST_TO_ADDR
// ai_excepted_buildings = Replace ( ai_excepted_buildings , base , temp_list ) ;
9968: LD_ADDR_EXP 68
9972: PUSH
9973: LD_EXP 68
9977: PPUSH
9978: LD_VAR 0 1
9982: PPUSH
9983: LD_VAR 0 4
9987: PPUSH
9988: CALL_OW 1
9992: ST_TO_ADDR
// if building = ai_building_under_construction [ base ] then
9993: LD_VAR 0 2
9997: PUSH
9998: LD_EXP 42
10002: PUSH
10003: LD_VAR 0 1
10007: ARRAY
10008: EQUAL
10009: IFFALSE 10034
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
10011: LD_ADDR_EXP 42
10015: PUSH
10016: LD_EXP 42
10020: PPUSH
10021: LD_VAR 0 1
10025: PPUSH
10026: LD_INT 0
10028: PPUSH
10029: CALL_OW 1
10033: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , false ) ;
10034: LD_VAR 0 1
10038: PPUSH
10039: LD_VAR 0 2
10043: PPUSH
10044: LD_INT 0
10046: PPUSH
10047: CALL 5924 0 3
// end ;
10051: LD_VAR 0 3
10055: RET
// function RemoveVehicleFromVariables ( base , vehicle ) ; var temp_list ; begin
10056: LD_INT 0
10058: PPUSH
10059: PPUSH
// if vehicle in ai_vehicles_defend [ base ] then
10060: LD_VAR 0 2
10064: PUSH
10065: LD_EXP 39
10069: PUSH
10070: LD_VAR 0 1
10074: ARRAY
10075: IN
10076: IFFALSE 10125
// begin temp_list = ai_vehicles_defend [ base ] diff vehicle ;
10078: LD_ADDR_VAR 0 4
10082: PUSH
10083: LD_EXP 39
10087: PUSH
10088: LD_VAR 0 1
10092: ARRAY
10093: PUSH
10094: LD_VAR 0 2
10098: DIFF
10099: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
10100: LD_ADDR_EXP 39
10104: PUSH
10105: LD_EXP 39
10109: PPUSH
10110: LD_VAR 0 1
10114: PPUSH
10115: LD_VAR 0 4
10119: PPUSH
10120: CALL_OW 1
10124: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_attack [ base ] then
10125: LD_VAR 0 2
10129: PUSH
10130: LD_EXP 40
10134: PUSH
10135: LD_VAR 0 1
10139: ARRAY
10140: IN
10141: IFFALSE 10190
// begin temp_list = ai_vehicles_attack [ base ] diff vehicle ;
10143: LD_ADDR_VAR 0 4
10147: PUSH
10148: LD_EXP 40
10152: PUSH
10153: LD_VAR 0 1
10157: ARRAY
10158: PUSH
10159: LD_VAR 0 2
10163: DIFF
10164: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
10165: LD_ADDR_EXP 40
10169: PUSH
10170: LD_EXP 40
10174: PPUSH
10175: LD_VAR 0 1
10179: PPUSH
10180: LD_VAR 0 4
10184: PPUSH
10185: CALL_OW 1
10189: ST_TO_ADDR
// end ; if vehicle = ai_cargo_bay [ base ] then
10190: LD_VAR 0 2
10194: PUSH
10195: LD_EXP 60
10199: PUSH
10200: LD_VAR 0 1
10204: ARRAY
10205: EQUAL
10206: IFFALSE 10231
// begin ai_cargo_bay = Replace ( ai_cargo_bay , base , 0 ) ;
10208: LD_ADDR_EXP 60
10212: PUSH
10213: LD_EXP 60
10217: PPUSH
10218: LD_VAR 0 1
10222: PPUSH
10223: LD_INT 0
10225: PPUSH
10226: CALL_OW 1
10230: ST_TO_ADDR
// end ; if vehicle = ai_crane [ base ] then
10231: LD_VAR 0 2
10235: PUSH
10236: LD_EXP 70
10240: PUSH
10241: LD_VAR 0 1
10245: ARRAY
10246: EQUAL
10247: IFFALSE 10313
// begin ai_crane = Replace ( ai_crane , base , 0 ) ;
10249: LD_ADDR_EXP 70
10253: PUSH
10254: LD_EXP 70
10258: PPUSH
10259: LD_VAR 0 1
10263: PPUSH
10264: LD_INT 0
10266: PPUSH
10267: CALL_OW 1
10271: ST_TO_ADDR
// if vehicle = ai_building_constructor [ base ] then
10272: LD_VAR 0 2
10276: PUSH
10277: LD_EXP 45
10281: PUSH
10282: LD_VAR 0 1
10286: ARRAY
10287: EQUAL
10288: IFFALSE 10313
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
10290: LD_ADDR_EXP 45
10294: PUSH
10295: LD_EXP 45
10299: PPUSH
10300: LD_VAR 0 1
10304: PPUSH
10305: LD_INT 0
10307: PPUSH
10308: CALL_OW 1
10312: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_being_repaired [ base ] then
10313: LD_VAR 0 2
10317: PUSH
10318: LD_EXP 79
10322: PUSH
10323: LD_VAR 0 1
10327: ARRAY
10328: IN
10329: IFFALSE 10378
// begin temp_list = ai_vehicles_being_repaired [ base ] diff vehicle ;
10331: LD_ADDR_VAR 0 4
10335: PUSH
10336: LD_EXP 79
10340: PUSH
10341: LD_VAR 0 1
10345: ARRAY
10346: PUSH
10347: LD_VAR 0 2
10351: DIFF
10352: ST_TO_ADDR
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
10353: LD_ADDR_EXP 79
10357: PUSH
10358: LD_EXP 79
10362: PPUSH
10363: LD_VAR 0 1
10367: PPUSH
10368: LD_VAR 0 4
10372: PPUSH
10373: CALL_OW 1
10377: ST_TO_ADDR
// end ; if vehicle in ai_refuel_vehicles_list [ base ] then
10378: LD_VAR 0 2
10382: PUSH
10383: LD_EXP 54
10387: PUSH
10388: LD_VAR 0 1
10392: ARRAY
10393: IN
10394: IFFALSE 10443
// begin temp_list = ai_refuel_vehicles_list [ base ] diff vehicle ;
10396: LD_ADDR_VAR 0 4
10400: PUSH
10401: LD_EXP 54
10405: PUSH
10406: LD_VAR 0 1
10410: ARRAY
10411: PUSH
10412: LD_VAR 0 2
10416: DIFF
10417: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
10418: LD_ADDR_EXP 54
10422: PUSH
10423: LD_EXP 54
10427: PPUSH
10428: LD_VAR 0 1
10432: PPUSH
10433: LD_VAR 0 4
10437: PPUSH
10438: CALL_OW 1
10442: ST_TO_ADDR
// end ; end ;
10443: LD_VAR 0 3
10447: RET
// function RemoveHumanFromVariables ( base , human , check_if_base_is_dead ) ; var temp_list ; begin
10448: LD_INT 0
10450: PPUSH
10451: PPUSH
// if human in ai_soldiers [ base ] then
10452: LD_VAR 0 2
10456: PUSH
10457: LD_EXP 29
10461: PUSH
10462: LD_VAR 0 1
10466: ARRAY
10467: IN
10468: IFFALSE 10517
// begin temp_list = ai_soldiers [ base ] diff human ;
10470: LD_ADDR_VAR 0 5
10474: PUSH
10475: LD_EXP 29
10479: PUSH
10480: LD_VAR 0 1
10484: ARRAY
10485: PUSH
10486: LD_VAR 0 2
10490: DIFF
10491: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
10492: LD_ADDR_EXP 29
10496: PUSH
10497: LD_EXP 29
10501: PPUSH
10502: LD_VAR 0 1
10506: PPUSH
10507: LD_VAR 0 5
10511: PPUSH
10512: CALL_OW 1
10516: ST_TO_ADDR
// end ; if human in ai_attacking_soldiers [ base ] then
10517: LD_VAR 0 2
10521: PUSH
10522: LD_EXP 63
10526: PUSH
10527: LD_VAR 0 1
10531: ARRAY
10532: IN
10533: IFFALSE 10582
// begin temp_list = ai_attacking_soldiers [ base ] diff human ;
10535: LD_ADDR_VAR 0 5
10539: PUSH
10540: LD_EXP 63
10544: PUSH
10545: LD_VAR 0 1
10549: ARRAY
10550: PUSH
10551: LD_VAR 0 2
10555: DIFF
10556: ST_TO_ADDR
// ai_attacking_soldiers = Replace ( ai_attacking_soldiers , base , temp_list ) ;
10557: LD_ADDR_EXP 63
10561: PUSH
10562: LD_EXP 63
10566: PPUSH
10567: LD_VAR 0 1
10571: PPUSH
10572: LD_VAR 0 5
10576: PPUSH
10577: CALL_OW 1
10581: ST_TO_ADDR
// end ; if human in ai_engineers [ base ] then
10582: LD_VAR 0 2
10586: PUSH
10587: LD_EXP 30
10591: PUSH
10592: LD_VAR 0 1
10596: ARRAY
10597: IN
10598: IFFALSE 10647
// begin temp_list = ai_engineers [ base ] diff human ;
10600: LD_ADDR_VAR 0 5
10604: PUSH
10605: LD_EXP 30
10609: PUSH
10610: LD_VAR 0 1
10614: ARRAY
10615: PUSH
10616: LD_VAR 0 2
10620: DIFF
10621: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , base , temp_list ) ;
10622: LD_ADDR_EXP 30
10626: PUSH
10627: LD_EXP 30
10631: PPUSH
10632: LD_VAR 0 1
10636: PPUSH
10637: LD_VAR 0 5
10641: PPUSH
10642: CALL_OW 1
10646: ST_TO_ADDR
// end ; if human in ai_apemen_engineers [ base ] then
10647: LD_VAR 0 2
10651: PUSH
10652: LD_EXP 62
10656: PUSH
10657: LD_VAR 0 1
10661: ARRAY
10662: IN
10663: IFFALSE 10712
// begin temp_list = ai_apemen_engineers [ base ] diff human ;
10665: LD_ADDR_VAR 0 5
10669: PUSH
10670: LD_EXP 62
10674: PUSH
10675: LD_VAR 0 1
10679: ARRAY
10680: PUSH
10681: LD_VAR 0 2
10685: DIFF
10686: ST_TO_ADDR
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , temp_list ) ;
10687: LD_ADDR_EXP 62
10691: PUSH
10692: LD_EXP 62
10696: PPUSH
10697: LD_VAR 0 1
10701: PPUSH
10702: LD_VAR 0 5
10706: PPUSH
10707: CALL_OW 1
10711: ST_TO_ADDR
// end ; if human in ai_mechanics_defend [ base ] then
10712: LD_VAR 0 2
10716: PUSH
10717: LD_EXP 31
10721: PUSH
10722: LD_VAR 0 1
10726: ARRAY
10727: IN
10728: IFFALSE 10777
// begin temp_list = ai_mechanics_defend [ base ] diff human ;
10730: LD_ADDR_VAR 0 5
10734: PUSH
10735: LD_EXP 31
10739: PUSH
10740: LD_VAR 0 1
10744: ARRAY
10745: PUSH
10746: LD_VAR 0 2
10750: DIFF
10751: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , temp_list ) ;
10752: LD_ADDR_EXP 31
10756: PUSH
10757: LD_EXP 31
10761: PPUSH
10762: LD_VAR 0 1
10766: PPUSH
10767: LD_VAR 0 5
10771: PPUSH
10772: CALL_OW 1
10776: ST_TO_ADDR
// end ; if human in ai_scientists [ base ] then
10777: LD_VAR 0 2
10781: PUSH
10782: LD_EXP 32
10786: PUSH
10787: LD_VAR 0 1
10791: ARRAY
10792: IN
10793: IFFALSE 10842
// begin temp_list = ai_scientists [ base ] diff human ;
10795: LD_ADDR_VAR 0 5
10799: PUSH
10800: LD_EXP 32
10804: PUSH
10805: LD_VAR 0 1
10809: ARRAY
10810: PUSH
10811: LD_VAR 0 2
10815: DIFF
10816: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , temp_list ) ;
10817: LD_ADDR_EXP 32
10821: PUSH
10822: LD_EXP 32
10826: PPUSH
10827: LD_VAR 0 1
10831: PPUSH
10832: LD_VAR 0 5
10836: PPUSH
10837: CALL_OW 1
10841: ST_TO_ADDR
// end ; if human in ai_attacking_scientists [ base ] then
10842: LD_VAR 0 2
10846: PUSH
10847: LD_EXP 64
10851: PUSH
10852: LD_VAR 0 1
10856: ARRAY
10857: IN
10858: IFFALSE 10907
// begin temp_list = ai_attacking_scientists [ base ] diff human ;
10860: LD_ADDR_VAR 0 5
10864: PUSH
10865: LD_EXP 64
10869: PUSH
10870: LD_VAR 0 1
10874: ARRAY
10875: PUSH
10876: LD_VAR 0 2
10880: DIFF
10881: ST_TO_ADDR
// ai_attacking_scientists = Replace ( ai_attacking_scientists , base , temp_list ) ;
10882: LD_ADDR_EXP 64
10886: PUSH
10887: LD_EXP 64
10891: PPUSH
10892: LD_VAR 0 1
10896: PPUSH
10897: LD_VAR 0 5
10901: PPUSH
10902: CALL_OW 1
10906: ST_TO_ADDR
// end ; if human in ai_heal_these_humans [ base ] then
10907: LD_VAR 0 2
10911: PUSH
10912: LD_EXP 43
10916: PUSH
10917: LD_VAR 0 1
10921: ARRAY
10922: IN
10923: IFFALSE 10972
// begin temp_list = ai_heal_these_humans [ base ] diff human ;
10925: LD_ADDR_VAR 0 5
10929: PUSH
10930: LD_EXP 43
10934: PUSH
10935: LD_VAR 0 1
10939: ARRAY
10940: PUSH
10941: LD_VAR 0 2
10945: DIFF
10946: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
10947: LD_ADDR_EXP 43
10951: PUSH
10952: LD_EXP 43
10956: PPUSH
10957: LD_VAR 0 1
10961: PPUSH
10962: LD_VAR 0 5
10966: PPUSH
10967: CALL_OW 1
10971: ST_TO_ADDR
// end ; if human = ai_building_constructor [ base ] then
10972: LD_VAR 0 2
10976: PUSH
10977: LD_EXP 45
10981: PUSH
10982: LD_VAR 0 1
10986: ARRAY
10987: EQUAL
10988: IFFALSE 11013
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
10990: LD_ADDR_EXP 45
10994: PUSH
10995: LD_EXP 45
10999: PPUSH
11000: LD_VAR 0 1
11004: PPUSH
11005: LD_INT 0
11007: PPUSH
11008: CALL_OW 1
11012: ST_TO_ADDR
// if human in ai_retreating_attacking_humans [ base ] then
11013: LD_VAR 0 2
11017: PUSH
11018: LD_EXP 66
11022: PUSH
11023: LD_VAR 0 1
11027: ARRAY
11028: IN
11029: IFFALSE 11078
// begin temp_list = ai_retreating_attacking_humans [ base ] diff human ;
11031: LD_ADDR_VAR 0 5
11035: PUSH
11036: LD_EXP 66
11040: PUSH
11041: LD_VAR 0 1
11045: ARRAY
11046: PUSH
11047: LD_VAR 0 2
11051: DIFF
11052: ST_TO_ADDR
// ai_retreating_attacking_humans = Replace ( ai_retreating_attacking_humans , base , temp_list ) ;
11053: LD_ADDR_EXP 66
11057: PUSH
11058: LD_EXP 66
11062: PPUSH
11063: LD_VAR 0 1
11067: PPUSH
11068: LD_VAR 0 5
11072: PPUSH
11073: CALL_OW 1
11077: ST_TO_ADDR
// end ; if check_if_base_is_dead then
11078: LD_VAR 0 3
11082: IFFALSE 11192
// if ( ( ai_soldiers [ base ] ^ ai_attacking_soldiers [ base ] ^ ai_engineers [ base ] ^ ai_apemen_engineers [ base ] ^ ai_mechanics_defend [ base ] ^ ai_scientists [ base ] ^ ai_attacking_scientists [ base ] ) diff 0 ) = 0 then
11084: LD_EXP 29
11088: PUSH
11089: LD_VAR 0 1
11093: ARRAY
11094: PUSH
11095: LD_EXP 63
11099: PUSH
11100: LD_VAR 0 1
11104: ARRAY
11105: ADD
11106: PUSH
11107: LD_EXP 30
11111: PUSH
11112: LD_VAR 0 1
11116: ARRAY
11117: ADD
11118: PUSH
11119: LD_EXP 62
11123: PUSH
11124: LD_VAR 0 1
11128: ARRAY
11129: ADD
11130: PUSH
11131: LD_EXP 31
11135: PUSH
11136: LD_VAR 0 1
11140: ARRAY
11141: ADD
11142: PUSH
11143: LD_EXP 32
11147: PUSH
11148: LD_VAR 0 1
11152: ARRAY
11153: ADD
11154: PUSH
11155: LD_EXP 64
11159: PUSH
11160: LD_VAR 0 1
11164: ARRAY
11165: ADD
11166: PUSH
11167: LD_INT 0
11169: DIFF
11170: PUSH
11171: LD_INT 0
11173: EQUAL
11174: IFFALSE 11192
// ai_bases = ai_bases diff base ;
11176: LD_ADDR_EXP 58
11180: PUSH
11181: LD_EXP 58
11185: PUSH
11186: LD_VAR 0 1
11190: DIFF
11191: ST_TO_ADDR
// end ;
11192: LD_VAR 0 4
11196: RET
// function GetBaseArea ( base ) ; begin
11197: LD_INT 0
11199: PPUSH
// case base of 1 :
11200: LD_VAR 0 1
11204: PUSH
11205: LD_INT 1
11207: DOUBLE
11208: EQUAL
11209: IFTRUE 11213
11211: GO 11224
11213: POP
// result = Am_base ; 2 :
11214: LD_ADDR_VAR 0 2
11218: PUSH
11219: LD_INT 4
11221: ST_TO_ADDR
11222: GO 11263
11224: LD_INT 2
11226: DOUBLE
11227: EQUAL
11228: IFTRUE 11232
11230: GO 11243
11232: POP
// result = Gensher_base ; 3 :
11233: LD_ADDR_VAR 0 2
11237: PUSH
11238: LD_INT 7
11240: ST_TO_ADDR
11241: GO 11263
11243: LD_INT 3
11245: DOUBLE
11246: EQUAL
11247: IFTRUE 11251
11249: GO 11262
11251: POP
// result = Ru_base ; end ;
11252: LD_ADDR_VAR 0 2
11256: PUSH
11257: LD_INT 3
11259: ST_TO_ADDR
11260: GO 11263
11262: POP
// end ;
11263: LD_VAR 0 2
11267: RET
// function GetBaseSide ( base ) ; begin
11268: LD_INT 0
11270: PPUSH
// case base of 1 :
11271: LD_VAR 0 1
11275: PUSH
11276: LD_INT 1
11278: DOUBLE
11279: EQUAL
11280: IFTRUE 11284
11282: GO 11297
11284: POP
// result = americans ; 2 :
11285: LD_ADDR_VAR 0 2
11289: PUSH
11290: LD_EXP 6
11294: ST_TO_ADDR
11295: GO 11340
11297: LD_INT 2
11299: DOUBLE
11300: EQUAL
11301: IFTRUE 11305
11303: GO 11318
11305: POP
// result = you_alt ; 3 :
11306: LD_ADDR_VAR 0 2
11310: PUSH
11311: LD_EXP 5
11315: ST_TO_ADDR
11316: GO 11340
11318: LD_INT 3
11320: DOUBLE
11321: EQUAL
11322: IFTRUE 11326
11324: GO 11339
11326: POP
// result = russians ; end ;
11327: LD_ADDR_VAR 0 2
11331: PUSH
11332: LD_EXP 3
11336: ST_TO_ADDR
11337: GO 11340
11339: POP
// end ;
11340: LD_VAR 0 2
11344: RET
// function GetBaseNation ( base ) ; begin
11345: LD_INT 0
11347: PPUSH
// case base of 1 :
11348: LD_VAR 0 1
11352: PUSH
11353: LD_INT 1
11355: DOUBLE
11356: EQUAL
11357: IFTRUE 11361
11359: GO 11372
11361: POP
// result = nation_american ; 2 :
11362: LD_ADDR_VAR 0 2
11366: PUSH
11367: LD_INT 1
11369: ST_TO_ADDR
11370: GO 11411
11372: LD_INT 2
11374: DOUBLE
11375: EQUAL
11376: IFTRUE 11380
11378: GO 11391
11380: POP
// result = nation_arabian ; 3 :
11381: LD_ADDR_VAR 0 2
11385: PUSH
11386: LD_INT 2
11388: ST_TO_ADDR
11389: GO 11411
11391: LD_INT 3
11393: DOUBLE
11394: EQUAL
11395: IFTRUE 11399
11397: GO 11410
11399: POP
// result = nation_russian ; end ;
11400: LD_ADDR_VAR 0 2
11404: PUSH
11405: LD_INT 3
11407: ST_TO_ADDR
11408: GO 11411
11410: POP
// end ;
11411: LD_VAR 0 2
11415: RET
// function FindBase ( un ) ; var base ; begin
11416: LD_INT 0
11418: PPUSH
11419: PPUSH
// for base in ai_bases do
11420: LD_ADDR_VAR 0 3
11424: PUSH
11425: LD_EXP 58
11429: PUSH
11430: FOR_IN
11431: IFFALSE 11470
// if IsInArea ( un , GetBaseArea ( base ) ) then
11433: LD_VAR 0 1
11437: PPUSH
11438: LD_VAR 0 3
11442: PPUSH
11443: CALL 11197 0 1
11447: PPUSH
11448: CALL_OW 308
11452: IFFALSE 11468
// begin result = base ;
11454: LD_ADDR_VAR 0 2
11458: PUSH
11459: LD_VAR 0 3
11463: ST_TO_ADDR
// exit ;
11464: POP
11465: POP
11466: GO 11481
// end ;
11468: GO 11430
11470: POP
11471: POP
// result = - 1 ;
11472: LD_ADDR_VAR 0 2
11476: PUSH
11477: LD_INT 1
11479: NEG
11480: ST_TO_ADDR
// end ;
11481: LD_VAR 0 2
11485: RET
// every 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 ;
11486: GO 11488
11488: DISABLE
11489: LD_INT 0
11491: PPUSH
11492: PPUSH
11493: PPUSH
11494: PPUSH
11495: PPUSH
11496: PPUSH
11497: PPUSH
11498: PPUSH
11499: PPUSH
11500: PPUSH
11501: PPUSH
11502: PPUSH
11503: PPUSH
11504: PPUSH
// begin for base in ai_bases do
11505: LD_ADDR_VAR 0 7
11509: PUSH
11510: LD_EXP 58
11514: PUSH
11515: FOR_IN
11516: IFFALSE 12900
// begin side = GetBaseSide ( base ) ;
11518: LD_ADDR_VAR 0 1
11522: PUSH
11523: LD_VAR 0 7
11527: PPUSH
11528: CALL 11268 0 1
11532: ST_TO_ADDR
// soldiers_list = ai_soldiers [ base ] ;
11533: LD_ADDR_VAR 0 5
11537: PUSH
11538: LD_EXP 29
11542: PUSH
11543: LD_VAR 0 7
11547: ARRAY
11548: ST_TO_ADDR
// under_attack := BaseUnderAttack ( base , - 1 ) ;
11549: LD_ADDR_VAR 0 11
11553: PUSH
11554: LD_VAR 0 7
11558: PPUSH
11559: LD_INT 1
11561: NEG
11562: PPUSH
11563: CALL 22188 0 2
11567: ST_TO_ADDR
// if base = 1 and under_attack and game_phase > 1 then
11568: LD_VAR 0 7
11572: PUSH
11573: LD_INT 1
11575: EQUAL
11576: PUSH
11577: LD_VAR 0 11
11581: AND
11582: PUSH
11583: LD_EXP 88
11587: PUSH
11588: LD_INT 1
11590: GREATER
11591: AND
11592: IFFALSE 11627
// am_snipers = UnitFilter ( ai_soldiers [ base ] , [ f_class , class_sniper ] ) else
11594: LD_ADDR_VAR 0 13
11598: PUSH
11599: LD_EXP 29
11603: PUSH
11604: LD_VAR 0 7
11608: ARRAY
11609: PPUSH
11610: LD_INT 25
11612: PUSH
11613: LD_INT 5
11615: PUSH
11616: EMPTY
11617: LIST
11618: LIST
11619: PPUSH
11620: CALL_OW 72
11624: ST_TO_ADDR
11625: GO 11634
// am_snipers = [ ] ;
11627: LD_ADDR_VAR 0 13
11631: PUSH
11632: EMPTY
11633: ST_TO_ADDR
// if under_attack then
11634: LD_VAR 0 11
11638: IFFALSE 11695
// begin temp_list = ai_heal_these_humans [ base ] diff ( soldiers_list diff am_snipers ) ;
11640: LD_ADDR_VAR 0 3
11644: PUSH
11645: LD_EXP 43
11649: PUSH
11650: LD_VAR 0 7
11654: ARRAY
11655: PUSH
11656: LD_VAR 0 5
11660: PUSH
11661: LD_VAR 0 13
11665: DIFF
11666: DIFF
11667: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
11668: LD_ADDR_EXP 43
11672: PUSH
11673: LD_EXP 43
11677: PPUSH
11678: LD_VAR 0 7
11682: PPUSH
11683: LD_VAR 0 3
11687: PPUSH
11688: CALL_OW 1
11692: ST_TO_ADDR
// end else
11693: GO 11909
// begin temp_list = ai_heal_these_humans [ base ] ;
11695: LD_ADDR_VAR 0 3
11699: PUSH
11700: LD_EXP 43
11704: PUSH
11705: LD_VAR 0 7
11709: ARRAY
11710: ST_TO_ADDR
// for i in soldiers_list diff ai_heal_these_humans [ base ] do
11711: LD_ADDR_VAR 0 2
11715: PUSH
11716: LD_VAR 0 5
11720: PUSH
11721: LD_EXP 43
11725: PUSH
11726: LD_VAR 0 7
11730: ARRAY
11731: DIFF
11732: PUSH
11733: FOR_IN
11734: IFFALSE 11769
// if GetLives ( i ) < 800 then
11736: LD_VAR 0 2
11740: PPUSH
11741: CALL_OW 256
11745: PUSH
11746: LD_INT 800
11748: LESS
11749: IFFALSE 11767
// temp_list = temp_list ^ i ;
11751: LD_ADDR_VAR 0 3
11755: PUSH
11756: LD_VAR 0 3
11760: PUSH
11761: LD_VAR 0 2
11765: ADD
11766: ST_TO_ADDR
11767: GO 11733
11769: POP
11770: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
11771: LD_ADDR_EXP 43
11775: PUSH
11776: LD_EXP 43
11780: PPUSH
11781: LD_VAR 0 7
11785: PPUSH
11786: LD_VAR 0 3
11790: PPUSH
11791: CALL_OW 1
11795: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
11796: LD_ADDR_VAR 0 2
11800: PUSH
11801: LD_EXP 43
11805: PUSH
11806: LD_VAR 0 7
11810: ARRAY
11811: PUSH
11812: FOR_IN
11813: IFFALSE 11885
// if i in soldiers_list then
11815: LD_VAR 0 2
11819: PUSH
11820: LD_VAR 0 5
11824: IN
11825: IFFALSE 11883
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
11827: LD_VAR 0 2
11831: PPUSH
11832: CALL_OW 310
11836: PPUSH
11837: CALL_OW 247
11841: PUSH
11842: LD_INT 2
11844: DOUBLE
11845: EQUAL
11846: IFTRUE 11850
11848: GO 11862
11850: POP
// ComExitVehicle ( i ) ; unit_building :
11851: LD_VAR 0 2
11855: PPUSH
11856: CALL_OW 121
11860: GO 11883
11862: LD_INT 3
11864: DOUBLE
11865: EQUAL
11866: IFTRUE 11870
11868: GO 11882
11870: POP
// ComExitBuilding ( i ) ; end ;
11871: LD_VAR 0 2
11875: PPUSH
11876: CALL_OW 122
11880: GO 11883
11882: POP
11883: GO 11812
11885: POP
11886: POP
// soldiers_list = soldiers_list diff ai_heal_these_humans [ base ] ;
11887: LD_ADDR_VAR 0 5
11891: PUSH
11892: LD_VAR 0 5
11896: PUSH
11897: LD_EXP 43
11901: PUSH
11902: LD_VAR 0 7
11906: ARRAY
11907: DIFF
11908: ST_TO_ADDR
// end ; temp_list = ai_heal_these_humans [ base ] ;
11909: LD_ADDR_VAR 0 3
11913: PUSH
11914: LD_EXP 43
11918: PUSH
11919: LD_VAR 0 7
11923: ARRAY
11924: ST_TO_ADDR
// for i in am_snipers diff ai_heal_these_humans [ base ] do
11925: LD_ADDR_VAR 0 2
11929: PUSH
11930: LD_VAR 0 13
11934: PUSH
11935: LD_EXP 43
11939: PUSH
11940: LD_VAR 0 7
11944: ARRAY
11945: DIFF
11946: PUSH
11947: FOR_IN
11948: IFFALSE 11983
// if GetLives ( i ) <= 500 then
11950: LD_VAR 0 2
11954: PPUSH
11955: CALL_OW 256
11959: PUSH
11960: LD_INT 500
11962: LESSEQUAL
11963: IFFALSE 11981
// temp_list = temp_list ^ i ;
11965: LD_ADDR_VAR 0 3
11969: PUSH
11970: LD_VAR 0 3
11974: PUSH
11975: LD_VAR 0 2
11979: ADD
11980: ST_TO_ADDR
11981: GO 11947
11983: POP
11984: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
11985: LD_ADDR_EXP 43
11989: PUSH
11990: LD_EXP 43
11994: PPUSH
11995: LD_VAR 0 7
11999: PPUSH
12000: LD_VAR 0 3
12004: PPUSH
12005: CALL_OW 1
12009: ST_TO_ADDR
// am_snipers = am_snipers diff ai_heal_these_humans [ base ] ;
12010: LD_ADDR_VAR 0 13
12014: PUSH
12015: LD_VAR 0 13
12019: PUSH
12020: LD_EXP 43
12024: PUSH
12025: LD_VAR 0 7
12029: ARRAY
12030: DIFF
12031: ST_TO_ADDR
// if soldiers_list = 0 then
12032: LD_VAR 0 5
12036: PUSH
12037: LD_INT 0
12039: EQUAL
12040: IFFALSE 12044
// continue ;
12042: GO 11515
// if am_snipers > 0 then
12044: LD_VAR 0 13
12048: PUSH
12049: LD_INT 0
12051: GREATER
12052: IFFALSE 12169
// begin temp_list_2 = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_inarea , am_sniper_defend_area ] ] ) ;
12054: LD_ADDR_VAR 0 14
12058: PUSH
12059: LD_INT 81
12061: PUSH
12062: LD_VAR 0 1
12066: PUSH
12067: EMPTY
12068: LIST
12069: LIST
12070: PUSH
12071: LD_INT 21
12073: PUSH
12074: LD_INT 1
12076: PUSH
12077: EMPTY
12078: LIST
12079: LIST
12080: PUSH
12081: LD_INT 95
12083: PUSH
12084: LD_INT 12
12086: PUSH
12087: EMPTY
12088: LIST
12089: LIST
12090: PUSH
12091: EMPTY
12092: LIST
12093: LIST
12094: LIST
12095: PPUSH
12096: CALL_OW 69
12100: ST_TO_ADDR
// if temp_list_2 > 0 then
12101: LD_VAR 0 14
12105: PUSH
12106: LD_INT 0
12108: GREATER
12109: IFFALSE 12169
// begin soldiers_list = soldiers_list diff am_snipers ;
12111: LD_ADDR_VAR 0 5
12115: PUSH
12116: LD_VAR 0 5
12120: PUSH
12121: LD_VAR 0 13
12125: DIFF
12126: ST_TO_ADDR
// ComAgressiveMove ( GetHumansOutOfUnits ( am_snipers ) , GetX ( temp_list_2 [ 1 ] ) , GetY ( temp_list_2 [ 1 ] ) ) ;
12127: LD_VAR 0 13
12131: PPUSH
12132: CALL 22083 0 1
12136: PPUSH
12137: LD_VAR 0 14
12141: PUSH
12142: LD_INT 1
12144: ARRAY
12145: PPUSH
12146: CALL_OW 250
12150: PPUSH
12151: LD_VAR 0 14
12155: PUSH
12156: LD_INT 1
12158: ARRAY
12159: PPUSH
12160: CALL_OW 251
12164: PPUSH
12165: CALL_OW 114
// end ; end ; i = false ;
12169: LD_ADDR_VAR 0 2
12173: PUSH
12174: LD_INT 0
12176: ST_TO_ADDR
// if IsOk ( ai_depot [ base ] ) then
12177: LD_EXP 34
12181: PUSH
12182: LD_VAR 0 7
12186: ARRAY
12187: PPUSH
12188: CALL_OW 302
12192: IFFALSE 12232
// if GetEnergy ( GetBase ( ai_depot [ base ] ) ) [ 4 ] > 0 then
12194: LD_EXP 34
12198: PUSH
12199: LD_VAR 0 7
12203: ARRAY
12204: PPUSH
12205: CALL_OW 274
12209: PPUSH
12210: CALL_OW 278
12214: PUSH
12215: LD_INT 4
12217: ARRAY
12218: PUSH
12219: LD_INT 0
12221: GREATER
12222: IFFALSE 12232
// i = true ;
12224: LD_ADDR_VAR 0 2
12228: PUSH
12229: LD_INT 1
12231: ST_TO_ADDR
// if i then
12232: LD_VAR 0 2
12236: IFFALSE 12256
// bunkers = ai_bunkers [ base ] else
12238: LD_ADDR_VAR 0 10
12242: PUSH
12243: LD_EXP 49
12247: PUSH
12248: LD_VAR 0 7
12252: ARRAY
12253: ST_TO_ADDR
12254: GO 12317
// begin bunkers = [ ] ;
12256: LD_ADDR_VAR 0 10
12260: PUSH
12261: EMPTY
12262: ST_TO_ADDR
// for i in ai_bunkers [ base ] do
12263: LD_ADDR_VAR 0 2
12267: PUSH
12268: LD_EXP 49
12272: PUSH
12273: LD_VAR 0 7
12277: ARRAY
12278: PUSH
12279: FOR_IN
12280: IFFALSE 12315
// if GetBType ( i ) = b_breastwork then
12282: LD_VAR 0 2
12286: PPUSH
12287: CALL_OW 266
12291: PUSH
12292: LD_INT 31
12294: EQUAL
12295: IFFALSE 12313
// bunkers = bunkers ^ i ;
12297: LD_ADDR_VAR 0 10
12301: PUSH
12302: LD_VAR 0 10
12306: PUSH
12307: LD_VAR 0 2
12311: ADD
12312: ST_TO_ADDR
12313: GO 12279
12315: POP
12316: POP
// end ; buildings_list = [ ] ;
12317: LD_ADDR_VAR 0 4
12321: PUSH
12322: EMPTY
12323: ST_TO_ADDR
// for i in UnitFilter ( bunkers , [ f_ok ] ) do
12324: LD_ADDR_VAR 0 2
12328: PUSH
12329: LD_VAR 0 10
12333: PPUSH
12334: LD_INT 50
12336: PUSH
12337: EMPTY
12338: LIST
12339: PPUSH
12340: CALL_OW 72
12344: PUSH
12345: FOR_IN
12346: IFFALSE 12409
// begin temp_unit = UnitsInside ( i ) ;
12348: LD_ADDR_VAR 0 6
12352: PUSH
12353: LD_VAR 0 2
12357: PPUSH
12358: CALL_OW 313
12362: ST_TO_ADDR
// if temp_unit = 0 then
12363: LD_VAR 0 6
12367: PUSH
12368: LD_INT 0
12370: EQUAL
12371: IFFALSE 12391
// buildings_list = buildings_list ^ i else
12373: LD_ADDR_VAR 0 4
12377: PUSH
12378: LD_VAR 0 4
12382: PUSH
12383: LD_VAR 0 2
12387: ADD
12388: ST_TO_ADDR
12389: GO 12407
// soldiers_list = soldiers_list diff temp_unit ;
12391: LD_ADDR_VAR 0 5
12395: PUSH
12396: LD_VAR 0 5
12400: PUSH
12401: LD_VAR 0 6
12405: DIFF
12406: ST_TO_ADDR
// end ;
12407: GO 12345
12409: POP
12410: POP
// soldiers_list = soldiers_list diff Gensher ;
12411: LD_ADDR_VAR 0 5
12415: PUSH
12416: LD_VAR 0 5
12420: PUSH
12421: LD_EXP 23
12425: DIFF
12426: ST_TO_ADDR
// if buildings_list > 0 then
12427: LD_VAR 0 4
12431: PUSH
12432: LD_INT 0
12434: GREATER
12435: IFFALSE 12780
// begin if not under_attack then
12437: LD_VAR 0 11
12441: NOT
12442: IFFALSE 12512
// begin temp_list = [ ] ;
12444: LD_ADDR_VAR 0 3
12448: PUSH
12449: EMPTY
12450: ST_TO_ADDR
// for i in soldiers_list do
12451: LD_ADDR_VAR 0 2
12455: PUSH
12456: LD_VAR 0 5
12460: PUSH
12461: FOR_IN
12462: IFFALSE 12490
// temp_list = temp_list ^ GetSkill ( i , skill_combat ) ;
12464: LD_ADDR_VAR 0 3
12468: PUSH
12469: LD_VAR 0 3
12473: PUSH
12474: LD_VAR 0 2
12478: PPUSH
12479: LD_INT 1
12481: PPUSH
12482: CALL_OW 259
12486: ADD
12487: ST_TO_ADDR
12488: GO 12461
12490: POP
12491: POP
// soldiers_list = SortListByListDesc ( soldiers_list , temp_list ) ;
12492: LD_ADDR_VAR 0 5
12496: PUSH
12497: LD_VAR 0 5
12501: PPUSH
12502: LD_VAR 0 3
12506: PPUSH
12507: CALL_OW 77
12511: ST_TO_ADDR
// end ; special_units = UnitFilter ( soldiers_list , [ f_or , [ f_class , class_bazooker ] , [ f_class , class_sniper ] , [ f_class , class_mortar ] ] ) ;
12512: LD_ADDR_VAR 0 9
12516: PUSH
12517: LD_VAR 0 5
12521: PPUSH
12522: LD_INT 2
12524: PUSH
12525: LD_INT 25
12527: PUSH
12528: LD_INT 9
12530: PUSH
12531: EMPTY
12532: LIST
12533: LIST
12534: PUSH
12535: LD_INT 25
12537: PUSH
12538: LD_INT 5
12540: PUSH
12541: EMPTY
12542: LIST
12543: LIST
12544: PUSH
12545: LD_INT 25
12547: PUSH
12548: LD_INT 8
12550: PUSH
12551: EMPTY
12552: LIST
12553: LIST
12554: PUSH
12555: EMPTY
12556: LIST
12557: LIST
12558: LIST
12559: LIST
12560: PPUSH
12561: CALL_OW 72
12565: ST_TO_ADDR
// soldiers_list = soldiers_list diff special_units ;
12566: LD_ADDR_VAR 0 5
12570: PUSH
12571: LD_VAR 0 5
12575: PUSH
12576: LD_VAR 0 9
12580: DIFF
12581: ST_TO_ADDR
// for i = 1 to buildings_list do
12582: LD_ADDR_VAR 0 2
12586: PUSH
12587: DOUBLE
12588: LD_INT 1
12590: DEC
12591: ST_TO_ADDR
12592: LD_VAR 0 4
12596: PUSH
12597: FOR_TO
12598: IFFALSE 12776
// begin if soldiers_list = 0 then
12600: LD_VAR 0 5
12604: PUSH
12605: LD_INT 0
12607: EQUAL
12608: IFFALSE 12639
// begin if special_units = 0 then
12610: LD_VAR 0 9
12614: PUSH
12615: LD_INT 0
12617: EQUAL
12618: IFFALSE 12622
// break ;
12620: GO 12776
// soldiers_list = special_units ;
12622: LD_ADDR_VAR 0 5
12626: PUSH
12627: LD_VAR 0 9
12631: ST_TO_ADDR
// special_units = [ ] ;
12632: LD_ADDR_VAR 0 9
12636: PUSH
12637: EMPTY
12638: ST_TO_ADDR
// end ; if not under_attack then
12639: LD_VAR 0 11
12643: NOT
12644: IFFALSE 12662
// temp_unit = soldiers_list [ 1 ] else
12646: LD_ADDR_VAR 0 6
12650: PUSH
12651: LD_VAR 0 5
12655: PUSH
12656: LD_INT 1
12658: ARRAY
12659: ST_TO_ADDR
12660: GO 12738
// begin temp_list = [ ] ;
12662: LD_ADDR_VAR 0 3
12666: PUSH
12667: EMPTY
12668: ST_TO_ADDR
// for j in soldiers_list do
12669: LD_ADDR_VAR 0 12
12673: PUSH
12674: LD_VAR 0 5
12678: PUSH
12679: FOR_IN
12680: IFFALSE 12716
// temp_list = temp_list ^ GetDistUnits ( j , buildings_list [ i ] ) ;
12682: LD_ADDR_VAR 0 3
12686: PUSH
12687: LD_VAR 0 3
12691: PUSH
12692: LD_VAR 0 12
12696: PPUSH
12697: LD_VAR 0 4
12701: PUSH
12702: LD_VAR 0 2
12706: ARRAY
12707: PPUSH
12708: CALL_OW 296
12712: ADD
12713: ST_TO_ADDR
12714: GO 12679
12716: POP
12717: POP
// temp_unit = WorstFromListByList ( soldiers_list , temp_list ) ;
12718: LD_ADDR_VAR 0 6
12722: PUSH
12723: LD_VAR 0 5
12727: PPUSH
12728: LD_VAR 0 3
12732: PPUSH
12733: CALL_OW 78
12737: ST_TO_ADDR
// end ; ComEnterUnit ( temp_unit , buildings_list [ i ] ) ;
12738: LD_VAR 0 6
12742: PPUSH
12743: LD_VAR 0 4
12747: PUSH
12748: LD_VAR 0 2
12752: ARRAY
12753: PPUSH
12754: CALL_OW 120
// soldiers_list = soldiers_list diff temp_unit ;
12758: LD_ADDR_VAR 0 5
12762: PUSH
12763: LD_VAR 0 5
12767: PUSH
12768: LD_VAR 0 6
12772: DIFF
12773: ST_TO_ADDR
// end ;
12774: GO 12597
12776: POP
12777: POP
// end else
12778: GO 12787
// special_units = [ ] ;
12780: LD_ADDR_VAR 0 9
12784: PUSH
12785: EMPTY
12786: ST_TO_ADDR
// if base = 2 then
12787: LD_VAR 0 7
12791: PUSH
12792: LD_INT 2
12794: EQUAL
12795: IFFALSE 12827
// soldiers_list = soldiers_list ^ UnitFilter ( [ Gensher ] , [ f_alive ] ) ;
12797: LD_ADDR_VAR 0 5
12801: PUSH
12802: LD_VAR 0 5
12806: PUSH
12807: LD_EXP 23
12811: PUSH
12812: EMPTY
12813: LIST
12814: PPUSH
12815: LD_INT 51
12817: PUSH
12818: EMPTY
12819: LIST
12820: PPUSH
12821: CALL_OW 72
12825: ADD
12826: ST_TO_ADDR
// DistributeHumansToBuildings ( base , soldiers_list ^ special_units , UnitFilter ( ai_armouries [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , false , 6 , true , true ) ;
12827: LD_VAR 0 7
12831: PPUSH
12832: LD_VAR 0 5
12836: PUSH
12837: LD_VAR 0 9
12841: ADD
12842: PPUSH
12843: LD_EXP 48
12847: PUSH
12848: LD_VAR 0 7
12852: ARRAY
12853: PPUSH
12854: LD_INT 50
12856: PUSH
12857: EMPTY
12858: LIST
12859: PUSH
12860: LD_INT 3
12862: PUSH
12863: LD_INT 57
12865: PUSH
12866: EMPTY
12867: LIST
12868: PUSH
12869: EMPTY
12870: LIST
12871: LIST
12872: PUSH
12873: EMPTY
12874: LIST
12875: LIST
12876: PPUSH
12877: CALL_OW 72
12881: PPUSH
12882: LD_INT 0
12884: PPUSH
12885: LD_INT 6
12887: PPUSH
12888: LD_INT 1
12890: PPUSH
12891: LD_INT 1
12893: PPUSH
12894: CALL 14154 0 7
// end ;
12898: GO 11515
12900: POP
12901: POP
// enable ;
12902: ENABLE
// end ;
12903: PPOPN 14
12905: END
// every 0 0$1 + 0 0$0.1 do var side , base , i , temp_list , un1 , temp_list_2 , temp_value , val ;
12906: GO 12908
12908: DISABLE
12909: LD_INT 0
12911: PPUSH
12912: PPUSH
12913: PPUSH
12914: PPUSH
12915: PPUSH
12916: PPUSH
12917: PPUSH
12918: PPUSH
// begin repeat wait ( 0 0$1 ) ;
12919: LD_INT 35
12921: PPUSH
12922: CALL_OW 67
// for base in ai_bases do
12926: LD_ADDR_VAR 0 2
12930: PUSH
12931: LD_EXP 58
12935: PUSH
12936: FOR_IN
12937: IFFALSE 13388
// begin if base in [ 1 , 2 ] then
12939: LD_VAR 0 2
12943: PUSH
12944: LD_INT 1
12946: PUSH
12947: LD_INT 2
12949: PUSH
12950: EMPTY
12951: LIST
12952: LIST
12953: IN
12954: IFFALSE 12958
// continue ;
12956: GO 12936
// side = GetBaseSide ( base ) ;
12958: LD_ADDR_VAR 0 1
12962: PUSH
12963: LD_VAR 0 2
12967: PPUSH
12968: CALL 11268 0 1
12972: ST_TO_ADDR
// for i in ai_soldiers [ base ] diff ai_heal_these_humans [ base ] do
12973: LD_ADDR_VAR 0 3
12977: PUSH
12978: LD_EXP 29
12982: PUSH
12983: LD_VAR 0 2
12987: ARRAY
12988: PUSH
12989: LD_EXP 43
12993: PUSH
12994: LD_VAR 0 2
12998: ARRAY
12999: DIFF
13000: PUSH
13001: FOR_IN
13002: IFFALSE 13384
// if GetClass ( i ) = class_bazooker then
13004: LD_VAR 0 3
13008: PPUSH
13009: CALL_OW 257
13013: PUSH
13014: LD_INT 9
13016: EQUAL
13017: IFFALSE 13382
// begin temp_list = GetTaskList ( i ) ;
13019: LD_ADDR_VAR 0 4
13023: PUSH
13024: LD_VAR 0 3
13028: PPUSH
13029: CALL_OW 437
13033: ST_TO_ADDR
// if temp_list > 0 then
13034: LD_VAR 0 4
13038: PUSH
13039: LD_INT 0
13041: GREATER
13042: IFFALSE 13082
// if temp_list [ 1 ] [ 1 ] = & or temp_list [ 1 ] [ 1 ] = % then
13044: LD_VAR 0 4
13048: PUSH
13049: LD_INT 1
13051: ARRAY
13052: PUSH
13053: LD_INT 1
13055: ARRAY
13056: PUSH
13057: LD_STRING &
13059: EQUAL
13060: PUSH
13061: LD_VAR 0 4
13065: PUSH
13066: LD_INT 1
13068: ARRAY
13069: PUSH
13070: LD_INT 1
13072: ARRAY
13073: PUSH
13074: LD_STRING %
13076: EQUAL
13077: OR
13078: IFFALSE 13082
// continue ;
13080: GO 13001
// un1 = Attacks ( i ) ;
13082: LD_ADDR_VAR 0 5
13086: PUSH
13087: LD_VAR 0 3
13091: PPUSH
13092: CALL_OW 320
13096: ST_TO_ADDR
// if un1 > 0 and DangerousUnits ( [ un1 ] ) > 0 then
13097: LD_VAR 0 5
13101: PUSH
13102: LD_INT 0
13104: GREATER
13105: PUSH
13106: LD_VAR 0 5
13110: PUSH
13111: EMPTY
13112: LIST
13113: PPUSH
13114: CALL 39259 0 1
13118: PUSH
13119: LD_INT 0
13121: GREATER
13122: AND
13123: IFFALSE 13382
// begin temp_list_2 = [ GetX ( un1 ) , GetY ( un1 ) ] ;
13125: LD_ADDR_VAR 0 6
13129: PUSH
13130: LD_VAR 0 5
13134: PPUSH
13135: CALL_OW 250
13139: PUSH
13140: LD_VAR 0 5
13144: PPUSH
13145: CALL_OW 251
13149: PUSH
13150: EMPTY
13151: LIST
13152: LIST
13153: ST_TO_ADDR
// temp_value = false ;
13154: LD_ADDR_VAR 0 7
13158: PUSH
13159: LD_INT 0
13161: ST_TO_ADDR
// for val in ai_time_shift_hexes [ base ] ^ ai_time_shift_hexes_underway [ base ] do
13162: LD_ADDR_VAR 0 8
13166: PUSH
13167: LD_EXP 72
13171: PUSH
13172: LD_VAR 0 2
13176: ARRAY
13177: PUSH
13178: LD_EXP 73
13182: PUSH
13183: LD_VAR 0 2
13187: ARRAY
13188: ADD
13189: PUSH
13190: FOR_IN
13191: IFFALSE 13263
// if GetDistXY ( temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , val [ 1 ] , val [ 2 ] ) <= ai_time_shift_data [ side ] [ 2 ] then
13193: LD_VAR 0 6
13197: PUSH
13198: LD_INT 1
13200: ARRAY
13201: PPUSH
13202: LD_VAR 0 6
13206: PUSH
13207: LD_INT 2
13209: ARRAY
13210: PPUSH
13211: LD_VAR 0 8
13215: PUSH
13216: LD_INT 1
13218: ARRAY
13219: PPUSH
13220: LD_VAR 0 8
13224: PUSH
13225: LD_INT 2
13227: ARRAY
13228: PPUSH
13229: CALL_OW 298
13233: PUSH
13234: LD_EXP 71
13238: PUSH
13239: LD_VAR 0 1
13243: ARRAY
13244: PUSH
13245: LD_INT 2
13247: ARRAY
13248: LESSEQUAL
13249: IFFALSE 13261
// begin temp_value = true ;
13251: LD_ADDR_VAR 0 7
13255: PUSH
13256: LD_INT 1
13258: ST_TO_ADDR
// break ;
13259: GO 13263
// end ;
13261: GO 13190
13263: POP
13264: POP
// if not temp_value then
13265: LD_VAR 0 7
13269: NOT
13270: IFFALSE 13382
// begin ComTimeShift ( i , temp_list_2 [ 1 ] , temp_list_2 [ 2 ] ) ;
13272: LD_VAR 0 3
13276: PPUSH
13277: LD_VAR 0 6
13281: PUSH
13282: LD_INT 1
13284: ARRAY
13285: PPUSH
13286: LD_VAR 0 6
13290: PUSH
13291: LD_INT 2
13293: ARRAY
13294: PPUSH
13295: CALL_OW 154
// temp_list = Insert ( ai_time_shift_hexes_underway [ base ] , 1 , [ temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , i , tick ] ) ;
13299: LD_ADDR_VAR 0 4
13303: PUSH
13304: LD_EXP 73
13308: PUSH
13309: LD_VAR 0 2
13313: ARRAY
13314: PPUSH
13315: LD_INT 1
13317: PPUSH
13318: LD_VAR 0 6
13322: PUSH
13323: LD_INT 1
13325: ARRAY
13326: PUSH
13327: LD_VAR 0 6
13331: PUSH
13332: LD_INT 2
13334: ARRAY
13335: PUSH
13336: LD_VAR 0 3
13340: PUSH
13341: LD_OWVAR 1
13345: PUSH
13346: EMPTY
13347: LIST
13348: LIST
13349: LIST
13350: LIST
13351: PPUSH
13352: CALL_OW 2
13356: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
13357: LD_ADDR_EXP 73
13361: PUSH
13362: LD_EXP 73
13366: PPUSH
13367: LD_VAR 0 2
13371: PPUSH
13372: LD_VAR 0 4
13376: PPUSH
13377: CALL_OW 1
13381: ST_TO_ADDR
// end ; end ; end ;
13382: GO 13001
13384: POP
13385: POP
// end ;
13386: GO 12936
13388: POP
13389: POP
// until false ;
13390: LD_INT 0
13392: IFFALSE 12919
// end ;
13394: PPOPN 8
13396: END
// every 0 0$1 + 0 0$0.2 do var base , i , temp_list , un1 , temp_list_2 , temp_value ; var shooting_delay ;
13397: GO 13399
13399: DISABLE
13400: LD_INT 0
13402: PPUSH
13403: PPUSH
13404: PPUSH
13405: PPUSH
13406: PPUSH
13407: PPUSH
13408: PPUSH
// begin shooting_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
13409: LD_ADDR_VAR 0 7
13413: PUSH
13414: LD_INT 0
13416: PUSH
13417: LD_INT 0
13419: PUSH
13420: LD_INT 0
13422: PUSH
13423: EMPTY
13424: LIST
13425: LIST
13426: LIST
13427: ST_TO_ADDR
// if not yashin_alive then
13428: LD_EXP 85
13432: NOT
13433: IFFALSE 13437
// exit ;
13435: GO 13933
// repeat wait ( 0 0$1 ) ;
13437: LD_INT 35
13439: PPUSH
13440: CALL_OW 67
// for base in ai_bases do
13444: LD_ADDR_VAR 0 1
13448: PUSH
13449: LD_EXP 58
13453: PUSH
13454: FOR_IN
13455: IFFALSE 13927
// begin if base in [ 1 , 2 ] then
13457: LD_VAR 0 1
13461: PUSH
13462: LD_INT 1
13464: PUSH
13465: LD_INT 2
13467: PUSH
13468: EMPTY
13469: LIST
13470: LIST
13471: IN
13472: IFFALSE 13476
// continue ;
13474: GO 13454
// if shooting_delay [ base ] > 0 0$0 then
13476: LD_VAR 0 7
13480: PUSH
13481: LD_VAR 0 1
13485: ARRAY
13486: PUSH
13487: LD_INT 0
13489: GREATER
13490: IFFALSE 13529
// begin shooting_delay = Replace ( shooting_delay , base , shooting_delay [ base ] - 0 0$1 ) ;
13492: LD_ADDR_VAR 0 7
13496: PUSH
13497: LD_VAR 0 7
13501: PPUSH
13502: LD_VAR 0 1
13506: PPUSH
13507: LD_VAR 0 7
13511: PUSH
13512: LD_VAR 0 1
13516: ARRAY
13517: PUSH
13518: LD_INT 35
13520: MINUS
13521: PPUSH
13522: CALL_OW 1
13526: ST_TO_ADDR
// continue ;
13527: GO 13454
// end ; if Rand ( 1 , 15 ) > 1 then
13529: LD_INT 1
13531: PPUSH
13532: LD_INT 15
13534: PPUSH
13535: CALL_OW 12
13539: PUSH
13540: LD_INT 1
13542: GREATER
13543: IFFALSE 13547
// continue ;
13545: GO 13454
// temp_list = [ ] ;
13547: LD_ADDR_VAR 0 3
13551: PUSH
13552: EMPTY
13553: ST_TO_ADDR
// for i in ai_soldiers [ base ] diff ai_heal_these_humans [ base ] do
13554: LD_ADDR_VAR 0 2
13558: PUSH
13559: LD_EXP 29
13563: PUSH
13564: LD_VAR 0 1
13568: ARRAY
13569: PUSH
13570: LD_EXP 43
13574: PUSH
13575: LD_VAR 0 1
13579: ARRAY
13580: DIFF
13581: PUSH
13582: FOR_IN
13583: IFFALSE 13626
// if IsInUnit ( i ) in ai_armouries [ base ] then
13585: LD_VAR 0 2
13589: PPUSH
13590: CALL_OW 310
13594: PUSH
13595: LD_EXP 48
13599: PUSH
13600: LD_VAR 0 1
13604: ARRAY
13605: IN
13606: IFFALSE 13624
// temp_list = temp_list ^ i ;
13608: LD_ADDR_VAR 0 3
13612: PUSH
13613: LD_VAR 0 3
13617: PUSH
13618: LD_VAR 0 2
13622: ADD
13623: ST_TO_ADDR
13624: GO 13582
13626: POP
13627: POP
// for i in temp_list do
13628: LD_ADDR_VAR 0 2
13632: PUSH
13633: LD_VAR 0 3
13637: PUSH
13638: FOR_IN
13639: IFFALSE 13923
// if GetClass ( i ) = class_bazooker then
13641: LD_VAR 0 2
13645: PPUSH
13646: CALL_OW 257
13650: PUSH
13651: LD_INT 9
13653: EQUAL
13654: IFFALSE 13921
// begin temp_list = GetTaskList ( i ) ;
13656: LD_ADDR_VAR 0 3
13660: PUSH
13661: LD_VAR 0 2
13665: PPUSH
13666: CALL_OW 437
13670: ST_TO_ADDR
// if temp_list > 0 then
13671: LD_VAR 0 3
13675: PUSH
13676: LD_INT 0
13678: GREATER
13679: IFFALSE 13719
// if temp_list [ 1 ] [ 1 ] = & or temp_list [ 1 ] [ 1 ] = % then
13681: LD_VAR 0 3
13685: PUSH
13686: LD_INT 1
13688: ARRAY
13689: PUSH
13690: LD_INT 1
13692: ARRAY
13693: PUSH
13694: LD_STRING &
13696: EQUAL
13697: PUSH
13698: LD_VAR 0 3
13702: PUSH
13703: LD_INT 1
13705: ARRAY
13706: PUSH
13707: LD_INT 1
13709: ARRAY
13710: PUSH
13711: LD_STRING %
13713: EQUAL
13714: OR
13715: IFFALSE 13719
// continue ;
13717: GO 13638
// un1 = Attacks ( i ) ;
13719: LD_ADDR_VAR 0 4
13723: PUSH
13724: LD_VAR 0 2
13728: PPUSH
13729: CALL_OW 320
13733: ST_TO_ADDR
// if un1 > 0 and not IsInArea ( un1 , GetBaseArea ( base ) ) then
13734: LD_VAR 0 4
13738: PUSH
13739: LD_INT 0
13741: GREATER
13742: PUSH
13743: LD_VAR 0 4
13747: PPUSH
13748: LD_VAR 0 1
13752: PPUSH
13753: CALL 11197 0 1
13757: PPUSH
13758: CALL_OW 308
13762: NOT
13763: AND
13764: IFFALSE 13921
// begin temp_list_2 = [ GetX ( un1 ) , GetY ( un1 ) ] ;
13766: LD_ADDR_VAR 0 5
13770: PUSH
13771: LD_VAR 0 4
13775: PPUSH
13776: CALL_OW 250
13780: PUSH
13781: LD_VAR 0 4
13785: PPUSH
13786: CALL_OW 251
13790: PUSH
13791: EMPTY
13792: LIST
13793: LIST
13794: ST_TO_ADDR
// temp_value = AI_GetTurnDirection ( GetX ( i ) , GetY ( i ) , temp_list_2 [ 1 ] , temp_list_2 [ 2 ] ) ;
13795: LD_ADDR_VAR 0 6
13799: PUSH
13800: LD_VAR 0 2
13804: PPUSH
13805: CALL_OW 250
13809: PPUSH
13810: LD_VAR 0 2
13814: PPUSH
13815: CALL_OW 251
13819: PPUSH
13820: LD_VAR 0 5
13824: PUSH
13825: LD_INT 1
13827: ARRAY
13828: PPUSH
13829: LD_VAR 0 5
13833: PUSH
13834: LD_INT 2
13836: ARRAY
13837: PPUSH
13838: CALL 13936 0 4
13842: ST_TO_ADDR
// ComSpaceShift ( i , ShiftX ( temp_list_2 [ 1 ] , temp_value , 1 ) , ShiftY ( temp_list_2 [ 2 ] , temp_value , 1 ) ) ;
13843: LD_VAR 0 2
13847: PPUSH
13848: LD_VAR 0 5
13852: PUSH
13853: LD_INT 1
13855: ARRAY
13856: PPUSH
13857: LD_VAR 0 6
13861: PPUSH
13862: LD_INT 1
13864: PPUSH
13865: CALL_OW 272
13869: PPUSH
13870: LD_VAR 0 5
13874: PUSH
13875: LD_INT 2
13877: ARRAY
13878: PPUSH
13879: LD_VAR 0 6
13883: PPUSH
13884: LD_INT 1
13886: PPUSH
13887: CALL_OW 273
13891: PPUSH
13892: CALL_OW 153
// shooting_delay = Replace ( shooting_delay , base , 0 0$5 ) ;
13896: LD_ADDR_VAR 0 7
13900: PUSH
13901: LD_VAR 0 7
13905: PPUSH
13906: LD_VAR 0 1
13910: PPUSH
13911: LD_INT 175
13913: PPUSH
13914: CALL_OW 1
13918: ST_TO_ADDR
// break ;
13919: GO 13923
// end ; end ;
13921: GO 13638
13923: POP
13924: POP
// end ;
13925: GO 13454
13927: POP
13928: POP
// until false ;
13929: LD_INT 0
13931: IFFALSE 13437
// end ;
13933: PPOPN 7
13935: END
// function AI_GetTurnDirection ( x1 , y1 , x , y ) ; var dist_1 , dist_2 , b , temp_dist , dir ; begin
13936: LD_INT 0
13938: PPUSH
13939: PPUSH
13940: PPUSH
13941: PPUSH
13942: PPUSH
13943: PPUSH
// if not ValidHex ( x1 , y1 ) or not ValidHex ( x , y ) then
13944: LD_VAR 0 1
13948: PPUSH
13949: LD_VAR 0 2
13953: PPUSH
13954: CALL_OW 488
13958: NOT
13959: PUSH
13960: LD_VAR 0 3
13964: PPUSH
13965: LD_VAR 0 4
13969: PPUSH
13970: CALL_OW 488
13974: NOT
13975: OR
13976: IFFALSE 13989
// begin result = - 1 ;
13978: LD_ADDR_VAR 0 5
13982: PUSH
13983: LD_INT 1
13985: NEG
13986: ST_TO_ADDR
// exit ;
13987: GO 14149
// end ; dist_1 = GetDistXY ( x1 , y1 , x , y ) ;
13989: LD_ADDR_VAR 0 6
13993: PUSH
13994: LD_VAR 0 1
13998: PPUSH
13999: LD_VAR 0 2
14003: PPUSH
14004: LD_VAR 0 3
14008: PPUSH
14009: LD_VAR 0 4
14013: PPUSH
14014: CALL_OW 298
14018: ST_TO_ADDR
// dist_2 = 99999 ;
14019: LD_ADDR_VAR 0 7
14023: PUSH
14024: LD_INT 99999
14026: ST_TO_ADDR
// for b = 0 to 5 do
14027: LD_ADDR_VAR 0 8
14031: PUSH
14032: DOUBLE
14033: LD_INT 0
14035: DEC
14036: ST_TO_ADDR
14037: LD_INT 5
14039: PUSH
14040: FOR_TO
14041: IFFALSE 14137
// begin temp_dist = GetDistXY ( ShiftX ( x1 , b , dist_1 ) , ShiftY ( y1 , b , dist_1 ) , x , y ) ;
14043: LD_ADDR_VAR 0 9
14047: PUSH
14048: LD_VAR 0 1
14052: PPUSH
14053: LD_VAR 0 8
14057: PPUSH
14058: LD_VAR 0 6
14062: PPUSH
14063: CALL_OW 272
14067: PPUSH
14068: LD_VAR 0 2
14072: PPUSH
14073: LD_VAR 0 8
14077: PPUSH
14078: LD_VAR 0 6
14082: PPUSH
14083: CALL_OW 273
14087: PPUSH
14088: LD_VAR 0 3
14092: PPUSH
14093: LD_VAR 0 4
14097: PPUSH
14098: CALL_OW 298
14102: ST_TO_ADDR
// if temp_dist < dist_2 then
14103: LD_VAR 0 9
14107: PUSH
14108: LD_VAR 0 7
14112: LESS
14113: IFFALSE 14135
// begin dist_2 = temp_dist ;
14115: LD_ADDR_VAR 0 7
14119: PUSH
14120: LD_VAR 0 9
14124: ST_TO_ADDR
// dir = b ;
14125: LD_ADDR_VAR 0 10
14129: PUSH
14130: LD_VAR 0 8
14134: ST_TO_ADDR
// end ; end ;
14135: GO 14040
14137: POP
14138: POP
// result = dir ;
14139: LD_ADDR_VAR 0 5
14143: PUSH
14144: LD_VAR 0 10
14148: ST_TO_ADDR
// end ;
14149: LD_VAR 0 5
14153: RET
// 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
14154: LD_INT 0
14156: PPUSH
14157: PPUSH
14158: PPUSH
14159: PPUSH
14160: PPUSH
14161: PPUSH
14162: PPUSH
14163: PPUSH
14164: PPUSH
14165: PPUSH
// if human_list = 0 then
14166: LD_VAR 0 2
14170: PUSH
14171: LD_INT 0
14173: EQUAL
14174: IFFALSE 14178
// exit ;
14176: GO 15456
// area = GetBaseArea ( base ) ;
14178: LD_ADDR_VAR 0 13
14182: PUSH
14183: LD_VAR 0 1
14187: PPUSH
14188: CALL 11197 0 1
14192: ST_TO_ADDR
// under_attack = BaseUnderAttack ( base , - 1 ) ;
14193: LD_ADDR_VAR 0 17
14197: PUSH
14198: LD_VAR 0 1
14202: PPUSH
14203: LD_INT 1
14205: NEG
14206: PPUSH
14207: CALL 22188 0 2
14211: ST_TO_ADDR
// if not GetClass ( human_list [ 1 ] ) in [ class_engineer , class_apeman_engineer , class_mechanic , class_scientistic ] and building_list > 0 then
14212: LD_VAR 0 2
14216: PUSH
14217: LD_INT 1
14219: ARRAY
14220: PPUSH
14221: CALL_OW 257
14225: PUSH
14226: LD_INT 2
14228: PUSH
14229: LD_INT 16
14231: PUSH
14232: LD_INT 3
14234: PUSH
14235: LD_INT 4
14237: PUSH
14238: EMPTY
14239: LIST
14240: LIST
14241: LIST
14242: LIST
14243: IN
14244: NOT
14245: PUSH
14246: LD_VAR 0 3
14250: PUSH
14251: LD_INT 0
14253: GREATER
14254: AND
14255: IFFALSE 14344
// begin val = 0 ;
14257: LD_ADDR_VAR 0 11
14261: PUSH
14262: LD_INT 0
14264: ST_TO_ADDR
// for i in human_list do
14265: LD_ADDR_VAR 0 9
14269: PUSH
14270: LD_VAR 0 2
14274: PUSH
14275: FOR_IN
14276: IFFALSE 14320
// if GetClass ( i ) in [ class_sniper , class_mortar , class_bazooker ] then
14278: LD_VAR 0 9
14282: PPUSH
14283: CALL_OW 257
14287: PUSH
14288: LD_INT 5
14290: PUSH
14291: LD_INT 8
14293: PUSH
14294: LD_INT 9
14296: PUSH
14297: EMPTY
14298: LIST
14299: LIST
14300: LIST
14301: IN
14302: IFFALSE 14318
// val = val + 1 ;
14304: LD_ADDR_VAR 0 11
14308: PUSH
14309: LD_VAR 0 11
14313: PUSH
14314: LD_INT 1
14316: PLUS
14317: ST_TO_ADDR
14318: GO 14275
14320: POP
14321: POP
// special_un_count = val div ( building_list + 0 ) ;
14322: LD_ADDR_VAR 0 14
14326: PUSH
14327: LD_VAR 0 11
14331: PUSH
14332: LD_VAR 0 3
14336: PUSH
14337: LD_INT 0
14339: PLUS
14340: DIV
14341: ST_TO_ADDR
// end else
14342: GO 14352
// special_un_count = 0 ;
14344: LD_ADDR_VAR 0 14
14348: PUSH
14349: LD_INT 0
14351: ST_TO_ADDR
// val = building_list + 0 ;
14352: LD_ADDR_VAR 0 11
14356: PUSH
14357: LD_VAR 0 3
14361: PUSH
14362: LD_INT 0
14364: PLUS
14365: ST_TO_ADDR
// while val > 0 and human_list > 0 do
14366: LD_VAR 0 11
14370: PUSH
14371: LD_INT 0
14373: GREATER
14374: PUSH
14375: LD_VAR 0 2
14379: PUSH
14380: LD_INT 0
14382: GREATER
14383: AND
14384: IFFALSE 15190
// begin temp_list = [ ] ;
14386: LD_ADDR_VAR 0 10
14390: PUSH
14391: EMPTY
14392: ST_TO_ADDR
// for i in human_list do
14393: LD_ADDR_VAR 0 9
14397: PUSH
14398: LD_VAR 0 2
14402: PUSH
14403: FOR_IN
14404: IFFALSE 14447
// if IsInUnit ( i ) = building_list [ val ] then
14406: LD_VAR 0 9
14410: PPUSH
14411: CALL_OW 310
14415: PUSH
14416: LD_VAR 0 3
14420: PUSH
14421: LD_VAR 0 11
14425: ARRAY
14426: EQUAL
14427: IFFALSE 14445
// temp_list = temp_list ^ i ;
14429: LD_ADDR_VAR 0 10
14433: PUSH
14434: LD_VAR 0 10
14438: PUSH
14439: LD_VAR 0 9
14443: ADD
14444: ST_TO_ADDR
14445: GO 14403
14447: POP
14448: POP
// human_list = temp_list ^ ( human_list diff temp_list ) ;
14449: LD_ADDR_VAR 0 2
14453: PUSH
14454: LD_VAR 0 10
14458: PUSH
14459: LD_VAR 0 2
14463: PUSH
14464: LD_VAR 0 10
14468: DIFF
14469: ADD
14470: ST_TO_ADDR
// counter = 0 ;
14471: LD_ADDR_VAR 0 15
14475: PUSH
14476: LD_INT 0
14478: ST_TO_ADDR
// temp_list = [ ] ;
14479: LD_ADDR_VAR 0 10
14483: PUSH
14484: EMPTY
14485: ST_TO_ADDR
// for i = 1 to human_list div val do
14486: LD_ADDR_VAR 0 9
14490: PUSH
14491: DOUBLE
14492: LD_INT 1
14494: DEC
14495: ST_TO_ADDR
14496: LD_VAR 0 2
14500: PUSH
14501: LD_VAR 0 11
14505: DIV
14506: PUSH
14507: FOR_TO
14508: IFFALSE 14873
// begin if i > building_capacity then
14510: LD_VAR 0 9
14514: PUSH
14515: LD_VAR 0 5
14519: GREATER
14520: IFFALSE 14524
// break ;
14522: GO 14873
// if special_un_count = 0 then
14524: LD_VAR 0 14
14528: PUSH
14529: LD_INT 0
14531: EQUAL
14532: IFFALSE 14574
// begin temp_list = temp_list ^ human_list [ 1 ] ;
14534: LD_ADDR_VAR 0 10
14538: PUSH
14539: LD_VAR 0 10
14543: PUSH
14544: LD_VAR 0 2
14548: PUSH
14549: LD_INT 1
14551: ARRAY
14552: ADD
14553: ST_TO_ADDR
// human_list = Delete ( human_list , 1 ) ;
14554: LD_ADDR_VAR 0 2
14558: PUSH
14559: LD_VAR 0 2
14563: PPUSH
14564: LD_INT 1
14566: PPUSH
14567: CALL_OW 3
14571: ST_TO_ADDR
// end else
14572: GO 14871
// if counter = special_un_count then
14574: LD_VAR 0 15
14578: PUSH
14579: LD_VAR 0 14
14583: EQUAL
14584: IFFALSE 14723
// begin temp_unit = 0 ;
14586: LD_ADDR_VAR 0 12
14590: PUSH
14591: LD_INT 0
14593: ST_TO_ADDR
// for k = 1 to human_list do
14594: LD_ADDR_VAR 0 16
14598: PUSH
14599: DOUBLE
14600: LD_INT 1
14602: DEC
14603: ST_TO_ADDR
14604: LD_VAR 0 2
14608: PUSH
14609: FOR_TO
14610: IFFALSE 14659
// if not GetClass ( human_list [ k ] ) in [ class_sniper , class_mortar , class_bazooker ] then
14612: LD_VAR 0 2
14616: PUSH
14617: LD_VAR 0 16
14621: ARRAY
14622: PPUSH
14623: CALL_OW 257
14627: PUSH
14628: LD_INT 5
14630: PUSH
14631: LD_INT 8
14633: PUSH
14634: LD_INT 9
14636: PUSH
14637: EMPTY
14638: LIST
14639: LIST
14640: LIST
14641: IN
14642: NOT
14643: IFFALSE 14657
// begin temp_unit = k ;
14645: LD_ADDR_VAR 0 12
14649: PUSH
14650: LD_VAR 0 16
14654: ST_TO_ADDR
// break ;
14655: GO 14659
// end ;
14657: GO 14609
14659: POP
14660: POP
// if temp_unit = 0 then
14661: LD_VAR 0 12
14665: PUSH
14666: LD_INT 0
14668: EQUAL
14669: IFFALSE 14679
// temp_unit = 1 ;
14671: LD_ADDR_VAR 0 12
14675: PUSH
14676: LD_INT 1
14678: ST_TO_ADDR
// temp_list = temp_list ^ human_list [ temp_unit ] ;
14679: LD_ADDR_VAR 0 10
14683: PUSH
14684: LD_VAR 0 10
14688: PUSH
14689: LD_VAR 0 2
14693: PUSH
14694: LD_VAR 0 12
14698: ARRAY
14699: ADD
14700: ST_TO_ADDR
// human_list = Delete ( human_list , temp_unit ) ;
14701: LD_ADDR_VAR 0 2
14705: PUSH
14706: LD_VAR 0 2
14710: PPUSH
14711: LD_VAR 0 12
14715: PPUSH
14716: CALL_OW 3
14720: ST_TO_ADDR
// end else
14721: GO 14871
// begin counter = counter + 1 ;
14723: LD_ADDR_VAR 0 15
14727: PUSH
14728: LD_VAR 0 15
14732: PUSH
14733: LD_INT 1
14735: PLUS
14736: ST_TO_ADDR
// temp_unit = 0 ;
14737: LD_ADDR_VAR 0 12
14741: PUSH
14742: LD_INT 0
14744: ST_TO_ADDR
// for k = 1 to human_list do
14745: LD_ADDR_VAR 0 16
14749: PUSH
14750: DOUBLE
14751: LD_INT 1
14753: DEC
14754: ST_TO_ADDR
14755: LD_VAR 0 2
14759: PUSH
14760: FOR_TO
14761: IFFALSE 14809
// if GetClass ( human_list [ k ] ) in [ class_sniper , class_mortar , class_bazooker ] then
14763: LD_VAR 0 2
14767: PUSH
14768: LD_VAR 0 16
14772: ARRAY
14773: PPUSH
14774: CALL_OW 257
14778: PUSH
14779: LD_INT 5
14781: PUSH
14782: LD_INT 8
14784: PUSH
14785: LD_INT 9
14787: PUSH
14788: EMPTY
14789: LIST
14790: LIST
14791: LIST
14792: IN
14793: IFFALSE 14807
// begin temp_unit = k ;
14795: LD_ADDR_VAR 0 12
14799: PUSH
14800: LD_VAR 0 16
14804: ST_TO_ADDR
// break ;
14805: GO 14809
// end ;
14807: GO 14760
14809: POP
14810: POP
// if temp_unit = 0 then
14811: LD_VAR 0 12
14815: PUSH
14816: LD_INT 0
14818: EQUAL
14819: IFFALSE 14829
// temp_unit = 1 ;
14821: LD_ADDR_VAR 0 12
14825: PUSH
14826: LD_INT 1
14828: ST_TO_ADDR
// temp_list = temp_list ^ human_list [ temp_unit ] ;
14829: LD_ADDR_VAR 0 10
14833: PUSH
14834: LD_VAR 0 10
14838: PUSH
14839: LD_VAR 0 2
14843: PUSH
14844: LD_VAR 0 12
14848: ARRAY
14849: ADD
14850: ST_TO_ADDR
// human_list = Delete ( human_list , temp_unit ) ;
14851: LD_ADDR_VAR 0 2
14855: PUSH
14856: LD_VAR 0 2
14860: PPUSH
14861: LD_VAR 0 12
14865: PPUSH
14866: CALL_OW 3
14870: ST_TO_ADDR
// end ; end ;
14871: GO 14507
14873: POP
14874: POP
// for i in temp_list do
14875: LD_ADDR_VAR 0 9
14879: PUSH
14880: LD_VAR 0 10
14884: PUSH
14885: FOR_IN
14886: IFFALSE 15172
// begin temp_unit = IsInUnit ( i ) ;
14888: LD_ADDR_VAR 0 12
14892: PUSH
14893: LD_VAR 0 9
14897: PPUSH
14898: CALL_OW 310
14902: ST_TO_ADDR
// if temp_unit <> building_list [ val ] then
14903: LD_VAR 0 12
14907: PUSH
14908: LD_VAR 0 3
14912: PUSH
14913: LD_VAR 0 11
14917: ARRAY
14918: NONEQUAL
14919: IFFALSE 15170
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
14921: LD_VAR 0 9
14925: PPUSH
14926: CALL_OW 310
14930: PPUSH
14931: CALL_OW 247
14935: PUSH
14936: LD_INT 2
14938: DOUBLE
14939: EQUAL
14940: IFTRUE 14944
14942: GO 14956
14944: POP
// ComExitVehicle ( i ) ; unit_building :
14945: LD_VAR 0 9
14949: PPUSH
14950: CALL_OW 121
14954: GO 15170
14956: LD_INT 3
14958: DOUBLE
14959: EQUAL
14960: IFTRUE 14964
14962: GO 14976
14964: POP
// ComExitBuilding ( i ) ; else
14965: LD_VAR 0 9
14969: PPUSH
14970: CALL_OW 122
14974: GO 15170
14976: POP
// begin if IsInArea ( i , area ) or not aggressive_pullback then
14977: LD_VAR 0 9
14981: PPUSH
14982: LD_VAR 0 13
14986: PPUSH
14987: CALL_OW 308
14991: PUSH
14992: LD_VAR 0 7
14996: NOT
14997: OR
14998: IFFALSE 15022
// ComEnterUnit ( i , building_list [ val ] ) else
15000: LD_VAR 0 9
15004: PPUSH
15005: LD_VAR 0 3
15009: PUSH
15010: LD_VAR 0 11
15014: ARRAY
15015: PPUSH
15016: CALL_OW 120
15020: GO 15063
// ComAgressiveMove ( i , GetX ( building_list [ val ] ) , GetY ( building_list [ val ] ) ) ;
15022: LD_VAR 0 9
15026: PPUSH
15027: LD_VAR 0 3
15031: PUSH
15032: LD_VAR 0 11
15036: ARRAY
15037: PPUSH
15038: CALL_OW 250
15042: PPUSH
15043: LD_VAR 0 3
15047: PUSH
15048: LD_VAR 0 11
15052: ARRAY
15053: PPUSH
15054: CALL_OW 251
15058: PPUSH
15059: CALL_OW 114
// if change_to_this_class > 0 then
15063: LD_VAR 0 4
15067: PUSH
15068: LD_INT 0
15070: GREATER
15071: IFFALSE 15170
// begin if GetClass ( i ) <> change_to_this_class and GetNation ( i ) <> nation_nature then
15073: LD_VAR 0 9
15077: PPUSH
15078: CALL_OW 257
15082: PUSH
15083: LD_VAR 0 4
15087: NONEQUAL
15088: PUSH
15089: LD_VAR 0 9
15093: PPUSH
15094: CALL_OW 248
15098: PUSH
15099: LD_INT 0
15101: NONEQUAL
15102: AND
15103: IFFALSE 15170
// 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
15105: LD_VAR 0 4
15109: PUSH
15110: LD_INT 5
15112: PUSH
15113: LD_INT 8
15115: PUSH
15116: LD_INT 9
15118: PUSH
15119: EMPTY
15120: LIST
15121: LIST
15122: LIST
15123: IN
15124: PUSH
15125: LD_VAR 0 3
15129: PUSH
15130: LD_VAR 0 11
15134: ARRAY
15135: PPUSH
15136: CALL_OW 266
15140: PUSH
15141: LD_INT 5
15143: PUSH
15144: LD_INT 35
15146: PUSH
15147: EMPTY
15148: LIST
15149: LIST
15150: IN
15151: NOT
15152: AND
15153: NOT
15154: IFFALSE 15170
// AddComChangeProfession ( i , change_to_this_class ) ;
15156: LD_VAR 0 9
15160: PPUSH
15161: LD_VAR 0 4
15165: PPUSH
15166: CALL_OW 183
// end ; end ; end ; end ;
15170: GO 14885
15172: POP
15173: POP
// val = val - 1 ;
15174: LD_ADDR_VAR 0 11
15178: PUSH
15179: LD_VAR 0 11
15183: PUSH
15184: LD_INT 1
15186: MINUS
15187: ST_TO_ADDR
// end ;
15188: GO 14366
// if human_list > 0 then
15190: LD_VAR 0 2
15194: PUSH
15195: LD_INT 0
15197: GREATER
15198: IFFALSE 15456
// if ai_building_under_construction [ base ] > 0 and help_building and not under_attack then
15200: LD_EXP 42
15204: PUSH
15205: LD_VAR 0 1
15209: ARRAY
15210: PUSH
15211: LD_INT 0
15213: GREATER
15214: PUSH
15215: LD_VAR 0 6
15219: AND
15220: PUSH
15221: LD_VAR 0 17
15225: NOT
15226: AND
15227: IFFALSE 15303
// begin for i in GetHumansOutOfUnits ( human_list ) do
15229: LD_ADDR_VAR 0 9
15233: PUSH
15234: LD_VAR 0 2
15238: PPUSH
15239: CALL 22083 0 1
15243: PUSH
15244: FOR_IN
15245: IFFALSE 15299
// SetTaskList ( i , [ [ h , 0 , 0 , ai_building_under_construction [ base ] , 0 , 0 , 0 ] ] ) ;
15247: LD_VAR 0 9
15251: PPUSH
15252: LD_STRING h
15254: PUSH
15255: LD_INT 0
15257: PUSH
15258: LD_INT 0
15260: PUSH
15261: LD_EXP 42
15265: PUSH
15266: LD_VAR 0 1
15270: ARRAY
15271: PUSH
15272: LD_INT 0
15274: PUSH
15275: LD_INT 0
15277: PUSH
15278: LD_INT 0
15280: PUSH
15281: EMPTY
15282: LIST
15283: LIST
15284: LIST
15285: LIST
15286: LIST
15287: LIST
15288: LIST
15289: PUSH
15290: EMPTY
15291: LIST
15292: PPUSH
15293: CALL_OW 446
15297: GO 15244
15299: POP
15300: POP
// end else
15301: GO 15456
// for i in GetHumansOutOfUnits ( human_list ) do
15303: LD_ADDR_VAR 0 9
15307: PUSH
15308: LD_VAR 0 2
15312: PPUSH
15313: CALL 22083 0 1
15317: PUSH
15318: FOR_IN
15319: IFFALSE 15454
// if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
15321: LD_VAR 0 9
15325: PPUSH
15326: LD_EXP 41
15330: PUSH
15331: LD_VAR 0 1
15335: ARRAY
15336: PUSH
15337: LD_INT 1
15339: ARRAY
15340: PPUSH
15341: LD_EXP 41
15345: PUSH
15346: LD_VAR 0 1
15350: ARRAY
15351: PUSH
15352: LD_INT 2
15354: ARRAY
15355: PPUSH
15356: CALL_OW 297
15360: PUSH
15361: LD_INT 4
15363: GREATER
15364: IFFALSE 15452
// if aggressive_pullback then
15366: LD_VAR 0 7
15370: IFFALSE 15413
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) else
15372: LD_VAR 0 9
15376: PPUSH
15377: LD_EXP 41
15381: PUSH
15382: LD_VAR 0 1
15386: ARRAY
15387: PUSH
15388: LD_INT 1
15390: ARRAY
15391: PPUSH
15392: LD_EXP 41
15396: PUSH
15397: LD_VAR 0 1
15401: ARRAY
15402: PUSH
15403: LD_INT 2
15405: ARRAY
15406: PPUSH
15407: CALL_OW 114
15411: GO 15452
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
15413: LD_VAR 0 9
15417: PPUSH
15418: LD_EXP 41
15422: PUSH
15423: LD_VAR 0 1
15427: ARRAY
15428: PUSH
15429: LD_INT 1
15431: ARRAY
15432: PPUSH
15433: LD_EXP 41
15437: PUSH
15438: LD_VAR 0 1
15442: ARRAY
15443: PUSH
15444: LD_INT 2
15446: ARRAY
15447: PPUSH
15448: CALL_OW 111
15452: GO 15318
15454: POP
15455: POP
// end ;
15456: LD_VAR 0 8
15460: RET
// every 0 0$1 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 , k ; var crane_being_repaired ;
15461: GO 15463
15463: DISABLE
15464: LD_INT 0
15466: PPUSH
15467: PPUSH
15468: PPUSH
15469: PPUSH
15470: PPUSH
15471: PPUSH
15472: PPUSH
15473: PPUSH
15474: PPUSH
15475: PPUSH
15476: PPUSH
15477: PPUSH
15478: PPUSH
15479: PPUSH
15480: PPUSH
// begin crane_being_repaired = false ;
15481: LD_ADDR_VAR 0 15
15485: PUSH
15486: LD_INT 0
15488: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
15489: LD_INT 35
15491: PPUSH
15492: CALL_OW 67
// for base in ai_bases do
15496: LD_ADDR_VAR 0 9
15500: PUSH
15501: LD_EXP 58
15505: PUSH
15506: FOR_IN
15507: IFFALSE 20741
// begin side = GetBaseSide ( base ) ;
15509: LD_ADDR_VAR 0 1
15513: PUSH
15514: LD_VAR 0 9
15518: PPUSH
15519: CALL 11268 0 1
15523: ST_TO_ADDR
// engineers_list = ai_engineers [ base ] diff ai_heal_these_humans [ base ] ;
15524: LD_ADDR_VAR 0 3
15528: PUSH
15529: LD_EXP 30
15533: PUSH
15534: LD_VAR 0 9
15538: ARRAY
15539: PUSH
15540: LD_EXP 43
15544: PUSH
15545: LD_VAR 0 9
15549: ARRAY
15550: DIFF
15551: ST_TO_ADDR
// apemen_engineers_list = ai_apemen_engineers [ base ] diff ai_heal_these_humans [ base ] ;
15552: LD_ADDR_VAR 0 10
15556: PUSH
15557: LD_EXP 62
15561: PUSH
15562: LD_VAR 0 9
15566: ARRAY
15567: PUSH
15568: LD_EXP 43
15572: PUSH
15573: LD_VAR 0 9
15577: ARRAY
15578: DIFF
15579: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
15580: LD_ADDR_VAR 0 4
15584: PUSH
15585: LD_EXP 43
15589: PUSH
15590: LD_VAR 0 9
15594: ARRAY
15595: ST_TO_ADDR
// humans_list = engineers_list ^ apemen_engineers_list ;
15596: LD_ADDR_VAR 0 11
15600: PUSH
15601: LD_VAR 0 3
15605: PUSH
15606: LD_VAR 0 10
15610: ADD
15611: ST_TO_ADDR
// i = 1 ;
15612: LD_ADDR_VAR 0 2
15616: PUSH
15617: LD_INT 1
15619: ST_TO_ADDR
// while i <= humans_list do
15620: LD_VAR 0 2
15624: PUSH
15625: LD_VAR 0 11
15629: LESSEQUAL
15630: IFFALSE 15769
// begin if GetLives ( humans_list [ i ] ) <= 700 then
15632: LD_VAR 0 11
15636: PUSH
15637: LD_VAR 0 2
15641: ARRAY
15642: PPUSH
15643: CALL_OW 256
15647: PUSH
15648: LD_INT 700
15650: LESSEQUAL
15651: IFFALSE 15753
// begin temp_list = temp_list ^ humans_list [ i ] ;
15653: LD_ADDR_VAR 0 4
15657: PUSH
15658: LD_VAR 0 4
15662: PUSH
15663: LD_VAR 0 11
15667: PUSH
15668: LD_VAR 0 2
15672: ARRAY
15673: ADD
15674: ST_TO_ADDR
// engineers_list = engineers_list diff humans_list [ i ] ;
15675: LD_ADDR_VAR 0 3
15679: PUSH
15680: LD_VAR 0 3
15684: PUSH
15685: LD_VAR 0 11
15689: PUSH
15690: LD_VAR 0 2
15694: ARRAY
15695: DIFF
15696: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff humans_list [ i ] ;
15697: LD_ADDR_VAR 0 10
15701: PUSH
15702: LD_VAR 0 10
15706: PUSH
15707: LD_VAR 0 11
15711: PUSH
15712: LD_VAR 0 2
15716: ARRAY
15717: DIFF
15718: ST_TO_ADDR
// humans_list = Delete ( humans_list , i ) ;
15719: LD_ADDR_VAR 0 11
15723: PUSH
15724: LD_VAR 0 11
15728: PPUSH
15729: LD_VAR 0 2
15733: PPUSH
15734: CALL_OW 3
15738: ST_TO_ADDR
// i = i - 1 ;
15739: LD_ADDR_VAR 0 2
15743: PUSH
15744: LD_VAR 0 2
15748: PUSH
15749: LD_INT 1
15751: MINUS
15752: ST_TO_ADDR
// end ; i = i + 1 ;
15753: LD_ADDR_VAR 0 2
15757: PUSH
15758: LD_VAR 0 2
15762: PUSH
15763: LD_INT 1
15765: PLUS
15766: ST_TO_ADDR
// end ;
15767: GO 15620
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
15769: LD_ADDR_EXP 43
15773: PUSH
15774: LD_EXP 43
15778: PPUSH
15779: LD_VAR 0 9
15783: PPUSH
15784: LD_VAR 0 4
15788: PPUSH
15789: CALL_OW 1
15793: ST_TO_ADDR
// crane_usable = false ;
15794: LD_ADDR_VAR 0 12
15798: PUSH
15799: LD_INT 0
15801: ST_TO_ADDR
// if ai_crane [ base ] > 0 then
15802: LD_EXP 70
15806: PUSH
15807: LD_VAR 0 9
15811: ARRAY
15812: PUSH
15813: LD_INT 0
15815: GREATER
15816: IFFALSE 15988
// if GetLives ( ai_crane [ base ] ) <= 500 or ( crane_being_repaired and GetLives ( ai_crane [ base ] ) < 1000 ) then
15818: LD_EXP 70
15822: PUSH
15823: LD_VAR 0 9
15827: ARRAY
15828: PPUSH
15829: CALL_OW 256
15833: PUSH
15834: LD_INT 500
15836: LESSEQUAL
15837: PUSH
15838: LD_VAR 0 15
15842: PUSH
15843: LD_EXP 70
15847: PUSH
15848: LD_VAR 0 9
15852: ARRAY
15853: PPUSH
15854: CALL_OW 256
15858: PUSH
15859: LD_INT 1000
15861: LESS
15862: AND
15863: OR
15864: IFFALSE 15972
// begin crane_being_repaired = true ;
15866: LD_ADDR_VAR 0 15
15870: PUSH
15871: LD_INT 1
15873: ST_TO_ADDR
// if GetDistUnitXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 6 then
15874: LD_EXP 70
15878: PUSH
15879: LD_VAR 0 9
15883: ARRAY
15884: PPUSH
15885: LD_EXP 41
15889: PUSH
15890: LD_VAR 0 9
15894: ARRAY
15895: PUSH
15896: LD_INT 1
15898: ARRAY
15899: PPUSH
15900: LD_EXP 41
15904: PUSH
15905: LD_VAR 0 9
15909: ARRAY
15910: PUSH
15911: LD_INT 2
15913: ARRAY
15914: PPUSH
15915: CALL_OW 297
15919: PUSH
15920: LD_INT 6
15922: GREATER
15923: IFFALSE 15970
// ComMoveXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
15925: LD_EXP 70
15929: PUSH
15930: LD_VAR 0 9
15934: ARRAY
15935: PPUSH
15936: LD_EXP 41
15940: PUSH
15941: LD_VAR 0 9
15945: ARRAY
15946: PUSH
15947: LD_INT 1
15949: ARRAY
15950: PPUSH
15951: LD_EXP 41
15955: PUSH
15956: LD_VAR 0 9
15960: ARRAY
15961: PUSH
15962: LD_INT 2
15964: ARRAY
15965: PPUSH
15966: CALL_OW 111
// end else
15970: GO 15988
// begin crane_usable = true ;
15972: LD_ADDR_VAR 0 12
15976: PUSH
15977: LD_INT 1
15979: ST_TO_ADDR
// crane_being_repaired = false ;
15980: LD_ADDR_VAR 0 15
15984: PUSH
15985: LD_INT 0
15987: ST_TO_ADDR
// end ; if engineers_list = 0 and apemen_engineers_list = 0 and not crane_usable then
15988: LD_VAR 0 3
15992: PUSH
15993: LD_INT 0
15995: EQUAL
15996: PUSH
15997: LD_VAR 0 10
16001: PUSH
16002: LD_INT 0
16004: EQUAL
16005: AND
16006: PUSH
16007: LD_VAR 0 12
16011: NOT
16012: AND
16013: IFFALSE 16017
// continue ;
16015: GO 15506
// temp_list_2 = UnitFilter ( engineers_list , [ f_class , class_engineer ] ) ;
16017: LD_ADDR_VAR 0 8
16021: PUSH
16022: LD_VAR 0 3
16026: PPUSH
16027: LD_INT 25
16029: PUSH
16030: LD_INT 2
16032: PUSH
16033: EMPTY
16034: LIST
16035: LIST
16036: PPUSH
16037: CALL_OW 72
16041: ST_TO_ADDR
// if ai_captured_buildings [ base ] > 0 and temp_list_2 > 0 then
16042: LD_EXP 78
16046: PUSH
16047: LD_VAR 0 9
16051: ARRAY
16052: PUSH
16053: LD_INT 0
16055: GREATER
16056: PUSH
16057: LD_VAR 0 8
16061: PUSH
16062: LD_INT 0
16064: GREATER
16065: AND
16066: IFFALSE 16337
// begin temp_list = [ ] ;
16068: LD_ADDR_VAR 0 4
16072: PUSH
16073: EMPTY
16074: ST_TO_ADDR
// for i in ai_captured_buildings [ base ] do
16075: LD_ADDR_VAR 0 2
16079: PUSH
16080: LD_EXP 78
16084: PUSH
16085: LD_VAR 0 9
16089: ARRAY
16090: PUSH
16091: FOR_IN
16092: IFFALSE 16148
// if GetBType ( i ) in [ b_depot , b_warehouse ] then
16094: LD_VAR 0 2
16098: PPUSH
16099: CALL_OW 266
16103: PUSH
16104: LD_INT 0
16106: PUSH
16107: LD_INT 1
16109: PUSH
16110: EMPTY
16111: LIST
16112: LIST
16113: IN
16114: IFFALSE 16132
// temp_list = temp_list ^ 1 else
16116: LD_ADDR_VAR 0 4
16120: PUSH
16121: LD_VAR 0 4
16125: PUSH
16126: LD_INT 1
16128: ADD
16129: ST_TO_ADDR
16130: GO 16146
// temp_list = temp_list ^ 0 ;
16132: LD_ADDR_VAR 0 4
16136: PUSH
16137: LD_VAR 0 4
16141: PUSH
16142: LD_INT 0
16144: ADD
16145: ST_TO_ADDR
16146: GO 16091
16148: POP
16149: POP
// temp_list = SortListByListDesc ( ai_captured_buildings [ base ] , temp_list ) ;
16150: LD_ADDR_VAR 0 4
16154: PUSH
16155: LD_EXP 78
16159: PUSH
16160: LD_VAR 0 9
16164: ARRAY
16165: PPUSH
16166: LD_VAR 0 4
16170: PPUSH
16171: CALL_OW 77
16175: ST_TO_ADDR
// temp_list_2 = GetHumansOutOfUnits ( temp_list_2 ) ;
16176: LD_ADDR_VAR 0 8
16180: PUSH
16181: LD_VAR 0 8
16185: PPUSH
16186: CALL 22083 0 1
16190: ST_TO_ADDR
// if temp_list_2 > 0 then
16191: LD_VAR 0 8
16195: PUSH
16196: LD_INT 0
16198: GREATER
16199: IFFALSE 16315
// begin temp_list_2 = SortListByListDesc ( temp_list_2 , temp_list_2 ) ;
16201: LD_ADDR_VAR 0 8
16205: PUSH
16206: LD_VAR 0 8
16210: PPUSH
16211: LD_VAR 0 8
16215: PPUSH
16216: CALL_OW 77
16220: ST_TO_ADDR
// SetTaskList ( temp_list_2 [ 1 ] , [ [ e , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) , temp_list [ 1 ] , 0 , 0 , 0 ] ] ) ;
16221: LD_VAR 0 8
16225: PUSH
16226: LD_INT 1
16228: ARRAY
16229: PPUSH
16230: LD_STRING e
16232: PUSH
16233: LD_VAR 0 4
16237: PUSH
16238: LD_INT 1
16240: ARRAY
16241: PPUSH
16242: CALL_OW 250
16246: PUSH
16247: LD_VAR 0 4
16251: PUSH
16252: LD_INT 1
16254: ARRAY
16255: PPUSH
16256: CALL_OW 251
16260: PUSH
16261: LD_VAR 0 4
16265: PUSH
16266: LD_INT 1
16268: ARRAY
16269: PUSH
16270: LD_INT 0
16272: PUSH
16273: LD_INT 0
16275: PUSH
16276: LD_INT 0
16278: PUSH
16279: EMPTY
16280: LIST
16281: LIST
16282: LIST
16283: LIST
16284: LIST
16285: LIST
16286: LIST
16287: PUSH
16288: EMPTY
16289: LIST
16290: PPUSH
16291: CALL_OW 446
// engineers_list = engineers_list diff temp_list_2 [ 1 ] ;
16295: LD_ADDR_VAR 0 3
16299: PUSH
16300: LD_VAR 0 3
16304: PUSH
16305: LD_VAR 0 8
16309: PUSH
16310: LD_INT 1
16312: ARRAY
16313: DIFF
16314: ST_TO_ADDR
// end ; if engineers_list = 0 and apemen_engineers_list = 0 then
16315: LD_VAR 0 3
16319: PUSH
16320: LD_INT 0
16322: EQUAL
16323: PUSH
16324: LD_VAR 0 10
16328: PUSH
16329: LD_INT 0
16331: EQUAL
16332: AND
16333: IFFALSE 16337
// continue ;
16335: GO 15506
// end ; i = 1 ;
16337: LD_ADDR_VAR 0 2
16341: PUSH
16342: LD_INT 1
16344: ST_TO_ADDR
// buildings_list = [ ] ;
16345: LD_ADDR_VAR 0 5
16349: PUSH
16350: EMPTY
16351: ST_TO_ADDR
// repeat case i of 1 :
16352: LD_VAR 0 2
16356: PUSH
16357: LD_INT 1
16359: DOUBLE
16360: EQUAL
16361: IFTRUE 16365
16363: GO 16402
16365: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] , [ f_not , [ f_ok ] ] ) ; 2 :
16366: LD_ADDR_VAR 0 5
16370: PUSH
16371: LD_EXP 44
16375: PUSH
16376: LD_VAR 0 9
16380: ARRAY
16381: PPUSH
16382: LD_INT 3
16384: PUSH
16385: LD_INT 50
16387: PUSH
16388: EMPTY
16389: LIST
16390: PUSH
16391: EMPTY
16392: LIST
16393: LIST
16394: PPUSH
16395: CALL_OW 72
16399: ST_TO_ADDR
16400: GO 16452
16402: LD_INT 2
16404: DOUBLE
16405: EQUAL
16406: IFTRUE 16410
16408: GO 16451
16410: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] , [ f_not , [ f_lives , 1000 ] ] ) ; end ;
16411: LD_ADDR_VAR 0 5
16415: PUSH
16416: LD_EXP 44
16420: PUSH
16421: LD_VAR 0 9
16425: ARRAY
16426: PPUSH
16427: LD_INT 3
16429: PUSH
16430: LD_INT 24
16432: PUSH
16433: LD_INT 1000
16435: PUSH
16436: EMPTY
16437: LIST
16438: LIST
16439: PUSH
16440: EMPTY
16441: LIST
16442: LIST
16443: PPUSH
16444: CALL_OW 72
16448: ST_TO_ADDR
16449: GO 16452
16451: POP
// i = i + 1 ;
16452: LD_ADDR_VAR 0 2
16456: PUSH
16457: LD_VAR 0 2
16461: PUSH
16462: LD_INT 1
16464: PLUS
16465: ST_TO_ADDR
// until buildings_list > 0 or i > 2 ;
16466: LD_VAR 0 5
16470: PUSH
16471: LD_INT 0
16473: GREATER
16474: PUSH
16475: LD_VAR 0 2
16479: PUSH
16480: LD_INT 2
16482: GREATER
16483: OR
16484: IFFALSE 16352
// if buildings_list > 0 then
16486: LD_VAR 0 5
16490: PUSH
16491: LD_INT 0
16493: GREATER
16494: IFFALSE 16717
// begin humans_list = engineers_list ^ apemen_engineers_list ;
16496: LD_ADDR_VAR 0 11
16500: PUSH
16501: LD_VAR 0 3
16505: PUSH
16506: LD_VAR 0 10
16510: ADD
16511: ST_TO_ADDR
// humans_list = GetHumansOutOfUnits ( humans_list ) ;
16512: LD_ADDR_VAR 0 11
16516: PUSH
16517: LD_VAR 0 11
16521: PPUSH
16522: CALL 22083 0 1
16526: ST_TO_ADDR
// if crane_usable then
16527: LD_VAR 0 12
16531: IFFALSE 16563
// begin humans_list = humans_list ^ ai_crane [ base ] ;
16533: LD_ADDR_VAR 0 11
16537: PUSH
16538: LD_VAR 0 11
16542: PUSH
16543: LD_EXP 70
16547: PUSH
16548: LD_VAR 0 9
16552: ARRAY
16553: ADD
16554: ST_TO_ADDR
// crane_usable = false ;
16555: LD_ADDR_VAR 0 12
16559: PUSH
16560: LD_INT 0
16562: ST_TO_ADDR
// end ; repeat i = 1 ;
16563: LD_ADDR_VAR 0 2
16567: PUSH
16568: LD_INT 1
16570: ST_TO_ADDR
// while i <= buildings_list do
16571: LD_VAR 0 2
16575: PUSH
16576: LD_VAR 0 5
16580: LESSEQUAL
16581: IFFALSE 16705
// begin if humans_list = 0 then
16583: LD_VAR 0 11
16587: PUSH
16588: LD_INT 0
16590: EQUAL
16591: IFFALSE 16595
// break ;
16593: GO 16705
// temp_unit = NearestUnitToUnit ( humans_list , buildings_list [ i ] ) ;
16595: LD_ADDR_VAR 0 6
16599: PUSH
16600: LD_VAR 0 11
16604: PPUSH
16605: LD_VAR 0 5
16609: PUSH
16610: LD_VAR 0 2
16614: ARRAY
16615: PPUSH
16616: CALL_OW 74
16620: ST_TO_ADDR
// ComRepairBuilding ( temp_unit , buildings_list [ i ] ) ;
16621: LD_VAR 0 6
16625: PPUSH
16626: LD_VAR 0 5
16630: PUSH
16631: LD_VAR 0 2
16635: ARRAY
16636: PPUSH
16637: CALL_OW 130
// humans_list = humans_list diff temp_unit ;
16641: LD_ADDR_VAR 0 11
16645: PUSH
16646: LD_VAR 0 11
16650: PUSH
16651: LD_VAR 0 6
16655: DIFF
16656: ST_TO_ADDR
// engineers_list = engineers_list diff temp_unit ;
16657: LD_ADDR_VAR 0 3
16661: PUSH
16662: LD_VAR 0 3
16666: PUSH
16667: LD_VAR 0 6
16671: DIFF
16672: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff temp_unit ;
16673: LD_ADDR_VAR 0 10
16677: PUSH
16678: LD_VAR 0 10
16682: PUSH
16683: LD_VAR 0 6
16687: DIFF
16688: ST_TO_ADDR
// i = i + 1 ;
16689: LD_ADDR_VAR 0 2
16693: PUSH
16694: LD_VAR 0 2
16698: PUSH
16699: LD_INT 1
16701: PLUS
16702: ST_TO_ADDR
// end ;
16703: GO 16571
// until humans_list = 0 ;
16705: LD_VAR 0 11
16709: PUSH
16710: LD_INT 0
16712: EQUAL
16713: IFFALSE 16563
// continue ;
16715: GO 15506
// end ; if not BaseUnderAttack ( base , - 1 ) then
16717: LD_VAR 0 9
16721: PPUSH
16722: LD_INT 1
16724: NEG
16725: PPUSH
16726: CALL 22188 0 2
16730: NOT
16731: IFFALSE 20565
// begin if ai_building_under_construction [ base ] > 0 then
16733: LD_EXP 42
16737: PUSH
16738: LD_VAR 0 9
16742: ARRAY
16743: PUSH
16744: LD_INT 0
16746: GREATER
16747: IFFALSE 16898
// if BuildingStatus ( ai_building_under_construction [ base ] ) = bs_build then
16749: LD_EXP 42
16753: PUSH
16754: LD_VAR 0 9
16758: ARRAY
16759: PPUSH
16760: CALL_OW 461
16764: PUSH
16765: LD_INT 1
16767: EQUAL
16768: IFFALSE 16860
// begin temp_list_2 = GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) ;
16770: LD_ADDR_VAR 0 8
16774: PUSH
16775: LD_VAR 0 3
16779: PUSH
16780: LD_VAR 0 10
16784: ADD
16785: PPUSH
16786: CALL 22083 0 1
16790: ST_TO_ADDR
// if crane_usable then
16791: LD_VAR 0 12
16795: IFFALSE 16819
// temp_list_2 = temp_list_2 ^ ai_crane [ base ] ;
16797: LD_ADDR_VAR 0 8
16801: PUSH
16802: LD_VAR 0 8
16806: PUSH
16807: LD_EXP 70
16811: PUSH
16812: LD_VAR 0 9
16816: ARRAY
16817: ADD
16818: ST_TO_ADDR
// for i in temp_list_2 do
16819: LD_ADDR_VAR 0 2
16823: PUSH
16824: LD_VAR 0 8
16828: PUSH
16829: FOR_IN
16830: IFFALSE 16854
// ComRepairBuilding ( i , ai_building_under_construction [ base ] ) ;
16832: LD_VAR 0 2
16836: PPUSH
16837: LD_EXP 42
16841: PUSH
16842: LD_VAR 0 9
16846: ARRAY
16847: PPUSH
16848: CALL_OW 130
16852: GO 16829
16854: POP
16855: POP
// continue ;
16856: GO 15506
// end else
16858: GO 16898
// begin ComCancel ( ai_building_under_construction [ base ] ) ;
16860: LD_EXP 42
16864: PUSH
16865: LD_VAR 0 9
16869: ARRAY
16870: PPUSH
16871: CALL_OW 127
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
16875: LD_ADDR_EXP 42
16879: PUSH
16880: LD_EXP 42
16884: PPUSH
16885: LD_VAR 0 9
16889: PPUSH
16890: LD_INT 0
16892: PPUSH
16893: CALL_OW 1
16897: 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
16898: LD_EXP 44
16902: PUSH
16903: LD_VAR 0 9
16907: ARRAY
16908: PUSH
16909: LD_EXP 68
16913: PUSH
16914: LD_VAR 0 9
16918: ARRAY
16919: MINUS
16920: PUSH
16921: LD_EXP 38
16925: PUSH
16926: LD_VAR 0 9
16930: ARRAY
16931: LESS
16932: PUSH
16933: LD_EXP 46
16937: PUSH
16938: LD_VAR 0 9
16942: ARRAY
16943: PUSH
16944: LD_INT 0
16946: GREATER
16947: OR
16948: IFFALSE 20451
// begin if ai_upcoming_building_data [ base ] = 0 then
16950: LD_EXP 46
16954: PUSH
16955: LD_VAR 0 9
16959: ARRAY
16960: PUSH
16961: LD_INT 0
16963: EQUAL
16964: IFFALSE 17373
// begin temp_list = [ ] ;
16966: LD_ADDR_VAR 0 4
16970: PUSH
16971: EMPTY
16972: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
16973: LD_ADDR_VAR 0 2
16977: PUSH
16978: LD_EXP 38
16982: PUSH
16983: LD_VAR 0 9
16987: ARRAY
16988: PUSH
16989: FOR_IN
16990: IFFALSE 17040
// if GetBType ( HexInfo ( i [ 1 ] , i [ 2 ] ) ) = - 1 then
16992: LD_VAR 0 2
16996: PUSH
16997: LD_INT 1
16999: ARRAY
17000: PPUSH
17001: LD_VAR 0 2
17005: PUSH
17006: LD_INT 2
17008: ARRAY
17009: PPUSH
17010: CALL_OW 428
17014: PPUSH
17015: CALL_OW 266
17019: PUSH
17020: LD_INT 1
17022: NEG
17023: EQUAL
17024: IFFALSE 17038
// begin temp_list = i ;
17026: LD_ADDR_VAR 0 4
17030: PUSH
17031: LD_VAR 0 2
17035: ST_TO_ADDR
// break ;
17036: GO 17040
// end ;
17038: GO 16989
17040: POP
17041: POP
// if temp_list > 0 then
17042: LD_VAR 0 4
17046: PUSH
17047: LD_INT 0
17049: GREATER
17050: IFFALSE 17373
// begin if temp_list [ 4 ] = b_bunker and GetBaseNation ( base ) in [ nation_american , nation_russian ] then
17052: LD_VAR 0 4
17056: PUSH
17057: LD_INT 4
17059: ARRAY
17060: PUSH
17061: LD_INT 32
17063: EQUAL
17064: PUSH
17065: LD_VAR 0 9
17069: PPUSH
17070: CALL 11345 0 1
17074: PUSH
17075: LD_INT 1
17077: PUSH
17078: LD_INT 3
17080: PUSH
17081: EMPTY
17082: LIST
17083: LIST
17084: IN
17085: AND
17086: IFFALSE 17348
// begin k = 0 ;
17088: LD_ADDR_VAR 0 14
17092: PUSH
17093: LD_INT 0
17095: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
17096: LD_ADDR_VAR 0 2
17100: PUSH
17101: LD_EXP 38
17105: PUSH
17106: LD_VAR 0 9
17110: ARRAY
17111: PUSH
17112: FOR_IN
17113: IFFALSE 17164
// if i [ 4 ] in [ b_breastwork , b_bunker , b_armoury , b_barracks , b_fort ] then
17115: LD_VAR 0 2
17119: PUSH
17120: LD_INT 4
17122: ARRAY
17123: PUSH
17124: LD_INT 31
17126: PUSH
17127: LD_INT 32
17129: PUSH
17130: LD_INT 4
17132: PUSH
17133: LD_INT 5
17135: PUSH
17136: LD_INT 35
17138: PUSH
17139: EMPTY
17140: LIST
17141: LIST
17142: LIST
17143: LIST
17144: LIST
17145: IN
17146: IFFALSE 17162
// k = k + 1 ;
17148: LD_ADDR_VAR 0 14
17152: PUSH
17153: LD_VAR 0 14
17157: PUSH
17158: LD_INT 1
17160: PLUS
17161: ST_TO_ADDR
17162: GO 17112
17164: POP
17165: POP
// if k > ai_soldiers [ base ] then
17166: LD_VAR 0 14
17170: PUSH
17171: LD_EXP 29
17175: PUSH
17176: LD_VAR 0 9
17180: ARRAY
17181: GREATER
17182: IFFALSE 17348
// begin for i = 1 to ai_buildings_locations [ base ] do
17184: LD_ADDR_VAR 0 2
17188: PUSH
17189: DOUBLE
17190: LD_INT 1
17192: DEC
17193: ST_TO_ADDR
17194: LD_EXP 38
17198: PUSH
17199: LD_VAR 0 9
17203: ARRAY
17204: PUSH
17205: FOR_TO
17206: IFFALSE 17325
// if ai_buildings_locations [ base ] [ i ] = temp_list then
17208: LD_EXP 38
17212: PUSH
17213: LD_VAR 0 9
17217: ARRAY
17218: PUSH
17219: LD_VAR 0 2
17223: ARRAY
17224: PUSH
17225: LD_VAR 0 4
17229: EQUAL
17230: IFFALSE 17323
// begin temp_list_2 = Replace ( ai_buildings_locations [ base ] [ i ] , 4 , b_turret ) ;
17232: LD_ADDR_VAR 0 8
17236: PUSH
17237: LD_EXP 38
17241: PUSH
17242: LD_VAR 0 9
17246: ARRAY
17247: PUSH
17248: LD_VAR 0 2
17252: ARRAY
17253: PPUSH
17254: LD_INT 4
17256: PPUSH
17257: LD_INT 33
17259: PPUSH
17260: CALL_OW 1
17264: ST_TO_ADDR
// temp_list_2 = Replace ( ai_buildings_locations [ base ] , i , temp_list_2 ) ;
17265: LD_ADDR_VAR 0 8
17269: PUSH
17270: LD_EXP 38
17274: PUSH
17275: LD_VAR 0 9
17279: ARRAY
17280: PPUSH
17281: LD_VAR 0 2
17285: PPUSH
17286: LD_VAR 0 8
17290: PPUSH
17291: CALL_OW 1
17295: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list_2 ) ;
17296: LD_ADDR_EXP 38
17300: PUSH
17301: LD_EXP 38
17305: PPUSH
17306: LD_VAR 0 9
17310: PPUSH
17311: LD_VAR 0 8
17315: PPUSH
17316: CALL_OW 1
17320: ST_TO_ADDR
// break ;
17321: GO 17325
// end ;
17323: GO 17205
17325: POP
17326: POP
// temp_list = Replace ( temp_list , 4 , b_turret ) ;
17327: LD_ADDR_VAR 0 4
17331: PUSH
17332: LD_VAR 0 4
17336: PPUSH
17337: LD_INT 4
17339: PPUSH
17340: LD_INT 33
17342: PPUSH
17343: CALL_OW 1
17347: ST_TO_ADDR
// end ; end ; ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , temp_list ) ;
17348: LD_ADDR_EXP 46
17352: PUSH
17353: LD_EXP 46
17357: PPUSH
17358: LD_VAR 0 9
17362: PPUSH
17363: LD_VAR 0 4
17367: PPUSH
17368: CALL_OW 1
17372: ST_TO_ADDR
// end ; end ; if ai_upcoming_building_data [ base ] > 0 then
17373: LD_EXP 46
17377: PUSH
17378: LD_VAR 0 9
17382: ARRAY
17383: PUSH
17384: LD_INT 0
17386: GREATER
17387: IFFALSE 20451
// begin if ai_building_constructor [ base ] = 0 then
17389: LD_EXP 45
17393: PUSH
17394: LD_VAR 0 9
17398: ARRAY
17399: PUSH
17400: LD_INT 0
17402: EQUAL
17403: IFFALSE 17557
// begin temp_list_2 = UnitFilter ( ai_engineers [ base ] , [ f_class , class_engineer ] ) ;
17405: LD_ADDR_VAR 0 8
17409: PUSH
17410: LD_EXP 30
17414: PUSH
17415: LD_VAR 0 9
17419: ARRAY
17420: PPUSH
17421: LD_INT 25
17423: PUSH
17424: LD_INT 2
17426: PUSH
17427: EMPTY
17428: LIST
17429: LIST
17430: PPUSH
17431: CALL_OW 72
17435: ST_TO_ADDR
// if crane_usable then
17436: LD_VAR 0 12
17440: IFFALSE 17464
// temp_list_2 = temp_list_2 ^ ai_crane [ base ] ;
17442: LD_ADDR_VAR 0 8
17446: PUSH
17447: LD_VAR 0 8
17451: PUSH
17452: LD_EXP 70
17456: PUSH
17457: LD_VAR 0 9
17461: ARRAY
17462: ADD
17463: ST_TO_ADDR
// if temp_list_2 > 0 then
17464: LD_VAR 0 8
17468: PUSH
17469: LD_INT 0
17471: GREATER
17472: IFFALSE 17557
// begin temp_list = [ ] ;
17474: LD_ADDR_VAR 0 4
17478: PUSH
17479: EMPTY
17480: ST_TO_ADDR
// for i in temp_list_2 do
17481: LD_ADDR_VAR 0 2
17485: PUSH
17486: LD_VAR 0 8
17490: PUSH
17491: FOR_IN
17492: IFFALSE 17520
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
17494: LD_ADDR_VAR 0 4
17498: PUSH
17499: LD_VAR 0 4
17503: PUSH
17504: LD_VAR 0 2
17508: PPUSH
17509: LD_INT 2
17511: PPUSH
17512: CALL_OW 259
17516: ADD
17517: ST_TO_ADDR
17518: GO 17491
17520: POP
17521: POP
// ai_building_constructor = Replace ( ai_building_constructor , base , BestFromListByList ( temp_list_2 , temp_list ) ) ;
17522: LD_ADDR_EXP 45
17526: PUSH
17527: LD_EXP 45
17531: PPUSH
17532: LD_VAR 0 9
17536: PPUSH
17537: LD_VAR 0 8
17541: PPUSH
17542: LD_VAR 0 4
17546: PPUSH
17547: CALL_OW 79
17551: PPUSH
17552: CALL_OW 1
17556: 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
17557: LD_EXP 45
17561: PUSH
17562: LD_VAR 0 9
17566: ARRAY
17567: PUSH
17568: LD_INT 0
17570: GREATER
17571: PUSH
17572: LD_EXP 45
17576: PUSH
17577: LD_VAR 0 9
17581: ARRAY
17582: PUSH
17583: LD_VAR 0 3
17587: IN
17588: PUSH
17589: LD_EXP 45
17593: PUSH
17594: LD_VAR 0 9
17598: ARRAY
17599: PUSH
17600: LD_EXP 70
17604: PUSH
17605: LD_VAR 0 9
17609: ARRAY
17610: EQUAL
17611: PUSH
17612: LD_VAR 0 12
17616: AND
17617: OR
17618: AND
17619: IFFALSE 20451
// begin engineers_list = engineers_list diff ai_building_constructor [ base ] ;
17621: LD_ADDR_VAR 0 3
17625: PUSH
17626: LD_VAR 0 3
17630: PUSH
17631: LD_EXP 45
17635: PUSH
17636: LD_VAR 0 9
17640: ARRAY
17641: DIFF
17642: ST_TO_ADDR
// case GetType ( IsInUnit ( ai_building_constructor [ base ] ) ) of unit_building :
17643: LD_EXP 45
17647: PUSH
17648: LD_VAR 0 9
17652: ARRAY
17653: PPUSH
17654: CALL_OW 310
17658: PPUSH
17659: CALL_OW 247
17663: PUSH
17664: LD_INT 3
17666: DOUBLE
17667: EQUAL
17668: IFTRUE 17672
17670: GO 17690
17672: POP
// ComExitBuilding ( ai_building_constructor [ base ] ) ; unit_vehicle :
17673: LD_EXP 45
17677: PUSH
17678: LD_VAR 0 9
17682: ARRAY
17683: PPUSH
17684: CALL_OW 122
17688: GO 20451
17690: LD_INT 2
17692: DOUBLE
17693: EQUAL
17694: IFTRUE 17698
17696: GO 17716
17698: POP
// ComExitVehicle ( ai_building_constructor [ base ] ) ; else
17699: LD_EXP 45
17703: PUSH
17704: LD_VAR 0 9
17708: ARRAY
17709: PPUSH
17710: CALL_OW 121
17714: GO 20451
17716: POP
// case GetBType ( HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ) of - 1 :
17717: LD_EXP 46
17721: PUSH
17722: LD_VAR 0 9
17726: ARRAY
17727: PUSH
17728: LD_INT 1
17730: ARRAY
17731: PPUSH
17732: LD_EXP 46
17736: PUSH
17737: LD_VAR 0 9
17741: ARRAY
17742: PUSH
17743: LD_INT 2
17745: ARRAY
17746: PPUSH
17747: CALL_OW 428
17751: PPUSH
17752: CALL_OW 266
17756: PUSH
17757: LD_INT 1
17759: NEG
17760: DOUBLE
17761: EQUAL
17762: IFTRUE 17766
17764: GO 19956
17766: POP
// begin case ai_upcoming_building_data [ base ] [ 4 ] of b_warehouse :
17767: LD_EXP 46
17771: PUSH
17772: LD_VAR 0 9
17776: ARRAY
17777: PUSH
17778: LD_INT 4
17780: ARRAY
17781: PUSH
17782: LD_INT 1
17784: DOUBLE
17785: EQUAL
17786: IFTRUE 17790
17788: GO 17801
17790: POP
// i = b_depot ; b_factory :
17791: LD_ADDR_VAR 0 2
17795: PUSH
17796: LD_INT 0
17798: ST_TO_ADDR
17799: GO 17885
17801: LD_INT 3
17803: DOUBLE
17804: EQUAL
17805: IFTRUE 17809
17807: GO 17820
17809: POP
// i = b_workshop ; b_lab_half , b_lab_full :
17810: LD_ADDR_VAR 0 2
17814: PUSH
17815: LD_INT 2
17817: ST_TO_ADDR
17818: GO 17885
17820: LD_INT 7
17822: DOUBLE
17823: EQUAL
17824: IFTRUE 17834
17826: LD_INT 8
17828: DOUBLE
17829: EQUAL
17830: IFTRUE 17834
17832: GO 17845
17834: POP
// i = b_lab ; b_barracks :
17835: LD_ADDR_VAR 0 2
17839: PUSH
17840: LD_INT 6
17842: ST_TO_ADDR
17843: GO 17885
17845: LD_INT 5
17847: DOUBLE
17848: EQUAL
17849: IFTRUE 17853
17851: GO 17864
17853: POP
// i = b_armoury ; else
17854: LD_ADDR_VAR 0 2
17858: PUSH
17859: LD_INT 4
17861: ST_TO_ADDR
17862: GO 17885
17864: POP
// i = ai_upcoming_building_data [ base ] [ 4 ] ; end ;
17865: LD_ADDR_VAR 0 2
17869: PUSH
17870: LD_EXP 46
17874: PUSH
17875: LD_VAR 0 9
17879: ARRAY
17880: PUSH
17881: LD_INT 4
17883: ARRAY
17884: ST_TO_ADDR
// case i of b_depot :
17885: LD_VAR 0 2
17889: PUSH
17890: LD_INT 0
17892: DOUBLE
17893: EQUAL
17894: IFTRUE 17898
17896: GO 17975
17898: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
17899: LD_EXP 45
17903: PUSH
17904: LD_VAR 0 9
17908: ARRAY
17909: PPUSH
17910: CALL_OW 248
17914: PUSH
17915: LD_INT 3
17917: DOUBLE
17918: EQUAL
17919: IFTRUE 17923
17921: GO 17934
17923: POP
// b_value = 64 ; nation_american :
17924: LD_ADDR_VAR 0 13
17928: PUSH
17929: LD_INT 64
17931: ST_TO_ADDR
17932: GO 17973
17934: LD_INT 1
17936: DOUBLE
17937: EQUAL
17938: IFTRUE 17942
17940: GO 17953
17942: POP
// b_value = 1 ; nation_arabian :
17943: LD_ADDR_VAR 0 13
17947: PUSH
17948: LD_INT 1
17950: ST_TO_ADDR
17951: GO 17973
17953: LD_INT 2
17955: DOUBLE
17956: EQUAL
17957: IFTRUE 17961
17959: GO 17972
17961: POP
// b_value = 34 ; end ;
17962: LD_ADDR_VAR 0 13
17966: PUSH
17967: LD_INT 34
17969: ST_TO_ADDR
17970: GO 17973
17972: POP
// end ; b_workshop :
17973: GO 19868
17975: LD_INT 2
17977: DOUBLE
17978: EQUAL
17979: IFTRUE 17983
17981: GO 18060
17983: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
17984: LD_EXP 45
17988: PUSH
17989: LD_VAR 0 9
17993: ARRAY
17994: PPUSH
17995: CALL_OW 248
17999: PUSH
18000: LD_INT 3
18002: DOUBLE
18003: EQUAL
18004: IFTRUE 18008
18006: GO 18019
18008: POP
// b_value = 68 ; nation_american :
18009: LD_ADDR_VAR 0 13
18013: PUSH
18014: LD_INT 68
18016: ST_TO_ADDR
18017: GO 18058
18019: LD_INT 1
18021: DOUBLE
18022: EQUAL
18023: IFTRUE 18027
18025: GO 18038
18027: POP
// b_value = 5 ; nation_arabian :
18028: LD_ADDR_VAR 0 13
18032: PUSH
18033: LD_INT 5
18035: ST_TO_ADDR
18036: GO 18058
18038: LD_INT 2
18040: DOUBLE
18041: EQUAL
18042: IFTRUE 18046
18044: GO 18057
18046: POP
// b_value = 38 ; end ;
18047: LD_ADDR_VAR 0 13
18051: PUSH
18052: LD_INT 38
18054: ST_TO_ADDR
18055: GO 18058
18057: POP
// end ; b_armoury :
18058: GO 19868
18060: LD_INT 4
18062: DOUBLE
18063: EQUAL
18064: IFTRUE 18068
18066: GO 18145
18068: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
18069: LD_EXP 45
18073: PUSH
18074: LD_VAR 0 9
18078: ARRAY
18079: PPUSH
18080: CALL_OW 248
18084: PUSH
18085: LD_INT 3
18087: DOUBLE
18088: EQUAL
18089: IFTRUE 18093
18091: GO 18104
18093: POP
// b_value = 66 ; nation_american :
18094: LD_ADDR_VAR 0 13
18098: PUSH
18099: LD_INT 66
18101: ST_TO_ADDR
18102: GO 18143
18104: LD_INT 1
18106: DOUBLE
18107: EQUAL
18108: IFTRUE 18112
18110: GO 18123
18112: POP
// b_value = 3 ; nation_arabian :
18113: LD_ADDR_VAR 0 13
18117: PUSH
18118: LD_INT 3
18120: ST_TO_ADDR
18121: GO 18143
18123: LD_INT 2
18125: DOUBLE
18126: EQUAL
18127: IFTRUE 18131
18129: GO 18142
18131: POP
// b_value = 36 ; end ;
18132: LD_ADDR_VAR 0 13
18136: PUSH
18137: LD_INT 36
18139: ST_TO_ADDR
18140: GO 18143
18142: POP
// end ; b_lab :
18143: GO 19868
18145: LD_INT 6
18147: DOUBLE
18148: EQUAL
18149: IFTRUE 18153
18151: GO 18230
18153: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
18154: LD_EXP 45
18158: PUSH
18159: LD_VAR 0 9
18163: ARRAY
18164: PPUSH
18165: CALL_OW 248
18169: PUSH
18170: LD_INT 3
18172: DOUBLE
18173: EQUAL
18174: IFTRUE 18178
18176: GO 18189
18178: POP
// b_value = 77 ; nation_american :
18179: LD_ADDR_VAR 0 13
18183: PUSH
18184: LD_INT 77
18186: ST_TO_ADDR
18187: GO 18228
18189: LD_INT 1
18191: DOUBLE
18192: EQUAL
18193: IFTRUE 18197
18195: GO 18208
18197: POP
// b_value = 17 ; nation_arabian :
18198: LD_ADDR_VAR 0 13
18202: PUSH
18203: LD_INT 17
18205: ST_TO_ADDR
18206: GO 18228
18208: LD_INT 2
18210: DOUBLE
18211: EQUAL
18212: IFTRUE 18216
18214: GO 18227
18216: POP
// b_value = 48 ; end ;
18217: LD_ADDR_VAR 0 13
18221: PUSH
18222: LD_INT 48
18224: ST_TO_ADDR
18225: GO 18228
18227: POP
// end ; b_oil_power :
18228: GO 19868
18230: LD_INT 26
18232: DOUBLE
18233: EQUAL
18234: IFTRUE 18238
18236: GO 18315
18238: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
18239: LD_EXP 45
18243: PUSH
18244: LD_VAR 0 9
18248: ARRAY
18249: PPUSH
18250: CALL_OW 248
18254: PUSH
18255: LD_INT 3
18257: DOUBLE
18258: EQUAL
18259: IFTRUE 18263
18261: GO 18274
18263: POP
// b_value = 85 ; nation_american :
18264: LD_ADDR_VAR 0 13
18268: PUSH
18269: LD_INT 85
18271: ST_TO_ADDR
18272: GO 18313
18274: LD_INT 1
18276: DOUBLE
18277: EQUAL
18278: IFTRUE 18282
18280: GO 18293
18282: POP
// b_value = 25 ; nation_arabian :
18283: LD_ADDR_VAR 0 13
18287: PUSH
18288: LD_INT 25
18290: ST_TO_ADDR
18291: GO 18313
18293: LD_INT 2
18295: DOUBLE
18296: EQUAL
18297: IFTRUE 18301
18299: GO 18312
18301: POP
// b_value = 56 ; end ;
18302: LD_ADDR_VAR 0 13
18306: PUSH
18307: LD_INT 56
18309: ST_TO_ADDR
18310: GO 18313
18312: POP
// end ; b_solar_power :
18313: GO 19868
18315: LD_INT 27
18317: DOUBLE
18318: EQUAL
18319: IFTRUE 18323
18321: GO 18401
18323: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
18324: LD_EXP 45
18328: PUSH
18329: LD_VAR 0 9
18333: ARRAY
18334: PPUSH
18335: CALL_OW 248
18339: PUSH
18340: LD_INT 3
18342: DOUBLE
18343: EQUAL
18344: IFTRUE 18348
18346: GO 18360
18348: POP
// b_value = - 7 ; nation_american :
18349: LD_ADDR_VAR 0 13
18353: PUSH
18354: LD_INT 7
18356: NEG
18357: ST_TO_ADDR
18358: GO 18399
18360: LD_INT 1
18362: DOUBLE
18363: EQUAL
18364: IFTRUE 18368
18366: GO 18379
18368: POP
// b_value = 26 ; nation_arabian :
18369: LD_ADDR_VAR 0 13
18373: PUSH
18374: LD_INT 26
18376: ST_TO_ADDR
18377: GO 18399
18379: LD_INT 2
18381: DOUBLE
18382: EQUAL
18383: IFTRUE 18387
18385: GO 18398
18387: POP
// b_value = 57 ; end ;
18388: LD_ADDR_VAR 0 13
18392: PUSH
18393: LD_INT 57
18395: ST_TO_ADDR
18396: GO 18399
18398: POP
// end ; b_siberite_power :
18399: GO 19868
18401: LD_INT 28
18403: DOUBLE
18404: EQUAL
18405: IFTRUE 18409
18407: GO 18486
18409: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
18410: LD_EXP 45
18414: PUSH
18415: LD_VAR 0 9
18419: ARRAY
18420: PPUSH
18421: CALL_OW 248
18425: PUSH
18426: LD_INT 3
18428: DOUBLE
18429: EQUAL
18430: IFTRUE 18434
18432: GO 18445
18434: POP
// b_value = 86 ; nation_american :
18435: LD_ADDR_VAR 0 13
18439: PUSH
18440: LD_INT 86
18442: ST_TO_ADDR
18443: GO 18484
18445: LD_INT 1
18447: DOUBLE
18448: EQUAL
18449: IFTRUE 18453
18451: GO 18464
18453: POP
// b_value = 27 ; nation_arabian :
18454: LD_ADDR_VAR 0 13
18458: PUSH
18459: LD_INT 27
18461: ST_TO_ADDR
18462: GO 18484
18464: LD_INT 2
18466: DOUBLE
18467: EQUAL
18468: IFTRUE 18472
18470: GO 18483
18472: POP
// b_value = 58 ; end ;
18473: LD_ADDR_VAR 0 13
18477: PUSH
18478: LD_INT 58
18480: ST_TO_ADDR
18481: GO 18484
18483: POP
// end ; b_oil_mine :
18484: GO 19868
18486: LD_INT 29
18488: DOUBLE
18489: EQUAL
18490: IFTRUE 18494
18492: GO 18571
18494: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
18495: LD_EXP 45
18499: PUSH
18500: LD_VAR 0 9
18504: ARRAY
18505: PPUSH
18506: CALL_OW 248
18510: PUSH
18511: LD_INT 3
18513: DOUBLE
18514: EQUAL
18515: IFTRUE 18519
18517: GO 18530
18519: POP
// b_value = 87 ; nation_american :
18520: LD_ADDR_VAR 0 13
18524: PUSH
18525: LD_INT 87
18527: ST_TO_ADDR
18528: GO 18569
18530: LD_INT 1
18532: DOUBLE
18533: EQUAL
18534: IFTRUE 18538
18536: GO 18549
18538: POP
// b_value = 28 ; nation_arabian :
18539: LD_ADDR_VAR 0 13
18543: PUSH
18544: LD_INT 28
18546: ST_TO_ADDR
18547: GO 18569
18549: LD_INT 2
18551: DOUBLE
18552: EQUAL
18553: IFTRUE 18557
18555: GO 18568
18557: POP
// b_value = 59 ; end ;
18558: LD_ADDR_VAR 0 13
18562: PUSH
18563: LD_INT 59
18565: ST_TO_ADDR
18566: GO 18569
18568: POP
// end ; b_siberite_mine :
18569: GO 19868
18571: LD_INT 30
18573: DOUBLE
18574: EQUAL
18575: IFTRUE 18579
18577: GO 18656
18579: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
18580: LD_EXP 45
18584: PUSH
18585: LD_VAR 0 9
18589: ARRAY
18590: PPUSH
18591: CALL_OW 248
18595: PUSH
18596: LD_INT 3
18598: DOUBLE
18599: EQUAL
18600: IFTRUE 18604
18602: GO 18615
18604: POP
// b_value = 88 ; nation_american :
18605: LD_ADDR_VAR 0 13
18609: PUSH
18610: LD_INT 88
18612: ST_TO_ADDR
18613: GO 18654
18615: LD_INT 1
18617: DOUBLE
18618: EQUAL
18619: IFTRUE 18623
18621: GO 18634
18623: POP
// b_value = 29 ; nation_arabian :
18624: LD_ADDR_VAR 0 13
18628: PUSH
18629: LD_INT 29
18631: ST_TO_ADDR
18632: GO 18654
18634: LD_INT 2
18636: DOUBLE
18637: EQUAL
18638: IFTRUE 18642
18640: GO 18653
18642: POP
// b_value = 60 ; end ;
18643: LD_ADDR_VAR 0 13
18647: PUSH
18648: LD_INT 60
18650: ST_TO_ADDR
18651: GO 18654
18653: POP
// end ; b_breastwork :
18654: GO 19868
18656: LD_INT 31
18658: DOUBLE
18659: EQUAL
18660: IFTRUE 18664
18662: GO 18741
18664: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
18665: LD_EXP 45
18669: PUSH
18670: LD_VAR 0 9
18674: ARRAY
18675: PPUSH
18676: CALL_OW 248
18680: PUSH
18681: LD_INT 3
18683: DOUBLE
18684: EQUAL
18685: IFTRUE 18689
18687: GO 18700
18689: POP
// b_value = 89 ; nation_american :
18690: LD_ADDR_VAR 0 13
18694: PUSH
18695: LD_INT 89
18697: ST_TO_ADDR
18698: GO 18739
18700: LD_INT 1
18702: DOUBLE
18703: EQUAL
18704: IFTRUE 18708
18706: GO 18719
18708: POP
// b_value = 30 ; nation_arabian :
18709: LD_ADDR_VAR 0 13
18713: PUSH
18714: LD_INT 30
18716: ST_TO_ADDR
18717: GO 18739
18719: LD_INT 2
18721: DOUBLE
18722: EQUAL
18723: IFTRUE 18727
18725: GO 18738
18727: POP
// b_value = 61 ; end ;
18728: LD_ADDR_VAR 0 13
18732: PUSH
18733: LD_INT 61
18735: ST_TO_ADDR
18736: GO 18739
18738: POP
// end ; b_bunker :
18739: GO 19868
18741: LD_INT 32
18743: DOUBLE
18744: EQUAL
18745: IFTRUE 18749
18747: GO 18826
18749: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
18750: LD_EXP 45
18754: PUSH
18755: LD_VAR 0 9
18759: ARRAY
18760: PPUSH
18761: CALL_OW 248
18765: PUSH
18766: LD_INT 3
18768: DOUBLE
18769: EQUAL
18770: IFTRUE 18774
18772: GO 18785
18774: POP
// b_value = 90 ; nation_american :
18775: LD_ADDR_VAR 0 13
18779: PUSH
18780: LD_INT 90
18782: ST_TO_ADDR
18783: GO 18824
18785: LD_INT 1
18787: DOUBLE
18788: EQUAL
18789: IFTRUE 18793
18791: GO 18804
18793: POP
// b_value = 31 ; nation_arabian :
18794: LD_ADDR_VAR 0 13
18798: PUSH
18799: LD_INT 31
18801: ST_TO_ADDR
18802: GO 18824
18804: LD_INT 2
18806: DOUBLE
18807: EQUAL
18808: IFTRUE 18812
18810: GO 18823
18812: POP
// b_value = 62 ; end ;
18813: LD_ADDR_VAR 0 13
18817: PUSH
18818: LD_INT 62
18820: ST_TO_ADDR
18821: GO 18824
18823: POP
// end ; b_turret :
18824: GO 19868
18826: LD_INT 33
18828: DOUBLE
18829: EQUAL
18830: IFTRUE 18834
18832: GO 18912
18834: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
18835: LD_EXP 45
18839: PUSH
18840: LD_VAR 0 9
18844: ARRAY
18845: PPUSH
18846: CALL_OW 248
18850: PUSH
18851: LD_INT 3
18853: DOUBLE
18854: EQUAL
18855: IFTRUE 18859
18857: GO 18870
18859: POP
// b_value = 91 ; nation_american :
18860: LD_ADDR_VAR 0 13
18864: PUSH
18865: LD_INT 91
18867: ST_TO_ADDR
18868: GO 18910
18870: LD_INT 1
18872: DOUBLE
18873: EQUAL
18874: IFTRUE 18878
18876: GO 18889
18878: POP
// b_value = 32 ; nation_arabian :
18879: LD_ADDR_VAR 0 13
18883: PUSH
18884: LD_INT 32
18886: ST_TO_ADDR
18887: GO 18910
18889: LD_INT 2
18891: DOUBLE
18892: EQUAL
18893: IFTRUE 18897
18895: GO 18909
18897: POP
// b_value = - 7 ; end ;
18898: LD_ADDR_VAR 0 13
18902: PUSH
18903: LD_INT 7
18905: NEG
18906: ST_TO_ADDR
18907: GO 18910
18909: POP
// end ; b_teleport :
18910: GO 19868
18912: LD_INT 34
18914: DOUBLE
18915: EQUAL
18916: IFTRUE 18920
18918: GO 18999
18920: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
18921: LD_EXP 45
18925: PUSH
18926: LD_VAR 0 9
18930: ARRAY
18931: PPUSH
18932: CALL_OW 248
18936: PUSH
18937: LD_INT 3
18939: DOUBLE
18940: EQUAL
18941: IFTRUE 18945
18943: GO 18956
18945: POP
// b_value = 92 ; nation_american :
18946: LD_ADDR_VAR 0 13
18950: PUSH
18951: LD_INT 92
18953: ST_TO_ADDR
18954: GO 18997
18956: LD_INT 1
18958: DOUBLE
18959: EQUAL
18960: IFTRUE 18964
18962: GO 18976
18964: POP
// b_value = - 7 ; nation_arabian :
18965: LD_ADDR_VAR 0 13
18969: PUSH
18970: LD_INT 7
18972: NEG
18973: ST_TO_ADDR
18974: GO 18997
18976: LD_INT 2
18978: DOUBLE
18979: EQUAL
18980: IFTRUE 18984
18982: GO 18996
18984: POP
// b_value = - 7 ; end ;
18985: LD_ADDR_VAR 0 13
18989: PUSH
18990: LD_INT 7
18992: NEG
18993: ST_TO_ADDR
18994: GO 18997
18996: POP
// end ; b_control_tower :
18997: GO 19868
18999: LD_INT 36
19001: DOUBLE
19002: EQUAL
19003: IFTRUE 19007
19005: GO 19086
19007: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
19008: LD_EXP 45
19012: PUSH
19013: LD_VAR 0 9
19017: ARRAY
19018: PPUSH
19019: CALL_OW 248
19023: PUSH
19024: LD_INT 3
19026: DOUBLE
19027: EQUAL
19028: IFTRUE 19032
19030: GO 19044
19032: POP
// b_value = - 7 ; nation_american :
19033: LD_ADDR_VAR 0 13
19037: PUSH
19038: LD_INT 7
19040: NEG
19041: ST_TO_ADDR
19042: GO 19084
19044: LD_INT 1
19046: DOUBLE
19047: EQUAL
19048: IFTRUE 19052
19050: GO 19063
19052: POP
// b_value = 94 ; nation_arabian :
19053: LD_ADDR_VAR 0 13
19057: PUSH
19058: LD_INT 94
19060: ST_TO_ADDR
19061: GO 19084
19063: LD_INT 2
19065: DOUBLE
19066: EQUAL
19067: IFTRUE 19071
19069: GO 19083
19071: POP
// b_value = - 7 ; end ;
19072: LD_ADDR_VAR 0 13
19076: PUSH
19077: LD_INT 7
19079: NEG
19080: ST_TO_ADDR
19081: GO 19084
19083: POP
// end ; b_ext_track :
19084: GO 19868
19086: LD_INT 16
19088: DOUBLE
19089: EQUAL
19090: IFTRUE 19094
19092: GO 19171
19094: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
19095: LD_EXP 45
19099: PUSH
19100: LD_VAR 0 9
19104: ARRAY
19105: PPUSH
19106: CALL_OW 248
19110: PUSH
19111: LD_INT 3
19113: DOUBLE
19114: EQUAL
19115: IFTRUE 19119
19117: GO 19130
19119: POP
// b_value = 70 ; nation_american :
19120: LD_ADDR_VAR 0 13
19124: PUSH
19125: LD_INT 70
19127: ST_TO_ADDR
19128: GO 19169
19130: LD_INT 1
19132: DOUBLE
19133: EQUAL
19134: IFTRUE 19138
19136: GO 19149
19138: POP
// b_value = 7 ; nation_arabian :
19139: LD_ADDR_VAR 0 13
19143: PUSH
19144: LD_INT 7
19146: ST_TO_ADDR
19147: GO 19169
19149: LD_INT 2
19151: DOUBLE
19152: EQUAL
19153: IFTRUE 19157
19155: GO 19168
19157: POP
// b_value = 40 ; end ;
19158: LD_ADDR_VAR 0 13
19162: PUSH
19163: LD_INT 40
19165: ST_TO_ADDR
19166: GO 19169
19168: POP
// end ; b_ext_gun :
19169: GO 19868
19171: LD_INT 17
19173: DOUBLE
19174: EQUAL
19175: IFTRUE 19179
19177: GO 19256
19179: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
19180: LD_EXP 45
19184: PUSH
19185: LD_VAR 0 9
19189: ARRAY
19190: PPUSH
19191: CALL_OW 248
19195: PUSH
19196: LD_INT 3
19198: DOUBLE
19199: EQUAL
19200: IFTRUE 19204
19202: GO 19215
19204: POP
// b_value = 71 ; nation_american :
19205: LD_ADDR_VAR 0 13
19209: PUSH
19210: LD_INT 71
19212: ST_TO_ADDR
19213: GO 19254
19215: LD_INT 1
19217: DOUBLE
19218: EQUAL
19219: IFTRUE 19223
19221: GO 19234
19223: POP
// b_value = 8 ; nation_arabian :
19224: LD_ADDR_VAR 0 13
19228: PUSH
19229: LD_INT 8
19231: ST_TO_ADDR
19232: GO 19254
19234: LD_INT 2
19236: DOUBLE
19237: EQUAL
19238: IFTRUE 19242
19240: GO 19253
19242: POP
// b_value = 41 ; end ;
19243: LD_ADDR_VAR 0 13
19247: PUSH
19248: LD_INT 41
19250: ST_TO_ADDR
19251: GO 19254
19253: POP
// end ; b_ext_rocket :
19254: GO 19868
19256: LD_INT 18
19258: DOUBLE
19259: EQUAL
19260: IFTRUE 19264
19262: GO 19341
19264: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
19265: LD_EXP 45
19269: PUSH
19270: LD_VAR 0 9
19274: ARRAY
19275: PPUSH
19276: CALL_OW 248
19280: PUSH
19281: LD_INT 3
19283: DOUBLE
19284: EQUAL
19285: IFTRUE 19289
19287: GO 19300
19289: POP
// b_value = 72 ; nation_american :
19290: LD_ADDR_VAR 0 13
19294: PUSH
19295: LD_INT 72
19297: ST_TO_ADDR
19298: GO 19339
19300: LD_INT 1
19302: DOUBLE
19303: EQUAL
19304: IFTRUE 19308
19306: GO 19319
19308: POP
// b_value = 9 ; nation_arabian :
19309: LD_ADDR_VAR 0 13
19313: PUSH
19314: LD_INT 9
19316: ST_TO_ADDR
19317: GO 19339
19319: LD_INT 2
19321: DOUBLE
19322: EQUAL
19323: IFTRUE 19327
19325: GO 19338
19327: POP
// b_value = 42 ; end ;
19328: LD_ADDR_VAR 0 13
19332: PUSH
19333: LD_INT 42
19335: ST_TO_ADDR
19336: GO 19339
19338: POP
// end ; b_ext_noncombat :
19339: GO 19868
19341: LD_INT 19
19343: DOUBLE
19344: EQUAL
19345: IFTRUE 19349
19347: GO 19427
19349: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
19350: LD_EXP 45
19354: PUSH
19355: LD_VAR 0 9
19359: ARRAY
19360: PPUSH
19361: CALL_OW 248
19365: PUSH
19366: LD_INT 3
19368: DOUBLE
19369: EQUAL
19370: IFTRUE 19374
19372: GO 19385
19374: POP
// b_value = 73 ; nation_american :
19375: LD_ADDR_VAR 0 13
19379: PUSH
19380: LD_INT 73
19382: ST_TO_ADDR
19383: GO 19425
19385: LD_INT 1
19387: DOUBLE
19388: EQUAL
19389: IFTRUE 19393
19391: GO 19404
19393: POP
// b_value = 10 ; nation_arabian :
19394: LD_ADDR_VAR 0 13
19398: PUSH
19399: LD_INT 10
19401: ST_TO_ADDR
19402: GO 19425
19404: LD_INT 2
19406: DOUBLE
19407: EQUAL
19408: IFTRUE 19412
19410: GO 19424
19412: POP
// b_value = - 7 ; end ;
19413: LD_ADDR_VAR 0 13
19417: PUSH
19418: LD_INT 7
19420: NEG
19421: ST_TO_ADDR
19422: GO 19425
19424: POP
// end ; b_ext_radar :
19425: GO 19868
19427: LD_INT 20
19429: DOUBLE
19430: EQUAL
19431: IFTRUE 19435
19433: GO 19513
19435: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
19436: LD_EXP 45
19440: PUSH
19441: LD_VAR 0 9
19445: ARRAY
19446: PPUSH
19447: CALL_OW 248
19451: PUSH
19452: LD_INT 3
19454: DOUBLE
19455: EQUAL
19456: IFTRUE 19460
19458: GO 19472
19460: POP
// b_value = - 7 ; nation_american :
19461: LD_ADDR_VAR 0 13
19465: PUSH
19466: LD_INT 7
19468: NEG
19469: ST_TO_ADDR
19470: GO 19511
19472: LD_INT 1
19474: DOUBLE
19475: EQUAL
19476: IFTRUE 19480
19478: GO 19491
19480: POP
// b_value = 11 ; nation_arabian :
19481: LD_ADDR_VAR 0 13
19485: PUSH
19486: LD_INT 11
19488: ST_TO_ADDR
19489: GO 19511
19491: LD_INT 2
19493: DOUBLE
19494: EQUAL
19495: IFTRUE 19499
19497: GO 19510
19499: POP
// b_value = 44 ; end ;
19500: LD_ADDR_VAR 0 13
19504: PUSH
19505: LD_INT 44
19507: ST_TO_ADDR
19508: GO 19511
19510: POP
// end ; b_ext_siberium :
19511: GO 19868
19513: LD_INT 21
19515: DOUBLE
19516: EQUAL
19517: IFTRUE 19521
19519: GO 19598
19521: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
19522: LD_EXP 45
19526: PUSH
19527: LD_VAR 0 9
19531: ARRAY
19532: PPUSH
19533: CALL_OW 248
19537: PUSH
19538: LD_INT 3
19540: DOUBLE
19541: EQUAL
19542: IFTRUE 19546
19544: GO 19557
19546: POP
// b_value = 75 ; nation_american :
19547: LD_ADDR_VAR 0 13
19551: PUSH
19552: LD_INT 75
19554: ST_TO_ADDR
19555: GO 19596
19557: LD_INT 1
19559: DOUBLE
19560: EQUAL
19561: IFTRUE 19565
19563: GO 19576
19565: POP
// b_value = 12 ; nation_arabian :
19566: LD_ADDR_VAR 0 13
19570: PUSH
19571: LD_INT 12
19573: ST_TO_ADDR
19574: GO 19596
19576: LD_INT 2
19578: DOUBLE
19579: EQUAL
19580: IFTRUE 19584
19582: GO 19595
19584: POP
// b_value = 45 ; end ;
19585: LD_ADDR_VAR 0 13
19589: PUSH
19590: LD_INT 45
19592: ST_TO_ADDR
19593: GO 19596
19595: POP
// end ; b_ext_stitch :
19596: GO 19868
19598: LD_INT 23
19600: DOUBLE
19601: EQUAL
19602: IFTRUE 19606
19604: GO 19685
19606: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
19607: LD_EXP 45
19611: PUSH
19612: LD_VAR 0 9
19616: ARRAY
19617: PPUSH
19618: CALL_OW 248
19622: PUSH
19623: LD_INT 3
19625: DOUBLE
19626: EQUAL
19627: IFTRUE 19631
19629: GO 19643
19631: POP
// b_value = - 7 ; nation_american :
19632: LD_ADDR_VAR 0 13
19636: PUSH
19637: LD_INT 7
19639: NEG
19640: ST_TO_ADDR
19641: GO 19683
19643: LD_INT 1
19645: DOUBLE
19646: EQUAL
19647: IFTRUE 19651
19649: GO 19663
19651: POP
// b_value = - 7 ; nation_arabian :
19652: LD_ADDR_VAR 0 13
19656: PUSH
19657: LD_INT 7
19659: NEG
19660: ST_TO_ADDR
19661: GO 19683
19663: LD_INT 2
19665: DOUBLE
19666: EQUAL
19667: IFTRUE 19671
19669: GO 19682
19671: POP
// b_value = 43 ; end ;
19672: LD_ADDR_VAR 0 13
19676: PUSH
19677: LD_INT 43
19679: ST_TO_ADDR
19680: GO 19683
19682: POP
// end ; b_ext_computer :
19683: GO 19868
19685: LD_INT 24
19687: DOUBLE
19688: EQUAL
19689: IFTRUE 19693
19691: GO 19771
19693: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
19694: LD_EXP 45
19698: PUSH
19699: LD_VAR 0 9
19703: ARRAY
19704: PPUSH
19705: CALL_OW 248
19709: PUSH
19710: LD_INT 3
19712: DOUBLE
19713: EQUAL
19714: IFTRUE 19718
19716: GO 19729
19718: POP
// b_value = 76 ; nation_american :
19719: LD_ADDR_VAR 0 13
19723: PUSH
19724: LD_INT 76
19726: ST_TO_ADDR
19727: GO 19769
19729: LD_INT 1
19731: DOUBLE
19732: EQUAL
19733: IFTRUE 19737
19735: GO 19748
19737: POP
// b_value = 15 ; nation_arabian :
19738: LD_ADDR_VAR 0 13
19742: PUSH
19743: LD_INT 15
19745: ST_TO_ADDR
19746: GO 19769
19748: LD_INT 2
19750: DOUBLE
19751: EQUAL
19752: IFTRUE 19756
19754: GO 19768
19756: POP
// b_value = - 7 ; end ;
19757: LD_ADDR_VAR 0 13
19761: PUSH
19762: LD_INT 7
19764: NEG
19765: ST_TO_ADDR
19766: GO 19769
19768: POP
// end ; b_ext_laser :
19769: GO 19868
19771: LD_INT 25
19773: DOUBLE
19774: EQUAL
19775: IFTRUE 19779
19777: GO 19858
19779: POP
// begin case GetNation ( ai_building_constructor [ base ] ) of nation_russian :
19780: LD_EXP 45
19784: PUSH
19785: LD_VAR 0 9
19789: ARRAY
19790: PPUSH
19791: CALL_OW 248
19795: PUSH
19796: LD_INT 3
19798: DOUBLE
19799: EQUAL
19800: IFTRUE 19804
19802: GO 19816
19804: POP
// b_value = - 7 ; nation_american :
19805: LD_ADDR_VAR 0 13
19809: PUSH
19810: LD_INT 7
19812: NEG
19813: ST_TO_ADDR
19814: GO 19856
19816: LD_INT 1
19818: DOUBLE
19819: EQUAL
19820: IFTRUE 19824
19822: GO 19835
19824: POP
// b_value = 16 ; nation_arabian :
19825: LD_ADDR_VAR 0 13
19829: PUSH
19830: LD_INT 16
19832: ST_TO_ADDR
19833: GO 19856
19835: LD_INT 2
19837: DOUBLE
19838: EQUAL
19839: IFTRUE 19843
19841: GO 19855
19843: POP
// b_value = - 7 ; end ;
19844: LD_ADDR_VAR 0 13
19848: PUSH
19849: LD_INT 7
19851: NEG
19852: ST_TO_ADDR
19853: GO 19856
19855: POP
// end ; else
19856: GO 19868
19858: POP
// b_value = - 42 ; end ;
19859: LD_ADDR_VAR 0 13
19863: PUSH
19864: LD_INT 42
19866: NEG
19867: 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 ] ] ) ;
19868: LD_EXP 45
19872: PUSH
19873: LD_VAR 0 9
19877: ARRAY
19878: PPUSH
19879: LD_STRING B
19881: PUSH
19882: LD_EXP 46
19886: PUSH
19887: LD_VAR 0 9
19891: ARRAY
19892: PUSH
19893: LD_INT 1
19895: ARRAY
19896: PUSH
19897: LD_EXP 46
19901: PUSH
19902: LD_VAR 0 9
19906: ARRAY
19907: PUSH
19908: LD_INT 2
19910: ARRAY
19911: PUSH
19912: LD_INT 0
19914: PUSH
19915: LD_VAR 0 13
19919: PUSH
19920: LD_EXP 46
19924: PUSH
19925: LD_VAR 0 9
19929: ARRAY
19930: PUSH
19931: LD_INT 3
19933: ARRAY
19934: PUSH
19935: LD_INT 0
19937: PUSH
19938: EMPTY
19939: LIST
19940: LIST
19941: LIST
19942: LIST
19943: LIST
19944: LIST
19945: LIST
19946: PUSH
19947: EMPTY
19948: LIST
19949: PPUSH
19950: CALL_OW 446
// end ; b_depot :
19954: GO 20451
19956: LD_INT 0
19958: DOUBLE
19959: EQUAL
19960: IFTRUE 19964
19962: GO 20013
19964: POP
// begin ComUpgrade ( ai_depot [ base ] ) ;
19965: LD_EXP 34
19969: PUSH
19970: LD_VAR 0 9
19974: ARRAY
19975: PPUSH
19976: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , ai_depot [ base ] ) ;
19980: LD_ADDR_EXP 42
19984: PUSH
19985: LD_EXP 42
19989: PPUSH
19990: LD_VAR 0 9
19994: PPUSH
19995: LD_EXP 34
19999: PUSH
20000: LD_VAR 0 9
20004: ARRAY
20005: PPUSH
20006: CALL_OW 1
20010: ST_TO_ADDR
// end ; b_workshop :
20011: GO 20451
20013: LD_INT 2
20015: DOUBLE
20016: EQUAL
20017: IFTRUE 20021
20019: GO 20098
20021: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
20022: LD_ADDR_VAR 0 6
20026: PUSH
20027: LD_EXP 46
20031: PUSH
20032: LD_VAR 0 9
20036: ARRAY
20037: PUSH
20038: LD_INT 1
20040: ARRAY
20041: PPUSH
20042: LD_EXP 46
20046: PUSH
20047: LD_VAR 0 9
20051: ARRAY
20052: PUSH
20053: LD_INT 2
20055: ARRAY
20056: PPUSH
20057: CALL_OW 428
20061: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
20062: LD_VAR 0 6
20066: PPUSH
20067: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
20071: LD_ADDR_EXP 42
20075: PUSH
20076: LD_EXP 42
20080: PPUSH
20081: LD_VAR 0 9
20085: PPUSH
20086: LD_VAR 0 6
20090: PPUSH
20091: CALL_OW 1
20095: ST_TO_ADDR
// end ; b_lab , b_lab_half :
20096: GO 20451
20098: LD_INT 6
20100: DOUBLE
20101: EQUAL
20102: IFTRUE 20112
20104: LD_INT 7
20106: DOUBLE
20107: EQUAL
20108: IFTRUE 20112
20110: GO 20365
20112: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
20113: LD_ADDR_VAR 0 6
20117: PUSH
20118: LD_EXP 46
20122: PUSH
20123: LD_VAR 0 9
20127: ARRAY
20128: PUSH
20129: LD_INT 1
20131: ARRAY
20132: PPUSH
20133: LD_EXP 46
20137: PUSH
20138: LD_VAR 0 9
20142: ARRAY
20143: PUSH
20144: LD_INT 2
20146: ARRAY
20147: PPUSH
20148: CALL_OW 428
20152: 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
20153: LD_EXP 46
20157: PUSH
20158: LD_VAR 0 9
20162: ARRAY
20163: PUSH
20164: LD_INT 5
20166: ARRAY
20167: PUSH
20168: LD_INT 9
20170: NONEQUAL
20171: PUSH
20172: LD_EXP 46
20176: PUSH
20177: LD_VAR 0 9
20181: ARRAY
20182: PUSH
20183: LD_INT 5
20185: ARRAY
20186: PUSH
20187: LD_VAR 0 6
20191: PPUSH
20192: LD_INT 1
20194: PPUSH
20195: CALL_OW 268
20199: PUSH
20200: LD_VAR 0 6
20204: PPUSH
20205: LD_INT 2
20207: PPUSH
20208: CALL_OW 268
20212: PUSH
20213: EMPTY
20214: LIST
20215: LIST
20216: IN
20217: NOT
20218: AND
20219: IFFALSE 20247
// ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 5 ] ) else
20221: LD_VAR 0 6
20225: PPUSH
20226: LD_EXP 46
20230: PUSH
20231: LD_VAR 0 9
20235: ARRAY
20236: PUSH
20237: LD_INT 5
20239: ARRAY
20240: PPUSH
20241: CALL_OW 147
20245: GO 20338
// if ai_upcoming_building_data [ base ] [ 6 ] <> b_lab_basic then
20247: LD_EXP 46
20251: PUSH
20252: LD_VAR 0 9
20256: ARRAY
20257: PUSH
20258: LD_INT 6
20260: ARRAY
20261: PUSH
20262: LD_INT 9
20264: NONEQUAL
20265: IFFALSE 20293
// ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 6 ] ) else
20267: LD_VAR 0 6
20271: PPUSH
20272: LD_EXP 46
20276: PUSH
20277: LD_VAR 0 9
20281: ARRAY
20282: PUSH
20283: LD_INT 6
20285: ARRAY
20286: PPUSH
20287: CALL_OW 147
20291: GO 20338
// begin ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
20293: LD_ADDR_EXP 45
20297: PUSH
20298: LD_EXP 45
20302: PPUSH
20303: LD_VAR 0 9
20307: PPUSH
20308: LD_INT 0
20310: PPUSH
20311: CALL_OW 1
20315: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
20316: LD_ADDR_EXP 46
20320: PUSH
20321: LD_EXP 46
20325: PPUSH
20326: LD_VAR 0 9
20330: PPUSH
20331: EMPTY
20332: PPUSH
20333: CALL_OW 1
20337: ST_TO_ADDR
// end ; ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
20338: LD_ADDR_EXP 42
20342: PUSH
20343: LD_EXP 42
20347: PPUSH
20348: LD_VAR 0 9
20352: PPUSH
20353: LD_VAR 0 6
20357: PPUSH
20358: CALL_OW 1
20362: ST_TO_ADDR
// end ; b_armoury :
20363: GO 20451
20365: LD_INT 4
20367: DOUBLE
20368: EQUAL
20369: IFTRUE 20373
20371: GO 20450
20373: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
20374: LD_ADDR_VAR 0 6
20378: PUSH
20379: LD_EXP 46
20383: PUSH
20384: LD_VAR 0 9
20388: ARRAY
20389: PUSH
20390: LD_INT 1
20392: ARRAY
20393: PPUSH
20394: LD_EXP 46
20398: PUSH
20399: LD_VAR 0 9
20403: ARRAY
20404: PUSH
20405: LD_INT 2
20407: ARRAY
20408: PPUSH
20409: CALL_OW 428
20413: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
20414: LD_VAR 0 6
20418: PPUSH
20419: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
20423: LD_ADDR_EXP 42
20427: PUSH
20428: LD_EXP 42
20432: PPUSH
20433: LD_VAR 0 9
20437: PPUSH
20438: LD_VAR 0 6
20442: PPUSH
20443: CALL_OW 1
20447: ST_TO_ADDR
// end ; end ; end ;
20448: GO 20451
20450: POP
// end ; end ; end ; if ( engineers_list ^ apemen_engineers_list ) > 0 and ai_depot [ base ] > 0 then
20451: LD_VAR 0 3
20455: PUSH
20456: LD_VAR 0 10
20460: ADD
20461: PUSH
20462: LD_INT 0
20464: GREATER
20465: PUSH
20466: LD_EXP 34
20470: PUSH
20471: LD_VAR 0 9
20475: ARRAY
20476: PUSH
20477: LD_INT 0
20479: GREATER
20480: AND
20481: IFFALSE 20565
// begin temp_list = GetListOfCratesInArea ( GetBaseArea ( base ) ) ;
20483: LD_ADDR_VAR 0 4
20487: PUSH
20488: LD_VAR 0 9
20492: PPUSH
20493: CALL 11197 0 1
20497: PPUSH
20498: CALL_OW 435
20502: ST_TO_ADDR
// if temp_list > 0 then
20503: LD_VAR 0 4
20507: PUSH
20508: LD_INT 0
20510: GREATER
20511: IFFALSE 20565
// begin ComCollect ( GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) , temp_list [ 1 ] , temp_list [ 2 ] ) ;
20513: LD_VAR 0 3
20517: PUSH
20518: LD_VAR 0 10
20522: ADD
20523: PPUSH
20524: CALL 22083 0 1
20528: PPUSH
20529: LD_VAR 0 4
20533: PUSH
20534: LD_INT 1
20536: ARRAY
20537: PPUSH
20538: LD_VAR 0 4
20542: PUSH
20543: LD_INT 2
20545: ARRAY
20546: PPUSH
20547: CALL_OW 117
// engineers_list = [ ] ;
20551: LD_ADDR_VAR 0 3
20555: PUSH
20556: EMPTY
20557: ST_TO_ADDR
// apemen_engineers_list = [ ] ;
20558: LD_ADDR_VAR 0 10
20562: PUSH
20563: EMPTY
20564: 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 ) ;
20565: LD_VAR 0 9
20569: PPUSH
20570: LD_VAR 0 3
20574: PUSH
20575: LD_VAR 0 10
20579: ADD
20580: PPUSH
20581: LD_EXP 34
20585: PUSH
20586: LD_VAR 0 9
20590: ARRAY
20591: PPUSH
20592: LD_INT 50
20594: PUSH
20595: EMPTY
20596: LIST
20597: PUSH
20598: LD_INT 3
20600: PUSH
20601: LD_INT 57
20603: PUSH
20604: EMPTY
20605: LIST
20606: PUSH
20607: EMPTY
20608: LIST
20609: LIST
20610: PUSH
20611: EMPTY
20612: LIST
20613: LIST
20614: PPUSH
20615: CALL_OW 72
20619: PPUSH
20620: LD_INT 2
20622: PPUSH
20623: LD_INT 6
20625: PPUSH
20626: LD_INT 0
20628: PPUSH
20629: LD_INT 0
20631: PPUSH
20632: CALL 14154 0 7
// if crane_usable and ai_crane [ base ] <> ai_building_constructor [ base ] then
20636: LD_VAR 0 12
20640: PUSH
20641: LD_EXP 70
20645: PUSH
20646: LD_VAR 0 9
20650: ARRAY
20651: PUSH
20652: LD_EXP 45
20656: PUSH
20657: LD_VAR 0 9
20661: ARRAY
20662: NONEQUAL
20663: AND
20664: IFFALSE 20739
// if not IsInArea ( ai_crane [ base ] , GetBaseArea ( base ) ) then
20666: LD_EXP 70
20670: PUSH
20671: LD_VAR 0 9
20675: ARRAY
20676: PPUSH
20677: LD_VAR 0 9
20681: PPUSH
20682: CALL 11197 0 1
20686: PPUSH
20687: CALL_OW 308
20691: NOT
20692: IFFALSE 20739
// ComMoveXY ( ai_crane [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
20694: LD_EXP 70
20698: PUSH
20699: LD_VAR 0 9
20703: ARRAY
20704: PPUSH
20705: LD_EXP 41
20709: PUSH
20710: LD_VAR 0 9
20714: ARRAY
20715: PUSH
20716: LD_INT 1
20718: ARRAY
20719: PPUSH
20720: LD_EXP 41
20724: PUSH
20725: LD_VAR 0 9
20729: ARRAY
20730: PUSH
20731: LD_INT 2
20733: ARRAY
20734: PPUSH
20735: CALL_OW 111
// end ;
20739: GO 15506
20741: POP
20742: POP
// until false ;
20743: LD_INT 0
20745: IFFALSE 15489
// end ;
20747: PPOPN 15
20749: END
// on BuildingStarted ( building , builder ) do var side , temp_list , base , i ;
20750: LD_INT 0
20752: PPUSH
20753: PPUSH
20754: PPUSH
20755: PPUSH
// begin side = GetSide ( building ) ;
20756: LD_ADDR_VAR 0 3
20760: PUSH
20761: LD_VAR 0 1
20765: PPUSH
20766: CALL_OW 255
20770: ST_TO_ADDR
// if side = you then
20771: LD_VAR 0 3
20775: PUSH
20776: LD_EXP 2
20780: EQUAL
20781: IFFALSE 20785
// exit ;
20783: GO 20860
// base = FindBase ( building ) ;
20785: LD_ADDR_VAR 0 5
20789: PUSH
20790: LD_VAR 0 1
20794: PPUSH
20795: CALL 11416 0 1
20799: ST_TO_ADDR
// if base = 0 then
20800: LD_VAR 0 5
20804: PUSH
20805: LD_INT 0
20807: EQUAL
20808: IFFALSE 20812
// exit ;
20810: GO 20860
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
20812: LD_ADDR_EXP 45
20816: PUSH
20817: LD_EXP 45
20821: PPUSH
20822: LD_VAR 0 5
20826: PPUSH
20827: LD_INT 0
20829: PPUSH
20830: CALL_OW 1
20834: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , building ) ;
20835: LD_ADDR_EXP 42
20839: PUSH
20840: LD_EXP 42
20844: PPUSH
20845: LD_VAR 0 5
20849: PPUSH
20850: LD_VAR 0 1
20854: PPUSH
20855: CALL_OW 1
20859: ST_TO_ADDR
// end ;
20860: PPOPN 6
20862: END
// on BuildingComplete ( building ) do var side , temp_list , temp_unit , base , i ;
20863: LD_INT 0
20865: PPUSH
20866: PPUSH
20867: PPUSH
20868: PPUSH
20869: PPUSH
// begin side = GetSide ( building ) ;
20870: LD_ADDR_VAR 0 2
20874: PUSH
20875: LD_VAR 0 1
20879: PPUSH
20880: CALL_OW 255
20884: ST_TO_ADDR
// if side = you then
20885: LD_VAR 0 2
20889: PUSH
20890: LD_EXP 2
20894: EQUAL
20895: IFFALSE 20899
// exit ;
20897: GO 21004
// base = FindBase ( building ) ;
20899: LD_ADDR_VAR 0 5
20903: PUSH
20904: LD_VAR 0 1
20908: PPUSH
20909: CALL 11416 0 1
20913: ST_TO_ADDR
// if base = 0 then
20914: LD_VAR 0 5
20918: PUSH
20919: LD_INT 0
20921: EQUAL
20922: IFFALSE 20926
// exit ;
20924: GO 21004
// BuildUpgradeCommon ( base , building ) ;
20926: LD_VAR 0 5
20930: PPUSH
20931: LD_VAR 0 1
20935: PPUSH
20936: CALL 21085 0 2
// temp_list = ai_all_buildings [ base ] ^ building ;
20940: LD_ADDR_VAR 0 3
20944: PUSH
20945: LD_EXP 44
20949: PUSH
20950: LD_VAR 0 5
20954: ARRAY
20955: PUSH
20956: LD_VAR 0 1
20960: ADD
20961: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
20962: LD_ADDR_EXP 44
20966: PUSH
20967: LD_EXP 44
20971: PPUSH
20972: LD_VAR 0 5
20976: PPUSH
20977: LD_VAR 0 3
20981: PPUSH
20982: CALL_OW 1
20986: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , true ) ;
20987: LD_VAR 0 5
20991: PPUSH
20992: LD_VAR 0 1
20996: PPUSH
20997: LD_INT 1
20999: PPUSH
21000: CALL 5924 0 3
// end ;
21004: PPOPN 6
21006: END
// on UpgradeComplete ( building ) do var side , temp_list , base ;
21007: LD_INT 0
21009: PPUSH
21010: PPUSH
21011: PPUSH
// begin side = GetSide ( building ) ;
21012: LD_ADDR_VAR 0 2
21016: PUSH
21017: LD_VAR 0 1
21021: PPUSH
21022: CALL_OW 255
21026: ST_TO_ADDR
// if side = you then
21027: LD_VAR 0 2
21031: PUSH
21032: LD_EXP 2
21036: EQUAL
21037: IFFALSE 21041
// exit ;
21039: GO 21082
// base = FindBase ( building ) ;
21041: LD_ADDR_VAR 0 4
21045: PUSH
21046: LD_VAR 0 1
21050: PPUSH
21051: CALL 11416 0 1
21055: ST_TO_ADDR
// if base = 0 then
21056: LD_VAR 0 4
21060: PUSH
21061: LD_INT 0
21063: EQUAL
21064: IFFALSE 21068
// exit ;
21066: GO 21082
// BuildUpgradeCommon ( base , building ) ;
21068: LD_VAR 0 4
21072: PPUSH
21073: LD_VAR 0 1
21077: PPUSH
21078: CALL 21085 0 2
// end ;
21082: PPOPN 4
21084: END
// function BuildUpgradeCommon ( base , building ) ; begin
21085: LD_INT 0
21087: PPUSH
// if GetBType ( building ) = ai_upcoming_building_data [ base ] [ 4 ] then
21088: LD_VAR 0 2
21092: PPUSH
21093: CALL_OW 266
21097: PUSH
21098: LD_EXP 46
21102: PUSH
21103: LD_VAR 0 1
21107: ARRAY
21108: PUSH
21109: LD_INT 4
21111: ARRAY
21112: EQUAL
21113: IFFALSE 21137
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
21115: LD_ADDR_EXP 46
21119: PUSH
21120: LD_EXP 46
21124: PPUSH
21125: LD_VAR 0 1
21129: PPUSH
21130: EMPTY
21131: PPUSH
21132: CALL_OW 1
21136: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
21137: LD_ADDR_EXP 42
21141: PUSH
21142: LD_EXP 42
21146: PPUSH
21147: LD_VAR 0 1
21151: PPUSH
21152: LD_INT 0
21154: PPUSH
21155: CALL_OW 1
21159: ST_TO_ADDR
// end ;
21160: LD_VAR 0 3
21164: RET
// on BuildingCaptured ( captured_building , building_former_side , capturing_unit ) do var temp_list , base ;
21165: LD_INT 0
21167: PPUSH
21168: PPUSH
// begin if captured_building in ai_depot then
21169: LD_VAR 0 1
21173: PUSH
21174: LD_EXP 34
21178: IN
21179: IFFALSE 21494
// begin case captured_building of ai_depot [ 1 ] :
21181: LD_VAR 0 1
21185: PUSH
21186: LD_EXP 34
21190: PUSH
21191: LD_INT 1
21193: ARRAY
21194: DOUBLE
21195: EQUAL
21196: IFTRUE 21200
21198: GO 21295
21200: POP
// begin SetResourceType ( GetBase ( captured_building ) , mat_cans , 200 + Rand ( 0 , 7 ) * 10 ) ;
21201: LD_VAR 0 1
21205: PPUSH
21206: CALL_OW 274
21210: PPUSH
21211: LD_INT 1
21213: PPUSH
21214: LD_INT 200
21216: PUSH
21217: LD_INT 0
21219: PPUSH
21220: LD_INT 7
21222: PPUSH
21223: CALL_OW 12
21227: PUSH
21228: LD_INT 10
21230: MUL
21231: PLUS
21232: PPUSH
21233: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_oil , 0 ) ;
21237: LD_VAR 0 1
21241: PPUSH
21242: CALL_OW 274
21246: PPUSH
21247: LD_INT 2
21249: PPUSH
21250: LD_INT 0
21252: PPUSH
21253: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_siberit , 80 + Rand ( 0 , 10 ) * 5 ) ;
21257: LD_VAR 0 1
21261: PPUSH
21262: CALL_OW 274
21266: PPUSH
21267: LD_INT 3
21269: PPUSH
21270: LD_INT 80
21272: PUSH
21273: LD_INT 0
21275: PPUSH
21276: LD_INT 10
21278: PPUSH
21279: CALL_OW 12
21283: PUSH
21284: LD_INT 5
21286: MUL
21287: PLUS
21288: PPUSH
21289: CALL_OW 277
// end ; ai_depot [ 2 ] :
21293: GO 21494
21295: LD_EXP 34
21299: PUSH
21300: LD_INT 2
21302: ARRAY
21303: DOUBLE
21304: EQUAL
21305: IFTRUE 21309
21307: GO 21372
21309: POP
// begin SetResourceType ( GetBase ( captured_building ) , mat_cans , 100 ) ;
21310: LD_VAR 0 1
21314: PPUSH
21315: CALL_OW 274
21319: PPUSH
21320: LD_INT 1
21322: PPUSH
21323: LD_INT 100
21325: PPUSH
21326: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_oil , 55 ) ;
21330: LD_VAR 0 1
21334: PPUSH
21335: CALL_OW 274
21339: PPUSH
21340: LD_INT 2
21342: PPUSH
21343: LD_INT 55
21345: PPUSH
21346: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_siberit , 20 ) ;
21350: LD_VAR 0 1
21354: PPUSH
21355: CALL_OW 274
21359: PPUSH
21360: LD_INT 3
21362: PPUSH
21363: LD_INT 20
21365: PPUSH
21366: CALL_OW 277
// end ; ai_depot [ 3 ] :
21370: GO 21494
21372: LD_EXP 34
21376: PUSH
21377: LD_INT 3
21379: ARRAY
21380: DOUBLE
21381: EQUAL
21382: IFTRUE 21386
21384: GO 21493
21386: POP
// begin SetResourceType ( GetBase ( captured_building ) , mat_cans , 200 + Rand ( 0 , 7 ) * 10 ) ;
21387: LD_VAR 0 1
21391: PPUSH
21392: CALL_OW 274
21396: PPUSH
21397: LD_INT 1
21399: PPUSH
21400: LD_INT 200
21402: PUSH
21403: LD_INT 0
21405: PPUSH
21406: LD_INT 7
21408: PPUSH
21409: CALL_OW 12
21413: PUSH
21414: LD_INT 10
21416: MUL
21417: PLUS
21418: PPUSH
21419: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_oil , 400 + Rand ( 0 , 100 ) ) ;
21423: LD_VAR 0 1
21427: PPUSH
21428: CALL_OW 274
21432: PPUSH
21433: LD_INT 2
21435: PPUSH
21436: LD_INT 400
21438: PUSH
21439: LD_INT 0
21441: PPUSH
21442: LD_INT 100
21444: PPUSH
21445: CALL_OW 12
21449: PLUS
21450: PPUSH
21451: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_siberit , 80 + Rand ( 0 , 10 ) * 5 ) ;
21455: LD_VAR 0 1
21459: PPUSH
21460: CALL_OW 274
21464: PPUSH
21465: LD_INT 3
21467: PPUSH
21468: LD_INT 80
21470: PUSH
21471: LD_INT 0
21473: PPUSH
21474: LD_INT 10
21476: PPUSH
21477: CALL_OW 12
21481: PUSH
21482: LD_INT 5
21484: MUL
21485: PLUS
21486: PPUSH
21487: CALL_OW 277
// end ; end ;
21491: GO 21494
21493: POP
// end ; base = FindBase ( captured_building ) ;
21494: LD_ADDR_VAR 0 5
21498: PUSH
21499: LD_VAR 0 1
21503: PPUSH
21504: CALL 11416 0 1
21508: ST_TO_ADDR
// if base = 0 then
21509: LD_VAR 0 5
21513: PUSH
21514: LD_INT 0
21516: EQUAL
21517: IFFALSE 21521
// exit ;
21519: GO 21752
// if building_former_side = GetBaseSide ( base ) then
21521: LD_VAR 0 2
21525: PUSH
21526: LD_VAR 0 5
21530: PPUSH
21531: CALL 11268 0 1
21535: EQUAL
21536: IFFALSE 21619
// begin if captured_building in ai_all_buildings [ base ] then
21538: LD_VAR 0 1
21542: PUSH
21543: LD_EXP 44
21547: PUSH
21548: LD_VAR 0 5
21552: ARRAY
21553: IN
21554: IFFALSE 21617
// begin RemoveBuildingFromVariables ( base , captured_building ) ;
21556: LD_VAR 0 5
21560: PPUSH
21561: LD_VAR 0 1
21565: PPUSH
21566: CALL 9895 0 2
// temp_list = ai_captured_buildings [ base ] ^ captured_building ;
21570: LD_ADDR_VAR 0 4
21574: PUSH
21575: LD_EXP 78
21579: PUSH
21580: LD_VAR 0 5
21584: ARRAY
21585: PUSH
21586: LD_VAR 0 1
21590: ADD
21591: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
21592: LD_ADDR_EXP 78
21596: PUSH
21597: LD_EXP 78
21601: PPUSH
21602: LD_VAR 0 5
21606: PPUSH
21607: LD_VAR 0 4
21611: PPUSH
21612: CALL_OW 1
21616: ST_TO_ADDR
// end ; end else
21617: GO 21752
// begin if GetSide ( captured_building ) = GetBaseSide ( base ) then
21619: LD_VAR 0 1
21623: PPUSH
21624: CALL_OW 255
21628: PUSH
21629: LD_VAR 0 5
21633: PPUSH
21634: CALL 11268 0 1
21638: EQUAL
21639: IFFALSE 21752
// begin temp_list = ai_all_buildings [ base ] ^ captured_building ;
21641: LD_ADDR_VAR 0 4
21645: PUSH
21646: LD_EXP 44
21650: PUSH
21651: LD_VAR 0 5
21655: ARRAY
21656: PUSH
21657: LD_VAR 0 1
21661: ADD
21662: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
21663: LD_ADDR_EXP 44
21667: PUSH
21668: LD_EXP 44
21672: PPUSH
21673: LD_VAR 0 5
21677: PPUSH
21678: LD_VAR 0 4
21682: PPUSH
21683: CALL_OW 1
21687: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , captured_building , true ) ;
21688: LD_VAR 0 5
21692: PPUSH
21693: LD_VAR 0 1
21697: PPUSH
21698: LD_INT 1
21700: PPUSH
21701: CALL 5924 0 3
// temp_list = ai_captured_buildings [ base ] diff captured_building ;
21705: LD_ADDR_VAR 0 4
21709: PUSH
21710: LD_EXP 78
21714: PUSH
21715: LD_VAR 0 5
21719: ARRAY
21720: PUSH
21721: LD_VAR 0 1
21725: DIFF
21726: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
21727: LD_ADDR_EXP 78
21731: PUSH
21732: LD_EXP 78
21736: PPUSH
21737: LD_VAR 0 5
21741: PPUSH
21742: LD_VAR 0 4
21746: PPUSH
21747: CALL_OW 1
21751: ST_TO_ADDR
// end ; end ; end ;
21752: PPOPN 5
21754: END
// on UnitGoesToRed ( un ) do begin if un in ai_depot then
21755: LD_VAR 0 1
21759: PUSH
21760: LD_EXP 34
21764: IN
21765: IFFALSE 22080
// begin case un of ai_depot [ 1 ] :
21767: LD_VAR 0 1
21771: PUSH
21772: LD_EXP 34
21776: PUSH
21777: LD_INT 1
21779: ARRAY
21780: DOUBLE
21781: EQUAL
21782: IFTRUE 21786
21784: GO 21881
21786: POP
// begin SetResourceType ( GetBase ( un ) , mat_cans , 200 + Rand ( 0 , 7 ) * 10 ) ;
21787: LD_VAR 0 1
21791: PPUSH
21792: CALL_OW 274
21796: PPUSH
21797: LD_INT 1
21799: PPUSH
21800: LD_INT 200
21802: PUSH
21803: LD_INT 0
21805: PPUSH
21806: LD_INT 7
21808: PPUSH
21809: CALL_OW 12
21813: PUSH
21814: LD_INT 10
21816: MUL
21817: PLUS
21818: PPUSH
21819: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_oil , 0 ) ;
21823: LD_VAR 0 1
21827: PPUSH
21828: CALL_OW 274
21832: PPUSH
21833: LD_INT 2
21835: PPUSH
21836: LD_INT 0
21838: PPUSH
21839: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_siberit , 80 + Rand ( 0 , 10 ) * 5 ) ;
21843: LD_VAR 0 1
21847: PPUSH
21848: CALL_OW 274
21852: PPUSH
21853: LD_INT 3
21855: PPUSH
21856: LD_INT 80
21858: PUSH
21859: LD_INT 0
21861: PPUSH
21862: LD_INT 10
21864: PPUSH
21865: CALL_OW 12
21869: PUSH
21870: LD_INT 5
21872: MUL
21873: PLUS
21874: PPUSH
21875: CALL_OW 277
// end ; ai_depot [ 2 ] :
21879: GO 22080
21881: LD_EXP 34
21885: PUSH
21886: LD_INT 2
21888: ARRAY
21889: DOUBLE
21890: EQUAL
21891: IFTRUE 21895
21893: GO 21958
21895: POP
// begin SetResourceType ( GetBase ( un ) , mat_cans , 100 ) ;
21896: LD_VAR 0 1
21900: PPUSH
21901: CALL_OW 274
21905: PPUSH
21906: LD_INT 1
21908: PPUSH
21909: LD_INT 100
21911: PPUSH
21912: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_oil , 55 ) ;
21916: LD_VAR 0 1
21920: PPUSH
21921: CALL_OW 274
21925: PPUSH
21926: LD_INT 2
21928: PPUSH
21929: LD_INT 55
21931: PPUSH
21932: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_siberit , 20 ) ;
21936: LD_VAR 0 1
21940: PPUSH
21941: CALL_OW 274
21945: PPUSH
21946: LD_INT 3
21948: PPUSH
21949: LD_INT 20
21951: PPUSH
21952: CALL_OW 277
// end ; ai_depot [ 3 ] :
21956: GO 22080
21958: LD_EXP 34
21962: PUSH
21963: LD_INT 3
21965: ARRAY
21966: DOUBLE
21967: EQUAL
21968: IFTRUE 21972
21970: GO 22079
21972: POP
// begin SetResourceType ( GetBase ( un ) , mat_cans , 200 + Rand ( 0 , 7 ) * 10 ) ;
21973: LD_VAR 0 1
21977: PPUSH
21978: CALL_OW 274
21982: PPUSH
21983: LD_INT 1
21985: PPUSH
21986: LD_INT 200
21988: PUSH
21989: LD_INT 0
21991: PPUSH
21992: LD_INT 7
21994: PPUSH
21995: CALL_OW 12
21999: PUSH
22000: LD_INT 10
22002: MUL
22003: PLUS
22004: PPUSH
22005: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_oil , 400 + Rand ( 0 , 100 ) ) ;
22009: LD_VAR 0 1
22013: PPUSH
22014: CALL_OW 274
22018: PPUSH
22019: LD_INT 2
22021: PPUSH
22022: LD_INT 400
22024: PUSH
22025: LD_INT 0
22027: PPUSH
22028: LD_INT 100
22030: PPUSH
22031: CALL_OW 12
22035: PLUS
22036: PPUSH
22037: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_siberit , 80 + Rand ( 0 , 10 ) * 5 ) ;
22041: LD_VAR 0 1
22045: PPUSH
22046: CALL_OW 274
22050: PPUSH
22051: LD_INT 3
22053: PPUSH
22054: LD_INT 80
22056: PUSH
22057: LD_INT 0
22059: PPUSH
22060: LD_INT 10
22062: PPUSH
22063: CALL_OW 12
22067: PUSH
22068: LD_INT 5
22070: MUL
22071: PLUS
22072: PPUSH
22073: CALL_OW 277
// end ; end ;
22077: GO 22080
22079: POP
// end ; end ;
22080: PPOPN 1
22082: END
// export function GetHumansOutOfUnits ( un_list ) ; var i ; begin
22083: LD_INT 0
22085: PPUSH
22086: PPUSH
// result = [ ] ;
22087: LD_ADDR_VAR 0 2
22091: PUSH
22092: EMPTY
22093: ST_TO_ADDR
// for i in un_list do
22094: LD_ADDR_VAR 0 3
22098: PUSH
22099: LD_VAR 0 1
22103: PUSH
22104: FOR_IN
22105: IFFALSE 22181
// case GetType ( IsInUnit ( i ) ) of unit_building :
22107: LD_VAR 0 3
22111: PPUSH
22112: CALL_OW 310
22116: PPUSH
22117: CALL_OW 247
22121: PUSH
22122: LD_INT 3
22124: DOUBLE
22125: EQUAL
22126: IFTRUE 22130
22128: GO 22142
22130: POP
// ComExitBuilding ( i ) ; unit_vehicle :
22131: LD_VAR 0 3
22135: PPUSH
22136: CALL_OW 122
22140: GO 22179
22142: LD_INT 2
22144: DOUBLE
22145: EQUAL
22146: IFTRUE 22150
22148: GO 22162
22150: POP
// ComExitVehicle ( i ) ; else
22151: LD_VAR 0 3
22155: PPUSH
22156: CALL_OW 121
22160: GO 22179
22162: POP
// result = result ^ i ; end ;
22163: LD_ADDR_VAR 0 2
22167: PUSH
22168: LD_VAR 0 2
22172: PUSH
22173: LD_VAR 0 3
22177: ADD
22178: ST_TO_ADDR
22179: GO 22104
22181: POP
22182: POP
// end ;
22183: LD_VAR 0 2
22187: RET
// export function BaseUnderAttack ( base , attack_side ) ; var area , i , val , def_side , temp_list ; begin
22188: LD_INT 0
22190: PPUSH
22191: PPUSH
22192: PPUSH
22193: PPUSH
22194: PPUSH
22195: PPUSH
// result = false ;
22196: LD_ADDR_VAR 0 3
22200: PUSH
22201: LD_INT 0
22203: ST_TO_ADDR
// def_side = GetBaseSide ( base ) ;
22204: LD_ADDR_VAR 0 7
22208: PUSH
22209: LD_VAR 0 1
22213: PPUSH
22214: CALL 11268 0 1
22218: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
22219: LD_ADDR_VAR 0 4
22223: PUSH
22224: LD_VAR 0 1
22228: PPUSH
22229: CALL 11197 0 1
22233: ST_TO_ADDR
// if attack_side = def_side then
22234: LD_VAR 0 2
22238: PUSH
22239: LD_VAR 0 7
22243: EQUAL
22244: IFFALSE 22248
// exit ;
22246: GO 22767
// if attack_side = - 1 then
22248: LD_VAR 0 2
22252: PUSH
22253: LD_INT 1
22255: NEG
22256: EQUAL
22257: IFFALSE 22523
// begin if FilterAllUnits ( [ [ f_enemy , def_side ] , [ f_inarea , area ] ] ) > 0 then
22259: LD_INT 81
22261: PUSH
22262: LD_VAR 0 7
22266: PUSH
22267: EMPTY
22268: LIST
22269: LIST
22270: PUSH
22271: LD_INT 95
22273: PUSH
22274: LD_VAR 0 4
22278: PUSH
22279: EMPTY
22280: LIST
22281: LIST
22282: PUSH
22283: EMPTY
22284: LIST
22285: LIST
22286: PPUSH
22287: CALL_OW 69
22291: PUSH
22292: LD_INT 0
22294: GREATER
22295: IFFALSE 22307
// begin result = true ;
22297: LD_ADDR_VAR 0 3
22301: PUSH
22302: LD_INT 1
22304: ST_TO_ADDR
// exit ;
22305: GO 22767
// end ; val = true ;
22307: LD_ADDR_VAR 0 6
22311: PUSH
22312: LD_INT 1
22314: ST_TO_ADDR
// for i in ai_contact_time [ def_side ] do
22315: LD_ADDR_VAR 0 5
22319: PUSH
22320: LD_EXP 75
22324: PUSH
22325: LD_VAR 0 7
22329: ARRAY
22330: PUSH
22331: FOR_IN
22332: IFFALSE 22356
// if i < 0 0$10 then
22334: LD_VAR 0 5
22338: PUSH
22339: LD_INT 350
22341: LESS
22342: IFFALSE 22354
// begin val = false ;
22344: LD_ADDR_VAR 0 6
22348: PUSH
22349: LD_INT 0
22351: ST_TO_ADDR
// break ;
22352: GO 22356
// end ;
22354: GO 22331
22356: POP
22357: POP
// if ContactTime ( def_side ) >= 0 0$10 and val then
22358: LD_VAR 0 7
22362: PPUSH
22363: CALL_OW 462
22367: PUSH
22368: LD_INT 350
22370: GREATEREQUAL
22371: PUSH
22372: LD_VAR 0 6
22376: AND
22377: IFFALSE 22381
// exit ;
22379: GO 22767
// temp_list = [ ] ;
22381: LD_ADDR_VAR 0 8
22385: PUSH
22386: EMPTY
22387: ST_TO_ADDR
// for i in ( ai_bases diff base ) do
22388: LD_ADDR_VAR 0 5
22392: PUSH
22393: LD_EXP 58
22397: PUSH
22398: LD_VAR 0 1
22402: DIFF
22403: PUSH
22404: FOR_IN
22405: IFFALSE 22451
// temp_list = Insert ( temp_list , 1 , [ f_not , [ f_inarea , GetBaseArea ( i ) ] ] ) ;
22407: LD_ADDR_VAR 0 8
22411: PUSH
22412: LD_VAR 0 8
22416: PPUSH
22417: LD_INT 1
22419: PPUSH
22420: LD_INT 3
22422: PUSH
22423: LD_INT 95
22425: PUSH
22426: LD_VAR 0 5
22430: PPUSH
22431: CALL 11197 0 1
22435: PUSH
22436: EMPTY
22437: LIST
22438: LIST
22439: PUSH
22440: EMPTY
22441: LIST
22442: LIST
22443: PPUSH
22444: CALL_OW 2
22448: ST_TO_ADDR
22449: GO 22404
22451: POP
22452: POP
// temp_list = FilterAllUnits ( [ [ f_enemy , def_side ] , [ f_not , [ f_type , unit_building ] ] ] ^ temp_list ) ;
22453: LD_ADDR_VAR 0 8
22457: PUSH
22458: LD_INT 81
22460: PUSH
22461: LD_VAR 0 7
22465: PUSH
22466: EMPTY
22467: LIST
22468: LIST
22469: PUSH
22470: LD_INT 3
22472: PUSH
22473: LD_INT 21
22475: PUSH
22476: LD_INT 3
22478: PUSH
22479: EMPTY
22480: LIST
22481: LIST
22482: PUSH
22483: EMPTY
22484: LIST
22485: LIST
22486: PUSH
22487: EMPTY
22488: LIST
22489: LIST
22490: PUSH
22491: LD_VAR 0 8
22495: ADD
22496: PPUSH
22497: CALL_OW 69
22501: ST_TO_ADDR
// if not AnyNearBaseArea ( temp_list , base ) then
22502: LD_VAR 0 8
22506: PPUSH
22507: LD_VAR 0 1
22511: PPUSH
22512: CALL 22843 0 2
22516: NOT
22517: IFFALSE 22521
// exit ;
22519: GO 22767
// end else
22521: GO 22759
// begin if FilterAllUnits ( [ [ f_side , attack_side ] , [ f_inarea , area ] ] ) > 0 then
22523: LD_INT 22
22525: PUSH
22526: LD_VAR 0 2
22530: PUSH
22531: EMPTY
22532: LIST
22533: LIST
22534: PUSH
22535: LD_INT 95
22537: PUSH
22538: LD_VAR 0 4
22542: PUSH
22543: EMPTY
22544: LIST
22545: LIST
22546: PUSH
22547: EMPTY
22548: LIST
22549: LIST
22550: PPUSH
22551: CALL_OW 69
22555: PUSH
22556: LD_INT 0
22558: GREATER
22559: IFFALSE 22571
// begin result = true ;
22561: LD_ADDR_VAR 0 3
22565: PUSH
22566: LD_INT 1
22568: ST_TO_ADDR
// exit ;
22569: GO 22767
// end ; if ContactTime ( [ def_side , attack_side ] ) >= 0 0$10 and ai_contact_time [ def_side ] [ attack_side ] >= 0 0$10 then
22571: LD_VAR 0 7
22575: PUSH
22576: LD_VAR 0 2
22580: PUSH
22581: EMPTY
22582: LIST
22583: LIST
22584: PPUSH
22585: CALL_OW 462
22589: PUSH
22590: LD_INT 350
22592: GREATEREQUAL
22593: PUSH
22594: LD_EXP 75
22598: PUSH
22599: LD_VAR 0 7
22603: ARRAY
22604: PUSH
22605: LD_VAR 0 2
22609: ARRAY
22610: PUSH
22611: LD_INT 350
22613: GREATEREQUAL
22614: AND
22615: IFFALSE 22619
// exit ;
22617: GO 22767
// temp_list = [ ] ;
22619: LD_ADDR_VAR 0 8
22623: PUSH
22624: EMPTY
22625: ST_TO_ADDR
// for i in ( ai_bases diff base ) do
22626: LD_ADDR_VAR 0 5
22630: PUSH
22631: LD_EXP 58
22635: PUSH
22636: LD_VAR 0 1
22640: DIFF
22641: PUSH
22642: FOR_IN
22643: IFFALSE 22689
// temp_list = Insert ( temp_list , 1 , [ f_not , [ f_inarea , GetBaseArea ( i ) ] ] ) ;
22645: LD_ADDR_VAR 0 8
22649: PUSH
22650: LD_VAR 0 8
22654: PPUSH
22655: LD_INT 1
22657: PPUSH
22658: LD_INT 3
22660: PUSH
22661: LD_INT 95
22663: PUSH
22664: LD_VAR 0 5
22668: PPUSH
22669: CALL 11197 0 1
22673: PUSH
22674: EMPTY
22675: LIST
22676: LIST
22677: PUSH
22678: EMPTY
22679: LIST
22680: LIST
22681: PPUSH
22682: CALL_OW 2
22686: ST_TO_ADDR
22687: GO 22642
22689: POP
22690: POP
// temp_list = FilterAllUnits ( [ [ f_side , attack_side ] , [ f_not , [ f_type , unit_building ] ] ] ^ temp_list ) ;
22691: LD_ADDR_VAR 0 8
22695: PUSH
22696: LD_INT 22
22698: PUSH
22699: LD_VAR 0 2
22703: PUSH
22704: EMPTY
22705: LIST
22706: LIST
22707: PUSH
22708: LD_INT 3
22710: PUSH
22711: LD_INT 21
22713: PUSH
22714: LD_INT 3
22716: PUSH
22717: EMPTY
22718: LIST
22719: LIST
22720: PUSH
22721: EMPTY
22722: LIST
22723: LIST
22724: PUSH
22725: EMPTY
22726: LIST
22727: LIST
22728: PUSH
22729: LD_VAR 0 8
22733: ADD
22734: PPUSH
22735: CALL_OW 69
22739: ST_TO_ADDR
// if not AnyNearBaseArea ( temp_list , base ) then
22740: LD_VAR 0 8
22744: PPUSH
22745: LD_VAR 0 1
22749: PPUSH
22750: CALL 22843 0 2
22754: NOT
22755: IFFALSE 22759
// exit ;
22757: GO 22767
// end ; result = true ;
22759: LD_ADDR_VAR 0 3
22763: PUSH
22764: LD_INT 1
22766: ST_TO_ADDR
// end ;
22767: LD_VAR 0 3
22771: RET
// export function ListFilterNearArea ( list , area ) ; var i ; begin
22772: LD_INT 0
22774: PPUSH
22775: PPUSH
// result = [ ] ;
22776: LD_ADDR_VAR 0 3
22780: PUSH
22781: EMPTY
22782: ST_TO_ADDR
// for i in list do
22783: LD_ADDR_VAR 0 4
22787: PUSH
22788: LD_VAR 0 1
22792: PUSH
22793: FOR_IN
22794: IFFALSE 22836
// if GetDistUnitArea ( i , area ) <= ai_near_base_dist then
22796: LD_VAR 0 4
22800: PPUSH
22801: LD_VAR 0 2
22805: PPUSH
22806: CALL_OW 299
22810: PUSH
22811: LD_EXP 52
22815: LESSEQUAL
22816: IFFALSE 22834
// result = result ^ i ;
22818: LD_ADDR_VAR 0 3
22822: PUSH
22823: LD_VAR 0 3
22827: PUSH
22828: LD_VAR 0 4
22832: ADD
22833: ST_TO_ADDR
22834: GO 22793
22836: POP
22837: POP
// end ;
22838: LD_VAR 0 3
22842: RET
// function AnyNearBaseArea ( list , base ) ; var i , area ; begin
22843: LD_INT 0
22845: PPUSH
22846: PPUSH
22847: PPUSH
// result = false ;
22848: LD_ADDR_VAR 0 3
22852: PUSH
22853: LD_INT 0
22855: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
22856: LD_ADDR_VAR 0 5
22860: PUSH
22861: LD_VAR 0 2
22865: PPUSH
22866: CALL 11197 0 1
22870: ST_TO_ADDR
// for i in list do
22871: LD_ADDR_VAR 0 4
22875: PUSH
22876: LD_VAR 0 1
22880: PUSH
22881: FOR_IN
22882: IFFALSE 22918
// if GetDistUnitArea ( i , area ) <= ai_near_base_dist then
22884: LD_VAR 0 4
22888: PPUSH
22889: LD_VAR 0 5
22893: PPUSH
22894: CALL_OW 299
22898: PUSH
22899: LD_EXP 52
22903: LESSEQUAL
22904: IFFALSE 22916
// begin result = true ;
22906: LD_ADDR_VAR 0 3
22910: PUSH
22911: LD_INT 1
22913: ST_TO_ADDR
// break ;
22914: GO 22918
// end ;
22916: GO 22881
22918: POP
22919: POP
// end ;
22920: LD_VAR 0 3
22924: RET
// on Command ( com ) do var i , temp_list , hex_list , un , k , target_hex ;
22925: LD_INT 0
22927: PPUSH
22928: PPUSH
22929: PPUSH
22930: PPUSH
22931: PPUSH
22932: PPUSH
// begin CheckCamerasOnCommand ( com ) ;
22933: LD_VAR 0 1
22937: PPUSH
22938: CALL 43798 0 1
// if com = 124 then
22942: LD_VAR 0 1
22946: PUSH
22947: LD_INT 124
22949: EQUAL
22950: IFFALSE 23361
// begin for i in FilterAllUnits ( [ f_side , you ] ) do
22952: LD_ADDR_VAR 0 2
22956: PUSH
22957: LD_INT 22
22959: PUSH
22960: LD_EXP 2
22964: PUSH
22965: EMPTY
22966: LIST
22967: LIST
22968: PPUSH
22969: CALL_OW 69
22973: PUSH
22974: FOR_IN
22975: IFFALSE 23359
// if IsSelected ( i ) and HasTask ( i ) then
22977: LD_VAR 0 2
22981: PPUSH
22982: CALL_OW 306
22986: PUSH
22987: LD_VAR 0 2
22991: PPUSH
22992: CALL_OW 314
22996: AND
22997: IFFALSE 23357
// begin target_hex = [ ] ;
22999: LD_ADDR_VAR 0 7
23003: PUSH
23004: EMPTY
23005: ST_TO_ADDR
// for k in GetTaskList ( i ) do
23006: LD_ADDR_VAR 0 6
23010: PUSH
23011: LD_VAR 0 2
23015: PPUSH
23016: CALL_OW 437
23020: PUSH
23021: FOR_IN
23022: IFFALSE 23069
// if k [ 1 ] = | then
23024: LD_VAR 0 6
23028: PUSH
23029: LD_INT 1
23031: ARRAY
23032: PUSH
23033: LD_STRING |
23035: EQUAL
23036: IFFALSE 23067
// begin target_hex = [ k [ 2 ] , k [ 3 ] ] ;
23038: LD_ADDR_VAR 0 7
23042: PUSH
23043: LD_VAR 0 6
23047: PUSH
23048: LD_INT 2
23050: ARRAY
23051: PUSH
23052: LD_VAR 0 6
23056: PUSH
23057: LD_INT 3
23059: ARRAY
23060: PUSH
23061: EMPTY
23062: LIST
23063: LIST
23064: ST_TO_ADDR
// break ;
23065: GO 23069
// end ;
23067: GO 23021
23069: POP
23070: POP
// if target_hex > 0 then
23071: LD_VAR 0 7
23075: PUSH
23076: LD_INT 0
23078: GREATER
23079: IFFALSE 23357
// begin hex_list = target_hex ;
23081: LD_ADDR_VAR 0 4
23085: PUSH
23086: LD_VAR 0 7
23090: ST_TO_ADDR
// temp_list = [ ] ;
23091: LD_ADDR_VAR 0 3
23095: PUSH
23096: EMPTY
23097: ST_TO_ADDR
// for k = 0 to 5 do
23098: LD_ADDR_VAR 0 6
23102: PUSH
23103: DOUBLE
23104: LD_INT 0
23106: DEC
23107: ST_TO_ADDR
23108: LD_INT 5
23110: PUSH
23111: FOR_TO
23112: IFFALSE 23182
// temp_list = Insert ( temp_list , 1 , [ ShiftX ( hex_list [ 1 ] , k , 1 ) , ShiftY ( hex_list [ 2 ] , k , 1 ) ] ) ;
23114: LD_ADDR_VAR 0 3
23118: PUSH
23119: LD_VAR 0 3
23123: PPUSH
23124: LD_INT 1
23126: PPUSH
23127: LD_VAR 0 4
23131: PUSH
23132: LD_INT 1
23134: ARRAY
23135: PPUSH
23136: LD_VAR 0 6
23140: PPUSH
23141: LD_INT 1
23143: PPUSH
23144: CALL_OW 272
23148: PUSH
23149: LD_VAR 0 4
23153: PUSH
23154: LD_INT 2
23156: ARRAY
23157: PPUSH
23158: LD_VAR 0 6
23162: PPUSH
23163: LD_INT 1
23165: PPUSH
23166: CALL_OW 273
23170: PUSH
23171: EMPTY
23172: LIST
23173: LIST
23174: PPUSH
23175: CALL_OW 2
23179: ST_TO_ADDR
23180: GO 23111
23182: POP
23183: POP
// hex_list = [ hex_list ] ^ temp_list ;
23184: LD_ADDR_VAR 0 4
23188: PUSH
23189: LD_VAR 0 4
23193: PUSH
23194: EMPTY
23195: LIST
23196: PUSH
23197: LD_VAR 0 3
23201: ADD
23202: ST_TO_ADDR
// temp_list = [ ] ;
23203: LD_ADDR_VAR 0 3
23207: PUSH
23208: EMPTY
23209: ST_TO_ADDR
// for k in hex_list do
23210: LD_ADDR_VAR 0 6
23214: PUSH
23215: LD_VAR 0 4
23219: PUSH
23220: FOR_IN
23221: IFFALSE 23355
// begin un = HexInfo ( k [ 1 ] , k [ 2 ] ) ;
23223: LD_ADDR_VAR 0 5
23227: PUSH
23228: LD_VAR 0 6
23232: PUSH
23233: LD_INT 1
23235: ARRAY
23236: PPUSH
23237: LD_VAR 0 6
23241: PUSH
23242: LD_INT 2
23244: ARRAY
23245: PPUSH
23246: CALL_OW 428
23250: ST_TO_ADDR
// if un > 0 and not un in temp_list then
23251: LD_VAR 0 5
23255: PUSH
23256: LD_INT 0
23258: GREATER
23259: PUSH
23260: LD_VAR 0 5
23264: PUSH
23265: LD_VAR 0 3
23269: IN
23270: NOT
23271: AND
23272: IFFALSE 23353
// begin ai_attack_ground_info_initial = Insert ( ai_attack_ground_info_initial , 1 , [ i , un , GetSide ( un ) , target_hex [ 1 ] , target_hex [ 2 ] ] ) ;
23274: LD_ADDR_EXP 76
23278: PUSH
23279: LD_EXP 76
23283: PPUSH
23284: LD_INT 1
23286: PPUSH
23287: LD_VAR 0 2
23291: PUSH
23292: LD_VAR 0 5
23296: PUSH
23297: LD_VAR 0 5
23301: PPUSH
23302: CALL_OW 255
23306: PUSH
23307: LD_VAR 0 7
23311: PUSH
23312: LD_INT 1
23314: ARRAY
23315: PUSH
23316: LD_VAR 0 7
23320: PUSH
23321: LD_INT 2
23323: ARRAY
23324: PUSH
23325: EMPTY
23326: LIST
23327: LIST
23328: LIST
23329: LIST
23330: LIST
23331: PPUSH
23332: CALL_OW 2
23336: ST_TO_ADDR
// temp_list = temp_list ^ un ;
23337: LD_ADDR_VAR 0 3
23341: PUSH
23342: LD_VAR 0 3
23346: PUSH
23347: LD_VAR 0 5
23351: ADD
23352: ST_TO_ADDR
// end ; end ;
23353: GO 23220
23355: POP
23356: POP
// end ; end ;
23357: GO 22974
23359: POP
23360: POP
// end ; end ;
23361: PPOPN 7
23363: END
// every 0 0$1 + 0 0$0.1 do var a , b , temp_list , temp_list_2 , yup , i , t ;
23364: GO 23366
23366: DISABLE
23367: LD_INT 0
23369: PPUSH
23370: PPUSH
23371: PPUSH
23372: PPUSH
23373: PPUSH
23374: PPUSH
23375: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
23376: LD_INT 18
23378: PPUSH
23379: CALL_OW 67
// i = 1 ;
23383: LD_ADDR_VAR 0 6
23387: PUSH
23388: LD_INT 1
23390: ST_TO_ADDR
// while i <= ai_attack_ground_info_initial do
23391: LD_VAR 0 6
23395: PUSH
23396: LD_EXP 76
23400: LESSEQUAL
23401: IFFALSE 23564
// begin yup = false ;
23403: LD_ADDR_VAR 0 5
23407: PUSH
23408: LD_INT 0
23410: ST_TO_ADDR
// for t in GetTaskList ( ai_attack_ground_info_initial [ i ] [ 1 ] ) do
23411: LD_ADDR_VAR 0 7
23415: PUSH
23416: LD_EXP 76
23420: PUSH
23421: LD_VAR 0 6
23425: ARRAY
23426: PUSH
23427: LD_INT 1
23429: ARRAY
23430: PPUSH
23431: CALL_OW 437
23435: PUSH
23436: FOR_IN
23437: IFFALSE 23517
// if t [ 1 ] = | then
23439: LD_VAR 0 7
23443: PUSH
23444: LD_INT 1
23446: ARRAY
23447: PUSH
23448: LD_STRING |
23450: EQUAL
23451: IFFALSE 23515
// if t [ 2 ] = ai_attack_ground_info_initial [ i ] [ 4 ] and t [ 3 ] = ai_attack_ground_info_initial [ i ] [ 5 ] then
23453: LD_VAR 0 7
23457: PUSH
23458: LD_INT 2
23460: ARRAY
23461: PUSH
23462: LD_EXP 76
23466: PUSH
23467: LD_VAR 0 6
23471: ARRAY
23472: PUSH
23473: LD_INT 4
23475: ARRAY
23476: EQUAL
23477: PUSH
23478: LD_VAR 0 7
23482: PUSH
23483: LD_INT 3
23485: ARRAY
23486: PUSH
23487: LD_EXP 76
23491: PUSH
23492: LD_VAR 0 6
23496: ARRAY
23497: PUSH
23498: LD_INT 5
23500: ARRAY
23501: EQUAL
23502: AND
23503: IFFALSE 23515
// begin yup = true ;
23505: LD_ADDR_VAR 0 5
23509: PUSH
23510: LD_INT 1
23512: ST_TO_ADDR
// break ;
23513: GO 23517
// end ;
23515: GO 23436
23517: POP
23518: POP
// if not yup then
23519: LD_VAR 0 5
23523: NOT
23524: IFFALSE 23548
// begin ai_attack_ground_info_initial = Delete ( ai_attack_ground_info_initial , i ) ;
23526: LD_ADDR_EXP 76
23530: PUSH
23531: LD_EXP 76
23535: PPUSH
23536: LD_VAR 0 6
23540: PPUSH
23541: CALL_OW 3
23545: ST_TO_ADDR
// continue ;
23546: GO 23391
// end ; i = i + 1 ;
23548: LD_ADDR_VAR 0 6
23552: PUSH
23553: LD_VAR 0 6
23557: PUSH
23558: LD_INT 1
23560: PLUS
23561: ST_TO_ADDR
// end ;
23562: GO 23391
// i = 1 ;
23564: LD_ADDR_VAR 0 6
23568: PUSH
23569: LD_INT 1
23571: ST_TO_ADDR
// while i <= ai_attack_ground_info_sustain do
23572: LD_VAR 0 6
23576: PUSH
23577: LD_EXP 77
23581: LESSEQUAL
23582: IFFALSE 23745
// begin yup = false ;
23584: LD_ADDR_VAR 0 5
23588: PUSH
23589: LD_INT 0
23591: ST_TO_ADDR
// for t in GetTaskList ( ai_attack_ground_info_sustain [ i ] [ 1 ] ) do
23592: LD_ADDR_VAR 0 7
23596: PUSH
23597: LD_EXP 77
23601: PUSH
23602: LD_VAR 0 6
23606: ARRAY
23607: PUSH
23608: LD_INT 1
23610: ARRAY
23611: PPUSH
23612: CALL_OW 437
23616: PUSH
23617: FOR_IN
23618: IFFALSE 23698
// if t [ 1 ] = | then
23620: LD_VAR 0 7
23624: PUSH
23625: LD_INT 1
23627: ARRAY
23628: PUSH
23629: LD_STRING |
23631: EQUAL
23632: IFFALSE 23696
// if t [ 2 ] = ai_attack_ground_info_sustain [ i ] [ 4 ] and t [ 3 ] = ai_attack_ground_info_sustain [ i ] [ 5 ] then
23634: LD_VAR 0 7
23638: PUSH
23639: LD_INT 2
23641: ARRAY
23642: PUSH
23643: LD_EXP 77
23647: PUSH
23648: LD_VAR 0 6
23652: ARRAY
23653: PUSH
23654: LD_INT 4
23656: ARRAY
23657: EQUAL
23658: PUSH
23659: LD_VAR 0 7
23663: PUSH
23664: LD_INT 3
23666: ARRAY
23667: PUSH
23668: LD_EXP 77
23672: PUSH
23673: LD_VAR 0 6
23677: ARRAY
23678: PUSH
23679: LD_INT 5
23681: ARRAY
23682: EQUAL
23683: AND
23684: IFFALSE 23696
// begin yup = true ;
23686: LD_ADDR_VAR 0 5
23690: PUSH
23691: LD_INT 1
23693: ST_TO_ADDR
// break ;
23694: GO 23698
// end ;
23696: GO 23617
23698: POP
23699: POP
// if not yup then
23700: LD_VAR 0 5
23704: NOT
23705: IFFALSE 23729
// begin ai_attack_ground_info_sustain = Delete ( ai_attack_ground_info_sustain , i ) ;
23707: LD_ADDR_EXP 77
23711: PUSH
23712: LD_EXP 77
23716: PPUSH
23717: LD_VAR 0 6
23721: PPUSH
23722: CALL_OW 3
23726: ST_TO_ADDR
// continue ;
23727: GO 23572
// end ; i = i + 1 ;
23729: LD_ADDR_VAR 0 6
23733: PUSH
23734: LD_VAR 0 6
23738: PUSH
23739: LD_INT 1
23741: PLUS
23742: ST_TO_ADDR
// end ;
23743: GO 23572
// temp_list = ai_contact_time ;
23745: LD_ADDR_VAR 0 3
23749: PUSH
23750: LD_EXP 75
23754: ST_TO_ADDR
// for a = 1 to temp_list do
23755: LD_ADDR_VAR 0 1
23759: PUSH
23760: DOUBLE
23761: LD_INT 1
23763: DEC
23764: ST_TO_ADDR
23765: LD_VAR 0 3
23769: PUSH
23770: FOR_TO
23771: IFFALSE 23897
// for b = 1 to temp_list [ a ] do
23773: LD_ADDR_VAR 0 2
23777: PUSH
23778: DOUBLE
23779: LD_INT 1
23781: DEC
23782: ST_TO_ADDR
23783: LD_VAR 0 3
23787: PUSH
23788: LD_VAR 0 1
23792: ARRAY
23793: PUSH
23794: FOR_TO
23795: IFFALSE 23893
// if temp_list [ a ] [ b ] < 100000 then
23797: LD_VAR 0 3
23801: PUSH
23802: LD_VAR 0 1
23806: ARRAY
23807: PUSH
23808: LD_VAR 0 2
23812: ARRAY
23813: PUSH
23814: LD_INT 100000
23816: LESS
23817: IFFALSE 23891
// begin temp_list_2 = Replace ( ai_contact_time [ a ] , b , temp_list [ a ] [ b ] + 0 0$0.5 ) ;
23819: LD_ADDR_VAR 0 4
23823: PUSH
23824: LD_EXP 75
23828: PUSH
23829: LD_VAR 0 1
23833: ARRAY
23834: PPUSH
23835: LD_VAR 0 2
23839: PPUSH
23840: LD_VAR 0 3
23844: PUSH
23845: LD_VAR 0 1
23849: ARRAY
23850: PUSH
23851: LD_VAR 0 2
23855: ARRAY
23856: PUSH
23857: LD_INT 18
23859: PLUS
23860: PPUSH
23861: CALL_OW 1
23865: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a , temp_list_2 ) ;
23866: LD_ADDR_EXP 75
23870: PUSH
23871: LD_EXP 75
23875: PPUSH
23876: LD_VAR 0 1
23880: PPUSH
23881: LD_VAR 0 4
23885: PPUSH
23886: CALL_OW 1
23890: ST_TO_ADDR
// end ;
23891: GO 23794
23893: POP
23894: POP
23895: GO 23770
23897: POP
23898: POP
// for a in ai_attack_ground_info_initial do
23899: LD_ADDR_VAR 0 1
23903: PUSH
23904: LD_EXP 76
23908: PUSH
23909: FOR_IN
23910: IFFALSE 24116
// begin if IsDead ( a [ 2 ] ) or UnitShoot ( a [ 2 ] ) = a [ 1 ] then
23912: LD_VAR 0 1
23916: PUSH
23917: LD_INT 2
23919: ARRAY
23920: PPUSH
23921: CALL_OW 301
23925: PUSH
23926: LD_VAR 0 1
23930: PUSH
23931: LD_INT 2
23933: ARRAY
23934: PPUSH
23935: CALL_OW 504
23939: PUSH
23940: LD_VAR 0 1
23944: PUSH
23945: LD_INT 1
23947: ARRAY
23948: EQUAL
23949: OR
23950: IFFALSE 24114
// begin temp_list = Replace ( ai_contact_time [ you ] , a [ 3 ] , 0 ) ;
23952: LD_ADDR_VAR 0 3
23956: PUSH
23957: LD_EXP 75
23961: PUSH
23962: LD_EXP 2
23966: ARRAY
23967: PPUSH
23968: LD_VAR 0 1
23972: PUSH
23973: LD_INT 3
23975: ARRAY
23976: PPUSH
23977: LD_INT 0
23979: PPUSH
23980: CALL_OW 1
23984: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , you , temp_list ) ;
23985: LD_ADDR_EXP 75
23989: PUSH
23990: LD_EXP 75
23994: PPUSH
23995: LD_EXP 2
23999: PPUSH
24000: LD_VAR 0 3
24004: PPUSH
24005: CALL_OW 1
24009: ST_TO_ADDR
// temp_list = Replace ( ai_contact_time [ a [ 3 ] ] , you , 0 ) ;
24010: LD_ADDR_VAR 0 3
24014: PUSH
24015: LD_EXP 75
24019: PUSH
24020: LD_VAR 0 1
24024: PUSH
24025: LD_INT 3
24027: ARRAY
24028: ARRAY
24029: PPUSH
24030: LD_EXP 2
24034: PPUSH
24035: LD_INT 0
24037: PPUSH
24038: CALL_OW 1
24042: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a [ 3 ] , temp_list ) ;
24043: LD_ADDR_EXP 75
24047: PUSH
24048: LD_EXP 75
24052: PPUSH
24053: LD_VAR 0 1
24057: PUSH
24058: LD_INT 3
24060: ARRAY
24061: PPUSH
24062: LD_VAR 0 3
24066: PPUSH
24067: CALL_OW 1
24071: ST_TO_ADDR
// ai_attack_ground_info_initial = ai_attack_ground_info_initial diff [ a ] ;
24072: LD_ADDR_EXP 76
24076: PUSH
24077: LD_EXP 76
24081: PUSH
24082: LD_VAR 0 1
24086: PUSH
24087: EMPTY
24088: LIST
24089: DIFF
24090: ST_TO_ADDR
// ai_attack_ground_info_sustain = Insert ( ai_attack_ground_info_sustain , 1 , a ) ;
24091: LD_ADDR_EXP 77
24095: PUSH
24096: LD_EXP 77
24100: PPUSH
24101: LD_INT 1
24103: PPUSH
24104: LD_VAR 0 1
24108: PPUSH
24109: CALL_OW 2
24113: ST_TO_ADDR
// end ; end ;
24114: GO 23909
24116: POP
24117: POP
// for a in ai_attack_ground_info_sustain do
24118: LD_ADDR_VAR 0 1
24122: PUSH
24123: LD_EXP 77
24127: PUSH
24128: FOR_IN
24129: IFFALSE 24253
// begin temp_list = Replace ( ai_contact_time [ you ] , a [ 3 ] , 0 ) ;
24131: LD_ADDR_VAR 0 3
24135: PUSH
24136: LD_EXP 75
24140: PUSH
24141: LD_EXP 2
24145: ARRAY
24146: PPUSH
24147: LD_VAR 0 1
24151: PUSH
24152: LD_INT 3
24154: ARRAY
24155: PPUSH
24156: LD_INT 0
24158: PPUSH
24159: CALL_OW 1
24163: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , you , temp_list ) ;
24164: LD_ADDR_EXP 75
24168: PUSH
24169: LD_EXP 75
24173: PPUSH
24174: LD_EXP 2
24178: PPUSH
24179: LD_VAR 0 3
24183: PPUSH
24184: CALL_OW 1
24188: ST_TO_ADDR
// temp_list = Replace ( ai_contact_time [ a [ 3 ] ] , you , 0 ) ;
24189: LD_ADDR_VAR 0 3
24193: PUSH
24194: LD_EXP 75
24198: PUSH
24199: LD_VAR 0 1
24203: PUSH
24204: LD_INT 3
24206: ARRAY
24207: ARRAY
24208: PPUSH
24209: LD_EXP 2
24213: PPUSH
24214: LD_INT 0
24216: PPUSH
24217: CALL_OW 1
24221: ST_TO_ADDR
// ai_contact_time = Replace ( ai_contact_time , a [ 3 ] , temp_list ) ;
24222: LD_ADDR_EXP 75
24226: PUSH
24227: LD_EXP 75
24231: PPUSH
24232: LD_VAR 0 1
24236: PUSH
24237: LD_INT 3
24239: ARRAY
24240: PPUSH
24241: LD_VAR 0 3
24245: PPUSH
24246: CALL_OW 1
24250: ST_TO_ADDR
// end ;
24251: GO 24128
24253: POP
24254: POP
// until false ;
24255: LD_INT 0
24257: IFFALSE 23376
// end ;
24259: PPOPN 7
24261: END
// every 0 0$1 do var side , i , mechanics_list , temp_list , taken_vehicles , temp_list_3 , temp_unit , vehicles_list , allowed_to_repair_vehicles ; var under_attack , free_parking_spots , k , ready_to_attack , base , area , free_spaces , temp_list_2 , remote_mechanics ; var destroy_gensher_base , temp_list_4 , temp_list_5 , n , a ; var remote_driver_vehicles ;
24262: GO 24264
24264: DISABLE
24265: LD_INT 0
24267: PPUSH
24268: PPUSH
24269: PPUSH
24270: PPUSH
24271: PPUSH
24272: PPUSH
24273: PPUSH
24274: PPUSH
24275: PPUSH
24276: PPUSH
24277: PPUSH
24278: PPUSH
24279: PPUSH
24280: PPUSH
24281: PPUSH
24282: PPUSH
24283: PPUSH
24284: PPUSH
24285: PPUSH
24286: PPUSH
24287: PPUSH
24288: PPUSH
24289: PPUSH
24290: PPUSH
// begin remote_driver_vehicles = [ [ ] , [ ] , [ ] ] ;
24291: LD_ADDR_VAR 0 24
24295: PUSH
24296: EMPTY
24297: PUSH
24298: EMPTY
24299: PUSH
24300: EMPTY
24301: PUSH
24302: EMPTY
24303: LIST
24304: LIST
24305: LIST
24306: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
24307: LD_INT 35
24309: PPUSH
24310: CALL_OW 67
// for base in ai_bases do
24314: LD_ADDR_VAR 0 14
24318: PUSH
24319: LD_EXP 58
24323: PUSH
24324: FOR_IN
24325: IFFALSE 28939
// begin side = GetBaseSide ( base ) ;
24327: LD_ADDR_VAR 0 1
24331: PUSH
24332: LD_VAR 0 14
24336: PPUSH
24337: CALL 11268 0 1
24341: ST_TO_ADDR
// under_attack = BaseUnderAttack ( base , - 1 ) ;
24342: LD_ADDR_VAR 0 10
24346: PUSH
24347: LD_VAR 0 14
24351: PPUSH
24352: LD_INT 1
24354: NEG
24355: PPUSH
24356: CALL 22188 0 2
24360: ST_TO_ADDR
// ready_to_attack = not under_attack ;
24361: LD_ADDR_VAR 0 13
24365: PUSH
24366: LD_VAR 0 10
24370: NOT
24371: ST_TO_ADDR
// if base = 1 and GetAttitude ( americans , you_alt ) = att_enemy and FilterAllUnits ( [ [ f_inarea , Gensher_base ] , [ f_type , unit_building ] ] ) > 0 then
24372: LD_VAR 0 14
24376: PUSH
24377: LD_INT 1
24379: EQUAL
24380: PUSH
24381: LD_EXP 6
24385: PPUSH
24386: LD_EXP 5
24390: PPUSH
24391: CALL_OW 81
24395: PUSH
24396: LD_INT 2
24398: EQUAL
24399: AND
24400: PUSH
24401: LD_INT 95
24403: PUSH
24404: LD_INT 7
24406: PUSH
24407: EMPTY
24408: LIST
24409: LIST
24410: PUSH
24411: LD_INT 21
24413: PUSH
24414: LD_INT 3
24416: PUSH
24417: EMPTY
24418: LIST
24419: LIST
24420: PUSH
24421: EMPTY
24422: LIST
24423: LIST
24424: PPUSH
24425: CALL_OW 69
24429: PUSH
24430: LD_INT 0
24432: GREATER
24433: AND
24434: IFFALSE 24446
// destroy_gensher_base = true else
24436: LD_ADDR_VAR 0 19
24440: PUSH
24441: LD_INT 1
24443: ST_TO_ADDR
24444: GO 24454
// destroy_gensher_base = false ;
24446: LD_ADDR_VAR 0 19
24450: PUSH
24451: LD_INT 0
24453: ST_TO_ADDR
// mechanics_list = ai_mechanics_defend [ base ] diff ai_heal_these_humans [ base ] ;
24454: LD_ADDR_VAR 0 3
24458: PUSH
24459: LD_EXP 31
24463: PUSH
24464: LD_VAR 0 14
24468: ARRAY
24469: PUSH
24470: LD_EXP 43
24474: PUSH
24475: LD_VAR 0 14
24479: ARRAY
24480: DIFF
24481: ST_TO_ADDR
// remote_mechanics = [ ] ;
24482: LD_ADDR_VAR 0 18
24486: PUSH
24487: EMPTY
24488: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
24489: LD_ADDR_VAR 0 4
24493: PUSH
24494: LD_EXP 43
24498: PUSH
24499: LD_VAR 0 14
24503: ARRAY
24504: ST_TO_ADDR
// i = 1 ;
24505: LD_ADDR_VAR 0 2
24509: PUSH
24510: LD_INT 1
24512: ST_TO_ADDR
// while i <= mechanics_list do
24513: LD_VAR 0 2
24517: PUSH
24518: LD_VAR 0 3
24522: LESSEQUAL
24523: IFFALSE 24606
// begin if GetLives ( mechanics_list [ i ] ) <= 900 then
24525: LD_VAR 0 3
24529: PUSH
24530: LD_VAR 0 2
24534: ARRAY
24535: PPUSH
24536: CALL_OW 256
24540: PUSH
24541: LD_INT 900
24543: LESSEQUAL
24544: IFFALSE 24590
// begin temp_list = temp_list ^ mechanics_list [ i ] ;
24546: LD_ADDR_VAR 0 4
24550: PUSH
24551: LD_VAR 0 4
24555: PUSH
24556: LD_VAR 0 3
24560: PUSH
24561: LD_VAR 0 2
24565: ARRAY
24566: ADD
24567: ST_TO_ADDR
// mechanics_list = Delete ( mechanics_list , i ) ;
24568: LD_ADDR_VAR 0 3
24572: PUSH
24573: LD_VAR 0 3
24577: PPUSH
24578: LD_VAR 0 2
24582: PPUSH
24583: CALL_OW 3
24587: ST_TO_ADDR
// continue ;
24588: GO 24513
// end ; i = i + 1 ;
24590: LD_ADDR_VAR 0 2
24594: PUSH
24595: LD_VAR 0 2
24599: PUSH
24600: LD_INT 1
24602: PLUS
24603: ST_TO_ADDR
// end ;
24604: GO 24513
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
24606: LD_ADDR_EXP 43
24610: PUSH
24611: LD_EXP 43
24615: PPUSH
24616: LD_VAR 0 14
24620: PPUSH
24621: LD_VAR 0 4
24625: PPUSH
24626: CALL_OW 1
24630: ST_TO_ADDR
// if ai_control_tower [ base ] > 0 then
24631: LD_EXP 56
24635: PUSH
24636: LD_VAR 0 14
24640: ARRAY
24641: PUSH
24642: LD_INT 0
24644: GREATER
24645: IFFALSE 25583
// begin temp_list = remote_driver_vehicles [ base ] ;
24647: LD_ADDR_VAR 0 4
24651: PUSH
24652: LD_VAR 0 24
24656: PUSH
24657: LD_VAR 0 14
24661: ARRAY
24662: ST_TO_ADDR
// vehicles_list = [ ] ;
24663: LD_ADDR_VAR 0 8
24667: PUSH
24668: EMPTY
24669: ST_TO_ADDR
// i = 1 ;
24670: LD_ADDR_VAR 0 2
24674: PUSH
24675: LD_INT 1
24677: ST_TO_ADDR
// while i <= temp_list do
24678: LD_VAR 0 2
24682: PUSH
24683: LD_VAR 0 4
24687: LESSEQUAL
24688: IFFALSE 24960
// begin if IsDead ( temp_list [ i ] [ 1 ] ) then
24690: LD_VAR 0 4
24694: PUSH
24695: LD_VAR 0 2
24699: ARRAY
24700: PUSH
24701: LD_INT 1
24703: ARRAY
24704: PPUSH
24705: CALL_OW 301
24709: IFFALSE 24735
// begin temp_list = Delete ( temp_list , i ) ;
24711: LD_ADDR_VAR 0 4
24715: PUSH
24716: LD_VAR 0 4
24720: PPUSH
24721: LD_VAR 0 2
24725: PPUSH
24726: CALL_OW 3
24730: ST_TO_ADDR
// continue ;
24731: GO 24678
// end else
24733: GO 24918
// begin temp_list_3 = temp_list [ i ] [ 2 ] ;
24735: LD_ADDR_VAR 0 6
24739: PUSH
24740: LD_VAR 0 4
24744: PUSH
24745: LD_VAR 0 2
24749: ARRAY
24750: PUSH
24751: LD_INT 2
24753: ARRAY
24754: ST_TO_ADDR
// k = 1 ;
24755: LD_ADDR_VAR 0 12
24759: PUSH
24760: LD_INT 1
24762: ST_TO_ADDR
// while k <= temp_list_3 do
24763: LD_VAR 0 12
24767: PUSH
24768: LD_VAR 0 6
24772: LESSEQUAL
24773: IFFALSE 24830
// begin if IsDead ( temp_list_3 [ k ] ) then
24775: LD_VAR 0 6
24779: PUSH
24780: LD_VAR 0 12
24784: ARRAY
24785: PPUSH
24786: CALL_OW 301
24790: IFFALSE 24814
// begin temp_list_3 = Delete ( temp_list_3 , k ) ;
24792: LD_ADDR_VAR 0 6
24796: PUSH
24797: LD_VAR 0 6
24801: PPUSH
24802: LD_VAR 0 12
24806: PPUSH
24807: CALL_OW 3
24811: ST_TO_ADDR
// continue ;
24812: GO 24763
// end ; k = k + 1 ;
24814: LD_ADDR_VAR 0 12
24818: PUSH
24819: LD_VAR 0 12
24823: PUSH
24824: LD_INT 1
24826: PLUS
24827: ST_TO_ADDR
// end ;
24828: GO 24763
// if temp_list_3 > 0 then
24830: LD_VAR 0 6
24834: PUSH
24835: LD_INT 0
24837: GREATER
24838: IFFALSE 24896
// begin temp_list_2 = Replace ( temp_list [ i ] , 2 , temp_list_3 ) ;
24840: LD_ADDR_VAR 0 17
24844: PUSH
24845: LD_VAR 0 4
24849: PUSH
24850: LD_VAR 0 2
24854: ARRAY
24855: PPUSH
24856: LD_INT 2
24858: PPUSH
24859: LD_VAR 0 6
24863: PPUSH
24864: CALL_OW 1
24868: ST_TO_ADDR
// temp_list = Replace ( temp_list , i , temp_list_2 ) ;
24869: LD_ADDR_VAR 0 4
24873: PUSH
24874: LD_VAR 0 4
24878: PPUSH
24879: LD_VAR 0 2
24883: PPUSH
24884: LD_VAR 0 17
24888: PPUSH
24889: CALL_OW 1
24893: ST_TO_ADDR
// end else
24894: GO 24918
// begin temp_list = Delete ( temp_list , i ) ;
24896: LD_ADDR_VAR 0 4
24900: PUSH
24901: LD_VAR 0 4
24905: PPUSH
24906: LD_VAR 0 2
24910: PPUSH
24911: CALL_OW 3
24915: ST_TO_ADDR
// continue ;
24916: GO 24678
// end ; end ; vehicles_list = vehicles_list ^ temp_list [ i ] [ 2 ] ;
24918: LD_ADDR_VAR 0 8
24922: PUSH
24923: LD_VAR 0 8
24927: PUSH
24928: LD_VAR 0 4
24932: PUSH
24933: LD_VAR 0 2
24937: ARRAY
24938: PUSH
24939: LD_INT 2
24941: ARRAY
24942: ADD
24943: ST_TO_ADDR
// i = i + 1 ;
24944: LD_ADDR_VAR 0 2
24948: PUSH
24949: LD_VAR 0 2
24953: PUSH
24954: LD_INT 1
24956: PLUS
24957: ST_TO_ADDR
// end ;
24958: GO 24678
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list ) ;
24960: LD_ADDR_VAR 0 24
24964: PUSH
24965: LD_VAR 0 24
24969: PPUSH
24970: LD_VAR 0 14
24974: PPUSH
24975: LD_VAR 0 4
24979: PPUSH
24980: CALL_OW 1
24984: ST_TO_ADDR
// temp_list = ai_vehicles_defend [ base ] diff vehicles_list ;
24985: LD_ADDR_VAR 0 4
24989: PUSH
24990: LD_EXP 39
24994: PUSH
24995: LD_VAR 0 14
24999: ARRAY
25000: PUSH
25001: LD_VAR 0 8
25005: DIFF
25006: ST_TO_ADDR
// if temp_list > 0 then
25007: LD_VAR 0 4
25011: PUSH
25012: LD_INT 0
25014: GREATER
25015: IFFALSE 25239
// begin temp_list_3 = ai_mechanics_defend [ base ] ;
25017: LD_ADDR_VAR 0 6
25021: PUSH
25022: LD_EXP 31
25026: PUSH
25027: LD_VAR 0 14
25031: ARRAY
25032: ST_TO_ADDR
// for i in remote_driver_vehicles [ base ] do
25033: LD_ADDR_VAR 0 2
25037: PUSH
25038: LD_VAR 0 24
25042: PUSH
25043: LD_VAR 0 14
25047: ARRAY
25048: PUSH
25049: FOR_IN
25050: IFFALSE 25074
// temp_list_3 = temp_list_3 diff i [ 1 ] ;
25052: LD_ADDR_VAR 0 6
25056: PUSH
25057: LD_VAR 0 6
25061: PUSH
25062: LD_VAR 0 2
25066: PUSH
25067: LD_INT 1
25069: ARRAY
25070: DIFF
25071: ST_TO_ADDR
25072: GO 25049
25074: POP
25075: POP
// if temp_list_3 > 0 then
25076: LD_VAR 0 6
25080: PUSH
25081: LD_INT 0
25083: GREATER
25084: IFFALSE 25110
// temp_list_3 = temp_list_3 diff FindMinSkill ( temp_list_3 , skill_mechanical ) ;
25086: LD_ADDR_VAR 0 6
25090: PUSH
25091: LD_VAR 0 6
25095: PUSH
25096: LD_VAR 0 6
25100: PPUSH
25101: LD_INT 3
25103: PPUSH
25104: CALL_OW 443
25108: DIFF
25109: ST_TO_ADDR
// for i in temp_list do
25110: LD_ADDR_VAR 0 2
25114: PUSH
25115: LD_VAR 0 4
25119: PUSH
25120: FOR_IN
25121: IFFALSE 25237
// begin if temp_list_3 = 0 then
25123: LD_VAR 0 6
25127: PUSH
25128: LD_INT 0
25130: EQUAL
25131: IFFALSE 25135
// break ;
25133: GO 25237
// temp_unit = FindMaxSkill ( temp_list_3 , skill_mechanical ) ;
25135: LD_ADDR_VAR 0 7
25139: PUSH
25140: LD_VAR 0 6
25144: PPUSH
25145: LD_INT 3
25147: PPUSH
25148: CALL_OW 433
25152: ST_TO_ADDR
// temp_list_3 = temp_list_3 diff temp_unit ;
25153: LD_ADDR_VAR 0 6
25157: PUSH
25158: LD_VAR 0 6
25162: PUSH
25163: LD_VAR 0 7
25167: DIFF
25168: ST_TO_ADDR
// temp_list_2 = Insert ( remote_driver_vehicles [ base ] , 1 , [ temp_unit , [ i ] ] ) ;
25169: LD_ADDR_VAR 0 17
25173: PUSH
25174: LD_VAR 0 24
25178: PUSH
25179: LD_VAR 0 14
25183: ARRAY
25184: PPUSH
25185: LD_INT 1
25187: PPUSH
25188: LD_VAR 0 7
25192: PUSH
25193: LD_VAR 0 2
25197: PUSH
25198: EMPTY
25199: LIST
25200: PUSH
25201: EMPTY
25202: LIST
25203: LIST
25204: PPUSH
25205: CALL_OW 2
25209: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list_2 ) ;
25210: LD_ADDR_VAR 0 24
25214: PUSH
25215: LD_VAR 0 24
25219: PPUSH
25220: LD_VAR 0 14
25224: PPUSH
25225: LD_VAR 0 17
25229: PPUSH
25230: CALL_OW 1
25234: ST_TO_ADDR
// end ;
25235: GO 25120
25237: POP
25238: POP
// end ; for i in remote_driver_vehicles [ base ] do
25239: LD_ADDR_VAR 0 2
25243: PUSH
25244: LD_VAR 0 24
25248: PUSH
25249: LD_VAR 0 14
25253: ARRAY
25254: PUSH
25255: FOR_IN
25256: IFFALSE 25280
// remote_mechanics = remote_mechanics ^ i [ 1 ] ;
25258: LD_ADDR_VAR 0 18
25262: PUSH
25263: LD_VAR 0 18
25267: PUSH
25268: LD_VAR 0 2
25272: PUSH
25273: LD_INT 1
25275: ARRAY
25276: ADD
25277: ST_TO_ADDR
25278: GO 25255
25280: POP
25281: POP
// mechanics_list = mechanics_list diff remote_mechanics ;
25282: LD_ADDR_VAR 0 3
25286: PUSH
25287: LD_VAR 0 3
25291: PUSH
25292: LD_VAR 0 18
25296: DIFF
25297: ST_TO_ADDR
// remote_mechanics = remote_mechanics diff ai_heal_these_humans [ base ] ;
25298: LD_ADDR_VAR 0 18
25302: PUSH
25303: LD_VAR 0 18
25307: PUSH
25308: LD_EXP 43
25312: PUSH
25313: LD_VAR 0 14
25317: ARRAY
25318: DIFF
25319: ST_TO_ADDR
// if mechanics_list = 0 and remote_driver_vehicles [ base ] > 0 then
25320: LD_VAR 0 3
25324: PUSH
25325: LD_INT 0
25327: EQUAL
25328: PUSH
25329: LD_VAR 0 24
25333: PUSH
25334: LD_VAR 0 14
25338: ARRAY
25339: PUSH
25340: LD_INT 0
25342: GREATER
25343: AND
25344: IFFALSE 25581
// begin n = 0 ;
25346: LD_ADDR_VAR 0 22
25350: PUSH
25351: LD_INT 0
25353: ST_TO_ADDR
// a = 9999 ;
25354: LD_ADDR_VAR 0 23
25358: PUSH
25359: LD_INT 9999
25361: ST_TO_ADDR
// for i = 1 to ( remote_driver_vehicles [ base ] + 0 ) do
25362: LD_ADDR_VAR 0 2
25366: PUSH
25367: DOUBLE
25368: LD_INT 1
25370: DEC
25371: ST_TO_ADDR
25372: LD_VAR 0 24
25376: PUSH
25377: LD_VAR 0 14
25381: ARRAY
25382: PUSH
25383: LD_INT 0
25385: PLUS
25386: PUSH
25387: FOR_TO
25388: IFFALSE 25464
// begin if remote_driver_vehicles [ base ] [ i ] [ 2 ] + 0 < a then
25390: LD_VAR 0 24
25394: PUSH
25395: LD_VAR 0 14
25399: ARRAY
25400: PUSH
25401: LD_VAR 0 2
25405: ARRAY
25406: PUSH
25407: LD_INT 2
25409: ARRAY
25410: PUSH
25411: LD_INT 0
25413: PLUS
25414: PUSH
25415: LD_VAR 0 23
25419: LESS
25420: IFFALSE 25462
// begin a = remote_driver_vehicles [ base ] [ i ] [ 2 ] + 0 ;
25422: LD_ADDR_VAR 0 23
25426: PUSH
25427: LD_VAR 0 24
25431: PUSH
25432: LD_VAR 0 14
25436: ARRAY
25437: PUSH
25438: LD_VAR 0 2
25442: ARRAY
25443: PUSH
25444: LD_INT 2
25446: ARRAY
25447: PUSH
25448: LD_INT 0
25450: PLUS
25451: ST_TO_ADDR
// n = i ;
25452: LD_ADDR_VAR 0 22
25456: PUSH
25457: LD_VAR 0 2
25461: ST_TO_ADDR
// end ; end ;
25462: GO 25387
25464: POP
25465: POP
// mechanics_list = mechanics_list ^ remote_driver_vehicles [ base ] [ n ] [ 1 ] ;
25466: LD_ADDR_VAR 0 3
25470: PUSH
25471: LD_VAR 0 3
25475: PUSH
25476: LD_VAR 0 24
25480: PUSH
25481: LD_VAR 0 14
25485: ARRAY
25486: PUSH
25487: LD_VAR 0 22
25491: ARRAY
25492: PUSH
25493: LD_INT 1
25495: ARRAY
25496: ADD
25497: ST_TO_ADDR
// remote_mechanics = remote_mechanics diff remote_driver_vehicles [ base ] [ n ] [ 1 ] ;
25498: LD_ADDR_VAR 0 18
25502: PUSH
25503: LD_VAR 0 18
25507: PUSH
25508: LD_VAR 0 24
25512: PUSH
25513: LD_VAR 0 14
25517: ARRAY
25518: PUSH
25519: LD_VAR 0 22
25523: ARRAY
25524: PUSH
25525: LD_INT 1
25527: ARRAY
25528: DIFF
25529: ST_TO_ADDR
// temp_list_2 = Delete ( remote_driver_vehicles [ base ] , n ) ;
25530: LD_ADDR_VAR 0 17
25534: PUSH
25535: LD_VAR 0 24
25539: PUSH
25540: LD_VAR 0 14
25544: ARRAY
25545: PPUSH
25546: LD_VAR 0 22
25550: PPUSH
25551: CALL_OW 3
25555: ST_TO_ADDR
// remote_driver_vehicles = Replace ( remote_driver_vehicles , base , temp_list_2 ) ;
25556: LD_ADDR_VAR 0 24
25560: PUSH
25561: LD_VAR 0 24
25565: PPUSH
25566: LD_VAR 0 14
25570: PPUSH
25571: LD_VAR 0 17
25575: PPUSH
25576: CALL_OW 1
25580: ST_TO_ADDR
// end ; end else
25581: GO 25605
// begin remote_driver_vehicles = Replace ( remote_driver_vehicles , base , [ ] ) ;
25583: LD_ADDR_VAR 0 24
25587: PUSH
25588: LD_VAR 0 24
25592: PPUSH
25593: LD_VAR 0 14
25597: PPUSH
25598: EMPTY
25599: PPUSH
25600: CALL_OW 1
25604: ST_TO_ADDR
// end ; temp_list = [ ] ;
25605: LD_ADDR_VAR 0 4
25609: PUSH
25610: EMPTY
25611: ST_TO_ADDR
// for i in ai_vehicles_being_repaired [ base ] do
25612: LD_ADDR_VAR 0 2
25616: PUSH
25617: LD_EXP 79
25621: PUSH
25622: LD_VAR 0 14
25626: ARRAY
25627: PUSH
25628: FOR_IN
25629: IFFALSE 25664
// if GetLives ( i ) < 1000 then
25631: LD_VAR 0 2
25635: PPUSH
25636: CALL_OW 256
25640: PUSH
25641: LD_INT 1000
25643: LESS
25644: IFFALSE 25662
// temp_list = temp_list ^ i ;
25646: LD_ADDR_VAR 0 4
25650: PUSH
25651: LD_VAR 0 4
25655: PUSH
25656: LD_VAR 0 2
25660: ADD
25661: ST_TO_ADDR
25662: GO 25628
25664: POP
25665: POP
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
25666: LD_ADDR_EXP 79
25670: PUSH
25671: LD_EXP 79
25675: PPUSH
25676: LD_VAR 0 14
25680: PPUSH
25681: LD_VAR 0 4
25685: PPUSH
25686: CALL_OW 1
25690: ST_TO_ADDR
// temp_list = [ ] ;
25691: LD_ADDR_VAR 0 4
25695: PUSH
25696: EMPTY
25697: ST_TO_ADDR
// for i in ai_refuel_vehicles_list [ base ] diff ai_vehicles_being_repaired [ base ] do
25698: LD_ADDR_VAR 0 2
25702: PUSH
25703: LD_EXP 54
25707: PUSH
25708: LD_VAR 0 14
25712: ARRAY
25713: PUSH
25714: LD_EXP 79
25718: PUSH
25719: LD_VAR 0 14
25723: ARRAY
25724: DIFF
25725: PUSH
25726: FOR_IN
25727: IFFALSE 25762
// if GetFuel ( i ) < 95 then
25729: LD_VAR 0 2
25733: PPUSH
25734: CALL_OW 261
25738: PUSH
25739: LD_INT 95
25741: LESS
25742: IFFALSE 25760
// temp_list = temp_list ^ i ;
25744: LD_ADDR_VAR 0 4
25748: PUSH
25749: LD_VAR 0 4
25753: PUSH
25754: LD_VAR 0 2
25758: ADD
25759: ST_TO_ADDR
25760: GO 25726
25762: POP
25763: POP
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
25764: LD_ADDR_EXP 54
25768: PUSH
25769: LD_EXP 54
25773: PPUSH
25774: LD_VAR 0 14
25778: PPUSH
25779: LD_VAR 0 4
25783: PPUSH
25784: CALL_OW 1
25788: ST_TO_ADDR
// if under_attack or destroy_gensher_base then
25789: LD_VAR 0 10
25793: PUSH
25794: LD_VAR 0 19
25798: OR
25799: IFFALSE 27202
// begin vehicles_list = ai_vehicles_defend [ base ] diff ai_vehicles_being_repaired [ base ] ;
25801: LD_ADDR_VAR 0 8
25805: PUSH
25806: LD_EXP 39
25810: PUSH
25811: LD_VAR 0 14
25815: ARRAY
25816: PUSH
25817: LD_EXP 79
25821: PUSH
25822: LD_VAR 0 14
25826: ARRAY
25827: DIFF
25828: ST_TO_ADDR
// case base of 1 :
25829: LD_VAR 0 14
25833: PUSH
25834: LD_INT 1
25836: DOUBLE
25837: EQUAL
25838: IFTRUE 25842
25840: GO 26484
25842: POP
// begin repeat if game_phase = 1 then
25843: LD_EXP 88
25847: PUSH
25848: LD_INT 1
25850: EQUAL
25851: IFFALSE 25855
// break ;
25853: GO 26482
// temp_list = [ ] ;
25855: LD_ADDR_VAR 0 4
25859: PUSH
25860: EMPTY
25861: ST_TO_ADDR
// if destroy_gensher_base then
25862: LD_VAR 0 19
25866: IFFALSE 25933
// for i in original_gensher_people ^ Gensher do
25868: LD_ADDR_VAR 0 2
25872: PUSH
25873: LD_EXP 82
25877: PUSH
25878: LD_EXP 23
25882: ADD
25883: PUSH
25884: FOR_IN
25885: IFFALSE 25931
// if IsPlaced ( i ) and GetY ( i ) <= 70 then
25887: LD_VAR 0 2
25891: PPUSH
25892: CALL_OW 305
25896: PUSH
25897: LD_VAR 0 2
25901: PPUSH
25902: CALL_OW 251
25906: PUSH
25907: LD_INT 70
25909: LESSEQUAL
25910: AND
25911: IFFALSE 25929
// temp_list = temp_list ^ i ;
25913: LD_ADDR_VAR 0 4
25917: PUSH
25918: LD_VAR 0 4
25922: PUSH
25923: LD_VAR 0 2
25927: ADD
25928: ST_TO_ADDR
25929: GO 25884
25931: POP
25932: POP
// if temp_list > 0 then
25933: LD_VAR 0 4
25937: PUSH
25938: LD_INT 0
25940: GREATER
25941: IFFALSE 26153
// begin temp_list_3 = [ [ 105 , 40 ] , [ 98 , 44 ] , [ 90 , 44 ] , [ 82 , 46 ] , [ 78 , 52 ] , [ 79 , 61 ] ] ;
25943: LD_ADDR_VAR 0 6
25947: PUSH
25948: LD_INT 105
25950: PUSH
25951: LD_INT 40
25953: PUSH
25954: EMPTY
25955: LIST
25956: LIST
25957: PUSH
25958: LD_INT 98
25960: PUSH
25961: LD_INT 44
25963: PUSH
25964: EMPTY
25965: LIST
25966: LIST
25967: PUSH
25968: LD_INT 90
25970: PUSH
25971: LD_INT 44
25973: PUSH
25974: EMPTY
25975: LIST
25976: LIST
25977: PUSH
25978: LD_INT 82
25980: PUSH
25981: LD_INT 46
25983: PUSH
25984: EMPTY
25985: LIST
25986: LIST
25987: PUSH
25988: LD_INT 78
25990: PUSH
25991: LD_INT 52
25993: PUSH
25994: EMPTY
25995: LIST
25996: LIST
25997: PUSH
25998: LD_INT 79
26000: PUSH
26001: LD_INT 61
26003: PUSH
26004: EMPTY
26005: LIST
26006: LIST
26007: PUSH
26008: EMPTY
26009: LIST
26010: LIST
26011: LIST
26012: LIST
26013: LIST
26014: LIST
26015: ST_TO_ADDR
// for i in vehicles_list do
26016: LD_ADDR_VAR 0 2
26020: PUSH
26021: LD_VAR 0 8
26025: PUSH
26026: FOR_IN
26027: IFFALSE 26149
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
26029: LD_ADDR_VAR 0 7
26033: PUSH
26034: LD_VAR 0 4
26038: PPUSH
26039: LD_VAR 0 2
26043: PPUSH
26044: CALL_OW 75
26048: ST_TO_ADDR
// if GetDistUnits ( i , temp_unit ) <= 6 then
26049: LD_VAR 0 2
26053: PPUSH
26054: LD_VAR 0 7
26058: PPUSH
26059: CALL_OW 296
26063: PUSH
26064: LD_INT 6
26066: LESSEQUAL
26067: IFFALSE 26100
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
26069: LD_VAR 0 2
26073: PPUSH
26074: LD_VAR 0 7
26078: PPUSH
26079: CALL_OW 250
26083: PPUSH
26084: LD_VAR 0 7
26088: PPUSH
26089: CALL_OW 251
26093: PPUSH
26094: CALL_OW 114
26098: GO 26147
// begin temp_list = FindNextHexOldWaypointSystem ( temp_list_3 , i ) ;
26100: LD_ADDR_VAR 0 4
26104: PUSH
26105: LD_VAR 0 6
26109: PPUSH
26110: LD_VAR 0 2
26114: PPUSH
26115: CALL 29082 0 2
26119: ST_TO_ADDR
// ComMoveXY ( i , temp_list [ 1 ] , temp_list [ 2 ] ) ;
26120: LD_VAR 0 2
26124: PPUSH
26125: LD_VAR 0 4
26129: PUSH
26130: LD_INT 1
26132: ARRAY
26133: PPUSH
26134: LD_VAR 0 4
26138: PUSH
26139: LD_INT 2
26141: ARRAY
26142: PPUSH
26143: CALL_OW 111
// end ; end ;
26147: GO 26026
26149: POP
26150: POP
// end else
26151: GO 26478
// begin temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , am_vehicle_defend_area ] ] ) ;
26153: LD_ADDR_VAR 0 4
26157: PUSH
26158: LD_INT 81
26160: PUSH
26161: LD_VAR 0 1
26165: PUSH
26166: EMPTY
26167: LIST
26168: LIST
26169: PUSH
26170: LD_INT 95
26172: PUSH
26173: LD_INT 11
26175: PUSH
26176: EMPTY
26177: LIST
26178: LIST
26179: PUSH
26180: EMPTY
26181: LIST
26182: LIST
26183: PPUSH
26184: CALL_OW 69
26188: ST_TO_ADDR
// temp_list = DangerousUnits ( temp_list ) ;
26189: LD_ADDR_VAR 0 4
26193: PUSH
26194: LD_VAR 0 4
26198: PPUSH
26199: CALL 39259 0 1
26203: ST_TO_ADDR
// if temp_list > 0 then
26204: LD_VAR 0 4
26208: PUSH
26209: LD_INT 0
26211: GREATER
26212: IFFALSE 26282
// begin for i in vehicles_list do
26214: LD_ADDR_VAR 0 2
26218: PUSH
26219: LD_VAR 0 8
26223: PUSH
26224: FOR_IN
26225: IFFALSE 26278
// begin temp_unit = NearestUnitToUnit ( temp_list , i ) ;
26227: LD_ADDR_VAR 0 7
26231: PUSH
26232: LD_VAR 0 4
26236: PPUSH
26237: LD_VAR 0 2
26241: PPUSH
26242: CALL_OW 74
26246: ST_TO_ADDR
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
26247: LD_VAR 0 2
26251: PPUSH
26252: LD_VAR 0 7
26256: PPUSH
26257: CALL_OW 250
26261: PPUSH
26262: LD_VAR 0 7
26266: PPUSH
26267: CALL_OW 251
26271: PPUSH
26272: CALL_OW 114
// end ;
26276: GO 26224
26278: POP
26279: POP
// end else
26280: GO 26478
// if destroy_gensher_base then
26282: LD_VAR 0 19
26286: IFFALSE 26478
// begin temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , gensher_base ] ] ) ;
26288: LD_ADDR_VAR 0 4
26292: PUSH
26293: LD_INT 81
26295: PUSH
26296: LD_VAR 0 1
26300: PUSH
26301: EMPTY
26302: LIST
26303: LIST
26304: PUSH
26305: LD_INT 95
26307: PUSH
26308: LD_INT 7
26310: PUSH
26311: EMPTY
26312: LIST
26313: LIST
26314: PUSH
26315: EMPTY
26316: LIST
26317: LIST
26318: PPUSH
26319: CALL_OW 69
26323: ST_TO_ADDR
// temp_list_2 = DangerousUnits ( temp_list ) ;
26324: LD_ADDR_VAR 0 17
26328: PUSH
26329: LD_VAR 0 4
26333: PPUSH
26334: CALL 39259 0 1
26338: ST_TO_ADDR
// if temp_list_2 > 0 then
26339: LD_VAR 0 17
26343: PUSH
26344: LD_INT 0
26346: GREATER
26347: IFFALSE 26417
// begin for i in vehicles_list do
26349: LD_ADDR_VAR 0 2
26353: PUSH
26354: LD_VAR 0 8
26358: PUSH
26359: FOR_IN
26360: IFFALSE 26413
// begin temp_unit = NearestUnitToUnit ( temp_list_2 , i ) ;
26362: LD_ADDR_VAR 0 7
26366: PUSH
26367: LD_VAR 0 17
26371: PPUSH
26372: LD_VAR 0 2
26376: PPUSH
26377: CALL_OW 74
26381: ST_TO_ADDR
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
26382: LD_VAR 0 2
26386: PPUSH
26387: LD_VAR 0 7
26391: PPUSH
26392: CALL_OW 250
26396: PPUSH
26397: LD_VAR 0 7
26401: PPUSH
26402: CALL_OW 251
26406: PPUSH
26407: CALL_OW 114
// end ;
26411: GO 26359
26413: POP
26414: POP
// end else
26415: GO 26478
// if temp_list > 0 then
26417: LD_VAR 0 4
26421: PUSH
26422: LD_INT 0
26424: GREATER
26425: IFFALSE 26478
// begin for i in vehicles_list do
26427: LD_ADDR_VAR 0 2
26431: PUSH
26432: LD_VAR 0 8
26436: PUSH
26437: FOR_IN
26438: IFFALSE 26476
// begin temp_unit = NearestUnitToUnit ( temp_list , i ) ;
26440: LD_ADDR_VAR 0 7
26444: PUSH
26445: LD_VAR 0 4
26449: PPUSH
26450: LD_VAR 0 2
26454: PPUSH
26455: CALL_OW 74
26459: ST_TO_ADDR
// ComAttackUnit ( i , temp_unit ) ;
26460: LD_VAR 0 2
26464: PPUSH
26465: LD_VAR 0 7
26469: PPUSH
26470: CALL_OW 115
// end ;
26474: GO 26437
26476: POP
26477: POP
// end ; end ; end ; until true ;
26478: LD_INT 1
26480: IFFALSE 25843
// end ; 2 :
26482: GO 27200
26484: LD_INT 2
26486: DOUBLE
26487: EQUAL
26488: IFTRUE 26492
26490: GO 26495
26492: POP
// begin end ; 3 :
26493: GO 27200
26495: LD_INT 3
26497: DOUBLE
26498: EQUAL
26499: IFTRUE 26503
26501: GO 27199
26503: POP
// begin temp_list = FilterAllUnits ( [ f_enemy , side ] ) ;
26504: LD_ADDR_VAR 0 4
26508: PUSH
26509: LD_INT 81
26511: PUSH
26512: LD_VAR 0 1
26516: PUSH
26517: EMPTY
26518: LIST
26519: LIST
26520: PPUSH
26521: CALL_OW 69
26525: ST_TO_ADDR
// temp_list = ListFilterNearArea ( temp_list , GetBaseArea ( base ) ) ;
26526: LD_ADDR_VAR 0 4
26530: PUSH
26531: LD_VAR 0 4
26535: PPUSH
26536: LD_VAR 0 14
26540: PPUSH
26541: CALL 11197 0 1
26545: PPUSH
26546: CALL 22772 0 2
26550: ST_TO_ADDR
// temp_list = DangerousUnits ( temp_list ) ;
26551: LD_ADDR_VAR 0 4
26555: PUSH
26556: LD_VAR 0 4
26560: PPUSH
26561: CALL 39259 0 1
26565: ST_TO_ADDR
// temp_list_2 = FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , Ru_backdoor_area ] ] ) ;
26566: LD_ADDR_VAR 0 17
26570: PUSH
26571: LD_INT 81
26573: PUSH
26574: LD_VAR 0 1
26578: PUSH
26579: EMPTY
26580: LIST
26581: LIST
26582: PUSH
26583: LD_INT 95
26585: PUSH
26586: LD_INT 13
26588: PUSH
26589: EMPTY
26590: LIST
26591: LIST
26592: PUSH
26593: EMPTY
26594: LIST
26595: LIST
26596: PPUSH
26597: CALL_OW 69
26601: ST_TO_ADDR
// temp_list_2 = DangerousUnits ( temp_list_2 ) ;
26602: LD_ADDR_VAR 0 17
26606: PUSH
26607: LD_VAR 0 17
26611: PPUSH
26612: CALL 39259 0 1
26616: ST_TO_ADDR
// temp_list_3 = [ [ 53 , 80 ] , [ 61 , 80 ] , [ 63 , 73 ] , [ 67 , 66 ] , [ 67 , 59 ] ] ;
26617: LD_ADDR_VAR 0 6
26621: PUSH
26622: LD_INT 53
26624: PUSH
26625: LD_INT 80
26627: PUSH
26628: EMPTY
26629: LIST
26630: LIST
26631: PUSH
26632: LD_INT 61
26634: PUSH
26635: LD_INT 80
26637: PUSH
26638: EMPTY
26639: LIST
26640: LIST
26641: PUSH
26642: LD_INT 63
26644: PUSH
26645: LD_INT 73
26647: PUSH
26648: EMPTY
26649: LIST
26650: LIST
26651: PUSH
26652: LD_INT 67
26654: PUSH
26655: LD_INT 66
26657: PUSH
26658: EMPTY
26659: LIST
26660: LIST
26661: PUSH
26662: LD_INT 67
26664: PUSH
26665: LD_INT 59
26667: PUSH
26668: EMPTY
26669: LIST
26670: LIST
26671: PUSH
26672: EMPTY
26673: LIST
26674: LIST
26675: LIST
26676: LIST
26677: LIST
26678: ST_TO_ADDR
// temp_list_4 = [ [ 53 , 80 ] , [ 61 , 91 ] , [ 70 , 97 ] , [ 78 , 99 ] , [ 88 , 98 ] ] ;
26679: LD_ADDR_VAR 0 20
26683: PUSH
26684: LD_INT 53
26686: PUSH
26687: LD_INT 80
26689: PUSH
26690: EMPTY
26691: LIST
26692: LIST
26693: PUSH
26694: LD_INT 61
26696: PUSH
26697: LD_INT 91
26699: PUSH
26700: EMPTY
26701: LIST
26702: LIST
26703: PUSH
26704: LD_INT 70
26706: PUSH
26707: LD_INT 97
26709: PUSH
26710: EMPTY
26711: LIST
26712: LIST
26713: PUSH
26714: LD_INT 78
26716: PUSH
26717: LD_INT 99
26719: PUSH
26720: EMPTY
26721: LIST
26722: LIST
26723: PUSH
26724: LD_INT 88
26726: PUSH
26727: LD_INT 98
26729: PUSH
26730: EMPTY
26731: LIST
26732: LIST
26733: PUSH
26734: EMPTY
26735: LIST
26736: LIST
26737: LIST
26738: LIST
26739: LIST
26740: ST_TO_ADDR
// if temp_list_2 >= temp_list then
26741: LD_VAR 0 17
26745: PUSH
26746: LD_VAR 0 4
26750: GREATEREQUAL
26751: IFFALSE 26894
// begin if temp_list_2 > 0 then
26753: LD_VAR 0 17
26757: PUSH
26758: LD_INT 0
26760: GREATER
26761: IFFALSE 26892
// begin for i in vehicles_list do
26763: LD_ADDR_VAR 0 2
26767: PUSH
26768: LD_VAR 0 8
26772: PUSH
26773: FOR_IN
26774: IFFALSE 26890
// if IsInArea ( i , Ru_base ) then
26776: LD_VAR 0 2
26780: PPUSH
26781: LD_INT 3
26783: PPUSH
26784: CALL_OW 308
26788: IFFALSE 26839
// begin temp_list_5 = FindNextHexOldWaypointSystem ( temp_list_3 , i ) ;
26790: LD_ADDR_VAR 0 21
26794: PUSH
26795: LD_VAR 0 6
26799: PPUSH
26800: LD_VAR 0 2
26804: PPUSH
26805: CALL 29082 0 2
26809: ST_TO_ADDR
// ComAgressiveMove ( i , temp_list_5 [ 1 ] , temp_list_5 [ 2 ] ) ;
26810: LD_VAR 0 2
26814: PPUSH
26815: LD_VAR 0 21
26819: PUSH
26820: LD_INT 1
26822: ARRAY
26823: PPUSH
26824: LD_VAR 0 21
26828: PUSH
26829: LD_INT 2
26831: ARRAY
26832: PPUSH
26833: CALL_OW 114
// end else
26837: GO 26888
// begin temp_unit = NearestUnitToUnit ( temp_list_2 , i ) ;
26839: LD_ADDR_VAR 0 7
26843: PUSH
26844: LD_VAR 0 17
26848: PPUSH
26849: LD_VAR 0 2
26853: PPUSH
26854: CALL_OW 74
26858: ST_TO_ADDR
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
26859: LD_VAR 0 2
26863: PPUSH
26864: LD_VAR 0 7
26868: PPUSH
26869: CALL_OW 250
26873: PPUSH
26874: LD_VAR 0 7
26878: PPUSH
26879: CALL_OW 251
26883: PPUSH
26884: CALL_OW 114
// end ;
26888: GO 26773
26890: POP
26891: POP
// end ; end else
26892: GO 27197
// begin if temp_list > 0 then
26894: LD_VAR 0 4
26898: PUSH
26899: LD_INT 0
26901: GREATER
26902: IFFALSE 27197
// begin k = 0 ;
26904: LD_ADDR_VAR 0 12
26908: PUSH
26909: LD_INT 0
26911: ST_TO_ADDR
// for i in vehicles_list do
26912: LD_ADDR_VAR 0 2
26916: PUSH
26917: LD_VAR 0 8
26921: PUSH
26922: FOR_IN
26923: IFFALSE 27195
// begin k = k + 1 ;
26925: LD_ADDR_VAR 0 12
26929: PUSH
26930: LD_VAR 0 12
26934: PUSH
26935: LD_INT 1
26937: PLUS
26938: ST_TO_ADDR
// if k mod 2 = 0 then
26939: LD_VAR 0 12
26943: PUSH
26944: LD_INT 2
26946: MOD
26947: PUSH
26948: LD_INT 0
26950: EQUAL
26951: IFFALSE 27067
// begin if IsInArea ( i , Ru_base ) then
26953: LD_VAR 0 2
26957: PPUSH
26958: LD_INT 3
26960: PPUSH
26961: CALL_OW 308
26965: IFFALSE 27016
// begin temp_list_5 = FindNextHexOldWaypointSystem ( temp_list_3 , i ) ;
26967: LD_ADDR_VAR 0 21
26971: PUSH
26972: LD_VAR 0 6
26976: PPUSH
26977: LD_VAR 0 2
26981: PPUSH
26982: CALL 29082 0 2
26986: ST_TO_ADDR
// ComAgressiveMove ( i , temp_list_5 [ 1 ] , temp_list_5 [ 2 ] ) ;
26987: LD_VAR 0 2
26991: PPUSH
26992: LD_VAR 0 21
26996: PUSH
26997: LD_INT 1
26999: ARRAY
27000: PPUSH
27001: LD_VAR 0 21
27005: PUSH
27006: LD_INT 2
27008: ARRAY
27009: PPUSH
27010: CALL_OW 114
// end else
27014: GO 27065
// begin temp_unit = NearestUnitToUnit ( temp_list , i ) ;
27016: LD_ADDR_VAR 0 7
27020: PUSH
27021: LD_VAR 0 4
27025: PPUSH
27026: LD_VAR 0 2
27030: PPUSH
27031: CALL_OW 74
27035: ST_TO_ADDR
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
27036: LD_VAR 0 2
27040: PPUSH
27041: LD_VAR 0 7
27045: PPUSH
27046: CALL_OW 250
27050: PPUSH
27051: LD_VAR 0 7
27055: PPUSH
27056: CALL_OW 251
27060: PPUSH
27061: CALL_OW 114
// end ; end else
27065: GO 27193
// begin if IsInArea ( i , Ru_base ) or IsInArea ( i , Ru_base_south ) then
27067: LD_VAR 0 2
27071: PPUSH
27072: LD_INT 3
27074: PPUSH
27075: CALL_OW 308
27079: PUSH
27080: LD_VAR 0 2
27084: PPUSH
27085: LD_INT 19
27087: PPUSH
27088: CALL_OW 308
27092: OR
27093: IFFALSE 27144
// begin temp_list_5 = FindNextHexOldWaypointSystem ( temp_list_4 , i ) ;
27095: LD_ADDR_VAR 0 21
27099: PUSH
27100: LD_VAR 0 20
27104: PPUSH
27105: LD_VAR 0 2
27109: PPUSH
27110: CALL 29082 0 2
27114: ST_TO_ADDR
// ComAgressiveMove ( i , temp_list_5 [ 1 ] , temp_list_5 [ 2 ] ) ;
27115: LD_VAR 0 2
27119: PPUSH
27120: LD_VAR 0 21
27124: PUSH
27125: LD_INT 1
27127: ARRAY
27128: PPUSH
27129: LD_VAR 0 21
27133: PUSH
27134: LD_INT 2
27136: ARRAY
27137: PPUSH
27138: CALL_OW 114
// end else
27142: GO 27193
// begin temp_unit = NearestUnitToUnit ( temp_list , i ) ;
27144: LD_ADDR_VAR 0 7
27148: PUSH
27149: LD_VAR 0 4
27153: PPUSH
27154: LD_VAR 0 2
27158: PPUSH
27159: CALL_OW 74
27163: ST_TO_ADDR
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
27164: LD_VAR 0 2
27168: PPUSH
27169: LD_VAR 0 7
27173: PPUSH
27174: CALL_OW 250
27178: PPUSH
27179: LD_VAR 0 7
27183: PPUSH
27184: CALL_OW 251
27188: PPUSH
27189: CALL_OW 114
// end ; end ; end ;
27193: GO 26922
27195: POP
27196: POP
// end ; end ; end ; end ;
27197: GO 27200
27199: POP
// end else
27200: GO 27589
// begin area = GetBaseArea ( base ) ;
27202: LD_ADDR_VAR 0 15
27206: PUSH
27207: LD_VAR 0 14
27211: PPUSH
27212: CALL 11197 0 1
27216: ST_TO_ADDR
// if IsOk ( ai_depot [ base ] ) then
27217: LD_EXP 34
27221: PUSH
27222: LD_VAR 0 14
27226: ARRAY
27227: PPUSH
27228: CALL_OW 302
27232: IFFALSE 27498
// begin temp_list = ai_refuel_vehicles_list [ base ] ;
27234: LD_ADDR_VAR 0 4
27238: PUSH
27239: LD_EXP 54
27243: PUSH
27244: LD_VAR 0 14
27248: ARRAY
27249: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] diff ai_refuel_vehicles_list [ base ] do
27250: LD_ADDR_VAR 0 2
27254: PUSH
27255: LD_EXP 39
27259: PUSH
27260: LD_VAR 0 14
27264: ARRAY
27265: PUSH
27266: LD_EXP 54
27270: PUSH
27271: LD_VAR 0 14
27275: ARRAY
27276: DIFF
27277: PUSH
27278: FOR_IN
27279: IFFALSE 27329
// if GetFuel ( i ) < 70 and GetEngine ( i ) = engine_combustion then
27281: LD_VAR 0 2
27285: PPUSH
27286: CALL_OW 261
27290: PUSH
27291: LD_INT 70
27293: LESS
27294: PUSH
27295: LD_VAR 0 2
27299: PPUSH
27300: CALL_OW 262
27304: PUSH
27305: LD_INT 1
27307: EQUAL
27308: AND
27309: IFFALSE 27327
// temp_list = temp_list ^ i ;
27311: LD_ADDR_VAR 0 4
27315: PUSH
27316: LD_VAR 0 4
27320: PUSH
27321: LD_VAR 0 2
27325: ADD
27326: ST_TO_ADDR
27327: GO 27278
27329: POP
27330: POP
// temp_list = temp_list diff ai_vehicles_being_repaired [ base ] ;
27331: LD_ADDR_VAR 0 4
27335: PUSH
27336: LD_VAR 0 4
27340: PUSH
27341: LD_EXP 79
27345: PUSH
27346: LD_VAR 0 14
27350: ARRAY
27351: DIFF
27352: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
27353: LD_ADDR_EXP 54
27357: PUSH
27358: LD_EXP 54
27362: PPUSH
27363: LD_VAR 0 14
27367: PPUSH
27368: LD_VAR 0 4
27372: PPUSH
27373: CALL_OW 1
27377: ST_TO_ADDR
// for i in ai_refuel_vehicles_list [ base ] do
27378: LD_ADDR_VAR 0 2
27382: PUSH
27383: LD_EXP 54
27387: PUSH
27388: LD_VAR 0 14
27392: ARRAY
27393: PUSH
27394: FOR_IN
27395: IFFALSE 27496
// begin if IsInArea ( i , area ) then
27397: LD_VAR 0 2
27401: PPUSH
27402: LD_VAR 0 15
27406: PPUSH
27407: CALL_OW 308
27411: IFFALSE 27455
// begin ComMoveUnit ( i , ai_depot [ base ] ) ;
27413: LD_VAR 0 2
27417: PPUSH
27418: LD_EXP 34
27422: PUSH
27423: LD_VAR 0 14
27427: ARRAY
27428: PPUSH
27429: CALL_OW 112
// AddComRefuel ( i , ai_depot [ base ] ) ;
27433: LD_VAR 0 2
27437: PPUSH
27438: LD_EXP 34
27442: PUSH
27443: LD_VAR 0 14
27447: ARRAY
27448: PPUSH
27449: CALL_OW 210
// end else
27453: GO 27494
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
27455: LD_VAR 0 2
27459: PPUSH
27460: LD_EXP 41
27464: PUSH
27465: LD_VAR 0 14
27469: ARRAY
27470: PUSH
27471: LD_INT 1
27473: ARRAY
27474: PPUSH
27475: LD_EXP 41
27479: PUSH
27480: LD_VAR 0 14
27484: ARRAY
27485: PUSH
27486: LD_INT 2
27488: ARRAY
27489: PPUSH
27490: CALL_OW 114
// end ;
27494: GO 27394
27496: POP
27497: POP
// end ; for i in ai_vehicles_defend [ base ] diff ai_refuel_vehicles_list [ base ] do
27498: LD_ADDR_VAR 0 2
27502: PUSH
27503: LD_EXP 39
27507: PUSH
27508: LD_VAR 0 14
27512: ARRAY
27513: PUSH
27514: LD_EXP 54
27518: PUSH
27519: LD_VAR 0 14
27523: ARRAY
27524: DIFF
27525: PUSH
27526: FOR_IN
27527: IFFALSE 27587
// if not IsInArea ( i , area ) then
27529: LD_VAR 0 2
27533: PPUSH
27534: LD_VAR 0 15
27538: PPUSH
27539: CALL_OW 308
27543: NOT
27544: IFFALSE 27585
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
27546: LD_VAR 0 2
27550: PPUSH
27551: LD_EXP 41
27555: PUSH
27556: LD_VAR 0 14
27560: ARRAY
27561: PUSH
27562: LD_INT 1
27564: ARRAY
27565: PPUSH
27566: LD_EXP 41
27570: PUSH
27571: LD_VAR 0 14
27575: ARRAY
27576: PUSH
27577: LD_INT 2
27579: ARRAY
27580: PPUSH
27581: CALL_OW 114
27585: GO 27526
27587: POP
27588: POP
// end ; if mechanics_list = 0 and remote_mechanics = 0 then
27589: LD_VAR 0 3
27593: PUSH
27594: LD_INT 0
27596: EQUAL
27597: PUSH
27598: LD_VAR 0 18
27602: PUSH
27603: LD_INT 0
27605: EQUAL
27606: AND
27607: IFFALSE 27611
// continue ;
27609: GO 24324
// allowed_to_repair_vehicles = UnitFilter ( ai_vehicles_defend [ base ] ^ ( ai_crane [ base ] diff 0 ) , [ [ f_not , [ f_lives , 1000 ] ] , [ f_inarea , GetBaseArea ( base ) ] ] ) ;
27611: LD_ADDR_VAR 0 9
27615: PUSH
27616: LD_EXP 39
27620: PUSH
27621: LD_VAR 0 14
27625: ARRAY
27626: PUSH
27627: LD_EXP 70
27631: PUSH
27632: LD_VAR 0 14
27636: ARRAY
27637: PUSH
27638: LD_INT 0
27640: DIFF
27641: ADD
27642: PPUSH
27643: LD_INT 3
27645: PUSH
27646: LD_INT 24
27648: PUSH
27649: LD_INT 1000
27651: PUSH
27652: EMPTY
27653: LIST
27654: LIST
27655: PUSH
27656: EMPTY
27657: LIST
27658: LIST
27659: PUSH
27660: LD_INT 95
27662: PUSH
27663: LD_VAR 0 14
27667: PPUSH
27668: CALL 11197 0 1
27672: PUSH
27673: EMPTY
27674: LIST
27675: LIST
27676: PUSH
27677: EMPTY
27678: LIST
27679: LIST
27680: PPUSH
27681: CALL_OW 72
27685: ST_TO_ADDR
// if not under_attack then
27686: LD_VAR 0 10
27690: NOT
27691: IFFALSE 27762
// allowed_to_repair_vehicles = allowed_to_repair_vehicles ^ UnitFilter ( ai_cargo_bay [ base ] diff 0 , [ [ f_not , [ f_lives , 1000 ] ] , [ f_inarea , GetBaseArea ( base ) ] ] ) ;
27693: LD_ADDR_VAR 0 9
27697: PUSH
27698: LD_VAR 0 9
27702: PUSH
27703: LD_EXP 60
27707: PUSH
27708: LD_VAR 0 14
27712: ARRAY
27713: PUSH
27714: LD_INT 0
27716: DIFF
27717: PPUSH
27718: LD_INT 3
27720: PUSH
27721: LD_INT 24
27723: PUSH
27724: LD_INT 1000
27726: PUSH
27727: EMPTY
27728: LIST
27729: LIST
27730: PUSH
27731: EMPTY
27732: LIST
27733: LIST
27734: PUSH
27735: LD_INT 95
27737: PUSH
27738: LD_VAR 0 14
27742: PPUSH
27743: CALL 11197 0 1
27747: PUSH
27748: EMPTY
27749: LIST
27750: LIST
27751: PUSH
27752: EMPTY
27753: LIST
27754: LIST
27755: PPUSH
27756: CALL_OW 72
27760: ADD
27761: ST_TO_ADDR
// allowed_to_repair_vehicles = allowed_to_repair_vehicles diff ( ai_refuel_vehicles_list [ base ] ^ ai_vehicles_being_repaired [ base ] ) ;
27762: LD_ADDR_VAR 0 9
27766: PUSH
27767: LD_VAR 0 9
27771: PUSH
27772: LD_EXP 54
27776: PUSH
27777: LD_VAR 0 14
27781: ARRAY
27782: PUSH
27783: LD_EXP 79
27787: PUSH
27788: LD_VAR 0 14
27792: ARRAY
27793: ADD
27794: DIFF
27795: ST_TO_ADDR
// if allowed_to_repair_vehicles > 0 or ai_vehicles_being_repaired [ base ] > 0 then
27796: LD_VAR 0 9
27800: PUSH
27801: LD_INT 0
27803: GREATER
27804: PUSH
27805: LD_EXP 79
27809: PUSH
27810: LD_VAR 0 14
27814: ARRAY
27815: PUSH
27816: LD_INT 0
27818: GREATER
27819: OR
27820: IFFALSE 28322
// begin if remote_mechanics > 0 then
27822: LD_VAR 0 18
27826: PUSH
27827: LD_INT 0
27829: GREATER
27830: IFFALSE 28066
// begin if under_attack then
27832: LD_VAR 0 10
27836: IFFALSE 27944
// begin for i in remote_driver_vehicles [ base ] do
27838: LD_ADDR_VAR 0 2
27842: PUSH
27843: LD_VAR 0 24
27847: PUSH
27848: LD_VAR 0 14
27852: ARRAY
27853: PUSH
27854: FOR_IN
27855: IFFALSE 27940
// if UnitFilter ( i [ 2 ] , [ f_ok ] ) = 0 and i [ 1 ] in remote_mechanics then
27857: LD_VAR 0 2
27861: PUSH
27862: LD_INT 2
27864: ARRAY
27865: PPUSH
27866: LD_INT 50
27868: PUSH
27869: EMPTY
27870: LIST
27871: PPUSH
27872: CALL_OW 72
27876: PUSH
27877: LD_INT 0
27879: EQUAL
27880: PUSH
27881: LD_VAR 0 2
27885: PUSH
27886: LD_INT 1
27888: ARRAY
27889: PUSH
27890: LD_VAR 0 18
27894: IN
27895: AND
27896: IFFALSE 27938
// begin mechanics_list = mechanics_list ^ i [ 1 ] ;
27898: LD_ADDR_VAR 0 3
27902: PUSH
27903: LD_VAR 0 3
27907: PUSH
27908: LD_VAR 0 2
27912: PUSH
27913: LD_INT 1
27915: ARRAY
27916: ADD
27917: ST_TO_ADDR
// remote_mechanics = remote_mechanics diff i [ 1 ] ;
27918: LD_ADDR_VAR 0 18
27922: PUSH
27923: LD_VAR 0 18
27927: PUSH
27928: LD_VAR 0 2
27932: PUSH
27933: LD_INT 1
27935: ARRAY
27936: DIFF
27937: ST_TO_ADDR
// end ;
27938: GO 27854
27940: POP
27941: POP
// end else
27942: GO 28066
// begin temp_unit = true ;
27944: LD_ADDR_VAR 0 7
27948: PUSH
27949: LD_INT 1
27951: ST_TO_ADDR
// for i in remote_driver_vehicles [ base ] do
27952: LD_ADDR_VAR 0 2
27956: PUSH
27957: LD_VAR 0 24
27961: PUSH
27962: LD_VAR 0 14
27966: ARRAY
27967: PUSH
27968: FOR_IN
27969: IFFALSE 28035
// begin for k in i [ 2 ] do
27971: LD_ADDR_VAR 0 12
27975: PUSH
27976: LD_VAR 0 2
27980: PUSH
27981: LD_INT 2
27983: ARRAY
27984: PUSH
27985: FOR_IN
27986: IFFALSE 28022
// if not IsInArea ( k , GetBaseArea ( base ) ) then
27988: LD_VAR 0 12
27992: PPUSH
27993: LD_VAR 0 14
27997: PPUSH
27998: CALL 11197 0 1
28002: PPUSH
28003: CALL_OW 308
28007: NOT
28008: IFFALSE 28020
// begin temp_unit = false ;
28010: LD_ADDR_VAR 0 7
28014: PUSH
28015: LD_INT 0
28017: ST_TO_ADDR
// break ;
28018: GO 28022
// end ;
28020: GO 27985
28022: POP
28023: POP
// if not temp_unit then
28024: LD_VAR 0 7
28028: NOT
28029: IFFALSE 28033
// break ;
28031: GO 28035
// end ;
28033: GO 27968
28035: POP
28036: POP
// if temp_unit then
28037: LD_VAR 0 7
28041: IFFALSE 28066
// begin mechanics_list = mechanics_list ^ remote_mechanics ;
28043: LD_ADDR_VAR 0 3
28047: PUSH
28048: LD_VAR 0 3
28052: PUSH
28053: LD_VAR 0 18
28057: ADD
28058: ST_TO_ADDR
// remote_mechanics = [ ] ;
28059: LD_ADDR_VAR 0 18
28063: PUSH
28064: EMPTY
28065: ST_TO_ADDR
// end ; end ; end ; if allowed_to_repair_vehicles > 0 then
28066: LD_VAR 0 9
28070: PUSH
28071: LD_INT 0
28073: GREATER
28074: IFFALSE 28291
// begin k = false ;
28076: LD_ADDR_VAR 0 12
28080: PUSH
28081: LD_INT 0
28083: ST_TO_ADDR
// if ai_vehicles_being_repaired [ base ] = 0 then
28084: LD_EXP 79
28088: PUSH
28089: LD_VAR 0 14
28093: ARRAY
28094: PUSH
28095: LD_INT 0
28097: EQUAL
28098: IFFALSE 28110
// k = true else
28100: LD_ADDR_VAR 0 12
28104: PUSH
28105: LD_INT 1
28107: ST_TO_ADDR
28108: GO 28173
// if IsOk ( ai_vehicles_being_repaired [ base ] [ 1 ] ) then
28110: LD_EXP 79
28114: PUSH
28115: LD_VAR 0 14
28119: ARRAY
28120: PUSH
28121: LD_INT 1
28123: ARRAY
28124: PPUSH
28125: CALL_OW 302
28129: IFFALSE 28173
// begin allowed_to_repair_vehicles = UnitFilter ( allowed_to_repair_vehicles , [ f_not , [ f_ok ] ] ) ;
28131: LD_ADDR_VAR 0 9
28135: PUSH
28136: LD_VAR 0 9
28140: PPUSH
28141: LD_INT 3
28143: PUSH
28144: LD_INT 50
28146: PUSH
28147: EMPTY
28148: LIST
28149: PUSH
28150: EMPTY
28151: LIST
28152: LIST
28153: PPUSH
28154: CALL_OW 72
28158: ST_TO_ADDR
// k := allowed_to_repair_vehicles > 0 ;
28159: LD_ADDR_VAR 0 12
28163: PUSH
28164: LD_VAR 0 9
28168: PUSH
28169: LD_INT 0
28171: GREATER
28172: ST_TO_ADDR
// end ; if k then
28173: LD_VAR 0 12
28177: IFFALSE 28291
// begin temp_list = [ ] ;
28179: LD_ADDR_VAR 0 4
28183: PUSH
28184: EMPTY
28185: ST_TO_ADDR
// for i in allowed_to_repair_vehicles do
28186: LD_ADDR_VAR 0 2
28190: PUSH
28191: LD_VAR 0 9
28195: PUSH
28196: FOR_IN
28197: IFFALSE 28222
// temp_list = temp_list ^ GetLives ( i ) ;
28199: LD_ADDR_VAR 0 4
28203: PUSH
28204: LD_VAR 0 4
28208: PUSH
28209: LD_VAR 0 2
28213: PPUSH
28214: CALL_OW 256
28218: ADD
28219: ST_TO_ADDR
28220: GO 28196
28222: POP
28223: POP
// temp_unit = WorstFromListByList ( allowed_to_repair_vehicles , temp_list ) ;
28224: LD_ADDR_VAR 0 7
28228: PUSH
28229: LD_VAR 0 9
28233: PPUSH
28234: LD_VAR 0 4
28238: PPUSH
28239: CALL_OW 78
28243: ST_TO_ADDR
// temp_list = temp_unit ^ ai_vehicles_being_repaired [ base ] ;
28244: LD_ADDR_VAR 0 4
28248: PUSH
28249: LD_VAR 0 7
28253: PUSH
28254: LD_EXP 79
28258: PUSH
28259: LD_VAR 0 14
28263: ARRAY
28264: ADD
28265: ST_TO_ADDR
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
28266: LD_ADDR_EXP 79
28270: PUSH
28271: LD_EXP 79
28275: PPUSH
28276: LD_VAR 0 14
28280: PPUSH
28281: LD_VAR 0 4
28285: PPUSH
28286: CALL_OW 1
28290: ST_TO_ADDR
// end ; end ; ComRepairVehicle ( GetHumansOutOfUnits ( mechanics_list ) , ai_vehicles_being_repaired [ base ] [ 1 ] ) ;
28291: LD_VAR 0 3
28295: PPUSH
28296: CALL 22083 0 1
28300: PPUSH
28301: LD_EXP 79
28305: PUSH
28306: LD_VAR 0 14
28310: ARRAY
28311: PUSH
28312: LD_INT 1
28314: ARRAY
28315: PPUSH
28316: CALL_OW 129
// end else
28320: GO 28387
// begin DistributeHumansToBuildings ( base , mechanics_list , UnitFilter ( ai_facts [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
28322: LD_VAR 0 14
28326: PPUSH
28327: LD_VAR 0 3
28331: PPUSH
28332: LD_EXP 47
28336: PUSH
28337: LD_VAR 0 14
28341: ARRAY
28342: PPUSH
28343: LD_INT 50
28345: PUSH
28346: EMPTY
28347: LIST
28348: PUSH
28349: LD_INT 3
28351: PUSH
28352: LD_INT 57
28354: PUSH
28355: EMPTY
28356: LIST
28357: PUSH
28358: EMPTY
28359: LIST
28360: LIST
28361: PUSH
28362: EMPTY
28363: LIST
28364: LIST
28365: PPUSH
28366: CALL_OW 72
28370: PPUSH
28371: LD_INT 3
28373: PPUSH
28374: LD_INT 6
28376: PPUSH
28377: LD_INT 1
28379: PPUSH
28380: LD_INT 0
28382: PPUSH
28383: CALL 14154 0 7
// end ; if remote_driver_vehicles [ base ] > 0 then
28387: LD_VAR 0 24
28391: PUSH
28392: LD_VAR 0 14
28396: ARRAY
28397: PUSH
28398: LD_INT 0
28400: GREATER
28401: IFFALSE 28937
// begin if not IsOk ( ai_control_tower [ base ] ) then
28403: LD_EXP 56
28407: PUSH
28408: LD_VAR 0 14
28412: ARRAY
28413: PPUSH
28414: CALL_OW 302
28418: NOT
28419: IFFALSE 28488
// begin DistributeHumansToBuildings ( base , remote_mechanics , UnitFilter ( ai_facts [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
28421: LD_VAR 0 14
28425: PPUSH
28426: LD_VAR 0 18
28430: PPUSH
28431: LD_EXP 47
28435: PUSH
28436: LD_VAR 0 14
28440: ARRAY
28441: PPUSH
28442: LD_INT 50
28444: PUSH
28445: EMPTY
28446: LIST
28447: PUSH
28448: LD_INT 3
28450: PUSH
28451: LD_INT 57
28453: PUSH
28454: EMPTY
28455: LIST
28456: PUSH
28457: EMPTY
28458: LIST
28459: LIST
28460: PUSH
28461: EMPTY
28462: LIST
28463: LIST
28464: PPUSH
28465: CALL_OW 72
28469: PPUSH
28470: LD_INT 3
28472: PPUSH
28473: LD_INT 6
28475: PPUSH
28476: LD_INT 1
28478: PPUSH
28479: LD_INT 0
28481: PPUSH
28482: CALL 14154 0 7
// end else
28486: GO 28937
// begin for i in remote_driver_vehicles [ base ] do
28488: LD_ADDR_VAR 0 2
28492: PUSH
28493: LD_VAR 0 24
28497: PUSH
28498: LD_VAR 0 14
28502: ARRAY
28503: PUSH
28504: FOR_IN
28505: IFFALSE 28935
// begin if not i [ 1 ] in remote_mechanics then
28507: LD_VAR 0 2
28511: PUSH
28512: LD_INT 1
28514: ARRAY
28515: PUSH
28516: LD_VAR 0 18
28520: IN
28521: NOT
28522: IFFALSE 28526
// continue ;
28524: GO 28504
// if GetClass ( i [ 1 ] ) <> class_mechanic then
28526: LD_VAR 0 2
28530: PUSH
28531: LD_INT 1
28533: ARRAY
28534: PPUSH
28535: CALL_OW 257
28539: PUSH
28540: LD_INT 3
28542: NONEQUAL
28543: IFFALSE 28751
// begin temp_unit = 0 ;
28545: LD_ADDR_VAR 0 7
28549: PUSH
28550: LD_INT 0
28552: ST_TO_ADDR
// for k in ai_facts [ base ] do
28553: LD_ADDR_VAR 0 12
28557: PUSH
28558: LD_EXP 47
28562: PUSH
28563: LD_VAR 0 14
28567: ARRAY
28568: PUSH
28569: FOR_IN
28570: IFFALSE 28612
// if IsOk ( k ) and UnitsInside ( k ) < 6 then
28572: LD_VAR 0 12
28576: PPUSH
28577: CALL_OW 302
28581: PUSH
28582: LD_VAR 0 12
28586: PPUSH
28587: CALL_OW 313
28591: PUSH
28592: LD_INT 6
28594: LESS
28595: AND
28596: IFFALSE 28610
// begin temp_unit = k ;
28598: LD_ADDR_VAR 0 7
28602: PUSH
28603: LD_VAR 0 12
28607: ST_TO_ADDR
// break ;
28608: GO 28612
// end ;
28610: GO 28569
28612: POP
28613: POP
// if temp_unit > 0 then
28614: LD_VAR 0 7
28618: PUSH
28619: LD_INT 0
28621: GREATER
28622: IFFALSE 28749
// begin if IsInUnit ( i [ 1 ] ) = temp_unit then
28624: LD_VAR 0 2
28628: PUSH
28629: LD_INT 1
28631: ARRAY
28632: PPUSH
28633: CALL_OW 310
28637: PUSH
28638: LD_VAR 0 7
28642: EQUAL
28643: IFFALSE 28663
// ComChangeProfession ( i [ 1 ] , class_mechanic ) else
28645: LD_VAR 0 2
28649: PUSH
28650: LD_INT 1
28652: ARRAY
28653: PPUSH
28654: LD_INT 3
28656: PPUSH
28657: CALL_OW 123
28661: GO 28749
// begin case GetType ( IsInUnit ( i [ 1 ] ) ) of unit_building :
28663: LD_VAR 0 2
28667: PUSH
28668: LD_INT 1
28670: ARRAY
28671: PPUSH
28672: CALL_OW 310
28676: PPUSH
28677: CALL_OW 247
28681: PUSH
28682: LD_INT 3
28684: DOUBLE
28685: EQUAL
28686: IFTRUE 28690
28688: GO 28706
28690: POP
// ComExitBuilding ( i [ 1 ] ) ; unit_vehicle :
28691: LD_VAR 0 2
28695: PUSH
28696: LD_INT 1
28698: ARRAY
28699: PPUSH
28700: CALL_OW 122
28704: GO 28749
28706: LD_INT 2
28708: DOUBLE
28709: EQUAL
28710: IFTRUE 28714
28712: GO 28730
28714: POP
// ComExitVehicle ( i [ 1 ] ) ; else
28715: LD_VAR 0 2
28719: PUSH
28720: LD_INT 1
28722: ARRAY
28723: PPUSH
28724: CALL_OW 121
28728: GO 28749
28730: POP
// ComEnterUnit ( i [ 1 ] , temp_unit ) ; end ;
28731: LD_VAR 0 2
28735: PUSH
28736: LD_INT 1
28738: ARRAY
28739: PPUSH
28740: LD_VAR 0 7
28744: PPUSH
28745: CALL_OW 120
// end ; end ; end else
28749: GO 28933
// begin temp_unit = IsInUnit ( i [ 1 ] ) ;
28751: LD_ADDR_VAR 0 7
28755: PUSH
28756: LD_VAR 0 2
28760: PUSH
28761: LD_INT 1
28763: ARRAY
28764: PPUSH
28765: CALL_OW 310
28769: ST_TO_ADDR
// if temp_unit <> ai_control_tower [ base ] then
28770: LD_VAR 0 7
28774: PUSH
28775: LD_EXP 56
28779: PUSH
28780: LD_VAR 0 14
28784: ARRAY
28785: NONEQUAL
28786: IFFALSE 28873
// begin case GetType ( temp_unit ) of unit_building :
28788: LD_VAR 0 7
28792: PPUSH
28793: CALL_OW 247
28797: PUSH
28798: LD_INT 3
28800: DOUBLE
28801: EQUAL
28802: IFTRUE 28806
28804: GO 28822
28806: POP
// ComExitBuilding ( i [ 1 ] ) ; unit_vehicle :
28807: LD_VAR 0 2
28811: PUSH
28812: LD_INT 1
28814: ARRAY
28815: PPUSH
28816: CALL_OW 122
28820: GO 28871
28822: LD_INT 2
28824: DOUBLE
28825: EQUAL
28826: IFTRUE 28830
28828: GO 28846
28830: POP
// ComExitVehicle ( i [ 1 ] ) ; else
28831: LD_VAR 0 2
28835: PUSH
28836: LD_INT 1
28838: ARRAY
28839: PPUSH
28840: CALL_OW 121
28844: GO 28871
28846: POP
// ComEnterUnit ( i [ 1 ] , ai_control_tower [ base ] ) ; end ;
28847: LD_VAR 0 2
28851: PUSH
28852: LD_INT 1
28854: ARRAY
28855: PPUSH
28856: LD_EXP 56
28860: PUSH
28861: LD_VAR 0 14
28865: ARRAY
28866: PPUSH
28867: CALL_OW 120
// end else
28871: GO 28933
// for k in i [ 2 ] do
28873: LD_ADDR_VAR 0 12
28877: PUSH
28878: LD_VAR 0 2
28882: PUSH
28883: LD_INT 2
28885: ARRAY
28886: PUSH
28887: FOR_IN
28888: IFFALSE 28931
// if IsControledBy ( k ) <> i [ 1 ] then
28890: LD_VAR 0 12
28894: PPUSH
28895: CALL_OW 312
28899: PUSH
28900: LD_VAR 0 2
28904: PUSH
28905: LD_INT 1
28907: ARRAY
28908: NONEQUAL
28909: IFFALSE 28929
// ComLinkTo ( k , i [ 1 ] ) ;
28911: LD_VAR 0 12
28915: PPUSH
28916: LD_VAR 0 2
28920: PUSH
28921: LD_INT 1
28923: ARRAY
28924: PPUSH
28925: CALL_OW 135
28929: GO 28887
28931: POP
28932: POP
// end ; end ;
28933: GO 28504
28935: POP
28936: POP
// end ; end ; end ;
28937: GO 24324
28939: POP
28940: POP
// until false ;
28941: LD_INT 0
28943: IFFALSE 24307
// end ;
28945: PPOPN 24
28947: END
// function MaxNumWarVehicles ( base ) ; begin
28948: LD_INT 0
28950: PPUSH
// case base of 1 :
28951: LD_VAR 0 1
28955: PUSH
28956: LD_INT 1
28958: DOUBLE
28959: EQUAL
28960: IFTRUE 28964
28962: GO 29021
28964: POP
// result = WorstFromListByList ( [ ai_mechanics_defend [ base ] + 0 , 3 ] , [ ai_mechanics_defend [ base ] + 0 , 3 ] ) ; 2 :
28965: LD_ADDR_VAR 0 2
28969: PUSH
28970: LD_EXP 31
28974: PUSH
28975: LD_VAR 0 1
28979: ARRAY
28980: PUSH
28981: LD_INT 0
28983: PLUS
28984: PUSH
28985: LD_INT 3
28987: PUSH
28988: EMPTY
28989: LIST
28990: LIST
28991: PPUSH
28992: LD_EXP 31
28996: PUSH
28997: LD_VAR 0 1
29001: ARRAY
29002: PUSH
29003: LD_INT 0
29005: PLUS
29006: PUSH
29007: LD_INT 3
29009: PUSH
29010: EMPTY
29011: LIST
29012: LIST
29013: PPUSH
29014: CALL_OW 78
29018: ST_TO_ADDR
29019: GO 29077
29021: LD_INT 2
29023: DOUBLE
29024: EQUAL
29025: IFTRUE 29029
29027: GO 29040
29029: POP
// result = 0 ; 3 :
29030: LD_ADDR_VAR 0 2
29034: PUSH
29035: LD_INT 0
29037: ST_TO_ADDR
29038: GO 29077
29040: LD_INT 3
29042: DOUBLE
29043: EQUAL
29044: IFTRUE 29048
29046: GO 29076
29048: POP
// result = [ 3 , 4 , 5 ] [ difficulty ] ; end ;
29049: LD_ADDR_VAR 0 2
29053: PUSH
29054: LD_INT 3
29056: PUSH
29057: LD_INT 4
29059: PUSH
29060: LD_INT 5
29062: PUSH
29063: EMPTY
29064: LIST
29065: LIST
29066: LIST
29067: PUSH
29068: LD_OWVAR 67
29072: ARRAY
29073: ST_TO_ADDR
29074: GO 29077
29076: POP
// end ;
29077: LD_VAR 0 2
29081: RET
// function FindNextHexOldWaypointSystem ( waypoints , un ) ; var dist , k , num , temp ; begin
29082: LD_INT 0
29084: PPUSH
29085: PPUSH
29086: PPUSH
29087: PPUSH
29088: PPUSH
// dist = GetDistUnitXY ( un , waypoints [ 1 ] [ 1 ] , waypoints [ 1 ] [ 2 ] ) ;
29089: LD_ADDR_VAR 0 4
29093: PUSH
29094: LD_VAR 0 2
29098: PPUSH
29099: LD_VAR 0 1
29103: PUSH
29104: LD_INT 1
29106: ARRAY
29107: PUSH
29108: LD_INT 1
29110: ARRAY
29111: PPUSH
29112: LD_VAR 0 1
29116: PUSH
29117: LD_INT 1
29119: ARRAY
29120: PUSH
29121: LD_INT 2
29123: ARRAY
29124: PPUSH
29125: CALL_OW 297
29129: ST_TO_ADDR
// num = 1 ;
29130: LD_ADDR_VAR 0 6
29134: PUSH
29135: LD_INT 1
29137: ST_TO_ADDR
// for k = 2 to waypoints do
29138: LD_ADDR_VAR 0 5
29142: PUSH
29143: DOUBLE
29144: LD_INT 2
29146: DEC
29147: ST_TO_ADDR
29148: LD_VAR 0 1
29152: PUSH
29153: FOR_TO
29154: IFFALSE 29235
// begin temp = GetDistUnitXY ( un , waypoints [ k ] [ 1 ] , waypoints [ k ] [ 2 ] ) ;
29156: LD_ADDR_VAR 0 7
29160: PUSH
29161: LD_VAR 0 2
29165: PPUSH
29166: LD_VAR 0 1
29170: PUSH
29171: LD_VAR 0 5
29175: ARRAY
29176: PUSH
29177: LD_INT 1
29179: ARRAY
29180: PPUSH
29181: LD_VAR 0 1
29185: PUSH
29186: LD_VAR 0 5
29190: ARRAY
29191: PUSH
29192: LD_INT 2
29194: ARRAY
29195: PPUSH
29196: CALL_OW 297
29200: ST_TO_ADDR
// if temp < dist then
29201: LD_VAR 0 7
29205: PUSH
29206: LD_VAR 0 4
29210: LESS
29211: IFFALSE 29233
// begin dist = temp ;
29213: LD_ADDR_VAR 0 4
29217: PUSH
29218: LD_VAR 0 7
29222: ST_TO_ADDR
// num = k ;
29223: LD_ADDR_VAR 0 6
29227: PUSH
29228: LD_VAR 0 5
29232: ST_TO_ADDR
// end ; end ;
29233: GO 29153
29235: POP
29236: POP
// if num < waypoints + 0 then
29237: LD_VAR 0 6
29241: PUSH
29242: LD_VAR 0 1
29246: PUSH
29247: LD_INT 0
29249: PLUS
29250: LESS
29251: IFFALSE 29267
// num = num + 1 ;
29253: LD_ADDR_VAR 0 6
29257: PUSH
29258: LD_VAR 0 6
29262: PUSH
29263: LD_INT 1
29265: PLUS
29266: ST_TO_ADDR
// result = waypoints [ num ] ;
29267: LD_ADDR_VAR 0 3
29271: PUSH
29272: LD_VAR 0 1
29276: PUSH
29277: LD_VAR 0 6
29281: ARRAY
29282: ST_TO_ADDR
// end ;
29283: LD_VAR 0 3
29287: RET
// every 0 0$1 + 0 0$0.1 do var i , temp_value , temp_unit , temp_list , base , idle_factories , fact ; var vehicle_prod_delay ;
29288: GO 29290
29290: DISABLE
29291: LD_INT 0
29293: PPUSH
29294: PPUSH
29295: PPUSH
29296: PPUSH
29297: PPUSH
29298: PPUSH
29299: PPUSH
29300: PPUSH
// begin vehicle_prod_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
29301: LD_ADDR_VAR 0 8
29305: PUSH
29306: LD_INT 0
29308: PUSH
29309: LD_INT 0
29311: PUSH
29312: LD_INT 0
29314: PUSH
29315: EMPTY
29316: LIST
29317: LIST
29318: LIST
29319: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
29320: LD_INT 35
29322: PPUSH
29323: CALL_OW 67
// for base in ai_bases do
29327: LD_ADDR_VAR 0 5
29331: PUSH
29332: LD_EXP 58
29336: PUSH
29337: FOR_IN
29338: IFFALSE 30164
// begin if ContactTime ( GetBaseSide ( base ) ) <= 0 0$10 and ai_vehicles_defend [ base ] >= [ 0 , 1 , 2 ] [ difficulty ] then
29340: LD_VAR 0 5
29344: PPUSH
29345: CALL 11268 0 1
29349: PPUSH
29350: CALL_OW 462
29354: PUSH
29355: LD_INT 350
29357: LESSEQUAL
29358: PUSH
29359: LD_EXP 39
29363: PUSH
29364: LD_VAR 0 5
29368: ARRAY
29369: PUSH
29370: LD_INT 0
29372: PUSH
29373: LD_INT 1
29375: PUSH
29376: LD_INT 2
29378: PUSH
29379: EMPTY
29380: LIST
29381: LIST
29382: LIST
29383: PUSH
29384: LD_OWVAR 67
29388: ARRAY
29389: GREATEREQUAL
29390: AND
29391: IFFALSE 29433
// begin vehicle_prod_delay = Replace ( vehicle_prod_delay , base , [ 1 1$15 , 0 0$45 , 0 0$30 ] [ difficulty ] ) ;
29393: LD_ADDR_VAR 0 8
29397: PUSH
29398: LD_VAR 0 8
29402: PPUSH
29403: LD_VAR 0 5
29407: PPUSH
29408: LD_INT 2625
29410: PUSH
29411: LD_INT 1575
29413: PUSH
29414: LD_INT 1050
29416: PUSH
29417: EMPTY
29418: LIST
29419: LIST
29420: LIST
29421: PUSH
29422: LD_OWVAR 67
29426: ARRAY
29427: PPUSH
29428: CALL_OW 1
29432: ST_TO_ADDR
// end ; idle_factories = [ ] ;
29433: LD_ADDR_VAR 0 6
29437: PUSH
29438: EMPTY
29439: ST_TO_ADDR
// for i in ai_facts [ base ] do
29440: LD_ADDR_VAR 0 1
29444: PUSH
29445: LD_EXP 47
29449: PUSH
29450: LD_VAR 0 5
29454: ARRAY
29455: PUSH
29456: FOR_IN
29457: IFFALSE 29518
// if BuildingStatus ( i ) = bs_idle and IsOk ( i ) and GetBType ( i ) = b_factory then
29459: LD_VAR 0 1
29463: PPUSH
29464: CALL_OW 461
29468: PUSH
29469: LD_INT 2
29471: EQUAL
29472: PUSH
29473: LD_VAR 0 1
29477: PPUSH
29478: CALL_OW 302
29482: AND
29483: PUSH
29484: LD_VAR 0 1
29488: PPUSH
29489: CALL_OW 266
29493: PUSH
29494: LD_INT 3
29496: EQUAL
29497: AND
29498: IFFALSE 29516
// idle_factories = idle_factories ^ i ;
29500: LD_ADDR_VAR 0 6
29504: PUSH
29505: LD_VAR 0 6
29509: PUSH
29510: LD_VAR 0 1
29514: ADD
29515: ST_TO_ADDR
29516: GO 29456
29518: POP
29519: POP
// if idle_factories = 0 then
29520: LD_VAR 0 6
29524: PUSH
29525: LD_INT 0
29527: EQUAL
29528: IFFALSE 29532
// continue ;
29530: GO 29337
// temp_value = false ;
29532: LD_ADDR_VAR 0 2
29536: PUSH
29537: LD_INT 0
29539: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
29540: LD_ADDR_VAR 0 1
29544: PUSH
29545: LD_EXP 38
29549: PUSH
29550: LD_VAR 0 5
29554: ARRAY
29555: PUSH
29556: FOR_IN
29557: IFFALSE 29729
// if i [ 4 ] in [ b_bunker , b_turret ] then
29559: LD_VAR 0 1
29563: PUSH
29564: LD_INT 4
29566: ARRAY
29567: PUSH
29568: LD_INT 32
29570: PUSH
29571: LD_INT 33
29573: PUSH
29574: EMPTY
29575: LIST
29576: LIST
29577: IN
29578: IFFALSE 29727
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
29580: LD_ADDR_VAR 0 3
29584: PUSH
29585: LD_VAR 0 1
29589: PUSH
29590: LD_INT 1
29592: ARRAY
29593: PPUSH
29594: LD_VAR 0 1
29598: PUSH
29599: LD_INT 2
29601: ARRAY
29602: PPUSH
29603: CALL_OW 428
29607: ST_TO_ADDR
// if GetBType ( temp_unit ) in [ b_bunker , b_turret ] and not IsConstructed ( temp_unit ) and GetBWeapon ( temp_unit ) <> i [ 7 ] then
29608: LD_VAR 0 3
29612: PPUSH
29613: CALL_OW 266
29617: PUSH
29618: LD_INT 32
29620: PUSH
29621: LD_INT 33
29623: PUSH
29624: EMPTY
29625: LIST
29626: LIST
29627: IN
29628: PUSH
29629: LD_VAR 0 3
29633: PPUSH
29634: CALL_OW 304
29638: NOT
29639: AND
29640: PUSH
29641: LD_VAR 0 3
29645: PPUSH
29646: CALL_OW 269
29650: PUSH
29651: LD_VAR 0 1
29655: PUSH
29656: LD_INT 7
29658: ARRAY
29659: NONEQUAL
29660: AND
29661: IFFALSE 29719
// for fact in idle_factories do
29663: LD_ADDR_VAR 0 7
29667: PUSH
29668: LD_VAR 0 6
29672: PUSH
29673: FOR_IN
29674: IFFALSE 29717
// if IsWeaponFactory ( fact ) then
29676: LD_VAR 0 7
29680: PPUSH
29681: CALL 30173 0 1
29685: IFFALSE 29715
// begin ComPlaceWeapon ( temp_unit , i [ 7 ] ) ;
29687: LD_VAR 0 3
29691: PPUSH
29692: LD_VAR 0 1
29696: PUSH
29697: LD_INT 7
29699: ARRAY
29700: PPUSH
29701: CALL_OW 148
// temp_value = true ;
29705: LD_ADDR_VAR 0 2
29709: PUSH
29710: LD_INT 1
29712: ST_TO_ADDR
// break ;
29713: GO 29717
// end ;
29715: GO 29673
29717: POP
29718: POP
// if temp_value then
29719: LD_VAR 0 2
29723: IFFALSE 29727
// break ;
29725: GO 29729
// end ;
29727: GO 29556
29729: POP
29730: POP
// if temp_value then
29731: LD_VAR 0 2
29735: IFFALSE 29739
// continue ;
29737: GO 29337
// if vehicle_prod_delay [ base ] > 0 0$0 or game_phase = 2 then
29739: LD_VAR 0 8
29743: PUSH
29744: LD_VAR 0 5
29748: ARRAY
29749: PUSH
29750: LD_INT 0
29752: GREATER
29753: PUSH
29754: LD_EXP 88
29758: PUSH
29759: LD_INT 2
29761: EQUAL
29762: OR
29763: IFFALSE 29802
// begin vehicle_prod_delay = Replace ( vehicle_prod_delay , base , vehicle_prod_delay [ base ] - 0 0$1 ) ;
29765: LD_ADDR_VAR 0 8
29769: PUSH
29770: LD_VAR 0 8
29774: PPUSH
29775: LD_VAR 0 5
29779: PPUSH
29780: LD_VAR 0 8
29784: PUSH
29785: LD_VAR 0 5
29789: ARRAY
29790: PUSH
29791: LD_INT 35
29793: MINUS
29794: PPUSH
29795: CALL_OW 1
29799: ST_TO_ADDR
// continue ;
29800: GO 29337
// end ; if ai_vehicles_defend [ base ] < MaxNumWarVehicles ( base ) then
29802: LD_EXP 39
29806: PUSH
29807: LD_VAR 0 5
29811: ARRAY
29812: PUSH
29813: LD_VAR 0 5
29817: PPUSH
29818: CALL 28948 0 1
29822: LESS
29823: IFFALSE 30162
// begin case base of 1 :
29825: LD_VAR 0 5
29829: PUSH
29830: LD_INT 1
29832: DOUBLE
29833: EQUAL
29834: IFTRUE 29838
29836: GO 29956
29838: POP
// begin case Rand ( 1 , 4 ) of 1 :
29839: LD_INT 1
29841: PPUSH
29842: LD_INT 4
29844: PPUSH
29845: CALL_OW 12
29849: PUSH
29850: LD_INT 1
29852: DOUBLE
29853: EQUAL
29854: IFTRUE 29858
29856: GO 29869
29858: POP
// temp_value = us_gatling_gun ; 2 :
29859: LD_ADDR_VAR 0 2
29863: PUSH
29864: LD_INT 4
29866: ST_TO_ADDR
29867: GO 29927
29869: LD_INT 2
29871: DOUBLE
29872: EQUAL
29873: IFTRUE 29877
29875: GO 29888
29877: POP
// temp_value = us_laser ; 3 :
29878: LD_ADDR_VAR 0 2
29882: PUSH
29883: LD_INT 9
29885: ST_TO_ADDR
29886: GO 29927
29888: LD_INT 3
29890: DOUBLE
29891: EQUAL
29892: IFTRUE 29896
29894: GO 29907
29896: POP
// temp_value = us_double_gun ; 4 :
29897: LD_ADDR_VAR 0 2
29901: PUSH
29902: LD_INT 5
29904: ST_TO_ADDR
29905: GO 29927
29907: LD_INT 4
29909: DOUBLE
29910: EQUAL
29911: IFTRUE 29915
29913: GO 29926
29915: POP
// temp_value = us_rocket_launcher ; end ;
29916: LD_ADDR_VAR 0 2
29920: PUSH
29921: LD_INT 7
29923: ST_TO_ADDR
29924: GO 29927
29926: POP
// ComConstruct ( idle_factories [ 1 ] , us_medium_wheeled , engine_siberite , control_remote , temp_value ) ;
29927: LD_VAR 0 6
29931: PUSH
29932: LD_INT 1
29934: ARRAY
29935: PPUSH
29936: LD_INT 2
29938: PPUSH
29939: LD_INT 3
29941: PPUSH
29942: LD_INT 2
29944: PPUSH
29945: LD_VAR 0 2
29949: PPUSH
29950: CALL_OW 125
// end ; 2 :
29954: GO 30162
29956: LD_INT 2
29958: DOUBLE
29959: EQUAL
29960: IFTRUE 29964
29962: GO 29967
29964: POP
// begin end ; 3 :
29965: GO 30162
29967: LD_INT 3
29969: DOUBLE
29970: EQUAL
29971: IFTRUE 29975
29973: GO 30161
29975: POP
// begin if PlayerAtEasternBorder then
29976: CALL 30479 0 0
29980: IFFALSE 30003
// temp_list = [ ru_heavy_machine_gun , ru_gun , ru_rocket_launcher ] else
29982: LD_ADDR_VAR 0 4
29986: PUSH
29987: LD_INT 42
29989: PUSH
29990: LD_INT 44
29992: PUSH
29993: LD_INT 45
29995: PUSH
29996: EMPTY
29997: LIST
29998: LIST
29999: LIST
30000: ST_TO_ADDR
30001: GO 30022
// temp_list = [ ru_gatling_gun , ru_heavy_gun , ru_rocket_launcher ] ;
30003: LD_ADDR_VAR 0 4
30007: PUSH
30008: LD_INT 43
30010: PUSH
30011: LD_INT 46
30013: PUSH
30014: LD_INT 45
30016: PUSH
30017: EMPTY
30018: LIST
30019: LIST
30020: LIST
30021: ST_TO_ADDR
// temp_value = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
30022: LD_ADDR_VAR 0 2
30026: PUSH
30027: LD_VAR 0 4
30031: PUSH
30032: LD_INT 1
30034: PPUSH
30035: LD_VAR 0 4
30039: PUSH
30040: LD_INT 0
30042: PLUS
30043: PPUSH
30044: CALL_OW 12
30048: ARRAY
30049: ST_TO_ADDR
// if not IsWeaponFactory ( idle_factories [ 1 ] ) then
30050: LD_VAR 0 6
30054: PUSH
30055: LD_INT 1
30057: ARRAY
30058: PPUSH
30059: CALL 30173 0 1
30063: NOT
30064: IFFALSE 30074
// temp_value = ru_heavy_machine_gun ;
30066: LD_ADDR_VAR 0 2
30070: PUSH
30071: LD_INT 42
30073: ST_TO_ADDR
// if temp_value = ru_heavy_gun then
30074: LD_VAR 0 2
30078: PUSH
30079: LD_INT 46
30081: EQUAL
30082: IFFALSE 30094
// i = ru_heavy_tracked else
30084: LD_ADDR_VAR 0 1
30088: PUSH
30089: LD_INT 24
30091: ST_TO_ADDR
30092: GO 30130
// if Rand ( difficulty , 4 ) = 4 then
30094: LD_OWVAR 67
30098: PPUSH
30099: LD_INT 4
30101: PPUSH
30102: CALL_OW 12
30106: PUSH
30107: LD_INT 4
30109: EQUAL
30110: IFFALSE 30122
// i = ru_heavy_tracked else
30112: LD_ADDR_VAR 0 1
30116: PUSH
30117: LD_INT 24
30119: ST_TO_ADDR
30120: GO 30130
// i = ru_medium_tracked ;
30122: LD_ADDR_VAR 0 1
30126: PUSH
30127: LD_INT 22
30129: ST_TO_ADDR
// ComConstruct ( idle_factories [ 1 ] , i , engine_siberite , control_computer , temp_value ) ;
30130: LD_VAR 0 6
30134: PUSH
30135: LD_INT 1
30137: ARRAY
30138: PPUSH
30139: LD_VAR 0 1
30143: PPUSH
30144: LD_INT 3
30146: PPUSH
30147: LD_INT 3
30149: PPUSH
30150: LD_VAR 0 2
30154: PPUSH
30155: CALL_OW 125
// end ; end ;
30159: GO 30162
30161: POP
// end ; end ;
30162: GO 29337
30164: POP
30165: POP
// until false ;
30166: LD_INT 0
30168: IFFALSE 29320
// end ;
30170: PPOPN 8
30172: END
// function IsWeaponFactory ( factory ) ; begin
30173: LD_INT 0
30175: PPUSH
// if FilterAllUnits ( [ [ f_dist , factory , 4 ] , [ f_btype , b_ext_gun ] ] ) > 0 then
30176: LD_INT 91
30178: PUSH
30179: LD_VAR 0 1
30183: PUSH
30184: LD_INT 4
30186: PUSH
30187: EMPTY
30188: LIST
30189: LIST
30190: LIST
30191: PUSH
30192: LD_INT 30
30194: PUSH
30195: LD_INT 17
30197: PUSH
30198: EMPTY
30199: LIST
30200: LIST
30201: PUSH
30202: EMPTY
30203: LIST
30204: LIST
30205: PPUSH
30206: CALL_OW 69
30210: PUSH
30211: LD_INT 0
30213: GREATER
30214: IFFALSE 30226
// result = true else
30216: LD_ADDR_VAR 0 2
30220: PUSH
30221: LD_INT 1
30223: ST_TO_ADDR
30224: GO 30234
// result = false ;
30226: LD_ADDR_VAR 0 2
30230: PUSH
30231: LD_INT 0
30233: ST_TO_ADDR
// end ;
30234: LD_VAR 0 2
30238: RET
// on VehicleCaptured ( new_identifier , old_identifier , old_side , capturing_unit ) do var temp_list , base ;
30239: LD_INT 0
30241: PPUSH
30242: PPUSH
// begin if old_side = you then
30243: LD_VAR 0 3
30247: PUSH
30248: LD_EXP 2
30252: EQUAL
30253: IFFALSE 30257
// exit ;
30255: GO 30288
// for base in ai_bases do
30257: LD_ADDR_VAR 0 6
30261: PUSH
30262: LD_EXP 58
30266: PUSH
30267: FOR_IN
30268: IFFALSE 30286
// RemoveVehicleFromVariables ( base , old_identifier ) ;
30270: LD_VAR 0 6
30274: PPUSH
30275: LD_VAR 0 2
30279: PPUSH
30280: CALL 10056 0 2
30284: GO 30267
30286: POP
30287: POP
// end ;
30288: PPOPN 6
30290: END
// on VehicleConstructed ( vehicle , factory ) do var side , temp_list , base ;
30291: LD_INT 0
30293: PPUSH
30294: PPUSH
30295: PPUSH
// begin side = GetSide ( vehicle ) ;
30296: LD_ADDR_VAR 0 3
30300: PUSH
30301: LD_VAR 0 1
30305: PPUSH
30306: CALL_OW 255
30310: ST_TO_ADDR
// if side = you then
30311: LD_VAR 0 3
30315: PUSH
30316: LD_EXP 2
30320: EQUAL
30321: IFFALSE 30325
// exit ;
30323: GO 30476
// base = FindBase ( vehicle ) ;
30325: LD_ADDR_VAR 0 5
30329: PUSH
30330: LD_VAR 0 1
30334: PPUSH
30335: CALL 11416 0 1
30339: ST_TO_ADDR
// if base = 0 then
30340: LD_VAR 0 5
30344: PUSH
30345: LD_INT 0
30347: EQUAL
30348: IFFALSE 30352
// exit ;
30350: GO 30476
// if not GetWeapon ( vehicle ) in [ us_cargo_bay , ar_cargo_bay , ru_cargo_bay ] then
30352: LD_VAR 0 1
30356: PPUSH
30357: CALL_OW 264
30361: PUSH
30362: LD_INT 12
30364: PUSH
30365: LD_INT 32
30367: PUSH
30368: LD_INT 51
30370: PUSH
30371: EMPTY
30372: LIST
30373: LIST
30374: LIST
30375: IN
30376: NOT
30377: IFFALSE 30428
// begin temp_list = ai_vehicles_defend [ base ] ^ vehicle ;
30379: LD_ADDR_VAR 0 4
30383: PUSH
30384: LD_EXP 39
30388: PUSH
30389: LD_VAR 0 5
30393: ARRAY
30394: PUSH
30395: LD_VAR 0 1
30399: ADD
30400: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
30401: LD_ADDR_EXP 39
30405: PUSH
30406: LD_EXP 39
30410: PPUSH
30411: LD_VAR 0 5
30415: PPUSH
30416: LD_VAR 0 4
30420: PPUSH
30421: CALL_OW 1
30425: ST_TO_ADDR
// end else
30426: GO 30476
// begin ai_cargo_bay = Replace ( ai_cargo_bay , base , vehicle ) ;
30428: LD_ADDR_EXP 60
30432: PUSH
30433: LD_EXP 60
30437: PPUSH
30438: LD_VAR 0 5
30442: PPUSH
30443: LD_VAR 0 1
30447: PPUSH
30448: CALL_OW 1
30452: ST_TO_ADDR
// ai_cargo_bay_under_construction = Replace ( ai_cargo_bay_under_construction , base , false ) ;
30453: LD_ADDR_EXP 61
30457: PUSH
30458: LD_EXP 61
30462: PPUSH
30463: LD_VAR 0 5
30467: PPUSH
30468: LD_INT 0
30470: PPUSH
30471: CALL_OW 1
30475: ST_TO_ADDR
// end ; end ;
30476: PPOPN 5
30478: END
// export function PlayerAtEasternBorder ; var temp_list ; begin
30479: LD_INT 0
30481: PPUSH
30482: PPUSH
// result = false ;
30483: LD_ADDR_VAR 0 1
30487: PUSH
30488: LD_INT 0
30490: ST_TO_ADDR
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
30491: LD_ADDR_VAR 0 2
30495: PUSH
30496: LD_INT 22
30498: PUSH
30499: LD_EXP 2
30503: PUSH
30504: EMPTY
30505: LIST
30506: LIST
30507: PUSH
30508: LD_INT 2
30510: PUSH
30511: LD_INT 30
30513: PUSH
30514: LD_INT 0
30516: PUSH
30517: EMPTY
30518: LIST
30519: LIST
30520: PUSH
30521: LD_INT 30
30523: PUSH
30524: LD_INT 1
30526: PUSH
30527: EMPTY
30528: LIST
30529: LIST
30530: PUSH
30531: EMPTY
30532: LIST
30533: LIST
30534: LIST
30535: PUSH
30536: EMPTY
30537: LIST
30538: LIST
30539: PPUSH
30540: CALL_OW 69
30544: ST_TO_ADDR
// if temp_list = 0 then
30545: LD_VAR 0 2
30549: PUSH
30550: LD_INT 0
30552: EQUAL
30553: IFFALSE 30565
// result = true else
30555: LD_ADDR_VAR 0 1
30559: PUSH
30560: LD_INT 1
30562: ST_TO_ADDR
30563: GO 30598
// if UnitFilter ( temp_list , [ f_inarea , player_base_outer ] ) > 0 then
30565: LD_VAR 0 2
30569: PPUSH
30570: LD_INT 95
30572: PUSH
30573: LD_INT 2
30575: PUSH
30576: EMPTY
30577: LIST
30578: LIST
30579: PPUSH
30580: CALL_OW 72
30584: PUSH
30585: LD_INT 0
30587: GREATER
30588: IFFALSE 30598
// result = true ;
30590: LD_ADDR_VAR 0 1
30594: PUSH
30595: LD_INT 1
30597: ST_TO_ADDR
// end ;
30598: LD_VAR 0 1
30602: RET
// every 0 0$1 + 0 0$0.3 do var i , temp_list , human_list , num_sol , num_baz , num_sci , temp_list_2 , temp_list_3 , k ; var base , side , attack_strat_history , first_time_attack_gensher ;
30603: GO 30605
30605: DISABLE
30606: LD_INT 0
30608: PPUSH
30609: PPUSH
30610: PPUSH
30611: PPUSH
30612: PPUSH
30613: PPUSH
30614: PPUSH
30615: PPUSH
30616: PPUSH
30617: PPUSH
30618: PPUSH
30619: PPUSH
30620: PPUSH
// begin base = 3 ;
30621: LD_ADDR_VAR 0 10
30625: PUSH
30626: LD_INT 3
30628: ST_TO_ADDR
// side = russians ;
30629: LD_ADDR_VAR 0 11
30633: PUSH
30634: LD_EXP 3
30638: ST_TO_ADDR
// attack_strat_history = [ ] ;
30639: LD_ADDR_VAR 0 12
30643: PUSH
30644: EMPTY
30645: ST_TO_ADDR
// first_time_attack_gensher = true ;
30646: LD_ADDR_VAR 0 13
30650: PUSH
30651: LD_INT 1
30653: ST_TO_ADDR
// while not scout_event_over do
30654: LD_EXP 92
30658: NOT
30659: IFFALSE 30670
// wait ( 0 0$1 ) ;
30661: LD_INT 35
30663: PPUSH
30664: CALL_OW 67
30668: GO 30654
// ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , base , ai_vehicle_attack_delay [ base ] - 2 2$0 ) ;
30670: LD_ADDR_EXP 57
30674: PUSH
30675: LD_EXP 57
30679: PPUSH
30680: LD_VAR 0 10
30684: PPUSH
30685: LD_EXP 57
30689: PUSH
30690: LD_VAR 0 10
30694: ARRAY
30695: PUSH
30696: LD_INT 4200
30698: MINUS
30699: PPUSH
30700: CALL_OW 1
30704: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
30705: LD_INT 35
30707: PPUSH
30708: CALL_OW 67
// if UnitFilter ( ai_attacking_soldiers [ base ] , [ f_ok ] ) > 0 or UnitFilter ( ai_attacking_scientists [ base ] , [ f_ok ] ) > 0 or UnitFilter ( ai_vehicles_attack [ base ] , [ f_ok ] ) > 0 then
30712: LD_EXP 63
30716: PUSH
30717: LD_VAR 0 10
30721: ARRAY
30722: PPUSH
30723: LD_INT 50
30725: PUSH
30726: EMPTY
30727: LIST
30728: PPUSH
30729: CALL_OW 72
30733: PUSH
30734: LD_INT 0
30736: GREATER
30737: PUSH
30738: LD_EXP 64
30742: PUSH
30743: LD_VAR 0 10
30747: ARRAY
30748: PPUSH
30749: LD_INT 50
30751: PUSH
30752: EMPTY
30753: LIST
30754: PPUSH
30755: CALL_OW 72
30759: PUSH
30760: LD_INT 0
30762: GREATER
30763: OR
30764: PUSH
30765: LD_EXP 40
30769: PUSH
30770: LD_VAR 0 10
30774: ARRAY
30775: PPUSH
30776: LD_INT 50
30778: PUSH
30779: EMPTY
30780: LIST
30781: PPUSH
30782: CALL_OW 72
30786: PUSH
30787: LD_INT 0
30789: GREATER
30790: OR
30791: IFFALSE 30795
// continue ;
30793: GO 30705
// if IsPlaced ( Cornell ) and not IsDead ( Cornell ) then
30795: LD_EXP 25
30799: PPUSH
30800: CALL_OW 305
30804: PUSH
30805: LD_EXP 25
30809: PPUSH
30810: CALL_OW 301
30814: NOT
30815: AND
30816: IFFALSE 30820
// continue ;
30818: GO 30705
// if IsPlaced ( Khattam ) and not ( IsDead ( Khattam ) or GetSide ( Khattam ) = you ) then
30820: LD_EXP 26
30824: PPUSH
30825: CALL_OW 305
30829: PUSH
30830: LD_EXP 26
30834: PPUSH
30835: CALL_OW 301
30839: PUSH
30840: LD_EXP 26
30844: PPUSH
30845: CALL_OW 255
30849: PUSH
30850: LD_EXP 2
30854: EQUAL
30855: OR
30856: NOT
30857: AND
30858: IFFALSE 30862
// continue ;
30860: GO 30705
// ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , base , ai_vehicle_attack_delay [ base ] - 0 0$1 ) ;
30862: LD_ADDR_EXP 57
30866: PUSH
30867: LD_EXP 57
30871: PPUSH
30872: LD_VAR 0 10
30876: PPUSH
30877: LD_EXP 57
30881: PUSH
30882: LD_VAR 0 10
30886: ARRAY
30887: PUSH
30888: LD_INT 35
30890: MINUS
30891: PPUSH
30892: CALL_OW 1
30896: ST_TO_ADDR
// if ai_vehicle_attack_delay [ base ] > 0 0$0 then
30897: LD_EXP 57
30901: PUSH
30902: LD_VAR 0 10
30906: ARRAY
30907: PUSH
30908: LD_INT 0
30910: GREATER
30911: IFFALSE 30915
// continue ;
30913: GO 30705
// if BaseUnderAttack ( base , - 1 ) then
30915: LD_VAR 0 10
30919: PPUSH
30920: LD_INT 1
30922: NEG
30923: PPUSH
30924: CALL 22188 0 2
30928: IFFALSE 30932
// continue ;
30930: GO 30705
// if ai_vehicles_defend [ base ] < MaxNumWarVehiclesForAttack ( base ) then
30932: LD_EXP 39
30936: PUSH
30937: LD_VAR 0 10
30941: ARRAY
30942: PUSH
30943: LD_VAR 0 10
30947: PPUSH
30948: CALL 32727 0 1
30952: LESS
30953: IFFALSE 30957
// continue ;
30955: GO 30705
// temp_list = [ ] ;
30957: LD_ADDR_VAR 0 2
30961: PUSH
30962: EMPTY
30963: ST_TO_ADDR
// temp_list_2 = ai_vehicles_defend [ base ] ;
30964: LD_ADDR_VAR 0 7
30968: PUSH
30969: LD_EXP 39
30973: PUSH
30974: LD_VAR 0 10
30978: ARRAY
30979: ST_TO_ADDR
// for i = 1 to MaxNumWarVehiclesForAttack ( base ) do
30980: LD_ADDR_VAR 0 1
30984: PUSH
30985: DOUBLE
30986: LD_INT 1
30988: DEC
30989: ST_TO_ADDR
30990: LD_VAR 0 10
30994: PPUSH
30995: CALL 32727 0 1
30999: PUSH
31000: FOR_TO
31001: IFFALSE 31047
// begin temp_list = temp_list ^ temp_list_2 [ i ] ;
31003: LD_ADDR_VAR 0 2
31007: PUSH
31008: LD_VAR 0 2
31012: PUSH
31013: LD_VAR 0 7
31017: PUSH
31018: LD_VAR 0 1
31022: ARRAY
31023: ADD
31024: ST_TO_ADDR
// RemoveVehicleFromVariables ( base , temp_list_2 [ i ] ) ;
31025: LD_VAR 0 10
31029: PPUSH
31030: LD_VAR 0 7
31034: PUSH
31035: LD_VAR 0 1
31039: ARRAY
31040: PPUSH
31041: CALL 10056 0 2
// end ;
31045: GO 31000
31047: POP
31048: POP
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
31049: LD_ADDR_EXP 40
31053: PUSH
31054: LD_EXP 40
31058: PPUSH
31059: LD_VAR 0 10
31063: PPUSH
31064: LD_VAR 0 2
31068: PPUSH
31069: CALL_OW 1
31073: ST_TO_ADDR
// human_list = [ ] ;
31074: LD_ADDR_VAR 0 3
31078: PUSH
31079: EMPTY
31080: ST_TO_ADDR
// num_sci = difficulty + Rand ( 0 , 1 ) ;
31081: LD_ADDR_VAR 0 6
31085: PUSH
31086: LD_OWVAR 67
31090: PUSH
31091: LD_INT 0
31093: PPUSH
31094: LD_INT 1
31096: PPUSH
31097: CALL_OW 12
31101: PLUS
31102: ST_TO_ADDR
// num_sol = difficulty + 1 + Rand ( 0 , 1 ) ;
31103: LD_ADDR_VAR 0 4
31107: PUSH
31108: LD_OWVAR 67
31112: PUSH
31113: LD_INT 1
31115: PLUS
31116: PUSH
31117: LD_INT 0
31119: PPUSH
31120: LD_INT 1
31122: PPUSH
31123: CALL_OW 12
31127: PLUS
31128: ST_TO_ADDR
// num_baz = difficulty + Rand ( 0 , 1 ) ;
31129: LD_ADDR_VAR 0 5
31133: PUSH
31134: LD_OWVAR 67
31138: PUSH
31139: LD_INT 0
31141: PPUSH
31142: LD_INT 1
31144: PPUSH
31145: CALL_OW 12
31149: PLUS
31150: ST_TO_ADDR
// case num_russian_attacks of 0 :
31151: LD_EXP 86
31155: PUSH
31156: LD_INT 0
31158: DOUBLE
31159: EQUAL
31160: IFTRUE 31164
31162: GO 31217
31164: POP
// begin if num_sci > 1 then
31165: LD_VAR 0 6
31169: PUSH
31170: LD_INT 1
31172: GREATER
31173: IFFALSE 31183
// num_sci = 1 ;
31175: LD_ADDR_VAR 0 6
31179: PUSH
31180: LD_INT 1
31182: ST_TO_ADDR
// if num_sol > 2 then
31183: LD_VAR 0 4
31187: PUSH
31188: LD_INT 2
31190: GREATER
31191: IFFALSE 31201
// num_sol = 2 ;
31193: LD_ADDR_VAR 0 4
31197: PUSH
31198: LD_INT 2
31200: ST_TO_ADDR
// num_baz = num_baz - 1 ;
31201: LD_ADDR_VAR 0 5
31205: PUSH
31206: LD_VAR 0 5
31210: PUSH
31211: LD_INT 1
31213: MINUS
31214: ST_TO_ADDR
// end ; 1 :
31215: GO 31304
31217: LD_INT 1
31219: DOUBLE
31220: EQUAL
31221: IFTRUE 31225
31223: GO 31270
31225: POP
// begin if num_sol > 3 then
31226: LD_VAR 0 4
31230: PUSH
31231: LD_INT 3
31233: GREATER
31234: IFFALSE 31244
// num_sol = 3 ;
31236: LD_ADDR_VAR 0 4
31240: PUSH
31241: LD_INT 3
31243: ST_TO_ADDR
// if num_baz > 1 then
31244: LD_VAR 0 5
31248: PUSH
31249: LD_INT 1
31251: GREATER
31252: IFFALSE 31268
// num_baz = num_baz - 1 ;
31254: LD_ADDR_VAR 0 5
31258: PUSH
31259: LD_VAR 0 5
31263: PUSH
31264: LD_INT 1
31266: MINUS
31267: ST_TO_ADDR
// end ; 2 :
31268: GO 31304
31270: LD_INT 2
31272: DOUBLE
31273: EQUAL
31274: IFTRUE 31278
31276: GO 31281
31278: POP
// begin end ; else
31279: GO 31304
31281: POP
// begin num_baz = num_baz + Rand ( 0 , 1 ) ;
31282: LD_ADDR_VAR 0 5
31286: PUSH
31287: LD_VAR 0 5
31291: PUSH
31292: LD_INT 0
31294: PPUSH
31295: LD_INT 1
31297: PPUSH
31298: CALL_OW 12
31302: PLUS
31303: ST_TO_ADDR
// end ; end ; if yashin_alive then
31304: LD_EXP 85
31308: IFFALSE 31342
// begin num_baz = num_baz + num_sol ;
31310: LD_ADDR_VAR 0 5
31314: PUSH
31315: LD_VAR 0 5
31319: PUSH
31320: LD_VAR 0 4
31324: PLUS
31325: ST_TO_ADDR
// num_sol = Rand ( 1 , 2 ) ;
31326: LD_ADDR_VAR 0 4
31330: PUSH
31331: LD_INT 1
31333: PPUSH
31334: LD_INT 2
31336: PPUSH
31337: CALL_OW 12
31341: ST_TO_ADDR
// end ; temp_list = CreateUnitsWithClass ( num_sci , class_scientistic , side ) ;
31342: LD_ADDR_VAR 0 2
31346: PUSH
31347: LD_VAR 0 6
31351: PPUSH
31352: LD_INT 4
31354: PPUSH
31355: LD_VAR 0 11
31359: PPUSH
31360: CALL 8527 0 3
31364: ST_TO_ADDR
// human_list = human_list ^ temp_list ;
31365: LD_ADDR_VAR 0 3
31369: PUSH
31370: LD_VAR 0 3
31374: PUSH
31375: LD_VAR 0 2
31379: ADD
31380: ST_TO_ADDR
// ai_attacking_scientists = Replace ( ai_attacking_scientists , base , temp_list ) ;
31381: LD_ADDR_EXP 64
31385: PUSH
31386: LD_EXP 64
31390: PPUSH
31391: LD_VAR 0 10
31395: PPUSH
31396: LD_VAR 0 2
31400: PPUSH
31401: CALL_OW 1
31405: ST_TO_ADDR
// temp_list = CreateUnitsWithClass ( num_sol , class_soldier , side ) ^ CreateUnitsWithClass ( num_baz , class_bazooker , side ) ;
31406: LD_ADDR_VAR 0 2
31410: PUSH
31411: LD_VAR 0 4
31415: PPUSH
31416: LD_INT 1
31418: PPUSH
31419: LD_VAR 0 11
31423: PPUSH
31424: CALL 8527 0 3
31428: PUSH
31429: LD_VAR 0 5
31433: PPUSH
31434: LD_INT 9
31436: PPUSH
31437: LD_VAR 0 11
31441: PPUSH
31442: CALL 8527 0 3
31446: ADD
31447: ST_TO_ADDR
// human_list = human_list ^ temp_list ;
31448: LD_ADDR_VAR 0 3
31452: PUSH
31453: LD_VAR 0 3
31457: PUSH
31458: LD_VAR 0 2
31462: ADD
31463: ST_TO_ADDR
// ai_attacking_soldiers = Replace ( ai_attacking_soldiers , base , temp_list ) ;
31464: LD_ADDR_EXP 63
31468: PUSH
31469: LD_EXP 63
31473: PPUSH
31474: LD_VAR 0 10
31478: PPUSH
31479: LD_VAR 0 2
31483: PPUSH
31484: CALL_OW 1
31488: ST_TO_ADDR
// for i in human_list do
31489: LD_ADDR_VAR 0 1
31493: PUSH
31494: LD_VAR 0 3
31498: PUSH
31499: FOR_IN
31500: IFFALSE 31519
// PlaceUnitArea ( i , russian_reinforcements_area , false ) ;
31502: LD_VAR 0 1
31506: PPUSH
31507: LD_INT 14
31509: PPUSH
31510: LD_INT 0
31512: PPUSH
31513: CALL_OW 49
31517: GO 31499
31519: POP
31520: POP
// if MayAttackGensherBase and Rand ( 1 , 2 ) = 1 then
31521: CALL 32676 0 0
31525: PUSH
31526: LD_INT 1
31528: PPUSH
31529: LD_INT 2
31531: PPUSH
31532: CALL_OW 12
31536: PUSH
31537: LD_INT 1
31539: EQUAL
31540: AND
31541: IFFALSE 31553
// russian_attack_strategy = 1 else
31543: LD_ADDR_EXP 83
31547: PUSH
31548: LD_INT 1
31550: ST_TO_ADDR
31551: GO 31577
// if PlayerAtEasternBorder then
31553: CALL 30479 0 0
31557: IFFALSE 31569
// russian_attack_strategy = 2 else
31559: LD_ADDR_EXP 83
31563: PUSH
31564: LD_INT 2
31566: ST_TO_ADDR
31567: GO 31577
// russian_attack_strategy = 3 ;
31569: LD_ADDR_EXP 83
31573: PUSH
31574: LD_INT 3
31576: ST_TO_ADDR
// if russian_attack_strategy <> 1 and not 1 in attack_strat_history then
31577: LD_EXP 83
31581: PUSH
31582: LD_INT 1
31584: NONEQUAL
31585: PUSH
31586: LD_INT 1
31588: PUSH
31589: LD_VAR 0 12
31593: IN
31594: NOT
31595: AND
31596: IFFALSE 31639
// if attack_strat_history >= [ 5 , 4 , 3 ] [ difficulty ] and MayAttackGensherBase then
31598: LD_VAR 0 12
31602: PUSH
31603: LD_INT 5
31605: PUSH
31606: LD_INT 4
31608: PUSH
31609: LD_INT 3
31611: PUSH
31612: EMPTY
31613: LIST
31614: LIST
31615: LIST
31616: PUSH
31617: LD_OWVAR 67
31621: ARRAY
31622: GREATEREQUAL
31623: PUSH
31624: CALL 32676 0 0
31628: AND
31629: IFFALSE 31639
// russian_attack_strategy = 1 ;
31631: LD_ADDR_EXP 83
31635: PUSH
31636: LD_INT 1
31638: ST_TO_ADDR
// attack_strat_history = attack_strat_history ^ russian_attack_strategy ;
31639: LD_ADDR_VAR 0 12
31643: PUSH
31644: LD_VAR 0 12
31648: PUSH
31649: LD_EXP 83
31653: ADD
31654: ST_TO_ADDR
// if russian_attack_strategy = 1 then
31655: LD_EXP 83
31659: PUSH
31660: LD_INT 1
31662: EQUAL
31663: IFFALSE 32512
// begin if first_time_attack_gensher or difficulty = 1 then
31665: LD_VAR 0 13
31669: PUSH
31670: LD_OWVAR 67
31674: PUSH
31675: LD_INT 1
31677: EQUAL
31678: OR
31679: IFFALSE 32073
// begin first_time_attack_gensher = false ;
31681: LD_ADDR_VAR 0 13
31685: PUSH
31686: LD_INT 0
31688: ST_TO_ADDR
// temp_list = UnitFilter ( ai_attacking_soldiers [ base ] , [ f_class , class_bazooker ] ) ;
31689: LD_ADDR_VAR 0 2
31693: PUSH
31694: LD_EXP 63
31698: PUSH
31699: LD_VAR 0 10
31703: ARRAY
31704: PPUSH
31705: LD_INT 25
31707: PUSH
31708: LD_INT 9
31710: PUSH
31711: EMPTY
31712: LIST
31713: LIST
31714: PPUSH
31715: CALL_OW 72
31719: ST_TO_ADDR
// for i in temp_list do
31720: LD_ADDR_VAR 0 1
31724: PUSH
31725: LD_VAR 0 2
31729: PUSH
31730: FOR_IN
31731: IFFALSE 31761
// begin RemoveHumanFromVariables ( base , i , false ) ;
31733: LD_VAR 0 10
31737: PPUSH
31738: LD_VAR 0 1
31742: PPUSH
31743: LD_INT 0
31745: PPUSH
31746: CALL 10448 0 3
// DestroyUnit ( i ) ;
31750: LD_VAR 0 1
31754: PPUSH
31755: CALL_OW 65
// end ;
31759: GO 31730
31761: POP
31762: POP
// temp_list = UnitFilter ( ai_vehicles_attack [ base ] , [ f_weapon , ru_rocket_launcher ] ) ;
31763: LD_ADDR_VAR 0 2
31767: PUSH
31768: LD_EXP 40
31772: PUSH
31773: LD_VAR 0 10
31777: ARRAY
31778: PPUSH
31779: LD_INT 34
31781: PUSH
31782: LD_INT 45
31784: PUSH
31785: EMPTY
31786: LIST
31787: LIST
31788: PPUSH
31789: CALL_OW 72
31793: ST_TO_ADDR
// temp_list_2 = [ ] ;
31794: LD_ADDR_VAR 0 7
31798: PUSH
31799: EMPTY
31800: ST_TO_ADDR
// InitUc ;
31801: CALL_OW 18
// InitVc ;
31805: CALL_OW 20
// uc_side = side ;
31809: LD_ADDR_OWVAR 20
31813: PUSH
31814: LD_VAR 0 11
31818: ST_TO_ADDR
// uc_nation = nation_russian ;
31819: LD_ADDR_OWVAR 21
31823: PUSH
31824: LD_INT 3
31826: ST_TO_ADDR
// for i in temp_list do
31827: LD_ADDR_VAR 0 1
31831: PUSH
31832: LD_VAR 0 2
31836: PUSH
31837: FOR_IN
31838: IFFALSE 32032
// begin RemoveVehicleFromVariables ( base , i ) ;
31840: LD_VAR 0 10
31844: PPUSH
31845: LD_VAR 0 1
31849: PPUSH
31850: CALL 10056 0 2
// vc_chassis = GetChassis ( i ) ;
31854: LD_ADDR_OWVAR 37
31858: PUSH
31859: LD_VAR 0 1
31863: PPUSH
31864: CALL_OW 265
31868: ST_TO_ADDR
// vc_control = GetControl ( i ) ;
31869: LD_ADDR_OWVAR 38
31873: PUSH
31874: LD_VAR 0 1
31878: PPUSH
31879: CALL_OW 263
31883: ST_TO_ADDR
// vc_engine = GetEngine ( i ) ;
31884: LD_ADDR_OWVAR 39
31888: PUSH
31889: LD_VAR 0 1
31893: PPUSH
31894: CALL_OW 262
31898: ST_TO_ADDR
// vc_weapon = ru_heavy_machine_gun ;
31899: LD_ADDR_OWVAR 40
31903: PUSH
31904: LD_INT 42
31906: ST_TO_ADDR
// temp_list_3 = [ GetX ( i ) , GetY ( i ) , GetDir ( i ) ] ;
31907: LD_ADDR_VAR 0 8
31911: PUSH
31912: LD_VAR 0 1
31916: PPUSH
31917: CALL_OW 250
31921: PUSH
31922: LD_VAR 0 1
31926: PPUSH
31927: CALL_OW 251
31931: PUSH
31932: LD_VAR 0 1
31936: PPUSH
31937: CALL_OW 254
31941: PUSH
31942: EMPTY
31943: LIST
31944: LIST
31945: LIST
31946: ST_TO_ADDR
// DestroyUnit ( i ) ;
31947: LD_VAR 0 1
31951: PPUSH
31952: CALL_OW 65
// i = CreateVehicle ;
31956: LD_ADDR_VAR 0 1
31960: PUSH
31961: CALL_OW 45
31965: ST_TO_ADDR
// SetDir ( i , temp_list_3 [ 3 ] ) ;
31966: LD_VAR 0 1
31970: PPUSH
31971: LD_VAR 0 8
31975: PUSH
31976: LD_INT 3
31978: ARRAY
31979: PPUSH
31980: CALL_OW 233
// PlaceUnitXY ( i , temp_list_3 [ 1 ] , temp_list_3 [ 2 ] , false ) ;
31984: LD_VAR 0 1
31988: PPUSH
31989: LD_VAR 0 8
31993: PUSH
31994: LD_INT 1
31996: ARRAY
31997: PPUSH
31998: LD_VAR 0 8
32002: PUSH
32003: LD_INT 2
32005: ARRAY
32006: PPUSH
32007: LD_INT 0
32009: PPUSH
32010: CALL_OW 48
// temp_list_2 = temp_list_2 ^ i ;
32014: LD_ADDR_VAR 0 7
32018: PUSH
32019: LD_VAR 0 7
32023: PUSH
32024: LD_VAR 0 1
32028: ADD
32029: ST_TO_ADDR
// end ;
32030: GO 31837
32032: POP
32033: POP
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , ai_vehicles_attack [ base ] ^ temp_list_2 ) ;
32034: LD_ADDR_EXP 40
32038: PUSH
32039: LD_EXP 40
32043: PPUSH
32044: LD_VAR 0 10
32048: PPUSH
32049: LD_EXP 40
32053: PUSH
32054: LD_VAR 0 10
32058: ARRAY
32059: PUSH
32060: LD_VAR 0 7
32064: ADD
32065: PPUSH
32066: CALL_OW 1
32070: ST_TO_ADDR
// end else
32071: GO 32302
// begin temp_list = [ ] ;
32073: LD_ADDR_VAR 0 2
32077: PUSH
32078: EMPTY
32079: ST_TO_ADDR
// temp_list_2 = UnitFilter ( ai_attacking_soldiers [ base ] , [ f_class , class_bazooker ] ) ;
32080: LD_ADDR_VAR 0 7
32084: PUSH
32085: LD_EXP 63
32089: PUSH
32090: LD_VAR 0 10
32094: ARRAY
32095: PPUSH
32096: LD_INT 25
32098: PUSH
32099: LD_INT 9
32101: PUSH
32102: EMPTY
32103: LIST
32104: LIST
32105: PPUSH
32106: CALL_OW 72
32110: ST_TO_ADDR
// temp_list_3 = ai_attacking_soldiers [ base ] diff temp_list_2 ;
32111: LD_ADDR_VAR 0 8
32115: PUSH
32116: LD_EXP 63
32120: PUSH
32121: LD_VAR 0 10
32125: ARRAY
32126: PUSH
32127: LD_VAR 0 7
32131: DIFF
32132: ST_TO_ADDR
// if temp_list_2 > 0 then
32133: LD_VAR 0 7
32137: PUSH
32138: LD_INT 0
32140: GREATER
32141: IFFALSE 32173
// temp_list = temp_list ^ temp_list_2 [ Rand ( 1 , temp_list_2 ) ] ;
32143: LD_ADDR_VAR 0 2
32147: PUSH
32148: LD_VAR 0 2
32152: PUSH
32153: LD_VAR 0 7
32157: PUSH
32158: LD_INT 1
32160: PPUSH
32161: LD_VAR 0 7
32165: PPUSH
32166: CALL_OW 12
32170: ARRAY
32171: ADD
32172: ST_TO_ADDR
// if temp_list_3 > 0 then
32173: LD_VAR 0 8
32177: PUSH
32178: LD_INT 0
32180: GREATER
32181: IFFALSE 32213
// temp_list = temp_list ^ temp_list_3 [ Rand ( 1 , temp_list_3 ) ] ;
32183: LD_ADDR_VAR 0 2
32187: PUSH
32188: LD_VAR 0 2
32192: PUSH
32193: LD_VAR 0 8
32197: PUSH
32198: LD_INT 1
32200: PPUSH
32201: LD_VAR 0 8
32205: PPUSH
32206: CALL_OW 12
32210: ARRAY
32211: ADD
32212: ST_TO_ADDR
// temp_list_2 = ai_attacking_scientists [ base ] ;
32213: LD_ADDR_VAR 0 7
32217: PUSH
32218: LD_EXP 64
32222: PUSH
32223: LD_VAR 0 10
32227: ARRAY
32228: ST_TO_ADDR
// temp_list = temp_list ^ temp_list_2 [ Rand ( 1 , temp_list_2 ) ] ;
32229: LD_ADDR_VAR 0 2
32233: PUSH
32234: LD_VAR 0 2
32238: PUSH
32239: LD_VAR 0 7
32243: PUSH
32244: LD_INT 1
32246: PPUSH
32247: LD_VAR 0 7
32251: PPUSH
32252: CALL_OW 12
32256: ARRAY
32257: ADD
32258: ST_TO_ADDR
// for i in temp_list do
32259: LD_ADDR_VAR 0 1
32263: PUSH
32264: LD_VAR 0 2
32268: PUSH
32269: FOR_IN
32270: IFFALSE 32300
// begin RemoveHumanFromVariables ( base , i , false ) ;
32272: LD_VAR 0 10
32276: PPUSH
32277: LD_VAR 0 1
32281: PPUSH
32282: LD_INT 0
32284: PPUSH
32285: CALL 10448 0 3
// DestroyUnit ( i ) ;
32289: LD_VAR 0 1
32293: PPUSH
32294: CALL_OW 65
// end ;
32298: GO 32269
32300: POP
32301: POP
// end ; temp_list_2 = ai_vehicles_attack [ base ] ;
32302: LD_ADDR_VAR 0 7
32306: PUSH
32307: LD_EXP 40
32311: PUSH
32312: LD_VAR 0 10
32316: ARRAY
32317: ST_TO_ADDR
// temp_list = [ ] ;
32318: LD_ADDR_VAR 0 2
32322: PUSH
32323: EMPTY
32324: ST_TO_ADDR
// for i = 1 to [ 2 , 2 , 1 ] [ difficulty ] do
32325: LD_ADDR_VAR 0 1
32329: PUSH
32330: DOUBLE
32331: LD_INT 1
32333: DEC
32334: ST_TO_ADDR
32335: LD_INT 2
32337: PUSH
32338: LD_INT 2
32340: PUSH
32341: LD_INT 1
32343: PUSH
32344: EMPTY
32345: LIST
32346: LIST
32347: LIST
32348: PUSH
32349: LD_OWVAR 67
32353: ARRAY
32354: PUSH
32355: FOR_TO
32356: IFFALSE 32432
// begin if temp_list_2 = 0 then
32358: LD_VAR 0 7
32362: PUSH
32363: LD_INT 0
32365: EQUAL
32366: IFFALSE 32370
// break ;
32368: GO 32432
// k = temp_list_2 [ Rand ( 1 , temp_list_2 + 0 ) ] ;
32370: LD_ADDR_VAR 0 9
32374: PUSH
32375: LD_VAR 0 7
32379: PUSH
32380: LD_INT 1
32382: PPUSH
32383: LD_VAR 0 7
32387: PUSH
32388: LD_INT 0
32390: PLUS
32391: PPUSH
32392: CALL_OW 12
32396: ARRAY
32397: ST_TO_ADDR
// temp_list = temp_list ^ k ;
32398: LD_ADDR_VAR 0 2
32402: PUSH
32403: LD_VAR 0 2
32407: PUSH
32408: LD_VAR 0 9
32412: ADD
32413: ST_TO_ADDR
// temp_list_2 = temp_list_2 diff k ;
32414: LD_ADDR_VAR 0 7
32418: PUSH
32419: LD_VAR 0 7
32423: PUSH
32424: LD_VAR 0 9
32428: DIFF
32429: ST_TO_ADDR
// end ;
32430: GO 32355
32432: POP
32433: POP
// for i in temp_list do
32434: LD_ADDR_VAR 0 1
32438: PUSH
32439: LD_VAR 0 2
32443: PUSH
32444: FOR_IN
32445: IFFALSE 32510
// begin RemoveVehicleFromVariables ( base , i ) ;
32447: LD_VAR 0 10
32451: PPUSH
32452: LD_VAR 0 1
32456: PPUSH
32457: CALL 10056 0 2
// temp_list_2 = ai_vehicles_defend [ base ] ^ i ;
32461: LD_ADDR_VAR 0 7
32465: PUSH
32466: LD_EXP 39
32470: PUSH
32471: LD_VAR 0 10
32475: ARRAY
32476: PUSH
32477: LD_VAR 0 1
32481: ADD
32482: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list_2 ) ;
32483: LD_ADDR_EXP 39
32487: PUSH
32488: LD_EXP 39
32492: PPUSH
32493: LD_VAR 0 10
32497: PPUSH
32498: LD_VAR 0 7
32502: PPUSH
32503: CALL_OW 1
32507: ST_TO_ADDR
// end ;
32508: GO 32444
32510: POP
32511: POP
// end ; temp_list = ai_attacking_unit_hex_index [ base ] ;
32512: LD_ADDR_VAR 0 2
32516: PUSH
32517: LD_EXP 74
32521: PUSH
32522: LD_VAR 0 10
32526: ARRAY
32527: ST_TO_ADDR
// for i in ai_vehicles_attack [ base ] ^ ai_attacking_soldiers [ base ] ^ ai_attacking_scientists [ base ] do
32528: LD_ADDR_VAR 0 1
32532: PUSH
32533: LD_EXP 40
32537: PUSH
32538: LD_VAR 0 10
32542: ARRAY
32543: PUSH
32544: LD_EXP 63
32548: PUSH
32549: LD_VAR 0 10
32553: ARRAY
32554: ADD
32555: PUSH
32556: LD_EXP 64
32560: PUSH
32561: LD_VAR 0 10
32565: ARRAY
32566: ADD
32567: PUSH
32568: FOR_IN
32569: IFFALSE 32596
// temp_list = Replace ( temp_list , i , 1 ) ;
32571: LD_ADDR_VAR 0 2
32575: PUSH
32576: LD_VAR 0 2
32580: PPUSH
32581: LD_VAR 0 1
32585: PPUSH
32586: LD_INT 1
32588: PPUSH
32589: CALL_OW 1
32593: ST_TO_ADDR
32594: GO 32568
32596: POP
32597: POP
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
32598: LD_ADDR_EXP 74
32602: PUSH
32603: LD_EXP 74
32607: PPUSH
32608: LD_VAR 0 10
32612: PPUSH
32613: LD_VAR 0 2
32617: PPUSH
32618: CALL_OW 1
32622: ST_TO_ADDR
// num_russian_attacks = num_russian_attacks + 1 ;
32623: LD_ADDR_EXP 86
32627: PUSH
32628: LD_EXP 86
32632: PUSH
32633: LD_INT 1
32635: PLUS
32636: ST_TO_ADDR
// ai_new_attack_commencing = Replace ( ai_new_attack_commencing , base , true ) ;
32637: LD_ADDR_EXP 69
32641: PUSH
32642: LD_EXP 69
32646: PPUSH
32647: LD_VAR 0 10
32651: PPUSH
32652: LD_INT 1
32654: PPUSH
32655: CALL_OW 1
32659: ST_TO_ADDR
// ResetVehicleAttackDelay ( base ) ;
32660: LD_VAR 0 10
32664: PPUSH
32665: CALL 8891 0 1
// until false ;
32669: LD_INT 0
32671: IFFALSE 30705
// end ;
32673: PPOPN 13
32675: END
// function MayAttackGensherBase ; begin
32676: LD_INT 0
32678: PPUSH
// if not scout_event_over or game_phase > 1 then
32679: LD_EXP 92
32683: NOT
32684: PUSH
32685: LD_EXP 88
32689: PUSH
32690: LD_INT 1
32692: GREATER
32693: OR
32694: IFFALSE 32706
// result = false else
32696: LD_ADDR_VAR 0 1
32700: PUSH
32701: LD_INT 0
32703: ST_TO_ADDR
32704: GO 32722
// result := tick >= russians_allowed_to_attack_gensher_time ;
32706: LD_ADDR_VAR 0 1
32710: PUSH
32711: LD_OWVAR 1
32715: PUSH
32716: LD_EXP 93
32720: GREATEREQUAL
32721: ST_TO_ADDR
// end ;
32722: LD_VAR 0 1
32726: RET
// function MaxNumWarVehiclesForAttack ( base ) ; begin
32727: LD_INT 0
32729: PPUSH
// case base of 1 , 2 :
32730: LD_VAR 0 1
32734: PUSH
32735: LD_INT 1
32737: DOUBLE
32738: EQUAL
32739: IFTRUE 32749
32741: LD_INT 2
32743: DOUBLE
32744: EQUAL
32745: IFTRUE 32749
32747: GO 32767
32749: POP
// result = MaxNumWarVehicles ( base ) ; 3 :
32750: LD_ADDR_VAR 0 2
32754: PUSH
32755: LD_VAR 0 1
32759: PPUSH
32760: CALL 28948 0 1
32764: ST_TO_ADDR
32765: GO 32917
32767: LD_INT 3
32769: DOUBLE
32770: EQUAL
32771: IFTRUE 32775
32773: GO 32916
32775: POP
// begin result = [ 0 , 1 , 2 ] [ difficulty ] ;
32776: LD_ADDR_VAR 0 2
32780: PUSH
32781: LD_INT 0
32783: PUSH
32784: LD_INT 1
32786: PUSH
32787: LD_INT 2
32789: PUSH
32790: EMPTY
32791: LIST
32792: LIST
32793: LIST
32794: PUSH
32795: LD_OWVAR 67
32799: ARRAY
32800: ST_TO_ADDR
// case num_russian_attacks of 0 :
32801: LD_EXP 86
32805: PUSH
32806: LD_INT 0
32808: DOUBLE
32809: EQUAL
32810: IFTRUE 32814
32812: GO 32817
32814: POP
// begin end ; 1 :
32815: GO 32882
32817: LD_INT 1
32819: DOUBLE
32820: EQUAL
32821: IFTRUE 32825
32823: GO 32842
32825: POP
// result = result + 1 ; 2 :
32826: LD_ADDR_VAR 0 2
32830: PUSH
32831: LD_VAR 0 2
32835: PUSH
32836: LD_INT 1
32838: PLUS
32839: ST_TO_ADDR
32840: GO 32882
32842: LD_INT 2
32844: DOUBLE
32845: EQUAL
32846: IFTRUE 32850
32848: GO 32867
32850: POP
// result = result + 2 ; else
32851: LD_ADDR_VAR 0 2
32855: PUSH
32856: LD_VAR 0 2
32860: PUSH
32861: LD_INT 2
32863: PLUS
32864: ST_TO_ADDR
32865: GO 32882
32867: POP
// result = result + 3 ; end ;
32868: LD_ADDR_VAR 0 2
32872: PUSH
32873: LD_VAR 0 2
32877: PUSH
32878: LD_INT 3
32880: PLUS
32881: ST_TO_ADDR
// if result > MaxNumWarVehicles ( base ) then
32882: LD_VAR 0 2
32886: PUSH
32887: LD_VAR 0 1
32891: PPUSH
32892: CALL 28948 0 1
32896: GREATER
32897: IFFALSE 32914
// result = MaxNumWarVehicles ( base ) ;
32899: LD_ADDR_VAR 0 2
32903: PUSH
32904: LD_VAR 0 1
32908: PPUSH
32909: CALL 28948 0 1
32913: ST_TO_ADDR
// end ; end ;
32914: GO 32917
32916: POP
// end ;
32917: LD_VAR 0 2
32921: RET
// every 0 0$1 + 0 0$0.2 do var i , temp_list ; var base , side ;
32922: GO 32924
32924: DISABLE
32925: LD_INT 0
32927: PPUSH
32928: PPUSH
32929: PPUSH
32930: PPUSH
// begin base = 3 ;
32931: LD_ADDR_VAR 0 3
32935: PUSH
32936: LD_INT 3
32938: ST_TO_ADDR
// side = russians ;
32939: LD_ADDR_VAR 0 4
32943: PUSH
32944: LD_EXP 3
32948: ST_TO_ADDR
// while not scout_event_over do
32949: LD_EXP 92
32953: NOT
32954: IFFALSE 32965
// wait ( 0 0$1 ) ;
32956: LD_INT 35
32958: PPUSH
32959: CALL_OW 67
32963: GO 32949
// repeat wait ( 0 0$1 ) ;
32965: LD_INT 35
32967: PPUSH
32968: CALL_OW 67
// if game_phase > 1 then
32972: LD_EXP 88
32976: PUSH
32977: LD_INT 1
32979: GREATER
32980: IFFALSE 32984
// exit ;
32982: GO 33211
// if special_russian_attackers > 0 or not MayAttackGensherBase then
32984: LD_EXP 84
32988: PUSH
32989: LD_INT 0
32991: GREATER
32992: PUSH
32993: CALL 32676 0 0
32997: NOT
32998: OR
32999: IFFALSE 33003
// continue ;
33001: GO 32965
// ai_human_attack_delay = Replace ( ai_human_attack_delay , base , ai_human_attack_delay [ base ] - 0 0$1 ) ;
33003: LD_ADDR_EXP 67
33007: PUSH
33008: LD_EXP 67
33012: PPUSH
33013: LD_VAR 0 3
33017: PPUSH
33018: LD_EXP 67
33022: PUSH
33023: LD_VAR 0 3
33027: ARRAY
33028: PUSH
33029: LD_INT 35
33031: MINUS
33032: PPUSH
33033: CALL_OW 1
33037: ST_TO_ADDR
// if ai_human_attack_delay [ base ] > 0 0$0 then
33038: LD_EXP 67
33042: PUSH
33043: LD_VAR 0 3
33047: ARRAY
33048: PUSH
33049: LD_INT 0
33051: GREATER
33052: IFFALSE 33056
// continue ;
33054: GO 32965
// if BaseUnderAttack ( base , - 1 ) then
33056: LD_VAR 0 3
33060: PPUSH
33061: LD_INT 1
33063: NEG
33064: PPUSH
33065: CALL 22188 0 2
33069: IFFALSE 33073
// continue ;
33071: GO 32965
// special_russian_attackers = CreateUnitsWithClass ( difficulty + yashin_alive , class_bazooker , side ) ;
33073: LD_ADDR_EXP 84
33077: PUSH
33078: LD_OWVAR 67
33082: PUSH
33083: LD_EXP 85
33087: PLUS
33088: PPUSH
33089: LD_INT 9
33091: PPUSH
33092: LD_VAR 0 4
33096: PPUSH
33097: CALL 8527 0 3
33101: ST_TO_ADDR
// temp_list = ai_attacking_unit_hex_index [ base ] ;
33102: LD_ADDR_VAR 0 2
33106: PUSH
33107: LD_EXP 74
33111: PUSH
33112: LD_VAR 0 3
33116: ARRAY
33117: ST_TO_ADDR
// for i in special_russian_attackers do
33118: LD_ADDR_VAR 0 1
33122: PUSH
33123: LD_EXP 84
33127: PUSH
33128: FOR_IN
33129: IFFALSE 33171
// begin PlaceUnitArea ( i , russian_reinforcements_area , false ) ;
33131: LD_VAR 0 1
33135: PPUSH
33136: LD_INT 14
33138: PPUSH
33139: LD_INT 0
33141: PPUSH
33142: CALL_OW 49
// temp_list = Replace ( temp_list , i , 1 ) ;
33146: LD_ADDR_VAR 0 2
33150: PUSH
33151: LD_VAR 0 2
33155: PPUSH
33156: LD_VAR 0 1
33160: PPUSH
33161: LD_INT 1
33163: PPUSH
33164: CALL_OW 1
33168: ST_TO_ADDR
// end ;
33169: GO 33128
33171: POP
33172: POP
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
33173: LD_ADDR_EXP 74
33177: PUSH
33178: LD_EXP 74
33182: PPUSH
33183: LD_VAR 0 3
33187: PPUSH
33188: LD_VAR 0 2
33192: PPUSH
33193: CALL_OW 1
33197: ST_TO_ADDR
// ResetHumanAttackDelay ( base ) ;
33198: LD_VAR 0 3
33202: PPUSH
33203: CALL 8940 0 1
// until false ;
33207: LD_INT 0
33209: IFFALSE 32965
// end ;
33211: PPOPN 4
33213: END
// every 0 0$1 do var side , i , temp_value , base , temp_list , temp_unit , temp_list_2 , k , human_attack_hexes , vehicle_attack_hexes , temp_list_3 ; var center_hex , center_dist , attacking_humans , area , x , y , all_done , un1 , val , attacking_vehicles ; var human_prepare_hexes , vehicle_prepare_hexes ; var human_dist , vehicle_dist , all_are_ready , strat_2_attack_permitted , vehs_to_move_to_start_pos , prepare_veh_movement ; var wait_indexes , wait_indexes_pos ;
33214: GO 33216
33216: DISABLE
33217: LD_INT 0
33219: PPUSH
33220: PPUSH
33221: PPUSH
33222: PPUSH
33223: PPUSH
33224: PPUSH
33225: PPUSH
33226: PPUSH
33227: PPUSH
33228: PPUSH
33229: PPUSH
33230: PPUSH
33231: PPUSH
33232: PPUSH
33233: PPUSH
33234: PPUSH
33235: PPUSH
33236: PPUSH
33237: PPUSH
33238: PPUSH
33239: PPUSH
33240: PPUSH
33241: PPUSH
33242: PPUSH
33243: PPUSH
33244: PPUSH
33245: PPUSH
33246: PPUSH
33247: PPUSH
33248: PPUSH
33249: PPUSH
// begin side = russians ;
33250: LD_ADDR_VAR 0 1
33254: PUSH
33255: LD_EXP 3
33259: ST_TO_ADDR
// human_dist = 3 ;
33260: LD_ADDR_VAR 0 24
33264: PUSH
33265: LD_INT 3
33267: ST_TO_ADDR
// vehicle_dist = 6 ;
33268: LD_ADDR_VAR 0 25
33272: PUSH
33273: LD_INT 6
33275: ST_TO_ADDR
// vehs_to_move_to_start_pos = [ ] ;
33276: LD_ADDR_VAR 0 28
33280: PUSH
33281: EMPTY
33282: ST_TO_ADDR
// all_are_ready = false ;
33283: LD_ADDR_VAR 0 26
33287: PUSH
33288: LD_INT 0
33290: ST_TO_ADDR
// strat_2_attack_permitted = false ;
33291: LD_ADDR_VAR 0 27
33295: PUSH
33296: LD_INT 0
33298: ST_TO_ADDR
// prepare_veh_movement = true ;
33299: LD_ADDR_VAR 0 29
33303: PUSH
33304: LD_INT 1
33306: ST_TO_ADDR
// wait_indexes_pos = 1 ;
33307: LD_ADDR_VAR 0 31
33311: PUSH
33312: LD_INT 1
33314: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
33315: LD_INT 35
33317: PPUSH
33318: CALL_OW 67
// for base in ai_bases do
33322: LD_ADDR_VAR 0 4
33326: PUSH
33327: LD_EXP 58
33331: PUSH
33332: FOR_IN
33333: IFFALSE 39128
// begin if base in [ 1 , 2 ] then
33335: LD_VAR 0 4
33339: PUSH
33340: LD_INT 1
33342: PUSH
33343: LD_INT 2
33345: PUSH
33346: EMPTY
33347: LIST
33348: LIST
33349: IN
33350: IFFALSE 33354
// continue ;
33352: GO 33332
// if ai_vehicles_attack [ base ] = 0 and ai_attacking_soldiers [ base ] = 0 and ai_attacking_scientists [ base ] = 0 then
33354: LD_EXP 40
33358: PUSH
33359: LD_VAR 0 4
33363: ARRAY
33364: PUSH
33365: LD_INT 0
33367: EQUAL
33368: PUSH
33369: LD_EXP 63
33373: PUSH
33374: LD_VAR 0 4
33378: ARRAY
33379: PUSH
33380: LD_INT 0
33382: EQUAL
33383: AND
33384: PUSH
33385: LD_EXP 64
33389: PUSH
33390: LD_VAR 0 4
33394: ARRAY
33395: PUSH
33396: LD_INT 0
33398: EQUAL
33399: AND
33400: IFFALSE 33404
// continue ;
33402: GO 33332
// if ai_new_attack_commencing [ base ] then
33404: LD_EXP 69
33408: PUSH
33409: LD_VAR 0 4
33413: ARRAY
33414: IFFALSE 33471
// begin all_are_ready = false ;
33416: LD_ADDR_VAR 0 26
33420: PUSH
33421: LD_INT 0
33423: ST_TO_ADDR
// strat_2_attack_permitted = false ;
33424: LD_ADDR_VAR 0 27
33428: PUSH
33429: LD_INT 0
33431: ST_TO_ADDR
// prepare_veh_movement = true ;
33432: LD_ADDR_VAR 0 29
33436: PUSH
33437: LD_INT 1
33439: ST_TO_ADDR
// wait_indexes_pos = 1 ;
33440: LD_ADDR_VAR 0 31
33444: PUSH
33445: LD_INT 1
33447: ST_TO_ADDR
// ai_new_attack_commencing = Replace ( ai_new_attack_commencing , base , false ) ;
33448: LD_ADDR_EXP 69
33452: PUSH
33453: LD_EXP 69
33457: PPUSH
33458: LD_VAR 0 4
33462: PPUSH
33463: LD_INT 0
33465: PPUSH
33466: CALL_OW 1
33470: ST_TO_ADDR
// end ; case russian_attack_strategy of 1 :
33471: LD_EXP 83
33475: PUSH
33476: LD_INT 1
33478: DOUBLE
33479: EQUAL
33480: IFTRUE 33484
33482: GO 33698
33484: POP
// begin vehicle_prepare_hexes = [ [ 64 , 51 ] ] ;
33485: LD_ADDR_VAR 0 23
33489: PUSH
33490: LD_INT 64
33492: PUSH
33493: LD_INT 51
33495: PUSH
33496: EMPTY
33497: LIST
33498: LIST
33499: PUSH
33500: EMPTY
33501: LIST
33502: ST_TO_ADDR
// human_prepare_hexes = [ [ 72 , 55 ] ] ;
33503: LD_ADDR_VAR 0 22
33507: PUSH
33508: LD_INT 72
33510: PUSH
33511: LD_INT 55
33513: PUSH
33514: EMPTY
33515: LIST
33516: LIST
33517: PUSH
33518: EMPTY
33519: LIST
33520: ST_TO_ADDR
// vehicle_attack_hexes = [ [ 75 , 46 ] , [ 75 , 30 ] , [ 70 , 20 ] , [ 84 , 20 ] , [ 99 , 29 ] , [ 108 , 42 ] , [ 112 , 33 ] ] ;
33521: LD_ADDR_VAR 0 10
33525: PUSH
33526: LD_INT 75
33528: PUSH
33529: LD_INT 46
33531: PUSH
33532: EMPTY
33533: LIST
33534: LIST
33535: PUSH
33536: LD_INT 75
33538: PUSH
33539: LD_INT 30
33541: PUSH
33542: EMPTY
33543: LIST
33544: LIST
33545: PUSH
33546: LD_INT 70
33548: PUSH
33549: LD_INT 20
33551: PUSH
33552: EMPTY
33553: LIST
33554: LIST
33555: PUSH
33556: LD_INT 84
33558: PUSH
33559: LD_INT 20
33561: PUSH
33562: EMPTY
33563: LIST
33564: LIST
33565: PUSH
33566: LD_INT 99
33568: PUSH
33569: LD_INT 29
33571: PUSH
33572: EMPTY
33573: LIST
33574: LIST
33575: PUSH
33576: LD_INT 108
33578: PUSH
33579: LD_INT 42
33581: PUSH
33582: EMPTY
33583: LIST
33584: LIST
33585: PUSH
33586: LD_INT 112
33588: PUSH
33589: LD_INT 33
33591: PUSH
33592: EMPTY
33593: LIST
33594: LIST
33595: PUSH
33596: EMPTY
33597: LIST
33598: LIST
33599: LIST
33600: LIST
33601: LIST
33602: LIST
33603: LIST
33604: ST_TO_ADDR
// human_attack_hexes = [ [ 75 , 46 ] , [ 75 , 30 ] , [ 70 , 20 ] , [ 84 , 20 ] , [ 99 , 29 ] , [ 108 , 42 ] , [ 112 , 33 ] ] ;
33605: LD_ADDR_VAR 0 9
33609: PUSH
33610: LD_INT 75
33612: PUSH
33613: LD_INT 46
33615: PUSH
33616: EMPTY
33617: LIST
33618: LIST
33619: PUSH
33620: LD_INT 75
33622: PUSH
33623: LD_INT 30
33625: PUSH
33626: EMPTY
33627: LIST
33628: LIST
33629: PUSH
33630: LD_INT 70
33632: PUSH
33633: LD_INT 20
33635: PUSH
33636: EMPTY
33637: LIST
33638: LIST
33639: PUSH
33640: LD_INT 84
33642: PUSH
33643: LD_INT 20
33645: PUSH
33646: EMPTY
33647: LIST
33648: LIST
33649: PUSH
33650: LD_INT 99
33652: PUSH
33653: LD_INT 29
33655: PUSH
33656: EMPTY
33657: LIST
33658: LIST
33659: PUSH
33660: LD_INT 108
33662: PUSH
33663: LD_INT 42
33665: PUSH
33666: EMPTY
33667: LIST
33668: LIST
33669: PUSH
33670: LD_INT 112
33672: PUSH
33673: LD_INT 33
33675: PUSH
33676: EMPTY
33677: LIST
33678: LIST
33679: PUSH
33680: EMPTY
33681: LIST
33682: LIST
33683: LIST
33684: LIST
33685: LIST
33686: LIST
33687: LIST
33688: ST_TO_ADDR
// wait_indexes = [ ] ;
33689: LD_ADDR_VAR 0 30
33693: PUSH
33694: EMPTY
33695: ST_TO_ADDR
// end ; 2 :
33696: GO 34517
33698: LD_INT 2
33700: DOUBLE
33701: EQUAL
33702: IFTRUE 33706
33704: GO 34250
33706: POP
// begin vehicle_prepare_hexes = [ [ 70 , 100 ] ] ;
33707: LD_ADDR_VAR 0 23
33711: PUSH
33712: LD_INT 70
33714: PUSH
33715: LD_INT 100
33717: PUSH
33718: EMPTY
33719: LIST
33720: LIST
33721: PUSH
33722: EMPTY
33723: LIST
33724: ST_TO_ADDR
// human_prepare_hexes = [ [ 60 , 82 ] ] ;
33725: LD_ADDR_VAR 0 22
33729: PUSH
33730: LD_INT 60
33732: PUSH
33733: LD_INT 82
33735: PUSH
33736: EMPTY
33737: LIST
33738: LIST
33739: PUSH
33740: EMPTY
33741: LIST
33742: ST_TO_ADDR
// vehicle_attack_hexes = [ [ 105 , 95 ] , [ 121 , 93 ] , [ 123 , 79 ] , [ 143 , 78 ] , [ 143 , 71 ] , [ 144 , 64 ] , [ 149 , 74 ] , [ 158 , 88 ] , [ 141 , 85 ] , [ 124 , 79 ] , [ 121 , 93 ] , [ 105 , 95 ] , [ 88 , 81 ] , [ 80 , 63 ] , [ 78 , 48 ] , [ 89 , 43 ] , [ 108 , 40 ] , [ 100 , 28 ] ] ;
33743: LD_ADDR_VAR 0 10
33747: PUSH
33748: LD_INT 105
33750: PUSH
33751: LD_INT 95
33753: PUSH
33754: EMPTY
33755: LIST
33756: LIST
33757: PUSH
33758: LD_INT 121
33760: PUSH
33761: LD_INT 93
33763: PUSH
33764: EMPTY
33765: LIST
33766: LIST
33767: PUSH
33768: LD_INT 123
33770: PUSH
33771: LD_INT 79
33773: PUSH
33774: EMPTY
33775: LIST
33776: LIST
33777: PUSH
33778: LD_INT 143
33780: PUSH
33781: LD_INT 78
33783: PUSH
33784: EMPTY
33785: LIST
33786: LIST
33787: PUSH
33788: LD_INT 143
33790: PUSH
33791: LD_INT 71
33793: PUSH
33794: EMPTY
33795: LIST
33796: LIST
33797: PUSH
33798: LD_INT 144
33800: PUSH
33801: LD_INT 64
33803: PUSH
33804: EMPTY
33805: LIST
33806: LIST
33807: PUSH
33808: LD_INT 149
33810: PUSH
33811: LD_INT 74
33813: PUSH
33814: EMPTY
33815: LIST
33816: LIST
33817: PUSH
33818: LD_INT 158
33820: PUSH
33821: LD_INT 88
33823: PUSH
33824: EMPTY
33825: LIST
33826: LIST
33827: PUSH
33828: LD_INT 141
33830: PUSH
33831: LD_INT 85
33833: PUSH
33834: EMPTY
33835: LIST
33836: LIST
33837: PUSH
33838: LD_INT 124
33840: PUSH
33841: LD_INT 79
33843: PUSH
33844: EMPTY
33845: LIST
33846: LIST
33847: PUSH
33848: LD_INT 121
33850: PUSH
33851: LD_INT 93
33853: PUSH
33854: EMPTY
33855: LIST
33856: LIST
33857: PUSH
33858: LD_INT 105
33860: PUSH
33861: LD_INT 95
33863: PUSH
33864: EMPTY
33865: LIST
33866: LIST
33867: PUSH
33868: LD_INT 88
33870: PUSH
33871: LD_INT 81
33873: PUSH
33874: EMPTY
33875: LIST
33876: LIST
33877: PUSH
33878: LD_INT 80
33880: PUSH
33881: LD_INT 63
33883: PUSH
33884: EMPTY
33885: LIST
33886: LIST
33887: PUSH
33888: LD_INT 78
33890: PUSH
33891: LD_INT 48
33893: PUSH
33894: EMPTY
33895: LIST
33896: LIST
33897: PUSH
33898: LD_INT 89
33900: PUSH
33901: LD_INT 43
33903: PUSH
33904: EMPTY
33905: LIST
33906: LIST
33907: PUSH
33908: LD_INT 108
33910: PUSH
33911: LD_INT 40
33913: PUSH
33914: EMPTY
33915: LIST
33916: LIST
33917: PUSH
33918: LD_INT 100
33920: PUSH
33921: LD_INT 28
33923: PUSH
33924: EMPTY
33925: LIST
33926: LIST
33927: PUSH
33928: EMPTY
33929: LIST
33930: LIST
33931: LIST
33932: LIST
33933: LIST
33934: LIST
33935: LIST
33936: LIST
33937: LIST
33938: LIST
33939: LIST
33940: LIST
33941: LIST
33942: LIST
33943: LIST
33944: LIST
33945: LIST
33946: LIST
33947: ST_TO_ADDR
// human_attack_hexes = [ [ 73 , 95 ] , [ 84 , 101 ] , [ 95 , 102 ] , [ 104 , 100 ] , [ 114 , 97 ] , [ 124 , 99 ] , [ 132 , 100 ] , [ 137 , 94 ] , [ 149 , 99 ] , [ 161 , 104 ] , [ 158 , 88 ] , [ 149 , 74 ] , [ 144 , 64 ] , [ 143 , 71 ] , [ 141 , 85 ] , [ 124 , 79 ] , [ 121 , 93 ] , [ 105 , 95 ] , [ 88 , 81 ] , [ 80 , 63 ] , [ 78 , 48 ] , [ 89 , 43 ] , [ 108 , 40 ] , [ 100 , 28 ] ] ;
33948: LD_ADDR_VAR 0 9
33952: PUSH
33953: LD_INT 73
33955: PUSH
33956: LD_INT 95
33958: PUSH
33959: EMPTY
33960: LIST
33961: LIST
33962: PUSH
33963: LD_INT 84
33965: PUSH
33966: LD_INT 101
33968: PUSH
33969: EMPTY
33970: LIST
33971: LIST
33972: PUSH
33973: LD_INT 95
33975: PUSH
33976: LD_INT 102
33978: PUSH
33979: EMPTY
33980: LIST
33981: LIST
33982: PUSH
33983: LD_INT 104
33985: PUSH
33986: LD_INT 100
33988: PUSH
33989: EMPTY
33990: LIST
33991: LIST
33992: PUSH
33993: LD_INT 114
33995: PUSH
33996: LD_INT 97
33998: PUSH
33999: EMPTY
34000: LIST
34001: LIST
34002: PUSH
34003: LD_INT 124
34005: PUSH
34006: LD_INT 99
34008: PUSH
34009: EMPTY
34010: LIST
34011: LIST
34012: PUSH
34013: LD_INT 132
34015: PUSH
34016: LD_INT 100
34018: PUSH
34019: EMPTY
34020: LIST
34021: LIST
34022: PUSH
34023: LD_INT 137
34025: PUSH
34026: LD_INT 94
34028: PUSH
34029: EMPTY
34030: LIST
34031: LIST
34032: PUSH
34033: LD_INT 149
34035: PUSH
34036: LD_INT 99
34038: PUSH
34039: EMPTY
34040: LIST
34041: LIST
34042: PUSH
34043: LD_INT 161
34045: PUSH
34046: LD_INT 104
34048: PUSH
34049: EMPTY
34050: LIST
34051: LIST
34052: PUSH
34053: LD_INT 158
34055: PUSH
34056: LD_INT 88
34058: PUSH
34059: EMPTY
34060: LIST
34061: LIST
34062: PUSH
34063: LD_INT 149
34065: PUSH
34066: LD_INT 74
34068: PUSH
34069: EMPTY
34070: LIST
34071: LIST
34072: PUSH
34073: LD_INT 144
34075: PUSH
34076: LD_INT 64
34078: PUSH
34079: EMPTY
34080: LIST
34081: LIST
34082: PUSH
34083: LD_INT 143
34085: PUSH
34086: LD_INT 71
34088: PUSH
34089: EMPTY
34090: LIST
34091: LIST
34092: PUSH
34093: LD_INT 141
34095: PUSH
34096: LD_INT 85
34098: PUSH
34099: EMPTY
34100: LIST
34101: LIST
34102: PUSH
34103: LD_INT 124
34105: PUSH
34106: LD_INT 79
34108: PUSH
34109: EMPTY
34110: LIST
34111: LIST
34112: PUSH
34113: LD_INT 121
34115: PUSH
34116: LD_INT 93
34118: PUSH
34119: EMPTY
34120: LIST
34121: LIST
34122: PUSH
34123: LD_INT 105
34125: PUSH
34126: LD_INT 95
34128: PUSH
34129: EMPTY
34130: LIST
34131: LIST
34132: PUSH
34133: LD_INT 88
34135: PUSH
34136: LD_INT 81
34138: PUSH
34139: EMPTY
34140: LIST
34141: LIST
34142: PUSH
34143: LD_INT 80
34145: PUSH
34146: LD_INT 63
34148: PUSH
34149: EMPTY
34150: LIST
34151: LIST
34152: PUSH
34153: LD_INT 78
34155: PUSH
34156: LD_INT 48
34158: PUSH
34159: EMPTY
34160: LIST
34161: LIST
34162: PUSH
34163: LD_INT 89
34165: PUSH
34166: LD_INT 43
34168: PUSH
34169: EMPTY
34170: LIST
34171: LIST
34172: PUSH
34173: LD_INT 108
34175: PUSH
34176: LD_INT 40
34178: PUSH
34179: EMPTY
34180: LIST
34181: LIST
34182: PUSH
34183: LD_INT 100
34185: PUSH
34186: LD_INT 28
34188: PUSH
34189: EMPTY
34190: LIST
34191: LIST
34192: PUSH
34193: EMPTY
34194: LIST
34195: LIST
34196: LIST
34197: LIST
34198: LIST
34199: LIST
34200: LIST
34201: LIST
34202: LIST
34203: LIST
34204: LIST
34205: LIST
34206: LIST
34207: LIST
34208: LIST
34209: LIST
34210: LIST
34211: LIST
34212: LIST
34213: LIST
34214: LIST
34215: LIST
34216: LIST
34217: LIST
34218: ST_TO_ADDR
// wait_indexes = [ [ 1 , 5 ] , [ 3 , 8 ] ] ;
34219: LD_ADDR_VAR 0 30
34223: PUSH
34224: LD_INT 1
34226: PUSH
34227: LD_INT 5
34229: PUSH
34230: EMPTY
34231: LIST
34232: LIST
34233: PUSH
34234: LD_INT 3
34236: PUSH
34237: LD_INT 8
34239: PUSH
34240: EMPTY
34241: LIST
34242: LIST
34243: PUSH
34244: EMPTY
34245: LIST
34246: LIST
34247: ST_TO_ADDR
// end ; 3 :
34248: GO 34517
34250: LD_INT 3
34252: DOUBLE
34253: EQUAL
34254: IFTRUE 34258
34256: GO 34516
34258: POP
// begin vehicle_prepare_hexes = [ [ 71 , 100 ] ] ;
34259: LD_ADDR_VAR 0 23
34263: PUSH
34264: LD_INT 71
34266: PUSH
34267: LD_INT 100
34269: PUSH
34270: EMPTY
34271: LIST
34272: LIST
34273: PUSH
34274: EMPTY
34275: LIST
34276: ST_TO_ADDR
// human_prepare_hexes = [ [ 69 , 76 ] ] ;
34277: LD_ADDR_VAR 0 22
34281: PUSH
34282: LD_INT 69
34284: PUSH
34285: LD_INT 76
34287: PUSH
34288: EMPTY
34289: LIST
34290: LIST
34291: PUSH
34292: EMPTY
34293: LIST
34294: ST_TO_ADDR
// vehicle_attack_hexes = [ [ 94 , 97 ] , [ 99 , 109 ] , [ 103 , 94 ] , [ 88 , 81 ] , [ 80 , 63 ] , [ 78 , 48 ] , [ 89 , 43 ] , [ 108 , 40 ] , [ 100 , 28 ] ] ;
34295: LD_ADDR_VAR 0 10
34299: PUSH
34300: LD_INT 94
34302: PUSH
34303: LD_INT 97
34305: PUSH
34306: EMPTY
34307: LIST
34308: LIST
34309: PUSH
34310: LD_INT 99
34312: PUSH
34313: LD_INT 109
34315: PUSH
34316: EMPTY
34317: LIST
34318: LIST
34319: PUSH
34320: LD_INT 103
34322: PUSH
34323: LD_INT 94
34325: PUSH
34326: EMPTY
34327: LIST
34328: LIST
34329: PUSH
34330: LD_INT 88
34332: PUSH
34333: LD_INT 81
34335: PUSH
34336: EMPTY
34337: LIST
34338: LIST
34339: PUSH
34340: LD_INT 80
34342: PUSH
34343: LD_INT 63
34345: PUSH
34346: EMPTY
34347: LIST
34348: LIST
34349: PUSH
34350: LD_INT 78
34352: PUSH
34353: LD_INT 48
34355: PUSH
34356: EMPTY
34357: LIST
34358: LIST
34359: PUSH
34360: LD_INT 89
34362: PUSH
34363: LD_INT 43
34365: PUSH
34366: EMPTY
34367: LIST
34368: LIST
34369: PUSH
34370: LD_INT 108
34372: PUSH
34373: LD_INT 40
34375: PUSH
34376: EMPTY
34377: LIST
34378: LIST
34379: PUSH
34380: LD_INT 100
34382: PUSH
34383: LD_INT 28
34385: PUSH
34386: EMPTY
34387: LIST
34388: LIST
34389: PUSH
34390: EMPTY
34391: LIST
34392: LIST
34393: LIST
34394: LIST
34395: LIST
34396: LIST
34397: LIST
34398: LIST
34399: LIST
34400: ST_TO_ADDR
// human_attack_hexes = [ [ 94 , 97 ] , [ 99 , 109 ] , [ 103 , 94 ] , [ 88 , 81 ] , [ 80 , 63 ] , [ 78 , 48 ] , [ 89 , 43 ] , [ 108 , 40 ] , [ 100 , 28 ] ] ;
34401: LD_ADDR_VAR 0 9
34405: PUSH
34406: LD_INT 94
34408: PUSH
34409: LD_INT 97
34411: PUSH
34412: EMPTY
34413: LIST
34414: LIST
34415: PUSH
34416: LD_INT 99
34418: PUSH
34419: LD_INT 109
34421: PUSH
34422: EMPTY
34423: LIST
34424: LIST
34425: PUSH
34426: LD_INT 103
34428: PUSH
34429: LD_INT 94
34431: PUSH
34432: EMPTY
34433: LIST
34434: LIST
34435: PUSH
34436: LD_INT 88
34438: PUSH
34439: LD_INT 81
34441: PUSH
34442: EMPTY
34443: LIST
34444: LIST
34445: PUSH
34446: LD_INT 80
34448: PUSH
34449: LD_INT 63
34451: PUSH
34452: EMPTY
34453: LIST
34454: LIST
34455: PUSH
34456: LD_INT 78
34458: PUSH
34459: LD_INT 48
34461: PUSH
34462: EMPTY
34463: LIST
34464: LIST
34465: PUSH
34466: LD_INT 89
34468: PUSH
34469: LD_INT 43
34471: PUSH
34472: EMPTY
34473: LIST
34474: LIST
34475: PUSH
34476: LD_INT 108
34478: PUSH
34479: LD_INT 40
34481: PUSH
34482: EMPTY
34483: LIST
34484: LIST
34485: PUSH
34486: LD_INT 100
34488: PUSH
34489: LD_INT 28
34491: PUSH
34492: EMPTY
34493: LIST
34494: LIST
34495: PUSH
34496: EMPTY
34497: LIST
34498: LIST
34499: LIST
34500: LIST
34501: LIST
34502: LIST
34503: LIST
34504: LIST
34505: LIST
34506: ST_TO_ADDR
// wait_indexes = [ ] ;
34507: LD_ADDR_VAR 0 30
34511: PUSH
34512: EMPTY
34513: ST_TO_ADDR
// end ; end ;
34514: GO 34517
34516: POP
// area = GetBaseArea ( base ) ;
34517: LD_ADDR_VAR 0 15
34521: PUSH
34522: LD_VAR 0 4
34526: PPUSH
34527: CALL 11197 0 1
34531: ST_TO_ADDR
// attacking_humans = UnitFilter ( ai_attacking_soldiers [ base ] , [ f_ok ] ) ;
34532: LD_ADDR_VAR 0 14
34536: PUSH
34537: LD_EXP 63
34541: PUSH
34542: LD_VAR 0 4
34546: ARRAY
34547: PPUSH
34548: LD_INT 50
34550: PUSH
34551: EMPTY
34552: LIST
34553: PPUSH
34554: CALL_OW 72
34558: ST_TO_ADDR
// attacking_vehicles = UnitFilter ( ai_vehicles_attack [ base ] , [ f_ok ] ) ;
34559: LD_ADDR_VAR 0 21
34563: PUSH
34564: LD_EXP 40
34568: PUSH
34569: LD_VAR 0 4
34573: ARRAY
34574: PPUSH
34575: LD_INT 50
34577: PUSH
34578: EMPTY
34579: LIST
34580: PPUSH
34581: CALL_OW 72
34585: ST_TO_ADDR
// if ai_attacking_scientists [ base ] > 0 then
34586: LD_EXP 64
34590: PUSH
34591: LD_VAR 0 4
34595: ARRAY
34596: PUSH
34597: LD_INT 0
34599: GREATER
34600: IFFALSE 34970
// if ai_attacking_soldiers [ base ] = 0 then
34602: LD_EXP 63
34606: PUSH
34607: LD_VAR 0 4
34611: ARRAY
34612: PUSH
34613: LD_INT 0
34615: EQUAL
34616: IFFALSE 34642
// begin attacking_humans = attacking_humans ^ ai_attacking_scientists [ base ] ;
34618: LD_ADDR_VAR 0 14
34622: PUSH
34623: LD_VAR 0 14
34627: PUSH
34628: LD_EXP 64
34632: PUSH
34633: LD_VAR 0 4
34637: ARRAY
34638: ADD
34639: ST_TO_ADDR
// end else
34640: GO 34970
// begin x = 0 ;
34642: LD_ADDR_VAR 0 16
34646: PUSH
34647: LD_INT 0
34649: ST_TO_ADDR
// y = 0 ;
34650: LD_ADDR_VAR 0 17
34654: PUSH
34655: LD_INT 0
34657: ST_TO_ADDR
// for i in ai_attacking_soldiers [ base ] do
34658: LD_ADDR_VAR 0 2
34662: PUSH
34663: LD_EXP 63
34667: PUSH
34668: LD_VAR 0 4
34672: ARRAY
34673: PUSH
34674: FOR_IN
34675: IFFALSE 34721
// begin x = x + GetX ( i ) ;
34677: LD_ADDR_VAR 0 16
34681: PUSH
34682: LD_VAR 0 16
34686: PUSH
34687: LD_VAR 0 2
34691: PPUSH
34692: CALL_OW 250
34696: PLUS
34697: ST_TO_ADDR
// y = y + GetY ( i ) ;
34698: LD_ADDR_VAR 0 17
34702: PUSH
34703: LD_VAR 0 17
34707: PUSH
34708: LD_VAR 0 2
34712: PPUSH
34713: CALL_OW 251
34717: PLUS
34718: ST_TO_ADDR
// end ;
34719: GO 34674
34721: POP
34722: POP
// x = x div ai_attacking_soldiers [ base ] ;
34723: LD_ADDR_VAR 0 16
34727: PUSH
34728: LD_VAR 0 16
34732: PUSH
34733: LD_EXP 63
34737: PUSH
34738: LD_VAR 0 4
34742: ARRAY
34743: DIV
34744: ST_TO_ADDR
// y = y div ai_attacking_soldiers [ base ] ;
34745: LD_ADDR_VAR 0 17
34749: PUSH
34750: LD_VAR 0 17
34754: PUSH
34755: LD_EXP 63
34759: PUSH
34760: LD_VAR 0 4
34764: ARRAY
34765: DIV
34766: ST_TO_ADDR
// temp_value = 0 ;
34767: LD_ADDR_VAR 0 3
34771: PUSH
34772: LD_INT 0
34774: ST_TO_ADDR
// for i in ai_attacking_soldiers [ base ] do
34775: LD_ADDR_VAR 0 2
34779: PUSH
34780: LD_EXP 63
34784: PUSH
34785: LD_VAR 0 4
34789: ARRAY
34790: PUSH
34791: FOR_IN
34792: IFFALSE 34843
// begin k = GetDistUnitXY ( i , x , y ) ;
34794: LD_ADDR_VAR 0 8
34798: PUSH
34799: LD_VAR 0 2
34803: PPUSH
34804: LD_VAR 0 16
34808: PPUSH
34809: LD_VAR 0 17
34813: PPUSH
34814: CALL_OW 297
34818: ST_TO_ADDR
// if k > temp_value then
34819: LD_VAR 0 8
34823: PUSH
34824: LD_VAR 0 3
34828: GREATER
34829: IFFALSE 34841
// temp_value = k ;
34831: LD_ADDR_VAR 0 3
34835: PUSH
34836: LD_VAR 0 8
34840: ST_TO_ADDR
// end ;
34841: GO 34791
34843: POP
34844: POP
// for i in ai_attacking_scientists [ base ] do
34845: LD_ADDR_VAR 0 2
34849: PUSH
34850: LD_EXP 64
34854: PUSH
34855: LD_VAR 0 4
34859: ARRAY
34860: PUSH
34861: FOR_IN
34862: IFFALSE 34968
// if GetDistUnitXY ( i , x , y ) > temp_value then
34864: LD_VAR 0 2
34868: PPUSH
34869: LD_VAR 0 16
34873: PPUSH
34874: LD_VAR 0 17
34878: PPUSH
34879: CALL_OW 297
34883: PUSH
34884: LD_VAR 0 3
34888: GREATER
34889: IFFALSE 34966
// case GetType ( IsInUnit ( i ) ) of unit_building :
34891: LD_VAR 0 2
34895: PPUSH
34896: CALL_OW 310
34900: PPUSH
34901: CALL_OW 247
34905: PUSH
34906: LD_INT 3
34908: DOUBLE
34909: EQUAL
34910: IFTRUE 34914
34912: GO 34926
34914: POP
// ComExitBuilding ( i ) ; unit_vehicle :
34915: LD_VAR 0 2
34919: PPUSH
34920: CALL_OW 122
34924: GO 34966
34926: LD_INT 2
34928: DOUBLE
34929: EQUAL
34930: IFTRUE 34934
34932: GO 34946
34934: POP
// ComExitVehicle ( i ) ; else
34935: LD_VAR 0 2
34939: PPUSH
34940: CALL_OW 121
34944: GO 34966
34946: POP
// ComMoveXY ( i , x , y ) ; end ;
34947: LD_VAR 0 2
34951: PPUSH
34952: LD_VAR 0 16
34956: PPUSH
34957: LD_VAR 0 17
34961: PPUSH
34962: CALL_OW 111
34966: GO 34861
34968: POP
34969: POP
// end ; if not all_are_ready then
34970: LD_VAR 0 26
34974: NOT
34975: IFFALSE 35699
// begin all_done = true ;
34977: LD_ADDR_VAR 0 18
34981: PUSH
34982: LD_INT 1
34984: ST_TO_ADDR
// for k = 1 to 2 do
34985: LD_ADDR_VAR 0 8
34989: PUSH
34990: DOUBLE
34991: LD_INT 1
34993: DEC
34994: ST_TO_ADDR
34995: LD_INT 2
34997: PUSH
34998: FOR_TO
34999: IFFALSE 35586
// begin case k of 1 :
35001: LD_VAR 0 8
35005: PUSH
35006: LD_INT 1
35008: DOUBLE
35009: EQUAL
35010: IFTRUE 35014
35012: GO 35163
35014: POP
// begin temp_list = attacking_vehicles ;
35015: LD_ADDR_VAR 0 5
35019: PUSH
35020: LD_VAR 0 21
35024: ST_TO_ADDR
// temp_list_2 = vehicle_prepare_hexes ;
35025: LD_ADDR_VAR 0 7
35029: PUSH
35030: LD_VAR 0 23
35034: ST_TO_ADDR
// if russian_attack_strategy = 2 then
35035: LD_EXP 83
35039: PUSH
35040: LD_INT 2
35042: EQUAL
35043: IFFALSE 35161
// begin if prepare_veh_movement then
35045: LD_VAR 0 29
35049: IFFALSE 35103
// begin prepare_veh_movement = false ;
35051: LD_ADDR_VAR 0 29
35055: PUSH
35056: LD_INT 0
35058: ST_TO_ADDR
// for i in temp_list do
35059: LD_ADDR_VAR 0 2
35063: PUSH
35064: LD_VAR 0 5
35068: PUSH
35069: FOR_IN
35070: IFFALSE 35101
// if not IsInArea ( i , area ) then
35072: LD_VAR 0 2
35076: PPUSH
35077: LD_VAR 0 15
35081: PPUSH
35082: CALL_OW 308
35086: NOT
35087: IFFALSE 35099
// begin prepare_veh_movement = true ;
35089: LD_ADDR_VAR 0 29
35093: PUSH
35094: LD_INT 1
35096: ST_TO_ADDR
// break ;
35097: GO 35101
// end ;
35099: GO 35069
35101: POP
35102: POP
// end ; vehs_to_move_to_start_pos = [ ] ;
35103: LD_ADDR_VAR 0 28
35107: PUSH
35108: EMPTY
35109: ST_TO_ADDR
// for i in temp_list do
35110: LD_ADDR_VAR 0 2
35114: PUSH
35115: LD_VAR 0 5
35119: PUSH
35120: FOR_IN
35121: IFFALSE 35159
// begin vehs_to_move_to_start_pos = vehs_to_move_to_start_pos ^ i ;
35123: LD_ADDR_VAR 0 28
35127: PUSH
35128: LD_VAR 0 28
35132: PUSH
35133: LD_VAR 0 2
35137: ADD
35138: ST_TO_ADDR
// if IsInArea ( i , area ) then
35139: LD_VAR 0 2
35143: PPUSH
35144: LD_VAR 0 15
35148: PPUSH
35149: CALL_OW 308
35153: IFFALSE 35157
// break ;
35155: GO 35159
// end ;
35157: GO 35120
35159: POP
35160: POP
// end ; end ; 2 :
35161: GO 35195
35163: LD_INT 2
35165: DOUBLE
35166: EQUAL
35167: IFTRUE 35171
35169: GO 35194
35171: POP
// begin temp_list = attacking_humans ;
35172: LD_ADDR_VAR 0 5
35176: PUSH
35177: LD_VAR 0 14
35181: ST_TO_ADDR
// temp_list_2 = human_prepare_hexes ;
35182: LD_ADDR_VAR 0 7
35186: PUSH
35187: LD_VAR 0 22
35191: ST_TO_ADDR
// end ; end ;
35192: GO 35195
35194: POP
// temp_value = true ;
35195: LD_ADDR_VAR 0 3
35199: PUSH
35200: LD_INT 1
35202: ST_TO_ADDR
// for i in temp_list do
35203: LD_ADDR_VAR 0 2
35207: PUSH
35208: LD_VAR 0 5
35212: PUSH
35213: FOR_IN
35214: IFFALSE 35455
// begin if ai_attacking_unit_hex_index [ base ] [ i ] = temp_list_2 + 0 then
35216: LD_EXP 74
35220: PUSH
35221: LD_VAR 0 4
35225: ARRAY
35226: PUSH
35227: LD_VAR 0 2
35231: ARRAY
35232: PUSH
35233: LD_VAR 0 7
35237: PUSH
35238: LD_INT 0
35240: PLUS
35241: EQUAL
35242: IFFALSE 35254
// temp_value = false else
35244: LD_ADDR_VAR 0 3
35248: PUSH
35249: LD_INT 0
35251: ST_TO_ADDR
35252: GO 35262
// all_done = false ;
35254: LD_ADDR_VAR 0 18
35258: PUSH
35259: LD_INT 0
35261: ST_TO_ADDR
// temp_list_3 = temp_list_2 [ ai_attacking_unit_hex_index [ base ] [ i ] ] ;
35262: LD_ADDR_VAR 0 11
35266: PUSH
35267: LD_VAR 0 7
35271: PUSH
35272: LD_EXP 74
35276: PUSH
35277: LD_VAR 0 4
35281: ARRAY
35282: PUSH
35283: LD_VAR 0 2
35287: ARRAY
35288: ARRAY
35289: ST_TO_ADDR
// if k = 1 and russian_attack_strategy = 2 then
35290: LD_VAR 0 8
35294: PUSH
35295: LD_INT 1
35297: EQUAL
35298: PUSH
35299: LD_EXP 83
35303: PUSH
35304: LD_INT 2
35306: EQUAL
35307: AND
35308: IFFALSE 35335
// begin temp_list_3 = CalculateVehicleNotReadyHex ( temp_list_3 , i , attacking_vehicles ) ;
35310: LD_ADDR_VAR 0 11
35314: PUSH
35315: LD_VAR 0 11
35319: PPUSH
35320: LD_VAR 0 2
35324: PPUSH
35325: LD_VAR 0 21
35329: PPUSH
35330: CALL 40122 0 3
35334: ST_TO_ADDR
// end ; if GetDistUnitXY ( i , temp_list_3 [ 1 ] , temp_list_3 [ 2 ] ) > [ vehicle_dist , human_dist + 1 ] [ k ] and not ( GetDistUnitXY ( i , temp_list_3 [ 1 ] , temp_list_3 [ 2 ] ) <= 10 and not HasTask ( i ) ) then
35335: LD_VAR 0 2
35339: PPUSH
35340: LD_VAR 0 11
35344: PUSH
35345: LD_INT 1
35347: ARRAY
35348: PPUSH
35349: LD_VAR 0 11
35353: PUSH
35354: LD_INT 2
35356: ARRAY
35357: PPUSH
35358: CALL_OW 297
35362: PUSH
35363: LD_VAR 0 25
35367: PUSH
35368: LD_VAR 0 24
35372: PUSH
35373: LD_INT 1
35375: PLUS
35376: PUSH
35377: EMPTY
35378: LIST
35379: LIST
35380: PUSH
35381: LD_VAR 0 8
35385: ARRAY
35386: GREATER
35387: PUSH
35388: LD_VAR 0 2
35392: PPUSH
35393: LD_VAR 0 11
35397: PUSH
35398: LD_INT 1
35400: ARRAY
35401: PPUSH
35402: LD_VAR 0 11
35406: PUSH
35407: LD_INT 2
35409: ARRAY
35410: PPUSH
35411: CALL_OW 297
35415: PUSH
35416: LD_INT 10
35418: LESSEQUAL
35419: PUSH
35420: LD_VAR 0 2
35424: PPUSH
35425: CALL_OW 314
35429: NOT
35430: AND
35431: NOT
35432: AND
35433: IFFALSE 35453
// begin temp_value = false ;
35435: LD_ADDR_VAR 0 3
35439: PUSH
35440: LD_INT 0
35442: ST_TO_ADDR
// all_done = false ;
35443: LD_ADDR_VAR 0 18
35447: PUSH
35448: LD_INT 0
35450: ST_TO_ADDR
// break ;
35451: GO 35455
// end ; end ;
35453: GO 35213
35455: POP
35456: POP
// if temp_value then
35457: LD_VAR 0 3
35461: IFFALSE 35584
// begin if k = 2 then
35463: LD_VAR 0 8
35467: PUSH
35468: LD_INT 2
35470: EQUAL
35471: IFFALSE 35495
// temp_list = temp_list union ai_attacking_scientists [ base ] ;
35473: LD_ADDR_VAR 0 5
35477: PUSH
35478: LD_VAR 0 5
35482: PUSH
35483: LD_EXP 64
35487: PUSH
35488: LD_VAR 0 4
35492: ARRAY
35493: UNION
35494: ST_TO_ADDR
// for i in temp_list do
35495: LD_ADDR_VAR 0 2
35499: PUSH
35500: LD_VAR 0 5
35504: PUSH
35505: FOR_IN
35506: IFFALSE 35582
// begin temp_list_2 = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] + 1 ) ;
35508: LD_ADDR_VAR 0 7
35512: PUSH
35513: LD_EXP 74
35517: PUSH
35518: LD_VAR 0 4
35522: ARRAY
35523: PPUSH
35524: LD_VAR 0 2
35528: PPUSH
35529: LD_EXP 74
35533: PUSH
35534: LD_VAR 0 4
35538: ARRAY
35539: PUSH
35540: LD_VAR 0 2
35544: ARRAY
35545: PUSH
35546: LD_INT 1
35548: PLUS
35549: PPUSH
35550: CALL_OW 1
35554: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list_2 ) ;
35555: LD_ADDR_EXP 74
35559: PUSH
35560: LD_EXP 74
35564: PPUSH
35565: LD_VAR 0 4
35569: PPUSH
35570: LD_VAR 0 7
35574: PPUSH
35575: CALL_OW 1
35579: ST_TO_ADDR
// end ;
35580: GO 35505
35582: POP
35583: POP
// end ; end ;
35584: GO 34998
35586: POP
35587: POP
// if all_done then
35588: LD_VAR 0 18
35592: IFFALSE 35697
// begin all_are_ready = true ;
35594: LD_ADDR_VAR 0 26
35598: PUSH
35599: LD_INT 1
35601: ST_TO_ADDR
// for i in attacking_vehicles ^ ai_attacking_soldiers [ base ] ^ ai_attacking_scientists [ base ] do
35602: LD_ADDR_VAR 0 2
35606: PUSH
35607: LD_VAR 0 21
35611: PUSH
35612: LD_EXP 63
35616: PUSH
35617: LD_VAR 0 4
35621: ARRAY
35622: ADD
35623: PUSH
35624: LD_EXP 64
35628: PUSH
35629: LD_VAR 0 4
35633: ARRAY
35634: ADD
35635: PUSH
35636: FOR_IN
35637: IFFALSE 35695
// begin temp_list_2 = Replace ( ai_attacking_unit_hex_index [ base ] , i , 1 ) ;
35639: LD_ADDR_VAR 0 7
35643: PUSH
35644: LD_EXP 74
35648: PUSH
35649: LD_VAR 0 4
35653: ARRAY
35654: PPUSH
35655: LD_VAR 0 2
35659: PPUSH
35660: LD_INT 1
35662: PPUSH
35663: CALL_OW 1
35667: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list_2 ) ;
35668: LD_ADDR_EXP 74
35672: PUSH
35673: LD_EXP 74
35677: PPUSH
35678: LD_VAR 0 4
35682: PPUSH
35683: LD_VAR 0 7
35687: PPUSH
35688: CALL_OW 1
35692: ST_TO_ADDR
// end ;
35693: GO 35636
35695: POP
35696: POP
// end ; end else
35697: GO 36351
// begin temp_list_3 = [ false , false ] ;
35699: LD_ADDR_VAR 0 11
35703: PUSH
35704: LD_INT 0
35706: PUSH
35707: LD_INT 0
35709: PUSH
35710: EMPTY
35711: LIST
35712: LIST
35713: ST_TO_ADDR
// for i in attacking_vehicles do
35714: LD_ADDR_VAR 0 2
35718: PUSH
35719: LD_VAR 0 21
35723: PUSH
35724: FOR_IN
35725: IFFALSE 35973
// if ai_attacking_unit_hex_index [ base ] [ i ] < vehicle_attack_hexes + 0 then
35727: LD_EXP 74
35731: PUSH
35732: LD_VAR 0 4
35736: ARRAY
35737: PUSH
35738: LD_VAR 0 2
35742: ARRAY
35743: PUSH
35744: LD_VAR 0 10
35748: PUSH
35749: LD_INT 0
35751: PLUS
35752: LESS
35753: IFFALSE 35971
// begin if GetDistUnitXY ( i , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) <= vehicle_dist then
35755: LD_VAR 0 2
35759: PPUSH
35760: LD_VAR 0 10
35764: PUSH
35765: LD_EXP 74
35769: PUSH
35770: LD_VAR 0 4
35774: ARRAY
35775: PUSH
35776: LD_VAR 0 2
35780: ARRAY
35781: ARRAY
35782: PUSH
35783: LD_INT 1
35785: ARRAY
35786: PPUSH
35787: LD_VAR 0 10
35791: PUSH
35792: LD_EXP 74
35796: PUSH
35797: LD_VAR 0 4
35801: ARRAY
35802: PUSH
35803: LD_VAR 0 2
35807: ARRAY
35808: ARRAY
35809: PUSH
35810: LD_INT 2
35812: ARRAY
35813: PPUSH
35814: CALL_OW 297
35818: PUSH
35819: LD_VAR 0 25
35823: LESSEQUAL
35824: IFFALSE 35971
// begin if wait_indexes_pos <= wait_indexes + 0 then
35826: LD_VAR 0 31
35830: PUSH
35831: LD_VAR 0 30
35835: PUSH
35836: LD_INT 0
35838: PLUS
35839: LESSEQUAL
35840: IFFALSE 35899
// if ai_attacking_unit_hex_index [ base ] [ i ] = wait_indexes [ wait_indexes_pos ] [ 1 ] then
35842: LD_EXP 74
35846: PUSH
35847: LD_VAR 0 4
35851: ARRAY
35852: PUSH
35853: LD_VAR 0 2
35857: ARRAY
35858: PUSH
35859: LD_VAR 0 30
35863: PUSH
35864: LD_VAR 0 31
35868: ARRAY
35869: PUSH
35870: LD_INT 1
35872: ARRAY
35873: EQUAL
35874: IFFALSE 35899
// begin temp_list_3 = Replace ( temp_list_3 , 1 , true ) ;
35876: LD_ADDR_VAR 0 11
35880: PUSH
35881: LD_VAR 0 11
35885: PPUSH
35886: LD_INT 1
35888: PPUSH
35889: LD_INT 1
35891: PPUSH
35892: CALL_OW 1
35896: ST_TO_ADDR
// continue ;
35897: GO 35724
// end ; temp_list_2 = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] + 1 ) ;
35899: LD_ADDR_VAR 0 7
35903: PUSH
35904: LD_EXP 74
35908: PUSH
35909: LD_VAR 0 4
35913: ARRAY
35914: PPUSH
35915: LD_VAR 0 2
35919: PPUSH
35920: LD_EXP 74
35924: PUSH
35925: LD_VAR 0 4
35929: ARRAY
35930: PUSH
35931: LD_VAR 0 2
35935: ARRAY
35936: PUSH
35937: LD_INT 1
35939: PLUS
35940: PPUSH
35941: CALL_OW 1
35945: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list_2 ) ;
35946: LD_ADDR_EXP 74
35950: PUSH
35951: LD_EXP 74
35955: PPUSH
35956: LD_VAR 0 4
35960: PPUSH
35961: LD_VAR 0 7
35965: PPUSH
35966: CALL_OW 1
35970: ST_TO_ADDR
// end ; end ;
35971: GO 35724
35973: POP
35974: POP
// temp_value = true ;
35975: LD_ADDR_VAR 0 3
35979: PUSH
35980: LD_INT 1
35982: ST_TO_ADDR
// for i in attacking_humans do
35983: LD_ADDR_VAR 0 2
35987: PUSH
35988: LD_VAR 0 14
35992: PUSH
35993: FOR_IN
35994: IFFALSE 36107
// if ai_attacking_unit_hex_index [ base ] [ i ] <= human_attack_hexes + 0 then
35996: LD_EXP 74
36000: PUSH
36001: LD_VAR 0 4
36005: ARRAY
36006: PUSH
36007: LD_VAR 0 2
36011: ARRAY
36012: PUSH
36013: LD_VAR 0 9
36017: PUSH
36018: LD_INT 0
36020: PLUS
36021: LESSEQUAL
36022: IFFALSE 36105
// begin if GetDistUnitXY ( i , human_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , human_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) > human_dist then
36024: LD_VAR 0 2
36028: PPUSH
36029: LD_VAR 0 9
36033: PUSH
36034: LD_EXP 74
36038: PUSH
36039: LD_VAR 0 4
36043: ARRAY
36044: PUSH
36045: LD_VAR 0 2
36049: ARRAY
36050: ARRAY
36051: PUSH
36052: LD_INT 1
36054: ARRAY
36055: PPUSH
36056: LD_VAR 0 9
36060: PUSH
36061: LD_EXP 74
36065: PUSH
36066: LD_VAR 0 4
36070: ARRAY
36071: PUSH
36072: LD_VAR 0 2
36076: ARRAY
36077: ARRAY
36078: PUSH
36079: LD_INT 2
36081: ARRAY
36082: PPUSH
36083: CALL_OW 297
36087: PUSH
36088: LD_VAR 0 24
36092: GREATER
36093: IFFALSE 36105
// begin temp_value = false ;
36095: LD_ADDR_VAR 0 3
36099: PUSH
36100: LD_INT 0
36102: ST_TO_ADDR
// break ;
36103: GO 36107
// end ; end ;
36105: GO 35993
36107: POP
36108: POP
// if temp_value then
36109: LD_VAR 0 3
36113: IFFALSE 36323
// for i in ai_attacking_soldiers [ base ] ^ ai_attacking_scientists [ base ] do
36115: LD_ADDR_VAR 0 2
36119: PUSH
36120: LD_EXP 63
36124: PUSH
36125: LD_VAR 0 4
36129: ARRAY
36130: PUSH
36131: LD_EXP 64
36135: PUSH
36136: LD_VAR 0 4
36140: ARRAY
36141: ADD
36142: PUSH
36143: FOR_IN
36144: IFFALSE 36321
// if ai_attacking_unit_hex_index [ base ] [ i ] < human_attack_hexes + 0 then
36146: LD_EXP 74
36150: PUSH
36151: LD_VAR 0 4
36155: ARRAY
36156: PUSH
36157: LD_VAR 0 2
36161: ARRAY
36162: PUSH
36163: LD_VAR 0 9
36167: PUSH
36168: LD_INT 0
36170: PLUS
36171: LESS
36172: IFFALSE 36319
// begin if wait_indexes_pos <= wait_indexes + 0 then
36174: LD_VAR 0 31
36178: PUSH
36179: LD_VAR 0 30
36183: PUSH
36184: LD_INT 0
36186: PLUS
36187: LESSEQUAL
36188: IFFALSE 36247
// if ai_attacking_unit_hex_index [ base ] [ i ] = wait_indexes [ wait_indexes_pos ] [ 2 ] then
36190: LD_EXP 74
36194: PUSH
36195: LD_VAR 0 4
36199: ARRAY
36200: PUSH
36201: LD_VAR 0 2
36205: ARRAY
36206: PUSH
36207: LD_VAR 0 30
36211: PUSH
36212: LD_VAR 0 31
36216: ARRAY
36217: PUSH
36218: LD_INT 2
36220: ARRAY
36221: EQUAL
36222: IFFALSE 36247
// begin temp_list_3 = Replace ( temp_list_3 , 2 , true ) ;
36224: LD_ADDR_VAR 0 11
36228: PUSH
36229: LD_VAR 0 11
36233: PPUSH
36234: LD_INT 2
36236: PPUSH
36237: LD_INT 1
36239: PPUSH
36240: CALL_OW 1
36244: ST_TO_ADDR
// break ;
36245: GO 36321
// end ; temp_list_2 = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] + 1 ) ;
36247: LD_ADDR_VAR 0 7
36251: PUSH
36252: LD_EXP 74
36256: PUSH
36257: LD_VAR 0 4
36261: ARRAY
36262: PPUSH
36263: LD_VAR 0 2
36267: PPUSH
36268: LD_EXP 74
36272: PUSH
36273: LD_VAR 0 4
36277: ARRAY
36278: PUSH
36279: LD_VAR 0 2
36283: ARRAY
36284: PUSH
36285: LD_INT 1
36287: PLUS
36288: PPUSH
36289: CALL_OW 1
36293: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list_2 ) ;
36294: LD_ADDR_EXP 74
36298: PUSH
36299: LD_EXP 74
36303: PPUSH
36304: LD_VAR 0 4
36308: PPUSH
36309: LD_VAR 0 7
36313: PPUSH
36314: CALL_OW 1
36318: ST_TO_ADDR
// end ;
36319: GO 36143
36321: POP
36322: POP
// if ( temp_list_3 diff true ) = 0 then
36323: LD_VAR 0 11
36327: PUSH
36328: LD_INT 1
36330: DIFF
36331: PUSH
36332: LD_INT 0
36334: EQUAL
36335: IFFALSE 36351
// wait_indexes_pos = wait_indexes_pos + 1 ;
36337: LD_ADDR_VAR 0 31
36341: PUSH
36342: LD_VAR 0 31
36346: PUSH
36347: LD_INT 1
36349: PLUS
36350: ST_TO_ADDR
// end ; if russian_attack_strategy = 2 and not strat_2_attack_permitted then
36351: LD_EXP 83
36355: PUSH
36356: LD_INT 2
36358: EQUAL
36359: PUSH
36360: LD_VAR 0 27
36364: NOT
36365: AND
36366: IFFALSE 36501
// begin temp_list = UnitFilter ( attacking_vehicles , [ f_inarea , player_base_1 ] ) ;
36368: LD_ADDR_VAR 0 5
36372: PUSH
36373: LD_VAR 0 21
36377: PPUSH
36378: LD_INT 95
36380: PUSH
36381: LD_INT 1
36383: PUSH
36384: EMPTY
36385: LIST
36386: LIST
36387: PPUSH
36388: CALL_OW 72
36392: ST_TO_ADDR
// if temp_list + 0 >= attacking_vehicles + 0 or temp_list + 0 >= 3 then
36393: LD_VAR 0 5
36397: PUSH
36398: LD_INT 0
36400: PLUS
36401: PUSH
36402: LD_VAR 0 21
36406: PUSH
36407: LD_INT 0
36409: PLUS
36410: GREATEREQUAL
36411: PUSH
36412: LD_VAR 0 5
36416: PUSH
36417: LD_INT 0
36419: PLUS
36420: PUSH
36421: LD_INT 3
36423: GREATEREQUAL
36424: OR
36425: IFFALSE 36437
// strat_2_attack_permitted = true else
36427: LD_ADDR_VAR 0 27
36431: PUSH
36432: LD_INT 1
36434: ST_TO_ADDR
36435: GO 36501
// begin temp_value = true ;
36437: LD_ADDR_VAR 0 3
36441: PUSH
36442: LD_INT 1
36444: ST_TO_ADDR
// for i in attacking_vehicles do
36445: LD_ADDR_VAR 0 2
36449: PUSH
36450: LD_VAR 0 21
36454: PUSH
36455: FOR_IN
36456: IFFALSE 36485
// if Attacks ( i ) = 0 then
36458: LD_VAR 0 2
36462: PPUSH
36463: CALL_OW 320
36467: PUSH
36468: LD_INT 0
36470: EQUAL
36471: IFFALSE 36483
// begin temp_value = false ;
36473: LD_ADDR_VAR 0 3
36477: PUSH
36478: LD_INT 0
36480: ST_TO_ADDR
// break ;
36481: GO 36485
// end ;
36483: GO 36455
36485: POP
36486: POP
// if temp_value then
36487: LD_VAR 0 3
36491: IFFALSE 36501
// strat_2_attack_permitted = true ;
36493: LD_ADDR_VAR 0 27
36497: PUSH
36498: LD_INT 1
36500: ST_TO_ADDR
// end ; end ; for i in attacking_vehicles ^ attacking_humans do
36501: LD_ADDR_VAR 0 2
36505: PUSH
36506: LD_VAR 0 21
36510: PUSH
36511: LD_VAR 0 14
36515: ADD
36516: PUSH
36517: FOR_IN
36518: IFFALSE 39124
// begin if GetClass ( i ) = class_bazooker then
36520: LD_VAR 0 2
36524: PPUSH
36525: CALL_OW 257
36529: PUSH
36530: LD_INT 9
36532: EQUAL
36533: IFFALSE 36900
// begin temp_list = GetTaskList ( i ) ;
36535: LD_ADDR_VAR 0 5
36539: PUSH
36540: LD_VAR 0 2
36544: PPUSH
36545: CALL_OW 437
36549: ST_TO_ADDR
// if temp_list > 0 then
36550: LD_VAR 0 5
36554: PUSH
36555: LD_INT 0
36557: GREATER
36558: IFFALSE 36598
// if temp_list [ 1 ] [ 1 ] = & or temp_list [ 1 ] [ 1 ] = % then
36560: LD_VAR 0 5
36564: PUSH
36565: LD_INT 1
36567: ARRAY
36568: PUSH
36569: LD_INT 1
36571: ARRAY
36572: PUSH
36573: LD_STRING &
36575: EQUAL
36576: PUSH
36577: LD_VAR 0 5
36581: PUSH
36582: LD_INT 1
36584: ARRAY
36585: PUSH
36586: LD_INT 1
36588: ARRAY
36589: PUSH
36590: LD_STRING %
36592: EQUAL
36593: OR
36594: IFFALSE 36598
// continue ;
36596: GO 36517
// un1 = Attacks ( i ) ;
36598: LD_ADDR_VAR 0 19
36602: PUSH
36603: LD_VAR 0 2
36607: PPUSH
36608: CALL_OW 320
36612: ST_TO_ADDR
// if un1 > 0 and DangerousUnits ( [ un1 ] ) > 0 then
36613: LD_VAR 0 19
36617: PUSH
36618: LD_INT 0
36620: GREATER
36621: PUSH
36622: LD_VAR 0 19
36626: PUSH
36627: EMPTY
36628: LIST
36629: PPUSH
36630: CALL 39259 0 1
36634: PUSH
36635: LD_INT 0
36637: GREATER
36638: AND
36639: IFFALSE 36900
// begin temp_list_2 = [ GetX ( un1 ) , GetY ( un1 ) ] ;
36641: LD_ADDR_VAR 0 7
36645: PUSH
36646: LD_VAR 0 19
36650: PPUSH
36651: CALL_OW 250
36655: PUSH
36656: LD_VAR 0 19
36660: PPUSH
36661: CALL_OW 251
36665: PUSH
36666: EMPTY
36667: LIST
36668: LIST
36669: ST_TO_ADDR
// temp_value = false ;
36670: LD_ADDR_VAR 0 3
36674: PUSH
36675: LD_INT 0
36677: ST_TO_ADDR
// for val in ai_time_shift_hexes [ base ] ^ ai_time_shift_hexes_underway [ base ] do
36678: LD_ADDR_VAR 0 20
36682: PUSH
36683: LD_EXP 72
36687: PUSH
36688: LD_VAR 0 4
36692: ARRAY
36693: PUSH
36694: LD_EXP 73
36698: PUSH
36699: LD_VAR 0 4
36703: ARRAY
36704: ADD
36705: PUSH
36706: FOR_IN
36707: IFFALSE 36779
// if GetDistXY ( temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , val [ 1 ] , val [ 2 ] ) <= ai_time_shift_data [ side ] [ 2 ] then
36709: LD_VAR 0 7
36713: PUSH
36714: LD_INT 1
36716: ARRAY
36717: PPUSH
36718: LD_VAR 0 7
36722: PUSH
36723: LD_INT 2
36725: ARRAY
36726: PPUSH
36727: LD_VAR 0 20
36731: PUSH
36732: LD_INT 1
36734: ARRAY
36735: PPUSH
36736: LD_VAR 0 20
36740: PUSH
36741: LD_INT 2
36743: ARRAY
36744: PPUSH
36745: CALL_OW 298
36749: PUSH
36750: LD_EXP 71
36754: PUSH
36755: LD_VAR 0 1
36759: ARRAY
36760: PUSH
36761: LD_INT 2
36763: ARRAY
36764: LESSEQUAL
36765: IFFALSE 36777
// begin temp_value = true ;
36767: LD_ADDR_VAR 0 3
36771: PUSH
36772: LD_INT 1
36774: ST_TO_ADDR
// break ;
36775: GO 36779
// end ;
36777: GO 36706
36779: POP
36780: POP
// if not temp_value then
36781: LD_VAR 0 3
36785: NOT
36786: IFFALSE 36900
// begin ComTimeShift ( i , temp_list_2 [ 1 ] , temp_list_2 [ 2 ] ) ;
36788: LD_VAR 0 2
36792: PPUSH
36793: LD_VAR 0 7
36797: PUSH
36798: LD_INT 1
36800: ARRAY
36801: PPUSH
36802: LD_VAR 0 7
36806: PUSH
36807: LD_INT 2
36809: ARRAY
36810: PPUSH
36811: CALL_OW 154
// temp_list = Insert ( ai_time_shift_hexes_underway [ base ] , 1 , [ temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , i , tick ] ) ;
36815: LD_ADDR_VAR 0 5
36819: PUSH
36820: LD_EXP 73
36824: PUSH
36825: LD_VAR 0 4
36829: ARRAY
36830: PPUSH
36831: LD_INT 1
36833: PPUSH
36834: LD_VAR 0 7
36838: PUSH
36839: LD_INT 1
36841: ARRAY
36842: PUSH
36843: LD_VAR 0 7
36847: PUSH
36848: LD_INT 2
36850: ARRAY
36851: PUSH
36852: LD_VAR 0 2
36856: PUSH
36857: LD_OWVAR 1
36861: PUSH
36862: EMPTY
36863: LIST
36864: LIST
36865: LIST
36866: LIST
36867: PPUSH
36868: CALL_OW 2
36872: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
36873: LD_ADDR_EXP 73
36877: PUSH
36878: LD_EXP 73
36882: PPUSH
36883: LD_VAR 0 4
36887: PPUSH
36888: LD_VAR 0 5
36892: PPUSH
36893: CALL_OW 1
36897: ST_TO_ADDR
// continue ;
36898: GO 36517
// end ; end ; end ; if not all_are_ready then
36900: LD_VAR 0 26
36904: NOT
36905: IFFALSE 37269
// begin if i in attacking_vehicles then
36907: LD_VAR 0 2
36911: PUSH
36912: LD_VAR 0 21
36916: IN
36917: IFFALSE 37030
// begin if russian_attack_strategy = 2 then
36919: LD_EXP 83
36923: PUSH
36924: LD_INT 2
36926: EQUAL
36927: IFFALSE 37008
// begin if prepare_veh_movement then
36929: LD_VAR 0 29
36933: IFFALSE 36993
// begin if not IsInArea ( i , area ) then
36935: LD_VAR 0 2
36939: PPUSH
36940: LD_VAR 0 15
36944: PPUSH
36945: CALL_OW 308
36949: NOT
36950: IFFALSE 36991
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
36952: LD_VAR 0 2
36956: PPUSH
36957: LD_EXP 41
36961: PUSH
36962: LD_VAR 0 4
36966: ARRAY
36967: PUSH
36968: LD_INT 1
36970: ARRAY
36971: PPUSH
36972: LD_EXP 41
36976: PUSH
36977: LD_VAR 0 4
36981: ARRAY
36982: PUSH
36983: LD_INT 2
36985: ARRAY
36986: PPUSH
36987: CALL_OW 111
// continue ;
36991: GO 36517
// end ; if not i in vehs_to_move_to_start_pos then
36993: LD_VAR 0 2
36997: PUSH
36998: LD_VAR 0 28
37002: IN
37003: NOT
37004: IFFALSE 37008
// continue ;
37006: GO 36517
// end ; temp_list = vehicle_prepare_hexes ;
37008: LD_ADDR_VAR 0 5
37012: PUSH
37013: LD_VAR 0 23
37017: ST_TO_ADDR
// k = vehicle_dist ;
37018: LD_ADDR_VAR 0 8
37022: PUSH
37023: LD_VAR 0 25
37027: ST_TO_ADDR
// end else
37028: GO 37050
// begin temp_list = human_prepare_hexes ;
37030: LD_ADDR_VAR 0 5
37034: PUSH
37035: LD_VAR 0 22
37039: ST_TO_ADDR
// k = human_dist ;
37040: LD_ADDR_VAR 0 8
37044: PUSH
37045: LD_VAR 0 24
37049: ST_TO_ADDR
// end ; if ai_attacking_unit_hex_index [ base ] [ i ] <= temp_list then
37050: LD_EXP 74
37054: PUSH
37055: LD_VAR 0 4
37059: ARRAY
37060: PUSH
37061: LD_VAR 0 2
37065: ARRAY
37066: PUSH
37067: LD_VAR 0 5
37071: LESSEQUAL
37072: IFFALSE 37267
// begin temp_list_3 = temp_list [ ai_attacking_unit_hex_index [ base ] [ i ] ] ;
37074: LD_ADDR_VAR 0 11
37078: PUSH
37079: LD_VAR 0 5
37083: PUSH
37084: LD_EXP 74
37088: PUSH
37089: LD_VAR 0 4
37093: ARRAY
37094: PUSH
37095: LD_VAR 0 2
37099: ARRAY
37100: ARRAY
37101: ST_TO_ADDR
// if i in attacking_vehicles and russian_attack_strategy = 2 then
37102: LD_VAR 0 2
37106: PUSH
37107: LD_VAR 0 21
37111: IN
37112: PUSH
37113: LD_EXP 83
37117: PUSH
37118: LD_INT 2
37120: EQUAL
37121: AND
37122: IFFALSE 37149
// begin temp_list_3 = CalculateVehicleNotReadyHex ( temp_list_3 , i , attacking_vehicles ) ;
37124: LD_ADDR_VAR 0 11
37128: PUSH
37129: LD_VAR 0 11
37133: PPUSH
37134: LD_VAR 0 2
37138: PPUSH
37139: LD_VAR 0 21
37143: PPUSH
37144: CALL 40122 0 3
37148: ST_TO_ADDR
// end ; if GetDistUnitXY ( i , temp_list_3 [ 1 ] , temp_list_3 [ 2 ] ) > k then
37149: LD_VAR 0 2
37153: PPUSH
37154: LD_VAR 0 11
37158: PUSH
37159: LD_INT 1
37161: ARRAY
37162: PPUSH
37163: LD_VAR 0 11
37167: PUSH
37168: LD_INT 2
37170: ARRAY
37171: PPUSH
37172: CALL_OW 297
37176: PUSH
37177: LD_VAR 0 8
37181: GREATER
37182: IFFALSE 37267
// begin case GetType ( IsInUnit ( i ) ) of unit_building :
37184: LD_VAR 0 2
37188: PPUSH
37189: CALL_OW 310
37193: PPUSH
37194: CALL_OW 247
37198: PUSH
37199: LD_INT 3
37201: DOUBLE
37202: EQUAL
37203: IFTRUE 37207
37205: GO 37219
37207: POP
// ComExitBuilding ( i ) ; unit_vehicle :
37208: LD_VAR 0 2
37212: PPUSH
37213: CALL_OW 122
37217: GO 37267
37219: LD_INT 2
37221: DOUBLE
37222: EQUAL
37223: IFTRUE 37227
37225: GO 37239
37227: POP
// ComExitVehicle ( i ) ; else
37228: LD_VAR 0 2
37232: PPUSH
37233: CALL_OW 121
37237: GO 37267
37239: POP
// ComMoveXY ( i , temp_list_3 [ 1 ] , temp_list_3 [ 2 ] ) ; end ;
37240: LD_VAR 0 2
37244: PPUSH
37245: LD_VAR 0 11
37249: PUSH
37250: LD_INT 1
37252: ARRAY
37253: PPUSH
37254: LD_VAR 0 11
37258: PUSH
37259: LD_INT 2
37261: ARRAY
37262: PPUSH
37263: CALL_OW 111
// end ; end ; end else
37267: GO 39122
// begin temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_dist , i , 20 ] , [ f_see , side ] ] ) ;
37269: LD_ADDR_VAR 0 5
37273: PUSH
37274: LD_INT 81
37276: PUSH
37277: LD_VAR 0 1
37281: PUSH
37282: EMPTY
37283: LIST
37284: LIST
37285: PUSH
37286: LD_INT 21
37288: PUSH
37289: LD_INT 1
37291: PUSH
37292: EMPTY
37293: LIST
37294: LIST
37295: PUSH
37296: LD_INT 91
37298: PUSH
37299: LD_VAR 0 2
37303: PUSH
37304: LD_INT 20
37306: PUSH
37307: EMPTY
37308: LIST
37309: LIST
37310: LIST
37311: PUSH
37312: LD_INT 101
37314: PUSH
37315: LD_VAR 0 1
37319: PUSH
37320: EMPTY
37321: LIST
37322: LIST
37323: PUSH
37324: EMPTY
37325: LIST
37326: LIST
37327: LIST
37328: LIST
37329: PPUSH
37330: CALL_OW 69
37334: ST_TO_ADDR
// if russian_attack_strategy = 2 and GetY ( i ) >= 59 then
37335: LD_EXP 83
37339: PUSH
37340: LD_INT 2
37342: EQUAL
37343: PUSH
37344: LD_VAR 0 2
37348: PPUSH
37349: CALL_OW 251
37353: PUSH
37354: LD_INT 59
37356: GREATEREQUAL
37357: AND
37358: IFFALSE 37443
// begin k = 1 ;
37360: LD_ADDR_VAR 0 8
37364: PUSH
37365: LD_INT 1
37367: ST_TO_ADDR
// while k <= temp_list + 0 do
37368: LD_VAR 0 8
37372: PUSH
37373: LD_VAR 0 5
37377: PUSH
37378: LD_INT 0
37380: PLUS
37381: LESSEQUAL
37382: IFFALSE 37443
// begin if GetY ( temp_list [ k ] ) >= 59 then
37384: LD_VAR 0 5
37388: PUSH
37389: LD_VAR 0 8
37393: ARRAY
37394: PPUSH
37395: CALL_OW 251
37399: PUSH
37400: LD_INT 59
37402: GREATEREQUAL
37403: IFFALSE 37427
// begin temp_list = Delete ( temp_list , k ) ;
37405: LD_ADDR_VAR 0 5
37409: PUSH
37410: LD_VAR 0 5
37414: PPUSH
37415: LD_VAR 0 8
37419: PPUSH
37420: CALL_OW 3
37424: ST_TO_ADDR
// continue ;
37425: GO 37368
// end ; k = k + 1 ;
37427: LD_ADDR_VAR 0 8
37431: PUSH
37432: LD_VAR 0 8
37436: PUSH
37437: LD_INT 1
37439: PLUS
37440: ST_TO_ADDR
// end ;
37441: GO 37368
// end ; temp_value := russian_attack_strategy = 2 and i in attacking_vehicles and not strat_2_attack_permitted ;
37443: LD_ADDR_VAR 0 3
37447: PUSH
37448: LD_EXP 83
37452: PUSH
37453: LD_INT 2
37455: EQUAL
37456: PUSH
37457: LD_VAR 0 2
37461: PUSH
37462: LD_VAR 0 21
37466: IN
37467: AND
37468: PUSH
37469: LD_VAR 0 27
37473: NOT
37474: AND
37475: ST_TO_ADDR
// if temp_list > 0 and not temp_value then
37476: LD_VAR 0 5
37480: PUSH
37481: LD_INT 0
37483: GREATER
37484: PUSH
37485: LD_VAR 0 3
37489: NOT
37490: AND
37491: IFFALSE 37627
// begin temp_list_2 = UnitFilter ( temp_list , [ f_not , [ f_lives , 250 ] ] ) ;
37493: LD_ADDR_VAR 0 7
37497: PUSH
37498: LD_VAR 0 5
37502: PPUSH
37503: LD_INT 3
37505: PUSH
37506: LD_INT 24
37508: PUSH
37509: LD_INT 250
37511: PUSH
37512: EMPTY
37513: LIST
37514: LIST
37515: PUSH
37516: EMPTY
37517: LIST
37518: LIST
37519: PPUSH
37520: CALL_OW 72
37524: ST_TO_ADDR
// if temp_list_2 > 0 then
37525: LD_VAR 0 7
37529: PUSH
37530: LD_INT 0
37532: GREATER
37533: IFFALSE 37545
// temp_list = temp_list_2 ;
37535: LD_ADDR_VAR 0 5
37539: PUSH
37540: LD_VAR 0 7
37544: ST_TO_ADDR
// temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
37545: LD_ADDR_VAR 0 6
37549: PUSH
37550: LD_VAR 0 5
37554: PPUSH
37555: LD_VAR 0 2
37559: PPUSH
37560: CALL_OW 75
37564: ST_TO_ADDR
// if GetLives ( temp_unit ) > 250 then
37565: LD_VAR 0 6
37569: PPUSH
37570: CALL_OW 256
37574: PUSH
37575: LD_INT 250
37577: GREATER
37578: IFFALSE 37611
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
37580: LD_VAR 0 2
37584: PPUSH
37585: LD_VAR 0 6
37589: PPUSH
37590: CALL_OW 250
37594: PPUSH
37595: LD_VAR 0 6
37599: PPUSH
37600: CALL_OW 251
37604: PPUSH
37605: CALL_OW 114
37609: GO 37625
// ComAttackUnit ( i , temp_unit ) ;
37611: LD_VAR 0 2
37615: PPUSH
37616: LD_VAR 0 6
37620: PPUSH
37621: CALL_OW 115
// end else
37625: GO 39122
// begin temp_list = FindNonhumansNearUnit ( side , i , 20 , true ) ;
37627: LD_ADDR_VAR 0 5
37631: PUSH
37632: LD_VAR 0 1
37636: PPUSH
37637: LD_VAR 0 2
37641: PPUSH
37642: LD_INT 20
37644: PPUSH
37645: LD_INT 1
37647: PPUSH
37648: CALL 39137 0 4
37652: ST_TO_ADDR
// if temp_list > 0 and not temp_value then
37653: LD_VAR 0 5
37657: PUSH
37658: LD_INT 0
37660: GREATER
37661: PUSH
37662: LD_VAR 0 3
37666: NOT
37667: AND
37668: IFFALSE 37954
// begin if i in attacking_vehicles then
37670: LD_VAR 0 2
37674: PUSH
37675: LD_VAR 0 21
37679: IN
37680: IFFALSE 37818
// begin if GetDistUnitXY ( i , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) > vehicle_dist then
37682: LD_VAR 0 2
37686: PPUSH
37687: LD_VAR 0 10
37691: PUSH
37692: LD_EXP 74
37696: PUSH
37697: LD_VAR 0 4
37701: ARRAY
37702: PUSH
37703: LD_VAR 0 2
37707: ARRAY
37708: ARRAY
37709: PUSH
37710: LD_INT 1
37712: ARRAY
37713: PPUSH
37714: LD_VAR 0 10
37718: PUSH
37719: LD_EXP 74
37723: PUSH
37724: LD_VAR 0 4
37728: ARRAY
37729: PUSH
37730: LD_VAR 0 2
37734: ARRAY
37735: ARRAY
37736: PUSH
37737: LD_INT 2
37739: ARRAY
37740: PPUSH
37741: CALL_OW 297
37745: PUSH
37746: LD_VAR 0 25
37750: GREATER
37751: IFFALSE 37816
// ComAgressiveMove ( i , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) ;
37753: LD_VAR 0 2
37757: PPUSH
37758: LD_VAR 0 10
37762: PUSH
37763: LD_EXP 74
37767: PUSH
37768: LD_VAR 0 4
37772: ARRAY
37773: PUSH
37774: LD_VAR 0 2
37778: ARRAY
37779: ARRAY
37780: PUSH
37781: LD_INT 1
37783: ARRAY
37784: PPUSH
37785: LD_VAR 0 10
37789: PUSH
37790: LD_EXP 74
37794: PUSH
37795: LD_VAR 0 4
37799: ARRAY
37800: PUSH
37801: LD_VAR 0 2
37805: ARRAY
37806: ARRAY
37807: PUSH
37808: LD_INT 2
37810: ARRAY
37811: PPUSH
37812: CALL_OW 114
// end else
37816: GO 37952
// if GetDistUnitXY ( i , human_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , human_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) > human_dist then
37818: LD_VAR 0 2
37822: PPUSH
37823: LD_VAR 0 9
37827: PUSH
37828: LD_EXP 74
37832: PUSH
37833: LD_VAR 0 4
37837: ARRAY
37838: PUSH
37839: LD_VAR 0 2
37843: ARRAY
37844: ARRAY
37845: PUSH
37846: LD_INT 1
37848: ARRAY
37849: PPUSH
37850: LD_VAR 0 9
37854: PUSH
37855: LD_EXP 74
37859: PUSH
37860: LD_VAR 0 4
37864: ARRAY
37865: PUSH
37866: LD_VAR 0 2
37870: ARRAY
37871: ARRAY
37872: PUSH
37873: LD_INT 2
37875: ARRAY
37876: PPUSH
37877: CALL_OW 297
37881: PUSH
37882: LD_VAR 0 24
37886: GREATER
37887: IFFALSE 37952
// ComAgressiveMove ( i , human_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , human_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) ;
37889: LD_VAR 0 2
37893: PPUSH
37894: LD_VAR 0 9
37898: PUSH
37899: LD_EXP 74
37903: PUSH
37904: LD_VAR 0 4
37908: ARRAY
37909: PUSH
37910: LD_VAR 0 2
37914: ARRAY
37915: ARRAY
37916: PUSH
37917: LD_INT 1
37919: ARRAY
37920: PPUSH
37921: LD_VAR 0 9
37925: PUSH
37926: LD_EXP 74
37930: PUSH
37931: LD_VAR 0 4
37935: ARRAY
37936: PUSH
37937: LD_VAR 0 2
37941: ARRAY
37942: ARRAY
37943: PUSH
37944: LD_INT 2
37946: ARRAY
37947: PPUSH
37948: CALL_OW 114
// end else
37952: GO 39122
// begin temp_list = FindNonhumansNearUnit ( side , i , 20 , false ) ;
37954: LD_ADDR_VAR 0 5
37958: PUSH
37959: LD_VAR 0 1
37963: PPUSH
37964: LD_VAR 0 2
37968: PPUSH
37969: LD_INT 20
37971: PPUSH
37972: LD_INT 0
37974: PPUSH
37975: CALL 39137 0 4
37979: ST_TO_ADDR
// if temp_list > 0 and not temp_value then
37980: LD_VAR 0 5
37984: PUSH
37985: LD_INT 0
37987: GREATER
37988: PUSH
37989: LD_VAR 0 3
37993: NOT
37994: AND
37995: IFFALSE 38033
// begin temp_unit = NearestUnitToUnit ( temp_list , i ) ;
37997: LD_ADDR_VAR 0 6
38001: PUSH
38002: LD_VAR 0 5
38006: PPUSH
38007: LD_VAR 0 2
38011: PPUSH
38012: CALL_OW 74
38016: ST_TO_ADDR
// ComAttackUnit ( i , temp_unit ) ;
38017: LD_VAR 0 2
38021: PPUSH
38022: LD_VAR 0 6
38026: PPUSH
38027: CALL_OW 115
// end else
38031: GO 39122
// if i in attacking_vehicles and russian_attack_strategy = 2 and not strat_2_attack_permitted then
38033: LD_VAR 0 2
38037: PUSH
38038: LD_VAR 0 21
38042: IN
38043: PUSH
38044: LD_EXP 83
38048: PUSH
38049: LD_INT 2
38051: EQUAL
38052: AND
38053: PUSH
38054: LD_VAR 0 27
38058: NOT
38059: AND
38060: IFFALSE 38840
// begin if i = attacking_vehicles [ 1 ] then
38062: LD_VAR 0 2
38066: PUSH
38067: LD_VAR 0 21
38071: PUSH
38072: LD_INT 1
38074: ARRAY
38075: EQUAL
38076: IFFALSE 38320
// begin if ai_attacking_unit_hex_index [ base ] [ i ] <= vehicle_attack_hexes then
38078: LD_EXP 74
38082: PUSH
38083: LD_VAR 0 4
38087: ARRAY
38088: PUSH
38089: LD_VAR 0 2
38093: ARRAY
38094: PUSH
38095: LD_VAR 0 10
38099: LESSEQUAL
38100: IFFALSE 38318
// if GetDistUnitXY ( i , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) > vehicle_dist then
38102: LD_VAR 0 2
38106: PPUSH
38107: LD_VAR 0 10
38111: PUSH
38112: LD_EXP 74
38116: PUSH
38117: LD_VAR 0 4
38121: ARRAY
38122: PUSH
38123: LD_VAR 0 2
38127: ARRAY
38128: ARRAY
38129: PUSH
38130: LD_INT 1
38132: ARRAY
38133: PPUSH
38134: LD_VAR 0 10
38138: PUSH
38139: LD_EXP 74
38143: PUSH
38144: LD_VAR 0 4
38148: ARRAY
38149: PUSH
38150: LD_VAR 0 2
38154: ARRAY
38155: ARRAY
38156: PUSH
38157: LD_INT 2
38159: ARRAY
38160: PPUSH
38161: CALL_OW 297
38165: PUSH
38166: LD_VAR 0 25
38170: GREATER
38171: IFFALSE 38318
// begin temp_value = true ;
38173: LD_ADDR_VAR 0 3
38177: PUSH
38178: LD_INT 1
38180: ST_TO_ADDR
// for k = 2 to attacking_vehicles do
38181: LD_ADDR_VAR 0 8
38185: PUSH
38186: DOUBLE
38187: LD_INT 2
38189: DEC
38190: ST_TO_ADDR
38191: LD_VAR 0 21
38195: PUSH
38196: FOR_TO
38197: IFFALSE 38247
// if GetDistUnits ( attacking_vehicles [ k ] , attacking_vehicles [ k - 1 ] ) > 7 then
38199: LD_VAR 0 21
38203: PUSH
38204: LD_VAR 0 8
38208: ARRAY
38209: PPUSH
38210: LD_VAR 0 21
38214: PUSH
38215: LD_VAR 0 8
38219: PUSH
38220: LD_INT 1
38222: MINUS
38223: ARRAY
38224: PPUSH
38225: CALL_OW 296
38229: PUSH
38230: LD_INT 7
38232: GREATER
38233: IFFALSE 38245
// begin temp_value = false ;
38235: LD_ADDR_VAR 0 3
38239: PUSH
38240: LD_INT 0
38242: ST_TO_ADDR
// break ;
38243: GO 38247
// end ;
38245: GO 38196
38247: POP
38248: POP
// if temp_value then
38249: LD_VAR 0 3
38253: IFFALSE 38318
// ComMoveXY ( i , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) ;
38255: LD_VAR 0 2
38259: PPUSH
38260: LD_VAR 0 10
38264: PUSH
38265: LD_EXP 74
38269: PUSH
38270: LD_VAR 0 4
38274: ARRAY
38275: PUSH
38276: LD_VAR 0 2
38280: ARRAY
38281: ARRAY
38282: PUSH
38283: LD_INT 1
38285: ARRAY
38286: PPUSH
38287: LD_VAR 0 10
38291: PUSH
38292: LD_EXP 74
38296: PUSH
38297: LD_VAR 0 4
38301: ARRAY
38302: PUSH
38303: LD_VAR 0 2
38307: ARRAY
38308: ARRAY
38309: PUSH
38310: LD_INT 2
38312: ARRAY
38313: PPUSH
38314: CALL_OW 111
// end ; end else
38318: GO 38838
// begin temp_value = 2 ;
38320: LD_ADDR_VAR 0 3
38324: PUSH
38325: LD_INT 2
38327: ST_TO_ADDR
// for k = 2 to attacking_vehicles do
38328: LD_ADDR_VAR 0 8
38332: PUSH
38333: DOUBLE
38334: LD_INT 2
38336: DEC
38337: ST_TO_ADDR
38338: LD_VAR 0 21
38342: PUSH
38343: FOR_TO
38344: IFFALSE 38378
// if i = attacking_vehicles [ k ] then
38346: LD_VAR 0 2
38350: PUSH
38351: LD_VAR 0 21
38355: PUSH
38356: LD_VAR 0 8
38360: ARRAY
38361: EQUAL
38362: IFFALSE 38376
// begin temp_value = k ;
38364: LD_ADDR_VAR 0 3
38368: PUSH
38369: LD_VAR 0 8
38373: ST_TO_ADDR
// break ;
38374: GO 38378
// end ;
38376: GO 38343
38378: POP
38379: POP
// temp_value = temp_value - 1 ;
38380: LD_ADDR_VAR 0 3
38384: PUSH
38385: LD_VAR 0 3
38389: PUSH
38390: LD_INT 1
38392: MINUS
38393: ST_TO_ADDR
// x = GetX ( attacking_vehicles [ temp_value ] ) ;
38394: LD_ADDR_VAR 0 16
38398: PUSH
38399: LD_VAR 0 21
38403: PUSH
38404: LD_VAR 0 3
38408: ARRAY
38409: PPUSH
38410: CALL_OW 250
38414: ST_TO_ADDR
// y = GetY ( attacking_vehicles [ temp_value ] ) ;
38415: LD_ADDR_VAR 0 17
38419: PUSH
38420: LD_VAR 0 21
38424: PUSH
38425: LD_VAR 0 3
38429: ARRAY
38430: PPUSH
38431: CALL_OW 251
38435: ST_TO_ADDR
// if temp_value > 1 then
38436: LD_VAR 0 3
38440: PUSH
38441: LD_INT 1
38443: GREATER
38444: IFFALSE 38508
// begin k = AI_GetTurnDirection ( GetX ( attacking_vehicles [ temp_value - 1 ] ) , GetY ( attacking_vehicles [ temp_value - 1 ] ) , x , y ) ;
38446: LD_ADDR_VAR 0 8
38450: PUSH
38451: LD_VAR 0 21
38455: PUSH
38456: LD_VAR 0 3
38460: PUSH
38461: LD_INT 1
38463: MINUS
38464: ARRAY
38465: PPUSH
38466: CALL_OW 250
38470: PPUSH
38471: LD_VAR 0 21
38475: PUSH
38476: LD_VAR 0 3
38480: PUSH
38481: LD_INT 1
38483: MINUS
38484: ARRAY
38485: PPUSH
38486: CALL_OW 251
38490: PPUSH
38491: LD_VAR 0 16
38495: PPUSH
38496: LD_VAR 0 17
38500: PPUSH
38501: CALL 13936 0 4
38505: ST_TO_ADDR
// end else
38506: GO 38534
// k = AI_InvertDirection ( GetDir ( attacking_vehicles [ temp_value ] ) ) ;
38508: LD_ADDR_VAR 0 8
38512: PUSH
38513: LD_VAR 0 21
38517: PUSH
38518: LD_VAR 0 3
38522: ARRAY
38523: PPUSH
38524: CALL_OW 254
38528: PPUSH
38529: CALL 39847 0 1
38533: ST_TO_ADDR
// k = k - 1 ;
38534: LD_ADDR_VAR 0 8
38538: PUSH
38539: LD_VAR 0 8
38543: PUSH
38544: LD_INT 1
38546: MINUS
38547: ST_TO_ADDR
// if k = - 1 then
38548: LD_VAR 0 8
38552: PUSH
38553: LD_INT 1
38555: NEG
38556: EQUAL
38557: IFFALSE 38567
// k = 5 ;
38559: LD_ADDR_VAR 0 8
38563: PUSH
38564: LD_INT 5
38566: ST_TO_ADDR
// temp_list_3 = [ ] ;
38567: LD_ADDR_VAR 0 11
38571: PUSH
38572: EMPTY
38573: ST_TO_ADDR
// for val = 1 to 3 do
38574: LD_ADDR_VAR 0 20
38578: PUSH
38579: DOUBLE
38580: LD_INT 1
38582: DEC
38583: ST_TO_ADDR
38584: LD_INT 3
38586: PUSH
38587: FOR_TO
38588: IFFALSE 38726
// begin temp_list_2 = [ ] ;
38590: LD_ADDR_VAR 0 7
38594: PUSH
38595: EMPTY
38596: ST_TO_ADDR
// temp_list_2 = Insert ( temp_list_2 , 1 , ShiftX ( x , k , 4 ) ) ;
38597: LD_ADDR_VAR 0 7
38601: PUSH
38602: LD_VAR 0 7
38606: PPUSH
38607: LD_INT 1
38609: PPUSH
38610: LD_VAR 0 16
38614: PPUSH
38615: LD_VAR 0 8
38619: PPUSH
38620: LD_INT 4
38622: PPUSH
38623: CALL_OW 272
38627: PPUSH
38628: CALL_OW 2
38632: ST_TO_ADDR
// temp_list_2 = Insert ( temp_list_2 , 2 , ShiftY ( y , k , 4 ) ) ;
38633: LD_ADDR_VAR 0 7
38637: PUSH
38638: LD_VAR 0 7
38642: PPUSH
38643: LD_INT 2
38645: PPUSH
38646: LD_VAR 0 17
38650: PPUSH
38651: LD_VAR 0 8
38655: PPUSH
38656: LD_INT 4
38658: PPUSH
38659: CALL_OW 273
38663: PPUSH
38664: CALL_OW 2
38668: ST_TO_ADDR
// temp_list_3 = Insert ( temp_list_3 , 1 , temp_list_2 ) ;
38669: LD_ADDR_VAR 0 11
38673: PUSH
38674: LD_VAR 0 11
38678: PPUSH
38679: LD_INT 1
38681: PPUSH
38682: LD_VAR 0 7
38686: PPUSH
38687: CALL_OW 2
38691: ST_TO_ADDR
// k = k + 1 ;
38692: LD_ADDR_VAR 0 8
38696: PUSH
38697: LD_VAR 0 8
38701: PUSH
38702: LD_INT 1
38704: PLUS
38705: ST_TO_ADDR
// if k = 6 then
38706: LD_VAR 0 8
38710: PUSH
38711: LD_INT 6
38713: EQUAL
38714: IFFALSE 38724
// k = 0 ;
38716: LD_ADDR_VAR 0 8
38720: PUSH
38721: LD_INT 0
38723: ST_TO_ADDR
// end ;
38724: GO 38587
38726: POP
38727: POP
// temp_list_2 = [ ] ;
38728: LD_ADDR_VAR 0 7
38732: PUSH
38733: EMPTY
38734: ST_TO_ADDR
// for val in temp_list_3 do
38735: LD_ADDR_VAR 0 20
38739: PUSH
38740: LD_VAR 0 11
38744: PUSH
38745: FOR_IN
38746: IFFALSE 38789
// temp_list_2 = temp_list_2 ^ GetDistUnitXY ( i , val [ 1 ] , val [ 2 ] ) ;
38748: LD_ADDR_VAR 0 7
38752: PUSH
38753: LD_VAR 0 7
38757: PUSH
38758: LD_VAR 0 2
38762: PPUSH
38763: LD_VAR 0 20
38767: PUSH
38768: LD_INT 1
38770: ARRAY
38771: PPUSH
38772: LD_VAR 0 20
38776: PUSH
38777: LD_INT 2
38779: ARRAY
38780: PPUSH
38781: CALL_OW 297
38785: ADD
38786: ST_TO_ADDR
38787: GO 38745
38789: POP
38790: POP
// temp_list_3 = WorstFromListByList ( temp_list_3 , temp_list_2 ) ;
38791: LD_ADDR_VAR 0 11
38795: PUSH
38796: LD_VAR 0 11
38800: PPUSH
38801: LD_VAR 0 7
38805: PPUSH
38806: CALL_OW 78
38810: ST_TO_ADDR
// ComMoveXY ( i , temp_list_3 [ 1 ] , temp_list_3 [ 2 ] ) ;
38811: LD_VAR 0 2
38815: PPUSH
38816: LD_VAR 0 11
38820: PUSH
38821: LD_INT 1
38823: ARRAY
38824: PPUSH
38825: LD_VAR 0 11
38829: PUSH
38830: LD_INT 2
38832: ARRAY
38833: PPUSH
38834: CALL_OW 111
// end ; end else
38838: GO 39122
// begin if i in attacking_vehicles then
38840: LD_VAR 0 2
38844: PUSH
38845: LD_VAR 0 21
38849: IN
38850: IFFALSE 38988
// begin if GetDistUnitXY ( i , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) > vehicle_dist then
38852: LD_VAR 0 2
38856: PPUSH
38857: LD_VAR 0 10
38861: PUSH
38862: LD_EXP 74
38866: PUSH
38867: LD_VAR 0 4
38871: ARRAY
38872: PUSH
38873: LD_VAR 0 2
38877: ARRAY
38878: ARRAY
38879: PUSH
38880: LD_INT 1
38882: ARRAY
38883: PPUSH
38884: LD_VAR 0 10
38888: PUSH
38889: LD_EXP 74
38893: PUSH
38894: LD_VAR 0 4
38898: ARRAY
38899: PUSH
38900: LD_VAR 0 2
38904: ARRAY
38905: ARRAY
38906: PUSH
38907: LD_INT 2
38909: ARRAY
38910: PPUSH
38911: CALL_OW 297
38915: PUSH
38916: LD_VAR 0 25
38920: GREATER
38921: IFFALSE 38986
// ComAgressiveMove ( i , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , vehicle_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) ;
38923: LD_VAR 0 2
38927: PPUSH
38928: LD_VAR 0 10
38932: PUSH
38933: LD_EXP 74
38937: PUSH
38938: LD_VAR 0 4
38942: ARRAY
38943: PUSH
38944: LD_VAR 0 2
38948: ARRAY
38949: ARRAY
38950: PUSH
38951: LD_INT 1
38953: ARRAY
38954: PPUSH
38955: LD_VAR 0 10
38959: PUSH
38960: LD_EXP 74
38964: PUSH
38965: LD_VAR 0 4
38969: ARRAY
38970: PUSH
38971: LD_VAR 0 2
38975: ARRAY
38976: ARRAY
38977: PUSH
38978: LD_INT 2
38980: ARRAY
38981: PPUSH
38982: CALL_OW 114
// end else
38986: GO 39122
// if GetDistUnitXY ( i , human_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , human_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) > human_dist then
38988: LD_VAR 0 2
38992: PPUSH
38993: LD_VAR 0 9
38997: PUSH
38998: LD_EXP 74
39002: PUSH
39003: LD_VAR 0 4
39007: ARRAY
39008: PUSH
39009: LD_VAR 0 2
39013: ARRAY
39014: ARRAY
39015: PUSH
39016: LD_INT 1
39018: ARRAY
39019: PPUSH
39020: LD_VAR 0 9
39024: PUSH
39025: LD_EXP 74
39029: PUSH
39030: LD_VAR 0 4
39034: ARRAY
39035: PUSH
39036: LD_VAR 0 2
39040: ARRAY
39041: ARRAY
39042: PUSH
39043: LD_INT 2
39045: ARRAY
39046: PPUSH
39047: CALL_OW 297
39051: PUSH
39052: LD_VAR 0 24
39056: GREATER
39057: IFFALSE 39122
// ComAgressiveMove ( i , human_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , human_attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) ;
39059: LD_VAR 0 2
39063: PPUSH
39064: LD_VAR 0 9
39068: PUSH
39069: LD_EXP 74
39073: PUSH
39074: LD_VAR 0 4
39078: ARRAY
39079: PUSH
39080: LD_VAR 0 2
39084: ARRAY
39085: ARRAY
39086: PUSH
39087: LD_INT 1
39089: ARRAY
39090: PPUSH
39091: LD_VAR 0 9
39095: PUSH
39096: LD_EXP 74
39100: PUSH
39101: LD_VAR 0 4
39105: ARRAY
39106: PUSH
39107: LD_VAR 0 2
39111: ARRAY
39112: ARRAY
39113: PUSH
39114: LD_INT 2
39116: ARRAY
39117: PPUSH
39118: CALL_OW 114
// end ; end ; end ; end ; end ;
39122: GO 36517
39124: POP
39125: POP
// end ;
39126: GO 33332
39128: POP
39129: POP
// until false ;
39130: LD_INT 0
39132: IFFALSE 33315
// end ;
39134: PPOPN 31
39136: END
// function FindNonhumansNearUnit ( side , un , dist , only_dangerous ) ; var weapon_list , temp_list , i , btype , b , val ; begin
39137: LD_INT 0
39139: PPUSH
39140: PPUSH
39141: PPUSH
39142: PPUSH
39143: PPUSH
39144: PPUSH
39145: PPUSH
// temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_not , [ f_type , unit_human ] ] , [ f_dist , un , dist ] , [ f_see , side ] ] ) ;
39146: LD_ADDR_VAR 0 7
39150: PUSH
39151: LD_INT 81
39153: PUSH
39154: LD_VAR 0 1
39158: PUSH
39159: EMPTY
39160: LIST
39161: LIST
39162: PUSH
39163: LD_INT 3
39165: PUSH
39166: LD_INT 21
39168: PUSH
39169: LD_INT 1
39171: PUSH
39172: EMPTY
39173: LIST
39174: LIST
39175: PUSH
39176: EMPTY
39177: LIST
39178: LIST
39179: PUSH
39180: LD_INT 91
39182: PUSH
39183: LD_VAR 0 2
39187: PUSH
39188: LD_VAR 0 3
39192: PUSH
39193: EMPTY
39194: LIST
39195: LIST
39196: LIST
39197: PUSH
39198: LD_INT 101
39200: PUSH
39201: LD_VAR 0 1
39205: PUSH
39206: EMPTY
39207: LIST
39208: LIST
39209: PUSH
39210: EMPTY
39211: LIST
39212: LIST
39213: LIST
39214: LIST
39215: PPUSH
39216: CALL_OW 69
39220: ST_TO_ADDR
// if only_dangerous then
39221: LD_VAR 0 4
39225: IFFALSE 39244
// begin result = DangerousUnits ( temp_list ) ;
39227: LD_ADDR_VAR 0 5
39231: PUSH
39232: LD_VAR 0 7
39236: PPUSH
39237: CALL 39259 0 1
39241: ST_TO_ADDR
// end else
39242: GO 39254
// result = temp_list end ;
39244: LD_ADDR_VAR 0 5
39248: PUSH
39249: LD_VAR 0 7
39253: ST_TO_ADDR
39254: LD_VAR 0 5
39258: RET
// function DangerousUnits ( list ) ; var weapon_list , i , btype , b , val ; begin
39259: LD_INT 0
39261: PPUSH
39262: PPUSH
39263: PPUSH
39264: PPUSH
39265: PPUSH
39266: 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 ] ;
39267: LD_ADDR_VAR 0 3
39271: PUSH
39272: LD_INT 2
39274: PUSH
39275: LD_INT 3
39277: PUSH
39278: LD_INT 4
39280: PUSH
39281: LD_INT 5
39283: PUSH
39284: LD_INT 6
39286: PUSH
39287: LD_INT 7
39289: PUSH
39290: LD_INT 8
39292: PUSH
39293: LD_INT 9
39295: PUSH
39296: LD_INT 10
39298: PUSH
39299: LD_INT 22
39301: PUSH
39302: LD_INT 23
39304: PUSH
39305: LD_INT 24
39307: PUSH
39308: LD_INT 25
39310: PUSH
39311: LD_INT 26
39313: PUSH
39314: LD_INT 27
39316: PUSH
39317: LD_INT 28
39319: PUSH
39320: LD_INT 29
39322: PUSH
39323: LD_INT 42
39325: PUSH
39326: LD_INT 43
39328: PUSH
39329: LD_INT 44
39331: PUSH
39332: LD_INT 45
39334: PUSH
39335: LD_INT 46
39337: PUSH
39338: LD_INT 47
39340: PUSH
39341: LD_INT 48
39343: PUSH
39344: LD_INT 49
39346: PUSH
39347: EMPTY
39348: LIST
39349: LIST
39350: LIST
39351: LIST
39352: LIST
39353: LIST
39354: LIST
39355: LIST
39356: LIST
39357: LIST
39358: LIST
39359: LIST
39360: LIST
39361: LIST
39362: LIST
39363: LIST
39364: LIST
39365: LIST
39366: LIST
39367: LIST
39368: LIST
39369: LIST
39370: LIST
39371: LIST
39372: LIST
39373: ST_TO_ADDR
// result = [ ] ;
39374: LD_ADDR_VAR 0 2
39378: PUSH
39379: EMPTY
39380: ST_TO_ADDR
// for i in list do
39381: LD_ADDR_VAR 0 4
39385: PUSH
39386: LD_VAR 0 1
39390: PUSH
39391: FOR_IN
39392: IFFALSE 39840
// case GetType ( i ) of unit_human :
39394: LD_VAR 0 4
39398: PPUSH
39399: CALL_OW 247
39403: PUSH
39404: LD_INT 1
39406: DOUBLE
39407: EQUAL
39408: IFTRUE 39412
39410: GO 39445
39412: POP
// begin if not IsOk ( i ) then
39413: LD_VAR 0 4
39417: PPUSH
39418: CALL_OW 302
39422: NOT
39423: IFFALSE 39427
// continue ;
39425: GO 39391
// result = result ^ i ;
39427: LD_ADDR_VAR 0 2
39431: PUSH
39432: LD_VAR 0 2
39436: PUSH
39437: LD_VAR 0 4
39441: ADD
39442: ST_TO_ADDR
// end ; unit_vehicle :
39443: GO 39838
39445: LD_INT 2
39447: DOUBLE
39448: EQUAL
39449: IFTRUE 39453
39451: GO 39593
39453: POP
// begin if not IsOk ( i ) then
39454: LD_VAR 0 4
39458: PPUSH
39459: CALL_OW 302
39463: NOT
39464: IFFALSE 39468
// continue ;
39466: GO 39391
// case GetControl ( i ) of control_manual , control_rider :
39468: LD_VAR 0 4
39472: PPUSH
39473: CALL_OW 263
39477: PUSH
39478: LD_INT 1
39480: DOUBLE
39481: EQUAL
39482: IFTRUE 39492
39484: LD_INT 4
39486: DOUBLE
39487: EQUAL
39488: IFTRUE 39492
39490: GO 39512
39492: POP
// begin if UnitsInside ( i ) = 0 then
39493: LD_VAR 0 4
39497: PPUSH
39498: CALL_OW 313
39502: PUSH
39503: LD_INT 0
39505: EQUAL
39506: IFFALSE 39510
// continue ;
39508: GO 39391
// end ; control_remote :
39510: GO 39558
39512: LD_INT 2
39514: DOUBLE
39515: EQUAL
39516: IFTRUE 39520
39518: GO 39540
39520: POP
// begin if IsControledBy ( i ) = 0 then
39521: LD_VAR 0 4
39525: PPUSH
39526: CALL_OW 312
39530: PUSH
39531: LD_INT 0
39533: EQUAL
39534: IFFALSE 39538
// continue ;
39536: GO 39391
// end ; control_computer , control_apeman :
39538: GO 39558
39540: LD_INT 3
39542: DOUBLE
39543: EQUAL
39544: IFTRUE 39554
39546: LD_INT 5
39548: DOUBLE
39549: EQUAL
39550: IFTRUE 39554
39552: GO 39557
39554: POP
// begin end ; end ;
39555: GO 39558
39557: POP
// if GetWeapon ( i ) in weapon_list then
39558: LD_VAR 0 4
39562: PPUSH
39563: CALL_OW 264
39567: PUSH
39568: LD_VAR 0 3
39572: IN
39573: IFFALSE 39591
// result = result ^ i ;
39575: LD_ADDR_VAR 0 2
39579: PUSH
39580: LD_VAR 0 2
39584: PUSH
39585: LD_VAR 0 4
39589: ADD
39590: ST_TO_ADDR
// end ; unit_building :
39591: GO 39838
39593: LD_INT 3
39595: DOUBLE
39596: EQUAL
39597: IFTRUE 39601
39599: GO 39837
39601: POP
// begin if not IsOk ( i ) then
39602: LD_VAR 0 4
39606: PPUSH
39607: CALL_OW 302
39611: NOT
39612: IFFALSE 39616
// continue ;
39614: GO 39391
// btype = GetBType ( i ) ;
39616: LD_ADDR_VAR 0 5
39620: PUSH
39621: LD_VAR 0 4
39625: PPUSH
39626: CALL_OW 266
39630: ST_TO_ADDR
// case btype of b_turret :
39631: LD_VAR 0 5
39635: PUSH
39636: LD_INT 33
39638: DOUBLE
39639: EQUAL
39640: IFTRUE 39644
39642: GO 39647
39644: POP
// begin end ; b_bunker , b_breastwork , b_armoury , b_barracks , b_fort :
39645: GO 39702
39647: LD_INT 32
39649: DOUBLE
39650: EQUAL
39651: IFTRUE 39679
39653: LD_INT 31
39655: DOUBLE
39656: EQUAL
39657: IFTRUE 39679
39659: LD_INT 4
39661: DOUBLE
39662: EQUAL
39663: IFTRUE 39679
39665: LD_INT 5
39667: DOUBLE
39668: EQUAL
39669: IFTRUE 39679
39671: LD_INT 35
39673: DOUBLE
39674: EQUAL
39675: IFTRUE 39679
39677: GO 39699
39679: POP
// begin if UnitsInside ( i ) = 0 then
39680: LD_VAR 0 4
39684: PPUSH
39685: CALL_OW 313
39689: PUSH
39690: LD_INT 0
39692: EQUAL
39693: IFFALSE 39697
// continue ;
39695: GO 39391
// end ; else
39697: GO 39702
39699: POP
// continue ; end ;
39700: GO 39391
// if btype in [ b_bunker , b_turret ] then
39702: LD_VAR 0 5
39706: PUSH
39707: LD_INT 32
39709: PUSH
39710: LD_INT 33
39712: PUSH
39713: EMPTY
39714: LIST
39715: LIST
39716: IN
39717: IFFALSE 39819
// if not GetBWeapon ( i ) in weapon_list then
39719: LD_VAR 0 4
39723: PPUSH
39724: CALL_OW 269
39728: PUSH
39729: LD_VAR 0 3
39733: IN
39734: NOT
39735: IFFALSE 39741
// continue else
39737: GO 39391
39739: GO 39819
// begin b = GetBase ( i ) ;
39741: LD_ADDR_VAR 0 6
39745: PUSH
39746: LD_VAR 0 4
39750: PPUSH
39751: CALL_OW 274
39755: ST_TO_ADDR
// val = false ;
39756: LD_ADDR_VAR 0 7
39760: PUSH
39761: LD_INT 0
39763: ST_TO_ADDR
// if b = 0 then
39764: LD_VAR 0 6
39768: PUSH
39769: LD_INT 0
39771: EQUAL
39772: IFFALSE 39784
// val = true else
39774: LD_ADDR_VAR 0 7
39778: PUSH
39779: LD_INT 1
39781: ST_TO_ADDR
39782: GO 39811
// if GetEnergy ( b ) [ 4 ] = 0 then
39784: LD_VAR 0 6
39788: PPUSH
39789: CALL_OW 278
39793: PUSH
39794: LD_INT 4
39796: ARRAY
39797: PUSH
39798: LD_INT 0
39800: EQUAL
39801: IFFALSE 39811
// val = true ;
39803: LD_ADDR_VAR 0 7
39807: PUSH
39808: LD_INT 1
39810: ST_TO_ADDR
// if val then
39811: LD_VAR 0 7
39815: IFFALSE 39819
// continue ;
39817: GO 39391
// end ; result = result ^ i ;
39819: LD_ADDR_VAR 0 2
39823: PUSH
39824: LD_VAR 0 2
39828: PUSH
39829: LD_VAR 0 4
39833: ADD
39834: ST_TO_ADDR
// end ; end ;
39835: GO 39838
39837: POP
39838: GO 39391
39840: POP
39841: POP
// end ;
39842: LD_VAR 0 2
39846: RET
// function AI_InvertDirection ( direction ) ; var dir ; begin
39847: LD_INT 0
39849: PPUSH
39850: PPUSH
// dir = direction - 3 ;
39851: LD_ADDR_VAR 0 3
39855: PUSH
39856: LD_VAR 0 1
39860: PUSH
39861: LD_INT 3
39863: MINUS
39864: ST_TO_ADDR
// if dir < 0 then
39865: LD_VAR 0 3
39869: PUSH
39870: LD_INT 0
39872: LESS
39873: IFFALSE 39889
// dir = dir + 6 ;
39875: LD_ADDR_VAR 0 3
39879: PUSH
39880: LD_VAR 0 3
39884: PUSH
39885: LD_INT 6
39887: PLUS
39888: ST_TO_ADDR
// result = dir ;
39889: LD_ADDR_VAR 0 2
39893: PUSH
39894: LD_VAR 0 3
39898: ST_TO_ADDR
// end ;
39899: LD_VAR 0 2
39903: RET
// export function AI_GetTurnDirection ( x1 , y1 , x , y ) ; var dist_1 , dist_2 , b , temp_dist , dir ; begin
39904: LD_INT 0
39906: PPUSH
39907: PPUSH
39908: PPUSH
39909: PPUSH
39910: PPUSH
39911: PPUSH
// if not ValidHex ( x1 , y1 ) or not ValidHex ( x , y ) then
39912: LD_VAR 0 1
39916: PPUSH
39917: LD_VAR 0 2
39921: PPUSH
39922: CALL_OW 488
39926: NOT
39927: PUSH
39928: LD_VAR 0 3
39932: PPUSH
39933: LD_VAR 0 4
39937: PPUSH
39938: CALL_OW 488
39942: NOT
39943: OR
39944: IFFALSE 39957
// begin result = - 1 ;
39946: LD_ADDR_VAR 0 5
39950: PUSH
39951: LD_INT 1
39953: NEG
39954: ST_TO_ADDR
// exit ;
39955: GO 40117
// end ; dist_1 = GetDistXY ( x1 , y1 , x , y ) ;
39957: LD_ADDR_VAR 0 6
39961: PUSH
39962: LD_VAR 0 1
39966: PPUSH
39967: LD_VAR 0 2
39971: PPUSH
39972: LD_VAR 0 3
39976: PPUSH
39977: LD_VAR 0 4
39981: PPUSH
39982: CALL_OW 298
39986: ST_TO_ADDR
// dist_2 = 99999 ;
39987: LD_ADDR_VAR 0 7
39991: PUSH
39992: LD_INT 99999
39994: ST_TO_ADDR
// for b = 0 to 5 do
39995: LD_ADDR_VAR 0 8
39999: PUSH
40000: DOUBLE
40001: LD_INT 0
40003: DEC
40004: ST_TO_ADDR
40005: LD_INT 5
40007: PUSH
40008: FOR_TO
40009: IFFALSE 40105
// begin temp_dist = GetDistXY ( ShiftX ( x1 , b , dist_1 ) , ShiftY ( y1 , b , dist_1 ) , x , y ) ;
40011: LD_ADDR_VAR 0 9
40015: PUSH
40016: LD_VAR 0 1
40020: PPUSH
40021: LD_VAR 0 8
40025: PPUSH
40026: LD_VAR 0 6
40030: PPUSH
40031: CALL_OW 272
40035: PPUSH
40036: LD_VAR 0 2
40040: PPUSH
40041: LD_VAR 0 8
40045: PPUSH
40046: LD_VAR 0 6
40050: PPUSH
40051: CALL_OW 273
40055: PPUSH
40056: LD_VAR 0 3
40060: PPUSH
40061: LD_VAR 0 4
40065: PPUSH
40066: CALL_OW 298
40070: ST_TO_ADDR
// if temp_dist < dist_2 then
40071: LD_VAR 0 9
40075: PUSH
40076: LD_VAR 0 7
40080: LESS
40081: IFFALSE 40103
// begin dist_2 = temp_dist ;
40083: LD_ADDR_VAR 0 7
40087: PUSH
40088: LD_VAR 0 9
40092: ST_TO_ADDR
// dir = b ;
40093: LD_ADDR_VAR 0 10
40097: PUSH
40098: LD_VAR 0 8
40102: ST_TO_ADDR
// end ; end ;
40103: GO 40008
40105: POP
40106: POP
// result = dir ;
40107: LD_ADDR_VAR 0 5
40111: PUSH
40112: LD_VAR 0 10
40116: ST_TO_ADDR
// end ;
40117: LD_VAR 0 5
40121: RET
// function CalculateVehicleNotReadyHex ( hex , veh , attacking_vehicles ) ; var x , num ; begin
40122: LD_INT 0
40124: PPUSH
40125: PPUSH
40126: PPUSH
// for num = 1 to attacking_vehicles do
40127: LD_ADDR_VAR 0 6
40131: PUSH
40132: DOUBLE
40133: LD_INT 1
40135: DEC
40136: ST_TO_ADDR
40137: LD_VAR 0 3
40141: PUSH
40142: FOR_TO
40143: IFFALSE 40167
// if attacking_vehicles [ num ] = veh then
40145: LD_VAR 0 3
40149: PUSH
40150: LD_VAR 0 6
40154: ARRAY
40155: PUSH
40156: LD_VAR 0 2
40160: EQUAL
40161: IFFALSE 40165
// break ;
40163: GO 40167
40165: GO 40142
40167: POP
40168: POP
// x = ShiftX ( hex [ 1 ] , 1 , 5 * ( attacking_vehicles - num ) ) ;
40169: LD_ADDR_VAR 0 5
40173: PUSH
40174: LD_VAR 0 1
40178: PUSH
40179: LD_INT 1
40181: ARRAY
40182: PPUSH
40183: LD_INT 1
40185: PPUSH
40186: LD_INT 5
40188: PUSH
40189: LD_VAR 0 3
40193: PUSH
40194: LD_VAR 0 6
40198: MINUS
40199: MUL
40200: PPUSH
40201: CALL_OW 272
40205: ST_TO_ADDR
// result = Replace ( hex , 1 , x ) ;
40206: LD_ADDR_VAR 0 4
40210: PUSH
40211: LD_VAR 0 1
40215: PPUSH
40216: LD_INT 1
40218: PPUSH
40219: LD_VAR 0 5
40223: PPUSH
40224: CALL_OW 1
40228: ST_TO_ADDR
// end ;
40229: LD_VAR 0 4
40233: RET
// every 0 0$1 + 0 0$0.1 do var i , k , temp_list , un1 , temp_list_2 , temp_value , val ; var side , base , attack_hexes ;
40234: GO 40236
40236: DISABLE
40237: LD_INT 0
40239: PPUSH
40240: PPUSH
40241: PPUSH
40242: PPUSH
40243: PPUSH
40244: PPUSH
40245: PPUSH
40246: PPUSH
40247: PPUSH
40248: PPUSH
// begin side = russians ;
40249: LD_ADDR_VAR 0 8
40253: PUSH
40254: LD_EXP 3
40258: ST_TO_ADDR
// base = 3 ;
40259: LD_ADDR_VAR 0 9
40263: PUSH
40264: LD_INT 3
40266: ST_TO_ADDR
// attack_hexes = [ [ 41 , 65 ] , [ 25 , 46 ] , [ 26 , 24 ] , [ 41 , 21 ] , [ 53 , 17 ] , [ 60 , 27 ] , [ 53 , 17 ] ] ;
40267: LD_ADDR_VAR 0 10
40271: PUSH
40272: LD_INT 41
40274: PUSH
40275: LD_INT 65
40277: PUSH
40278: EMPTY
40279: LIST
40280: LIST
40281: PUSH
40282: LD_INT 25
40284: PUSH
40285: LD_INT 46
40287: PUSH
40288: EMPTY
40289: LIST
40290: LIST
40291: PUSH
40292: LD_INT 26
40294: PUSH
40295: LD_INT 24
40297: PUSH
40298: EMPTY
40299: LIST
40300: LIST
40301: PUSH
40302: LD_INT 41
40304: PUSH
40305: LD_INT 21
40307: PUSH
40308: EMPTY
40309: LIST
40310: LIST
40311: PUSH
40312: LD_INT 53
40314: PUSH
40315: LD_INT 17
40317: PUSH
40318: EMPTY
40319: LIST
40320: LIST
40321: PUSH
40322: LD_INT 60
40324: PUSH
40325: LD_INT 27
40327: PUSH
40328: EMPTY
40329: LIST
40330: LIST
40331: PUSH
40332: LD_INT 53
40334: PUSH
40335: LD_INT 17
40337: PUSH
40338: EMPTY
40339: LIST
40340: LIST
40341: PUSH
40342: EMPTY
40343: LIST
40344: LIST
40345: LIST
40346: LIST
40347: LIST
40348: LIST
40349: LIST
40350: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
40351: LD_INT 35
40353: PPUSH
40354: CALL_OW 67
// special_russian_attackers = UnitFilter ( special_russian_attackers , [ f_alive ] ) ;
40358: LD_ADDR_EXP 84
40362: PUSH
40363: LD_EXP 84
40367: PPUSH
40368: LD_INT 51
40370: PUSH
40371: EMPTY
40372: LIST
40373: PPUSH
40374: CALL_OW 72
40378: ST_TO_ADDR
// for i in special_russian_attackers do
40379: LD_ADDR_VAR 0 1
40383: PUSH
40384: LD_EXP 84
40388: PUSH
40389: FOR_IN
40390: IFFALSE 41060
// begin if GetClass ( i ) = class_bazooker then
40392: LD_VAR 0 1
40396: PPUSH
40397: CALL_OW 257
40401: PUSH
40402: LD_INT 9
40404: EQUAL
40405: IFFALSE 40754
// begin temp_list = GetTaskList ( i ) ;
40407: LD_ADDR_VAR 0 3
40411: PUSH
40412: LD_VAR 0 1
40416: PPUSH
40417: CALL_OW 437
40421: ST_TO_ADDR
// if temp_list > 0 then
40422: LD_VAR 0 3
40426: PUSH
40427: LD_INT 0
40429: GREATER
40430: IFFALSE 40452
// if temp_list [ 1 ] [ 1 ] = & then
40432: LD_VAR 0 3
40436: PUSH
40437: LD_INT 1
40439: ARRAY
40440: PUSH
40441: LD_INT 1
40443: ARRAY
40444: PUSH
40445: LD_STRING &
40447: EQUAL
40448: IFFALSE 40452
// continue ;
40450: GO 40389
// un1 = Attacks ( i ) ;
40452: LD_ADDR_VAR 0 4
40456: PUSH
40457: LD_VAR 0 1
40461: PPUSH
40462: CALL_OW 320
40466: ST_TO_ADDR
// if un1 > 0 and DangerousUnits ( [ un1 ] ) > 0 then
40467: LD_VAR 0 4
40471: PUSH
40472: LD_INT 0
40474: GREATER
40475: PUSH
40476: LD_VAR 0 4
40480: PUSH
40481: EMPTY
40482: LIST
40483: PPUSH
40484: CALL 39259 0 1
40488: PUSH
40489: LD_INT 0
40491: GREATER
40492: AND
40493: IFFALSE 40754
// begin temp_list_2 = [ GetX ( un1 ) , GetY ( un1 ) ] ;
40495: LD_ADDR_VAR 0 5
40499: PUSH
40500: LD_VAR 0 4
40504: PPUSH
40505: CALL_OW 250
40509: PUSH
40510: LD_VAR 0 4
40514: PPUSH
40515: CALL_OW 251
40519: PUSH
40520: EMPTY
40521: LIST
40522: LIST
40523: ST_TO_ADDR
// temp_value = false ;
40524: LD_ADDR_VAR 0 6
40528: PUSH
40529: LD_INT 0
40531: ST_TO_ADDR
// for val in ai_time_shift_hexes [ base ] ^ ai_time_shift_hexes_underway [ base ] do
40532: LD_ADDR_VAR 0 7
40536: PUSH
40537: LD_EXP 72
40541: PUSH
40542: LD_VAR 0 9
40546: ARRAY
40547: PUSH
40548: LD_EXP 73
40552: PUSH
40553: LD_VAR 0 9
40557: ARRAY
40558: ADD
40559: PUSH
40560: FOR_IN
40561: IFFALSE 40633
// if GetDistXY ( temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , val [ 1 ] , val [ 2 ] ) <= ai_time_shift_data [ side ] [ 2 ] then
40563: LD_VAR 0 5
40567: PUSH
40568: LD_INT 1
40570: ARRAY
40571: PPUSH
40572: LD_VAR 0 5
40576: PUSH
40577: LD_INT 2
40579: ARRAY
40580: PPUSH
40581: LD_VAR 0 7
40585: PUSH
40586: LD_INT 1
40588: ARRAY
40589: PPUSH
40590: LD_VAR 0 7
40594: PUSH
40595: LD_INT 2
40597: ARRAY
40598: PPUSH
40599: CALL_OW 298
40603: PUSH
40604: LD_EXP 71
40608: PUSH
40609: LD_VAR 0 8
40613: ARRAY
40614: PUSH
40615: LD_INT 2
40617: ARRAY
40618: LESSEQUAL
40619: IFFALSE 40631
// begin temp_value = true ;
40621: LD_ADDR_VAR 0 6
40625: PUSH
40626: LD_INT 1
40628: ST_TO_ADDR
// break ;
40629: GO 40633
// end ;
40631: GO 40560
40633: POP
40634: POP
// if not temp_value then
40635: LD_VAR 0 6
40639: NOT
40640: IFFALSE 40754
// begin ComTimeShift ( i , temp_list_2 [ 1 ] , temp_list_2 [ 2 ] ) ;
40642: LD_VAR 0 1
40646: PPUSH
40647: LD_VAR 0 5
40651: PUSH
40652: LD_INT 1
40654: ARRAY
40655: PPUSH
40656: LD_VAR 0 5
40660: PUSH
40661: LD_INT 2
40663: ARRAY
40664: PPUSH
40665: CALL_OW 154
// temp_list = Insert ( ai_time_shift_hexes_underway [ base ] , 1 , [ temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , i , tick ] ) ;
40669: LD_ADDR_VAR 0 3
40673: PUSH
40674: LD_EXP 73
40678: PUSH
40679: LD_VAR 0 9
40683: ARRAY
40684: PPUSH
40685: LD_INT 1
40687: PPUSH
40688: LD_VAR 0 5
40692: PUSH
40693: LD_INT 1
40695: ARRAY
40696: PUSH
40697: LD_VAR 0 5
40701: PUSH
40702: LD_INT 2
40704: ARRAY
40705: PUSH
40706: LD_VAR 0 1
40710: PUSH
40711: LD_OWVAR 1
40715: PUSH
40716: EMPTY
40717: LIST
40718: LIST
40719: LIST
40720: LIST
40721: PPUSH
40722: CALL_OW 2
40726: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
40727: LD_ADDR_EXP 73
40731: PUSH
40732: LD_EXP 73
40736: PPUSH
40737: LD_VAR 0 9
40741: PPUSH
40742: LD_VAR 0 3
40746: PPUSH
40747: CALL_OW 1
40751: ST_TO_ADDR
// continue ;
40752: GO 40389
// end ; end ; end ; k = ai_attacking_unit_hex_index [ base ] [ i ] ;
40754: LD_ADDR_VAR 0 2
40758: PUSH
40759: LD_EXP 74
40763: PUSH
40764: LD_VAR 0 9
40768: ARRAY
40769: PUSH
40770: LD_VAR 0 1
40774: ARRAY
40775: ST_TO_ADDR
// if GetDistUnitXY ( i , attack_hexes [ k ] [ 1 ] , attack_hexes [ k ] [ 2 ] ) > 1 then
40776: LD_VAR 0 1
40780: PPUSH
40781: LD_VAR 0 10
40785: PUSH
40786: LD_VAR 0 2
40790: ARRAY
40791: PUSH
40792: LD_INT 1
40794: ARRAY
40795: PPUSH
40796: LD_VAR 0 10
40800: PUSH
40801: LD_VAR 0 2
40805: ARRAY
40806: PUSH
40807: LD_INT 2
40809: ARRAY
40810: PPUSH
40811: CALL_OW 297
40815: PUSH
40816: LD_INT 1
40818: GREATER
40819: IFFALSE 40862
// ComAgressiveMove ( i , attack_hexes [ k ] [ 1 ] , attack_hexes [ k ] [ 2 ] ) else
40821: LD_VAR 0 1
40825: PPUSH
40826: LD_VAR 0 10
40830: PUSH
40831: LD_VAR 0 2
40835: ARRAY
40836: PUSH
40837: LD_INT 1
40839: ARRAY
40840: PPUSH
40841: LD_VAR 0 10
40845: PUSH
40846: LD_VAR 0 2
40850: ARRAY
40851: PUSH
40852: LD_INT 2
40854: ARRAY
40855: PPUSH
40856: CALL_OW 114
40860: GO 41058
// begin if k < attack_hexes - 1 then
40862: LD_VAR 0 2
40866: PUSH
40867: LD_VAR 0 10
40871: PUSH
40872: LD_INT 1
40874: MINUS
40875: LESS
40876: IFFALSE 40940
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , i , k + 1 ) ;
40878: LD_ADDR_VAR 0 3
40882: PUSH
40883: LD_EXP 74
40887: PUSH
40888: LD_VAR 0 9
40892: ARRAY
40893: PPUSH
40894: LD_VAR 0 1
40898: PPUSH
40899: LD_VAR 0 2
40903: PUSH
40904: LD_INT 1
40906: PLUS
40907: PPUSH
40908: CALL_OW 1
40912: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
40913: LD_ADDR_EXP 74
40917: PUSH
40918: LD_EXP 74
40922: PPUSH
40923: LD_VAR 0 9
40927: PPUSH
40928: LD_VAR 0 3
40932: PPUSH
40933: CALL_OW 1
40937: ST_TO_ADDR
// end else
40938: GO 41058
// begin if Rand ( 1 , 6 ) = 1 then
40940: LD_INT 1
40942: PPUSH
40943: LD_INT 6
40945: PPUSH
40946: CALL_OW 12
40950: PUSH
40951: LD_INT 1
40953: EQUAL
40954: IFFALSE 41058
// begin if k = attack_hexes - 1 then
40956: LD_VAR 0 2
40960: PUSH
40961: LD_VAR 0 10
40965: PUSH
40966: LD_INT 1
40968: MINUS
40969: EQUAL
40970: IFFALSE 40988
// k = attack_hexes + 0 else
40972: LD_ADDR_VAR 0 2
40976: PUSH
40977: LD_VAR 0 10
40981: PUSH
40982: LD_INT 0
40984: PLUS
40985: ST_TO_ADDR
40986: GO 41002
// k = attack_hexes - 1 ;
40988: LD_ADDR_VAR 0 2
40992: PUSH
40993: LD_VAR 0 10
40997: PUSH
40998: LD_INT 1
41000: MINUS
41001: ST_TO_ADDR
// temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , i , k ) ;
41002: LD_ADDR_VAR 0 3
41006: PUSH
41007: LD_EXP 74
41011: PUSH
41012: LD_VAR 0 9
41016: ARRAY
41017: PPUSH
41018: LD_VAR 0 1
41022: PPUSH
41023: LD_VAR 0 2
41027: PPUSH
41028: CALL_OW 1
41032: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
41033: LD_ADDR_EXP 74
41037: PUSH
41038: LD_EXP 74
41042: PPUSH
41043: LD_VAR 0 9
41047: PPUSH
41048: LD_VAR 0 3
41052: PPUSH
41053: CALL_OW 1
41057: ST_TO_ADDR
// end ; end ; end ; end ;
41058: GO 40389
41060: POP
41061: POP
// until false ;
41062: LD_INT 0
41064: IFFALSE 40351
// end ;
41066: PPOPN 10
41068: END
// every 0 0$1 do var base , side , val , temp_value , temp_list ;
41069: GO 41071
41071: DISABLE
41072: LD_INT 0
41074: PPUSH
41075: PPUSH
41076: PPUSH
41077: PPUSH
41078: PPUSH
// begin repeat wait ( 1 ) ;
41079: LD_INT 1
41081: PPUSH
41082: CALL_OW 67
// for base in ai_bases do
41086: LD_ADDR_VAR 0 1
41090: PUSH
41091: LD_EXP 58
41095: PUSH
41096: FOR_IN
41097: IFFALSE 41559
// begin if base in [ 1 , 2 ] then
41099: LD_VAR 0 1
41103: PUSH
41104: LD_INT 1
41106: PUSH
41107: LD_INT 2
41109: PUSH
41110: EMPTY
41111: LIST
41112: LIST
41113: IN
41114: IFFALSE 41118
// continue ;
41116: GO 41096
// side = GetBaseSide ( base ) ;
41118: LD_ADDR_VAR 0 2
41122: PUSH
41123: LD_VAR 0 1
41127: PPUSH
41128: CALL 11268 0 1
41132: ST_TO_ADDR
// val = 1 ;
41133: LD_ADDR_VAR 0 3
41137: PUSH
41138: LD_INT 1
41140: ST_TO_ADDR
// while val <= ai_time_shift_hexes_underway [ base ] do
41141: LD_VAR 0 3
41145: PUSH
41146: LD_EXP 73
41150: PUSH
41151: LD_VAR 0 1
41155: ARRAY
41156: LESSEQUAL
41157: IFFALSE 41557
// begin if tick = ai_time_shift_hexes_underway [ base ] [ val ] [ 4 ] then
41159: LD_OWVAR 1
41163: PUSH
41164: LD_EXP 73
41168: PUSH
41169: LD_VAR 0 1
41173: ARRAY
41174: PUSH
41175: LD_VAR 0 3
41179: ARRAY
41180: PUSH
41181: LD_INT 4
41183: ARRAY
41184: EQUAL
41185: IFFALSE 41203
// begin val = val + 1 ;
41187: LD_ADDR_VAR 0 3
41191: PUSH
41192: LD_VAR 0 3
41196: PUSH
41197: LD_INT 1
41199: PLUS
41200: ST_TO_ADDR
// continue ;
41201: GO 41141
// end ; temp_value = false ;
41203: LD_ADDR_VAR 0 4
41207: PUSH
41208: LD_INT 0
41210: ST_TO_ADDR
// temp_list = GetTaskList ( ai_time_shift_hexes_underway [ base ] [ val ] [ 3 ] ) ;
41211: LD_ADDR_VAR 0 5
41215: PUSH
41216: LD_EXP 73
41220: PUSH
41221: LD_VAR 0 1
41225: ARRAY
41226: PUSH
41227: LD_VAR 0 3
41231: ARRAY
41232: PUSH
41233: LD_INT 3
41235: ARRAY
41236: PPUSH
41237: CALL_OW 437
41241: ST_TO_ADDR
// if IsOk ( ai_time_shift_hexes_underway [ base ] [ val ] [ 3 ] ) then
41242: LD_EXP 73
41246: PUSH
41247: LD_VAR 0 1
41251: ARRAY
41252: PUSH
41253: LD_VAR 0 3
41257: ARRAY
41258: PUSH
41259: LD_INT 3
41261: ARRAY
41262: PPUSH
41263: CALL_OW 302
41267: IFFALSE 41318
// begin if temp_list = 0 then
41269: LD_VAR 0 5
41273: PUSH
41274: LD_INT 0
41276: EQUAL
41277: IFFALSE 41289
// temp_value = true else
41279: LD_ADDR_VAR 0 4
41283: PUSH
41284: LD_INT 1
41286: ST_TO_ADDR
41287: GO 41316
// if not temp_list [ 1 ] [ 1 ] = & then
41289: LD_VAR 0 5
41293: PUSH
41294: LD_INT 1
41296: ARRAY
41297: PUSH
41298: LD_INT 1
41300: ARRAY
41301: PUSH
41302: LD_STRING &
41304: EQUAL
41305: NOT
41306: IFFALSE 41316
// temp_value = true ;
41308: LD_ADDR_VAR 0 4
41312: PUSH
41313: LD_INT 1
41315: ST_TO_ADDR
// end else
41316: GO 41371
// begin temp_list = Delete ( ai_time_shift_hexes_underway [ base ] , val ) ;
41318: LD_ADDR_VAR 0 5
41322: PUSH
41323: LD_EXP 73
41327: PUSH
41328: LD_VAR 0 1
41332: ARRAY
41333: PPUSH
41334: LD_VAR 0 3
41338: PPUSH
41339: CALL_OW 3
41343: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
41344: LD_ADDR_EXP 73
41348: PUSH
41349: LD_EXP 73
41353: PPUSH
41354: LD_VAR 0 1
41358: PPUSH
41359: LD_VAR 0 5
41363: PPUSH
41364: CALL_OW 1
41368: ST_TO_ADDR
// continue ;
41369: GO 41141
// end ; if temp_value then
41371: LD_VAR 0 4
41375: IFFALSE 41541
// begin temp_list = Insert ( ai_time_shift_hexes [ base ] , 1 , [ ai_time_shift_hexes_underway [ base ] [ val ] [ 1 ] , ai_time_shift_hexes_underway [ base ] [ val ] [ 2 ] , ai_time_shift_data [ side ] [ 1 ] ] ) ;
41377: LD_ADDR_VAR 0 5
41381: PUSH
41382: LD_EXP 72
41386: PUSH
41387: LD_VAR 0 1
41391: ARRAY
41392: PPUSH
41393: LD_INT 1
41395: PPUSH
41396: LD_EXP 73
41400: PUSH
41401: LD_VAR 0 1
41405: ARRAY
41406: PUSH
41407: LD_VAR 0 3
41411: ARRAY
41412: PUSH
41413: LD_INT 1
41415: ARRAY
41416: PUSH
41417: LD_EXP 73
41421: PUSH
41422: LD_VAR 0 1
41426: ARRAY
41427: PUSH
41428: LD_VAR 0 3
41432: ARRAY
41433: PUSH
41434: LD_INT 2
41436: ARRAY
41437: PUSH
41438: LD_EXP 71
41442: PUSH
41443: LD_VAR 0 2
41447: ARRAY
41448: PUSH
41449: LD_INT 1
41451: ARRAY
41452: PUSH
41453: EMPTY
41454: LIST
41455: LIST
41456: LIST
41457: PPUSH
41458: CALL_OW 2
41462: ST_TO_ADDR
// ai_time_shift_hexes = Replace ( ai_time_shift_hexes , base , temp_list ) ;
41463: LD_ADDR_EXP 72
41467: PUSH
41468: LD_EXP 72
41472: PPUSH
41473: LD_VAR 0 1
41477: PPUSH
41478: LD_VAR 0 5
41482: PPUSH
41483: CALL_OW 1
41487: ST_TO_ADDR
// temp_list = Delete ( ai_time_shift_hexes_underway [ base ] , val ) ;
41488: LD_ADDR_VAR 0 5
41492: PUSH
41493: LD_EXP 73
41497: PUSH
41498: LD_VAR 0 1
41502: ARRAY
41503: PPUSH
41504: LD_VAR 0 3
41508: PPUSH
41509: CALL_OW 3
41513: ST_TO_ADDR
// ai_time_shift_hexes_underway = Replace ( ai_time_shift_hexes_underway , base , temp_list ) ;
41514: LD_ADDR_EXP 73
41518: PUSH
41519: LD_EXP 73
41523: PPUSH
41524: LD_VAR 0 1
41528: PPUSH
41529: LD_VAR 0 5
41533: PPUSH
41534: CALL_OW 1
41538: ST_TO_ADDR
// continue ;
41539: GO 41141
// end ; val = val + 1 ;
41541: LD_ADDR_VAR 0 3
41545: PUSH
41546: LD_VAR 0 3
41550: PUSH
41551: LD_INT 1
41553: PLUS
41554: ST_TO_ADDR
// end ;
41555: GO 41141
// end ;
41557: GO 41096
41559: POP
41560: POP
// until false ;
41561: LD_INT 0
41563: IFFALSE 41079
// end ;
41565: PPOPN 5
41567: END
// every 0 0$1 + 0 0$0.3 do var base , val , temp_list , time ;
41568: GO 41570
41570: DISABLE
41571: LD_INT 0
41573: PPUSH
41574: PPUSH
41575: PPUSH
41576: PPUSH
// begin repeat wait ( 0 0$1 ) ;
41577: LD_INT 35
41579: PPUSH
41580: CALL_OW 67
// for base in ai_bases do
41584: LD_ADDR_VAR 0 1
41588: PUSH
41589: LD_EXP 58
41593: PUSH
41594: FOR_IN
41595: IFFALSE 41846
// begin if base in [ 1 , 2 ] then
41597: LD_VAR 0 1
41601: PUSH
41602: LD_INT 1
41604: PUSH
41605: LD_INT 2
41607: PUSH
41608: EMPTY
41609: LIST
41610: LIST
41611: IN
41612: IFFALSE 41616
// continue ;
41614: GO 41594
// val = 1 ;
41616: LD_ADDR_VAR 0 2
41620: PUSH
41621: LD_INT 1
41623: ST_TO_ADDR
// while val <= ai_time_shift_hexes [ base ] do
41624: LD_VAR 0 2
41628: PUSH
41629: LD_EXP 72
41633: PUSH
41634: LD_VAR 0 1
41638: ARRAY
41639: LESSEQUAL
41640: IFFALSE 41844
// begin time = ai_time_shift_hexes [ base ] [ val ] [ 3 ] - 0 0$1 ;
41642: LD_ADDR_VAR 0 4
41646: PUSH
41647: LD_EXP 72
41651: PUSH
41652: LD_VAR 0 1
41656: ARRAY
41657: PUSH
41658: LD_VAR 0 2
41662: ARRAY
41663: PUSH
41664: LD_INT 3
41666: ARRAY
41667: PUSH
41668: LD_INT 35
41670: MINUS
41671: ST_TO_ADDR
// if time <= 0 0$0 then
41672: LD_VAR 0 4
41676: PUSH
41677: LD_INT 0
41679: LESSEQUAL
41680: IFFALSE 41737
// begin temp_list = Delete ( ai_time_shift_hexes [ base ] , val ) ;
41682: LD_ADDR_VAR 0 3
41686: PUSH
41687: LD_EXP 72
41691: PUSH
41692: LD_VAR 0 1
41696: ARRAY
41697: PPUSH
41698: LD_VAR 0 2
41702: PPUSH
41703: CALL_OW 3
41707: ST_TO_ADDR
// ai_time_shift_hexes = Replace ( ai_time_shift_hexes , base , temp_list ) ;
41708: LD_ADDR_EXP 72
41712: PUSH
41713: LD_EXP 72
41717: PPUSH
41718: LD_VAR 0 1
41722: PPUSH
41723: LD_VAR 0 3
41727: PPUSH
41728: CALL_OW 1
41732: ST_TO_ADDR
// continue ;
41733: GO 41624
// end else
41735: GO 41828
// begin temp_list = Replace ( ai_time_shift_hexes [ base ] [ val ] , 3 , time ) ;
41737: LD_ADDR_VAR 0 3
41741: PUSH
41742: LD_EXP 72
41746: PUSH
41747: LD_VAR 0 1
41751: ARRAY
41752: PUSH
41753: LD_VAR 0 2
41757: ARRAY
41758: PPUSH
41759: LD_INT 3
41761: PPUSH
41762: LD_VAR 0 4
41766: PPUSH
41767: CALL_OW 1
41771: ST_TO_ADDR
// temp_list = Replace ( ai_time_shift_hexes [ base ] , val , temp_list ) ;
41772: LD_ADDR_VAR 0 3
41776: PUSH
41777: LD_EXP 72
41781: PUSH
41782: LD_VAR 0 1
41786: ARRAY
41787: PPUSH
41788: LD_VAR 0 2
41792: PPUSH
41793: LD_VAR 0 3
41797: PPUSH
41798: CALL_OW 1
41802: ST_TO_ADDR
// ai_time_shift_hexes = Replace ( ai_time_shift_hexes , base , temp_list ) ;
41803: LD_ADDR_EXP 72
41807: PUSH
41808: LD_EXP 72
41812: PPUSH
41813: LD_VAR 0 1
41817: PPUSH
41818: LD_VAR 0 3
41822: PPUSH
41823: CALL_OW 1
41827: ST_TO_ADDR
// end ; val = val + 1 ;
41828: LD_ADDR_VAR 0 2
41832: PUSH
41833: LD_VAR 0 2
41837: PUSH
41838: LD_INT 1
41840: PLUS
41841: ST_TO_ADDR
// end ;
41842: GO 41624
// end ;
41844: GO 41594
41846: POP
41847: POP
// until false ;
41848: LD_INT 0
41850: IFFALSE 41577
// end ;
41852: PPOPN 4
41854: END
// every 0 0$5 do var base , i ;
41855: GO 41857
41857: DISABLE
41858: LD_INT 0
41860: PPUSH
41861: PPUSH
// begin for base in ai_bases do
41862: LD_ADDR_VAR 0 1
41866: PUSH
41867: LD_EXP 58
41871: PUSH
41872: FOR_IN
41873: IFFALSE 41970
// for i in ( ai_vehicles_attack [ base ] ^ ai_vehicles_defend [ base ] ^ ai_cargo_bay [ base ] ) diff 0 do
41875: LD_ADDR_VAR 0 2
41879: PUSH
41880: LD_EXP 40
41884: PUSH
41885: LD_VAR 0 1
41889: ARRAY
41890: PUSH
41891: LD_EXP 39
41895: PUSH
41896: LD_VAR 0 1
41900: ARRAY
41901: ADD
41902: PUSH
41903: LD_EXP 60
41907: PUSH
41908: LD_VAR 0 1
41912: ARRAY
41913: ADD
41914: PUSH
41915: LD_INT 0
41917: DIFF
41918: PUSH
41919: FOR_IN
41920: IFFALSE 41966
// if GetFuel ( i ) < 10 and GetEngine ( i ) = engine_combustion then
41922: LD_VAR 0 2
41926: PPUSH
41927: CALL_OW 261
41931: PUSH
41932: LD_INT 10
41934: LESS
41935: PUSH
41936: LD_VAR 0 2
41940: PPUSH
41941: CALL_OW 262
41945: PUSH
41946: LD_INT 1
41948: EQUAL
41949: AND
41950: IFFALSE 41964
// SetFuel ( i , 10 ) ;
41952: LD_VAR 0 2
41956: PPUSH
41957: LD_INT 10
41959: PPUSH
41960: CALL_OW 240
41964: GO 41919
41966: POP
41967: POP
41968: GO 41872
41970: POP
41971: POP
// enable ;
41972: ENABLE
// end ;
41973: PPOPN 2
41975: END
// every 0 0$1 do var side , i , scientists_list , temp_list , temp_unit , base , k , temp_list_3 , free_spaces , area ;
41976: GO 41978
41978: DISABLE
41979: LD_INT 0
41981: PPUSH
41982: PPUSH
41983: PPUSH
41984: PPUSH
41985: PPUSH
41986: PPUSH
41987: PPUSH
41988: PPUSH
41989: PPUSH
41990: PPUSH
// begin for base in ai_bases do
41991: LD_ADDR_VAR 0 6
41995: PUSH
41996: LD_EXP 58
42000: PUSH
42001: FOR_IN
42002: IFFALSE 42697
// begin side = GetBaseSide ( base ) ;
42004: LD_ADDR_VAR 0 1
42008: PUSH
42009: LD_VAR 0 6
42013: PPUSH
42014: CALL 11268 0 1
42018: ST_TO_ADDR
// scientists_list = ai_scientists [ base ] diff ai_heal_these_humans [ base ] ;
42019: LD_ADDR_VAR 0 3
42023: PUSH
42024: LD_EXP 32
42028: PUSH
42029: LD_VAR 0 6
42033: ARRAY
42034: PUSH
42035: LD_EXP 43
42039: PUSH
42040: LD_VAR 0 6
42044: ARRAY
42045: DIFF
42046: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
42047: LD_ADDR_VAR 0 4
42051: PUSH
42052: LD_EXP 43
42056: PUSH
42057: LD_VAR 0 6
42061: ARRAY
42062: ST_TO_ADDR
// i = 1 ;
42063: LD_ADDR_VAR 0 2
42067: PUSH
42068: LD_INT 1
42070: ST_TO_ADDR
// while i <= scientists_list do
42071: LD_VAR 0 2
42075: PUSH
42076: LD_VAR 0 3
42080: LESSEQUAL
42081: IFFALSE 42176
// begin if GetLives ( scientists_list [ i ] ) <= 700 then
42083: LD_VAR 0 3
42087: PUSH
42088: LD_VAR 0 2
42092: ARRAY
42093: PPUSH
42094: CALL_OW 256
42098: PUSH
42099: LD_INT 700
42101: LESSEQUAL
42102: IFFALSE 42160
// begin temp_list = temp_list ^ scientists_list [ i ] ;
42104: LD_ADDR_VAR 0 4
42108: PUSH
42109: LD_VAR 0 4
42113: PUSH
42114: LD_VAR 0 3
42118: PUSH
42119: LD_VAR 0 2
42123: ARRAY
42124: ADD
42125: ST_TO_ADDR
// scientists_list = Delete ( scientists_list , i ) ;
42126: LD_ADDR_VAR 0 3
42130: PUSH
42131: LD_VAR 0 3
42135: PPUSH
42136: LD_VAR 0 2
42140: PPUSH
42141: CALL_OW 3
42145: ST_TO_ADDR
// i = i - 1 ;
42146: LD_ADDR_VAR 0 2
42150: PUSH
42151: LD_VAR 0 2
42155: PUSH
42156: LD_INT 1
42158: MINUS
42159: ST_TO_ADDR
// end ; i = i + 1 ;
42160: LD_ADDR_VAR 0 2
42164: PUSH
42165: LD_VAR 0 2
42169: PUSH
42170: LD_INT 1
42172: PLUS
42173: ST_TO_ADDR
// end ;
42174: GO 42071
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
42176: LD_ADDR_EXP 43
42180: PUSH
42181: LD_EXP 43
42185: PPUSH
42186: LD_VAR 0 6
42190: PPUSH
42191: LD_VAR 0 4
42195: PPUSH
42196: CALL_OW 1
42200: ST_TO_ADDR
// temp_list = [ ] ;
42201: LD_ADDR_VAR 0 4
42205: PUSH
42206: EMPTY
42207: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
42208: LD_ADDR_VAR 0 2
42212: PUSH
42213: LD_EXP 43
42217: PUSH
42218: LD_VAR 0 6
42222: ARRAY
42223: PUSH
42224: FOR_IN
42225: IFFALSE 42275
// if GetLives ( i ) < 1000 and IsInUnit ( i ) = 0 then
42227: LD_VAR 0 2
42231: PPUSH
42232: CALL_OW 256
42236: PUSH
42237: LD_INT 1000
42239: LESS
42240: PUSH
42241: LD_VAR 0 2
42245: PPUSH
42246: CALL_OW 310
42250: PUSH
42251: LD_INT 0
42253: EQUAL
42254: AND
42255: IFFALSE 42273
// temp_list = temp_list ^ i ;
42257: LD_ADDR_VAR 0 4
42261: PUSH
42262: LD_VAR 0 4
42266: PUSH
42267: LD_VAR 0 2
42271: ADD
42272: ST_TO_ADDR
42273: GO 42224
42275: POP
42276: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
42277: LD_ADDR_EXP 43
42281: PUSH
42282: LD_EXP 43
42286: PPUSH
42287: LD_VAR 0 6
42291: PPUSH
42292: LD_VAR 0 4
42296: PPUSH
42297: CALL_OW 1
42301: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
42302: LD_ADDR_VAR 0 2
42306: PUSH
42307: LD_EXP 43
42311: PUSH
42312: LD_VAR 0 6
42316: ARRAY
42317: PUSH
42318: FOR_IN
42319: IFFALSE 42407
// if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
42321: LD_VAR 0 2
42325: PPUSH
42326: LD_EXP 41
42330: PUSH
42331: LD_VAR 0 6
42335: ARRAY
42336: PUSH
42337: LD_INT 1
42339: ARRAY
42340: PPUSH
42341: LD_EXP 41
42345: PUSH
42346: LD_VAR 0 6
42350: ARRAY
42351: PUSH
42352: LD_INT 2
42354: ARRAY
42355: PPUSH
42356: CALL_OW 297
42360: PUSH
42361: LD_INT 4
42363: GREATER
42364: IFFALSE 42405
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
42366: LD_VAR 0 2
42370: PPUSH
42371: LD_EXP 41
42375: PUSH
42376: LD_VAR 0 6
42380: ARRAY
42381: PUSH
42382: LD_INT 1
42384: ARRAY
42385: PPUSH
42386: LD_EXP 41
42390: PUSH
42391: LD_VAR 0 6
42395: ARRAY
42396: PUSH
42397: LD_INT 2
42399: ARRAY
42400: PPUSH
42401: CALL_OW 111
42405: GO 42318
42407: POP
42408: POP
// if scientists_list = 0 then
42409: LD_VAR 0 3
42413: PUSH
42414: LD_INT 0
42416: EQUAL
42417: IFFALSE 42421
// continue ;
42419: GO 42001
// if ai_heal_these_humans [ base ] > 0 then
42421: LD_EXP 43
42425: PUSH
42426: LD_VAR 0 6
42430: ARRAY
42431: PUSH
42432: LD_INT 0
42434: GREATER
42435: IFFALSE 42630
// begin area = GetBaseArea ( base ) ;
42437: LD_ADDR_VAR 0 10
42441: PUSH
42442: LD_VAR 0 6
42446: PPUSH
42447: CALL 11197 0 1
42451: ST_TO_ADDR
// temp_list = UnitFilter ( ai_heal_these_humans [ base ] , [ f_inarea , area ] ) ;
42452: LD_ADDR_VAR 0 4
42456: PUSH
42457: LD_EXP 43
42461: PUSH
42462: LD_VAR 0 6
42466: ARRAY
42467: PPUSH
42468: LD_INT 95
42470: PUSH
42471: LD_VAR 0 10
42475: PUSH
42476: EMPTY
42477: LIST
42478: LIST
42479: PPUSH
42480: CALL_OW 72
42484: ST_TO_ADDR
// if temp_list > 0 then
42485: LD_VAR 0 4
42489: PUSH
42490: LD_INT 0
42492: GREATER
42493: IFFALSE 42630
// begin scientists_list = GetHumansOutOfUnits ( scientists_list ) ;
42495: LD_ADDR_VAR 0 3
42499: PUSH
42500: LD_VAR 0 3
42504: PPUSH
42505: CALL 22083 0 1
42509: ST_TO_ADDR
// repeat i = 1 ;
42510: LD_ADDR_VAR 0 2
42514: PUSH
42515: LD_INT 1
42517: ST_TO_ADDR
// while i <= temp_list do
42518: LD_VAR 0 2
42522: PUSH
42523: LD_VAR 0 4
42527: LESSEQUAL
42528: IFFALSE 42620
// begin if scientists_list = 0 then
42530: LD_VAR 0 3
42534: PUSH
42535: LD_INT 0
42537: EQUAL
42538: IFFALSE 42542
// break ;
42540: GO 42620
// temp_unit = NearestUnitToUnit ( scientists_list , temp_list [ i ] ) ;
42542: LD_ADDR_VAR 0 5
42546: PUSH
42547: LD_VAR 0 3
42551: PPUSH
42552: LD_VAR 0 4
42556: PUSH
42557: LD_VAR 0 2
42561: ARRAY
42562: PPUSH
42563: CALL_OW 74
42567: ST_TO_ADDR
// ComHeal ( temp_unit , temp_list [ i ] ) ;
42568: LD_VAR 0 5
42572: PPUSH
42573: LD_VAR 0 4
42577: PUSH
42578: LD_VAR 0 2
42582: ARRAY
42583: PPUSH
42584: CALL_OW 128
// scientists_list = scientists_list diff temp_unit ;
42588: LD_ADDR_VAR 0 3
42592: PUSH
42593: LD_VAR 0 3
42597: PUSH
42598: LD_VAR 0 5
42602: DIFF
42603: ST_TO_ADDR
// i = i + 1 ;
42604: LD_ADDR_VAR 0 2
42608: PUSH
42609: LD_VAR 0 2
42613: PUSH
42614: LD_INT 1
42616: PLUS
42617: ST_TO_ADDR
// end ;
42618: GO 42518
// until scientists_list = 0 ;
42620: LD_VAR 0 3
42624: PUSH
42625: LD_INT 0
42627: EQUAL
42628: IFFALSE 42510
// end ; end ; DistributeHumansToBuildings ( base , scientists_list , UnitFilter ( ai_labs [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_scientistic , 6 , true , false ) ;
42630: LD_VAR 0 6
42634: PPUSH
42635: LD_VAR 0 3
42639: PPUSH
42640: LD_EXP 35
42644: PUSH
42645: LD_VAR 0 6
42649: ARRAY
42650: PPUSH
42651: LD_INT 50
42653: PUSH
42654: EMPTY
42655: LIST
42656: PUSH
42657: LD_INT 3
42659: PUSH
42660: LD_INT 57
42662: PUSH
42663: EMPTY
42664: LIST
42665: PUSH
42666: EMPTY
42667: LIST
42668: LIST
42669: PUSH
42670: EMPTY
42671: LIST
42672: LIST
42673: PPUSH
42674: CALL_OW 72
42678: PPUSH
42679: LD_INT 4
42681: PPUSH
42682: LD_INT 6
42684: PPUSH
42685: LD_INT 1
42687: PPUSH
42688: LD_INT 0
42690: PPUSH
42691: CALL 14154 0 7
// end ;
42695: GO 42001
42697: POP
42698: POP
// enable ;
42699: ENABLE
// end ; end_of_file
42700: PPOPN 10
42702: END
// export function GetApes ( side ) ; begin
42703: LD_INT 0
42705: 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 ] ] ] ) ;
42706: LD_ADDR_VAR 0 2
42710: PUSH
42711: LD_INT 22
42713: PUSH
42714: LD_VAR 0 1
42718: PUSH
42719: EMPTY
42720: LIST
42721: LIST
42722: PUSH
42723: LD_INT 2
42725: PUSH
42726: LD_INT 25
42728: PUSH
42729: LD_INT 12
42731: PUSH
42732: EMPTY
42733: LIST
42734: LIST
42735: PUSH
42736: LD_INT 25
42738: PUSH
42739: LD_INT 15
42741: PUSH
42742: EMPTY
42743: LIST
42744: LIST
42745: PUSH
42746: LD_INT 25
42748: PUSH
42749: LD_INT 16
42751: PUSH
42752: EMPTY
42753: LIST
42754: LIST
42755: PUSH
42756: LD_INT 25
42758: PUSH
42759: LD_INT 17
42761: PUSH
42762: EMPTY
42763: LIST
42764: LIST
42765: PUSH
42766: EMPTY
42767: LIST
42768: LIST
42769: LIST
42770: LIST
42771: LIST
42772: PUSH
42773: EMPTY
42774: LIST
42775: LIST
42776: PPUSH
42777: CALL_OW 69
42781: ST_TO_ADDR
// end ;
42782: LD_VAR 0 2
42786: RET
// on ResearchComplete ( tech , lab ) do var temp_list , temp_unit , i , un_list ;
42787: LD_INT 0
42789: PPUSH
42790: PPUSH
42791: PPUSH
42792: PPUSH
// begin if GetSide ( lab ) = you then
42793: LD_VAR 0 2
42797: PPUSH
42798: CALL_OW 255
42802: PUSH
42803: LD_EXP 2
42807: EQUAL
42808: IFFALSE 43795
// begin SetTech ( tech , you_alt , state_researched ) ;
42810: LD_VAR 0 1
42814: PPUSH
42815: LD_EXP 5
42819: PPUSH
42820: LD_INT 2
42822: PPUSH
42823: CALL_OW 322
// if tech = tech_HidCam then
42827: LD_VAR 0 1
42831: PUSH
42832: LD_INT 17
42834: EQUAL
42835: IFFALSE 43795
// begin un_list = [ Sonya , MarkB , Aviradze ] diff 0 ;
42837: LD_ADDR_VAR 0 6
42841: PUSH
42842: LD_EXP 10
42846: PUSH
42847: LD_EXP 19
42851: PUSH
42852: LD_EXP 20
42856: PUSH
42857: EMPTY
42858: LIST
42859: LIST
42860: LIST
42861: PUSH
42862: LD_INT 0
42864: DIFF
42865: ST_TO_ADDR
// temp_list = [ ] ;
42866: LD_ADDR_VAR 0 3
42870: PUSH
42871: EMPTY
42872: ST_TO_ADDR
// for i in un_list do
42873: LD_ADDR_VAR 0 5
42877: PUSH
42878: LD_VAR 0 6
42882: PUSH
42883: FOR_IN
42884: IFFALSE 42921
// if IsInUnit ( i ) = lab then
42886: LD_VAR 0 5
42890: PPUSH
42891: CALL_OW 310
42895: PUSH
42896: LD_VAR 0 2
42900: EQUAL
42901: IFFALSE 42919
// temp_list = temp_list ^ i ;
42903: LD_ADDR_VAR 0 3
42907: PUSH
42908: LD_VAR 0 3
42912: PUSH
42913: LD_VAR 0 5
42917: ADD
42918: ST_TO_ADDR
42919: GO 42883
42921: POP
42922: POP
// if temp_list = 0 then
42923: LD_VAR 0 3
42927: PUSH
42928: LD_INT 0
42930: EQUAL
42931: IFFALSE 43040
// begin temp_list = UnitsInside ( lab ) diff ( GetApes ( you ) ^ [ Heike , Sonya , Oswald , Ralph , Kowalski , Evelyn , Suze , Olaf , Kurt , Dwayne , MarkB , Aviradze , Swansson ] ) ;
42933: LD_ADDR_VAR 0 3
42937: PUSH
42938: LD_VAR 0 2
42942: PPUSH
42943: CALL_OW 313
42947: PUSH
42948: LD_EXP 2
42952: PPUSH
42953: CALL 42703 0 1
42957: PUSH
42958: LD_EXP 9
42962: PUSH
42963: LD_EXP 10
42967: PUSH
42968: LD_EXP 11
42972: PUSH
42973: LD_EXP 12
42977: PUSH
42978: LD_EXP 13
42982: PUSH
42983: LD_EXP 14
42987: PUSH
42988: LD_EXP 15
42992: PUSH
42993: LD_EXP 16
42997: PUSH
42998: LD_EXP 17
43002: PUSH
43003: LD_EXP 18
43007: PUSH
43008: LD_EXP 19
43012: PUSH
43013: LD_EXP 20
43017: PUSH
43018: LD_EXP 21
43022: PUSH
43023: EMPTY
43024: LIST
43025: LIST
43026: LIST
43027: LIST
43028: LIST
43029: LIST
43030: LIST
43031: LIST
43032: LIST
43033: LIST
43034: LIST
43035: LIST
43036: LIST
43037: ADD
43038: DIFF
43039: ST_TO_ADDR
// end ; if temp_list = 0 then
43040: LD_VAR 0 3
43044: PUSH
43045: LD_INT 0
43047: EQUAL
43048: IFFALSE 43075
// begin temp_list = UnitFilter ( un_list , [ f_class , class_scientistic ] ) ;
43050: LD_ADDR_VAR 0 3
43054: PUSH
43055: LD_VAR 0 6
43059: PPUSH
43060: LD_INT 25
43062: PUSH
43063: LD_INT 4
43065: PUSH
43066: EMPTY
43067: LIST
43068: LIST
43069: PPUSH
43070: CALL_OW 72
43074: ST_TO_ADDR
// end ; if temp_list = 0 then
43075: LD_VAR 0 3
43079: PUSH
43080: LD_INT 0
43082: EQUAL
43083: IFFALSE 43202
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_class , class_scientistic ] ] ) diff [ Heike , Sonya , Oswald , Ralph , Kowalski , Evelyn , Suze , Olaf , Kurt , Dwayne , MarkB , Aviradze , Swansson ] ;
43085: LD_ADDR_VAR 0 3
43089: PUSH
43090: LD_INT 22
43092: PUSH
43093: LD_EXP 2
43097: PUSH
43098: EMPTY
43099: LIST
43100: LIST
43101: PUSH
43102: LD_INT 25
43104: PUSH
43105: LD_INT 4
43107: PUSH
43108: EMPTY
43109: LIST
43110: LIST
43111: PUSH
43112: EMPTY
43113: LIST
43114: LIST
43115: PPUSH
43116: CALL_OW 69
43120: PUSH
43121: LD_EXP 9
43125: PUSH
43126: LD_EXP 10
43130: PUSH
43131: LD_EXP 11
43135: PUSH
43136: LD_EXP 12
43140: PUSH
43141: LD_EXP 13
43145: PUSH
43146: LD_EXP 14
43150: PUSH
43151: LD_EXP 15
43155: PUSH
43156: LD_EXP 16
43160: PUSH
43161: LD_EXP 17
43165: PUSH
43166: LD_EXP 18
43170: PUSH
43171: LD_EXP 19
43175: PUSH
43176: LD_EXP 20
43180: PUSH
43181: LD_EXP 21
43185: PUSH
43186: EMPTY
43187: LIST
43188: LIST
43189: LIST
43190: LIST
43191: LIST
43192: LIST
43193: LIST
43194: LIST
43195: LIST
43196: LIST
43197: LIST
43198: LIST
43199: LIST
43200: DIFF
43201: ST_TO_ADDR
// end ; if temp_list = 0 then
43202: LD_VAR 0 3
43206: PUSH
43207: LD_INT 0
43209: EQUAL
43210: IFFALSE 43340
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) diff ( GetApes ( you ) ^ [ Heike , Sonya , Oswald , Ralph , Kowalski , Evelyn , Suze , Olaf , Kurt , Dwayne , MarkB , Aviradze , Swansson ] ) ;
43212: LD_ADDR_VAR 0 3
43216: PUSH
43217: LD_INT 22
43219: PUSH
43220: LD_EXP 2
43224: PUSH
43225: EMPTY
43226: LIST
43227: LIST
43228: PUSH
43229: LD_INT 21
43231: PUSH
43232: LD_INT 1
43234: PUSH
43235: EMPTY
43236: LIST
43237: LIST
43238: PUSH
43239: EMPTY
43240: LIST
43241: LIST
43242: PPUSH
43243: CALL_OW 69
43247: PUSH
43248: LD_EXP 2
43252: PPUSH
43253: CALL 42703 0 1
43257: PUSH
43258: LD_EXP 9
43262: PUSH
43263: LD_EXP 10
43267: PUSH
43268: LD_EXP 11
43272: PUSH
43273: LD_EXP 12
43277: PUSH
43278: LD_EXP 13
43282: PUSH
43283: LD_EXP 14
43287: PUSH
43288: LD_EXP 15
43292: PUSH
43293: LD_EXP 16
43297: PUSH
43298: LD_EXP 17
43302: PUSH
43303: LD_EXP 18
43307: PUSH
43308: LD_EXP 19
43312: PUSH
43313: LD_EXP 20
43317: PUSH
43318: LD_EXP 21
43322: PUSH
43323: EMPTY
43324: LIST
43325: LIST
43326: LIST
43327: LIST
43328: LIST
43329: LIST
43330: LIST
43331: LIST
43332: LIST
43333: LIST
43334: LIST
43335: LIST
43336: LIST
43337: ADD
43338: DIFF
43339: ST_TO_ADDR
// end ; if temp_list > 0 then
43340: LD_VAR 0 3
43344: PUSH
43345: LD_INT 0
43347: GREATER
43348: IFFALSE 43734
// begin DialogueOn ;
43350: CALL_OW 6
// temp_unit = temp_list [ Rand ( 1 , temp_list ) ] ;
43354: LD_ADDR_VAR 0 4
43358: PUSH
43359: LD_VAR 0 3
43363: PUSH
43364: LD_INT 1
43366: PPUSH
43367: LD_VAR 0 3
43371: PPUSH
43372: CALL_OW 12
43376: ARRAY
43377: ST_TO_ADDR
// case temp_unit of Sonya :
43378: LD_VAR 0 4
43382: PUSH
43383: LD_EXP 10
43387: DOUBLE
43388: EQUAL
43389: IFTRUE 43393
43391: GO 43408
43393: POP
// Say ( temp_unit , D7-So-1 ) ; MarkB :
43394: LD_VAR 0 4
43398: PPUSH
43399: LD_STRING D7-So-1
43401: PPUSH
43402: CALL_OW 88
43406: GO 43596
43408: LD_EXP 19
43412: DOUBLE
43413: EQUAL
43414: IFTRUE 43418
43416: GO 43457
43418: POP
// begin Say ( temp_unit , D7-Ma-1 ) ;
43419: LD_VAR 0 4
43423: PPUSH
43424: LD_STRING D7-Ma-1
43426: PPUSH
43427: CALL_OW 88
// Say ( Heike , D7-H-1 ) ;
43431: LD_EXP 9
43435: PPUSH
43436: LD_STRING D7-H-1
43438: PPUSH
43439: CALL_OW 88
// Say ( temp_unit , D7-Ma-2 ) ;
43443: LD_VAR 0 4
43447: PPUSH
43448: LD_STRING D7-Ma-2
43450: PPUSH
43451: CALL_OW 88
// end ; Aviradze :
43455: GO 43596
43457: LD_EXP 20
43461: DOUBLE
43462: EQUAL
43463: IFTRUE 43467
43465: GO 43506
43467: POP
// begin Say ( temp_unit , D7-Av-1 ) ;
43468: LD_VAR 0 4
43472: PPUSH
43473: LD_STRING D7-Av-1
43475: PPUSH
43476: CALL_OW 88
// Say ( Heike , D7-H-1 ) ;
43480: LD_EXP 9
43484: PPUSH
43485: LD_STRING D7-H-1
43487: PPUSH
43488: CALL_OW 88
// Say ( temp_unit , D7-Av-2 ) ;
43492: LD_VAR 0 4
43496: PPUSH
43497: LD_STRING D7-Av-2
43499: PPUSH
43500: CALL_OW 88
// end ; else
43504: GO 43596
43506: POP
// if GetSex ( temp_unit ) = sex_male then
43507: LD_VAR 0 4
43511: PPUSH
43512: CALL_OW 258
43516: PUSH
43517: LD_INT 1
43519: EQUAL
43520: IFFALSE 43560
// begin Say ( temp_unit , D7-SciM-1 ) ;
43522: LD_VAR 0 4
43526: PPUSH
43527: LD_STRING D7-SciM-1
43529: PPUSH
43530: CALL_OW 88
// Say ( Heike , D7-H-1 ) ;
43534: LD_EXP 9
43538: PPUSH
43539: LD_STRING D7-H-1
43541: PPUSH
43542: CALL_OW 88
// Say ( temp_unit , D7-SciM-2 ) ;
43546: LD_VAR 0 4
43550: PPUSH
43551: LD_STRING D7-SciM-2
43553: PPUSH
43554: CALL_OW 88
// end else
43558: GO 43596
// begin Say ( temp_unit , D7-SciF-1 ) ;
43560: LD_VAR 0 4
43564: PPUSH
43565: LD_STRING D7-SciF-1
43567: PPUSH
43568: CALL_OW 88
// Say ( Heike , D7-H-1 ) ;
43572: LD_EXP 9
43576: PPUSH
43577: LD_STRING D7-H-1
43579: PPUSH
43580: CALL_OW 88
// Say ( temp_unit , D7-SciF-2 ) ;
43584: LD_VAR 0 4
43588: PPUSH
43589: LD_STRING D7-SciF-2
43591: PPUSH
43592: CALL_OW 88
// end ; end ; Say ( Heike , D7-H-2 ) ;
43596: LD_EXP 9
43600: PPUSH
43601: LD_STRING D7-H-2
43603: PPUSH
43604: CALL_OW 88
// case temp_unit of Sonya :
43608: LD_VAR 0 4
43612: PUSH
43613: LD_EXP 10
43617: DOUBLE
43618: EQUAL
43619: IFTRUE 43623
43621: GO 43638
43623: POP
// Say ( temp_unit , D7-So-2 ) ; MarkB :
43624: LD_VAR 0 4
43628: PPUSH
43629: LD_STRING D7-So-2
43631: PPUSH
43632: CALL_OW 88
43636: GO 43730
43638: LD_EXP 19
43642: DOUBLE
43643: EQUAL
43644: IFTRUE 43648
43646: GO 43663
43648: POP
// Say ( temp_unit , D7-Ma-3 ) ; Aviradze :
43649: LD_VAR 0 4
43653: PPUSH
43654: LD_STRING D7-Ma-3
43656: PPUSH
43657: CALL_OW 88
43661: GO 43730
43663: LD_EXP 20
43667: DOUBLE
43668: EQUAL
43669: IFTRUE 43673
43671: GO 43688
43673: POP
// Say ( temp_unit , D7-Av-3 ) ; else
43674: LD_VAR 0 4
43678: PPUSH
43679: LD_STRING D7-Av-3
43681: PPUSH
43682: CALL_OW 88
43686: GO 43730
43688: POP
// if GetSex ( temp_unit ) = sex_male then
43689: LD_VAR 0 4
43693: PPUSH
43694: CALL_OW 258
43698: PUSH
43699: LD_INT 1
43701: EQUAL
43702: IFFALSE 43718
// Say ( temp_unit , D7-SciM-3 ) else
43704: LD_VAR 0 4
43708: PPUSH
43709: LD_STRING D7-SciM-3
43711: PPUSH
43712: CALL_OW 88
43716: GO 43730
// Say ( temp_unit , D7-SciF-3 ) ; end ;
43718: LD_VAR 0 4
43722: PPUSH
43723: LD_STRING D7-SciF-3
43725: PPUSH
43726: CALL_OW 88
// DialogueOff ;
43730: CALL_OW 7
// end ; Wait ( 0 0$0.2 ) ;
43734: LD_INT 7
43736: PPUSH
43737: CALL_OW 67
// ChangeMissionObjectives ( MAddCameras ) ;
43741: LD_STRING MAddCameras
43743: PPUSH
43744: CALL_OW 337
// wait ( 0 0$0.2 ) ;
43748: LD_INT 7
43750: PPUSH
43751: CALL_OW 67
// SetAreaMapShow ( camera_area_2 , 1 ) ;
43755: LD_INT 15
43757: PPUSH
43758: LD_INT 1
43760: PPUSH
43761: CALL_OW 424
// SetAreaMapShow ( camera_area_3 , 1 ) ;
43765: LD_INT 16
43767: PPUSH
43768: LD_INT 1
43770: PPUSH
43771: CALL_OW 424
// SetAreaMapShow ( camera_area_4 , 1 ) ;
43775: LD_INT 17
43777: PPUSH
43778: LD_INT 1
43780: PPUSH
43781: CALL_OW 424
// SetAreaMapShow ( camera_area_5 , 1 ) ;
43785: LD_INT 18
43787: PPUSH
43788: LD_INT 1
43790: PPUSH
43791: CALL_OW 424
// end ; end ; end ;
43795: PPOPN 6
43797: END
// export function CheckCamerasOnCommand ( comm ) ; var i , task_list , x , y , k , temp_list ; begin
43798: LD_INT 0
43800: PPUSH
43801: PPUSH
43802: PPUSH
43803: PPUSH
43804: PPUSH
43805: PPUSH
43806: PPUSH
// if cameras_placed then
43807: LD_EXP 91
43811: IFFALSE 43815
// exit ;
43813: GO 44051
// case comm of 103 :
43815: LD_VAR 0 1
43819: PUSH
43820: LD_INT 103
43822: DOUBLE
43823: EQUAL
43824: IFTRUE 43828
43826: GO 44050
43828: POP
// begin for i in FilterAllUnits ( [ [ f_side , you ] , [ f_class , class_engineer ] ] ) do
43829: LD_ADDR_VAR 0 3
43833: PUSH
43834: LD_INT 22
43836: PUSH
43837: LD_EXP 2
43841: PUSH
43842: EMPTY
43843: LIST
43844: LIST
43845: PUSH
43846: LD_INT 25
43848: PUSH
43849: LD_INT 2
43851: PUSH
43852: EMPTY
43853: LIST
43854: LIST
43855: PUSH
43856: EMPTY
43857: LIST
43858: LIST
43859: PPUSH
43860: CALL_OW 69
43864: PUSH
43865: FOR_IN
43866: IFFALSE 44046
// if IsSelected ( i ) then
43868: LD_VAR 0 3
43872: PPUSH
43873: CALL_OW 306
43877: IFFALSE 44044
// begin task_list = GetTaskList ( i ) ;
43879: LD_ADDR_VAR 0 4
43883: PUSH
43884: LD_VAR 0 3
43888: PPUSH
43889: CALL_OW 437
43893: ST_TO_ADDR
// if task_list > 0 then
43894: LD_VAR 0 4
43898: PUSH
43899: LD_INT 0
43901: GREATER
43902: IFFALSE 44044
// begin x = task_list [ task_list + 0 ] [ 2 ] ;
43904: LD_ADDR_VAR 0 5
43908: PUSH
43909: LD_VAR 0 4
43913: PUSH
43914: LD_VAR 0 4
43918: PUSH
43919: LD_INT 0
43921: PLUS
43922: ARRAY
43923: PUSH
43924: LD_INT 2
43926: ARRAY
43927: ST_TO_ADDR
// y = task_list [ task_list + 0 ] [ 3 ] ;
43928: LD_ADDR_VAR 0 6
43932: PUSH
43933: LD_VAR 0 4
43937: PUSH
43938: LD_VAR 0 4
43942: PUSH
43943: LD_INT 0
43945: PLUS
43946: ARRAY
43947: PUSH
43948: LD_INT 3
43950: ARRAY
43951: ST_TO_ADDR
// if InArea ( x , y , camera_area_2 ) or InArea ( x , y , camera_area_3 ) or InArea ( x , y , camera_area_4 ) or InArea ( x , y , camera_area_5 ) then
43952: LD_VAR 0 5
43956: PPUSH
43957: LD_VAR 0 6
43961: PPUSH
43962: LD_INT 15
43964: PPUSH
43965: CALL_OW 309
43969: PUSH
43970: LD_VAR 0 5
43974: PPUSH
43975: LD_VAR 0 6
43979: PPUSH
43980: LD_INT 16
43982: PPUSH
43983: CALL_OW 309
43987: OR
43988: PUSH
43989: LD_VAR 0 5
43993: PPUSH
43994: LD_VAR 0 6
43998: PPUSH
43999: LD_INT 17
44001: PPUSH
44002: CALL_OW 309
44006: OR
44007: PUSH
44008: LD_VAR 0 5
44012: PPUSH
44013: LD_VAR 0 6
44017: PPUSH
44018: LD_INT 18
44020: PPUSH
44021: CALL_OW 309
44025: OR
44026: IFFALSE 44044
// begin camera_engineers = camera_engineers union i ;
44028: LD_ADDR_EXP 90
44032: PUSH
44033: LD_EXP 90
44037: PUSH
44038: LD_VAR 0 3
44042: UNION
44043: ST_TO_ADDR
// end ; end ; end ;
44044: GO 43865
44046: POP
44047: POP
// end ; end ;
44048: GO 44051
44050: POP
// end ;
44051: LD_VAR 0 2
44055: RET
// every 0 0$1 + 0 0$0.4 do var i , k , temp_list , x , y , task_list ; var need_area_list ;
44056: GO 44058
44058: DISABLE
44059: LD_INT 0
44061: PPUSH
44062: PPUSH
44063: PPUSH
44064: PPUSH
44065: PPUSH
44066: PPUSH
44067: PPUSH
// begin need_area_list = [ 2 , 3 , 4 , 5 ] ;
44068: LD_ADDR_VAR 0 7
44072: PUSH
44073: LD_INT 2
44075: PUSH
44076: LD_INT 3
44078: PUSH
44079: LD_INT 4
44081: PUSH
44082: LD_INT 5
44084: PUSH
44085: EMPTY
44086: LIST
44087: LIST
44088: LIST
44089: LIST
44090: ST_TO_ADDR
// repeat wait ( 0 0$0.1 ) ;
44091: LD_INT 4
44093: PPUSH
44094: CALL_OW 67
// temp_list = [ ] ;
44098: LD_ADDR_VAR 0 3
44102: PUSH
44103: EMPTY
44104: ST_TO_ADDR
// for i in camera_engineers do
44105: LD_ADDR_VAR 0 1
44109: PUSH
44110: LD_EXP 90
44114: PUSH
44115: FOR_IN
44116: IFFALSE 44147
// if HasTask ( i ) then
44118: LD_VAR 0 1
44122: PPUSH
44123: CALL_OW 314
44127: IFFALSE 44145
// temp_list = temp_list ^ i ;
44129: LD_ADDR_VAR 0 3
44133: PUSH
44134: LD_VAR 0 3
44138: PUSH
44139: LD_VAR 0 1
44143: ADD
44144: ST_TO_ADDR
44145: GO 44115
44147: POP
44148: POP
// camera_engineers = temp_list ;
44149: LD_ADDR_EXP 90
44153: PUSH
44154: LD_VAR 0 3
44158: ST_TO_ADDR
// for i in camera_engineers do
44159: LD_ADDR_VAR 0 1
44163: PUSH
44164: LD_EXP 90
44168: PUSH
44169: FOR_IN
44170: IFFALSE 44553
// begin task_list = GetTaskList ( i ) ;
44172: LD_ADDR_VAR 0 6
44176: PUSH
44177: LD_VAR 0 1
44181: PPUSH
44182: CALL_OW 437
44186: ST_TO_ADDR
// if task_list [ 1 ] [ 1 ] = g then
44187: LD_VAR 0 6
44191: PUSH
44192: LD_INT 1
44194: ARRAY
44195: PUSH
44196: LD_INT 1
44198: ARRAY
44199: PUSH
44200: LD_STRING g
44202: EQUAL
44203: IFFALSE 44551
// begin x = task_list [ 1 ] [ 2 ] ;
44205: LD_ADDR_VAR 0 4
44209: PUSH
44210: LD_VAR 0 6
44214: PUSH
44215: LD_INT 1
44217: ARRAY
44218: PUSH
44219: LD_INT 2
44221: ARRAY
44222: ST_TO_ADDR
// y = task_list [ 1 ] [ 3 ] ;
44223: LD_ADDR_VAR 0 5
44227: PUSH
44228: LD_VAR 0 6
44232: PUSH
44233: LD_INT 1
44235: ARRAY
44236: PUSH
44237: LD_INT 3
44239: ARRAY
44240: ST_TO_ADDR
// if GetDistUnitXY ( i , x , y ) > 2 then
44241: LD_VAR 0 1
44245: PPUSH
44246: LD_VAR 0 4
44250: PPUSH
44251: LD_VAR 0 5
44255: PPUSH
44256: CALL_OW 297
44260: PUSH
44261: LD_INT 2
44263: GREATER
44264: IFFALSE 44268
// continue ;
44266: GO 44169
// if InArea ( x , y , camera_area_2 ) then
44268: LD_VAR 0 4
44272: PPUSH
44273: LD_VAR 0 5
44277: PPUSH
44278: LD_INT 15
44280: PPUSH
44281: CALL_OW 309
44285: IFFALSE 44332
// begin HiddenCamera ( x , y , you ) ;
44287: LD_VAR 0 4
44291: PPUSH
44292: LD_VAR 0 5
44296: PPUSH
44297: LD_EXP 2
44301: PPUSH
44302: CALL_OW 244
// need_area_list = need_area_list diff 2 ;
44306: LD_ADDR_VAR 0 7
44310: PUSH
44311: LD_VAR 0 7
44315: PUSH
44316: LD_INT 2
44318: DIFF
44319: ST_TO_ADDR
// SetAreaMapShow ( camera_area_2 , 0 ) ;
44320: LD_INT 15
44322: PPUSH
44323: LD_INT 0
44325: PPUSH
44326: CALL_OW 424
// end else
44330: GO 44522
// if InArea ( x , y , camera_area_3 ) then
44332: LD_VAR 0 4
44336: PPUSH
44337: LD_VAR 0 5
44341: PPUSH
44342: LD_INT 16
44344: PPUSH
44345: CALL_OW 309
44349: IFFALSE 44396
// begin HiddenCamera ( x , y , you ) ;
44351: LD_VAR 0 4
44355: PPUSH
44356: LD_VAR 0 5
44360: PPUSH
44361: LD_EXP 2
44365: PPUSH
44366: CALL_OW 244
// need_area_list = need_area_list diff 3 ;
44370: LD_ADDR_VAR 0 7
44374: PUSH
44375: LD_VAR 0 7
44379: PUSH
44380: LD_INT 3
44382: DIFF
44383: ST_TO_ADDR
// SetAreaMapShow ( camera_area_3 , 0 ) ;
44384: LD_INT 16
44386: PPUSH
44387: LD_INT 0
44389: PPUSH
44390: CALL_OW 424
// end else
44394: GO 44522
// if InArea ( x , y , camera_area_4 ) then
44396: LD_VAR 0 4
44400: PPUSH
44401: LD_VAR 0 5
44405: PPUSH
44406: LD_INT 17
44408: PPUSH
44409: CALL_OW 309
44413: IFFALSE 44460
// begin HiddenCamera ( x , y , you ) ;
44415: LD_VAR 0 4
44419: PPUSH
44420: LD_VAR 0 5
44424: PPUSH
44425: LD_EXP 2
44429: PPUSH
44430: CALL_OW 244
// need_area_list = need_area_list diff 4 ;
44434: LD_ADDR_VAR 0 7
44438: PUSH
44439: LD_VAR 0 7
44443: PUSH
44444: LD_INT 4
44446: DIFF
44447: ST_TO_ADDR
// SetAreaMapShow ( camera_area_4 , 0 ) ;
44448: LD_INT 17
44450: PPUSH
44451: LD_INT 0
44453: PPUSH
44454: CALL_OW 424
// end else
44458: GO 44522
// if InArea ( x , y , camera_area_5 ) then
44460: LD_VAR 0 4
44464: PPUSH
44465: LD_VAR 0 5
44469: PPUSH
44470: LD_INT 18
44472: PPUSH
44473: CALL_OW 309
44477: IFFALSE 44522
// begin HiddenCamera ( x , y , you ) ;
44479: LD_VAR 0 4
44483: PPUSH
44484: LD_VAR 0 5
44488: PPUSH
44489: LD_EXP 2
44493: PPUSH
44494: CALL_OW 244
// need_area_list = need_area_list diff 5 ;
44498: LD_ADDR_VAR 0 7
44502: PUSH
44503: LD_VAR 0 7
44507: PUSH
44508: LD_INT 5
44510: DIFF
44511: ST_TO_ADDR
// SetAreaMapShow ( camera_area_5 , 0 ) ;
44512: LD_INT 18
44514: PPUSH
44515: LD_INT 0
44517: PPUSH
44518: CALL_OW 424
// end ; if need_area_list = 0 then
44522: LD_VAR 0 7
44526: PUSH
44527: LD_INT 0
44529: EQUAL
44530: IFFALSE 44551
// begin ChangeMissionObjectives ( MOutCameras ) ;
44532: LD_STRING MOutCameras
44534: PPUSH
44535: CALL_OW 337
// cameras_placed = true ;
44539: LD_ADDR_EXP 91
44543: PUSH
44544: LD_INT 1
44546: ST_TO_ADDR
// exit ;
44547: POP
44548: POP
44549: GO 44559
// end ; end ; end ;
44551: GO 44169
44553: POP
44554: POP
// until false ;
44555: LD_INT 0
44557: IFFALSE 44091
// end ;
44559: PPOPN 7
44561: END
// on SpontaneousTeleported ( un ) do begin if first_teleport then
44562: LD_EXP 89
44566: IFFALSE 44696
// if See ( you , un ) then
44568: LD_EXP 2
44572: PPUSH
44573: LD_VAR 0 1
44577: PPUSH
44578: CALL_OW 292
44582: IFFALSE 44696
// begin CenterNowOnUnits ( un ) ;
44584: LD_VAR 0 1
44588: PPUSH
44589: CALL_OW 87
// first_teleport = false ;
44593: LD_ADDR_EXP 89
44597: PUSH
44598: LD_INT 0
44600: ST_TO_ADDR
// wait ( 0 0$1.8 ) ;
44601: LD_INT 63
44603: PPUSH
44604: CALL_OW 67
// DialogueOn ;
44608: CALL_OW 6
// ForceSay ( Heike , D6-H-1 ) ;
44612: LD_EXP 9
44616: PPUSH
44617: LD_STRING D6-H-1
44619: PPUSH
44620: CALL_OW 91
// if IsLive ( Ralph ) then
44624: LD_EXP 12
44628: PPUSH
44629: CALL_OW 300
44633: IFFALSE 44649
// ForceSay ( Ralph , D6-Ra-1 ) else
44635: LD_EXP 12
44639: PPUSH
44640: LD_STRING D6-Ra-1
44642: PPUSH
44643: CALL_OW 91
44647: GO 44692
// if IsLive ( Oswald ) then
44649: LD_EXP 11
44653: PPUSH
44654: CALL_OW 300
44658: IFFALSE 44692
// begin if oswald_is_substitute then
44660: LD_EXP 80
44664: IFFALSE 44680
// ForceSay ( Oswald , D6-Os_alt-1 ) else
44666: LD_EXP 11
44670: PPUSH
44671: LD_STRING D6-Os_alt-1
44673: PPUSH
44674: CALL_OW 91
44678: GO 44692
// ForceSay ( Oswald , D6-Os-1 ) ;
44680: LD_EXP 11
44684: PPUSH
44685: LD_STRING D6-Os-1
44687: PPUSH
44688: CALL_OW 91
// end ; DialogueOff ;
44692: CALL_OW 7
// end ; end ;
44696: PPOPN 1
44698: END
// every 0 0$1.6 do
44699: GO 44701
44701: DISABLE
// begin repeat wait ( 0 0$0.5 ) ;
44702: LD_INT 18
44704: PPUSH
44705: CALL_OW 67
// if game_phase = 3 then
44709: LD_EXP 88
44713: PUSH
44714: LD_INT 3
44716: EQUAL
44717: IFFALSE 44721
// exit ;
44719: GO 44807
// if ContactTime ( [ you , you_alt ] ) <= 0 0$1 or ai_contact_time [ you ] [ you_alt ] <= 0 0$1 then
44721: LD_EXP 2
44725: PUSH
44726: LD_EXP 5
44730: PUSH
44731: EMPTY
44732: LIST
44733: LIST
44734: PPUSH
44735: CALL_OW 462
44739: PUSH
44740: LD_INT 35
44742: LESSEQUAL
44743: PUSH
44744: LD_EXP 75
44748: PUSH
44749: LD_EXP 2
44753: ARRAY
44754: PUSH
44755: LD_EXP 5
44759: ARRAY
44760: PUSH
44761: LD_INT 35
44763: LESSEQUAL
44764: OR
44765: IFFALSE 44803
// begin DialogueOn ;
44767: CALL_OW 6
// Say ( Gensher , D11-Ge-1 ) ;
44771: LD_EXP 23
44775: PPUSH
44776: LD_STRING D11-Ge-1
44778: PPUSH
44779: CALL_OW 88
// dwait ( 0 0$0.5 ) ;
44783: LD_INT 18
44785: PPUSH
44786: CALL_OW 68
// YouLost ( AttackedGensher ) ;
44790: LD_STRING AttackedGensher
44792: PPUSH
44793: CALL_OW 104
// DialogueOff ;
44797: CALL_OW 7
// exit ;
44801: GO 44807
// end ; until false ;
44803: LD_INT 0
44805: IFFALSE 44702
// end ;
44807: END
// every 0 0$1 + 0 0$0.2 do var temp_list , i ;
44808: GO 44810
44810: DISABLE
44811: LD_INT 0
44813: PPUSH
44814: PPUSH
// begin repeat wait ( 0 0$1 ) ;
44815: LD_INT 35
44817: PPUSH
44818: CALL_OW 67
// if game_phase > 1 then
44822: LD_EXP 88
44826: PUSH
44827: LD_INT 1
44829: GREATER
44830: IFFALSE 44834
// exit ;
44832: GO 45278
// if ContactTime ( [ you , americans ] ) <= 0 0$2 or ai_contact_time [ americans ] [ you ] <= 0 0$2 then
44834: LD_EXP 2
44838: PUSH
44839: LD_EXP 6
44843: PUSH
44844: EMPTY
44845: LIST
44846: LIST
44847: PPUSH
44848: CALL_OW 462
44852: PUSH
44853: LD_INT 70
44855: LESSEQUAL
44856: PUSH
44857: LD_EXP 75
44861: PUSH
44862: LD_EXP 6
44866: ARRAY
44867: PUSH
44868: LD_EXP 2
44872: ARRAY
44873: PUSH
44874: LD_INT 70
44876: LESSEQUAL
44877: OR
44878: IFFALSE 45274
// begin temp_list = [ ] ;
44880: LD_ADDR_VAR 0 1
44884: PUSH
44885: EMPTY
44886: ST_TO_ADDR
// for i in FilterAllUnits ( [ f_side , americans ] ) do
44887: LD_ADDR_VAR 0 2
44891: PUSH
44892: LD_INT 22
44894: PUSH
44895: LD_EXP 6
44899: PUSH
44900: EMPTY
44901: LIST
44902: LIST
44903: PPUSH
44904: CALL_OW 69
44908: PUSH
44909: FOR_IN
44910: IFFALSE 44948
// if GetSide ( Attacks ( i ) ) = you then
44912: LD_VAR 0 2
44916: PPUSH
44917: CALL_OW 320
44921: PPUSH
44922: CALL_OW 255
44926: PUSH
44927: LD_EXP 2
44931: EQUAL
44932: IFFALSE 44946
// begin temp_list = i ;
44934: LD_ADDR_VAR 0 1
44938: PUSH
44939: LD_VAR 0 2
44943: ST_TO_ADDR
// break ;
44944: GO 44948
// end ;
44946: GO 44909
44948: POP
44949: POP
// if temp_list = 0 then
44950: LD_VAR 0 1
44954: PUSH
44955: LD_INT 0
44957: EQUAL
44958: IFFALSE 45023
// for i in FilterAllUnits ( [ f_side , you ] ) do
44960: LD_ADDR_VAR 0 2
44964: PUSH
44965: LD_INT 22
44967: PUSH
44968: LD_EXP 2
44972: PUSH
44973: EMPTY
44974: LIST
44975: LIST
44976: PPUSH
44977: CALL_OW 69
44981: PUSH
44982: FOR_IN
44983: IFFALSE 45021
// if GetSide ( Attacks ( i ) ) = americans then
44985: LD_VAR 0 2
44989: PPUSH
44990: CALL_OW 320
44994: PPUSH
44995: CALL_OW 255
44999: PUSH
45000: LD_EXP 6
45004: EQUAL
45005: IFFALSE 45019
// begin temp_list = i ;
45007: LD_ADDR_VAR 0 1
45011: PUSH
45012: LD_VAR 0 2
45016: ST_TO_ADDR
// break ;
45017: GO 45021
// end ;
45019: GO 44982
45021: POP
45022: POP
// if temp_list > 0 then
45023: LD_VAR 0 1
45027: PUSH
45028: LD_INT 0
45030: GREATER
45031: IFFALSE 45042
// CenterOnUnits ( temp_list ) ;
45033: LD_VAR 0 1
45037: PPUSH
45038: CALL_OW 85
// DialogueOn ;
45042: CALL_OW 6
// temp_list = FilterAllUnits ( [ [ f_side , americans ] , [ f_class , class_soldier ] ] ) diff [ Simms , Cornell , Khattam ] ;
45046: LD_ADDR_VAR 0 1
45050: PUSH
45051: LD_INT 22
45053: PUSH
45054: LD_EXP 6
45058: PUSH
45059: EMPTY
45060: LIST
45061: LIST
45062: PUSH
45063: LD_INT 25
45065: PUSH
45066: LD_INT 1
45068: PUSH
45069: EMPTY
45070: LIST
45071: LIST
45072: PUSH
45073: EMPTY
45074: LIST
45075: LIST
45076: PPUSH
45077: CALL_OW 69
45081: PUSH
45082: LD_EXP 24
45086: PUSH
45087: LD_EXP 25
45091: PUSH
45092: LD_EXP 26
45096: PUSH
45097: EMPTY
45098: LIST
45099: LIST
45100: LIST
45101: DIFF
45102: ST_TO_ADDR
// if temp_list = 0 then
45103: LD_VAR 0 1
45107: PUSH
45108: LD_INT 0
45110: EQUAL
45111: IFFALSE 45181
// temp_list = FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_human ] ] ) diff ( GetApes ( americans ) ^ [ Simms , Cornell , Khattam ] ) ;
45113: LD_ADDR_VAR 0 1
45117: PUSH
45118: LD_INT 22
45120: PUSH
45121: LD_EXP 6
45125: PUSH
45126: EMPTY
45127: LIST
45128: LIST
45129: PUSH
45130: LD_INT 21
45132: PUSH
45133: LD_INT 1
45135: PUSH
45136: EMPTY
45137: LIST
45138: LIST
45139: PUSH
45140: EMPTY
45141: LIST
45142: LIST
45143: PPUSH
45144: CALL_OW 69
45148: PUSH
45149: LD_EXP 6
45153: PPUSH
45154: CALL 42703 0 1
45158: PUSH
45159: LD_EXP 24
45163: PUSH
45164: LD_EXP 25
45168: PUSH
45169: LD_EXP 26
45173: PUSH
45174: EMPTY
45175: LIST
45176: LIST
45177: LIST
45178: ADD
45179: DIFF
45180: ST_TO_ADDR
// if temp_list > 0 then
45181: LD_VAR 0 1
45185: PUSH
45186: LD_INT 0
45188: GREATER
45189: IFFALSE 45244
// if GetSex ( temp_list [ 1 ] ) = sex_male then
45191: LD_VAR 0 1
45195: PUSH
45196: LD_INT 1
45198: ARRAY
45199: PPUSH
45200: CALL_OW 258
45204: PUSH
45205: LD_INT 1
45207: EQUAL
45208: IFFALSE 45228
// SayRadio ( temp_list [ 1 ] , D4-SomeM-1 ) else
45210: LD_VAR 0 1
45214: PUSH
45215: LD_INT 1
45217: ARRAY
45218: PPUSH
45219: LD_STRING D4-SomeM-1
45221: PPUSH
45222: CALL_OW 94
45226: GO 45244
// SayRadio ( temp_list [ 1 ] , D4-SomeF-1 ) ;
45228: LD_VAR 0 1
45232: PUSH
45233: LD_INT 1
45235: ARRAY
45236: PPUSH
45237: LD_STRING D4-SomeF-1
45239: PPUSH
45240: CALL_OW 94
// SayRadio ( Simms , D4-Sim-1 ) ;
45244: LD_EXP 24
45248: PPUSH
45249: LD_STRING D4-Sim-1
45251: PPUSH
45252: CALL_OW 94
// dwait ( 0 0$0.5 ) ;
45256: LD_INT 18
45258: PPUSH
45259: CALL_OW 68
// YouLost ( PlayerSeen ) ;
45263: LD_STRING PlayerSeen
45265: PPUSH
45266: CALL_OW 104
// DialogueOff ;
45270: CALL_OW 7
// end ; until false ;
45274: LD_INT 0
45276: IFFALSE 44815
// end ;
45278: PPOPN 2
45280: END
// every 0 0$1 + 0 0$0.9 do var vehicle ;
45281: GO 45283
45283: DISABLE
45284: LD_INT 0
45286: PPUSH
// begin InitUc ;
45287: CALL_OW 18
// InitVc ;
45291: CALL_OW 20
// uc_side = americans ;
45295: LD_ADDR_OWVAR 20
45299: PUSH
45300: LD_EXP 6
45304: ST_TO_ADDR
// uc_nation = nation_american ;
45305: LD_ADDR_OWVAR 21
45309: PUSH
45310: LD_INT 1
45312: ST_TO_ADDR
// vc_chassis = us_medium_wheeled ;
45313: LD_ADDR_OWVAR 37
45317: PUSH
45318: LD_INT 2
45320: ST_TO_ADDR
// vc_control = control_manual ;
45321: LD_ADDR_OWVAR 38
45325: PUSH
45326: LD_INT 1
45328: ST_TO_ADDR
// vc_engine = engine_siberite ;
45329: LD_ADDR_OWVAR 39
45333: PUSH
45334: LD_INT 3
45336: ST_TO_ADDR
// vc_weapon = us_machine_gun ;
45337: LD_ADDR_OWVAR 40
45341: PUSH
45342: LD_INT 2
45344: ST_TO_ADDR
// vehicle = CreateVehicle ;
45345: LD_ADDR_VAR 0 1
45349: PUSH
45350: CALL_OW 45
45354: ST_TO_ADDR
// PlaceHumanInUnit ( Joan , vehicle ) ;
45355: LD_EXP 27
45359: PPUSH
45360: LD_VAR 0 1
45364: PPUSH
45365: CALL_OW 52
// wait ( Rand ( 0 0$20 , 0 0$30 ) ) ;
45369: LD_INT 700
45371: PPUSH
45372: LD_INT 1050
45374: PPUSH
45375: CALL_OW 12
45379: PPUSH
45380: CALL_OW 67
// while not PlaceUnitXYR ( vehicle , 98 , 30 , 2 , false ) do
45384: LD_VAR 0 1
45388: PPUSH
45389: LD_INT 98
45391: PPUSH
45392: LD_INT 30
45394: PPUSH
45395: LD_INT 2
45397: PPUSH
45398: LD_INT 0
45400: PPUSH
45401: CALL_OW 50
45405: NOT
45406: IFFALSE 45417
// wait ( 0 0$2 ) ;
45408: LD_INT 70
45410: PPUSH
45411: CALL_OW 67
45415: GO 45384
// while IsPlaced ( Joan ) do
45417: LD_EXP 27
45421: PPUSH
45422: CALL_OW 305
45426: IFFALSE 45493
// begin wait ( 0 0$1 ) ;
45428: LD_INT 35
45430: PPUSH
45431: CALL_OW 67
// if GetDistUnitXY ( Joan , 56 , 3 ) > 1 then
45435: LD_EXP 27
45439: PPUSH
45440: LD_INT 56
45442: PPUSH
45443: LD_INT 3
45445: PPUSH
45446: CALL_OW 297
45450: PUSH
45451: LD_INT 1
45453: GREATER
45454: IFFALSE 45473
// ComMoveXY ( Joan , 56 , 3 ) else
45456: LD_EXP 27
45460: PPUSH
45461: LD_INT 56
45463: PPUSH
45464: LD_INT 3
45466: PPUSH
45467: CALL_OW 111
45471: GO 45491
// begin DestroyUnit ( Joan ) ;
45473: LD_EXP 27
45477: PPUSH
45478: CALL_OW 65
// DestroyUnit ( vehicle ) ;
45482: LD_VAR 0 1
45486: PPUSH
45487: CALL_OW 65
// end ; end ;
45491: GO 45417
// end ;
45493: PPOPN 1
45495: END
// every 0 0$1 + 0 0$0.1 do var i , temp_unit , temp_list , temp_list_2 ; var cargo_bay , special_player_units , scout , crate_hex ;
45496: GO 45498
45498: DISABLE
45499: LD_INT 0
45501: PPUSH
45502: PPUSH
45503: PPUSH
45504: PPUSH
45505: PPUSH
45506: PPUSH
45507: PPUSH
45508: PPUSH
// begin special_player_units = [ Heike , Sonya , Oswald , Ralph , Kowalski , Evelyn , Suze , Olaf , Kurt , Dwayne , MarkB , Aviradze , Swansson ] ;
45509: LD_ADDR_VAR 0 6
45513: PUSH
45514: LD_EXP 9
45518: PUSH
45519: LD_EXP 10
45523: PUSH
45524: LD_EXP 11
45528: PUSH
45529: LD_EXP 12
45533: PUSH
45534: LD_EXP 13
45538: PUSH
45539: LD_EXP 14
45543: PUSH
45544: LD_EXP 15
45548: PUSH
45549: LD_EXP 16
45553: PUSH
45554: LD_EXP 17
45558: PUSH
45559: LD_EXP 18
45563: PUSH
45564: LD_EXP 19
45568: PUSH
45569: LD_EXP 20
45573: PUSH
45574: LD_EXP 21
45578: PUSH
45579: EMPTY
45580: LIST
45581: LIST
45582: LIST
45583: LIST
45584: LIST
45585: LIST
45586: LIST
45587: LIST
45588: LIST
45589: LIST
45590: LIST
45591: LIST
45592: LIST
45593: ST_TO_ADDR
// InitUc ;
45594: CALL_OW 18
// InitVc ;
45598: CALL_OW 20
// uc_side = russians ;
45602: LD_ADDR_OWVAR 20
45606: PUSH
45607: LD_EXP 3
45611: ST_TO_ADDR
// uc_nation = nation_russian ;
45612: LD_ADDR_OWVAR 21
45616: PUSH
45617: LD_INT 3
45619: ST_TO_ADDR
// vc_chassis = ru_medium_tracked ;
45620: LD_ADDR_OWVAR 37
45624: PUSH
45625: LD_INT 22
45627: ST_TO_ADDR
// vc_engine = engine_siberite ;
45628: LD_ADDR_OWVAR 39
45632: PUSH
45633: LD_INT 3
45635: ST_TO_ADDR
// vc_control = control_computer ;
45636: LD_ADDR_OWVAR 38
45640: PUSH
45641: LD_INT 3
45643: ST_TO_ADDR
// vc_weapon = ru_cargo_bay ;
45644: LD_ADDR_OWVAR 40
45648: PUSH
45649: LD_INT 51
45651: ST_TO_ADDR
// cargo_bay = CreateVehicle ;
45652: LD_ADDR_VAR 0 5
45656: PUSH
45657: CALL_OW 45
45661: ST_TO_ADDR
// SetCargo ( cargo_bay , mat_cans , Rand ( 2 , 5 ) * 10 ) ;
45662: LD_VAR 0 5
45666: PPUSH
45667: LD_INT 1
45669: PPUSH
45670: LD_INT 2
45672: PPUSH
45673: LD_INT 5
45675: PPUSH
45676: CALL_OW 12
45680: PUSH
45681: LD_INT 10
45683: MUL
45684: PPUSH
45685: CALL_OW 290
// SetDir ( cargo_bay , 0 ) ;
45689: LD_VAR 0 5
45693: PPUSH
45694: LD_INT 0
45696: PPUSH
45697: CALL_OW 233
// PlaceUnitXY ( cargo_bay , 103 , 116 , false ) ;
45701: LD_VAR 0 5
45705: PPUSH
45706: LD_INT 103
45708: PPUSH
45709: LD_INT 116
45711: PPUSH
45712: LD_INT 0
45714: PPUSH
45715: CALL_OW 48
// crate_hex = RandHexXYR ( 122 , 93 , 4 , false ) ;
45719: LD_ADDR_VAR 0 8
45723: PUSH
45724: LD_INT 122
45726: PPUSH
45727: LD_INT 93
45729: PPUSH
45730: LD_INT 4
45732: PPUSH
45733: LD_INT 0
45735: PPUSH
45736: CALL_OW 17
45740: ST_TO_ADDR
// CreateCratesXY ( Rand ( 3 , 5 ) , crate_hex [ 1 ] , crate_hex [ 2 ] , false ) ;
45741: LD_INT 3
45743: PPUSH
45744: LD_INT 5
45746: PPUSH
45747: CALL_OW 12
45751: PPUSH
45752: LD_VAR 0 8
45756: PUSH
45757: LD_INT 1
45759: ARRAY
45760: PPUSH
45761: LD_VAR 0 8
45765: PUSH
45766: LD_INT 2
45768: ARRAY
45769: PPUSH
45770: LD_INT 0
45772: PPUSH
45773: CALL_OW 54
// ComMoveXY ( cargo_bay , 122 , 93 ) ;
45777: LD_VAR 0 5
45781: PPUSH
45782: LD_INT 122
45784: PPUSH
45785: LD_INT 93
45787: PPUSH
45788: CALL_OW 111
// AddComStand ( cargo_bay ) ;
45792: LD_VAR 0 5
45796: PPUSH
45797: CALL_OW 225
// i = Rand ( 1 1$30 , 2 2$0 ) ;
45801: LD_ADDR_VAR 0 1
45805: PUSH
45806: LD_INT 3150
45808: PPUSH
45809: LD_INT 4200
45811: PPUSH
45812: CALL_OW 12
45816: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
45817: LD_INT 18
45819: PPUSH
45820: CALL_OW 67
// i = i - 0 0$0.5 ;
45824: LD_ADDR_VAR 0 1
45828: PUSH
45829: LD_VAR 0 1
45833: PUSH
45834: LD_INT 18
45836: MINUS
45837: ST_TO_ADDR
// until i <= 0 0$0 or See ( you , cargo_bay ) ;
45838: LD_VAR 0 1
45842: PUSH
45843: LD_INT 0
45845: LESSEQUAL
45846: PUSH
45847: LD_EXP 2
45851: PPUSH
45852: LD_VAR 0 5
45856: PPUSH
45857: CALL_OW 292
45861: OR
45862: IFFALSE 45817
// while not See ( you , cargo_bay ) do
45864: LD_EXP 2
45868: PPUSH
45869: LD_VAR 0 5
45873: PPUSH
45874: CALL_OW 292
45878: NOT
45879: IFFALSE 45951
// begin wait ( 0 0$0.5 ) ;
45881: LD_INT 18
45883: PPUSH
45884: CALL_OW 67
// temp_unit = NearestUnitToUnit ( FilterAllUnits ( [ f_side , you ] ) , cargo_bay ) ;
45888: LD_ADDR_VAR 0 2
45892: PUSH
45893: LD_INT 22
45895: PUSH
45896: LD_EXP 2
45900: PUSH
45901: EMPTY
45902: LIST
45903: LIST
45904: PPUSH
45905: CALL_OW 69
45909: PPUSH
45910: LD_VAR 0 5
45914: PPUSH
45915: CALL_OW 74
45919: ST_TO_ADDR
// ComMoveXY ( cargo_bay , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
45920: LD_VAR 0 5
45924: PPUSH
45925: LD_VAR 0 2
45929: PPUSH
45930: CALL_OW 250
45934: PPUSH
45935: LD_VAR 0 2
45939: PPUSH
45940: CALL_OW 251
45944: PPUSH
45945: CALL_OW 111
// end ;
45949: GO 45864
// CenterOnUnits ( cargo_bay ) ;
45951: LD_VAR 0 5
45955: PPUSH
45956: CALL_OW 85
// DialogueOn ;
45960: CALL_OW 6
// if IsOk ( Oswald ) then
45964: LD_EXP 11
45968: PPUSH
45969: CALL_OW 302
45973: IFFALSE 46009
// begin if oswald_is_substitute then
45975: LD_EXP 80
45979: IFFALSE 45995
// Say ( Oswald , D2-Os_alt-1 ) else
45981: LD_EXP 11
45985: PPUSH
45986: LD_STRING D2-Os_alt-1
45988: PPUSH
45989: CALL_OW 88
45993: GO 46007
// Say ( Oswald , D2-Os-1 ) ;
45995: LD_EXP 11
45999: PPUSH
46000: LD_STRING D2-Os-1
46002: PPUSH
46003: CALL_OW 88
// end else
46007: GO 46241
// if IsOk ( Olaf ) then
46009: LD_EXP 16
46013: PPUSH
46014: CALL_OW 302
46018: IFFALSE 46034
// Say ( Olaf , D2-Olaf-1 ) else
46020: LD_EXP 16
46024: PPUSH
46025: LD_STRING D2-Olaf-1
46027: PPUSH
46028: CALL_OW 88
46032: GO 46241
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) diff ( GetApes ( you ) ^ special_player_units ) ;
46034: LD_ADDR_VAR 0 3
46038: PUSH
46039: LD_INT 22
46041: PUSH
46042: LD_EXP 2
46046: PUSH
46047: EMPTY
46048: LIST
46049: LIST
46050: PUSH
46051: LD_INT 21
46053: PUSH
46054: LD_INT 1
46056: PUSH
46057: EMPTY
46058: LIST
46059: LIST
46060: PUSH
46061: EMPTY
46062: LIST
46063: LIST
46064: PPUSH
46065: CALL_OW 69
46069: PUSH
46070: LD_EXP 2
46074: PPUSH
46075: CALL 42703 0 1
46079: PUSH
46080: LD_VAR 0 6
46084: ADD
46085: DIFF
46086: ST_TO_ADDR
// if temp_list > 0 then
46087: LD_VAR 0 3
46091: PUSH
46092: LD_INT 0
46094: GREATER
46095: IFFALSE 46113
// temp_unit = temp_list [ 1 ] else
46097: LD_ADDR_VAR 0 2
46101: PUSH
46102: LD_VAR 0 3
46106: PUSH
46107: LD_INT 1
46109: ARRAY
46110: ST_TO_ADDR
46111: GO 46200
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) diff ( GetApes ( you ) ^ Heike ) ;
46113: LD_ADDR_VAR 0 3
46117: PUSH
46118: LD_INT 22
46120: PUSH
46121: LD_EXP 2
46125: PUSH
46126: EMPTY
46127: LIST
46128: LIST
46129: PUSH
46130: LD_INT 21
46132: PUSH
46133: LD_INT 1
46135: PUSH
46136: EMPTY
46137: LIST
46138: LIST
46139: PUSH
46140: EMPTY
46141: LIST
46142: LIST
46143: PPUSH
46144: CALL_OW 69
46148: PUSH
46149: LD_EXP 2
46153: PPUSH
46154: CALL 42703 0 1
46158: PUSH
46159: LD_EXP 9
46163: ADD
46164: DIFF
46165: ST_TO_ADDR
// if temp_list > 0 then
46166: LD_VAR 0 3
46170: PUSH
46171: LD_INT 0
46173: GREATER
46174: IFFALSE 46192
// temp_unit = temp_list [ 1 ] else
46176: LD_ADDR_VAR 0 2
46180: PUSH
46181: LD_VAR 0 3
46185: PUSH
46186: LD_INT 1
46188: ARRAY
46189: ST_TO_ADDR
46190: GO 46200
// temp_unit = 0 ;
46192: LD_ADDR_VAR 0 2
46196: PUSH
46197: LD_INT 0
46199: ST_TO_ADDR
// end ; if GetSex ( temp_unit ) = sex_male then
46200: LD_VAR 0 2
46204: PPUSH
46205: CALL_OW 258
46209: PUSH
46210: LD_INT 1
46212: EQUAL
46213: IFFALSE 46229
// Say ( temp_unit , D2-SomeM-1 ) else
46215: LD_VAR 0 2
46219: PPUSH
46220: LD_STRING D2-SomeM-1
46222: PPUSH
46223: CALL_OW 88
46227: GO 46241
// Say ( temp_unit , D2-SomeF-1 ) ;
46229: LD_VAR 0 2
46233: PPUSH
46234: LD_STRING D2-SomeF-1
46236: PPUSH
46237: CALL_OW 88
// end ; Say ( Heike , D2-H-1 ) ;
46241: LD_EXP 9
46245: PPUSH
46246: LD_STRING D2-H-1
46248: PPUSH
46249: CALL_OW 88
// if IsOk ( Kowalski ) then
46253: LD_EXP 13
46257: PPUSH
46258: CALL_OW 302
46262: IFFALSE 46290
// begin Say ( Kowalski , D2-Ko-a-1 ) ;
46264: LD_EXP 13
46268: PPUSH
46269: LD_STRING D2-Ko-a-1
46271: PPUSH
46272: CALL_OW 88
// Say ( Heike , D2-H-a-2 ) ;
46276: LD_EXP 9
46280: PPUSH
46281: LD_STRING D2-H-a-2
46283: PPUSH
46284: CALL_OW 88
// end else
46288: GO 46302
// begin Say ( Heike , D2-H-b-2 ) ;
46290: LD_EXP 9
46294: PPUSH
46295: LD_STRING D2-H-b-2
46297: PPUSH
46298: CALL_OW 88
// end ; dwait ( 0 0$0.2 ) ;
46302: LD_INT 7
46304: PPUSH
46305: CALL_OW 68
// temp_list_2 = FilterAllUnits ( [ f_side , you ] ) diff ( GetApes ( you ) ^ Heike ) ;
46309: LD_ADDR_VAR 0 4
46313: PUSH
46314: LD_INT 22
46316: PUSH
46317: LD_EXP 2
46321: PUSH
46322: EMPTY
46323: LIST
46324: LIST
46325: PPUSH
46326: CALL_OW 69
46330: PUSH
46331: LD_EXP 2
46335: PPUSH
46336: CALL 42703 0 1
46340: PUSH
46341: LD_EXP 9
46345: ADD
46346: DIFF
46347: ST_TO_ADDR
// if UnitFilter ( temp_list_2 , [ f_class , class_soldier ] ) = 0 then
46348: LD_VAR 0 4
46352: PPUSH
46353: LD_INT 25
46355: PUSH
46356: LD_INT 1
46358: PUSH
46359: EMPTY
46360: LIST
46361: LIST
46362: PPUSH
46363: CALL_OW 72
46367: PUSH
46368: LD_INT 0
46370: EQUAL
46371: IFFALSE 46386
// temp_list = [ sel_change_class ] else
46373: LD_ADDR_VAR 0 3
46377: PUSH
46378: LD_INT -5
46380: PUSH
46381: EMPTY
46382: LIST
46383: ST_TO_ADDR
46384: GO 46397
// temp_list = [ sel_dont_change_class ] ;
46386: LD_ADDR_VAR 0 3
46390: PUSH
46391: LD_INT -6
46393: PUSH
46394: EMPTY
46395: LIST
46396: ST_TO_ADDR
// temp_list = CharacterSelection (  , 1 , 1 , [ sel_dont_change_class , sel_not_hired , sel_not_changeable , Heike , sel_changeable ] ^ temp_list ^ temp_list_2 , [ [ class_soldier , 1 ] ] ) ;
46397: LD_ADDR_VAR 0 3
46401: PUSH
46402: LD_STRING 
46404: PPUSH
46405: LD_INT 1
46407: PPUSH
46408: LD_INT 1
46410: PPUSH
46411: LD_INT -6
46413: PUSH
46414: LD_INT -2
46416: PUSH
46417: LD_INT -4
46419: PUSH
46420: LD_EXP 9
46424: PUSH
46425: LD_INT -3
46427: PUSH
46428: EMPTY
46429: LIST
46430: LIST
46431: LIST
46432: LIST
46433: LIST
46434: PUSH
46435: LD_VAR 0 3
46439: ADD
46440: PUSH
46441: LD_VAR 0 4
46445: ADD
46446: PPUSH
46447: LD_INT 1
46449: PUSH
46450: LD_INT 1
46452: PUSH
46453: EMPTY
46454: LIST
46455: LIST
46456: PUSH
46457: EMPTY
46458: LIST
46459: PPUSH
46460: CALL_OW 42
46464: ST_TO_ADDR
// temp_unit = temp_list [ 1 ] ;
46465: LD_ADDR_VAR 0 2
46469: PUSH
46470: LD_VAR 0 3
46474: PUSH
46475: LD_INT 1
46477: ARRAY
46478: ST_TO_ADDR
// scout = temp_unit ;
46479: LD_ADDR_VAR 0 7
46483: PUSH
46484: LD_VAR 0 2
46488: ST_TO_ADDR
// dwait ( 0 0$0.2 ) ;
46489: LD_INT 7
46491: PPUSH
46492: CALL_OW 68
// case temp_unit of Sonya :
46496: LD_VAR 0 2
46500: PUSH
46501: LD_EXP 10
46505: DOUBLE
46506: EQUAL
46507: IFTRUE 46511
46509: GO 46526
46511: POP
// Say ( temp_unit , D2-So-1 ) ; Oswald :
46512: LD_VAR 0 2
46516: PPUSH
46517: LD_STRING D2-So-1
46519: PPUSH
46520: CALL_OW 88
46524: GO 46895
46526: LD_EXP 11
46530: DOUBLE
46531: EQUAL
46532: IFTRUE 46536
46534: GO 46571
46536: POP
// begin if oswald_is_substitute then
46537: LD_EXP 80
46541: IFFALSE 46557
// Say ( temp_unit , D2-Os_alt-2 ) else
46543: LD_VAR 0 2
46547: PPUSH
46548: LD_STRING D2-Os_alt-2
46550: PPUSH
46551: CALL_OW 88
46555: GO 46569
// Say ( temp_unit , D2-Os-2 ) ;
46557: LD_VAR 0 2
46561: PPUSH
46562: LD_STRING D2-Os-2
46564: PPUSH
46565: CALL_OW 88
// end ; Ralph :
46569: GO 46895
46571: LD_EXP 12
46575: DOUBLE
46576: EQUAL
46577: IFTRUE 46581
46579: GO 46596
46581: POP
// Say ( temp_unit , D2-Ra-1 ) ; Kowalski :
46582: LD_VAR 0 2
46586: PPUSH
46587: LD_STRING D2-Ra-1
46589: PPUSH
46590: CALL_OW 88
46594: GO 46895
46596: LD_EXP 13
46600: DOUBLE
46601: EQUAL
46602: IFTRUE 46606
46604: GO 46621
46606: POP
// Say ( temp_unit , D2-Ko-1 ) ; Evelyn :
46607: LD_VAR 0 2
46611: PPUSH
46612: LD_STRING D2-Ko-1
46614: PPUSH
46615: CALL_OW 88
46619: GO 46895
46621: LD_EXP 14
46625: DOUBLE
46626: EQUAL
46627: IFTRUE 46631
46629: GO 46646
46631: POP
// Say ( temp_unit , D2-Ev-1 ) ; Suze :
46632: LD_VAR 0 2
46636: PPUSH
46637: LD_STRING D2-Ev-1
46639: PPUSH
46640: CALL_OW 88
46644: GO 46895
46646: LD_EXP 15
46650: DOUBLE
46651: EQUAL
46652: IFTRUE 46656
46654: GO 46671
46656: POP
// Say ( temp_unit , D2-Su-1 ) ; Olaf :
46657: LD_VAR 0 2
46661: PPUSH
46662: LD_STRING D2-Su-1
46664: PPUSH
46665: CALL_OW 88
46669: GO 46895
46671: LD_EXP 16
46675: DOUBLE
46676: EQUAL
46677: IFTRUE 46681
46679: GO 46696
46681: POP
// Say ( temp_unit , D2-Olaf-2 ) ; Kurt :
46682: LD_VAR 0 2
46686: PPUSH
46687: LD_STRING D2-Olaf-2
46689: PPUSH
46690: CALL_OW 88
46694: GO 46895
46696: LD_EXP 17
46700: DOUBLE
46701: EQUAL
46702: IFTRUE 46706
46704: GO 46741
46706: POP
// begin if kurt_is_substitute then
46707: LD_EXP 81
46711: IFFALSE 46727
// Say ( temp_unit , D2-Ku_alt-1 ) else
46713: LD_VAR 0 2
46717: PPUSH
46718: LD_STRING D2-Ku_alt-1
46720: PPUSH
46721: CALL_OW 88
46725: GO 46739
// Say ( temp_unit , D2-Ku-1 ) ;
46727: LD_VAR 0 2
46731: PPUSH
46732: LD_STRING D2-Ku-1
46734: PPUSH
46735: CALL_OW 88
// end ; Dwayne :
46739: GO 46895
46741: LD_EXP 18
46745: DOUBLE
46746: EQUAL
46747: IFTRUE 46751
46749: GO 46766
46751: POP
// Say ( temp_unit , D2-Dw-1 ) ; MarkB :
46752: LD_VAR 0 2
46756: PPUSH
46757: LD_STRING D2-Dw-1
46759: PPUSH
46760: CALL_OW 88
46764: GO 46895
46766: LD_EXP 19
46770: DOUBLE
46771: EQUAL
46772: IFTRUE 46776
46774: GO 46791
46776: POP
// Say ( temp_unit , D2-Ma-1 ) ; Aviradze :
46777: LD_VAR 0 2
46781: PPUSH
46782: LD_STRING D2-Ma-1
46784: PPUSH
46785: CALL_OW 88
46789: GO 46895
46791: LD_EXP 20
46795: DOUBLE
46796: EQUAL
46797: IFTRUE 46801
46799: GO 46828
46801: POP
// begin Say ( temp_unit , D2-Av-1 ) ;
46802: LD_VAR 0 2
46806: PPUSH
46807: LD_STRING D2-Av-1
46809: PPUSH
46810: CALL_OW 88
// Say ( Heike , D2-H-3 ) ;
46814: LD_EXP 9
46818: PPUSH
46819: LD_STRING D2-H-3
46821: PPUSH
46822: CALL_OW 88
// end ; Swansson :
46826: GO 46895
46828: LD_EXP 21
46832: DOUBLE
46833: EQUAL
46834: IFTRUE 46838
46836: GO 46853
46838: POP
// Say ( temp_unit , D2-Sw-1 ) ; else
46839: LD_VAR 0 2
46843: PPUSH
46844: LD_STRING D2-Sw-1
46846: PPUSH
46847: CALL_OW 88
46851: GO 46895
46853: POP
// begin if GetSex ( temp_unit ) = sex_male then
46854: LD_VAR 0 2
46858: PPUSH
46859: CALL_OW 258
46863: PUSH
46864: LD_INT 1
46866: EQUAL
46867: IFFALSE 46883
// Say ( temp_unit , D2-SomeM-2 ) else
46869: LD_VAR 0 2
46873: PPUSH
46874: LD_STRING D2-SomeM-2
46876: PPUSH
46877: CALL_OW 88
46881: GO 46895
// Say ( temp_unit , D2-SomeF-2 ) ;
46883: LD_VAR 0 2
46887: PPUSH
46888: LD_STRING D2-SomeF-2
46890: PPUSH
46891: CALL_OW 88
// end ; end ; DialogueOff ;
46895: CALL_OW 7
// SetSide ( scout , scout_side ) ;
46899: LD_VAR 0 7
46903: PPUSH
46904: LD_EXP 7
46908: PPUSH
46909: CALL_OW 235
// repeat wait ( 0 0$0.7 ) ;
46913: LD_INT 24
46915: PPUSH
46916: CALL_OW 67
// if IsPlaced ( scout ) then
46920: LD_VAR 0 7
46924: PPUSH
46925: CALL_OW 305
46929: IFFALSE 47034
// case GetType ( IsInUnit ( scout ) ) of unit_building :
46931: LD_VAR 0 7
46935: PPUSH
46936: CALL_OW 310
46940: PPUSH
46941: CALL_OW 247
46945: PUSH
46946: LD_INT 3
46948: DOUBLE
46949: EQUAL
46950: IFTRUE 46954
46952: GO 46966
46954: POP
// ComExitBuilding ( scout ) ; unit_vehicle :
46955: LD_VAR 0 7
46959: PPUSH
46960: CALL_OW 122
46964: GO 47034
46966: LD_INT 2
46968: DOUBLE
46969: EQUAL
46970: IFTRUE 46974
46972: GO 46986
46974: POP
// ComExitVehicle ( scout ) ; else
46975: LD_VAR 0 7
46979: PPUSH
46980: CALL_OW 121
46984: GO 47034
46986: POP
// begin if GetDistUnitXY ( scout , 143 , 117 ) > 1 then
46987: LD_VAR 0 7
46991: PPUSH
46992: LD_INT 143
46994: PPUSH
46995: LD_INT 117
46997: PPUSH
46998: CALL_OW 297
47002: PUSH
47003: LD_INT 1
47005: GREATER
47006: IFFALSE 47025
// ComMoveXY ( scout , 143 , 117 ) else
47008: LD_VAR 0 7
47012: PPUSH
47013: LD_INT 143
47015: PPUSH
47016: LD_INT 117
47018: PPUSH
47019: CALL_OW 111
47023: GO 47034
// RemoveUnit ( scout ) ;
47025: LD_VAR 0 7
47029: PPUSH
47030: CALL_OW 64
// end ; end ; if IsPlaced ( cargo_bay ) then
47034: LD_VAR 0 5
47038: PPUSH
47039: CALL_OW 305
47043: IFFALSE 47140
// if GetResourceAmountXY ( crate_hex [ 1 ] , crate_hex [ 2 ] ) > 0 then
47045: LD_VAR 0 8
47049: PUSH
47050: LD_INT 1
47052: ARRAY
47053: PPUSH
47054: LD_VAR 0 8
47058: PUSH
47059: LD_INT 2
47061: ARRAY
47062: PPUSH
47063: CALL_OW 284
47067: PUSH
47068: LD_INT 0
47070: GREATER
47071: IFFALSE 47102
// ComGet ( cargo_bay , crate_hex [ 1 ] , crate_hex [ 2 ] ) else
47073: LD_VAR 0 5
47077: PPUSH
47078: LD_VAR 0 8
47082: PUSH
47083: LD_INT 1
47085: ARRAY
47086: PPUSH
47087: LD_VAR 0 8
47091: PUSH
47092: LD_INT 2
47094: ARRAY
47095: PPUSH
47096: CALL_OW 160
47100: GO 47140
// if not IsInArea ( cargo_bay , ru_enter_area ) then
47102: LD_VAR 0 5
47106: PPUSH
47107: LD_INT 10
47109: PPUSH
47110: CALL_OW 308
47114: NOT
47115: IFFALSE 47131
// ComMoveToArea ( cargo_bay , ru_enter_area ) else
47117: LD_VAR 0 5
47121: PPUSH
47122: LD_INT 10
47124: PPUSH
47125: CALL_OW 113
47129: GO 47140
// DestroyUnit ( cargo_bay ) ;
47131: LD_VAR 0 5
47135: PPUSH
47136: CALL_OW 65
// until not IsPlaced ( scout ) and not IsPlaced ( cargo_bay ) ;
47140: LD_VAR 0 7
47144: PPUSH
47145: CALL_OW 305
47149: NOT
47150: PUSH
47151: LD_VAR 0 5
47155: PPUSH
47156: CALL_OW 305
47160: NOT
47161: AND
47162: IFFALSE 46913
// wait ( Rand ( 5 5$0 , 6 6$0 ) ) ;
47164: LD_INT 10500
47166: PPUSH
47167: LD_INT 12600
47169: PPUSH
47170: CALL_OW 12
47174: PPUSH
47175: CALL_OW 67
// SetDir ( scout , 5 ) ;
47179: LD_VAR 0 7
47183: PPUSH
47184: LD_INT 5
47186: PPUSH
47187: CALL_OW 233
// i = 1 ;
47191: LD_ADDR_VAR 0 1
47195: PUSH
47196: LD_INT 1
47198: ST_TO_ADDR
// while not IsPlaced ( scout ) do
47199: LD_VAR 0 7
47203: PPUSH
47204: CALL_OW 305
47208: NOT
47209: IFFALSE 47257
// begin PlaceUnitXYR ( scout , 143 , 117 , i , false ) ;
47211: LD_VAR 0 7
47215: PPUSH
47216: LD_INT 143
47218: PPUSH
47219: LD_INT 117
47221: PPUSH
47222: LD_VAR 0 1
47226: PPUSH
47227: LD_INT 0
47229: PPUSH
47230: CALL_OW 50
// i = i + 1 ;
47234: LD_ADDR_VAR 0 1
47238: PUSH
47239: LD_VAR 0 1
47243: PUSH
47244: LD_INT 1
47246: PLUS
47247: ST_TO_ADDR
// wait ( 0 0$2 ) ;
47248: LD_INT 70
47250: PPUSH
47251: CALL_OW 67
// end ;
47255: GO 47199
// while not See ( you , scout ) do
47257: LD_EXP 2
47261: PPUSH
47262: LD_VAR 0 7
47266: PPUSH
47267: CALL_OW 292
47271: NOT
47272: IFFALSE 47344
// begin wait ( 0 0$1 ) ;
47274: LD_INT 35
47276: PPUSH
47277: CALL_OW 67
// temp_unit = NearestUnitToUnit ( FilterAllUnits ( [ f_side , you ] ) , scout ) ;
47281: LD_ADDR_VAR 0 2
47285: PUSH
47286: LD_INT 22
47288: PUSH
47289: LD_EXP 2
47293: PUSH
47294: EMPTY
47295: LIST
47296: LIST
47297: PPUSH
47298: CALL_OW 69
47302: PPUSH
47303: LD_VAR 0 7
47307: PPUSH
47308: CALL_OW 74
47312: ST_TO_ADDR
// ComMoveXY ( scout , GetX ( temp_unit ) , GetY ( temp_unit ) ) ;
47313: LD_VAR 0 7
47317: PPUSH
47318: LD_VAR 0 2
47322: PPUSH
47323: CALL_OW 250
47327: PPUSH
47328: LD_VAR 0 2
47332: PPUSH
47333: CALL_OW 251
47337: PPUSH
47338: CALL_OW 111
// end ;
47342: GO 47257
// CenterOnUnits ( scout ) ;
47344: LD_VAR 0 7
47348: PPUSH
47349: CALL_OW 85
// SetSide ( scout , you ) ;
47353: LD_VAR 0 7
47357: PPUSH
47358: LD_EXP 2
47362: PPUSH
47363: CALL_OW 235
// ComStop ( scout ) ;
47367: LD_VAR 0 7
47371: PPUSH
47372: CALL_OW 141
// DialogueOn ;
47376: CALL_OW 6
// Say ( Heike , D3-H-1 ) ;
47380: LD_EXP 9
47384: PPUSH
47385: LD_STRING D3-H-1
47387: PPUSH
47388: CALL_OW 88
// temp_unit = scout ;
47392: LD_ADDR_VAR 0 2
47396: PUSH
47397: LD_VAR 0 7
47401: ST_TO_ADDR
// case temp_unit of Sonya :
47402: LD_VAR 0 2
47406: PUSH
47407: LD_EXP 10
47411: DOUBLE
47412: EQUAL
47413: IFTRUE 47417
47415: GO 47432
47417: POP
// Say ( temp_unit , D3-So-1 ) ; Oswald :
47418: LD_VAR 0 2
47422: PPUSH
47423: LD_STRING D3-So-1
47425: PPUSH
47426: CALL_OW 88
47430: GO 47862
47432: LD_EXP 11
47436: DOUBLE
47437: EQUAL
47438: IFTRUE 47442
47440: GO 47477
47442: POP
// begin if oswald_is_substitute then
47443: LD_EXP 80
47447: IFFALSE 47463
// Say ( temp_unit , D3-Os_alt-1 ) else
47449: LD_VAR 0 2
47453: PPUSH
47454: LD_STRING D3-Os_alt-1
47456: PPUSH
47457: CALL_OW 88
47461: GO 47475
// Say ( temp_unit , D3-Os-1 ) ;
47463: LD_VAR 0 2
47467: PPUSH
47468: LD_STRING D3-Os-1
47470: PPUSH
47471: CALL_OW 88
// end ; Ralph :
47475: GO 47862
47477: LD_EXP 12
47481: DOUBLE
47482: EQUAL
47483: IFTRUE 47487
47485: GO 47551
47487: POP
// begin Say ( temp_unit , D3-Ra-1 ) ;
47488: LD_VAR 0 2
47492: PPUSH
47493: LD_STRING D3-Ra-1
47495: PPUSH
47496: CALL_OW 88
// if IsOk ( Sonya ) then
47500: LD_EXP 10
47504: PPUSH
47505: CALL_OW 302
47509: IFFALSE 47525
// Say ( Sonya , D3-So-2a ) else
47511: LD_EXP 10
47515: PPUSH
47516: LD_STRING D3-So-2a
47518: PPUSH
47519: CALL_OW 88
47523: GO 47537
// Say ( Heike , D3-H-2a ) ;
47525: LD_EXP 9
47529: PPUSH
47530: LD_STRING D3-H-2a
47532: PPUSH
47533: CALL_OW 88
// Say ( Ralph , D3-Ra-2 ) ;
47537: LD_EXP 12
47541: PPUSH
47542: LD_STRING D3-Ra-2
47544: PPUSH
47545: CALL_OW 88
// end ; Kowalski :
47549: GO 47862
47551: LD_EXP 13
47555: DOUBLE
47556: EQUAL
47557: IFTRUE 47561
47559: GO 47576
47561: POP
// Say ( temp_unit , D3-Ko-1 ) ; Evelyn :
47562: LD_VAR 0 2
47566: PPUSH
47567: LD_STRING D3-Ko-1
47569: PPUSH
47570: CALL_OW 88
47574: GO 47862
47576: LD_EXP 14
47580: DOUBLE
47581: EQUAL
47582: IFTRUE 47586
47584: GO 47601
47586: POP
// Say ( temp_unit , D3-Ev-1 ) ; Suze :
47587: LD_VAR 0 2
47591: PPUSH
47592: LD_STRING D3-Ev-1
47594: PPUSH
47595: CALL_OW 88
47599: GO 47862
47601: LD_EXP 15
47605: DOUBLE
47606: EQUAL
47607: IFTRUE 47611
47609: GO 47626
47611: POP
// Say ( temp_unit , D3-Su-1 ) ; Olaf :
47612: LD_VAR 0 2
47616: PPUSH
47617: LD_STRING D3-Su-1
47619: PPUSH
47620: CALL_OW 88
47624: GO 47862
47626: LD_EXP 16
47630: DOUBLE
47631: EQUAL
47632: IFTRUE 47636
47634: GO 47651
47636: POP
// Say ( temp_unit , D3-Olaf-1 ) ; Kurt :
47637: LD_VAR 0 2
47641: PPUSH
47642: LD_STRING D3-Olaf-1
47644: PPUSH
47645: CALL_OW 88
47649: GO 47862
47651: LD_EXP 17
47655: DOUBLE
47656: EQUAL
47657: IFTRUE 47661
47659: GO 47696
47661: POP
// begin if kurt_is_substitute then
47662: LD_EXP 81
47666: IFFALSE 47682
// Say ( temp_unit , D3-Ku_alt-1 ) else
47668: LD_VAR 0 2
47672: PPUSH
47673: LD_STRING D3-Ku_alt-1
47675: PPUSH
47676: CALL_OW 88
47680: GO 47694
// Say ( temp_unit , D3-Ku-1 ) ;
47682: LD_VAR 0 2
47686: PPUSH
47687: LD_STRING D3-Ku-1
47689: PPUSH
47690: CALL_OW 88
// end ; Dwayne :
47694: GO 47862
47696: LD_EXP 18
47700: DOUBLE
47701: EQUAL
47702: IFTRUE 47706
47704: GO 47721
47706: POP
// Say ( temp_unit , D3-Dw-1 ) ; MarkB :
47707: LD_VAR 0 2
47711: PPUSH
47712: LD_STRING D3-Dw-1
47714: PPUSH
47715: CALL_OW 88
47719: GO 47862
47721: LD_EXP 19
47725: DOUBLE
47726: EQUAL
47727: IFTRUE 47731
47729: GO 47746
47731: POP
// Say ( temp_unit , D3-Ma-1 ) ; Aviradze :
47732: LD_VAR 0 2
47736: PPUSH
47737: LD_STRING D3-Ma-1
47739: PPUSH
47740: CALL_OW 88
47744: GO 47862
47746: LD_EXP 20
47750: DOUBLE
47751: EQUAL
47752: IFTRUE 47756
47754: GO 47795
47756: POP
// begin Say ( temp_unit , D3-Av-1 ) ;
47757: LD_VAR 0 2
47761: PPUSH
47762: LD_STRING D3-Av-1
47764: PPUSH
47765: CALL_OW 88
// Say ( Heike , D3-H-2b ) ;
47769: LD_EXP 9
47773: PPUSH
47774: LD_STRING D3-H-2b
47776: PPUSH
47777: CALL_OW 88
// Say ( temp_unit , D3-Av-2 ) ;
47781: LD_VAR 0 2
47785: PPUSH
47786: LD_STRING D3-Av-2
47788: PPUSH
47789: CALL_OW 88
// end ; Swansson :
47793: GO 47862
47795: LD_EXP 21
47799: DOUBLE
47800: EQUAL
47801: IFTRUE 47805
47803: GO 47820
47805: POP
// Say ( temp_unit , D3-Sw-1 ) ; else
47806: LD_VAR 0 2
47810: PPUSH
47811: LD_STRING D3-Sw-1
47813: PPUSH
47814: CALL_OW 88
47818: GO 47862
47820: POP
// begin if GetSex ( temp_unit ) = sex_male then
47821: LD_VAR 0 2
47825: PPUSH
47826: CALL_OW 258
47830: PUSH
47831: LD_INT 1
47833: EQUAL
47834: IFFALSE 47850
// Say ( temp_unit , D3-SomeM-1 ) else
47836: LD_VAR 0 2
47840: PPUSH
47841: LD_STRING D3-SomeM-1
47843: PPUSH
47844: CALL_OW 88
47848: GO 47862
// Say ( temp_unit , D3-SomeF-1 ) ;
47850: LD_VAR 0 2
47854: PPUSH
47855: LD_STRING D3-SomeF-1
47857: PPUSH
47858: CALL_OW 88
// end ; end ; if SeeGreyArea ( you , Ru_base ) then
47862: LD_EXP 2
47866: PPUSH
47867: LD_INT 3
47869: PPUSH
47870: CALL_OW 452
47874: IFFALSE 47890
// begin Say ( Heike , D3-H-a-2 ) ;
47876: LD_EXP 9
47880: PPUSH
47881: LD_STRING D3-H-a-2
47883: PPUSH
47884: CALL_OW 88
// end else
47888: GO 47902
// begin Say ( Heike , D3-H-b-2 ) ;
47890: LD_EXP 9
47894: PPUSH
47895: LD_STRING D3-H-b-2
47897: PPUSH
47898: CALL_OW 88
// end ; case temp_unit of Sonya :
47902: LD_VAR 0 2
47906: PUSH
47907: LD_EXP 10
47911: DOUBLE
47912: EQUAL
47913: IFTRUE 47917
47915: GO 47932
47917: POP
// Say ( temp_unit , D3-So-2 ) ; Oswald :
47918: LD_VAR 0 2
47922: PPUSH
47923: LD_STRING D3-So-2
47925: PPUSH
47926: CALL_OW 88
47930: GO 48289
47932: LD_EXP 11
47936: DOUBLE
47937: EQUAL
47938: IFTRUE 47942
47940: GO 47977
47942: POP
// begin if oswald_is_substitute then
47943: LD_EXP 80
47947: IFFALSE 47963
// Say ( temp_unit , D3-Os_alt-2 ) else
47949: LD_VAR 0 2
47953: PPUSH
47954: LD_STRING D3-Os_alt-2
47956: PPUSH
47957: CALL_OW 88
47961: GO 47975
// Say ( temp_unit , D3-Os-2 ) ;
47963: LD_VAR 0 2
47967: PPUSH
47968: LD_STRING D3-Os-2
47970: PPUSH
47971: CALL_OW 88
// end ; Ralph :
47975: GO 48289
47977: LD_EXP 12
47981: DOUBLE
47982: EQUAL
47983: IFTRUE 47987
47985: GO 48002
47987: POP
// Say ( temp_unit , D3-Ra-3 ) ; Kowalski :
47988: LD_VAR 0 2
47992: PPUSH
47993: LD_STRING D3-Ra-3
47995: PPUSH
47996: CALL_OW 88
48000: GO 48289
48002: LD_EXP 13
48006: DOUBLE
48007: EQUAL
48008: IFTRUE 48012
48010: GO 48027
48012: POP
// Say ( temp_unit , D3-Ko-2 ) ; Evelyn :
48013: LD_VAR 0 2
48017: PPUSH
48018: LD_STRING D3-Ko-2
48020: PPUSH
48021: CALL_OW 88
48025: GO 48289
48027: LD_EXP 14
48031: DOUBLE
48032: EQUAL
48033: IFTRUE 48037
48035: GO 48052
48037: POP
// Say ( temp_unit , D3-Ev-2 ) ; Suze :
48038: LD_VAR 0 2
48042: PPUSH
48043: LD_STRING D3-Ev-2
48045: PPUSH
48046: CALL_OW 88
48050: GO 48289
48052: LD_EXP 15
48056: DOUBLE
48057: EQUAL
48058: IFTRUE 48062
48060: GO 48077
48062: POP
// Say ( temp_unit , D3-Su-2 ) ; Olaf :
48063: LD_VAR 0 2
48067: PPUSH
48068: LD_STRING D3-Su-2
48070: PPUSH
48071: CALL_OW 88
48075: GO 48289
48077: LD_EXP 16
48081: DOUBLE
48082: EQUAL
48083: IFTRUE 48087
48085: GO 48102
48087: POP
// Say ( temp_unit , D3-Olaf-2 ) ; Kurt :
48088: LD_VAR 0 2
48092: PPUSH
48093: LD_STRING D3-Olaf-2
48095: PPUSH
48096: CALL_OW 88
48100: GO 48289
48102: LD_EXP 17
48106: DOUBLE
48107: EQUAL
48108: IFTRUE 48112
48110: GO 48147
48112: POP
// begin if kurt_is_substitute then
48113: LD_EXP 81
48117: IFFALSE 48133
// Say ( temp_unit , D3-Ku_alt-2 ) else
48119: LD_VAR 0 2
48123: PPUSH
48124: LD_STRING D3-Ku_alt-2
48126: PPUSH
48127: CALL_OW 88
48131: GO 48145
// Say ( temp_unit , D3-Ku-2 ) ;
48133: LD_VAR 0 2
48137: PPUSH
48138: LD_STRING D3-Ku-2
48140: PPUSH
48141: CALL_OW 88
// end ; Dwayne :
48145: GO 48289
48147: LD_EXP 18
48151: DOUBLE
48152: EQUAL
48153: IFTRUE 48157
48155: GO 48172
48157: POP
// Say ( temp_unit , D3-Dw-2 ) ; MarkB :
48158: LD_VAR 0 2
48162: PPUSH
48163: LD_STRING D3-Dw-2
48165: PPUSH
48166: CALL_OW 88
48170: GO 48289
48172: LD_EXP 19
48176: DOUBLE
48177: EQUAL
48178: IFTRUE 48182
48180: GO 48197
48182: POP
// Say ( temp_unit , D3-Ma-2 ) ; Aviradze :
48183: LD_VAR 0 2
48187: PPUSH
48188: LD_STRING D3-Ma-2
48190: PPUSH
48191: CALL_OW 88
48195: GO 48289
48197: LD_EXP 20
48201: DOUBLE
48202: EQUAL
48203: IFTRUE 48207
48205: GO 48222
48207: POP
// Say ( temp_unit , D3-Av-3 ) ; Swansson :
48208: LD_VAR 0 2
48212: PPUSH
48213: LD_STRING D3-Av-3
48215: PPUSH
48216: CALL_OW 88
48220: GO 48289
48222: LD_EXP 21
48226: DOUBLE
48227: EQUAL
48228: IFTRUE 48232
48230: GO 48247
48232: POP
// Say ( temp_unit , D3-Sw-2 ) ; else
48233: LD_VAR 0 2
48237: PPUSH
48238: LD_STRING D3-Sw-2
48240: PPUSH
48241: CALL_OW 88
48245: GO 48289
48247: POP
// begin if GetSex ( temp_unit ) = sex_male then
48248: LD_VAR 0 2
48252: PPUSH
48253: CALL_OW 258
48257: PUSH
48258: LD_INT 1
48260: EQUAL
48261: IFFALSE 48277
// Say ( temp_unit , D3-SomeM-2 ) else
48263: LD_VAR 0 2
48267: PPUSH
48268: LD_STRING D3-SomeM-2
48270: PPUSH
48271: CALL_OW 88
48275: GO 48289
// Say ( temp_unit , D3-SomeF-2 ) ;
48277: LD_VAR 0 2
48281: PPUSH
48282: LD_STRING D3-SomeF-2
48284: PPUSH
48285: CALL_OW 88
// end ; end ; Say ( Heike , D3-H-3 ) ;
48289: LD_EXP 9
48293: PPUSH
48294: LD_STRING D3-H-3
48296: PPUSH
48297: CALL_OW 88
// temp_list = UnitFilter ( [ Sonya , Ralph , Kowalski , Suze , Olaf , Dwayne ] , [ f_ok ] ) ;
48301: LD_ADDR_VAR 0 3
48305: PUSH
48306: LD_EXP 10
48310: PUSH
48311: LD_EXP 12
48315: PUSH
48316: LD_EXP 13
48320: PUSH
48321: LD_EXP 15
48325: PUSH
48326: LD_EXP 16
48330: PUSH
48331: LD_EXP 18
48335: PUSH
48336: EMPTY
48337: LIST
48338: LIST
48339: LIST
48340: LIST
48341: LIST
48342: LIST
48343: PPUSH
48344: LD_INT 50
48346: PUSH
48347: EMPTY
48348: LIST
48349: PPUSH
48350: CALL_OW 72
48354: ST_TO_ADDR
// if temp_list > 0 then
48355: LD_VAR 0 3
48359: PUSH
48360: LD_INT 0
48362: GREATER
48363: IFFALSE 48594
// begin temp_unit = temp_list [ Rand ( 1 , temp_list ) ] ;
48365: LD_ADDR_VAR 0 2
48369: PUSH
48370: LD_VAR 0 3
48374: PUSH
48375: LD_INT 1
48377: PPUSH
48378: LD_VAR 0 3
48382: PPUSH
48383: CALL_OW 12
48387: ARRAY
48388: ST_TO_ADDR
// case temp_unit of Sonya :
48389: LD_VAR 0 2
48393: PUSH
48394: LD_EXP 10
48398: DOUBLE
48399: EQUAL
48400: IFTRUE 48404
48402: GO 48419
48404: POP
// Say ( temp_unit , D3-So-3 ) ; Ralph :
48405: LD_VAR 0 2
48409: PPUSH
48410: LD_STRING D3-So-3
48412: PPUSH
48413: CALL_OW 88
48417: GO 48545
48419: LD_EXP 12
48423: DOUBLE
48424: EQUAL
48425: IFTRUE 48429
48427: GO 48444
48429: POP
// Say ( temp_unit , D3-Ra-4 ) ; Kowalski :
48430: LD_VAR 0 2
48434: PPUSH
48435: LD_STRING D3-Ra-4
48437: PPUSH
48438: CALL_OW 88
48442: GO 48545
48444: LD_EXP 13
48448: DOUBLE
48449: EQUAL
48450: IFTRUE 48454
48452: GO 48469
48454: POP
// Say ( temp_unit , D3-Ko-3 ) ; Suze :
48455: LD_VAR 0 2
48459: PPUSH
48460: LD_STRING D3-Ko-3
48462: PPUSH
48463: CALL_OW 88
48467: GO 48545
48469: LD_EXP 15
48473: DOUBLE
48474: EQUAL
48475: IFTRUE 48479
48477: GO 48494
48479: POP
// Say ( temp_unit , D3-Su-3 ) ; Olaf :
48480: LD_VAR 0 2
48484: PPUSH
48485: LD_STRING D3-Su-3
48487: PPUSH
48488: CALL_OW 88
48492: GO 48545
48494: LD_EXP 16
48498: DOUBLE
48499: EQUAL
48500: IFTRUE 48504
48502: GO 48519
48504: POP
// Say ( temp_unit , D3-Olaf-3 ) ; Dwayne :
48505: LD_VAR 0 2
48509: PPUSH
48510: LD_STRING D3-Olaf-3
48512: PPUSH
48513: CALL_OW 88
48517: GO 48545
48519: LD_EXP 18
48523: DOUBLE
48524: EQUAL
48525: IFTRUE 48529
48527: GO 48544
48529: POP
// Say ( temp_unit , D3-Dw-3 ) ; end ;
48530: LD_VAR 0 2
48534: PPUSH
48535: LD_STRING D3-Dw-3
48537: PPUSH
48538: CALL_OW 88
48542: GO 48545
48544: POP
// if temp_unit in [ Sonya , Olaf ] then
48545: LD_VAR 0 2
48549: PUSH
48550: LD_EXP 10
48554: PUSH
48555: LD_EXP 16
48559: PUSH
48560: EMPTY
48561: LIST
48562: LIST
48563: IN
48564: IFFALSE 48580
// Say ( Heike , D3-H-a-4 ) else
48566: LD_EXP 9
48570: PPUSH
48571: LD_STRING D3-H-a-4
48573: PPUSH
48574: CALL_OW 88
48578: GO 48592
// Say ( Heike , D3-H-b-4 ) ;
48580: LD_EXP 9
48584: PPUSH
48585: LD_STRING D3-H-b-4
48587: PPUSH
48588: CALL_OW 88
// end else
48592: GO 48606
// begin Say ( Heike , D3-H-c-4 ) ;
48594: LD_EXP 9
48598: PPUSH
48599: LD_STRING D3-H-c-4
48601: PPUSH
48602: CALL_OW 88
// end ; Say ( Heike , D3-H-5 ) ;
48606: LD_EXP 9
48610: PPUSH
48611: LD_STRING D3-H-5
48613: PPUSH
48614: CALL_OW 88
// if yashin_alive then
48618: LD_EXP 85
48622: IFFALSE 49023
// begin case temp_unit of Sonya :
48624: LD_VAR 0 2
48628: PUSH
48629: LD_EXP 10
48633: DOUBLE
48634: EQUAL
48635: IFTRUE 48639
48637: GO 48654
48639: POP
// Say ( temp_unit , D3-So-a-4 ) ; Oswald :
48640: LD_VAR 0 2
48644: PPUSH
48645: LD_STRING D3-So-a-4
48647: PPUSH
48648: CALL_OW 88
48652: GO 49011
48654: LD_EXP 11
48658: DOUBLE
48659: EQUAL
48660: IFTRUE 48664
48662: GO 48699
48664: POP
// begin if oswald_is_substitute then
48665: LD_EXP 80
48669: IFFALSE 48685
// Say ( temp_unit , D3-Os_alt-a-3 ) else
48671: LD_VAR 0 2
48675: PPUSH
48676: LD_STRING D3-Os_alt-a-3
48678: PPUSH
48679: CALL_OW 88
48683: GO 48697
// Say ( temp_unit , D3-Os-a-3 ) ;
48685: LD_VAR 0 2
48689: PPUSH
48690: LD_STRING D3-Os-a-3
48692: PPUSH
48693: CALL_OW 88
// end ; Ralph :
48697: GO 49011
48699: LD_EXP 12
48703: DOUBLE
48704: EQUAL
48705: IFTRUE 48709
48707: GO 48724
48709: POP
// Say ( temp_unit , D3-Ra-a-5 ) ; Kowalski :
48710: LD_VAR 0 2
48714: PPUSH
48715: LD_STRING D3-Ra-a-5
48717: PPUSH
48718: CALL_OW 88
48722: GO 49011
48724: LD_EXP 13
48728: DOUBLE
48729: EQUAL
48730: IFTRUE 48734
48732: GO 48749
48734: POP
// Say ( temp_unit , D3-Ko-a-4 ) ; Evelyn :
48735: LD_VAR 0 2
48739: PPUSH
48740: LD_STRING D3-Ko-a-4
48742: PPUSH
48743: CALL_OW 88
48747: GO 49011
48749: LD_EXP 14
48753: DOUBLE
48754: EQUAL
48755: IFTRUE 48759
48757: GO 48774
48759: POP
// Say ( temp_unit , D3-Ev-a-3 ) ; Suze :
48760: LD_VAR 0 2
48764: PPUSH
48765: LD_STRING D3-Ev-a-3
48767: PPUSH
48768: CALL_OW 88
48772: GO 49011
48774: LD_EXP 15
48778: DOUBLE
48779: EQUAL
48780: IFTRUE 48784
48782: GO 48799
48784: POP
// Say ( temp_unit , D3-Su-a-4 ) ; Olaf :
48785: LD_VAR 0 2
48789: PPUSH
48790: LD_STRING D3-Su-a-4
48792: PPUSH
48793: CALL_OW 88
48797: GO 49011
48799: LD_EXP 16
48803: DOUBLE
48804: EQUAL
48805: IFTRUE 48809
48807: GO 48824
48809: POP
// Say ( temp_unit , D3-Olaf-a-4 ) ; Kurt :
48810: LD_VAR 0 2
48814: PPUSH
48815: LD_STRING D3-Olaf-a-4
48817: PPUSH
48818: CALL_OW 88
48822: GO 49011
48824: LD_EXP 17
48828: DOUBLE
48829: EQUAL
48830: IFTRUE 48834
48832: GO 48869
48834: POP
// begin if kurt_is_substitute then
48835: LD_EXP 81
48839: IFFALSE 48855
// Say ( temp_unit , D3-Ku_alt-a-3 ) else
48841: LD_VAR 0 2
48845: PPUSH
48846: LD_STRING D3-Ku_alt-a-3
48848: PPUSH
48849: CALL_OW 88
48853: GO 48867
// Say ( temp_unit , D3-Ku-a-3 ) ;
48855: LD_VAR 0 2
48859: PPUSH
48860: LD_STRING D3-Ku-a-3
48862: PPUSH
48863: CALL_OW 88
// end ; Dwayne :
48867: GO 49011
48869: LD_EXP 18
48873: DOUBLE
48874: EQUAL
48875: IFTRUE 48879
48877: GO 48894
48879: POP
// Say ( temp_unit , D3-Dw-a-4 ) ; MarkB :
48880: LD_VAR 0 2
48884: PPUSH
48885: LD_STRING D3-Dw-a-4
48887: PPUSH
48888: CALL_OW 88
48892: GO 49011
48894: LD_EXP 19
48898: DOUBLE
48899: EQUAL
48900: IFTRUE 48904
48902: GO 48919
48904: POP
// Say ( temp_unit , D3-Ma-a-3 ) ; Aviradze :
48905: LD_VAR 0 2
48909: PPUSH
48910: LD_STRING D3-Ma-a-3
48912: PPUSH
48913: CALL_OW 88
48917: GO 49011
48919: LD_EXP 20
48923: DOUBLE
48924: EQUAL
48925: IFTRUE 48929
48927: GO 48944
48929: POP
// Say ( temp_unit , D3-Av-a-4 ) ; Swansson :
48930: LD_VAR 0 2
48934: PPUSH
48935: LD_STRING D3-Av-a-4
48937: PPUSH
48938: CALL_OW 88
48942: GO 49011
48944: LD_EXP 21
48948: DOUBLE
48949: EQUAL
48950: IFTRUE 48954
48952: GO 48969
48954: POP
// Say ( temp_unit , D3-Sw-a-3 ) ; else
48955: LD_VAR 0 2
48959: PPUSH
48960: LD_STRING D3-Sw-a-3
48962: PPUSH
48963: CALL_OW 88
48967: GO 49011
48969: POP
// begin if GetSex ( temp_unit ) = sex_male then
48970: LD_VAR 0 2
48974: PPUSH
48975: CALL_OW 258
48979: PUSH
48980: LD_INT 1
48982: EQUAL
48983: IFFALSE 48999
// Say ( temp_unit , D3-SomeM-a-3 ) else
48985: LD_VAR 0 2
48989: PPUSH
48990: LD_STRING D3-SomeM-a-3
48992: PPUSH
48993: CALL_OW 88
48997: GO 49011
// Say ( temp_unit , D3-SomeF-a-3 ) ;
48999: LD_VAR 0 2
49003: PPUSH
49004: LD_STRING D3-SomeF-a-3
49006: PPUSH
49007: CALL_OW 88
// end ; end ; Say ( Heike , D3-H-a-6 ) ;
49011: LD_EXP 9
49015: PPUSH
49016: LD_STRING D3-H-a-6
49018: PPUSH
49019: CALL_OW 88
// end ; DialogueOff ;
49023: CALL_OW 7
// wait ( 0 0$0.2 ) ;
49027: LD_INT 7
49029: PPUSH
49030: CALL_OW 67
// ChangeMissionObjectives ( M2 ) ;
49034: LD_STRING M2
49036: PPUSH
49037: CALL_OW 337
// scout_event_over = true ;
49041: LD_ADDR_EXP 92
49045: PUSH
49046: LD_INT 1
49048: ST_TO_ADDR
// russians_allowed_to_attack_gensher_time = russians_allowed_to_attack_gensher_time + tick ;
49049: LD_ADDR_EXP 93
49053: PUSH
49054: LD_EXP 93
49058: PUSH
49059: LD_OWVAR 1
49063: PLUS
49064: ST_TO_ADDR
// end ;
49065: PPOPN 8
49067: END
// every 0 0$1 + 0 0$0.6 do var i ; var ignore_yellow_list , ignore_red_list ;
49068: GO 49070
49070: DISABLE
49071: LD_INT 0
49073: PPUSH
49074: PPUSH
49075: PPUSH
// begin ignore_yellow_list = [ ] ;
49076: LD_ADDR_VAR 0 2
49080: PUSH
49081: EMPTY
49082: ST_TO_ADDR
// ignore_red_list = [ ] ;
49083: LD_ADDR_VAR 0 3
49087: PUSH
49088: EMPTY
49089: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
49090: LD_INT 35
49092: PPUSH
49093: CALL_OW 67
// if game_phase > 1 then
49097: LD_EXP 88
49101: PUSH
49102: LD_INT 1
49104: GREATER
49105: IFFALSE 49109
// exit ;
49107: GO 49489
// if ContactTime ( [ you_alt , russians ] ) >= 0 0$8 then
49109: LD_EXP 5
49113: PUSH
49114: LD_EXP 3
49118: PUSH
49119: EMPTY
49120: LIST
49121: LIST
49122: PPUSH
49123: CALL_OW 462
49127: PUSH
49128: LD_INT 280
49130: GREATEREQUAL
49131: IFFALSE 49149
// begin ignore_yellow_list = [ ] ;
49133: LD_ADDR_VAR 0 2
49137: PUSH
49138: EMPTY
49139: ST_TO_ADDR
// ignore_red_list = [ ] ;
49140: LD_ADDR_VAR 0 3
49144: PUSH
49145: EMPTY
49146: ST_TO_ADDR
// continue ;
49147: GO 49090
// end ; for i in FilterAllUnits ( [ [ f_side , you_alt ] , [ f_type , unit_human ] ] ) do
49149: LD_ADDR_VAR 0 1
49153: PUSH
49154: LD_INT 22
49156: PUSH
49157: LD_EXP 5
49161: PUSH
49162: EMPTY
49163: LIST
49164: LIST
49165: PUSH
49166: LD_INT 21
49168: PUSH
49169: LD_INT 1
49171: PUSH
49172: EMPTY
49173: LIST
49174: LIST
49175: PUSH
49176: EMPTY
49177: LIST
49178: LIST
49179: PPUSH
49180: CALL_OW 69
49184: PUSH
49185: FOR_IN
49186: IFFALSE 49309
// if GetLives ( i ) <= 250 then
49188: LD_VAR 0 1
49192: PPUSH
49193: CALL_OW 256
49197: PUSH
49198: LD_INT 250
49200: LESSEQUAL
49201: IFFALSE 49248
// begin if not i in ignore_red_list then
49203: LD_VAR 0 1
49207: PUSH
49208: LD_VAR 0 3
49212: IN
49213: NOT
49214: IFFALSE 49246
// begin russian_interference_points = russian_interference_points + 1 ;
49216: LD_ADDR_EXP 96
49220: PUSH
49221: LD_EXP 96
49225: PUSH
49226: LD_INT 1
49228: PLUS
49229: ST_TO_ADDR
// ignore_red_list = ignore_red_list ^ i ;
49230: LD_ADDR_VAR 0 3
49234: PUSH
49235: LD_VAR 0 3
49239: PUSH
49240: LD_VAR 0 1
49244: ADD
49245: ST_TO_ADDR
// end ; end else
49246: GO 49307
// if i in ai_heal_these_humans [ 2 ] then
49248: LD_VAR 0 1
49252: PUSH
49253: LD_EXP 43
49257: PUSH
49258: LD_INT 2
49260: ARRAY
49261: IN
49262: IFFALSE 49307
// begin if not i in ignore_yellow_list then
49264: LD_VAR 0 1
49268: PUSH
49269: LD_VAR 0 2
49273: IN
49274: NOT
49275: IFFALSE 49307
// begin russian_interference_points = russian_interference_points + 1 ;
49277: LD_ADDR_EXP 96
49281: PUSH
49282: LD_EXP 96
49286: PUSH
49287: LD_INT 1
49289: PLUS
49290: ST_TO_ADDR
// ignore_yellow_list = ignore_yellow_list ^ i ;
49291: LD_ADDR_VAR 0 2
49295: PUSH
49296: LD_VAR 0 2
49300: PUSH
49301: LD_VAR 0 1
49305: ADD
49306: ST_TO_ADDR
// end ; end ;
49307: GO 49185
49309: POP
49310: POP
// for i in FilterAllUnits ( [ [ f_side , you_alt ] , [ f_type , unit_building ] ] ) do
49311: LD_ADDR_VAR 0 1
49315: PUSH
49316: LD_INT 22
49318: PUSH
49319: LD_EXP 5
49323: PUSH
49324: EMPTY
49325: LIST
49326: LIST
49327: PUSH
49328: LD_INT 21
49330: PUSH
49331: LD_INT 3
49333: PUSH
49334: EMPTY
49335: LIST
49336: LIST
49337: PUSH
49338: EMPTY
49339: LIST
49340: LIST
49341: PPUSH
49342: CALL_OW 69
49346: PUSH
49347: FOR_IN
49348: IFFALSE 49483
// case GetLives ( i ) of 1 .. 250 :
49350: LD_VAR 0 1
49354: PPUSH
49355: CALL_OW 256
49359: PUSH
49360: LD_INT 1
49362: DOUBLE
49363: GREATEREQUAL
49364: IFFALSE 49372
49366: LD_INT 250
49368: DOUBLE
49369: LESSEQUAL
49370: IFTRUE 49374
49372: GO 49420
49374: POP
// begin if not i in ignore_red_list then
49375: LD_VAR 0 1
49379: PUSH
49380: LD_VAR 0 3
49384: IN
49385: NOT
49386: IFFALSE 49418
// begin russian_interference_points = russian_interference_points + 1 ;
49388: LD_ADDR_EXP 96
49392: PUSH
49393: LD_EXP 96
49397: PUSH
49398: LD_INT 1
49400: PLUS
49401: ST_TO_ADDR
// ignore_red_list = ignore_red_list ^ i ;
49402: LD_ADDR_VAR 0 3
49406: PUSH
49407: LD_VAR 0 3
49411: PUSH
49412: LD_VAR 0 1
49416: ADD
49417: ST_TO_ADDR
// end ; end ; 1 .. 500 :
49418: GO 49481
49420: LD_INT 1
49422: DOUBLE
49423: GREATEREQUAL
49424: IFFALSE 49432
49426: LD_INT 500
49428: DOUBLE
49429: LESSEQUAL
49430: IFTRUE 49434
49432: GO 49480
49434: POP
// begin if not i in ignore_yellow_list then
49435: LD_VAR 0 1
49439: PUSH
49440: LD_VAR 0 2
49444: IN
49445: NOT
49446: IFFALSE 49478
// begin russian_interference_points = russian_interference_points + 1 ;
49448: LD_ADDR_EXP 96
49452: PUSH
49453: LD_EXP 96
49457: PUSH
49458: LD_INT 1
49460: PLUS
49461: ST_TO_ADDR
// ignore_yellow_list = ignore_yellow_list ^ i ;
49462: LD_ADDR_VAR 0 2
49466: PUSH
49467: LD_VAR 0 2
49471: PUSH
49472: LD_VAR 0 1
49476: ADD
49477: ST_TO_ADDR
// end ; end ; end ;
49478: GO 49481
49480: POP
49481: GO 49347
49483: POP
49484: POP
// until false ;
49485: LD_INT 0
49487: IFFALSE 49090
// end ;
49489: PPOPN 3
49491: END
// every 0 0$1 + 0 0$0.3 do var temp_list , hex , time , i ; var hex_list_before , hex_list_after ;
49492: GO 49494
49494: DISABLE
49495: LD_INT 0
49497: PPUSH
49498: PPUSH
49499: PPUSH
49500: PPUSH
49501: PPUSH
49502: PPUSH
// begin time = Rand ( 20 20$0 , 23 23$0 ) ;
49503: LD_ADDR_VAR 0 3
49507: PUSH
49508: LD_INT 42000
49510: PPUSH
49511: LD_INT 48300
49513: PPUSH
49514: CALL_OW 12
49518: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
49519: LD_INT 35
49521: PPUSH
49522: CALL_OW 67
// time = time - 0 0$1 ;
49526: LD_ADDR_VAR 0 3
49530: PUSH
49531: LD_VAR 0 3
49535: PUSH
49536: LD_INT 35
49538: MINUS
49539: ST_TO_ADDR
// until time <= 0 0$0 or not 3 in ai_bases ;
49540: LD_VAR 0 3
49544: PUSH
49545: LD_INT 0
49547: LESSEQUAL
49548: PUSH
49549: LD_INT 3
49551: PUSH
49552: LD_EXP 58
49556: IN
49557: NOT
49558: OR
49559: IFFALSE 49519
// if difficulty <= 2 and 3 in ai_bases then
49561: LD_OWVAR 67
49565: PUSH
49566: LD_INT 2
49568: LESSEQUAL
49569: PUSH
49570: LD_INT 3
49572: PUSH
49573: LD_EXP 58
49577: IN
49578: AND
49579: IFFALSE 49588
// wait ( 4 4$0 ) ;
49581: LD_INT 8400
49583: PPUSH
49584: CALL_OW 67
// if difficulty = 1 and 3 in ai_bases then
49588: LD_OWVAR 67
49592: PUSH
49593: LD_INT 1
49595: EQUAL
49596: PUSH
49597: LD_INT 3
49599: PUSH
49600: LD_EXP 58
49604: IN
49605: AND
49606: IFFALSE 49615
// wait ( 4 4$0 ) ;
49608: LD_INT 8400
49610: PPUSH
49611: CALL_OW 67
// while ( ai_vehicles_attack [ 3 ] > 0 or ai_attacking_scientists [ 3 ] > 0 or ai_attacking_soldiers [ 3 ] > 0 ) and russian_attack_strategy <> 1 and 3 in ai_bases do
49615: LD_EXP 40
49619: PUSH
49620: LD_INT 3
49622: ARRAY
49623: PUSH
49624: LD_INT 0
49626: GREATER
49627: PUSH
49628: LD_EXP 64
49632: PUSH
49633: LD_INT 3
49635: ARRAY
49636: PUSH
49637: LD_INT 0
49639: GREATER
49640: OR
49641: PUSH
49642: LD_EXP 63
49646: PUSH
49647: LD_INT 3
49649: ARRAY
49650: PUSH
49651: LD_INT 0
49653: GREATER
49654: OR
49655: PUSH
49656: LD_EXP 83
49660: PUSH
49661: LD_INT 1
49663: NONEQUAL
49664: AND
49665: PUSH
49666: LD_INT 3
49668: PUSH
49669: LD_EXP 58
49673: IN
49674: AND
49675: IFFALSE 49686
// wait ( 0 0$2 ) ;
49677: LD_INT 70
49679: PPUSH
49680: CALL_OW 67
49684: GO 49615
// if PlayerAtEasternBorder then
49686: CALL 30479 0 0
49690: IFFALSE 49789
// begin hex_list_before = [ [ 148 , 99 ] , [ 153 , 99 ] ] ;
49692: LD_ADDR_VAR 0 5
49696: PUSH
49697: LD_INT 148
49699: PUSH
49700: LD_INT 99
49702: PUSH
49703: EMPTY
49704: LIST
49705: LIST
49706: PUSH
49707: LD_INT 153
49709: PUSH
49710: LD_INT 99
49712: PUSH
49713: EMPTY
49714: LIST
49715: LIST
49716: PUSH
49717: EMPTY
49718: LIST
49719: LIST
49720: ST_TO_ADDR
// hex = [ 145 , 58 ] ;
49721: LD_ADDR_VAR 0 2
49725: PUSH
49726: LD_INT 145
49728: PUSH
49729: LD_INT 58
49731: PUSH
49732: EMPTY
49733: LIST
49734: LIST
49735: ST_TO_ADDR
// hex_list_after = [ [ 140 , 104 ] , [ 126 , 91 ] , [ 123 , 71 ] , [ 118 , 59 ] ] ;
49736: LD_ADDR_VAR 0 6
49740: PUSH
49741: LD_INT 140
49743: PUSH
49744: LD_INT 104
49746: PUSH
49747: EMPTY
49748: LIST
49749: LIST
49750: PUSH
49751: LD_INT 126
49753: PUSH
49754: LD_INT 91
49756: PUSH
49757: EMPTY
49758: LIST
49759: LIST
49760: PUSH
49761: LD_INT 123
49763: PUSH
49764: LD_INT 71
49766: PUSH
49767: EMPTY
49768: LIST
49769: LIST
49770: PUSH
49771: LD_INT 118
49773: PUSH
49774: LD_INT 59
49776: PUSH
49777: EMPTY
49778: LIST
49779: LIST
49780: PUSH
49781: EMPTY
49782: LIST
49783: LIST
49784: LIST
49785: LIST
49786: ST_TO_ADDR
// end else
49787: GO 50039
// begin hex_list_before = [ [ 134 , 107 ] , [ 121 , 99 ] ] ;
49789: LD_ADDR_VAR 0 5
49793: PUSH
49794: LD_INT 134
49796: PUSH
49797: LD_INT 107
49799: PUSH
49800: EMPTY
49801: LIST
49802: LIST
49803: PUSH
49804: LD_INT 121
49806: PUSH
49807: LD_INT 99
49809: PUSH
49810: EMPTY
49811: LIST
49812: LIST
49813: PUSH
49814: EMPTY
49815: LIST
49816: LIST
49817: ST_TO_ADDR
// hex = [ 99 , 108 ] ;
49818: LD_ADDR_VAR 0 2
49822: PUSH
49823: LD_INT 99
49825: PUSH
49826: LD_INT 108
49828: PUSH
49829: EMPTY
49830: LIST
49831: LIST
49832: ST_TO_ADDR
// hex_list_after = [ [ 122 , 80 ] ] ;
49833: LD_ADDR_VAR 0 6
49837: PUSH
49838: LD_INT 122
49840: PUSH
49841: LD_INT 80
49843: PUSH
49844: EMPTY
49845: LIST
49846: LIST
49847: PUSH
49848: EMPTY
49849: LIST
49850: ST_TO_ADDR
// case difficulty of 1 :
49851: LD_OWVAR 67
49855: PUSH
49856: LD_INT 1
49858: DOUBLE
49859: EQUAL
49860: IFTRUE 49864
49862: GO 49924
49864: POP
// hex_list_after = hex_list_after ^ [ [ 143 , 77 ] , [ 143 , 52 ] , [ 134 , 42 ] , [ 115 , 39 ] ] ; 2 :
49865: LD_ADDR_VAR 0 6
49869: PUSH
49870: LD_VAR 0 6
49874: PUSH
49875: LD_INT 143
49877: PUSH
49878: LD_INT 77
49880: PUSH
49881: EMPTY
49882: LIST
49883: LIST
49884: PUSH
49885: LD_INT 143
49887: PUSH
49888: LD_INT 52
49890: PUSH
49891: EMPTY
49892: LIST
49893: LIST
49894: PUSH
49895: LD_INT 134
49897: PUSH
49898: LD_INT 42
49900: PUSH
49901: EMPTY
49902: LIST
49903: LIST
49904: PUSH
49905: LD_INT 115
49907: PUSH
49908: LD_INT 39
49910: PUSH
49911: EMPTY
49912: LIST
49913: LIST
49914: PUSH
49915: EMPTY
49916: LIST
49917: LIST
49918: LIST
49919: LIST
49920: ADD
49921: ST_TO_ADDR
49922: GO 50039
49924: LD_INT 2
49926: DOUBLE
49927: EQUAL
49928: IFTRUE 49932
49930: GO 49992
49932: POP
// hex_list_after = hex_list_after ^ [ [ 143 , 77 ] , [ 134 , 70 ] , [ 124 , 66 ] , [ 118 , 59 ] ] ; 3 :
49933: LD_ADDR_VAR 0 6
49937: PUSH
49938: LD_VAR 0 6
49942: PUSH
49943: LD_INT 143
49945: PUSH
49946: LD_INT 77
49948: PUSH
49949: EMPTY
49950: LIST
49951: LIST
49952: PUSH
49953: LD_INT 134
49955: PUSH
49956: LD_INT 70
49958: PUSH
49959: EMPTY
49960: LIST
49961: LIST
49962: PUSH
49963: LD_INT 124
49965: PUSH
49966: LD_INT 66
49968: PUSH
49969: EMPTY
49970: LIST
49971: LIST
49972: PUSH
49973: LD_INT 118
49975: PUSH
49976: LD_INT 59
49978: PUSH
49979: EMPTY
49980: LIST
49981: LIST
49982: PUSH
49983: EMPTY
49984: LIST
49985: LIST
49986: LIST
49987: LIST
49988: ADD
49989: ST_TO_ADDR
49990: GO 50039
49992: LD_INT 3
49994: DOUBLE
49995: EQUAL
49996: IFTRUE 50000
49998: GO 50038
50000: POP
// hex_list_after = hex_list_after ^ [ [ 123 , 71 ] , [ 118 , 59 ] ] ; end ;
50001: LD_ADDR_VAR 0 6
50005: PUSH
50006: LD_VAR 0 6
50010: PUSH
50011: LD_INT 123
50013: PUSH
50014: LD_INT 71
50016: PUSH
50017: EMPTY
50018: LIST
50019: LIST
50020: PUSH
50021: LD_INT 118
50023: PUSH
50024: LD_INT 59
50026: PUSH
50027: EMPTY
50028: LIST
50029: LIST
50030: PUSH
50031: EMPTY
50032: LIST
50033: LIST
50034: ADD
50035: ST_TO_ADDR
50036: GO 50039
50038: POP
// end ; temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
50039: LD_ADDR_VAR 0 1
50043: PUSH
50044: LD_INT 22
50046: PUSH
50047: LD_EXP 2
50051: PUSH
50052: EMPTY
50053: LIST
50054: LIST
50055: PUSH
50056: LD_INT 2
50058: PUSH
50059: LD_INT 30
50061: PUSH
50062: LD_INT 0
50064: PUSH
50065: EMPTY
50066: LIST
50067: LIST
50068: PUSH
50069: LD_INT 30
50071: PUSH
50072: LD_INT 1
50074: PUSH
50075: EMPTY
50076: LIST
50077: LIST
50078: PUSH
50079: EMPTY
50080: LIST
50081: LIST
50082: LIST
50083: PUSH
50084: EMPTY
50085: LIST
50086: LIST
50087: PPUSH
50088: CALL_OW 69
50092: ST_TO_ADDR
// if temp_list > 0 then
50093: LD_VAR 0 1
50097: PUSH
50098: LD_INT 0
50100: GREATER
50101: IFFALSE 50151
// hex_list_before = hex_list_before ^ [ [ GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ] ] else
50103: LD_ADDR_VAR 0 5
50107: PUSH
50108: LD_VAR 0 5
50112: PUSH
50113: LD_VAR 0 1
50117: PUSH
50118: LD_INT 1
50120: ARRAY
50121: PPUSH
50122: CALL_OW 250
50126: PUSH
50127: LD_VAR 0 1
50131: PUSH
50132: LD_INT 1
50134: ARRAY
50135: PPUSH
50136: CALL_OW 251
50140: PUSH
50141: EMPTY
50142: LIST
50143: LIST
50144: PUSH
50145: EMPTY
50146: LIST
50147: ADD
50148: ST_TO_ADDR
50149: GO 50170
// hex_list_before = hex_list_before ^ [ hex ] ;
50151: LD_ADDR_VAR 0 5
50155: PUSH
50156: LD_VAR 0 5
50160: PUSH
50161: LD_VAR 0 2
50165: PUSH
50166: EMPTY
50167: LIST
50168: ADD
50169: ST_TO_ADDR
// SetDir ( Cornell , 5 ) ;
50170: LD_EXP 25
50174: PPUSH
50175: LD_INT 5
50177: PPUSH
50178: CALL_OW 233
// SetLives ( Cornell , [ 400 , 450 , 500 ] [ difficulty ] ) ;
50182: LD_EXP 25
50186: PPUSH
50187: LD_INT 400
50189: PUSH
50190: LD_INT 450
50192: PUSH
50193: LD_INT 500
50195: PUSH
50196: EMPTY
50197: LIST
50198: LIST
50199: LIST
50200: PUSH
50201: LD_OWVAR 67
50205: ARRAY
50206: PPUSH
50207: CALL_OW 234
// while not PlaceUnitXYR ( Cornell , 146 , 117 , 1 , false ) do
50211: LD_EXP 25
50215: PPUSH
50216: LD_INT 146
50218: PPUSH
50219: LD_INT 117
50221: PPUSH
50222: LD_INT 1
50224: PPUSH
50225: LD_INT 0
50227: PPUSH
50228: CALL_OW 50
50232: NOT
50233: IFFALSE 50244
// wait ( 0 0$2 ) ;
50235: LD_INT 70
50237: PPUSH
50238: CALL_OW 67
50242: GO 50211
// hex = 1 ;
50244: LD_ADDR_VAR 0 2
50248: PUSH
50249: LD_INT 1
50251: ST_TO_ADDR
// time = 1 1$0 ;
50252: LD_ADDR_VAR 0 3
50256: PUSH
50257: LD_INT 2100
50259: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
50260: LD_INT 18
50262: PPUSH
50263: CALL_OW 67
// if GetDistUnitXY ( Cornell , hex_list_before [ hex ] [ 1 ] , hex_list_before [ hex ] [ 2 ] ) > 2 then
50267: LD_EXP 25
50271: PPUSH
50272: LD_VAR 0 5
50276: PUSH
50277: LD_VAR 0 2
50281: ARRAY
50282: PUSH
50283: LD_INT 1
50285: ARRAY
50286: PPUSH
50287: LD_VAR 0 5
50291: PUSH
50292: LD_VAR 0 2
50296: ARRAY
50297: PUSH
50298: LD_INT 2
50300: ARRAY
50301: PPUSH
50302: CALL_OW 297
50306: PUSH
50307: LD_INT 2
50309: GREATER
50310: IFFALSE 50353
// ComMoveXY ( Cornell , hex_list_before [ hex ] [ 1 ] , hex_list_before [ hex ] [ 2 ] ) else
50312: LD_EXP 25
50316: PPUSH
50317: LD_VAR 0 5
50321: PUSH
50322: LD_VAR 0 2
50326: ARRAY
50327: PUSH
50328: LD_INT 1
50330: ARRAY
50331: PPUSH
50332: LD_VAR 0 5
50336: PUSH
50337: LD_VAR 0 2
50341: ARRAY
50342: PUSH
50343: LD_INT 2
50345: ARRAY
50346: PPUSH
50347: CALL_OW 111
50351: GO 50414
// if hex < hex_list_before then
50353: LD_VAR 0 2
50357: PUSH
50358: LD_VAR 0 5
50362: LESS
50363: IFFALSE 50381
// hex = hex + 1 else
50365: LD_ADDR_VAR 0 2
50369: PUSH
50370: LD_VAR 0 2
50374: PUSH
50375: LD_INT 1
50377: PLUS
50378: ST_TO_ADDR
50379: GO 50414
// begin time = time - 0 0$0.5 ;
50381: LD_ADDR_VAR 0 3
50385: PUSH
50386: LD_VAR 0 3
50390: PUSH
50391: LD_INT 18
50393: MINUS
50394: ST_TO_ADDR
// if time <= 0 0$0 then
50395: LD_VAR 0 3
50399: PUSH
50400: LD_INT 0
50402: LESSEQUAL
50403: IFFALSE 50414
// KillUnit ( Cornell ) ;
50405: LD_EXP 25
50409: PPUSH
50410: CALL_OW 66
// end ; until ( See ( you , Cornell ) and FilterAllUnits ( [ [ f_side , you ] , [ f_see , americans_alt ] ] ) > 0 ) or IsDead ( Cornell ) ;
50414: LD_EXP 2
50418: PPUSH
50419: LD_EXP 25
50423: PPUSH
50424: CALL_OW 292
50428: PUSH
50429: LD_INT 22
50431: PUSH
50432: LD_EXP 2
50436: PUSH
50437: EMPTY
50438: LIST
50439: LIST
50440: PUSH
50441: LD_INT 101
50443: PUSH
50444: LD_EXP 8
50448: PUSH
50449: EMPTY
50450: LIST
50451: LIST
50452: PUSH
50453: EMPTY
50454: LIST
50455: LIST
50456: PPUSH
50457: CALL_OW 69
50461: PUSH
50462: LD_INT 0
50464: GREATER
50465: AND
50466: PUSH
50467: LD_EXP 25
50471: PPUSH
50472: CALL_OW 301
50476: OR
50477: IFFALSE 50260
// if See ( you , Cornell ) and FilterAllUnits ( [ [ f_side , you ] , [ f_see , americans_alt ] ] ) > 0 then
50479: LD_EXP 2
50483: PPUSH
50484: LD_EXP 25
50488: PPUSH
50489: CALL_OW 292
50493: PUSH
50494: LD_INT 22
50496: PUSH
50497: LD_EXP 2
50501: PUSH
50502: EMPTY
50503: LIST
50504: LIST
50505: PUSH
50506: LD_INT 101
50508: PUSH
50509: LD_EXP 8
50513: PUSH
50514: EMPTY
50515: LIST
50516: LIST
50517: PUSH
50518: EMPTY
50519: LIST
50520: LIST
50521: PPUSH
50522: CALL_OW 69
50526: PUSH
50527: LD_INT 0
50529: GREATER
50530: AND
50531: IFFALSE 50854
// begin CenterOnUnits ( Cornell ) ;
50533: LD_EXP 25
50537: PPUSH
50538: CALL_OW 85
// DialogueOn ;
50542: CALL_OW 6
// ForceSay ( Cornell , D5-Cor-1 ) ;
50546: LD_EXP 25
50550: PPUSH
50551: LD_STRING D5-Cor-1
50553: PPUSH
50554: CALL_OW 91
// ForceSay ( Heike , D5-H-1 ) ;
50558: LD_EXP 9
50562: PPUSH
50563: LD_STRING D5-H-1
50565: PPUSH
50566: CALL_OW 91
// DialogueOff ;
50570: CALL_OW 7
// hex = 1 ;
50574: LD_ADDR_VAR 0 2
50578: PUSH
50579: LD_INT 1
50581: ST_TO_ADDR
// repeat if GetDistUnitXY ( Cornell , hex_list_after [ hex ] [ 1 ] , hex_list_after [ hex ] [ 2 ] ) > 3 then
50582: LD_EXP 25
50586: PPUSH
50587: LD_VAR 0 6
50591: PUSH
50592: LD_VAR 0 2
50596: ARRAY
50597: PUSH
50598: LD_INT 1
50600: ARRAY
50601: PPUSH
50602: LD_VAR 0 6
50606: PUSH
50607: LD_VAR 0 2
50611: ARRAY
50612: PUSH
50613: LD_INT 2
50615: ARRAY
50616: PPUSH
50617: CALL_OW 297
50621: PUSH
50622: LD_INT 3
50624: GREATER
50625: IFFALSE 50668
// ComMoveXY ( Cornell , hex_list_after [ hex ] [ 1 ] , hex_list_after [ hex ] [ 2 ] ) else
50627: LD_EXP 25
50631: PPUSH
50632: LD_VAR 0 6
50636: PUSH
50637: LD_VAR 0 2
50641: ARRAY
50642: PUSH
50643: LD_INT 1
50645: ARRAY
50646: PPUSH
50647: LD_VAR 0 6
50651: PUSH
50652: LD_VAR 0 2
50656: ARRAY
50657: PUSH
50658: LD_INT 2
50660: ARRAY
50661: PPUSH
50662: CALL_OW 111
50666: GO 50694
// if hex < hex_list_after then
50668: LD_VAR 0 2
50672: PUSH
50673: LD_VAR 0 6
50677: LESS
50678: IFFALSE 50694
// hex = hex + 1 ;
50680: LD_ADDR_VAR 0 2
50684: PUSH
50685: LD_VAR 0 2
50689: PUSH
50690: LD_INT 1
50692: PLUS
50693: ST_TO_ADDR
// wait ( 0 0$0.5 ) ;
50694: LD_INT 18
50696: PPUSH
50697: CALL_OW 67
// until IsDead ( Cornell ) or ( See ( americans , Cornell ) and FilterAllUnits ( [ [ f_side , americans ] , [ f_see , americans_alt ] ] ) > 0 ) ;
50701: LD_EXP 25
50705: PPUSH
50706: CALL_OW 301
50710: PUSH
50711: LD_EXP 6
50715: PPUSH
50716: LD_EXP 25
50720: PPUSH
50721: CALL_OW 292
50725: PUSH
50726: LD_INT 22
50728: PUSH
50729: LD_EXP 6
50733: PUSH
50734: EMPTY
50735: LIST
50736: LIST
50737: PUSH
50738: LD_INT 101
50740: PUSH
50741: LD_EXP 8
50745: PUSH
50746: EMPTY
50747: LIST
50748: LIST
50749: PUSH
50750: EMPTY
50751: LIST
50752: LIST
50753: PPUSH
50754: CALL_OW 69
50758: PUSH
50759: LD_INT 0
50761: GREATER
50762: AND
50763: OR
50764: IFFALSE 50582
// if See ( americans , Cornell ) and FilterAllUnits ( [ [ f_side , americans ] , [ f_see , americans_alt ] ] ) > 0 then
50766: LD_EXP 6
50770: PPUSH
50771: LD_EXP 25
50775: PPUSH
50776: CALL_OW 292
50780: PUSH
50781: LD_INT 22
50783: PUSH
50784: LD_EXP 6
50788: PUSH
50789: EMPTY
50790: LIST
50791: LIST
50792: PUSH
50793: LD_INT 101
50795: PUSH
50796: LD_EXP 8
50800: PUSH
50801: EMPTY
50802: LIST
50803: LIST
50804: PUSH
50805: EMPTY
50806: LIST
50807: LIST
50808: PPUSH
50809: CALL_OW 69
50813: PUSH
50814: LD_INT 0
50816: GREATER
50817: AND
50818: IFFALSE 50854
// begin DialogueOn ;
50820: CALL_OW 6
// SayRadio ( Simms , D4-Sim-2 ) ;
50824: LD_EXP 24
50828: PPUSH
50829: LD_STRING D4-Sim-2
50831: PPUSH
50832: CALL_OW 94
// dwait ( 0 0$0.5 ) ;
50836: LD_INT 18
50838: PPUSH
50839: CALL_OW 68
// YouLost ( PlayerSeen ) ;
50843: LD_STRING PlayerSeen
50845: PPUSH
50846: CALL_OW 104
// DialogueOff ;
50850: CALL_OW 7
// end ; end ; time = Rand ( 22 22$0 , 24 24$0 ) ;
50854: LD_ADDR_VAR 0 3
50858: PUSH
50859: LD_INT 46200
50861: PPUSH
50862: LD_INT 50400
50864: PPUSH
50865: CALL_OW 12
50869: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
50870: LD_INT 35
50872: PPUSH
50873: CALL_OW 67
// time = time - 0 0$1 ;
50877: LD_ADDR_VAR 0 3
50881: PUSH
50882: LD_VAR 0 3
50886: PUSH
50887: LD_INT 35
50889: MINUS
50890: ST_TO_ADDR
// until time <= 0 0$0 or not 3 in ai_bases ;
50891: LD_VAR 0 3
50895: PUSH
50896: LD_INT 0
50898: LESSEQUAL
50899: PUSH
50900: LD_INT 3
50902: PUSH
50903: LD_EXP 58
50907: IN
50908: NOT
50909: OR
50910: IFFALSE 50870
// DialogueOn ;
50912: CALL_OW 6
// SayRadio ( Gensher , D8-Ge-1 ) ;
50916: LD_EXP 23
50920: PPUSH
50921: LD_STRING D8-Ge-1
50923: PPUSH
50924: CALL_OW 94
// DialogueOff ;
50928: CALL_OW 7
// wait ( 0 0$0.2 ) ;
50932: LD_INT 7
50934: PPUSH
50935: CALL_OW 67
// time = 8 8$0 ;
50939: LD_ADDR_VAR 0 3
50943: PUSH
50944: LD_INT 16800
50946: ST_TO_ADDR
// russians_allowed_to_attack_gensher_time = tick + time + 1 1$0 ;
50947: LD_ADDR_EXP 93
50951: PUSH
50952: LD_OWVAR 1
50956: PUSH
50957: LD_VAR 0 3
50961: PLUS
50962: PUSH
50963: LD_INT 2100
50965: PLUS
50966: ST_TO_ADDR
// repeat display_strings = [ #Ar11-GensherCountdown , time ] ;
50967: LD_ADDR_OWVAR 47
50971: PUSH
50972: LD_STRING #Ar11-GensherCountdown
50974: PUSH
50975: LD_VAR 0 3
50979: PUSH
50980: EMPTY
50981: LIST
50982: LIST
50983: ST_TO_ADDR
// time = time - 0 0$1 ;
50984: LD_ADDR_VAR 0 3
50988: PUSH
50989: LD_VAR 0 3
50993: PUSH
50994: LD_INT 35
50996: MINUS
50997: ST_TO_ADDR
// wait ( 0 0$1 ) ;
50998: LD_INT 35
51000: PPUSH
51001: CALL_OW 67
// until time <= 0 0$0 ;
51005: LD_VAR 0 3
51009: PUSH
51010: LD_INT 0
51012: LESSEQUAL
51013: IFFALSE 50967
// display_strings = [ ] ;
51015: LD_ADDR_OWVAR 47
51019: PUSH
51020: EMPTY
51021: ST_TO_ADDR
// game_phase = 2 ;
51022: LD_ADDR_EXP 88
51026: PUSH
51027: LD_INT 2
51029: ST_TO_ADDR
// ChangeMissionObjectives ( M3 ) ;
51030: LD_STRING M3
51032: PPUSH
51033: CALL_OW 337
// for i in FilterAllUnits ( [ f_side , americans ] ) do
51037: LD_ADDR_VAR 0 4
51041: PUSH
51042: LD_INT 22
51044: PUSH
51045: LD_EXP 6
51049: PUSH
51050: EMPTY
51051: LIST
51052: LIST
51053: PPUSH
51054: CALL_OW 69
51058: PUSH
51059: FOR_IN
51060: IFFALSE 51078
// NormalAttack ( you , i ) ;
51062: LD_EXP 2
51066: PPUSH
51067: LD_VAR 0 4
51071: PPUSH
51072: CALL_OW 472
51076: GO 51059
51078: POP
51079: POP
// end ;
51080: PPOPN 6
51082: END
// every 0 0$1 do var i ;
51083: GO 51085
51085: DISABLE
51086: LD_INT 0
51088: PPUSH
// begin repeat wait ( 0 0$1 ) ;
51089: LD_INT 35
51091: PPUSH
51092: CALL_OW 67
// if game_phase > 1 then
51096: LD_EXP 88
51100: PUSH
51101: LD_INT 1
51103: GREATER
51104: IFFALSE 51108
// exit ;
51106: GO 51236
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_type , unit_human ] , [ f_type , unit_vehicle ] ] ] ) do
51108: LD_ADDR_VAR 0 1
51112: PUSH
51113: LD_INT 22
51115: PUSH
51116: LD_EXP 2
51120: PUSH
51121: EMPTY
51122: LIST
51123: LIST
51124: PUSH
51125: LD_INT 2
51127: PUSH
51128: LD_INT 21
51130: PUSH
51131: LD_INT 1
51133: PUSH
51134: EMPTY
51135: LIST
51136: LIST
51137: PUSH
51138: LD_INT 21
51140: PUSH
51141: LD_INT 2
51143: PUSH
51144: EMPTY
51145: LIST
51146: LIST
51147: PUSH
51148: EMPTY
51149: LIST
51150: LIST
51151: LIST
51152: PUSH
51153: EMPTY
51154: LIST
51155: LIST
51156: PPUSH
51157: CALL_OW 69
51161: PUSH
51162: FOR_IN
51163: IFFALSE 51230
// if GetDistUnitArea ( i , Gensher_base ) <= 9 then
51165: LD_VAR 0 1
51169: PPUSH
51170: LD_INT 7
51172: PPUSH
51173: CALL_OW 299
51177: PUSH
51178: LD_INT 9
51180: LESSEQUAL
51181: IFFALSE 51228
// begin CenterOnUnits ( i ) ;
51183: LD_VAR 0 1
51187: PPUSH
51188: CALL_OW 85
// DialogueOn ;
51192: CALL_OW 6
// Say ( Gensher , D12-Ge-1 ) ;
51196: LD_EXP 23
51200: PPUSH
51201: LD_STRING D12-Ge-1
51203: PPUSH
51204: CALL_OW 88
// ForceSay ( Heike , D12-H-1 ) ;
51208: LD_EXP 9
51212: PPUSH
51213: LD_STRING D12-H-1
51215: PPUSH
51216: CALL_OW 91
// DialogueOff ;
51220: CALL_OW 7
// exit ;
51224: POP
51225: POP
51226: GO 51236
// end ;
51228: GO 51162
51230: POP
51231: POP
// until false ;
51232: LD_INT 0
51234: IFFALSE 51089
// end ;
51236: PPOPN 1
51238: END
// every 0 0$1 + 0 0$0.8 trigger game_phase = 2 do var i , val , temp_list , k ; var un_list , scis_list , hex_list , hex , exit_hex , rand_hexes ;
51239: LD_EXP 88
51243: PUSH
51244: LD_INT 2
51246: EQUAL
51247: IFFALSE 52500
51249: GO 51251
51251: DISABLE
51252: LD_INT 0
51254: PPUSH
51255: PPUSH
51256: PPUSH
51257: PPUSH
51258: PPUSH
51259: PPUSH
51260: PPUSH
51261: PPUSH
51262: PPUSH
51263: PPUSH
// begin ai_bases = ai_bases diff 2 ;
51264: LD_ADDR_EXP 58
51268: PUSH
51269: LD_EXP 58
51273: PUSH
51274: LD_INT 2
51276: DIFF
51277: ST_TO_ADDR
// hex = 1 ;
51278: LD_ADDR_VAR 0 8
51282: PUSH
51283: LD_INT 1
51285: ST_TO_ADDR
// hex_list = [ [ 75 , 23 ] , [ 76 , 36 ] , [ 78 , 43 ] , [ 79 , 51 ] , [ 81 , 61 ] , [ 84 , 71 ] , [ 90 , 81 ] , [ 97 , 88 ] , [ 105 , 93 ] , [ 113 , 95 ] , [ 119 , 92 ] , [ 122 , 87 ] , [ 123 , 79 ] , [ 132 , 82 ] , [ 141 , 88 ] , [ 160 , 104 ] , [ 168 , 109 ] ] ;
51286: LD_ADDR_VAR 0 7
51290: PUSH
51291: LD_INT 75
51293: PUSH
51294: LD_INT 23
51296: PUSH
51297: EMPTY
51298: LIST
51299: LIST
51300: PUSH
51301: LD_INT 76
51303: PUSH
51304: LD_INT 36
51306: PUSH
51307: EMPTY
51308: LIST
51309: LIST
51310: PUSH
51311: LD_INT 78
51313: PUSH
51314: LD_INT 43
51316: PUSH
51317: EMPTY
51318: LIST
51319: LIST
51320: PUSH
51321: LD_INT 79
51323: PUSH
51324: LD_INT 51
51326: PUSH
51327: EMPTY
51328: LIST
51329: LIST
51330: PUSH
51331: LD_INT 81
51333: PUSH
51334: LD_INT 61
51336: PUSH
51337: EMPTY
51338: LIST
51339: LIST
51340: PUSH
51341: LD_INT 84
51343: PUSH
51344: LD_INT 71
51346: PUSH
51347: EMPTY
51348: LIST
51349: LIST
51350: PUSH
51351: LD_INT 90
51353: PUSH
51354: LD_INT 81
51356: PUSH
51357: EMPTY
51358: LIST
51359: LIST
51360: PUSH
51361: LD_INT 97
51363: PUSH
51364: LD_INT 88
51366: PUSH
51367: EMPTY
51368: LIST
51369: LIST
51370: PUSH
51371: LD_INT 105
51373: PUSH
51374: LD_INT 93
51376: PUSH
51377: EMPTY
51378: LIST
51379: LIST
51380: PUSH
51381: LD_INT 113
51383: PUSH
51384: LD_INT 95
51386: PUSH
51387: EMPTY
51388: LIST
51389: LIST
51390: PUSH
51391: LD_INT 119
51393: PUSH
51394: LD_INT 92
51396: PUSH
51397: EMPTY
51398: LIST
51399: LIST
51400: PUSH
51401: LD_INT 122
51403: PUSH
51404: LD_INT 87
51406: PUSH
51407: EMPTY
51408: LIST
51409: LIST
51410: PUSH
51411: LD_INT 123
51413: PUSH
51414: LD_INT 79
51416: PUSH
51417: EMPTY
51418: LIST
51419: LIST
51420: PUSH
51421: LD_INT 132
51423: PUSH
51424: LD_INT 82
51426: PUSH
51427: EMPTY
51428: LIST
51429: LIST
51430: PUSH
51431: LD_INT 141
51433: PUSH
51434: LD_INT 88
51436: PUSH
51437: EMPTY
51438: LIST
51439: LIST
51440: PUSH
51441: LD_INT 160
51443: PUSH
51444: LD_INT 104
51446: PUSH
51447: EMPTY
51448: LIST
51449: LIST
51450: PUSH
51451: LD_INT 168
51453: PUSH
51454: LD_INT 109
51456: PUSH
51457: EMPTY
51458: LIST
51459: LIST
51460: PUSH
51461: EMPTY
51462: LIST
51463: LIST
51464: LIST
51465: LIST
51466: LIST
51467: LIST
51468: LIST
51469: LIST
51470: LIST
51471: LIST
51472: LIST
51473: LIST
51474: LIST
51475: LIST
51476: LIST
51477: LIST
51478: LIST
51479: ST_TO_ADDR
// exit_hex = [ 173 , 110 ] ;
51480: LD_ADDR_VAR 0 9
51484: PUSH
51485: LD_INT 173
51487: PUSH
51488: LD_INT 110
51490: PUSH
51491: EMPTY
51492: LIST
51493: LIST
51494: ST_TO_ADDR
// rand_hexes = [ ] ;
51495: LD_ADDR_VAR 0 10
51499: PUSH
51500: EMPTY
51501: ST_TO_ADDR
// un_list = original_gensher_people ^ Gensher ;
51502: LD_ADDR_VAR 0 5
51506: PUSH
51507: LD_EXP 82
51511: PUSH
51512: LD_EXP 23
51516: ADD
51517: ST_TO_ADDR
// scis_list = UnitFilter ( un_list , [ f_class , class_scientistic ] ) ;
51518: LD_ADDR_VAR 0 6
51522: PUSH
51523: LD_VAR 0 5
51527: PPUSH
51528: LD_INT 25
51530: PUSH
51531: LD_INT 4
51533: PUSH
51534: EMPTY
51535: LIST
51536: LIST
51537: PPUSH
51538: CALL_OW 72
51542: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
51543: LD_INT 35
51545: PPUSH
51546: CALL_OW 67
// val = true ;
51550: LD_ADDR_VAR 0 2
51554: PUSH
51555: LD_INT 1
51557: ST_TO_ADDR
// for i in un_list do
51558: LD_ADDR_VAR 0 1
51562: PUSH
51563: LD_VAR 0 5
51567: PUSH
51568: FOR_IN
51569: IFFALSE 51645
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
51571: LD_VAR 0 1
51575: PPUSH
51576: CALL_OW 310
51580: PPUSH
51581: CALL_OW 247
51585: PUSH
51586: LD_INT 2
51588: DOUBLE
51589: EQUAL
51590: IFTRUE 51594
51592: GO 51614
51594: POP
// begin ComExitVehicle ( i ) ;
51595: LD_VAR 0 1
51599: PPUSH
51600: CALL_OW 121
// val = false ;
51604: LD_ADDR_VAR 0 2
51608: PUSH
51609: LD_INT 0
51611: ST_TO_ADDR
// end ; unit_building :
51612: GO 51643
51614: LD_INT 3
51616: DOUBLE
51617: EQUAL
51618: IFTRUE 51622
51620: GO 51642
51622: POP
// begin ComExitBuilding ( i ) ;
51623: LD_VAR 0 1
51627: PPUSH
51628: CALL_OW 122
// val = false ;
51632: LD_ADDR_VAR 0 2
51636: PUSH
51637: LD_INT 0
51639: ST_TO_ADDR
// end ; end ;
51640: GO 51643
51642: POP
51643: GO 51568
51645: POP
51646: POP
// until val ;
51647: LD_VAR 0 2
51651: IFFALSE 51543
// for i in un_list do
51653: LD_ADDR_VAR 0 1
51657: PUSH
51658: LD_VAR 0 5
51662: PUSH
51663: FOR_IN
51664: IFFALSE 51699
// rand_hexes = Replace ( rand_hexes , i , hex_list [ hex ] ) ;
51666: LD_ADDR_VAR 0 10
51670: PUSH
51671: LD_VAR 0 10
51675: PPUSH
51676: LD_VAR 0 1
51680: PPUSH
51681: LD_VAR 0 7
51685: PUSH
51686: LD_VAR 0 8
51690: ARRAY
51691: PPUSH
51692: CALL_OW 1
51696: ST_TO_ADDR
51697: GO 51663
51699: POP
51700: POP
// repeat wait ( 0 0$0.3 ) ;
51701: LD_INT 10
51703: PPUSH
51704: CALL_OW 67
// un_list = UnitFilter ( un_list , [ f_alive ] ) ;
51708: LD_ADDR_VAR 0 5
51712: PUSH
51713: LD_VAR 0 5
51717: PPUSH
51718: LD_INT 51
51720: PUSH
51721: EMPTY
51722: LIST
51723: PPUSH
51724: CALL_OW 72
51728: ST_TO_ADDR
// scis_list = UnitFilter ( scis_list , [ f_alive ] ) ;
51729: LD_ADDR_VAR 0 6
51733: PUSH
51734: LD_VAR 0 6
51738: PPUSH
51739: LD_INT 51
51741: PUSH
51742: EMPTY
51743: LIST
51744: PPUSH
51745: CALL_OW 72
51749: ST_TO_ADDR
// temp_list = [ ] ;
51750: LD_ADDR_VAR 0 3
51754: PUSH
51755: EMPTY
51756: ST_TO_ADDR
// for i in un_list do
51757: LD_ADDR_VAR 0 1
51761: PUSH
51762: LD_VAR 0 5
51766: PUSH
51767: FOR_IN
51768: IFFALSE 51803
// if GetLives ( i ) <= 250 then
51770: LD_VAR 0 1
51774: PPUSH
51775: CALL_OW 256
51779: PUSH
51780: LD_INT 250
51782: LESSEQUAL
51783: IFFALSE 51801
// temp_list = temp_list ^ i ;
51785: LD_ADDR_VAR 0 3
51789: PUSH
51790: LD_VAR 0 3
51794: PUSH
51795: LD_VAR 0 1
51799: ADD
51800: ST_TO_ADDR
51801: GO 51767
51803: POP
51804: POP
// if temp_list > 0 and scis_list > 0 and UnitFilter ( un_list , [ f_lives , 501 ] ) > ( original_gensher_people + 1 ) div 2 then
51805: LD_VAR 0 3
51809: PUSH
51810: LD_INT 0
51812: GREATER
51813: PUSH
51814: LD_VAR 0 6
51818: PUSH
51819: LD_INT 0
51821: GREATER
51822: AND
51823: PUSH
51824: LD_VAR 0 5
51828: PPUSH
51829: LD_INT 24
51831: PUSH
51832: LD_INT 501
51834: PUSH
51835: EMPTY
51836: LIST
51837: LIST
51838: PPUSH
51839: CALL_OW 72
51843: PUSH
51844: LD_EXP 82
51848: PUSH
51849: LD_INT 1
51851: PLUS
51852: PUSH
51853: LD_INT 2
51855: DIV
51856: GREATER
51857: AND
51858: IFFALSE 51981
// begin for i in scis_list do
51860: LD_ADDR_VAR 0 1
51864: PUSH
51865: LD_VAR 0 6
51869: PUSH
51870: FOR_IN
51871: IFFALSE 51893
// ComHeal ( i , temp_list [ 1 ] ) ;
51873: LD_VAR 0 1
51877: PPUSH
51878: LD_VAR 0 3
51882: PUSH
51883: LD_INT 1
51885: ARRAY
51886: PPUSH
51887: CALL_OW 128
51891: GO 51870
51893: POP
51894: POP
// for i in un_list diff scis_list do
51895: LD_ADDR_VAR 0 1
51899: PUSH
51900: LD_VAR 0 5
51904: PUSH
51905: LD_VAR 0 6
51909: DIFF
51910: PUSH
51911: FOR_IN
51912: IFFALSE 51977
// if GetDistUnits ( i , temp_list [ 1 ] ) > 4 then
51914: LD_VAR 0 1
51918: PPUSH
51919: LD_VAR 0 3
51923: PUSH
51924: LD_INT 1
51926: ARRAY
51927: PPUSH
51928: CALL_OW 296
51932: PUSH
51933: LD_INT 4
51935: GREATER
51936: IFFALSE 51975
// ComMoveXY ( i , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
51938: LD_VAR 0 1
51942: PPUSH
51943: LD_VAR 0 3
51947: PUSH
51948: LD_INT 1
51950: ARRAY
51951: PPUSH
51952: CALL_OW 250
51956: PPUSH
51957: LD_VAR 0 3
51961: PUSH
51962: LD_INT 1
51964: ARRAY
51965: PPUSH
51966: CALL_OW 251
51970: PPUSH
51971: CALL_OW 111
51975: GO 51911
51977: POP
51978: POP
// end else
51979: GO 52468
// begin val = true ;
51981: LD_ADDR_VAR 0 2
51985: PUSH
51986: LD_INT 1
51988: ST_TO_ADDR
// for i in un_list do
51989: LD_ADDR_VAR 0 1
51993: PUSH
51994: LD_VAR 0 5
51998: PUSH
51999: FOR_IN
52000: IFFALSE 52241
// if hex <= hex_list then
52002: LD_VAR 0 8
52006: PUSH
52007: LD_VAR 0 7
52011: LESSEQUAL
52012: IFFALSE 52108
// begin if GetDistUnitXY ( i , rand_hexes [ i ] [ 1 ] , rand_hexes [ i ] [ 2 ] ) > 5 then
52014: LD_VAR 0 1
52018: PPUSH
52019: LD_VAR 0 10
52023: PUSH
52024: LD_VAR 0 1
52028: ARRAY
52029: PUSH
52030: LD_INT 1
52032: ARRAY
52033: PPUSH
52034: LD_VAR 0 10
52038: PUSH
52039: LD_VAR 0 1
52043: ARRAY
52044: PUSH
52045: LD_INT 2
52047: ARRAY
52048: PPUSH
52049: CALL_OW 297
52053: PUSH
52054: LD_INT 5
52056: GREATER
52057: IFFALSE 52106
// begin ComMoveXY ( i , rand_hexes [ i ] [ 1 ] , rand_hexes [ i ] [ 2 ] ) ;
52059: LD_VAR 0 1
52063: PPUSH
52064: LD_VAR 0 10
52068: PUSH
52069: LD_VAR 0 1
52073: ARRAY
52074: PUSH
52075: LD_INT 1
52077: ARRAY
52078: PPUSH
52079: LD_VAR 0 10
52083: PUSH
52084: LD_VAR 0 1
52088: ARRAY
52089: PUSH
52090: LD_INT 2
52092: ARRAY
52093: PPUSH
52094: CALL_OW 111
// val = false ;
52098: LD_ADDR_VAR 0 2
52102: PUSH
52103: LD_INT 0
52105: ST_TO_ADDR
// end ; end else
52106: GO 52239
// if GetDistUnitXY ( i , exit_hex [ 1 ] , exit_hex [ 2 ] ) > 2 then
52108: LD_VAR 0 1
52112: PPUSH
52113: LD_VAR 0 9
52117: PUSH
52118: LD_INT 1
52120: ARRAY
52121: PPUSH
52122: LD_VAR 0 9
52126: PUSH
52127: LD_INT 2
52129: ARRAY
52130: PPUSH
52131: CALL_OW 297
52135: PUSH
52136: LD_INT 2
52138: GREATER
52139: IFFALSE 52170
// ComMoveXY ( i , exit_hex [ 1 ] , exit_hex [ 2 ] ) else
52141: LD_VAR 0 1
52145: PPUSH
52146: LD_VAR 0 9
52150: PUSH
52151: LD_INT 1
52153: ARRAY
52154: PPUSH
52155: LD_VAR 0 9
52159: PUSH
52160: LD_INT 2
52162: ARRAY
52163: PPUSH
52164: CALL_OW 111
52168: GO 52239
// begin if i <> Gensher then
52170: LD_VAR 0 1
52174: PUSH
52175: LD_EXP 23
52179: NONEQUAL
52180: IFFALSE 52198
// saved_gensher_people = saved_gensher_people ^ i ;
52182: LD_ADDR_EXP 94
52186: PUSH
52187: LD_EXP 94
52191: PUSH
52192: LD_VAR 0 1
52196: ADD
52197: ST_TO_ADDR
// un_list = un_list diff i ;
52198: LD_ADDR_VAR 0 5
52202: PUSH
52203: LD_VAR 0 5
52207: PUSH
52208: LD_VAR 0 1
52212: DIFF
52213: ST_TO_ADDR
// scis_list = scis_list diff i ;
52214: LD_ADDR_VAR 0 6
52218: PUSH
52219: LD_VAR 0 6
52223: PUSH
52224: LD_VAR 0 1
52228: DIFF
52229: ST_TO_ADDR
// RemoveUnit ( i ) ;
52230: LD_VAR 0 1
52234: PPUSH
52235: CALL_OW 64
// end ;
52239: GO 51999
52241: POP
52242: POP
// if val then
52243: LD_VAR 0 2
52247: IFFALSE 52468
// begin hex = hex + 1 ;
52249: LD_ADDR_VAR 0 8
52253: PUSH
52254: LD_VAR 0 8
52258: PUSH
52259: LD_INT 1
52261: PLUS
52262: ST_TO_ADDR
// if hex <= hex_list then
52263: LD_VAR 0 8
52267: PUSH
52268: LD_VAR 0 7
52272: LESSEQUAL
52273: IFFALSE 52468
// begin temp_list = [ ] ;
52275: LD_ADDR_VAR 0 3
52279: PUSH
52280: EMPTY
52281: ST_TO_ADDR
// for i in un_list do
52282: LD_ADDR_VAR 0 1
52286: PUSH
52287: LD_VAR 0 5
52291: PUSH
52292: FOR_IN
52293: IFFALSE 52466
// begin k = 0 ;
52295: LD_ADDR_VAR 0 4
52299: PUSH
52300: LD_INT 0
52302: ST_TO_ADDR
// repeat val = RandHexXYR ( hex_list [ hex ] [ 1 ] , hex_list [ hex ] [ 2 ] , 2 , false ) ;
52303: LD_ADDR_VAR 0 2
52307: PUSH
52308: LD_VAR 0 7
52312: PUSH
52313: LD_VAR 0 8
52317: ARRAY
52318: PUSH
52319: LD_INT 1
52321: ARRAY
52322: PPUSH
52323: LD_VAR 0 7
52327: PUSH
52328: LD_VAR 0 8
52332: ARRAY
52333: PUSH
52334: LD_INT 2
52336: ARRAY
52337: PPUSH
52338: LD_INT 2
52340: PPUSH
52341: LD_INT 0
52343: PPUSH
52344: CALL_OW 17
52348: ST_TO_ADDR
// k = k + 1 ;
52349: LD_ADDR_VAR 0 4
52353: PUSH
52354: LD_VAR 0 4
52358: PUSH
52359: LD_INT 1
52361: PLUS
52362: ST_TO_ADDR
// if ( not val in temp_list and HexInfo ( val [ 1 ] , val [ 2 ] ) >= 0 ) or k >= 10 then
52363: LD_VAR 0 2
52367: PUSH
52368: LD_VAR 0 3
52372: IN
52373: NOT
52374: PUSH
52375: LD_VAR 0 2
52379: PUSH
52380: LD_INT 1
52382: ARRAY
52383: PPUSH
52384: LD_VAR 0 2
52388: PUSH
52389: LD_INT 2
52391: ARRAY
52392: PPUSH
52393: CALL_OW 428
52397: PUSH
52398: LD_INT 0
52400: GREATEREQUAL
52401: AND
52402: PUSH
52403: LD_VAR 0 4
52407: PUSH
52408: LD_INT 10
52410: GREATEREQUAL
52411: OR
52412: IFFALSE 52460
// begin temp_list = temp_list ^ [ val ] ;
52414: LD_ADDR_VAR 0 3
52418: PUSH
52419: LD_VAR 0 3
52423: PUSH
52424: LD_VAR 0 2
52428: PUSH
52429: EMPTY
52430: LIST
52431: ADD
52432: ST_TO_ADDR
// rand_hexes = Replace ( rand_hexes , i , val ) ;
52433: LD_ADDR_VAR 0 10
52437: PUSH
52438: LD_VAR 0 10
52442: PPUSH
52443: LD_VAR 0 1
52447: PPUSH
52448: LD_VAR 0 2
52452: PPUSH
52453: CALL_OW 1
52457: ST_TO_ADDR
// break ;
52458: GO 52464
// end ; until false ;
52460: LD_INT 0
52462: IFFALSE 52303
// end ;
52464: GO 52292
52466: POP
52467: POP
// end ; end ; end ; until un_list = 0 ;
52468: LD_VAR 0 5
52472: PUSH
52473: LD_INT 0
52475: EQUAL
52476: IFFALSE 51701
// wait ( 0 0$0.2 ) ;
52478: LD_INT 7
52480: PPUSH
52481: CALL_OW 67
// ChangeMissionObjectives ( M4 ) ;
52485: LD_STRING M4
52487: PPUSH
52488: CALL_OW 337
// game_phase = 3 ;
52492: LD_ADDR_EXP 88
52496: PUSH
52497: LD_INT 3
52499: ST_TO_ADDR
// end ;
52500: PPOPN 10
52502: END
// every 0 0$1 + 0 0$0.9 trigger game_phase = 2 do
52503: LD_EXP 88
52507: PUSH
52508: LD_INT 2
52510: EQUAL
52511: IFFALSE 52592
52513: GO 52515
52515: DISABLE
// begin wait ( [ 0 0$18 , 0 0$15 , 0 0$12 ] [ difficulty ] ) ;
52516: LD_INT 630
52518: PUSH
52519: LD_INT 525
52521: PUSH
52522: LD_INT 420
52524: PUSH
52525: EMPTY
52526: LIST
52527: LIST
52528: LIST
52529: PUSH
52530: LD_OWVAR 67
52534: ARRAY
52535: PPUSH
52536: CALL_OW 67
// DialogueOn ;
52540: CALL_OW 6
// SayRadio ( Simms , D8-Simm-1_v2 ) ;
52544: LD_EXP 24
52548: PPUSH
52549: LD_STRING D8-Simm-1_v2
52551: PPUSH
52552: CALL_OW 94
// SayRadio ( Powell , D8-Po-1 ) ;
52556: LD_EXP 28
52560: PPUSH
52561: LD_STRING D8-Po-1
52563: PPUSH
52564: CALL_OW 94
// DialogueOff ;
52568: CALL_OW 7
// SetAttitude ( americans , you_alt , att_enemy , true ) ;
52572: LD_EXP 6
52576: PPUSH
52577: LD_EXP 5
52581: PPUSH
52582: LD_INT 2
52584: PPUSH
52585: LD_INT 1
52587: PPUSH
52588: CALL_OW 80
// end ;
52592: END
// every 0 0$1 + 0 0$0.6 trigger GetAttitude ( americans , you_alt ) = att_enemy do var i , val ; var sniper_group_1 , sniper_group_2 , hex_list_1 , hex_list_2 , unit_hex , rand_hexes , k ;
52593: LD_EXP 6
52597: PPUSH
52598: LD_EXP 5
52602: PPUSH
52603: CALL_OW 81
52607: PUSH
52608: LD_INT 2
52610: EQUAL
52611: IFFALSE 54010
52613: GO 52615
52615: DISABLE
52616: LD_INT 0
52618: PPUSH
52619: PPUSH
52620: PPUSH
52621: PPUSH
52622: PPUSH
52623: PPUSH
52624: PPUSH
52625: PPUSH
52626: PPUSH
// begin sniper_group_1 = CreateUnitsWithClass ( difficulty , class_sniper , americans ) ;
52627: LD_ADDR_VAR 0 3
52631: PUSH
52632: LD_OWVAR 67
52636: PPUSH
52637: LD_INT 5
52639: PPUSH
52640: LD_EXP 6
52644: PPUSH
52645: CALL 8527 0 3
52649: ST_TO_ADDR
// sniper_group_2 = CreateUnitsWithClass ( difficulty , class_sniper , americans ) ;
52650: LD_ADDR_VAR 0 4
52654: PUSH
52655: LD_OWVAR 67
52659: PPUSH
52660: LD_INT 5
52662: PPUSH
52663: LD_EXP 6
52667: PPUSH
52668: CALL 8527 0 3
52672: ST_TO_ADDR
// for i in sniper_group_1 ^ sniper_group_2 do
52673: LD_ADDR_VAR 0 1
52677: PUSH
52678: LD_VAR 0 3
52682: PUSH
52683: LD_VAR 0 4
52687: ADD
52688: PUSH
52689: FOR_IN
52690: IFFALSE 52735
// PlaceUnitXYR ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] , 7 , false ) ;
52692: LD_VAR 0 1
52696: PPUSH
52697: LD_EXP 41
52701: PUSH
52702: LD_INT 1
52704: ARRAY
52705: PUSH
52706: LD_INT 1
52708: ARRAY
52709: PPUSH
52710: LD_EXP 41
52714: PUSH
52715: LD_INT 1
52717: ARRAY
52718: PUSH
52719: LD_INT 2
52721: ARRAY
52722: PPUSH
52723: LD_INT 7
52725: PPUSH
52726: LD_INT 0
52728: PPUSH
52729: CALL_OW 50
52733: GO 52689
52735: POP
52736: POP
// unit_hex = [ ] ;
52737: LD_ADDR_VAR 0 7
52741: PUSH
52742: EMPTY
52743: ST_TO_ADDR
// for i in sniper_group_1 ^ sniper_group_2 do
52744: LD_ADDR_VAR 0 1
52748: PUSH
52749: LD_VAR 0 3
52753: PUSH
52754: LD_VAR 0 4
52758: ADD
52759: PUSH
52760: FOR_IN
52761: IFFALSE 52788
// unit_hex = Replace ( unit_hex , i , 1 ) ;
52763: LD_ADDR_VAR 0 7
52767: PUSH
52768: LD_VAR 0 7
52772: PPUSH
52773: LD_VAR 0 1
52777: PPUSH
52778: LD_INT 1
52780: PPUSH
52781: CALL_OW 1
52785: ST_TO_ADDR
52786: GO 52760
52788: POP
52789: POP
// if FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_inarea , player_base_1 ] ] ) > 0 then
52790: LD_INT 22
52792: PUSH
52793: LD_EXP 2
52797: PUSH
52798: EMPTY
52799: LIST
52800: LIST
52801: PUSH
52802: LD_INT 2
52804: PUSH
52805: LD_INT 30
52807: PUSH
52808: LD_INT 0
52810: PUSH
52811: EMPTY
52812: LIST
52813: LIST
52814: PUSH
52815: LD_INT 30
52817: PUSH
52818: LD_INT 1
52820: PUSH
52821: EMPTY
52822: LIST
52823: LIST
52824: PUSH
52825: EMPTY
52826: LIST
52827: LIST
52828: LIST
52829: PUSH
52830: LD_INT 95
52832: PUSH
52833: LD_INT 1
52835: PUSH
52836: EMPTY
52837: LIST
52838: LIST
52839: PUSH
52840: EMPTY
52841: LIST
52842: LIST
52843: LIST
52844: PPUSH
52845: CALL_OW 69
52849: PUSH
52850: LD_INT 0
52852: GREATER
52853: IFFALSE 52959
// begin hex_list_1 = [ [ 116 , 59 ] , [ 115 , 67 ] , [ 114 , 77 ] ] ;
52855: LD_ADDR_VAR 0 5
52859: PUSH
52860: LD_INT 116
52862: PUSH
52863: LD_INT 59
52865: PUSH
52866: EMPTY
52867: LIST
52868: LIST
52869: PUSH
52870: LD_INT 115
52872: PUSH
52873: LD_INT 67
52875: PUSH
52876: EMPTY
52877: LIST
52878: LIST
52879: PUSH
52880: LD_INT 114
52882: PUSH
52883: LD_INT 77
52885: PUSH
52886: EMPTY
52887: LIST
52888: LIST
52889: PUSH
52890: EMPTY
52891: LIST
52892: LIST
52893: LIST
52894: ST_TO_ADDR
// hex_list_2 = [ [ 116 , 59 ] , [ 124 , 77 ] , [ 123 , 86 ] , [ 135 , 96 ] , [ 128 , 87 ] ] ;
52895: LD_ADDR_VAR 0 6
52899: PUSH
52900: LD_INT 116
52902: PUSH
52903: LD_INT 59
52905: PUSH
52906: EMPTY
52907: LIST
52908: LIST
52909: PUSH
52910: LD_INT 124
52912: PUSH
52913: LD_INT 77
52915: PUSH
52916: EMPTY
52917: LIST
52918: LIST
52919: PUSH
52920: LD_INT 123
52922: PUSH
52923: LD_INT 86
52925: PUSH
52926: EMPTY
52927: LIST
52928: LIST
52929: PUSH
52930: LD_INT 135
52932: PUSH
52933: LD_INT 96
52935: PUSH
52936: EMPTY
52937: LIST
52938: LIST
52939: PUSH
52940: LD_INT 128
52942: PUSH
52943: LD_INT 87
52945: PUSH
52946: EMPTY
52947: LIST
52948: LIST
52949: PUSH
52950: EMPTY
52951: LIST
52952: LIST
52953: LIST
52954: LIST
52955: LIST
52956: ST_TO_ADDR
// end else
52957: GO 53050
// begin hex_list_1 = [ [ 116 , 59 ] , [ 117 , 66 ] , [ 116 , 72 ] ] ;
52959: LD_ADDR_VAR 0 5
52963: PUSH
52964: LD_INT 116
52966: PUSH
52967: LD_INT 59
52969: PUSH
52970: EMPTY
52971: LIST
52972: LIST
52973: PUSH
52974: LD_INT 117
52976: PUSH
52977: LD_INT 66
52979: PUSH
52980: EMPTY
52981: LIST
52982: LIST
52983: PUSH
52984: LD_INT 116
52986: PUSH
52987: LD_INT 72
52989: PUSH
52990: EMPTY
52991: LIST
52992: LIST
52993: PUSH
52994: EMPTY
52995: LIST
52996: LIST
52997: LIST
52998: ST_TO_ADDR
// hex_list_2 = [ [ 116 , 59 ] , [ 134 , 69 ] , [ 150 , 82 ] , [ 157 , 98 ] ] ;
52999: LD_ADDR_VAR 0 6
53003: PUSH
53004: LD_INT 116
53006: PUSH
53007: LD_INT 59
53009: PUSH
53010: EMPTY
53011: LIST
53012: LIST
53013: PUSH
53014: LD_INT 134
53016: PUSH
53017: LD_INT 69
53019: PUSH
53020: EMPTY
53021: LIST
53022: LIST
53023: PUSH
53024: LD_INT 150
53026: PUSH
53027: LD_INT 82
53029: PUSH
53030: EMPTY
53031: LIST
53032: LIST
53033: PUSH
53034: LD_INT 157
53036: PUSH
53037: LD_INT 98
53039: PUSH
53040: EMPTY
53041: LIST
53042: LIST
53043: PUSH
53044: EMPTY
53045: LIST
53046: LIST
53047: LIST
53048: LIST
53049: ST_TO_ADDR
// end ; rand_hexes = [ ] ;
53050: LD_ADDR_VAR 0 8
53054: PUSH
53055: EMPTY
53056: ST_TO_ADDR
// for i in sniper_group_1 do
53057: LD_ADDR_VAR 0 1
53061: PUSH
53062: LD_VAR 0 3
53066: PUSH
53067: FOR_IN
53068: IFFALSE 53101
// rand_hexes = Replace ( rand_hexes , i , hex_list_1 [ 1 ] ) ;
53070: LD_ADDR_VAR 0 8
53074: PUSH
53075: LD_VAR 0 8
53079: PPUSH
53080: LD_VAR 0 1
53084: PPUSH
53085: LD_VAR 0 5
53089: PUSH
53090: LD_INT 1
53092: ARRAY
53093: PPUSH
53094: CALL_OW 1
53098: ST_TO_ADDR
53099: GO 53067
53101: POP
53102: POP
// for i in sniper_group_2 do
53103: LD_ADDR_VAR 0 1
53107: PUSH
53108: LD_VAR 0 4
53112: PUSH
53113: FOR_IN
53114: IFFALSE 53147
// rand_hexes = Replace ( rand_hexes , i , hex_list_2 [ 1 ] ) ;
53116: LD_ADDR_VAR 0 8
53120: PUSH
53121: LD_VAR 0 8
53125: PPUSH
53126: LD_VAR 0 1
53130: PPUSH
53131: LD_VAR 0 6
53135: PUSH
53136: LD_INT 1
53138: ARRAY
53139: PPUSH
53140: CALL_OW 1
53144: ST_TO_ADDR
53145: GO 53113
53147: POP
53148: POP
// repeat wait ( 0 0$1 ) ;
53149: LD_INT 35
53151: PPUSH
53152: CALL_OW 67
// sniper_group_1 = UnitFilter ( sniper_group_1 , [ f_ok ] ) ;
53156: LD_ADDR_VAR 0 3
53160: PUSH
53161: LD_VAR 0 3
53165: PPUSH
53166: LD_INT 50
53168: PUSH
53169: EMPTY
53170: LIST
53171: PPUSH
53172: CALL_OW 72
53176: ST_TO_ADDR
// sniper_group_2 = UnitFilter ( sniper_group_2 , [ f_ok ] ) ;
53177: LD_ADDR_VAR 0 4
53181: PUSH
53182: LD_VAR 0 4
53186: PPUSH
53187: LD_INT 50
53189: PUSH
53190: EMPTY
53191: LIST
53192: PPUSH
53193: CALL_OW 72
53197: ST_TO_ADDR
// if sniper_group_1 = 0 and sniper_group_2 = 0 then
53198: LD_VAR 0 3
53202: PUSH
53203: LD_INT 0
53205: EQUAL
53206: PUSH
53207: LD_VAR 0 4
53211: PUSH
53212: LD_INT 0
53214: EQUAL
53215: AND
53216: IFFALSE 53220
// exit ;
53218: GO 54010
// for i in sniper_group_1 do
53220: LD_ADDR_VAR 0 1
53224: PUSH
53225: LD_VAR 0 3
53229: PUSH
53230: FOR_IN
53231: IFFALSE 53611
// begin if GetDistUnitXY ( i , rand_hexes [ i ] [ 1 ] , rand_hexes [ i ] [ 2 ] ) > 2 then
53233: LD_VAR 0 1
53237: PPUSH
53238: LD_VAR 0 8
53242: PUSH
53243: LD_VAR 0 1
53247: ARRAY
53248: PUSH
53249: LD_INT 1
53251: ARRAY
53252: PPUSH
53253: LD_VAR 0 8
53257: PUSH
53258: LD_VAR 0 1
53262: ARRAY
53263: PUSH
53264: LD_INT 2
53266: ARRAY
53267: PPUSH
53268: CALL_OW 297
53272: PUSH
53273: LD_INT 2
53275: GREATER
53276: IFFALSE 53413
// begin if unit_hex [ i ] = hex_list_1 + 0 then
53278: LD_VAR 0 7
53282: PUSH
53283: LD_VAR 0 1
53287: ARRAY
53288: PUSH
53289: LD_VAR 0 5
53293: PUSH
53294: LD_INT 0
53296: PLUS
53297: EQUAL
53298: IFFALSE 53341
// ComAgressiveMove ( i , rand_hexes [ i ] [ 1 ] , rand_hexes [ i ] [ 2 ] ) else
53300: LD_VAR 0 1
53304: PPUSH
53305: LD_VAR 0 8
53309: PUSH
53310: LD_VAR 0 1
53314: ARRAY
53315: PUSH
53316: LD_INT 1
53318: ARRAY
53319: PPUSH
53320: LD_VAR 0 8
53324: PUSH
53325: LD_VAR 0 1
53329: ARRAY
53330: PUSH
53331: LD_INT 2
53333: ARRAY
53334: PPUSH
53335: CALL_OW 114
53339: GO 53380
// ComMoveXY ( i , rand_hexes [ i ] [ 1 ] , rand_hexes [ i ] [ 2 ] ) ;
53341: LD_VAR 0 1
53345: PPUSH
53346: LD_VAR 0 8
53350: PUSH
53351: LD_VAR 0 1
53355: ARRAY
53356: PUSH
53357: LD_INT 1
53359: ARRAY
53360: PPUSH
53361: LD_VAR 0 8
53365: PUSH
53366: LD_VAR 0 1
53370: ARRAY
53371: PUSH
53372: LD_INT 2
53374: ARRAY
53375: PPUSH
53376: CALL_OW 111
// if unit_hex [ i ] = hex_list_1 + 0 then
53380: LD_VAR 0 7
53384: PUSH
53385: LD_VAR 0 1
53389: ARRAY
53390: PUSH
53391: LD_VAR 0 5
53395: PUSH
53396: LD_INT 0
53398: PLUS
53399: EQUAL
53400: IFFALSE 53411
// AddComHold ( i ) ;
53402: LD_VAR 0 1
53406: PPUSH
53407: CALL_OW 200
// end else
53411: GO 53609
// if unit_hex [ i ] < hex_list_1 then
53413: LD_VAR 0 7
53417: PUSH
53418: LD_VAR 0 1
53422: ARRAY
53423: PUSH
53424: LD_VAR 0 5
53428: LESS
53429: IFFALSE 53609
// begin unit_hex = Replace ( unit_hex , i , unit_hex [ i ] + 1 ) ;
53431: LD_ADDR_VAR 0 7
53435: PUSH
53436: LD_VAR 0 7
53440: PPUSH
53441: LD_VAR 0 1
53445: PPUSH
53446: LD_VAR 0 7
53450: PUSH
53451: LD_VAR 0 1
53455: ARRAY
53456: PUSH
53457: LD_INT 1
53459: PLUS
53460: PPUSH
53461: CALL_OW 1
53465: ST_TO_ADDR
// k = 0 ;
53466: LD_ADDR_VAR 0 9
53470: PUSH
53471: LD_INT 0
53473: ST_TO_ADDR
// repeat val = RandHexXYR ( hex_list_1 [ unit_hex [ i ] ] [ 1 ] , hex_list_1 [ unit_hex [ i ] ] [ 2 ] , 1 , false ) ;
53474: LD_ADDR_VAR 0 2
53478: PUSH
53479: LD_VAR 0 5
53483: PUSH
53484: LD_VAR 0 7
53488: PUSH
53489: LD_VAR 0 1
53493: ARRAY
53494: ARRAY
53495: PUSH
53496: LD_INT 1
53498: ARRAY
53499: PPUSH
53500: LD_VAR 0 5
53504: PUSH
53505: LD_VAR 0 7
53509: PUSH
53510: LD_VAR 0 1
53514: ARRAY
53515: ARRAY
53516: PUSH
53517: LD_INT 2
53519: ARRAY
53520: PPUSH
53521: LD_INT 1
53523: PPUSH
53524: LD_INT 0
53526: PPUSH
53527: CALL_OW 17
53531: ST_TO_ADDR
// k = k + 1 ;
53532: LD_ADDR_VAR 0 9
53536: PUSH
53537: LD_VAR 0 9
53541: PUSH
53542: LD_INT 1
53544: PLUS
53545: ST_TO_ADDR
// until HexInfo ( val [ 1 ] , val [ 2 ] ) >= 0 or k >= 10 ;
53546: LD_VAR 0 2
53550: PUSH
53551: LD_INT 1
53553: ARRAY
53554: PPUSH
53555: LD_VAR 0 2
53559: PUSH
53560: LD_INT 2
53562: ARRAY
53563: PPUSH
53564: CALL_OW 428
53568: PUSH
53569: LD_INT 0
53571: GREATEREQUAL
53572: PUSH
53573: LD_VAR 0 9
53577: PUSH
53578: LD_INT 10
53580: GREATEREQUAL
53581: OR
53582: IFFALSE 53474
// rand_hexes = Replace ( rand_hexes , i , val ) ;
53584: LD_ADDR_VAR 0 8
53588: PUSH
53589: LD_VAR 0 8
53593: PPUSH
53594: LD_VAR 0 1
53598: PPUSH
53599: LD_VAR 0 2
53603: PPUSH
53604: CALL_OW 1
53608: ST_TO_ADDR
// end ; end ;
53609: GO 53230
53611: POP
53612: POP
// for i in sniper_group_2 do
53613: LD_ADDR_VAR 0 1
53617: PUSH
53618: LD_VAR 0 4
53622: PUSH
53623: FOR_IN
53624: IFFALSE 54004
// begin if GetDistUnitXY ( i , rand_hexes [ i ] [ 1 ] , rand_hexes [ i ] [ 2 ] ) > 2 then
53626: LD_VAR 0 1
53630: PPUSH
53631: LD_VAR 0 8
53635: PUSH
53636: LD_VAR 0 1
53640: ARRAY
53641: PUSH
53642: LD_INT 1
53644: ARRAY
53645: PPUSH
53646: LD_VAR 0 8
53650: PUSH
53651: LD_VAR 0 1
53655: ARRAY
53656: PUSH
53657: LD_INT 2
53659: ARRAY
53660: PPUSH
53661: CALL_OW 297
53665: PUSH
53666: LD_INT 2
53668: GREATER
53669: IFFALSE 53806
// begin if unit_hex [ i ] = hex_list_2 + 0 then
53671: LD_VAR 0 7
53675: PUSH
53676: LD_VAR 0 1
53680: ARRAY
53681: PUSH
53682: LD_VAR 0 6
53686: PUSH
53687: LD_INT 0
53689: PLUS
53690: EQUAL
53691: IFFALSE 53734
// ComAgressiveMove ( i , rand_hexes [ i ] [ 1 ] , rand_hexes [ i ] [ 2 ] ) else
53693: LD_VAR 0 1
53697: PPUSH
53698: LD_VAR 0 8
53702: PUSH
53703: LD_VAR 0 1
53707: ARRAY
53708: PUSH
53709: LD_INT 1
53711: ARRAY
53712: PPUSH
53713: LD_VAR 0 8
53717: PUSH
53718: LD_VAR 0 1
53722: ARRAY
53723: PUSH
53724: LD_INT 2
53726: ARRAY
53727: PPUSH
53728: CALL_OW 114
53732: GO 53773
// ComMoveXY ( i , rand_hexes [ i ] [ 1 ] , rand_hexes [ i ] [ 2 ] ) ;
53734: LD_VAR 0 1
53738: PPUSH
53739: LD_VAR 0 8
53743: PUSH
53744: LD_VAR 0 1
53748: ARRAY
53749: PUSH
53750: LD_INT 1
53752: ARRAY
53753: PPUSH
53754: LD_VAR 0 8
53758: PUSH
53759: LD_VAR 0 1
53763: ARRAY
53764: PUSH
53765: LD_INT 2
53767: ARRAY
53768: PPUSH
53769: CALL_OW 111
// if unit_hex [ i ] = hex_list_2 + 0 then
53773: LD_VAR 0 7
53777: PUSH
53778: LD_VAR 0 1
53782: ARRAY
53783: PUSH
53784: LD_VAR 0 6
53788: PUSH
53789: LD_INT 0
53791: PLUS
53792: EQUAL
53793: IFFALSE 53804
// AddComHold ( i ) ;
53795: LD_VAR 0 1
53799: PPUSH
53800: CALL_OW 200
// end else
53804: GO 54002
// if unit_hex [ i ] < hex_list_2 then
53806: LD_VAR 0 7
53810: PUSH
53811: LD_VAR 0 1
53815: ARRAY
53816: PUSH
53817: LD_VAR 0 6
53821: LESS
53822: IFFALSE 54002
// begin unit_hex = Replace ( unit_hex , i , unit_hex [ i ] + 1 ) ;
53824: LD_ADDR_VAR 0 7
53828: PUSH
53829: LD_VAR 0 7
53833: PPUSH
53834: LD_VAR 0 1
53838: PPUSH
53839: LD_VAR 0 7
53843: PUSH
53844: LD_VAR 0 1
53848: ARRAY
53849: PUSH
53850: LD_INT 1
53852: PLUS
53853: PPUSH
53854: CALL_OW 1
53858: ST_TO_ADDR
// k = 0 ;
53859: LD_ADDR_VAR 0 9
53863: PUSH
53864: LD_INT 0
53866: ST_TO_ADDR
// repeat val = RandHexXYR ( hex_list_2 [ unit_hex [ i ] ] [ 1 ] , hex_list_2 [ unit_hex [ i ] ] [ 2 ] , 1 , false ) ;
53867: LD_ADDR_VAR 0 2
53871: PUSH
53872: LD_VAR 0 6
53876: PUSH
53877: LD_VAR 0 7
53881: PUSH
53882: LD_VAR 0 1
53886: ARRAY
53887: ARRAY
53888: PUSH
53889: LD_INT 1
53891: ARRAY
53892: PPUSH
53893: LD_VAR 0 6
53897: PUSH
53898: LD_VAR 0 7
53902: PUSH
53903: LD_VAR 0 1
53907: ARRAY
53908: ARRAY
53909: PUSH
53910: LD_INT 2
53912: ARRAY
53913: PPUSH
53914: LD_INT 1
53916: PPUSH
53917: LD_INT 0
53919: PPUSH
53920: CALL_OW 17
53924: ST_TO_ADDR
// k = k + 1 ;
53925: LD_ADDR_VAR 0 9
53929: PUSH
53930: LD_VAR 0 9
53934: PUSH
53935: LD_INT 1
53937: PLUS
53938: ST_TO_ADDR
// until HexInfo ( val [ 1 ] , val [ 2 ] ) >= 0 or k >= 10 ;
53939: LD_VAR 0 2
53943: PUSH
53944: LD_INT 1
53946: ARRAY
53947: PPUSH
53948: LD_VAR 0 2
53952: PUSH
53953: LD_INT 2
53955: ARRAY
53956: PPUSH
53957: CALL_OW 428
53961: PUSH
53962: LD_INT 0
53964: GREATEREQUAL
53965: PUSH
53966: LD_VAR 0 9
53970: PUSH
53971: LD_INT 10
53973: GREATEREQUAL
53974: OR
53975: IFFALSE 53867
// rand_hexes = Replace ( rand_hexes , i , val ) ;
53977: LD_ADDR_VAR 0 8
53981: PUSH
53982: LD_VAR 0 8
53986: PPUSH
53987: LD_VAR 0 1
53991: PPUSH
53992: LD_VAR 0 2
53996: PPUSH
53997: CALL_OW 1
54001: ST_TO_ADDR
// end ; end ;
54002: GO 53623
54004: POP
54005: POP
// until false ;
54006: LD_INT 0
54008: IFFALSE 53149
// end ;
54010: PPOPN 9
54012: END
// every 0 0$1 + 0 0$0.9 trigger game_phase = 3 do var old_man , x , y , temp_list , dist ; var hex , hex_list_before , hex_list_after ;
54013: LD_EXP 88
54017: PUSH
54018: LD_INT 3
54020: EQUAL
54021: IFFALSE 55643
54023: GO 54025
54025: DISABLE
54026: LD_INT 0
54028: PPUSH
54029: PPUSH
54030: PPUSH
54031: PPUSH
54032: PPUSH
54033: PPUSH
54034: PPUSH
54035: PPUSH
// begin while ( ai_vehicles_attack [ 3 ] > 0 or ai_attacking_scientists [ 3 ] > 0 or ai_attacking_soldiers [ 3 ] > 0 ) and russian_attack_strategy <> 1 do
54036: LD_EXP 40
54040: PUSH
54041: LD_INT 3
54043: ARRAY
54044: PUSH
54045: LD_INT 0
54047: GREATER
54048: PUSH
54049: LD_EXP 64
54053: PUSH
54054: LD_INT 3
54056: ARRAY
54057: PUSH
54058: LD_INT 0
54060: GREATER
54061: OR
54062: PUSH
54063: LD_EXP 63
54067: PUSH
54068: LD_INT 3
54070: ARRAY
54071: PUSH
54072: LD_INT 0
54074: GREATER
54075: OR
54076: PUSH
54077: LD_EXP 83
54081: PUSH
54082: LD_INT 1
54084: NONEQUAL
54085: AND
54086: IFFALSE 54097
// wait ( 0 0$2 ) ;
54088: LD_INT 70
54090: PPUSH
54091: CALL_OW 67
54095: GO 54036
// if PlayerAtEasternBorder then
54097: CALL 30479 0 0
54101: IFFALSE 54163
// begin hex_list_before = [ [ 127 , 42 ] , [ 139 , 45 ] ] ;
54103: LD_ADDR_VAR 0 7
54107: PUSH
54108: LD_INT 127
54110: PUSH
54111: LD_INT 42
54113: PUSH
54114: EMPTY
54115: LIST
54116: LIST
54117: PUSH
54118: LD_INT 139
54120: PUSH
54121: LD_INT 45
54123: PUSH
54124: EMPTY
54125: LIST
54126: LIST
54127: PUSH
54128: EMPTY
54129: LIST
54130: LIST
54131: ST_TO_ADDR
// hex_list_after = [ [ 139 , 45 ] , [ 138 , 39 ] ] ;
54132: LD_ADDR_VAR 0 8
54136: PUSH
54137: LD_INT 139
54139: PUSH
54140: LD_INT 45
54142: PUSH
54143: EMPTY
54144: LIST
54145: LIST
54146: PUSH
54147: LD_INT 138
54149: PUSH
54150: LD_INT 39
54152: PUSH
54153: EMPTY
54154: LIST
54155: LIST
54156: PUSH
54157: EMPTY
54158: LIST
54159: LIST
54160: ST_TO_ADDR
// end else
54161: GO 54232
// begin hex_list_before = [ [ 119 , 55 ] , [ 124 , 73 ] , [ 121 , 86 ] ] ;
54163: LD_ADDR_VAR 0 7
54167: PUSH
54168: LD_INT 119
54170: PUSH
54171: LD_INT 55
54173: PUSH
54174: EMPTY
54175: LIST
54176: LIST
54177: PUSH
54178: LD_INT 124
54180: PUSH
54181: LD_INT 73
54183: PUSH
54184: EMPTY
54185: LIST
54186: LIST
54187: PUSH
54188: LD_INT 121
54190: PUSH
54191: LD_INT 86
54193: PUSH
54194: EMPTY
54195: LIST
54196: LIST
54197: PUSH
54198: EMPTY
54199: LIST
54200: LIST
54201: LIST
54202: ST_TO_ADDR
// hex_list_after = [ [ 121 , 99 ] , [ 141 , 118 ] ] ;
54203: LD_ADDR_VAR 0 8
54207: PUSH
54208: LD_INT 121
54210: PUSH
54211: LD_INT 99
54213: PUSH
54214: EMPTY
54215: LIST
54216: LIST
54217: PUSH
54218: LD_INT 141
54220: PUSH
54221: LD_INT 118
54223: PUSH
54224: EMPTY
54225: LIST
54226: LIST
54227: PUSH
54228: EMPTY
54229: LIST
54230: LIST
54231: ST_TO_ADDR
// end ; temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
54232: LD_ADDR_VAR 0 4
54236: PUSH
54237: LD_INT 22
54239: PUSH
54240: LD_EXP 2
54244: PUSH
54245: EMPTY
54246: LIST
54247: LIST
54248: PUSH
54249: LD_INT 2
54251: PUSH
54252: LD_INT 30
54254: PUSH
54255: LD_INT 0
54257: PUSH
54258: EMPTY
54259: LIST
54260: LIST
54261: PUSH
54262: LD_INT 30
54264: PUSH
54265: LD_INT 1
54267: PUSH
54268: EMPTY
54269: LIST
54270: LIST
54271: PUSH
54272: EMPTY
54273: LIST
54274: LIST
54275: LIST
54276: PUSH
54277: EMPTY
54278: LIST
54279: LIST
54280: PPUSH
54281: CALL_OW 69
54285: ST_TO_ADDR
// if temp_list > 0 then
54286: LD_VAR 0 4
54290: PUSH
54291: LD_INT 0
54293: GREATER
54294: IFFALSE 54335
// hex = [ GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ] else
54296: LD_ADDR_VAR 0 6
54300: PUSH
54301: LD_VAR 0 4
54305: PUSH
54306: LD_INT 1
54308: ARRAY
54309: PPUSH
54310: CALL_OW 250
54314: PUSH
54315: LD_VAR 0 4
54319: PUSH
54320: LD_INT 1
54322: ARRAY
54323: PPUSH
54324: CALL_OW 251
54328: PUSH
54329: EMPTY
54330: LIST
54331: LIST
54332: ST_TO_ADDR
54333: GO 54373
// if PlayerAtEasternBorder then
54335: CALL 30479 0 0
54339: IFFALSE 54358
// hex = [ 144 , 65 ] else
54341: LD_ADDR_VAR 0 6
54345: PUSH
54346: LD_INT 144
54348: PUSH
54349: LD_INT 65
54351: PUSH
54352: EMPTY
54353: LIST
54354: LIST
54355: ST_TO_ADDR
54356: GO 54373
// hex = [ 99 , 110 ] ;
54358: LD_ADDR_VAR 0 6
54362: PUSH
54363: LD_INT 99
54365: PUSH
54366: LD_INT 110
54368: PUSH
54369: EMPTY
54370: LIST
54371: LIST
54372: ST_TO_ADDR
// hex_list_before = hex_list_before ^ [ hex ] ;
54373: LD_ADDR_VAR 0 7
54377: PUSH
54378: LD_VAR 0 7
54382: PUSH
54383: LD_VAR 0 6
54387: PUSH
54388: EMPTY
54389: LIST
54390: ADD
54391: ST_TO_ADDR
// SetDir ( Khattam , 5 ) ;
54392: LD_EXP 26
54396: PPUSH
54397: LD_INT 5
54399: PPUSH
54400: CALL_OW 233
// temp_list = FilterAllUnits ( [ [ f_side , americans ] , [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] , [ f_btype , b_lab_full ] ] , [ f_ok ] ] ) ;
54404: LD_ADDR_VAR 0 4
54408: PUSH
54409: LD_INT 22
54411: PUSH
54412: LD_EXP 6
54416: PUSH
54417: EMPTY
54418: LIST
54419: LIST
54420: PUSH
54421: LD_INT 2
54423: PUSH
54424: LD_INT 30
54426: PUSH
54427: LD_INT 6
54429: PUSH
54430: EMPTY
54431: LIST
54432: LIST
54433: PUSH
54434: LD_INT 30
54436: PUSH
54437: LD_INT 7
54439: PUSH
54440: EMPTY
54441: LIST
54442: LIST
54443: PUSH
54444: LD_INT 30
54446: PUSH
54447: LD_INT 8
54449: PUSH
54450: EMPTY
54451: LIST
54452: LIST
54453: PUSH
54454: EMPTY
54455: LIST
54456: LIST
54457: LIST
54458: LIST
54459: PUSH
54460: LD_INT 50
54462: PUSH
54463: EMPTY
54464: LIST
54465: PUSH
54466: EMPTY
54467: LIST
54468: LIST
54469: LIST
54470: PPUSH
54471: CALL_OW 69
54475: ST_TO_ADDR
// if temp_list > 0 then
54476: LD_VAR 0 4
54480: PUSH
54481: LD_INT 0
54483: GREATER
54484: IFFALSE 54612
// begin while not PlaceHumanInUnit ( Khattam , temp_list [ 1 ] ) do
54486: LD_EXP 26
54490: PPUSH
54491: LD_VAR 0 4
54495: PUSH
54496: LD_INT 1
54498: ARRAY
54499: PPUSH
54500: CALL_OW 52
54504: NOT
54505: IFFALSE 54610
// begin if not IsOk ( temp_list [ 1 ] ) or UnitsInside ( temp_list [ 1 ] ) + 0 = 6 then
54507: LD_VAR 0 4
54511: PUSH
54512: LD_INT 1
54514: ARRAY
54515: PPUSH
54516: CALL_OW 302
54520: NOT
54521: PUSH
54522: LD_VAR 0 4
54526: PUSH
54527: LD_INT 1
54529: ARRAY
54530: PPUSH
54531: CALL_OW 313
54535: PUSH
54536: LD_INT 0
54538: PLUS
54539: PUSH
54540: LD_INT 6
54542: EQUAL
54543: OR
54544: IFFALSE 54601
// begin while not PlaceUnitXYR ( Khattam , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] , 4 , false ) do
54546: LD_EXP 26
54550: PPUSH
54551: LD_EXP 41
54555: PUSH
54556: LD_INT 1
54558: ARRAY
54559: PUSH
54560: LD_INT 1
54562: ARRAY
54563: PPUSH
54564: LD_EXP 41
54568: PUSH
54569: LD_INT 1
54571: ARRAY
54572: PUSH
54573: LD_INT 2
54575: ARRAY
54576: PPUSH
54577: LD_INT 4
54579: PPUSH
54580: LD_INT 0
54582: PPUSH
54583: CALL_OW 50
54587: NOT
54588: IFFALSE 54599
// wait ( 0 0$2 ) ;
54590: LD_INT 70
54592: PPUSH
54593: CALL_OW 67
54597: GO 54546
// break ;
54599: GO 54610
// end ; wait ( 0 0$2 ) ;
54601: LD_INT 70
54603: PPUSH
54604: CALL_OW 67
// end ;
54608: GO 54486
// end else
54610: GO 54665
// begin while not PlaceUnitXYR ( Khattam , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] , 4 , false ) do
54612: LD_EXP 26
54616: PPUSH
54617: LD_EXP 41
54621: PUSH
54622: LD_INT 1
54624: ARRAY
54625: PUSH
54626: LD_INT 1
54628: ARRAY
54629: PPUSH
54630: LD_EXP 41
54634: PUSH
54635: LD_INT 1
54637: ARRAY
54638: PUSH
54639: LD_INT 2
54641: ARRAY
54642: PPUSH
54643: LD_INT 4
54645: PPUSH
54646: LD_INT 0
54648: PPUSH
54649: CALL_OW 50
54653: NOT
54654: IFFALSE 54665
// wait ( 0 0$2 ) ;
54656: LD_INT 70
54658: PPUSH
54659: CALL_OW 67
54663: GO 54612
// end ; SetAttitude ( you , americans_alt , att_neutral , true ) ;
54665: LD_EXP 2
54669: PPUSH
54670: LD_EXP 8
54674: PPUSH
54675: LD_INT 0
54677: PPUSH
54678: LD_INT 1
54680: PPUSH
54681: CALL_OW 80
// hex = 1 ;
54685: LD_ADDR_VAR 0 6
54689: PUSH
54690: LD_INT 1
54692: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
54693: LD_INT 35
54695: PPUSH
54696: CALL_OW 67
// if GetDistUnitXY ( Khattam , hex_list_before [ hex ] [ 1 ] , hex_list_before [ hex ] [ 2 ] ) > 3 then
54700: LD_EXP 26
54704: PPUSH
54705: LD_VAR 0 7
54709: PUSH
54710: LD_VAR 0 6
54714: ARRAY
54715: PUSH
54716: LD_INT 1
54718: ARRAY
54719: PPUSH
54720: LD_VAR 0 7
54724: PUSH
54725: LD_VAR 0 6
54729: ARRAY
54730: PUSH
54731: LD_INT 2
54733: ARRAY
54734: PPUSH
54735: CALL_OW 297
54739: PUSH
54740: LD_INT 3
54742: GREATER
54743: IFFALSE 54786
// ComMoveXY ( Khattam , hex_list_before [ hex ] [ 1 ] , hex_list_before [ hex ] [ 2 ] ) else
54745: LD_EXP 26
54749: PPUSH
54750: LD_VAR 0 7
54754: PUSH
54755: LD_VAR 0 6
54759: ARRAY
54760: PUSH
54761: LD_INT 1
54763: ARRAY
54764: PPUSH
54765: LD_VAR 0 7
54769: PUSH
54770: LD_VAR 0 6
54774: ARRAY
54775: PUSH
54776: LD_INT 2
54778: ARRAY
54779: PPUSH
54780: CALL_OW 111
54784: GO 54812
// if hex < hex_list_before then
54786: LD_VAR 0 6
54790: PUSH
54791: LD_VAR 0 7
54795: LESS
54796: IFFALSE 54812
// hex = hex + 1 ;
54798: LD_ADDR_VAR 0 6
54802: PUSH
54803: LD_VAR 0 6
54807: PUSH
54808: LD_INT 1
54810: PLUS
54811: ST_TO_ADDR
// until See ( you , Khattam ) or IsDead ( Khattam ) ;
54812: LD_EXP 2
54816: PPUSH
54817: LD_EXP 26
54821: PPUSH
54822: CALL_OW 292
54826: PUSH
54827: LD_EXP 26
54831: PPUSH
54832: CALL_OW 301
54836: OR
54837: IFFALSE 54693
// if See ( you , Khattam ) then
54839: LD_EXP 2
54843: PPUSH
54844: LD_EXP 26
54848: PPUSH
54849: CALL_OW 292
54853: IFFALSE 55643
// begin CenterOnUnits ( Khattam ) ;
54855: LD_EXP 26
54859: PPUSH
54860: CALL_OW 85
// DialogueOn ;
54864: CALL_OW 6
// ForceSay ( Khattam , D9-Kh-1 ) ;
54868: LD_EXP 26
54872: PPUSH
54873: LD_STRING D9-Kh-1
54875: PPUSH
54876: CALL_OW 91
// if IsOk ( Oswald ) then
54880: LD_EXP 11
54884: PPUSH
54885: CALL_OW 302
54889: IFFALSE 54925
// begin if oswald_is_substitute then
54891: LD_EXP 80
54895: IFFALSE 54911
// Say ( Oswald , D9-Os_sub-1 ) else
54897: LD_EXP 11
54901: PPUSH
54902: LD_STRING D9-Os_sub-1
54904: PPUSH
54905: CALL_OW 88
54909: GO 54923
// Say ( Oswald , D9-Os-1 ) ;
54911: LD_EXP 11
54915: PPUSH
54916: LD_STRING D9-Os-1
54918: PPUSH
54919: CALL_OW 88
// end else
54923: GO 54937
// ForceSay ( Heike , D9-H-1 ) ;
54925: LD_EXP 9
54929: PPUSH
54930: LD_STRING D9-H-1
54932: PPUSH
54933: CALL_OW 91
// ForceSay ( Khattam , D9-Kh-2 ) ;
54937: LD_EXP 26
54941: PPUSH
54942: LD_STRING D9-Kh-2
54944: PPUSH
54945: CALL_OW 91
// ForceSay ( Heike , D9-H-2 ) ;
54949: LD_EXP 9
54953: PPUSH
54954: LD_STRING D9-H-2
54956: PPUSH
54957: CALL_OW 91
// ForceSay ( Khattam , D9-Kh-3 ) ;
54961: LD_EXP 26
54965: PPUSH
54966: LD_STRING D9-Kh-3
54968: PPUSH
54969: CALL_OW 91
// dwait ( 0 0$0.2 ) ;
54973: LD_INT 7
54975: PPUSH
54976: CALL_OW 68
// khattam_choice = Query ( QKhattamJoin ) ;
54980: LD_ADDR_EXP 95
54984: PUSH
54985: LD_STRING QKhattamJoin
54987: PPUSH
54988: CALL_OW 97
54992: ST_TO_ADDR
// case khattam_choice of 1 :
54993: LD_EXP 95
54997: PUSH
54998: LD_INT 1
55000: DOUBLE
55001: EQUAL
55002: IFTRUE 55006
55004: GO 55434
55006: POP
// begin ForceSay ( Heike , D9-H-1-1 ) ;
55007: LD_EXP 9
55011: PPUSH
55012: LD_STRING D9-H-1-1
55014: PPUSH
55015: CALL_OW 91
// ForceSay ( Khattam , D9-Kh-1-1 ) ;
55019: LD_EXP 26
55023: PPUSH
55024: LD_STRING D9-Kh-1-1
55026: PPUSH
55027: CALL_OW 91
// DialogueOff ;
55031: CALL_OW 7
// SetAttitude ( you , americans_alt , att_friend , true ) ;
55035: LD_EXP 2
55039: PPUSH
55040: LD_EXP 8
55044: PPUSH
55045: LD_INT 1
55047: PPUSH
55048: LD_INT 1
55050: PPUSH
55051: CALL_OW 80
// while FilterAllUnits ( [ [ f_side , americans ] , [ f_ok ] , [ f_dist , Khattam , 17 ] ] ) > 0 do
55055: LD_INT 22
55057: PUSH
55058: LD_EXP 6
55062: PUSH
55063: EMPTY
55064: LIST
55065: LIST
55066: PUSH
55067: LD_INT 50
55069: PUSH
55070: EMPTY
55071: LIST
55072: PUSH
55073: LD_INT 91
55075: PUSH
55076: LD_EXP 26
55080: PUSH
55081: LD_INT 17
55083: PUSH
55084: EMPTY
55085: LIST
55086: LIST
55087: LIST
55088: PUSH
55089: EMPTY
55090: LIST
55091: LIST
55092: LIST
55093: PPUSH
55094: CALL_OW 69
55098: PUSH
55099: LD_INT 0
55101: GREATER
55102: IFFALSE 55266
// begin dist = GetDistUnitXY ( Khattam , hex_list_before [ hex ] [ 1 ] , hex_list_before [ hex ] [ 2 ] ) ;
55104: LD_ADDR_VAR 0 5
55108: PUSH
55109: LD_EXP 26
55113: PPUSH
55114: LD_VAR 0 7
55118: PUSH
55119: LD_VAR 0 6
55123: ARRAY
55124: PUSH
55125: LD_INT 1
55127: ARRAY
55128: PPUSH
55129: LD_VAR 0 7
55133: PUSH
55134: LD_VAR 0 6
55138: ARRAY
55139: PUSH
55140: LD_INT 2
55142: ARRAY
55143: PPUSH
55144: CALL_OW 297
55148: ST_TO_ADDR
// if not ( dist <= 3 or ( hex = hex_list_before + 0 and dist <= 7 ) ) then
55149: LD_VAR 0 5
55153: PUSH
55154: LD_INT 3
55156: LESSEQUAL
55157: PUSH
55158: LD_VAR 0 6
55162: PUSH
55163: LD_VAR 0 7
55167: PUSH
55168: LD_INT 0
55170: PLUS
55171: EQUAL
55172: PUSH
55173: LD_VAR 0 5
55177: PUSH
55178: LD_INT 7
55180: LESSEQUAL
55181: AND
55182: OR
55183: NOT
55184: IFFALSE 55227
// ComMoveXY ( Khattam , hex_list_before [ hex ] [ 1 ] , hex_list_before [ hex ] [ 2 ] ) else
55186: LD_EXP 26
55190: PPUSH
55191: LD_VAR 0 7
55195: PUSH
55196: LD_VAR 0 6
55200: ARRAY
55201: PUSH
55202: LD_INT 1
55204: ARRAY
55205: PPUSH
55206: LD_VAR 0 7
55210: PUSH
55211: LD_VAR 0 6
55215: ARRAY
55216: PUSH
55217: LD_INT 2
55219: ARRAY
55220: PPUSH
55221: CALL_OW 111
55225: GO 55257
// if hex < hex_list_before then
55227: LD_VAR 0 6
55231: PUSH
55232: LD_VAR 0 7
55236: LESS
55237: IFFALSE 55255
// hex = hex + 1 else
55239: LD_ADDR_VAR 0 6
55243: PUSH
55244: LD_VAR 0 6
55248: PUSH
55249: LD_INT 1
55251: PLUS
55252: ST_TO_ADDR
55253: GO 55257
// break ;
55255: GO 55266
// wait ( 0 0$1 ) ;
55257: LD_INT 35
55259: PPUSH
55260: CALL_OW 67
// end ;
55264: GO 55055
// PrepareNewCharacter ( Khatam ) ;
55266: LD_STRING Khatam
55268: PPUSH
55269: CALL_OW 26
// uc_side = you ;
55273: LD_ADDR_OWVAR 20
55277: PUSH
55278: LD_EXP 2
55282: ST_TO_ADDR
// uc_nation = nation_arabian ;
55283: LD_ADDR_OWVAR 21
55287: PUSH
55288: LD_INT 2
55290: ST_TO_ADDR
// old_man = Khattam ;
55291: LD_ADDR_VAR 0 1
55295: PUSH
55296: LD_EXP 26
55300: ST_TO_ADDR
// Khattam = CreateHuman ;
55301: LD_ADDR_EXP 26
55305: PUSH
55306: CALL_OW 44
55310: ST_TO_ADDR
// hc_importance = 0 ;
55311: LD_ADDR_OWVAR 32
55315: PUSH
55316: LD_INT 0
55318: ST_TO_ADDR
// CopySkills ( old_man , Khattam ) ;
55319: LD_VAR 0 1
55323: PPUSH
55324: LD_EXP 26
55328: PPUSH
55329: CALL_OW 510
// x = GetX ( old_man ) ;
55333: LD_ADDR_VAR 0 2
55337: PUSH
55338: LD_VAR 0 1
55342: PPUSH
55343: CALL_OW 250
55347: ST_TO_ADDR
// y = GetY ( old_man ) ;
55348: LD_ADDR_VAR 0 3
55352: PUSH
55353: LD_VAR 0 1
55357: PPUSH
55358: CALL_OW 251
55362: ST_TO_ADDR
// SetDir ( Khattam , GetDir ( old_man ) ) ;
55363: LD_EXP 26
55367: PPUSH
55368: LD_VAR 0 1
55372: PPUSH
55373: CALL_OW 254
55377: PPUSH
55378: CALL_OW 233
// SetLives ( Khattam , GetLives ( old_man ) ) ;
55382: LD_EXP 26
55386: PPUSH
55387: LD_VAR 0 1
55391: PPUSH
55392: CALL_OW 256
55396: PPUSH
55397: CALL_OW 234
// RemoveUnit ( old_man ) ;
55401: LD_VAR 0 1
55405: PPUSH
55406: CALL_OW 64
// PlaceUnitXY ( Khattam , x , y , false ) ;
55410: LD_EXP 26
55414: PPUSH
55415: LD_VAR 0 2
55419: PPUSH
55420: LD_VAR 0 3
55424: PPUSH
55425: LD_INT 0
55427: PPUSH
55428: CALL_OW 48
// end ; 2 :
55432: GO 55474
55434: LD_INT 2
55436: DOUBLE
55437: EQUAL
55438: IFTRUE 55442
55440: GO 55473
55442: POP
// begin ForceSay ( Heike , D9-H-2-1 ) ;
55443: LD_EXP 9
55447: PPUSH
55448: LD_STRING D9-H-2-1
55450: PPUSH
55451: CALL_OW 91
// ForceSay ( Khattam , D9-Kh-2-1 ) ;
55455: LD_EXP 26
55459: PPUSH
55460: LD_STRING D9-Kh-2-1
55462: PPUSH
55463: CALL_OW 91
// DialogueOff ;
55467: CALL_OW 7
// end ; end ;
55471: GO 55474
55473: POP
// ComStop ( Khattam ) ;
55474: LD_EXP 26
55478: PPUSH
55479: CALL_OW 141
// if khattam_choice = 2 then
55483: LD_EXP 95
55487: PUSH
55488: LD_INT 2
55490: EQUAL
55491: IFFALSE 55643
// begin hex = 1 ;
55493: LD_ADDR_VAR 0 6
55497: PUSH
55498: LD_INT 1
55500: ST_TO_ADDR
// repeat if GetDistUnitXY ( Khattam , hex_list_after [ hex ] [ 1 ] , hex_list_after [ hex ] [ 2 ] ) > 3 then
55501: LD_EXP 26
55505: PPUSH
55506: LD_VAR 0 8
55510: PUSH
55511: LD_VAR 0 6
55515: ARRAY
55516: PUSH
55517: LD_INT 1
55519: ARRAY
55520: PPUSH
55521: LD_VAR 0 8
55525: PUSH
55526: LD_VAR 0 6
55530: ARRAY
55531: PUSH
55532: LD_INT 2
55534: ARRAY
55535: PPUSH
55536: CALL_OW 297
55540: PUSH
55541: LD_INT 3
55543: GREATER
55544: IFFALSE 55587
// ComMoveXY ( Khattam , hex_list_after [ hex ] [ 1 ] , hex_list_after [ hex ] [ 2 ] ) else
55546: LD_EXP 26
55550: PPUSH
55551: LD_VAR 0 8
55555: PUSH
55556: LD_VAR 0 6
55560: ARRAY
55561: PUSH
55562: LD_INT 1
55564: ARRAY
55565: PPUSH
55566: LD_VAR 0 8
55570: PUSH
55571: LD_VAR 0 6
55575: ARRAY
55576: PUSH
55577: LD_INT 2
55579: ARRAY
55580: PPUSH
55581: CALL_OW 111
55585: GO 55624
// if hex < hex_list_after then
55587: LD_VAR 0 6
55591: PUSH
55592: LD_VAR 0 8
55596: LESS
55597: IFFALSE 55615
// hex = hex + 1 else
55599: LD_ADDR_VAR 0 6
55603: PUSH
55604: LD_VAR 0 6
55608: PUSH
55609: LD_INT 1
55611: PLUS
55612: ST_TO_ADDR
55613: GO 55624
// RemoveUnit ( Khattam ) ;
55615: LD_EXP 26
55619: PPUSH
55620: CALL_OW 64
// wait ( 0 0$1 ) ;
55624: LD_INT 35
55626: PPUSH
55627: CALL_OW 67
// until not IsPlaced ( Khattam ) ;
55631: LD_EXP 26
55635: PPUSH
55636: CALL_OW 305
55640: NOT
55641: IFFALSE 55501
// end ; end ; end ;
55643: PPOPN 8
55645: END
// every 0 0$1 + 0 0$0.8 trigger game_phase = 3 do var init_buildings , init_humans , temp_list , temp_unit ;
55646: LD_EXP 88
55650: PUSH
55651: LD_INT 3
55653: EQUAL
55654: IFFALSE 56227
55656: GO 55658
55658: DISABLE
55659: LD_INT 0
55661: PPUSH
55662: PPUSH
55663: PPUSH
55664: PPUSH
// begin init_buildings = GetAmBuildings ;
55665: LD_ADDR_VAR 0 1
55669: PUSH
55670: CALL 56230 0 0
55674: ST_TO_ADDR
// init_humans = GetAmHumans ;
55675: LD_ADDR_VAR 0 2
55679: PUSH
55680: CALL 56317 0 0
55684: ST_TO_ADDR
// repeat wait ( 0 0$5 ) ;
55685: LD_INT 175
55687: PPUSH
55688: CALL_OW 67
// until init_buildings >= GetAmBuildings * 2 or init_humans >= GetAmHumans * 2 ;
55692: LD_VAR 0 1
55696: PUSH
55697: CALL 56230 0 0
55701: PUSH
55702: LD_INT 2
55704: MUL
55705: GREATEREQUAL
55706: PUSH
55707: LD_VAR 0 2
55711: PUSH
55712: CALL 56317 0 0
55716: PUSH
55717: LD_INT 2
55719: MUL
55720: GREATEREQUAL
55721: OR
55722: IFFALSE 55685
// DialogueOn ;
55724: CALL_OW 6
// SayRadio ( Simms , D10-Simm-1 ) ;
55728: LD_EXP 24
55732: PPUSH
55733: LD_STRING D10-Simm-1
55735: PPUSH
55736: CALL_OW 94
// ForceSay ( Heike , D10-H-1 ) ;
55740: LD_EXP 9
55744: PPUSH
55745: LD_STRING D10-H-1
55747: PPUSH
55748: CALL_OW 91
// SayRadio ( Simms , D10-Simm-2 ) ;
55752: LD_EXP 24
55756: PPUSH
55757: LD_STRING D10-Simm-2
55759: PPUSH
55760: CALL_OW 94
// ForceSay ( Heike , D10-H-2 ) ;
55764: LD_EXP 9
55768: PPUSH
55769: LD_STRING D10-H-2
55771: PPUSH
55772: CALL_OW 91
// SayRadio ( Simms , D10-Simm-3 ) ;
55776: LD_EXP 24
55780: PPUSH
55781: LD_STRING D10-Simm-3
55783: PPUSH
55784: CALL_OW 94
// ForceSay ( Heike , D10-H-3 ) ;
55788: LD_EXP 9
55792: PPUSH
55793: LD_STRING D10-H-3
55795: PPUSH
55796: CALL_OW 91
// SayRadio ( Simms , D10-Simm-4 ) ;
55800: LD_EXP 24
55804: PPUSH
55805: LD_STRING D10-Simm-4
55807: PPUSH
55808: CALL_OW 94
// temp_list = UnitFilter ( [ Kowalski , Suze , Kurt , Dwayne ] , [ f_alive ] ) ;
55812: LD_ADDR_VAR 0 3
55816: PUSH
55817: LD_EXP 13
55821: PUSH
55822: LD_EXP 15
55826: PUSH
55827: LD_EXP 17
55831: PUSH
55832: LD_EXP 18
55836: PUSH
55837: EMPTY
55838: LIST
55839: LIST
55840: LIST
55841: LIST
55842: PPUSH
55843: LD_INT 51
55845: PUSH
55846: EMPTY
55847: LIST
55848: PPUSH
55849: CALL_OW 72
55853: ST_TO_ADDR
// if temp_list = 0 then
55854: LD_VAR 0 3
55858: PUSH
55859: LD_INT 0
55861: EQUAL
55862: IFFALSE 55992
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) diff ( GetApes ( you ) ^ [ Heike , Sonya , Oswald , Ralph , Kowalski , Evelyn , Suze , Olaf , Kurt , Dwayne , MarkB , Aviradze , Swansson ] ) ;
55864: LD_ADDR_VAR 0 3
55868: PUSH
55869: LD_INT 22
55871: PUSH
55872: LD_EXP 2
55876: PUSH
55877: EMPTY
55878: LIST
55879: LIST
55880: PUSH
55881: LD_INT 21
55883: PUSH
55884: LD_INT 1
55886: PUSH
55887: EMPTY
55888: LIST
55889: LIST
55890: PUSH
55891: EMPTY
55892: LIST
55893: LIST
55894: PPUSH
55895: CALL_OW 69
55899: PUSH
55900: LD_EXP 2
55904: PPUSH
55905: CALL 42703 0 1
55909: PUSH
55910: LD_EXP 9
55914: PUSH
55915: LD_EXP 10
55919: PUSH
55920: LD_EXP 11
55924: PUSH
55925: LD_EXP 12
55929: PUSH
55930: LD_EXP 13
55934: PUSH
55935: LD_EXP 14
55939: PUSH
55940: LD_EXP 15
55944: PUSH
55945: LD_EXP 16
55949: PUSH
55950: LD_EXP 17
55954: PUSH
55955: LD_EXP 18
55959: PUSH
55960: LD_EXP 19
55964: PUSH
55965: LD_EXP 20
55969: PUSH
55970: LD_EXP 21
55974: PUSH
55975: EMPTY
55976: LIST
55977: LIST
55978: LIST
55979: LIST
55980: LIST
55981: LIST
55982: LIST
55983: LIST
55984: LIST
55985: LIST
55986: LIST
55987: LIST
55988: LIST
55989: ADD
55990: DIFF
55991: ST_TO_ADDR
// if temp_list > 0 then
55992: LD_VAR 0 3
55996: PUSH
55997: LD_INT 0
55999: GREATER
56000: IFFALSE 56193
// begin temp_unit = temp_list [ Rand ( 1 , temp_list ) ] ;
56002: LD_ADDR_VAR 0 4
56006: PUSH
56007: LD_VAR 0 3
56011: PUSH
56012: LD_INT 1
56014: PPUSH
56015: LD_VAR 0 3
56019: PPUSH
56020: CALL_OW 12
56024: ARRAY
56025: ST_TO_ADDR
// case temp_unit of Kowalski :
56026: LD_VAR 0 4
56030: PUSH
56031: LD_EXP 13
56035: DOUBLE
56036: EQUAL
56037: IFTRUE 56041
56039: GO 56056
56041: POP
// ForceSay ( temp_unit , D10-Ko-1 ) ; Suze :
56042: LD_VAR 0 4
56046: PPUSH
56047: LD_STRING D10-Ko-1
56049: PPUSH
56050: CALL_OW 91
56054: GO 56193
56056: LD_EXP 15
56060: DOUBLE
56061: EQUAL
56062: IFTRUE 56066
56064: GO 56081
56066: POP
// ForceSay ( temp_unit , D10-Su-1 ) ; Kurt :
56067: LD_VAR 0 4
56071: PPUSH
56072: LD_STRING D10-Su-1
56074: PPUSH
56075: CALL_OW 91
56079: GO 56193
56081: LD_EXP 17
56085: DOUBLE
56086: EQUAL
56087: IFTRUE 56091
56089: GO 56126
56091: POP
// begin if kurt_is_substitute then
56092: LD_EXP 81
56096: IFFALSE 56112
// ForceSay ( temp_unit , D10-Ku-1 ) else
56098: LD_VAR 0 4
56102: PPUSH
56103: LD_STRING D10-Ku-1
56105: PPUSH
56106: CALL_OW 91
56110: GO 56124
// ForceSay ( temp_unit , D10-Ku-1 ) ;
56112: LD_VAR 0 4
56116: PPUSH
56117: LD_STRING D10-Ku-1
56119: PPUSH
56120: CALL_OW 91
// end ; Dwayne :
56124: GO 56193
56126: LD_EXP 18
56130: DOUBLE
56131: EQUAL
56132: IFTRUE 56136
56134: GO 56151
56136: POP
// ForceSay ( temp_unit , D10-Dw-1 ) ; else
56137: LD_VAR 0 4
56141: PPUSH
56142: LD_STRING D10-Dw-1
56144: PPUSH
56145: CALL_OW 91
56149: GO 56193
56151: POP
// if GetSex ( temp_unit ) = sex_male then
56152: LD_VAR 0 4
56156: PPUSH
56157: CALL_OW 258
56161: PUSH
56162: LD_INT 1
56164: EQUAL
56165: IFFALSE 56181
// ForceSay ( temp_unit , D10-SomeM-1 ) else
56167: LD_VAR 0 4
56171: PPUSH
56172: LD_STRING D10-SomeM-1
56174: PPUSH
56175: CALL_OW 91
56179: GO 56193
// ForceSay ( temp_unit , D10-SomeF-1 ) ; end ;
56181: LD_VAR 0 4
56185: PPUSH
56186: LD_STRING D10-SomeF-1
56188: PPUSH
56189: CALL_OW 91
// end ; dwait ( 0 0$0.9 ) ;
56193: LD_INT 32
56195: PPUSH
56196: CALL_OW 68
// ForceSay ( Heike , D10-H-4 ) ;
56200: LD_EXP 9
56204: PPUSH
56205: LD_STRING D10-H-4
56207: PPUSH
56208: CALL_OW 91
// dwait ( 0 0$0.2 ) ;
56212: LD_INT 7
56214: PPUSH
56215: CALL_OW 68
// EndMission ;
56219: CALL 56361 0 0
// DialogueOff ;
56223: CALL_OW 7
// end ;
56227: PPOPN 4
56229: END
// function GetAmBuildings ; begin
56230: LD_INT 0
56232: PPUSH
// result = FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_building ] ] ) diff [ b_ext_computer , b_ext_gun , b_ext_laser , b_ext_noncombat , b_ext_radar , b_ext_radio , b_ext_rocket , b_ext_siberium , b_ext_stitch , b_ext_track ] ;
56233: LD_ADDR_VAR 0 1
56237: PUSH
56238: LD_INT 22
56240: PUSH
56241: LD_EXP 6
56245: PUSH
56246: EMPTY
56247: LIST
56248: LIST
56249: PUSH
56250: LD_INT 21
56252: PUSH
56253: LD_INT 3
56255: PUSH
56256: EMPTY
56257: LIST
56258: LIST
56259: PUSH
56260: EMPTY
56261: LIST
56262: LIST
56263: PPUSH
56264: CALL_OW 69
56268: PUSH
56269: LD_INT 24
56271: PUSH
56272: LD_INT 17
56274: PUSH
56275: LD_INT 25
56277: PUSH
56278: LD_INT 19
56280: PUSH
56281: LD_INT 20
56283: PUSH
56284: LD_INT 22
56286: PUSH
56287: LD_INT 18
56289: PUSH
56290: LD_INT 21
56292: PUSH
56293: LD_INT 23
56295: PUSH
56296: LD_INT 16
56298: PUSH
56299: EMPTY
56300: LIST
56301: LIST
56302: LIST
56303: LIST
56304: LIST
56305: LIST
56306: LIST
56307: LIST
56308: LIST
56309: LIST
56310: DIFF
56311: ST_TO_ADDR
// end ;
56312: LD_VAR 0 1
56316: RET
// function GetAmHumans ; begin
56317: LD_INT 0
56319: PPUSH
// result = FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_human ] ] ) ;
56320: LD_ADDR_VAR 0 1
56324: PUSH
56325: LD_INT 22
56327: PUSH
56328: LD_EXP 6
56332: PUSH
56333: EMPTY
56334: LIST
56335: LIST
56336: PUSH
56337: LD_INT 21
56339: PUSH
56340: LD_INT 1
56342: PUSH
56343: EMPTY
56344: LIST
56345: LIST
56346: PUSH
56347: EMPTY
56348: LIST
56349: LIST
56350: PPUSH
56351: CALL_OW 69
56355: ST_TO_ADDR
// end ; end_of_file
56356: LD_VAR 0 1
56360: RET
// export function EndMission ; var val , all_list , un_list , name_list ; begin
56361: LD_INT 0
56363: PPUSH
56364: PPUSH
56365: PPUSH
56366: PPUSH
56367: PPUSH
// if original_gensher_people + 0 = saved_gensher_people + 0 then
56368: LD_EXP 82
56372: PUSH
56373: LD_INT 0
56375: PLUS
56376: PUSH
56377: LD_EXP 94
56381: PUSH
56382: LD_INT 0
56384: PLUS
56385: EQUAL
56386: IFFALSE 56398
// val = 1 else
56388: LD_ADDR_VAR 0 2
56392: PUSH
56393: LD_INT 1
56395: ST_TO_ADDR
56396: GO 56407
// val = - 1 ;
56398: LD_ADDR_VAR 0 2
56402: PUSH
56403: LD_INT 1
56405: NEG
56406: ST_TO_ADDR
// AddMedal ( GensherPeople , val ) ;
56407: LD_STRING GensherPeople
56409: PPUSH
56410: LD_VAR 0 2
56414: PPUSH
56415: CALL_OW 101
// if val = 1 then
56419: LD_VAR 0 2
56423: PUSH
56424: LD_INT 1
56426: EQUAL
56427: IFFALSE 56441
// SaveVariable ( 1 , AllGensherPeopleSaved_11_cont ) else
56429: LD_INT 1
56431: PPUSH
56432: LD_STRING AllGensherPeopleSaved_11_cont
56434: PPUSH
56435: CALL_OW 39
56439: GO 56451
// SaveVariable ( 0 , AllGensherPeopleSaved_11_cont ) ;
56441: LD_INT 0
56443: PPUSH
56444: LD_STRING AllGensherPeopleSaved_11_cont
56446: PPUSH
56447: CALL_OW 39
// if cameras_placed then
56451: LD_EXP 91
56455: IFFALSE 56467
// val = 1 else
56457: LD_ADDR_VAR 0 2
56461: PUSH
56462: LD_INT 1
56464: ST_TO_ADDR
56465: GO 56501
// if Researched ( you , tech_HidCam ) then
56467: LD_EXP 2
56471: PPUSH
56472: LD_INT 17
56474: PPUSH
56475: CALL_OW 325
56479: IFFALSE 56492
// val = - 1 else
56481: LD_ADDR_VAR 0 2
56485: PUSH
56486: LD_INT 1
56488: NEG
56489: ST_TO_ADDR
56490: GO 56501
// val = - 2 ;
56492: LD_ADDR_VAR 0 2
56496: PUSH
56497: LD_INT 2
56499: NEG
56500: ST_TO_ADDR
// AddMedal ( HiddenCamera , val ) ;
56501: LD_STRING HiddenCamera
56503: PPUSH
56504: LD_VAR 0 2
56508: PPUSH
56509: CALL_OW 101
// if russian_interference_points <= [ 11 , 8 , 5 ] [ difficulty ] then
56513: LD_EXP 96
56517: PUSH
56518: LD_INT 11
56520: PUSH
56521: LD_INT 8
56523: PUSH
56524: LD_INT 5
56526: PUSH
56527: EMPTY
56528: LIST
56529: LIST
56530: LIST
56531: PUSH
56532: LD_OWVAR 67
56536: ARRAY
56537: LESSEQUAL
56538: IFFALSE 56550
// val = 1 else
56540: LD_ADDR_VAR 0 2
56544: PUSH
56545: LD_INT 1
56547: ST_TO_ADDR
56548: GO 56559
// val = - 1 ;
56550: LD_ADDR_VAR 0 2
56554: PUSH
56555: LD_INT 1
56557: NEG
56558: ST_TO_ADDR
// AddMedal ( RussianInterference , val ) ;
56559: LD_STRING RussianInterference
56561: PPUSH
56562: LD_VAR 0 2
56566: PPUSH
56567: CALL_OW 101
// GiveMedals ( Medals ) ;
56571: LD_STRING Medals
56573: PPUSH
56574: CALL_OW 102
// all_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) diff GetApes ( you ) ;
56578: LD_ADDR_VAR 0 3
56582: PUSH
56583: LD_INT 22
56585: PUSH
56586: LD_EXP 2
56590: PUSH
56591: EMPTY
56592: LIST
56593: LIST
56594: PUSH
56595: LD_INT 21
56597: PUSH
56598: LD_INT 1
56600: PUSH
56601: EMPTY
56602: LIST
56603: LIST
56604: PUSH
56605: EMPTY
56606: LIST
56607: LIST
56608: PPUSH
56609: CALL_OW 69
56613: PUSH
56614: LD_EXP 2
56618: PPUSH
56619: CALL 42703 0 1
56623: DIFF
56624: ST_TO_ADDR
// if IsLive ( Gonzo ) then
56625: LD_EXP 22
56629: PPUSH
56630: CALL_OW 300
56634: IFFALSE 56652
// all_list = all_list ^ Gonzo ;
56636: LD_ADDR_VAR 0 3
56640: PUSH
56641: LD_VAR 0 3
56645: PUSH
56646: LD_EXP 22
56650: ADD
56651: ST_TO_ADDR
// RewardPeople ( all_list ) ;
56652: LD_VAR 0 3
56656: PPUSH
56657: CALL_OW 43
// SetLastMission ( all_list , 16 ) ;
56661: LD_VAR 0 3
56665: PPUSH
56666: LD_INT 16
56668: PPUSH
56669: CALL_OW 245
// SaveCharacters ( Heike , Heike_11_cont ) ;
56673: LD_EXP 9
56677: PPUSH
56678: LD_STRING Heike_11_cont
56680: PPUSH
56681: CALL_OW 38
// SaveCharacters ( Gensher , Gensher_11_cont ) ;
56685: LD_EXP 23
56689: PPUSH
56690: LD_STRING Gensher_11_cont
56692: PPUSH
56693: CALL_OW 38
// SaveVariable ( oswald_is_substitute , Oswald_is_substitute_11_generic ) ;
56697: LD_EXP 80
56701: PPUSH
56702: LD_STRING Oswald_is_substitute_11_generic
56704: PPUSH
56705: CALL_OW 39
// SaveVariable ( kurt_is_substitute , Kurt_is_substitute_11_generic ) ;
56709: LD_EXP 81
56713: PPUSH
56714: LD_STRING Kurt_is_substitute_11_generic
56716: PPUSH
56717: CALL_OW 39
// un_list = [ Sonya , Oswald , Ralph , Kowalski , Evelyn , Suze , Olaf , Kurt , Dwayne , MarkB , Aviradze , Swansson , Gonzo ] ;
56721: LD_ADDR_VAR 0 4
56725: PUSH
56726: LD_EXP 10
56730: PUSH
56731: LD_EXP 11
56735: PUSH
56736: LD_EXP 12
56740: PUSH
56741: LD_EXP 13
56745: PUSH
56746: LD_EXP 14
56750: PUSH
56751: LD_EXP 15
56755: PUSH
56756: LD_EXP 16
56760: PUSH
56761: LD_EXP 17
56765: PUSH
56766: LD_EXP 18
56770: PUSH
56771: LD_EXP 19
56775: PUSH
56776: LD_EXP 20
56780: PUSH
56781: LD_EXP 21
56785: PUSH
56786: LD_EXP 22
56790: PUSH
56791: EMPTY
56792: LIST
56793: LIST
56794: LIST
56795: LIST
56796: LIST
56797: LIST
56798: LIST
56799: LIST
56800: LIST
56801: LIST
56802: LIST
56803: LIST
56804: LIST
56805: ST_TO_ADDR
// name_list = [ Sonya , Oswald , Ralph , Kowalski , Evelyn , Suze , Olaf , Kurt , Dwayne , MarkB , Aviradze , Swansson , Gonzo ] ;
56806: LD_ADDR_VAR 0 5
56810: PUSH
56811: LD_STRING Sonya
56813: PUSH
56814: LD_STRING Oswald
56816: PUSH
56817: LD_STRING Ralph
56819: PUSH
56820: LD_STRING Kowalski
56822: PUSH
56823: LD_STRING Evelyn
56825: PUSH
56826: LD_STRING Suze
56828: PUSH
56829: LD_STRING Olaf
56831: PUSH
56832: LD_STRING Kurt
56834: PUSH
56835: LD_STRING Dwayne
56837: PUSH
56838: LD_STRING MarkB
56840: PUSH
56841: LD_STRING Aviradze
56843: PUSH
56844: LD_STRING Swansson
56846: PUSH
56847: LD_STRING Gonzo
56849: PUSH
56850: EMPTY
56851: LIST
56852: LIST
56853: LIST
56854: LIST
56855: LIST
56856: LIST
56857: LIST
56858: LIST
56859: LIST
56860: LIST
56861: LIST
56862: LIST
56863: LIST
56864: ST_TO_ADDR
// for val = 1 to un_list do
56865: LD_ADDR_VAR 0 2
56869: PUSH
56870: DOUBLE
56871: LD_INT 1
56873: DEC
56874: ST_TO_ADDR
56875: LD_VAR 0 4
56879: PUSH
56880: FOR_TO
56881: IFFALSE 56933
// if un_list [ val ] in all_list then
56883: LD_VAR 0 4
56887: PUSH
56888: LD_VAR 0 2
56892: ARRAY
56893: PUSH
56894: LD_VAR 0 3
56898: IN
56899: IFFALSE 56931
// SaveCharacters ( un_list [ val ] , name_list [ val ] & _11_cont ) ;
56901: LD_VAR 0 4
56905: PUSH
56906: LD_VAR 0 2
56910: ARRAY
56911: PPUSH
56912: LD_VAR 0 5
56916: PUSH
56917: LD_VAR 0 2
56921: ARRAY
56922: PUSH
56923: LD_STRING _11_cont
56925: STR
56926: PPUSH
56927: CALL_OW 38
56931: GO 56880
56933: POP
56934: POP
// SaveCharacters ( all_list diff ( Heike ^ Khattam ^ un_list ) , Others_11_cont ) ;
56935: LD_VAR 0 3
56939: PUSH
56940: LD_EXP 9
56944: PUSH
56945: LD_EXP 26
56949: ADD
56950: PUSH
56951: LD_VAR 0 4
56955: ADD
56956: DIFF
56957: PPUSH
56958: LD_STRING Others_11_cont
56960: PPUSH
56961: CALL_OW 38
// if GetLives ( Khattam ) > 0 then
56965: LD_EXP 26
56969: PPUSH
56970: CALL_OW 256
56974: PUSH
56975: LD_INT 0
56977: GREATER
56978: IFFALSE 56992
// SaveCharacters ( Khattam , Khattam_11_cont ) ;
56980: LD_EXP 26
56984: PPUSH
56985: LD_STRING Khattam_11_cont
56987: PPUSH
56988: CALL_OW 38
// SaveVariable ( khattam_choice = 1 , Khattam_accepted_11_cont ) ;
56992: LD_EXP 95
56996: PUSH
56997: LD_INT 1
56999: EQUAL
57000: PPUSH
57001: LD_STRING Khattam_accepted_11_cont
57003: PPUSH
57004: CALL_OW 39
// InGameOn ;
57008: CALL_OW 8
// for val in all_units do
57012: LD_ADDR_VAR 0 2
57016: PUSH
57017: LD_OWVAR 3
57021: PUSH
57022: FOR_IN
57023: IFFALSE 57036
// DestroyUnit ( val ) ;
57025: LD_VAR 0 2
57029: PPUSH
57030: CALL_OW 65
57034: GO 57022
57036: POP
57037: POP
// ResetFog ;
57038: CALL_OW 335
// wait ( 0 0$0.5 ) ;
57042: LD_INT 18
57044: PPUSH
57045: CALL_OW 67
// repeat Query ( QCutscene1 ) ;
57049: LD_STRING QCutscene1
57051: PPUSH
57052: CALL_OW 97
// val = Query ( QCutscene2 ) ;
57056: LD_ADDR_VAR 0 2
57060: PUSH
57061: LD_STRING QCutscene2
57063: PPUSH
57064: CALL_OW 97
57068: ST_TO_ADDR
// until val = 3 or val = 2 ;
57069: LD_VAR 0 2
57073: PUSH
57074: LD_INT 3
57076: EQUAL
57077: PUSH
57078: LD_VAR 0 2
57082: PUSH
57083: LD_INT 2
57085: EQUAL
57086: OR
57087: IFFALSE 57049
// wait ( 0 0$0.5 ) ;
57089: LD_INT 18
57091: PPUSH
57092: CALL_OW 67
// SetNextMission ( val - 1 ) ;
57096: LD_VAR 0 2
57100: PUSH
57101: LD_INT 1
57103: MINUS
57104: PPUSH
57105: CALL_OW 536
// InGameOff ;
57109: CALL_OW 9
// YouWin ;
57113: CALL_OW 103
// end ;
57117: LD_VAR 0 1
57121: RET
