// export testing ; export you , russians , nature , russians_alt , you_alt ; export Heike , Martin , Louis , Erwin , Burlak , Yashin ; export ai_soldiers , ai_engineers , ai_mechanics_defend , ai_scientists , ai_commander , ai_depot , ai_labs ; 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_going_to_attack_this_base , ai_refuel_vehicles_list , ai_turrets , ai_captured_buildings ; 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_attacking_unit_hex_index , ai_retreating_attacking_humans , ai_human_attack_delay ; export human_attack_strategy , vehicle_attack_strategy , spawned_soldiers , spawned_engineers , spawned_apemen_engineers , spawned_mechanics ; export spawned_scientists , orig_num_engineers , orig_num_apemen_engineers , orig_num_mechanics , orig_num_scientists ; export deny_crates_spawned , deny_crates_gathered , heike_vehicle , yashin_begin , martin_begin ; export deserter_begin , deserters , Heike_original_stamina , final_battle_begin , cargo_bay_destroy_tick ; export final_battle_units , deserters_are_done , louis_main_companions , heike_companions_vehicles ; export apeman_vehicles_researched_07 ; starting begin RandomizeAll ;
   0: CALL_OW 11
// ResetFog ;
   4: CALL_OW 335
// testing = false ;
   8: LD_ADDR_EXP 1
  12: PUSH
  13: LD_INT 0
  15: ST_TO_ADDR
// ai_bases = [ 1 , 2 ] ;
  16: LD_ADDR_EXP 40
  20: PUSH
  21: LD_INT 1
  23: PUSH
  24: LD_INT 2
  26: PUSH
  27: EMPTY
  28: LIST
  29: LIST
  30: ST_TO_ADDR
// ai_soldiers = [ [ ] , [ ] ] ;
  31: LD_ADDR_EXP 13
  35: PUSH
  36: EMPTY
  37: PUSH
  38: EMPTY
  39: PUSH
  40: EMPTY
  41: LIST
  42: LIST
  43: ST_TO_ADDR
// ai_attacking_soldiers = [ [ ] , [ ] ] ;
  44: LD_ADDR_EXP 45
  48: PUSH
  49: EMPTY
  50: PUSH
  51: EMPTY
  52: PUSH
  53: EMPTY
  54: LIST
  55: LIST
  56: ST_TO_ADDR
// ai_engineers = [ [ ] , [ ] ] ;
  57: LD_ADDR_EXP 14
  61: PUSH
  62: EMPTY
  63: PUSH
  64: EMPTY
  65: PUSH
  66: EMPTY
  67: LIST
  68: LIST
  69: ST_TO_ADDR
// ai_mechanics_defend = [ [ ] , [ ] ] ;
  70: LD_ADDR_EXP 15
  74: PUSH
  75: EMPTY
  76: PUSH
  77: EMPTY
  78: PUSH
  79: EMPTY
  80: LIST
  81: LIST
  82: ST_TO_ADDR
// ai_scientists = [ [ ] , [ ] ] ;
  83: LD_ADDR_EXP 16
  87: PUSH
  88: EMPTY
  89: PUSH
  90: EMPTY
  91: PUSH
  92: EMPTY
  93: LIST
  94: LIST
  95: ST_TO_ADDR
// ai_attacking_scientists = [ [ ] , [ ] ] ;
  96: LD_ADDR_EXP 46
 100: PUSH
 101: EMPTY
 102: PUSH
 103: EMPTY
 104: PUSH
 105: EMPTY
 106: LIST
 107: LIST
 108: ST_TO_ADDR
// ai_apemen_engineers = [ [ ] , [ ] ] ;
 109: LD_ADDR_EXP 44
 113: PUSH
 114: EMPTY
 115: PUSH
 116: EMPTY
 117: PUSH
 118: EMPTY
 119: LIST
 120: LIST
 121: ST_TO_ADDR
// ai_depot = [ 0 , 0 ] ;
 122: LD_ADDR_EXP 18
 126: PUSH
 127: LD_INT 0
 129: PUSH
 130: LD_INT 0
 132: PUSH
 133: EMPTY
 134: LIST
 135: LIST
 136: ST_TO_ADDR
// ai_labs = [ [ ] , [ ] ] ;
 137: LD_ADDR_EXP 19
 141: PUSH
 142: EMPTY
 143: PUSH
 144: EMPTY
 145: PUSH
 146: EMPTY
 147: LIST
 148: LIST
 149: ST_TO_ADDR
// ai_facts = [ [ ] , [ ] ] ;
 150: LD_ADDR_EXP 30
 154: PUSH
 155: EMPTY
 156: PUSH
 157: EMPTY
 158: PUSH
 159: EMPTY
 160: LIST
 161: LIST
 162: ST_TO_ADDR
// ai_armouries = [ [ ] , [ ] ] ;
 163: LD_ADDR_EXP 31
 167: PUSH
 168: EMPTY
 169: PUSH
 170: EMPTY
 171: PUSH
 172: EMPTY
 173: LIST
 174: LIST
 175: ST_TO_ADDR
// ai_bunkers = [ [ ] , [ ] ] ;
 176: LD_ADDR_EXP 32
 180: PUSH
 181: EMPTY
 182: PUSH
 183: EMPTY
 184: PUSH
 185: EMPTY
 186: LIST
 187: LIST
 188: ST_TO_ADDR
// ai_turrets = [ [ ] , [ ] ] ;
 189: LD_ADDR_EXP 37
 193: PUSH
 194: EMPTY
 195: PUSH
 196: EMPTY
 197: PUSH
 198: EMPTY
 199: LIST
 200: LIST
 201: ST_TO_ADDR
// ai_oil_mine = [ 0 , 0 ] ;
 202: LD_ADDR_EXP 33
 206: PUSH
 207: LD_INT 0
 209: PUSH
 210: LD_INT 0
 212: PUSH
 213: EMPTY
 214: LIST
 215: LIST
 216: ST_TO_ADDR
// ai_fact_extensions = [ [ ] , [ ] ] ;
 217: LD_ADDR_EXP 34
 221: PUSH
 222: EMPTY
 223: PUSH
 224: EMPTY
 225: PUSH
 226: EMPTY
 227: LIST
 228: LIST
 229: ST_TO_ADDR
// ai_power_plants = [ [ ] , [ ] ] ;
 230: LD_ADDR_EXP 20
 234: PUSH
 235: EMPTY
 236: PUSH
 237: EMPTY
 238: PUSH
 239: EMPTY
 240: LIST
 241: LIST
 242: ST_TO_ADDR
// ai_buildings_locations = [ [ ] , [ ] ] ;
 243: LD_ADDR_EXP 21
 247: PUSH
 248: EMPTY
 249: PUSH
 250: EMPTY
 251: PUSH
 252: EMPTY
 253: LIST
 254: LIST
 255: ST_TO_ADDR
// ai_captured_buildings = [ [ ] , [ ] , [ ] ] ;
 256: LD_ADDR_EXP 38
 260: PUSH
 261: EMPTY
 262: PUSH
 263: EMPTY
 264: PUSH
 265: EMPTY
 266: PUSH
 267: EMPTY
 268: LIST
 269: LIST
 270: LIST
 271: ST_TO_ADDR
// ai_vehicles_defend = [ [ ] , [ ] ] ;
 272: LD_ADDR_EXP 22
 276: PUSH
 277: EMPTY
 278: PUSH
 279: EMPTY
 280: PUSH
 281: EMPTY
 282: LIST
 283: LIST
 284: ST_TO_ADDR
// ai_vehicles_attack = [ [ ] , [ ] ] ;
 285: LD_ADDR_EXP 23
 289: PUSH
 290: EMPTY
 291: PUSH
 292: EMPTY
 293: PUSH
 294: EMPTY
 295: LIST
 296: LIST
 297: ST_TO_ADDR
// ai_refuel_vehicles_list = [ [ ] , [ ] ] ;
 298: LD_ADDR_EXP 36
 302: PUSH
 303: EMPTY
 304: PUSH
 305: EMPTY
 306: PUSH
 307: EMPTY
 308: LIST
 309: LIST
 310: ST_TO_ADDR
// ai_human_pullback_hex = [ [ 52 , 57 ] , [ 95 , 119 ] ] ;
 311: LD_ADDR_EXP 24
 315: PUSH
 316: LD_INT 52
 318: PUSH
 319: LD_INT 57
 321: PUSH
 322: EMPTY
 323: LIST
 324: LIST
 325: PUSH
 326: LD_INT 95
 328: PUSH
 329: LD_INT 119
 331: PUSH
 332: EMPTY
 333: LIST
 334: LIST
 335: PUSH
 336: EMPTY
 337: LIST
 338: LIST
 339: ST_TO_ADDR
// ai_building_under_construction = [ 0 , 0 ] ;
 340: LD_ADDR_EXP 25
 344: PUSH
 345: LD_INT 0
 347: PUSH
 348: LD_INT 0
 350: PUSH
 351: EMPTY
 352: LIST
 353: LIST
 354: ST_TO_ADDR
// ai_heal_these_humans = [ [ ] , [ ] ] ;
 355: LD_ADDR_EXP 26
 359: PUSH
 360: EMPTY
 361: PUSH
 362: EMPTY
 363: PUSH
 364: EMPTY
 365: LIST
 366: LIST
 367: ST_TO_ADDR
// ai_all_buildings = [ [ ] , [ ] ] ;
 368: LD_ADDR_EXP 27
 372: PUSH
 373: EMPTY
 374: PUSH
 375: EMPTY
 376: PUSH
 377: EMPTY
 378: LIST
 379: LIST
 380: ST_TO_ADDR
// ai_building_constructor = [ 0 , 0 ] ;
 381: LD_ADDR_EXP 28
 385: PUSH
 386: LD_INT 0
 388: PUSH
 389: LD_INT 0
 391: PUSH
 392: EMPTY
 393: LIST
 394: LIST
 395: ST_TO_ADDR
// ai_upcoming_building_data = [ [ ] , [ ] ] ;
 396: LD_ADDR_EXP 29
 400: PUSH
 401: EMPTY
 402: PUSH
 403: EMPTY
 404: PUSH
 405: EMPTY
 406: LIST
 407: LIST
 408: ST_TO_ADDR
// ai_vehicle_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
 409: LD_ADDR_EXP 39
 413: PUSH
 414: LD_INT 0
 416: PUSH
 417: LD_INT 0
 419: PUSH
 420: LD_INT 0
 422: PUSH
 423: EMPTY
 424: LIST
 425: LIST
 426: LIST
 427: ST_TO_ADDR
// ai_human_attack_delay = [ 0 0$0 , 0 0$0 , 0 0$0 ] ;
 428: LD_ADDR_EXP 49
 432: PUSH
 433: LD_INT 0
 435: PUSH
 436: LD_INT 0
 438: PUSH
 439: LD_INT 0
 441: PUSH
 442: EMPTY
 443: LIST
 444: LIST
 445: LIST
 446: ST_TO_ADDR
// ai_cargo_bay = [ 0 , 0 ] ;
 447: LD_ADDR_EXP 42
 451: PUSH
 452: LD_INT 0
 454: PUSH
 455: LD_INT 0
 457: PUSH
 458: EMPTY
 459: LIST
 460: LIST
 461: ST_TO_ADDR
// ai_cargo_bay_under_construction = [ false , false ] ;
 462: LD_ADDR_EXP 43
 466: PUSH
 467: LD_INT 0
 469: PUSH
 470: LD_INT 0
 472: PUSH
 473: EMPTY
 474: LIST
 475: LIST
 476: ST_TO_ADDR
// ai_attacking_unit_hex_index = [ [ ] , [ ] ] ;
 477: LD_ADDR_EXP 47
 481: PUSH
 482: EMPTY
 483: PUSH
 484: EMPTY
 485: PUSH
 486: EMPTY
 487: LIST
 488: LIST
 489: ST_TO_ADDR
// ai_retreating_attacking_humans = [ [ ] , [ ] ] ;
 490: LD_ADDR_EXP 48
 494: PUSH
 495: EMPTY
 496: PUSH
 497: EMPTY
 498: PUSH
 499: EMPTY
 500: LIST
 501: LIST
 502: ST_TO_ADDR
// InitCrateModule ;
 503: CALL 9306 0 0
// human_attack_strategy = - 1 ;
 507: LD_ADDR_EXP 50
 511: PUSH
 512: LD_INT 1
 514: NEG
 515: ST_TO_ADDR
// vehicle_attack_strategy = - 1 ;
 516: LD_ADDR_EXP 51
 520: PUSH
 521: LD_INT 1
 523: NEG
 524: ST_TO_ADDR
// spawned_soldiers = [ ] ;
 525: LD_ADDR_EXP 52
 529: PUSH
 530: EMPTY
 531: ST_TO_ADDR
// spawned_engineers = [ ] ;
 532: LD_ADDR_EXP 53
 536: PUSH
 537: EMPTY
 538: ST_TO_ADDR
// spawned_apemen_engineers = [ ] ;
 539: LD_ADDR_EXP 54
 543: PUSH
 544: EMPTY
 545: ST_TO_ADDR
// spawned_mechanics = [ ] ;
 546: LD_ADDR_EXP 55
 550: PUSH
 551: EMPTY
 552: ST_TO_ADDR
// spawned_scientists = [ ] ;
 553: LD_ADDR_EXP 56
 557: PUSH
 558: EMPTY
 559: ST_TO_ADDR
// orig_num_engineers = 0 ;
 560: LD_ADDR_EXP 57
 564: PUSH
 565: LD_INT 0
 567: ST_TO_ADDR
// orig_num_apemen_engineers = 0 ;
 568: LD_ADDR_EXP 58
 572: PUSH
 573: LD_INT 0
 575: ST_TO_ADDR
// orig_num_mechanics = 0 ;
 576: LD_ADDR_EXP 59
 580: PUSH
 581: LD_INT 0
 583: ST_TO_ADDR
// orig_num_scientists = 0 ;
 584: LD_ADDR_EXP 60
 588: PUSH
 589: LD_INT 0
 591: ST_TO_ADDR
// deny_crates_spawned = 0 ;
 592: LD_ADDR_EXP 61
 596: PUSH
 597: LD_INT 0
 599: ST_TO_ADDR
// deny_crates_gathered = 0 ;
 600: LD_ADDR_EXP 62
 604: PUSH
 605: LD_INT 0
 607: ST_TO_ADDR
// yashin_begin = false ;
 608: LD_ADDR_EXP 64
 612: PUSH
 613: LD_INT 0
 615: ST_TO_ADDR
// martin_begin = false ;
 616: LD_ADDR_EXP 65
 620: PUSH
 621: LD_INT 0
 623: ST_TO_ADDR
// deserter_begin = false ;
 624: LD_ADDR_EXP 66
 628: PUSH
 629: LD_INT 0
 631: ST_TO_ADDR
// deserters_are_done = false ;
 632: LD_ADDR_EXP 72
 636: PUSH
 637: LD_INT 0
 639: ST_TO_ADDR
// deserters = [ ] ;
 640: LD_ADDR_EXP 67
 644: PUSH
 645: EMPTY
 646: ST_TO_ADDR
// heike_original_stamina = - 1 ;
 647: LD_ADDR_EXP 68
 651: PUSH
 652: LD_INT 1
 654: NEG
 655: ST_TO_ADDR
// final_battle_begin = false ;
 656: LD_ADDR_EXP 69
 660: PUSH
 661: LD_INT 0
 663: ST_TO_ADDR
// cargo_bay_destroy_tick = [ tick , tick ] ;
 664: LD_ADDR_EXP 70
 668: PUSH
 669: LD_OWVAR 1
 673: PUSH
 674: LD_OWVAR 1
 678: PUSH
 679: EMPTY
 680: LIST
 681: LIST
 682: ST_TO_ADDR
// final_battle_units = [ ] ;
 683: LD_ADDR_EXP 71
 687: PUSH
 688: EMPTY
 689: ST_TO_ADDR
// louis_main_companions = [ ] ;
 690: LD_ADDR_EXP 73
 694: PUSH
 695: EMPTY
 696: ST_TO_ADDR
// heike_companions_vehicles = [ ] ;
 697: LD_ADDR_EXP 74
 701: PUSH
 702: EMPTY
 703: ST_TO_ADDR
// apeman_vehicles_researched_07 = LoadVariable ( Apeman_controlled_vehicle_constructed_07_cont , false ) ;
 704: LD_ADDR_EXP 75
 708: PUSH
 709: LD_STRING Apeman_controlled_vehicle_constructed_07_cont
 711: PPUSH
 712: LD_INT 0
 714: PPUSH
 715: CALL_OW 30
 719: ST_TO_ADDR
// PrepareSides ;
 720: CALL 745 0 0
// PrepareNature ;
 724: CALL 913 0 0
// PrepareArabians ;
 728: CALL 1697 0 0
// ScanBuildings ;
 732: CALL 3989 0 0
// PrepareComputerSides ;
 736: CALL 5755 0 0
// Action ;
 740: CALL 7813 0 0
// end ;
 744: END
// function PrepareSides ; begin
 745: LD_INT 0
 747: PPUSH
// nature = 0 ;
 748: LD_ADDR_EXP 4
 752: PUSH
 753: LD_INT 0
 755: ST_TO_ADDR
// you = 2 ;
 756: LD_ADDR_EXP 2
 760: PUSH
 761: LD_INT 2
 763: ST_TO_ADDR
// russians = 3 ;
 764: LD_ADDR_EXP 3
 768: PUSH
 769: LD_INT 3
 771: ST_TO_ADDR
// you_alt = 5 ;
 772: LD_ADDR_EXP 6
 776: PUSH
 777: LD_INT 5
 779: ST_TO_ADDR
// russians_alt = 6 ;
 780: LD_ADDR_EXP 5
 784: PUSH
 785: LD_INT 6
 787: ST_TO_ADDR
// SetAttitude ( you , russians , att_enemy , true ) ;
 788: LD_EXP 2
 792: PPUSH
 793: LD_EXP 3
 797: PPUSH
 798: LD_INT 2
 800: PPUSH
 801: LD_INT 1
 803: PPUSH
 804: CALL_OW 80
// SetAttitude ( you , you_alt , att_friend , true ) ;
 808: LD_EXP 2
 812: PPUSH
 813: LD_EXP 6
 817: PPUSH
 818: LD_INT 1
 820: PPUSH
 821: LD_INT 1
 823: PPUSH
 824: CALL_OW 80
// SetAttitude ( you , russians_alt , att_enemy , true ) ;
 828: LD_EXP 2
 832: PPUSH
 833: LD_EXP 5
 837: PPUSH
 838: LD_INT 2
 840: PPUSH
 841: LD_INT 1
 843: PPUSH
 844: CALL_OW 80
// SetAttitude ( russians , you_alt , att_enemy , true ) ;
 848: LD_EXP 3
 852: PPUSH
 853: LD_EXP 6
 857: PPUSH
 858: LD_INT 2
 860: PPUSH
 861: LD_INT 1
 863: PPUSH
 864: CALL_OW 80
// SetAttitude ( russians , russians_alt , att_friend , true ) ;
 868: LD_EXP 3
 872: PPUSH
 873: LD_EXP 5
 877: PPUSH
 878: LD_INT 1
 880: PPUSH
 881: LD_INT 1
 883: PPUSH
 884: CALL_OW 80
// SetAttitude ( you_alt , russians_alt , att_friend , true ) ;
 888: LD_EXP 6
 892: PPUSH
 893: LD_EXP 5
 897: PPUSH
 898: LD_INT 1
 900: PPUSH
 901: LD_INT 1
 903: PPUSH
 904: CALL_OW 80
// end ;
 908: LD_VAR 0 1
 912: RET
// function PrepareNature ; var i , spots , num , agres , count , temp_unit ; begin
 913: LD_INT 0
 915: PPUSH
 916: PPUSH
 917: PPUSH
 918: PPUSH
 919: PPUSH
 920: PPUSH
 921: PPUSH
// spots = [ [ 123 , 61 ] , [ 114 , 67 ] , [ 129 , 75 ] , [ 89 , 72 ] , [ 106 , 75 ] , [ 111 , 90 ] , [ 117 , 102 ] , [ 144 , 105 ] , [ 143 , 114 ] , [ 126 , 121 ] , [ 138 , 129 ] , [ 155 , 131 ] , [ 71 , 124 ] , [ 65 , 100 ] , [ 102 , 104 ] ] ;
 922: LD_ADDR_VAR 0 3
 926: PUSH
 927: LD_INT 123
 929: PUSH
 930: LD_INT 61
 932: PUSH
 933: EMPTY
 934: LIST
 935: LIST
 936: PUSH
 937: LD_INT 114
 939: PUSH
 940: LD_INT 67
 942: PUSH
 943: EMPTY
 944: LIST
 945: LIST
 946: PUSH
 947: LD_INT 129
 949: PUSH
 950: LD_INT 75
 952: PUSH
 953: EMPTY
 954: LIST
 955: LIST
 956: PUSH
 957: LD_INT 89
 959: PUSH
 960: LD_INT 72
 962: PUSH
 963: EMPTY
 964: LIST
 965: LIST
 966: PUSH
 967: LD_INT 106
 969: PUSH
 970: LD_INT 75
 972: PUSH
 973: EMPTY
 974: LIST
 975: LIST
 976: PUSH
 977: LD_INT 111
 979: PUSH
 980: LD_INT 90
 982: PUSH
 983: EMPTY
 984: LIST
 985: LIST
 986: PUSH
 987: LD_INT 117
 989: PUSH
 990: LD_INT 102
 992: PUSH
 993: EMPTY
 994: LIST
 995: LIST
 996: PUSH
 997: LD_INT 144
 999: PUSH
1000: LD_INT 105
1002: PUSH
1003: EMPTY
1004: LIST
1005: LIST
1006: PUSH
1007: LD_INT 143
1009: PUSH
1010: LD_INT 114
1012: PUSH
1013: EMPTY
1014: LIST
1015: LIST
1016: PUSH
1017: LD_INT 126
1019: PUSH
1020: LD_INT 121
1022: PUSH
1023: EMPTY
1024: LIST
1025: LIST
1026: PUSH
1027: LD_INT 138
1029: PUSH
1030: LD_INT 129
1032: PUSH
1033: EMPTY
1034: LIST
1035: LIST
1036: PUSH
1037: LD_INT 155
1039: PUSH
1040: LD_INT 131
1042: PUSH
1043: EMPTY
1044: LIST
1045: LIST
1046: PUSH
1047: LD_INT 71
1049: PUSH
1050: LD_INT 124
1052: PUSH
1053: EMPTY
1054: LIST
1055: LIST
1056: PUSH
1057: LD_INT 65
1059: PUSH
1060: LD_INT 100
1062: PUSH
1063: EMPTY
1064: LIST
1065: LIST
1066: PUSH
1067: LD_INT 102
1069: PUSH
1070: LD_INT 104
1072: PUSH
1073: EMPTY
1074: LIST
1075: LIST
1076: PUSH
1077: EMPTY
1078: LIST
1079: LIST
1080: LIST
1081: LIST
1082: LIST
1083: LIST
1084: LIST
1085: LIST
1086: LIST
1087: LIST
1088: LIST
1089: LIST
1090: LIST
1091: LIST
1092: LIST
1093: ST_TO_ADDR
// InitUc ;
1094: CALL_OW 18
// InitHc ;
1098: CALL_OW 19
// uc_side = nature ;
1102: LD_ADDR_OWVAR 20
1106: PUSH
1107: LD_EXP 4
1111: ST_TO_ADDR
// uc_nation = nation_nature ;
1112: LD_ADDR_OWVAR 21
1116: PUSH
1117: LD_INT 0
1119: ST_TO_ADDR
// agres = - 10 + difficulty * 20 ;
1120: LD_ADDR_VAR 0 5
1124: PUSH
1125: LD_INT 10
1127: NEG
1128: PUSH
1129: LD_OWVAR 67
1133: PUSH
1134: LD_INT 20
1136: MUL
1137: PLUS
1138: ST_TO_ADDR
// count = [ 9 , 7 , 5 ] [ difficulty ] ;
1139: LD_ADDR_VAR 0 6
1143: PUSH
1144: LD_INT 9
1146: PUSH
1147: LD_INT 7
1149: PUSH
1150: LD_INT 5
1152: PUSH
1153: EMPTY
1154: LIST
1155: LIST
1156: LIST
1157: PUSH
1158: LD_OWVAR 67
1162: ARRAY
1163: ST_TO_ADDR
// hc_class = class_apeman ;
1164: LD_ADDR_OWVAR 28
1168: PUSH
1169: LD_INT 12
1171: ST_TO_ADDR
// for i = 1 to count do
1172: LD_ADDR_VAR 0 2
1176: PUSH
1177: DOUBLE
1178: LD_INT 1
1180: DEC
1181: ST_TO_ADDR
1182: LD_VAR 0 6
1186: PUSH
1187: FOR_TO
1188: IFFALSE 1416
// begin if spots = 0 then
1190: LD_VAR 0 3
1194: PUSH
1195: LD_INT 0
1197: EQUAL
1198: IFFALSE 1204
// exit ;
1200: POP
1201: POP
1202: GO 1692
// uc_direction = Rand ( 0 , 5 ) ;
1204: LD_ADDR_OWVAR 24
1208: PUSH
1209: LD_INT 0
1211: PPUSH
1212: LD_INT 5
1214: PPUSH
1215: CALL_OW 12
1219: ST_TO_ADDR
// hc_agressivity = Rand ( - 1 * agres , agres ) ;
1220: LD_ADDR_OWVAR 35
1224: PUSH
1225: LD_INT 1
1227: NEG
1228: PUSH
1229: LD_VAR 0 5
1233: MUL
1234: PPUSH
1235: LD_VAR 0 5
1239: PPUSH
1240: CALL_OW 12
1244: ST_TO_ADDR
// hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
1245: LD_ADDR_OWVAR 29
1249: PUSH
1250: LD_INT 11
1252: PPUSH
1253: LD_INT 13
1255: PPUSH
1256: CALL_OW 12
1260: PUSH
1261: LD_INT 10
1263: PPUSH
1264: LD_INT 11
1266: PPUSH
1267: CALL_OW 12
1271: PUSH
1272: EMPTY
1273: LIST
1274: LIST
1275: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
1276: LD_ADDR_OWVAR 27
1280: PUSH
1281: LD_INT 1
1283: PPUSH
1284: LD_INT 2
1286: PPUSH
1287: CALL_OW 12
1291: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 1 ) , Rand ( 0 , 1 ) , 0 , 0 ] ;
1292: LD_ADDR_OWVAR 31
1296: PUSH
1297: LD_INT 0
1299: PPUSH
1300: LD_INT 1
1302: PPUSH
1303: CALL_OW 12
1307: PUSH
1308: LD_INT 0
1310: PPUSH
1311: LD_INT 1
1313: PPUSH
1314: CALL_OW 12
1318: PUSH
1319: LD_INT 0
1321: PUSH
1322: LD_INT 0
1324: PUSH
1325: EMPTY
1326: LIST
1327: LIST
1328: LIST
1329: LIST
1330: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
1331: LD_ADDR_VAR 0 4
1335: PUSH
1336: LD_INT 1
1338: PPUSH
1339: LD_VAR 0 3
1343: PPUSH
1344: CALL_OW 12
1348: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
1349: CALL_OW 44
1353: PPUSH
1354: LD_VAR 0 3
1358: PUSH
1359: LD_VAR 0 4
1363: ARRAY
1364: PUSH
1365: LD_INT 1
1367: ARRAY
1368: PPUSH
1369: LD_VAR 0 3
1373: PUSH
1374: LD_VAR 0 4
1378: ARRAY
1379: PUSH
1380: LD_INT 2
1382: ARRAY
1383: PPUSH
1384: LD_INT 5
1386: PPUSH
1387: LD_INT 0
1389: PPUSH
1390: CALL_OW 50
// spots = Delete ( spots , num ) ;
1394: LD_ADDR_VAR 0 3
1398: PUSH
1399: LD_VAR 0 3
1403: PPUSH
1404: LD_VAR 0 4
1408: PPUSH
1409: CALL_OW 3
1413: ST_TO_ADDR
// end ;
1414: GO 1187
1416: POP
1417: POP
// count = [ 1 , 2 , 3 ] [ difficulty ] ;
1418: LD_ADDR_VAR 0 6
1422: PUSH
1423: LD_INT 1
1425: PUSH
1426: LD_INT 2
1428: PUSH
1429: LD_INT 3
1431: PUSH
1432: EMPTY
1433: LIST
1434: LIST
1435: LIST
1436: PUSH
1437: LD_OWVAR 67
1441: ARRAY
1442: ST_TO_ADDR
// hc_gallery = nature_foreg ;
1443: LD_ADDR_OWVAR 33
1447: PUSH
1448: LD_STRING nature_foreg
1450: ST_TO_ADDR
// hc_face_number = 3 ;
1451: LD_ADDR_OWVAR 34
1455: PUSH
1456: LD_INT 3
1458: ST_TO_ADDR
// hc_class = class_tiger ;
1459: LD_ADDR_OWVAR 28
1463: PUSH
1464: LD_INT 14
1466: ST_TO_ADDR
// hc_sex = sex_male ;
1467: LD_ADDR_OWVAR 27
1471: PUSH
1472: LD_INT 1
1474: ST_TO_ADDR
// for i = 1 to count do
1475: LD_ADDR_VAR 0 2
1479: PUSH
1480: DOUBLE
1481: LD_INT 1
1483: DEC
1484: ST_TO_ADDR
1485: LD_VAR 0 6
1489: PUSH
1490: FOR_TO
1491: IFFALSE 1690
// begin if spots = 0 then
1493: LD_VAR 0 3
1497: PUSH
1498: LD_INT 0
1500: EQUAL
1501: IFFALSE 1507
// exit ;
1503: POP
1504: POP
1505: GO 1692
// uc_direction = Rand ( 0 , 5 ) ;
1507: LD_ADDR_OWVAR 24
1511: PUSH
1512: LD_INT 0
1514: PPUSH
1515: LD_INT 5
1517: PPUSH
1518: CALL_OW 12
1522: ST_TO_ADDR
// hc_agressivity = Rand ( 0 , agres ) ;
1523: LD_ADDR_OWVAR 35
1527: PUSH
1528: LD_INT 0
1530: PPUSH
1531: LD_VAR 0 5
1535: PPUSH
1536: CALL_OW 12
1540: ST_TO_ADDR
// hc_attr = [ Rand ( 11 , 12 ) , Rand ( 10 , 11 ) ] ;
1541: LD_ADDR_OWVAR 29
1545: PUSH
1546: LD_INT 11
1548: PPUSH
1549: LD_INT 12
1551: PPUSH
1552: CALL_OW 12
1556: PUSH
1557: LD_INT 10
1559: PPUSH
1560: LD_INT 11
1562: PPUSH
1563: CALL_OW 12
1567: PUSH
1568: EMPTY
1569: LIST
1570: LIST
1571: ST_TO_ADDR
// hc_skills = [ Rand ( 1 , difficulty ) , 0 , 0 , 0 ] ;
1572: LD_ADDR_OWVAR 31
1576: PUSH
1577: LD_INT 1
1579: PPUSH
1580: LD_OWVAR 67
1584: PPUSH
1585: CALL_OW 12
1589: PUSH
1590: LD_INT 0
1592: PUSH
1593: LD_INT 0
1595: PUSH
1596: LD_INT 0
1598: PUSH
1599: EMPTY
1600: LIST
1601: LIST
1602: LIST
1603: LIST
1604: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
1605: LD_ADDR_VAR 0 4
1609: PUSH
1610: LD_INT 1
1612: PPUSH
1613: LD_VAR 0 3
1617: PPUSH
1618: CALL_OW 12
1622: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
1623: CALL_OW 44
1627: PPUSH
1628: LD_VAR 0 3
1632: PUSH
1633: LD_VAR 0 4
1637: ARRAY
1638: PUSH
1639: LD_INT 1
1641: ARRAY
1642: PPUSH
1643: LD_VAR 0 3
1647: PUSH
1648: LD_VAR 0 4
1652: ARRAY
1653: PUSH
1654: LD_INT 2
1656: ARRAY
1657: PPUSH
1658: LD_INT 5
1660: PPUSH
1661: LD_INT 0
1663: PPUSH
1664: CALL_OW 50
// spots = Delete ( spots , num ) ;
1668: LD_ADDR_VAR 0 3
1672: PUSH
1673: LD_VAR 0 3
1677: PPUSH
1678: LD_VAR 0 4
1682: PPUSH
1683: CALL_OW 3
1687: ST_TO_ADDR
// end ;
1688: GO 1490
1690: POP
1691: POP
// end ;
1692: LD_VAR 0 1
1696: RET
// function PrepareArabians ; var human_list , vehicle_list , i , a , temp_list , temp_list_2 , b , c ; begin
1697: LD_INT 0
1699: PPUSH
1700: PPUSH
1701: PPUSH
1702: PPUSH
1703: PPUSH
1704: PPUSH
1705: PPUSH
1706: PPUSH
1707: PPUSH
// InitHc ;
1708: CALL_OW 19
// InitUc ;
1712: CALL_OW 18
// uc_side = you ;
1716: LD_ADDR_OWVAR 20
1720: PUSH
1721: LD_EXP 2
1725: ST_TO_ADDR
// uc_nation = nation_arabian ;
1726: LD_ADDR_OWVAR 21
1730: PUSH
1731: LD_INT 2
1733: ST_TO_ADDR
// if not testing then
1734: LD_EXP 1
1738: NOT
1739: IFFALSE 1768
// begin Heike = CreateCharacter ( Heike_07_cont ) ;
1741: LD_ADDR_EXP 7
1745: PUSH
1746: LD_STRING Heike_07_cont
1748: PPUSH
1749: CALL_OW 34
1753: ST_TO_ADDR
// SetClass ( Heike , class_soldier ) ;
1754: LD_EXP 7
1758: PPUSH
1759: LD_INT 1
1761: PPUSH
1762: CALL_OW 336
// end else
1766: GO 1800
// begin InitHc ;
1768: CALL_OW 19
// PrepareSoldier ( sex_female , 7 ) ;
1772: LD_INT 2
1774: PPUSH
1775: LD_INT 7
1777: PPUSH
1778: CALL_OW 381
// hc_name = Heike ;
1782: LD_ADDR_OWVAR 26
1786: PUSH
1787: LD_STRING Heike
1789: ST_TO_ADDR
// Heike = CreateHuman ;
1790: LD_ADDR_EXP 7
1794: PUSH
1795: CALL_OW 44
1799: ST_TO_ADDR
// end ; InitVc ;
1800: CALL_OW 20
// vc_control = control_manual ;
1804: LD_ADDR_OWVAR 38
1808: PUSH
1809: LD_INT 1
1811: ST_TO_ADDR
// vc_engine = engine_solar ;
1812: LD_ADDR_OWVAR 39
1816: PUSH
1817: LD_INT 2
1819: ST_TO_ADDR
// vc_weapon = [ ar_light_gun , ar_double_machine_gun ] [ Rand ( 1 , 2 ) ] ;
1820: LD_ADDR_OWVAR 40
1824: PUSH
1825: LD_INT 23
1827: PUSH
1828: LD_INT 24
1830: PUSH
1831: EMPTY
1832: LIST
1833: LIST
1834: PUSH
1835: LD_INT 1
1837: PPUSH
1838: LD_INT 2
1840: PPUSH
1841: CALL_OW 12
1845: ARRAY
1846: ST_TO_ADDR
// vc_chassis = ar_hovercraft ;
1847: LD_ADDR_OWVAR 37
1851: PUSH
1852: LD_INT 11
1854: ST_TO_ADDR
// heike_vehicle = CreateVehicle ;
1855: LD_ADDR_EXP 63
1859: PUSH
1860: CALL_OW 45
1864: ST_TO_ADDR
// PlaceHumanInUnit ( Heike , heike_vehicle ) ;
1865: LD_EXP 7
1869: PPUSH
1870: LD_EXP 63
1874: PPUSH
1875: CALL_OW 52
// a = [ 5 , 4 , 3 ] [ difficulty ] ;
1879: LD_ADDR_VAR 0 5
1883: PUSH
1884: LD_INT 5
1886: PUSH
1887: LD_INT 4
1889: PUSH
1890: LD_INT 3
1892: PUSH
1893: EMPTY
1894: LIST
1895: LIST
1896: LIST
1897: PUSH
1898: LD_OWVAR 67
1902: ARRAY
1903: ST_TO_ADDR
// a = a + LoadVariable ( Num_less_people_chosen_05_cont , 0 ) * 2 ;
1904: LD_ADDR_VAR 0 5
1908: PUSH
1909: LD_VAR 0 5
1913: PUSH
1914: LD_STRING Num_less_people_chosen_05_cont
1916: PPUSH
1917: LD_INT 0
1919: PPUSH
1920: CALL_OW 30
1924: PUSH
1925: LD_INT 2
1927: MUL
1928: PLUS
1929: ST_TO_ADDR
// human_list = [ ] ;
1930: LD_ADDR_VAR 0 2
1934: PUSH
1935: EMPTY
1936: ST_TO_ADDR
// InitHc ;
1937: CALL_OW 19
// hc_attr = [ 10 , 10 ] ;
1941: LD_ADDR_OWVAR 29
1945: PUSH
1946: LD_INT 10
1948: PUSH
1949: LD_INT 10
1951: PUSH
1952: EMPTY
1953: LIST
1954: LIST
1955: ST_TO_ADDR
// hc_basic_skills = [ 2 , 0 , 2 , 0 ] ;
1956: LD_ADDR_OWVAR 30
1960: PUSH
1961: LD_INT 2
1963: PUSH
1964: LD_INT 0
1966: PUSH
1967: LD_INT 2
1969: PUSH
1970: LD_INT 0
1972: PUSH
1973: EMPTY
1974: LIST
1975: LIST
1976: LIST
1977: LIST
1978: ST_TO_ADDR
// hc_skills = [ 5 , 2 , 5 , 1 ] ;
1979: LD_ADDR_OWVAR 31
1983: PUSH
1984: LD_INT 5
1986: PUSH
1987: LD_INT 2
1989: PUSH
1990: LD_INT 5
1992: PUSH
1993: LD_INT 1
1995: PUSH
1996: EMPTY
1997: LIST
1998: LIST
1999: LIST
2000: LIST
2001: ST_TO_ADDR
// hc_class = class_soldier ;
2002: LD_ADDR_OWVAR 28
2006: PUSH
2007: LD_INT 1
2009: ST_TO_ADDR
// hc_sex = sex_male ;
2010: LD_ADDR_OWVAR 27
2014: PUSH
2015: LD_INT 1
2017: ST_TO_ADDR
// hc_gallery = ar_new ;
2018: LD_ADDR_OWVAR 33
2022: PUSH
2023: LD_STRING ar_new
2025: ST_TO_ADDR
// hc_face_number = 27 ;
2026: LD_ADDR_OWVAR 34
2030: PUSH
2031: LD_INT 27
2033: ST_TO_ADDR
// hc_name = Vervecken ;
2034: LD_ADDR_OWVAR 26
2038: PUSH
2039: LD_STRING Vervecken
2041: ST_TO_ADDR
// c = CreateHuman ;
2042: LD_ADDR_VAR 0 9
2046: PUSH
2047: CALL_OW 44
2051: ST_TO_ADDR
// human_list = human_list ^ c ;
2052: LD_ADDR_VAR 0 2
2056: PUSH
2057: LD_VAR 0 2
2061: PUSH
2062: LD_VAR 0 9
2066: ADD
2067: ST_TO_ADDR
// louis_main_companions = louis_main_companions ^ c ;
2068: LD_ADDR_EXP 73
2072: PUSH
2073: LD_EXP 73
2077: PUSH
2078: LD_VAR 0 9
2082: ADD
2083: ST_TO_ADDR
// hc_attr = [ 10 , 11 ] ;
2084: LD_ADDR_OWVAR 29
2088: PUSH
2089: LD_INT 10
2091: PUSH
2092: LD_INT 11
2094: PUSH
2095: EMPTY
2096: LIST
2097: LIST
2098: ST_TO_ADDR
// hc_basic_skills = [ 2 , 0 , 1 , 1 ] ;
2099: LD_ADDR_OWVAR 30
2103: PUSH
2104: LD_INT 2
2106: PUSH
2107: LD_INT 0
2109: PUSH
2110: LD_INT 1
2112: PUSH
2113: LD_INT 1
2115: PUSH
2116: EMPTY
2117: LIST
2118: LIST
2119: LIST
2120: LIST
2121: ST_TO_ADDR
// hc_skills = [ 5 , 2 , 3 , 3 ] ;
2122: LD_ADDR_OWVAR 31
2126: PUSH
2127: LD_INT 5
2129: PUSH
2130: LD_INT 2
2132: PUSH
2133: LD_INT 3
2135: PUSH
2136: LD_INT 3
2138: PUSH
2139: EMPTY
2140: LIST
2141: LIST
2142: LIST
2143: LIST
2144: ST_TO_ADDR
// hc_class = class_soldier ;
2145: LD_ADDR_OWVAR 28
2149: PUSH
2150: LD_INT 1
2152: ST_TO_ADDR
// hc_sex = sex_female ;
2153: LD_ADDR_OWVAR 27
2157: PUSH
2158: LD_INT 2
2160: ST_TO_ADDR
// hc_gallery = ar_new ;
2161: LD_ADDR_OWVAR 33
2165: PUSH
2166: LD_STRING ar_new
2168: ST_TO_ADDR
// hc_face_number = 28 ;
2169: LD_ADDR_OWVAR 34
2173: PUSH
2174: LD_INT 28
2176: ST_TO_ADDR
// hc_name = Bogdanovic ;
2177: LD_ADDR_OWVAR 26
2181: PUSH
2182: LD_STRING Bogdanovic
2184: ST_TO_ADDR
// c = CreateHuman ;
2185: LD_ADDR_VAR 0 9
2189: PUSH
2190: CALL_OW 44
2194: ST_TO_ADDR
// human_list = human_list ^ c ;
2195: LD_ADDR_VAR 0 2
2199: PUSH
2200: LD_VAR 0 2
2204: PUSH
2205: LD_VAR 0 9
2209: ADD
2210: ST_TO_ADDR
// louis_main_companions = louis_main_companions ^ c ;
2211: LD_ADDR_EXP 73
2215: PUSH
2216: LD_EXP 73
2220: PUSH
2221: LD_VAR 0 9
2225: ADD
2226: ST_TO_ADDR
// a = a - 2 ;
2227: LD_ADDR_VAR 0 5
2231: PUSH
2232: LD_VAR 0 5
2236: PUSH
2237: LD_INT 2
2239: MINUS
2240: ST_TO_ADDR
// temp_list = CreateCharacterSet ( Others_05_cont ) diff 0 ;
2241: LD_ADDR_VAR 0 6
2245: PUSH
2246: LD_STRING Others_05_cont
2248: PPUSH
2249: CALL_OW 31
2253: PUSH
2254: LD_INT 0
2256: DIFF
2257: ST_TO_ADDR
// for i in temp_list do
2258: LD_ADDR_VAR 0 4
2262: PUSH
2263: LD_VAR 0 6
2267: PUSH
2268: FOR_IN
2269: IFFALSE 2327
// begin if a <= 0 then
2271: LD_VAR 0 5
2275: PUSH
2276: LD_INT 0
2278: LESSEQUAL
2279: IFFALSE 2283
// break ;
2281: GO 2327
// human_list = human_list ^ i ;
2283: LD_ADDR_VAR 0 2
2287: PUSH
2288: LD_VAR 0 2
2292: PUSH
2293: LD_VAR 0 4
2297: ADD
2298: ST_TO_ADDR
// SetClass ( i , class_soldier ) ;
2299: LD_VAR 0 4
2303: PPUSH
2304: LD_INT 1
2306: PPUSH
2307: CALL_OW 336
// a = a - 1 ;
2311: LD_ADDR_VAR 0 5
2315: PUSH
2316: LD_VAR 0 5
2320: PUSH
2321: LD_INT 1
2323: MINUS
2324: ST_TO_ADDR
// end ;
2325: GO 2268
2327: POP
2328: POP
// human_list = human_list ^ CreateUnitsWithClass ( a , class_soldier , you ) ;
2329: LD_ADDR_VAR 0 2
2333: PUSH
2334: LD_VAR 0 2
2338: PUSH
2339: LD_VAR 0 5
2343: PPUSH
2344: LD_INT 1
2346: PPUSH
2347: LD_EXP 2
2351: PPUSH
2352: CALL 7077 0 3
2356: ADD
2357: ST_TO_ADDR
// human_list = human_list ^ CreateApemenWithClass ( [ 2 , 1 , 0 ] [ difficulty ] , class_apeman_soldier , you ) ;
2358: LD_ADDR_VAR 0 2
2362: PUSH
2363: LD_VAR 0 2
2367: PUSH
2368: LD_INT 2
2370: PUSH
2371: LD_INT 1
2373: PUSH
2374: LD_INT 0
2376: PUSH
2377: EMPTY
2378: LIST
2379: LIST
2380: LIST
2381: PUSH
2382: LD_OWVAR 67
2386: ARRAY
2387: PPUSH
2388: LD_INT 15
2390: PPUSH
2391: LD_EXP 2
2395: PPUSH
2396: CALL 7265 0 3
2400: ADD
2401: ST_TO_ADDR
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_breastwork ] , [ f_btype , b_bunker ] ] ] ) ;
2402: LD_ADDR_VAR 0 6
2406: PUSH
2407: LD_INT 22
2409: PUSH
2410: LD_EXP 2
2414: PUSH
2415: EMPTY
2416: LIST
2417: LIST
2418: PUSH
2419: LD_INT 2
2421: PUSH
2422: LD_INT 30
2424: PUSH
2425: LD_INT 31
2427: PUSH
2428: EMPTY
2429: LIST
2430: LIST
2431: PUSH
2432: LD_INT 30
2434: PUSH
2435: LD_INT 32
2437: PUSH
2438: EMPTY
2439: LIST
2440: LIST
2441: PUSH
2442: EMPTY
2443: LIST
2444: LIST
2445: LIST
2446: PUSH
2447: EMPTY
2448: LIST
2449: LIST
2450: PPUSH
2451: CALL_OW 69
2455: ST_TO_ADDR
// a = human_list + 1 ;
2456: LD_ADDR_VAR 0 5
2460: PUSH
2461: LD_VAR 0 2
2465: PUSH
2466: LD_INT 1
2468: PLUS
2469: ST_TO_ADDR
// for i = 1 to human_list do
2470: LD_ADDR_VAR 0 4
2474: PUSH
2475: DOUBLE
2476: LD_INT 1
2478: DEC
2479: ST_TO_ADDR
2480: LD_VAR 0 2
2484: PUSH
2485: FOR_TO
2486: IFFALSE 2579
// begin if i > temp_list then
2488: LD_VAR 0 4
2492: PUSH
2493: LD_VAR 0 6
2497: GREATER
2498: IFFALSE 2512
// begin a = i ;
2500: LD_ADDR_VAR 0 5
2504: PUSH
2505: LD_VAR 0 4
2509: ST_TO_ADDR
// break ;
2510: GO 2579
// end ; if GetBType ( temp_list [ i ] ) = b_breastwork then
2512: LD_VAR 0 6
2516: PUSH
2517: LD_VAR 0 4
2521: ARRAY
2522: PPUSH
2523: CALL_OW 266
2527: PUSH
2528: LD_INT 31
2530: EQUAL
2531: IFFALSE 2551
// SetDir ( human_list [ i ] , 3 ) ;
2533: LD_VAR 0 2
2537: PUSH
2538: LD_VAR 0 4
2542: ARRAY
2543: PPUSH
2544: LD_INT 3
2546: PPUSH
2547: CALL_OW 233
// PlaceHumanInUnit ( human_list [ i ] , temp_list [ i ] ) ;
2551: LD_VAR 0 2
2555: PUSH
2556: LD_VAR 0 4
2560: ARRAY
2561: PPUSH
2562: LD_VAR 0 6
2566: PUSH
2567: LD_VAR 0 4
2571: ARRAY
2572: PPUSH
2573: CALL_OW 52
// end ;
2577: GO 2485
2579: POP
2580: POP
// if a <= human_list then
2581: LD_VAR 0 5
2585: PUSH
2586: LD_VAR 0 2
2590: LESSEQUAL
2591: IFFALSE 2659
// PlaceRestArabPeople ( FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_armoury ] , [ f_btype , b_barracks ] ] ] ) , 0 , human_list , a ) ;
2593: LD_INT 22
2595: PUSH
2596: LD_EXP 2
2600: PUSH
2601: EMPTY
2602: LIST
2603: LIST
2604: PUSH
2605: LD_INT 2
2607: PUSH
2608: LD_INT 30
2610: PUSH
2611: LD_INT 4
2613: PUSH
2614: EMPTY
2615: LIST
2616: LIST
2617: PUSH
2618: LD_INT 30
2620: PUSH
2621: LD_INT 5
2623: PUSH
2624: EMPTY
2625: LIST
2626: LIST
2627: PUSH
2628: EMPTY
2629: LIST
2630: LIST
2631: LIST
2632: PUSH
2633: EMPTY
2634: LIST
2635: LIST
2636: PPUSH
2637: CALL_OW 69
2641: PPUSH
2642: LD_INT 0
2644: PPUSH
2645: LD_VAR 0 2
2649: PPUSH
2650: LD_VAR 0 5
2654: PPUSH
2655: CALL 3790 0 4
// Louis = NewCharacter ( Louis ) ;
2659: LD_ADDR_EXP 9
2663: PUSH
2664: LD_STRING Louis
2666: PPUSH
2667: CALL_OW 25
2671: ST_TO_ADDR
// PlaceHumanInUnit ( Louis , ardep1 ) ;
2672: LD_EXP 9
2676: PPUSH
2677: LD_INT 3
2679: PPUSH
2680: CALL_OW 52
// human_list = CreateUnitsWithClass ( [ 2 , 1 , 0 ] [ difficulty ] , class_engineer , you ) ;
2684: LD_ADDR_VAR 0 2
2688: PUSH
2689: LD_INT 2
2691: PUSH
2692: LD_INT 1
2694: PUSH
2695: LD_INT 0
2697: PUSH
2698: EMPTY
2699: LIST
2700: LIST
2701: LIST
2702: PUSH
2703: LD_OWVAR 67
2707: ARRAY
2708: PPUSH
2709: LD_INT 2
2711: PPUSH
2712: LD_EXP 2
2716: PPUSH
2717: CALL 7077 0 3
2721: ST_TO_ADDR
// PlaceRestArabPeople ( [ ardep1 ] , 1 , human_list , 1 ) ;
2722: LD_INT 3
2724: PUSH
2725: EMPTY
2726: LIST
2727: PPUSH
2728: LD_INT 1
2730: PPUSH
2731: LD_VAR 0 2
2735: PPUSH
2736: LD_INT 1
2738: PPUSH
2739: CALL 3790 0 4
// human_list = CreateUnitsWithClass ( [ 3 , 2 , 1 ] [ difficulty ] , class_mechanic , you ) ;
2743: LD_ADDR_VAR 0 2
2747: PUSH
2748: LD_INT 3
2750: PUSH
2751: LD_INT 2
2753: PUSH
2754: LD_INT 1
2756: PUSH
2757: EMPTY
2758: LIST
2759: LIST
2760: LIST
2761: PUSH
2762: LD_OWVAR 67
2766: ARRAY
2767: PPUSH
2768: LD_INT 3
2770: PPUSH
2771: LD_EXP 2
2775: PPUSH
2776: CALL 7077 0 3
2780: ST_TO_ADDR
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_vehicle ] , [ f_control , control_manual ] ] ) ;
2781: LD_ADDR_VAR 0 6
2785: PUSH
2786: LD_INT 22
2788: PUSH
2789: LD_EXP 2
2793: PUSH
2794: EMPTY
2795: LIST
2796: LIST
2797: PUSH
2798: LD_INT 21
2800: PUSH
2801: LD_INT 2
2803: PUSH
2804: EMPTY
2805: LIST
2806: LIST
2807: PUSH
2808: LD_INT 33
2810: PUSH
2811: LD_INT 1
2813: PUSH
2814: EMPTY
2815: LIST
2816: LIST
2817: PUSH
2818: EMPTY
2819: LIST
2820: LIST
2821: LIST
2822: PPUSH
2823: CALL_OW 69
2827: ST_TO_ADDR
// a = human_list + 1 ;
2828: LD_ADDR_VAR 0 5
2832: PUSH
2833: LD_VAR 0 2
2837: PUSH
2838: LD_INT 1
2840: PLUS
2841: ST_TO_ADDR
// for i = 1 to human_list do
2842: LD_ADDR_VAR 0 4
2846: PUSH
2847: DOUBLE
2848: LD_INT 1
2850: DEC
2851: ST_TO_ADDR
2852: LD_VAR 0 2
2856: PUSH
2857: FOR_TO
2858: IFFALSE 2912
// begin if i > temp_list then
2860: LD_VAR 0 4
2864: PUSH
2865: LD_VAR 0 6
2869: GREATER
2870: IFFALSE 2884
// begin a = i ;
2872: LD_ADDR_VAR 0 5
2876: PUSH
2877: LD_VAR 0 4
2881: ST_TO_ADDR
// break ;
2882: GO 2912
// end ; PlaceHumanInUnit ( human_list [ i ] , temp_list [ i ] ) ;
2884: LD_VAR 0 2
2888: PUSH
2889: LD_VAR 0 4
2893: ARRAY
2894: PPUSH
2895: LD_VAR 0 6
2899: PUSH
2900: LD_VAR 0 4
2904: ARRAY
2905: PPUSH
2906: CALL_OW 52
// end ;
2910: GO 2857
2912: POP
2913: POP
// if a <= human_list then
2914: LD_VAR 0 5
2918: PUSH
2919: LD_VAR 0 2
2923: LESSEQUAL
2924: IFFALSE 2992
// PlaceRestArabPeople ( FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_workshop ] , [ f_btype , b_factory ] ] ] ) , 0 , human_list , a ) ;
2926: LD_INT 22
2928: PUSH
2929: LD_EXP 2
2933: PUSH
2934: EMPTY
2935: LIST
2936: LIST
2937: PUSH
2938: LD_INT 2
2940: PUSH
2941: LD_INT 30
2943: PUSH
2944: LD_INT 2
2946: PUSH
2947: EMPTY
2948: LIST
2949: LIST
2950: PUSH
2951: LD_INT 30
2953: PUSH
2954: LD_INT 3
2956: PUSH
2957: EMPTY
2958: LIST
2959: LIST
2960: PUSH
2961: EMPTY
2962: LIST
2963: LIST
2964: LIST
2965: PUSH
2966: EMPTY
2967: LIST
2968: LIST
2969: PPUSH
2970: CALL_OW 69
2974: PPUSH
2975: LD_INT 0
2977: PPUSH
2978: LD_VAR 0 2
2982: PPUSH
2983: LD_VAR 0 5
2987: PPUSH
2988: CALL 3790 0 4
// human_list = CreateUnitsWithClass ( [ 3 , 2 , 1 ] [ difficulty ] , class_scientistic , you ) ;
2992: LD_ADDR_VAR 0 2
2996: PUSH
2997: LD_INT 3
2999: PUSH
3000: LD_INT 2
3002: PUSH
3003: LD_INT 1
3005: PUSH
3006: EMPTY
3007: LIST
3008: LIST
3009: LIST
3010: PUSH
3011: LD_OWVAR 67
3015: ARRAY
3016: PPUSH
3017: LD_INT 4
3019: PPUSH
3020: LD_EXP 2
3024: PPUSH
3025: CALL 7077 0 3
3029: ST_TO_ADDR
// PlaceRestArabPeople ( FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] , [ f_btype , b_lab_full ] ] ] ) , 0 , human_list , 1 ) ;
3030: LD_INT 22
3032: PUSH
3033: LD_EXP 2
3037: PUSH
3038: EMPTY
3039: LIST
3040: LIST
3041: PUSH
3042: LD_INT 2
3044: PUSH
3045: LD_INT 30
3047: PUSH
3048: LD_INT 6
3050: PUSH
3051: EMPTY
3052: LIST
3053: LIST
3054: PUSH
3055: LD_INT 30
3057: PUSH
3058: LD_INT 7
3060: PUSH
3061: EMPTY
3062: LIST
3063: LIST
3064: PUSH
3065: LD_INT 30
3067: PUSH
3068: LD_INT 8
3070: PUSH
3071: EMPTY
3072: LIST
3073: LIST
3074: PUSH
3075: EMPTY
3076: LIST
3077: LIST
3078: LIST
3079: LIST
3080: PUSH
3081: EMPTY
3082: LIST
3083: LIST
3084: PPUSH
3085: CALL_OW 69
3089: PPUSH
3090: LD_INT 0
3092: PPUSH
3093: LD_VAR 0 2
3097: PPUSH
3098: LD_INT 1
3100: PPUSH
3101: CALL 3790 0 4
// InitHc ;
3105: CALL_OW 19
// InitUc ;
3109: CALL_OW 18
// uc_side = you ;
3113: LD_ADDR_OWVAR 20
3117: PUSH
3118: LD_EXP 2
3122: ST_TO_ADDR
// uc_nation = nation_arabian ;
3123: LD_ADDR_OWVAR 21
3127: PUSH
3128: LD_INT 2
3130: ST_TO_ADDR
// hc_name = Erwin ;
3131: LD_ADDR_OWVAR 26
3135: PUSH
3136: LD_STRING Erwin
3138: ST_TO_ADDR
// PrepareSoldier ( sex_male , 6 ) ;
3139: LD_INT 1
3141: PPUSH
3142: LD_INT 6
3144: PPUSH
3145: CALL_OW 381
// hc_gallery = ar_new ;
3149: LD_ADDR_OWVAR 33
3153: PUSH
3154: LD_STRING ar_new
3156: ST_TO_ADDR
// hc_face_number = 21 ;
3157: LD_ADDR_OWVAR 34
3161: PUSH
3162: LD_INT 21
3164: ST_TO_ADDR
// Erwin = CreateHuman ;
3165: LD_ADDR_EXP 10
3169: PUSH
3170: CALL_OW 44
3174: ST_TO_ADDR
// PlaceUnitXYR ( Erwin , 86 , 13 , 5 , false ) ;
3175: LD_EXP 10
3179: PPUSH
3180: LD_INT 86
3182: PPUSH
3183: LD_INT 13
3185: PPUSH
3186: LD_INT 5
3188: PPUSH
3189: LD_INT 0
3191: PPUSH
3192: CALL_OW 50
// InitHc ;
3196: CALL_OW 19
// Martin = NewCharacter ( Martin ) ;
3200: LD_ADDR_EXP 8
3204: PUSH
3205: LD_STRING Martin
3207: PPUSH
3208: CALL_OW 25
3212: ST_TO_ADDR
// SetSide ( Martin , you_alt ) ;
3213: LD_EXP 8
3217: PPUSH
3218: LD_EXP 6
3222: PPUSH
3223: CALL_OW 235
// case difficulty of 1 :
3227: LD_OWVAR 67
3231: PUSH
3232: LD_INT 1
3234: DOUBLE
3235: EQUAL
3236: IFTRUE 3240
3238: GO 3254
3240: POP
// temp_list = [ 200 ] ; 2 :
3241: LD_ADDR_VAR 0 6
3245: PUSH
3246: LD_INT 200
3248: PUSH
3249: EMPTY
3250: LIST
3251: ST_TO_ADDR
3252: GO 3299
3254: LD_INT 2
3256: DOUBLE
3257: EQUAL
3258: IFTRUE 3262
3260: GO 3276
3262: POP
// temp_list = [ 130 ] ; 3 :
3263: LD_ADDR_VAR 0 6
3267: PUSH
3268: LD_INT 130
3270: PUSH
3271: EMPTY
3272: LIST
3273: ST_TO_ADDR
3274: GO 3299
3276: LD_INT 3
3278: DOUBLE
3279: EQUAL
3280: IFTRUE 3284
3282: GO 3298
3284: POP
// temp_list = [ 60 ] ; end ;
3285: LD_ADDR_VAR 0 6
3289: PUSH
3290: LD_INT 60
3292: PUSH
3293: EMPTY
3294: LIST
3295: ST_TO_ADDR
3296: GO 3299
3298: POP
// temp_list_2 = [ GetBase ( ardep1 ) ] ;
3299: LD_ADDR_VAR 0 7
3303: PUSH
3304: LD_INT 3
3306: PPUSH
3307: CALL_OW 274
3311: PUSH
3312: EMPTY
3313: LIST
3314: ST_TO_ADDR
// SetResourceType ( temp_list_2 [ 1 ] , mat_cans , temp_list [ 1 ] ) ;
3315: LD_VAR 0 7
3319: PUSH
3320: LD_INT 1
3322: ARRAY
3323: PPUSH
3324: LD_INT 1
3326: PPUSH
3327: LD_VAR 0 6
3331: PUSH
3332: LD_INT 1
3334: ARRAY
3335: PPUSH
3336: CALL_OW 277
// SetResourceType ( temp_list_2 [ 1 ] , mat_oil , Rand ( 150 , 200 ) ) ;
3340: LD_VAR 0 7
3344: PUSH
3345: LD_INT 1
3347: ARRAY
3348: PPUSH
3349: LD_INT 2
3351: PPUSH
3352: LD_INT 150
3354: PPUSH
3355: LD_INT 200
3357: PPUSH
3358: CALL_OW 12
3362: PPUSH
3363: CALL_OW 277
// if LoadVariable ( Siberite_gathered_on_time_07_cont , false ) then
3367: LD_STRING Siberite_gathered_on_time_07_cont
3369: PPUSH
3370: LD_INT 0
3372: PPUSH
3373: CALL_OW 30
3377: IFFALSE 3400
// SetResourceType ( temp_list_2 [ 1 ] , mat_siberit , 30 ) else
3379: LD_VAR 0 7
3383: PUSH
3384: LD_INT 1
3386: ARRAY
3387: PPUSH
3388: LD_INT 3
3390: PPUSH
3391: LD_INT 30
3393: PPUSH
3394: CALL_OW 277
3398: GO 3419
// SetResourceType ( temp_list_2 [ 1 ] , mat_siberit , 0 ) ;
3400: LD_VAR 0 7
3404: PUSH
3405: LD_INT 1
3407: ARRAY
3408: PPUSH
3409: LD_INT 3
3411: PPUSH
3412: LD_INT 0
3414: PPUSH
3415: CALL_OW 277
// RevealFogArea ( you , player_base ) ;
3419: LD_EXP 2
3423: PPUSH
3424: LD_INT 3
3426: PPUSH
3427: CALL_OW 332
// c = 0 ;
3431: LD_ADDR_VAR 0 9
3435: PUSH
3436: LD_INT 0
3438: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_class , class_engineer ] ] ) do
3439: LD_ADDR_VAR 0 4
3443: PUSH
3444: LD_INT 22
3446: PUSH
3447: LD_EXP 2
3451: PUSH
3452: EMPTY
3453: LIST
3454: LIST
3455: PUSH
3456: LD_INT 25
3458: PUSH
3459: LD_INT 2
3461: PUSH
3462: EMPTY
3463: LIST
3464: LIST
3465: PUSH
3466: EMPTY
3467: LIST
3468: LIST
3469: PPUSH
3470: CALL_OW 69
3474: PUSH
3475: FOR_IN
3476: IFFALSE 3520
// begin b = GetSkill ( i , skill_engineering ) ;
3478: LD_ADDR_VAR 0 8
3482: PUSH
3483: LD_VAR 0 4
3487: PPUSH
3488: LD_INT 2
3490: PPUSH
3491: CALL_OW 259
3495: ST_TO_ADDR
// if b > c then
3496: LD_VAR 0 8
3500: PUSH
3501: LD_VAR 0 9
3505: GREATER
3506: IFFALSE 3518
// c = b ;
3508: LD_ADDR_VAR 0 9
3512: PUSH
3513: LD_VAR 0 8
3517: ST_TO_ADDR
// end ;
3518: GO 3475
3520: POP
3521: POP
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] ] ) do
3522: LD_ADDR_VAR 0 4
3526: PUSH
3527: LD_INT 22
3529: PUSH
3530: LD_EXP 2
3534: PUSH
3535: EMPTY
3536: LIST
3537: LIST
3538: PUSH
3539: LD_INT 21
3541: PUSH
3542: LD_INT 3
3544: PUSH
3545: EMPTY
3546: LIST
3547: LIST
3548: PUSH
3549: EMPTY
3550: LIST
3551: LIST
3552: PPUSH
3553: CALL_OW 69
3557: PUSH
3558: FOR_IN
3559: IFFALSE 3577
// SetBLevel ( i , c ) ;
3561: LD_VAR 0 4
3565: PPUSH
3566: LD_VAR 0 9
3570: PPUSH
3571: CALL_OW 241
3575: GO 3558
3577: POP
3578: POP
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_btype , b_warehouse ] ] ) do
3579: LD_ADDR_VAR 0 4
3583: PUSH
3584: LD_INT 22
3586: PUSH
3587: LD_EXP 2
3591: PUSH
3592: EMPTY
3593: LIST
3594: LIST
3595: PUSH
3596: LD_INT 30
3598: PUSH
3599: LD_INT 1
3601: PUSH
3602: EMPTY
3603: LIST
3604: LIST
3605: PUSH
3606: EMPTY
3607: LIST
3608: LIST
3609: PPUSH
3610: CALL_OW 69
3614: PUSH
3615: FOR_IN
3616: IFFALSE 3632
// SetBName ( i , newkabul ) ;
3618: LD_VAR 0 4
3622: PPUSH
3623: LD_STRING newkabul
3625: PPUSH
3626: CALL_OW 500
3630: GO 3615
3632: POP
3633: POP
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , player_base ] , [ f_type , unit_building ] ] ) do
3634: LD_ADDR_VAR 0 4
3638: PUSH
3639: LD_INT 22
3641: PUSH
3642: LD_EXP 2
3646: PUSH
3647: EMPTY
3648: LIST
3649: LIST
3650: PUSH
3651: LD_INT 95
3653: PUSH
3654: LD_INT 3
3656: PUSH
3657: EMPTY
3658: LIST
3659: LIST
3660: PUSH
3661: LD_INT 21
3663: PUSH
3664: LD_INT 3
3666: PUSH
3667: EMPTY
3668: LIST
3669: LIST
3670: PUSH
3671: EMPTY
3672: LIST
3673: LIST
3674: LIST
3675: PPUSH
3676: CALL_OW 69
3680: PUSH
3681: FOR_IN
3682: IFFALSE 3756
// if GetBType ( i ) in [ b_bunker , b_breastwork , b_oil_mine , b_solar_power , b_oil_power ] and Rand ( 1 , 2 ) = 1 then
3684: LD_VAR 0 4
3688: PPUSH
3689: CALL_OW 266
3693: PUSH
3694: LD_INT 32
3696: PUSH
3697: LD_INT 31
3699: PUSH
3700: LD_INT 29
3702: PUSH
3703: LD_INT 27
3705: PUSH
3706: LD_INT 26
3708: PUSH
3709: EMPTY
3710: LIST
3711: LIST
3712: LIST
3713: LIST
3714: LIST
3715: IN
3716: PUSH
3717: LD_INT 1
3719: PPUSH
3720: LD_INT 2
3722: PPUSH
3723: CALL_OW 12
3727: PUSH
3728: LD_INT 1
3730: EQUAL
3731: AND
3732: IFFALSE 3754
// SetLives ( i , Rand ( 450 , 800 ) ) ;
3734: LD_VAR 0 4
3738: PPUSH
3739: LD_INT 450
3741: PPUSH
3742: LD_INT 800
3744: PPUSH
3745: CALL_OW 12
3749: PPUSH
3750: CALL_OW 234
3754: GO 3681
3756: POP
3757: POP
// if apeman_vehicles_researched_07 or testing then
3758: LD_EXP 75
3762: PUSH
3763: LD_EXP 1
3767: OR
3768: IFFALSE 3785
// SetTech ( tech_apeneural , you , state_enabled ) ;
3770: LD_INT 3
3772: PPUSH
3773: LD_EXP 2
3777: PPUSH
3778: LD_INT 1
3780: PPUSH
3781: CALL_OW 322
// end ;
3785: LD_VAR 0 1
3789: RET
// function PlaceRestArabPeople ( buildings_list , init_people_in_buildings , human_list , start_index ) ; var i , b , c , k ; begin
3790: LD_INT 0
3792: PPUSH
3793: PPUSH
3794: PPUSH
3795: PPUSH
3796: PPUSH
// b = 1 ;
3797: LD_ADDR_VAR 0 7
3801: PUSH
3802: LD_INT 1
3804: ST_TO_ADDR
// c = init_people_in_buildings ;
3805: LD_ADDR_VAR 0 8
3809: PUSH
3810: LD_VAR 0 2
3814: ST_TO_ADDR
// for i = start_index to human_list do
3815: LD_ADDR_VAR 0 6
3819: PUSH
3820: DOUBLE
3821: LD_VAR 0 4
3825: DEC
3826: ST_TO_ADDR
3827: LD_VAR 0 3
3831: PUSH
3832: FOR_TO
3833: IFFALSE 3982
// begin if c = 6 then
3835: LD_VAR 0 8
3839: PUSH
3840: LD_INT 6
3842: EQUAL
3843: IFFALSE 3940
// begin if b = buildings_list + 0 then
3845: LD_VAR 0 7
3849: PUSH
3850: LD_VAR 0 1
3854: PUSH
3855: LD_INT 0
3857: PLUS
3858: EQUAL
3859: IFFALSE 3916
// begin for k = i to human_list do
3861: LD_ADDR_VAR 0 9
3865: PUSH
3866: DOUBLE
3867: LD_VAR 0 6
3871: DEC
3872: ST_TO_ADDR
3873: LD_VAR 0 3
3877: PUSH
3878: FOR_TO
3879: IFFALSE 3910
// PlaceUnitXYR ( human_list [ k ] , 86 , 13 , 5 , false ) ;
3881: LD_VAR 0 3
3885: PUSH
3886: LD_VAR 0 9
3890: ARRAY
3891: PPUSH
3892: LD_INT 86
3894: PPUSH
3895: LD_INT 13
3897: PPUSH
3898: LD_INT 5
3900: PPUSH
3901: LD_INT 0
3903: PPUSH
3904: CALL_OW 50
3908: GO 3878
3910: POP
3911: POP
// exit ;
3912: POP
3913: POP
3914: GO 3984
// end ; c = init_people_in_buildings ;
3916: LD_ADDR_VAR 0 8
3920: PUSH
3921: LD_VAR 0 2
3925: ST_TO_ADDR
// b = b + 1 ;
3926: LD_ADDR_VAR 0 7
3930: PUSH
3931: LD_VAR 0 7
3935: PUSH
3936: LD_INT 1
3938: PLUS
3939: ST_TO_ADDR
// end ; PlaceHumanInUnit ( human_list [ i ] , buildings_list [ b ] ) ;
3940: LD_VAR 0 3
3944: PUSH
3945: LD_VAR 0 6
3949: ARRAY
3950: PPUSH
3951: LD_VAR 0 1
3955: PUSH
3956: LD_VAR 0 7
3960: ARRAY
3961: PPUSH
3962: CALL_OW 52
// c = c + 1 ;
3966: LD_ADDR_VAR 0 8
3970: PUSH
3971: LD_VAR 0 8
3975: PUSH
3976: LD_INT 1
3978: PLUS
3979: ST_TO_ADDR
// end ;
3980: GO 3832
3982: POP
3983: POP
// end ;
3984: LD_VAR 0 5
3988: RET
// function ScanBuildings ; var side , i , temp_list , base , area ; begin
3989: LD_INT 0
3991: PPUSH
3992: PPUSH
3993: PPUSH
3994: PPUSH
3995: PPUSH
3996: PPUSH
// side = russians ;
3997: LD_ADDR_VAR 0 2
4001: PUSH
4002: LD_EXP 3
4006: ST_TO_ADDR
// for base in ai_bases do
4007: LD_ADDR_VAR 0 5
4011: PUSH
4012: LD_EXP 40
4016: PUSH
4017: FOR_IN
4018: IFFALSE 4385
// begin case base of 1 :
4020: LD_VAR 0 5
4024: PUSH
4025: LD_INT 1
4027: DOUBLE
4028: EQUAL
4029: IFTRUE 4033
4031: GO 4044
4033: POP
// area = rubase1 ; 2 :
4034: LD_ADDR_VAR 0 6
4038: PUSH
4039: LD_INT 1
4041: ST_TO_ADDR
4042: GO 4064
4044: LD_INT 2
4046: DOUBLE
4047: EQUAL
4048: IFTRUE 4052
4050: GO 4063
4052: POP
// area = rubase2 ; end ;
4053: LD_ADDR_VAR 0 6
4057: PUSH
4058: LD_INT 2
4060: ST_TO_ADDR
4061: GO 4064
4063: POP
// ai_all_buildings = Replace ( ai_all_buildings , base , FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_building ] , [ f_inarea , area ] ] ) ) ;
4064: LD_ADDR_EXP 27
4068: PUSH
4069: LD_EXP 27
4073: PPUSH
4074: LD_VAR 0 5
4078: PPUSH
4079: LD_INT 22
4081: PUSH
4082: LD_VAR 0 2
4086: PUSH
4087: EMPTY
4088: LIST
4089: LIST
4090: PUSH
4091: LD_INT 21
4093: PUSH
4094: LD_INT 3
4096: PUSH
4097: EMPTY
4098: LIST
4099: LIST
4100: PUSH
4101: LD_INT 95
4103: PUSH
4104: LD_VAR 0 6
4108: PUSH
4109: EMPTY
4110: LIST
4111: LIST
4112: PUSH
4113: EMPTY
4114: LIST
4115: LIST
4116: LIST
4117: PPUSH
4118: CALL_OW 69
4122: PPUSH
4123: CALL_OW 1
4127: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
4128: LD_ADDR_VAR 0 3
4132: PUSH
4133: LD_EXP 27
4137: PUSH
4138: LD_VAR 0 5
4142: ARRAY
4143: PUSH
4144: FOR_IN
4145: IFFALSE 4166
// UpdateBuildingBasicVariables ( base , i , true ) ;
4147: LD_VAR 0 5
4151: PPUSH
4152: LD_VAR 0 3
4156: PPUSH
4157: LD_INT 1
4159: PPUSH
4160: CALL 4392 0 3
4164: GO 4144
4166: POP
4167: POP
// temp_list = [ ] ;
4168: LD_ADDR_VAR 0 4
4172: PUSH
4173: EMPTY
4174: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
4175: LD_ADDR_VAR 0 3
4179: PUSH
4180: LD_EXP 27
4184: PUSH
4185: LD_VAR 0 5
4189: ARRAY
4190: PUSH
4191: FOR_IN
4192: IFFALSE 4295
// temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , GetBWeapon ( i ) ] ] ;
4194: LD_ADDR_VAR 0 4
4198: PUSH
4199: LD_VAR 0 4
4203: PUSH
4204: LD_VAR 0 3
4208: PPUSH
4209: CALL_OW 250
4213: PUSH
4214: LD_VAR 0 3
4218: PPUSH
4219: CALL_OW 251
4223: PUSH
4224: LD_VAR 0 3
4228: PPUSH
4229: CALL_OW 254
4233: PUSH
4234: LD_VAR 0 3
4238: PPUSH
4239: CALL_OW 266
4243: PUSH
4244: LD_VAR 0 3
4248: PPUSH
4249: LD_INT 1
4251: PPUSH
4252: CALL_OW 268
4256: PUSH
4257: LD_VAR 0 3
4261: PPUSH
4262: LD_INT 2
4264: PPUSH
4265: CALL_OW 268
4269: PUSH
4270: LD_VAR 0 3
4274: PPUSH
4275: CALL_OW 269
4279: PUSH
4280: EMPTY
4281: LIST
4282: LIST
4283: LIST
4284: LIST
4285: LIST
4286: LIST
4287: LIST
4288: PUSH
4289: EMPTY
4290: LIST
4291: ADD
4292: ST_TO_ADDR
4293: GO 4191
4295: POP
4296: POP
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
4297: LD_ADDR_EXP 21
4301: PUSH
4302: LD_EXP 21
4306: PPUSH
4307: LD_VAR 0 5
4311: PPUSH
4312: LD_VAR 0 4
4316: PPUSH
4317: CALL_OW 1
4321: ST_TO_ADDR
// SortBuildingLocationsListInCorrectOrder ( base ) ;
4322: LD_VAR 0 5
4326: PPUSH
4327: CALL 5294 0 1
// for i in ai_oil_mine [ base ] do
4331: LD_ADDR_VAR 0 3
4335: PUSH
4336: LD_EXP 33
4340: PUSH
4341: LD_VAR 0 5
4345: ARRAY
4346: PUSH
4347: FOR_IN
4348: IFFALSE 4381
// SetResourceVisibility ( GetX ( i ) , GetY ( i ) , side ) ;
4350: LD_VAR 0 3
4354: PPUSH
4355: CALL_OW 250
4359: PPUSH
4360: LD_VAR 0 3
4364: PPUSH
4365: CALL_OW 251
4369: PPUSH
4370: LD_VAR 0 2
4374: PPUSH
4375: CALL_OW 441
4379: GO 4347
4381: POP
4382: POP
// end ;
4383: GO 4017
4385: POP
4386: POP
// end ;
4387: LD_VAR 0 1
4391: RET
// export function UpdateBuildingBasicVariables ( base , un , add ) ; var temp_list ; begin
4392: LD_INT 0
4394: PPUSH
4395: PPUSH
// case GetBType ( un ) of b_depot , b_warehouse :
4396: LD_VAR 0 2
4400: PPUSH
4401: CALL_OW 266
4405: PUSH
4406: LD_INT 0
4408: DOUBLE
4409: EQUAL
4410: IFTRUE 4420
4412: LD_INT 1
4414: DOUBLE
4415: EQUAL
4416: IFTRUE 4420
4418: GO 4497
4420: POP
// if add then
4421: LD_VAR 0 3
4425: IFFALSE 4454
// ai_depot = Replace ( ai_depot , base , un ) else
4427: LD_ADDR_EXP 18
4431: PUSH
4432: LD_EXP 18
4436: PPUSH
4437: LD_VAR 0 1
4441: PPUSH
4442: LD_VAR 0 2
4446: PPUSH
4447: CALL_OW 1
4451: ST_TO_ADDR
4452: GO 4495
// if un = ai_depot [ base ] then
4454: LD_VAR 0 2
4458: PUSH
4459: LD_EXP 18
4463: PUSH
4464: LD_VAR 0 1
4468: ARRAY
4469: EQUAL
4470: IFFALSE 4495
// ai_depot = Replace ( ai_depot , base , 0 ) ; b_lab , b_lab_half , b_lab_full :
4472: LD_ADDR_EXP 18
4476: PUSH
4477: LD_EXP 18
4481: PPUSH
4482: LD_VAR 0 1
4486: PPUSH
4487: LD_INT 0
4489: PPUSH
4490: CALL_OW 1
4494: ST_TO_ADDR
4495: GO 5289
4497: LD_INT 6
4499: DOUBLE
4500: EQUAL
4501: IFTRUE 4517
4503: LD_INT 7
4505: DOUBLE
4506: EQUAL
4507: IFTRUE 4517
4509: LD_INT 8
4511: DOUBLE
4512: EQUAL
4513: IFTRUE 4517
4515: GO 4597
4517: POP
// begin if add then
4518: LD_VAR 0 3
4522: IFFALSE 4548
// temp_list = ai_labs [ base ] ^ un else
4524: LD_ADDR_VAR 0 5
4528: PUSH
4529: LD_EXP 19
4533: PUSH
4534: LD_VAR 0 1
4538: ARRAY
4539: PUSH
4540: LD_VAR 0 2
4544: ADD
4545: ST_TO_ADDR
4546: GO 4570
// temp_list = ai_labs [ base ] diff un ;
4548: LD_ADDR_VAR 0 5
4552: PUSH
4553: LD_EXP 19
4557: PUSH
4558: LD_VAR 0 1
4562: ARRAY
4563: PUSH
4564: LD_VAR 0 2
4568: DIFF
4569: ST_TO_ADDR
// ai_labs = Replace ( ai_labs , base , temp_list ) ;
4570: LD_ADDR_EXP 19
4574: PUSH
4575: LD_EXP 19
4579: PPUSH
4580: LD_VAR 0 1
4584: PPUSH
4585: LD_VAR 0 5
4589: PPUSH
4590: CALL_OW 1
4594: ST_TO_ADDR
// end ; b_factory , b_workshop :
4595: GO 5289
4597: LD_INT 3
4599: DOUBLE
4600: EQUAL
4601: IFTRUE 4611
4603: LD_INT 2
4605: DOUBLE
4606: EQUAL
4607: IFTRUE 4611
4609: GO 4691
4611: POP
// begin if add then
4612: LD_VAR 0 3
4616: IFFALSE 4642
// temp_list = ai_facts [ base ] ^ un else
4618: LD_ADDR_VAR 0 5
4622: PUSH
4623: LD_EXP 30
4627: PUSH
4628: LD_VAR 0 1
4632: ARRAY
4633: PUSH
4634: LD_VAR 0 2
4638: ADD
4639: ST_TO_ADDR
4640: GO 4664
// temp_list = ai_facts [ base ] diff un ;
4642: LD_ADDR_VAR 0 5
4646: PUSH
4647: LD_EXP 30
4651: PUSH
4652: LD_VAR 0 1
4656: ARRAY
4657: PUSH
4658: LD_VAR 0 2
4662: DIFF
4663: ST_TO_ADDR
// ai_facts = Replace ( ai_facts , base , temp_list ) ;
4664: LD_ADDR_EXP 30
4668: PUSH
4669: LD_EXP 30
4673: PPUSH
4674: LD_VAR 0 1
4678: PPUSH
4679: LD_VAR 0 5
4683: PPUSH
4684: CALL_OW 1
4688: ST_TO_ADDR
// end ; b_armoury , b_barracks :
4689: GO 5289
4691: LD_INT 4
4693: DOUBLE
4694: EQUAL
4695: IFTRUE 4705
4697: LD_INT 5
4699: DOUBLE
4700: EQUAL
4701: IFTRUE 4705
4703: GO 4785
4705: POP
// begin if add then
4706: LD_VAR 0 3
4710: IFFALSE 4736
// temp_list = ai_armouries [ base ] ^ un else
4712: LD_ADDR_VAR 0 5
4716: PUSH
4717: LD_EXP 31
4721: PUSH
4722: LD_VAR 0 1
4726: ARRAY
4727: PUSH
4728: LD_VAR 0 2
4732: ADD
4733: ST_TO_ADDR
4734: GO 4758
// temp_list = ai_armouries [ base ] diff un ;
4736: LD_ADDR_VAR 0 5
4740: PUSH
4741: LD_EXP 31
4745: PUSH
4746: LD_VAR 0 1
4750: ARRAY
4751: PUSH
4752: LD_VAR 0 2
4756: DIFF
4757: ST_TO_ADDR
// ai_armouries = Replace ( ai_armouries , base , temp_list ) ;
4758: LD_ADDR_EXP 31
4762: PUSH
4763: LD_EXP 31
4767: PPUSH
4768: LD_VAR 0 1
4772: PPUSH
4773: LD_VAR 0 5
4777: PPUSH
4778: CALL_OW 1
4782: ST_TO_ADDR
// end ; b_breastwork , b_bunker :
4783: GO 5289
4785: LD_INT 31
4787: DOUBLE
4788: EQUAL
4789: IFTRUE 4799
4791: LD_INT 32
4793: DOUBLE
4794: EQUAL
4795: IFTRUE 4799
4797: GO 4879
4799: POP
// begin if add then
4800: LD_VAR 0 3
4804: IFFALSE 4830
// temp_list = ai_bunkers [ base ] ^ un else
4806: LD_ADDR_VAR 0 5
4810: PUSH
4811: LD_EXP 32
4815: PUSH
4816: LD_VAR 0 1
4820: ARRAY
4821: PUSH
4822: LD_VAR 0 2
4826: ADD
4827: ST_TO_ADDR
4828: GO 4852
// temp_list = ai_bunkers [ base ] diff un ;
4830: LD_ADDR_VAR 0 5
4834: PUSH
4835: LD_EXP 32
4839: PUSH
4840: LD_VAR 0 1
4844: ARRAY
4845: PUSH
4846: LD_VAR 0 2
4850: DIFF
4851: ST_TO_ADDR
// ai_bunkers = Replace ( ai_bunkers , base , temp_list ) ;
4852: LD_ADDR_EXP 32
4856: PUSH
4857: LD_EXP 32
4861: PPUSH
4862: LD_VAR 0 1
4866: PPUSH
4867: LD_VAR 0 5
4871: PPUSH
4872: CALL_OW 1
4876: ST_TO_ADDR
// end ; b_turret :
4877: GO 5289
4879: LD_INT 33
4881: DOUBLE
4882: EQUAL
4883: IFTRUE 4887
4885: GO 4967
4887: POP
// begin if add then
4888: LD_VAR 0 3
4892: IFFALSE 4918
// temp_list = ai_turrets [ base ] ^ un else
4894: LD_ADDR_VAR 0 5
4898: PUSH
4899: LD_EXP 37
4903: PUSH
4904: LD_VAR 0 1
4908: ARRAY
4909: PUSH
4910: LD_VAR 0 2
4914: ADD
4915: ST_TO_ADDR
4916: GO 4940
// temp_list = ai_turrets [ base ] diff un ;
4918: LD_ADDR_VAR 0 5
4922: PUSH
4923: LD_EXP 37
4927: PUSH
4928: LD_VAR 0 1
4932: ARRAY
4933: PUSH
4934: LD_VAR 0 2
4938: DIFF
4939: ST_TO_ADDR
// ai_turrets = Replace ( ai_turrets , base , temp_list ) ;
4940: LD_ADDR_EXP 37
4944: PUSH
4945: LD_EXP 37
4949: PPUSH
4950: LD_VAR 0 1
4954: PPUSH
4955: LD_VAR 0 5
4959: PPUSH
4960: CALL_OW 1
4964: ST_TO_ADDR
// end ; b_oil_mine :
4965: GO 5289
4967: LD_INT 29
4969: DOUBLE
4970: EQUAL
4971: IFTRUE 4975
4973: GO 5052
4975: POP
// if add then
4976: LD_VAR 0 3
4980: IFFALSE 5009
// ai_oil_mine = Replace ( ai_oil_mine , base , un ) else
4982: LD_ADDR_EXP 33
4986: PUSH
4987: LD_EXP 33
4991: PPUSH
4992: LD_VAR 0 1
4996: PPUSH
4997: LD_VAR 0 2
5001: PPUSH
5002: CALL_OW 1
5006: ST_TO_ADDR
5007: GO 5050
// if un = ai_oil_mine [ base ] then
5009: LD_VAR 0 2
5013: PUSH
5014: LD_EXP 33
5018: PUSH
5019: LD_VAR 0 1
5023: ARRAY
5024: EQUAL
5025: IFFALSE 5050
// ai_oil_mine = Replace ( ai_oil_mine , base , 0 ) ; 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 :
5027: LD_ADDR_EXP 33
5031: PUSH
5032: LD_EXP 33
5036: PPUSH
5037: LD_VAR 0 1
5041: PPUSH
5042: LD_INT 0
5044: PPUSH
5045: CALL_OW 1
5049: ST_TO_ADDR
5050: GO 5289
5052: LD_INT 17
5054: DOUBLE
5055: EQUAL
5056: IFTRUE 5108
5058: LD_INT 19
5060: DOUBLE
5061: EQUAL
5062: IFTRUE 5108
5064: LD_INT 25
5066: DOUBLE
5067: EQUAL
5068: IFTRUE 5108
5070: LD_INT 24
5072: DOUBLE
5073: EQUAL
5074: IFTRUE 5108
5076: LD_INT 20
5078: DOUBLE
5079: EQUAL
5080: IFTRUE 5108
5082: LD_INT 18
5084: DOUBLE
5085: EQUAL
5086: IFTRUE 5108
5088: LD_INT 21
5090: DOUBLE
5091: EQUAL
5092: IFTRUE 5108
5094: LD_INT 16
5096: DOUBLE
5097: EQUAL
5098: IFTRUE 5108
5100: LD_INT 23
5102: DOUBLE
5103: EQUAL
5104: IFTRUE 5108
5106: GO 5188
5108: POP
// begin if add then
5109: LD_VAR 0 3
5113: IFFALSE 5139
// temp_list = ai_fact_extensions [ base ] ^ un else
5115: LD_ADDR_VAR 0 5
5119: PUSH
5120: LD_EXP 34
5124: PUSH
5125: LD_VAR 0 1
5129: ARRAY
5130: PUSH
5131: LD_VAR 0 2
5135: ADD
5136: ST_TO_ADDR
5137: GO 5161
// temp_list = ai_fact_extensions [ base ] diff un ;
5139: LD_ADDR_VAR 0 5
5143: PUSH
5144: LD_EXP 34
5148: PUSH
5149: LD_VAR 0 1
5153: ARRAY
5154: PUSH
5155: LD_VAR 0 2
5159: DIFF
5160: ST_TO_ADDR
// ai_fact_extensions = Replace ( ai_fact_extensions , base , temp_list ) ;
5161: LD_ADDR_EXP 34
5165: PUSH
5166: LD_EXP 34
5170: PPUSH
5171: LD_VAR 0 1
5175: PPUSH
5176: LD_VAR 0 5
5180: PPUSH
5181: CALL_OW 1
5185: ST_TO_ADDR
// end ; b_solar_power , b_oil_power , b_siberite_power :
5186: GO 5289
5188: LD_INT 27
5190: DOUBLE
5191: EQUAL
5192: IFTRUE 5208
5194: LD_INT 26
5196: DOUBLE
5197: EQUAL
5198: IFTRUE 5208
5200: LD_INT 28
5202: DOUBLE
5203: EQUAL
5204: IFTRUE 5208
5206: GO 5288
5208: POP
// begin if add then
5209: LD_VAR 0 3
5213: IFFALSE 5239
// temp_list = ai_power_plants [ base ] ^ un else
5215: LD_ADDR_VAR 0 5
5219: PUSH
5220: LD_EXP 20
5224: PUSH
5225: LD_VAR 0 1
5229: ARRAY
5230: PUSH
5231: LD_VAR 0 2
5235: ADD
5236: ST_TO_ADDR
5237: GO 5261
// temp_list = ai_power_plants [ base ] diff un ;
5239: LD_ADDR_VAR 0 5
5243: PUSH
5244: LD_EXP 20
5248: PUSH
5249: LD_VAR 0 1
5253: ARRAY
5254: PUSH
5255: LD_VAR 0 2
5259: DIFF
5260: ST_TO_ADDR
// ai_power_plants = Replace ( ai_power_plants , base , temp_list ) ;
5261: LD_ADDR_EXP 20
5265: PUSH
5266: LD_EXP 20
5270: PPUSH
5271: LD_VAR 0 1
5275: PPUSH
5276: LD_VAR 0 5
5280: PPUSH
5281: CALL_OW 1
5285: ST_TO_ADDR
// end ; end ;
5286: GO 5289
5288: POP
// end ;
5289: LD_VAR 0 4
5293: RET
// function SortBuildingLocationsListInCorrectOrder ( base ) ; var i , temp_list , p ; begin
5294: LD_INT 0
5296: PPUSH
5297: PPUSH
5298: PPUSH
5299: PPUSH
// temp_list = [ ] ;
5300: LD_ADDR_VAR 0 4
5304: PUSH
5305: EMPTY
5306: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
5307: LD_ADDR_VAR 0 3
5311: PUSH
5312: LD_EXP 21
5316: PUSH
5317: LD_VAR 0 1
5321: ARRAY
5322: PUSH
5323: FOR_IN
5324: IFFALSE 5697
// begin case i [ 4 ] of b_depot , b_warehouse :
5326: LD_VAR 0 3
5330: PUSH
5331: LD_INT 4
5333: ARRAY
5334: PUSH
5335: LD_INT 0
5337: DOUBLE
5338: EQUAL
5339: IFTRUE 5349
5341: LD_INT 1
5343: DOUBLE
5344: EQUAL
5345: IFTRUE 5349
5347: GO 5360
5349: POP
// p = 100 ; b_armoury , b_barracks , b_fort :
5350: LD_ADDR_VAR 0 5
5354: PUSH
5355: LD_INT 100
5357: ST_TO_ADDR
5358: GO 5679
5360: LD_INT 4
5362: DOUBLE
5363: EQUAL
5364: IFTRUE 5380
5366: LD_INT 5
5368: DOUBLE
5369: EQUAL
5370: IFTRUE 5380
5372: LD_INT 35
5374: DOUBLE
5375: EQUAL
5376: IFTRUE 5380
5378: GO 5391
5380: POP
// p = 99 ; b_solar_power , b_oil_power , b_siberite_power :
5381: LD_ADDR_VAR 0 5
5385: PUSH
5386: LD_INT 99
5388: ST_TO_ADDR
5389: GO 5679
5391: LD_INT 27
5393: DOUBLE
5394: EQUAL
5395: IFTRUE 5411
5397: LD_INT 26
5399: DOUBLE
5400: EQUAL
5401: IFTRUE 5411
5403: LD_INT 28
5405: DOUBLE
5406: EQUAL
5407: IFTRUE 5411
5409: GO 5422
5411: POP
// p = 98 ; b_breastwork :
5412: LD_ADDR_VAR 0 5
5416: PUSH
5417: LD_INT 98
5419: ST_TO_ADDR
5420: GO 5679
5422: LD_INT 31
5424: DOUBLE
5425: EQUAL
5426: IFTRUE 5430
5428: GO 5441
5430: POP
// p = 97 ; b_factory , b_workshop :
5431: LD_ADDR_VAR 0 5
5435: PUSH
5436: LD_INT 97
5438: ST_TO_ADDR
5439: GO 5679
5441: LD_INT 3
5443: DOUBLE
5444: EQUAL
5445: IFTRUE 5455
5447: LD_INT 2
5449: DOUBLE
5450: EQUAL
5451: IFTRUE 5455
5453: GO 5466
5455: 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 :
5456: LD_ADDR_VAR 0 5
5460: PUSH
5461: LD_INT 96
5463: ST_TO_ADDR
5464: GO 5679
5466: LD_INT 17
5468: DOUBLE
5469: EQUAL
5470: IFTRUE 5522
5472: LD_INT 19
5474: DOUBLE
5475: EQUAL
5476: IFTRUE 5522
5478: LD_INT 25
5480: DOUBLE
5481: EQUAL
5482: IFTRUE 5522
5484: LD_INT 24
5486: DOUBLE
5487: EQUAL
5488: IFTRUE 5522
5490: LD_INT 20
5492: DOUBLE
5493: EQUAL
5494: IFTRUE 5522
5496: LD_INT 18
5498: DOUBLE
5499: EQUAL
5500: IFTRUE 5522
5502: LD_INT 21
5504: DOUBLE
5505: EQUAL
5506: IFTRUE 5522
5508: LD_INT 16
5510: DOUBLE
5511: EQUAL
5512: IFTRUE 5522
5514: LD_INT 23
5516: DOUBLE
5517: EQUAL
5518: IFTRUE 5522
5520: GO 5533
5522: POP
// p = 95 ; b_bunker :
5523: LD_ADDR_VAR 0 5
5527: PUSH
5528: LD_INT 95
5530: ST_TO_ADDR
5531: GO 5679
5533: LD_INT 32
5535: DOUBLE
5536: EQUAL
5537: IFTRUE 5541
5539: GO 5552
5541: POP
// p = 94 ; b_control_tower :
5542: LD_ADDR_VAR 0 5
5546: PUSH
5547: LD_INT 94
5549: ST_TO_ADDR
5550: GO 5679
5552: LD_INT 36
5554: DOUBLE
5555: EQUAL
5556: IFTRUE 5560
5558: GO 5571
5560: POP
// p = 93 ; b_turret :
5561: LD_ADDR_VAR 0 5
5565: PUSH
5566: LD_INT 93
5568: ST_TO_ADDR
5569: GO 5679
5571: LD_INT 33
5573: DOUBLE
5574: EQUAL
5575: IFTRUE 5579
5577: GO 5590
5579: POP
// p = 92 ; b_lab , b_lab_half , b_lab_full :
5580: LD_ADDR_VAR 0 5
5584: PUSH
5585: LD_INT 92
5587: ST_TO_ADDR
5588: GO 5679
5590: LD_INT 6
5592: DOUBLE
5593: EQUAL
5594: IFTRUE 5610
5596: LD_INT 7
5598: DOUBLE
5599: EQUAL
5600: IFTRUE 5610
5602: LD_INT 8
5604: DOUBLE
5605: EQUAL
5606: IFTRUE 5610
5608: GO 5621
5610: POP
// p = 91 ; b_teleport :
5611: LD_ADDR_VAR 0 5
5615: PUSH
5616: LD_INT 91
5618: ST_TO_ADDR
5619: GO 5679
5621: LD_INT 34
5623: DOUBLE
5624: EQUAL
5625: IFTRUE 5629
5627: GO 5640
5629: POP
// p = 90 ; b_siberite_mine :
5630: LD_ADDR_VAR 0 5
5634: PUSH
5635: LD_INT 90
5637: ST_TO_ADDR
5638: GO 5679
5640: LD_INT 30
5642: DOUBLE
5643: EQUAL
5644: IFTRUE 5648
5646: GO 5659
5648: POP
// p = 89 ; b_oil_mine :
5649: LD_ADDR_VAR 0 5
5653: PUSH
5654: LD_INT 89
5656: ST_TO_ADDR
5657: GO 5679
5659: LD_INT 29
5661: DOUBLE
5662: EQUAL
5663: IFTRUE 5667
5665: GO 5678
5667: POP
// p = 88 ; end ;
5668: LD_ADDR_VAR 0 5
5672: PUSH
5673: LD_INT 88
5675: ST_TO_ADDR
5676: GO 5679
5678: POP
// temp_list = temp_list ^ p ;
5679: LD_ADDR_VAR 0 4
5683: PUSH
5684: LD_VAR 0 4
5688: PUSH
5689: LD_VAR 0 5
5693: ADD
5694: ST_TO_ADDR
// end ;
5695: GO 5323
5697: POP
5698: POP
// temp_list = SortListByListDesc ( ai_buildings_locations [ base ] , temp_list ) ;
5699: LD_ADDR_VAR 0 4
5703: PUSH
5704: LD_EXP 21
5708: PUSH
5709: LD_VAR 0 1
5713: ARRAY
5714: PPUSH
5715: LD_VAR 0 4
5719: PPUSH
5720: CALL_OW 77
5724: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
5725: LD_ADDR_EXP 21
5729: PUSH
5730: LD_EXP 21
5734: PPUSH
5735: LD_VAR 0 1
5739: PPUSH
5740: LD_VAR 0 4
5744: PPUSH
5745: CALL_OW 1
5749: ST_TO_ADDR
// end ;
5750: LD_VAR 0 2
5754: RET
// function PrepareComputerSides ; var i , temp_list , side , base , max , num , temp_list_2 ; begin
5755: LD_INT 0
5757: PPUSH
5758: PPUSH
5759: PPUSH
5760: PPUSH
5761: PPUSH
5762: PPUSH
5763: PPUSH
5764: PPUSH
// side = russians ;
5765: LD_ADDR_VAR 0 4
5769: PUSH
5770: LD_EXP 3
5774: ST_TO_ADDR
// for base in ai_bases do
5775: LD_ADDR_VAR 0 5
5779: PUSH
5780: LD_EXP 40
5784: PUSH
5785: FOR_IN
5786: IFFALSE 6617
// begin InitUc ;
5788: CALL_OW 18
// InitHc ;
5792: CALL_OW 19
// uc_side = side ;
5796: LD_ADDR_OWVAR 20
5800: PUSH
5801: LD_VAR 0 4
5805: ST_TO_ADDR
// case side of russians :
5806: LD_VAR 0 4
5810: PUSH
5811: LD_EXP 3
5815: DOUBLE
5816: EQUAL
5817: IFTRUE 5821
5819: GO 5832
5821: POP
// uc_nation = nation_russian ; end ;
5822: LD_ADDR_OWVAR 21
5826: PUSH
5827: LD_INT 3
5829: ST_TO_ADDR
5830: GO 5833
5832: POP
// if base = 2 then
5833: LD_VAR 0 5
5837: PUSH
5838: LD_INT 2
5840: EQUAL
5841: IFFALSE 5865
// num = ai_bunkers [ base ] - 1 else
5843: LD_ADDR_VAR 0 7
5847: PUSH
5848: LD_EXP 32
5852: PUSH
5853: LD_VAR 0 5
5857: ARRAY
5858: PUSH
5859: LD_INT 1
5861: MINUS
5862: ST_TO_ADDR
5863: GO 5897
// num = ai_bunkers [ base ] + 2 * ai_armouries [ base ] ;
5865: LD_ADDR_VAR 0 7
5869: PUSH
5870: LD_EXP 32
5874: PUSH
5875: LD_VAR 0 5
5879: ARRAY
5880: PUSH
5881: LD_INT 2
5883: PUSH
5884: LD_EXP 31
5888: PUSH
5889: LD_VAR 0 5
5893: ARRAY
5894: MUL
5895: PLUS
5896: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , CreateUnitsWithClass ( num , class_soldier , side ) ) ;
5897: LD_ADDR_EXP 13
5901: PUSH
5902: LD_EXP 13
5906: PPUSH
5907: LD_VAR 0 5
5911: PPUSH
5912: LD_VAR 0 7
5916: PPUSH
5917: LD_INT 1
5919: PPUSH
5920: LD_VAR 0 4
5924: PPUSH
5925: CALL 7077 0 3
5929: PPUSH
5930: CALL_OW 1
5934: ST_TO_ADDR
// num = 4 * ai_armouries [ base ] ;
5935: LD_ADDR_VAR 0 7
5939: PUSH
5940: LD_INT 4
5942: PUSH
5943: LD_EXP 31
5947: PUSH
5948: LD_VAR 0 5
5952: ARRAY
5953: MUL
5954: ST_TO_ADDR
// temp_list = ai_soldiers [ base ] ^ CreateUnitsWithClass ( num , class_bazooker , side ) ;
5955: LD_ADDR_VAR 0 3
5959: PUSH
5960: LD_EXP 13
5964: PUSH
5965: LD_VAR 0 5
5969: ARRAY
5970: PUSH
5971: LD_VAR 0 7
5975: PPUSH
5976: LD_INT 9
5978: PPUSH
5979: LD_VAR 0 4
5983: PPUSH
5984: CALL 7077 0 3
5988: ADD
5989: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
5990: LD_ADDR_EXP 13
5994: PUSH
5995: LD_EXP 13
5999: PPUSH
6000: LD_VAR 0 5
6004: PPUSH
6005: LD_VAR 0 3
6009: PPUSH
6010: CALL_OW 1
6014: ST_TO_ADDR
// if base = 2 then
6015: LD_VAR 0 5
6019: PUSH
6020: LD_INT 2
6022: EQUAL
6023: IFFALSE 6035
// num = 2 else
6025: LD_ADDR_VAR 0 7
6029: PUSH
6030: LD_INT 2
6032: ST_TO_ADDR
6033: GO 6065
// begin num = 4 + Rand ( 0 , 1 ) ;
6035: LD_ADDR_VAR 0 7
6039: PUSH
6040: LD_INT 4
6042: PUSH
6043: LD_INT 0
6045: PPUSH
6046: LD_INT 1
6048: PPUSH
6049: CALL_OW 12
6053: PLUS
6054: ST_TO_ADDR
// orig_num_engineers = num ;
6055: LD_ADDR_EXP 57
6059: PUSH
6060: LD_VAR 0 7
6064: ST_TO_ADDR
// end ; ai_engineers = Replace ( ai_engineers , base , CreateUnitsWithClass ( num , class_engineer , side ) ) ;
6065: LD_ADDR_EXP 14
6069: PUSH
6070: LD_EXP 14
6074: PPUSH
6075: LD_VAR 0 5
6079: PPUSH
6080: LD_VAR 0 7
6084: PPUSH
6085: LD_INT 2
6087: PPUSH
6088: LD_VAR 0 4
6092: PPUSH
6093: CALL 7077 0 3
6097: PPUSH
6098: CALL_OW 1
6102: ST_TO_ADDR
// temp_list = [ ] ;
6103: LD_ADDR_VAR 0 3
6107: PUSH
6108: EMPTY
6109: ST_TO_ADDR
// for i in ai_engineers [ base ] do
6110: LD_ADDR_VAR 0 2
6114: PUSH
6115: LD_EXP 14
6119: PUSH
6120: LD_VAR 0 5
6124: ARRAY
6125: PUSH
6126: FOR_IN
6127: IFFALSE 6155
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
6129: LD_ADDR_VAR 0 3
6133: PUSH
6134: LD_VAR 0 3
6138: PUSH
6139: LD_VAR 0 2
6143: PPUSH
6144: LD_INT 2
6146: PPUSH
6147: CALL_OW 259
6151: ADD
6152: ST_TO_ADDR
6153: GO 6126
6155: POP
6156: POP
// max = BestFromListByList ( temp_list , temp_list ) ;
6157: LD_ADDR_VAR 0 6
6161: PUSH
6162: LD_VAR 0 3
6166: PPUSH
6167: LD_VAR 0 3
6171: PPUSH
6172: CALL_OW 79
6176: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
6177: LD_ADDR_VAR 0 2
6181: PUSH
6182: LD_EXP 27
6186: PUSH
6187: LD_VAR 0 5
6191: ARRAY
6192: PUSH
6193: FOR_IN
6194: IFFALSE 6212
// SetBLevel ( i , max ) ;
6196: LD_VAR 0 2
6200: PPUSH
6201: LD_VAR 0 6
6205: PPUSH
6206: CALL_OW 241
6210: GO 6193
6212: POP
6213: POP
// if base = 2 then
6214: LD_VAR 0 5
6218: PUSH
6219: LD_INT 2
6221: EQUAL
6222: IFFALSE 6234
// num = 0 else
6224: LD_ADDR_VAR 0 7
6228: PUSH
6229: LD_INT 0
6231: ST_TO_ADDR
6232: GO 6252
// begin num = 8 ;
6234: LD_ADDR_VAR 0 7
6238: PUSH
6239: LD_INT 8
6241: ST_TO_ADDR
// orig_num_mechanics = num ;
6242: LD_ADDR_EXP 59
6246: PUSH
6247: LD_VAR 0 7
6251: ST_TO_ADDR
// end ; ai_mechanics_defend = Replace ( ai_mechanics_defend , base , CreateUnitsWithClass ( num , class_mechanic , side ) ) ;
6252: LD_ADDR_EXP 15
6256: PUSH
6257: LD_EXP 15
6261: PPUSH
6262: LD_VAR 0 5
6266: PPUSH
6267: LD_VAR 0 7
6271: PPUSH
6272: LD_INT 3
6274: PPUSH
6275: LD_VAR 0 4
6279: PPUSH
6280: CALL 7077 0 3
6284: PPUSH
6285: CALL_OW 1
6289: ST_TO_ADDR
// if base = 2 then
6290: LD_VAR 0 5
6294: PUSH
6295: LD_INT 2
6297: EQUAL
6298: IFFALSE 6310
// num = 0 else
6300: LD_ADDR_VAR 0 7
6304: PUSH
6305: LD_INT 0
6307: ST_TO_ADDR
6308: GO 6340
// begin num = 7 + Rand ( 0 , 1 ) ;
6310: LD_ADDR_VAR 0 7
6314: PUSH
6315: LD_INT 7
6317: PUSH
6318: LD_INT 0
6320: PPUSH
6321: LD_INT 1
6323: PPUSH
6324: CALL_OW 12
6328: PLUS
6329: ST_TO_ADDR
// orig_num_scientists = num ;
6330: LD_ADDR_EXP 60
6334: PUSH
6335: LD_VAR 0 7
6339: ST_TO_ADDR
// end ; ai_scientists = Replace ( ai_scientists , base , CreateUnitsWithClass ( num , class_scientistic , side ) ) ;
6340: LD_ADDR_EXP 16
6344: PUSH
6345: LD_EXP 16
6349: PPUSH
6350: LD_VAR 0 5
6354: PPUSH
6355: LD_VAR 0 7
6359: PPUSH
6360: LD_INT 4
6362: PPUSH
6363: LD_VAR 0 4
6367: PPUSH
6368: CALL 7077 0 3
6372: PPUSH
6373: CALL_OW 1
6377: ST_TO_ADDR
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_cans , 300 ) ;
6378: LD_EXP 18
6382: PUSH
6383: LD_VAR 0 5
6387: ARRAY
6388: PPUSH
6389: CALL_OW 274
6393: PPUSH
6394: LD_INT 1
6396: PPUSH
6397: LD_INT 300
6399: PPUSH
6400: CALL_OW 277
// SetResourceType ( GetBase ( ai_depot [ base ] ) , mat_oil , 300 ) ;
6404: LD_EXP 18
6408: PUSH
6409: LD_VAR 0 5
6413: ARRAY
6414: PPUSH
6415: CALL_OW 274
6419: PPUSH
6420: LD_INT 2
6422: PPUSH
6423: LD_INT 300
6425: PPUSH
6426: CALL_OW 277
// if base = 2 then
6430: LD_VAR 0 5
6434: PUSH
6435: LD_INT 2
6437: EQUAL
6438: IFFALSE 6467
// num = [ 1 , 1 , 2 ] [ difficulty ] else
6440: LD_ADDR_VAR 0 7
6444: PUSH
6445: LD_INT 1
6447: PUSH
6448: LD_INT 1
6450: PUSH
6451: LD_INT 2
6453: PUSH
6454: EMPTY
6455: LIST
6456: LIST
6457: LIST
6458: PUSH
6459: LD_OWVAR 67
6463: ARRAY
6464: ST_TO_ADDR
6465: GO 6502
// begin num = [ 2 , 3 , 4 ] [ difficulty ] ;
6467: LD_ADDR_VAR 0 7
6471: PUSH
6472: LD_INT 2
6474: PUSH
6475: LD_INT 3
6477: PUSH
6478: LD_INT 4
6480: PUSH
6481: EMPTY
6482: LIST
6483: LIST
6484: LIST
6485: PUSH
6486: LD_OWVAR 67
6490: ARRAY
6491: ST_TO_ADDR
// orig_num_apemen_engineers = num ;
6492: LD_ADDR_EXP 58
6496: PUSH
6497: LD_VAR 0 7
6501: ST_TO_ADDR
// end ; ai_apemen_engineers = Replace ( ai_apemen_engineers , base , CreateApemenWithClass ( num , class_apeman_engineer , side ) ) ;
6502: LD_ADDR_EXP 44
6506: PUSH
6507: LD_EXP 44
6511: PPUSH
6512: LD_VAR 0 5
6516: PPUSH
6517: LD_VAR 0 7
6521: PPUSH
6522: LD_INT 16
6524: PPUSH
6525: LD_VAR 0 4
6529: PPUSH
6530: CALL 7265 0 3
6534: PPUSH
6535: CALL_OW 1
6539: ST_TO_ADDR
// if base = 1 then
6540: LD_VAR 0 5
6544: PUSH
6545: LD_INT 1
6547: EQUAL
6548: IFFALSE 6615
// begin vc_chassis = ru_medium_tracked ;
6550: LD_ADDR_OWVAR 37
6554: PUSH
6555: LD_INT 22
6557: ST_TO_ADDR
// vc_engine = engine_combustion ;
6558: LD_ADDR_OWVAR 39
6562: PUSH
6563: LD_INT 1
6565: ST_TO_ADDR
// vc_control = control_computer ;
6566: LD_ADDR_OWVAR 38
6570: PUSH
6571: LD_INT 3
6573: ST_TO_ADDR
// vc_weapon = ru_cargo_bay ;
6574: LD_ADDR_OWVAR 40
6578: PUSH
6579: LD_INT 51
6581: ST_TO_ADDR
// uc_nation = nation_russian ;
6582: LD_ADDR_OWVAR 21
6586: PUSH
6587: LD_INT 3
6589: ST_TO_ADDR
// ai_cargo_bay = Replace ( ai_cargo_bay , base , CreateVehicle ) ;
6590: LD_ADDR_EXP 42
6594: PUSH
6595: LD_EXP 42
6599: PPUSH
6600: LD_VAR 0 5
6604: PPUSH
6605: CALL_OW 45
6609: PPUSH
6610: CALL_OW 1
6614: ST_TO_ADDR
// end ; end ;
6615: GO 5785
6617: POP
6618: POP
// temp_list = NewCharacter ( Xavier ) ^ ai_soldiers [ 2 ] ;
6619: LD_ADDR_VAR 0 3
6623: PUSH
6624: LD_STRING Xavier
6626: PPUSH
6627: CALL_OW 25
6631: PUSH
6632: LD_EXP 13
6636: PUSH
6637: LD_INT 2
6639: ARRAY
6640: ADD
6641: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , 2 , temp_list ) ;
6642: LD_ADDR_EXP 13
6646: PUSH
6647: LD_EXP 13
6651: PPUSH
6652: LD_INT 2
6654: PPUSH
6655: LD_VAR 0 3
6659: PPUSH
6660: CALL_OW 1
6664: ST_TO_ADDR
// for base in ai_bases do
6665: LD_ADDR_VAR 0 5
6669: PUSH
6670: LD_EXP 40
6674: PUSH
6675: FOR_IN
6676: IFFALSE 6747
// if ai_cargo_bay [ base ] > 0 then
6678: LD_EXP 42
6682: PUSH
6683: LD_VAR 0 5
6687: ARRAY
6688: PUSH
6689: LD_INT 0
6691: GREATER
6692: IFFALSE 6745
// PlaceUnitXYR ( ai_cargo_bay [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] , 7 , false ) ;
6694: LD_EXP 42
6698: PUSH
6699: LD_VAR 0 5
6703: ARRAY
6704: PPUSH
6705: LD_EXP 24
6709: PUSH
6710: LD_VAR 0 5
6714: ARRAY
6715: PUSH
6716: LD_INT 1
6718: ARRAY
6719: PPUSH
6720: LD_EXP 24
6724: PUSH
6725: LD_VAR 0 5
6729: ARRAY
6730: PUSH
6731: LD_INT 2
6733: ARRAY
6734: PPUSH
6735: LD_INT 7
6737: PPUSH
6738: LD_INT 0
6740: PPUSH
6741: CALL_OW 50
6745: GO 6675
6747: POP
6748: POP
// for base in ai_bases do
6749: LD_ADDR_VAR 0 5
6753: PUSH
6754: LD_EXP 40
6758: PUSH
6759: FOR_IN
6760: IFFALSE 6910
// begin PlaceComputerUnits ( base , ai_soldiers [ base ] , ai_armouries [ base ] ) ;
6762: LD_VAR 0 5
6766: PPUSH
6767: LD_EXP 13
6771: PUSH
6772: LD_VAR 0 5
6776: ARRAY
6777: PPUSH
6778: LD_EXP 31
6782: PUSH
6783: LD_VAR 0 5
6787: ARRAY
6788: PPUSH
6789: CALL 7441 0 3
// PlaceComputerUnits ( base , ai_engineers [ base ] , ai_depot [ base ] ) ;
6793: LD_VAR 0 5
6797: PPUSH
6798: LD_EXP 14
6802: PUSH
6803: LD_VAR 0 5
6807: ARRAY
6808: PPUSH
6809: LD_EXP 18
6813: PUSH
6814: LD_VAR 0 5
6818: ARRAY
6819: PPUSH
6820: CALL 7441 0 3
// PlaceComputerUnits ( base , ai_mechanics_defend [ base ] , ai_facts [ base ] ) ;
6824: LD_VAR 0 5
6828: PPUSH
6829: LD_EXP 15
6833: PUSH
6834: LD_VAR 0 5
6838: ARRAY
6839: PPUSH
6840: LD_EXP 30
6844: PUSH
6845: LD_VAR 0 5
6849: ARRAY
6850: PPUSH
6851: CALL 7441 0 3
// PlaceComputerUnits ( base , ai_scientists [ base ] , ai_labs [ base ] ) ;
6855: LD_VAR 0 5
6859: PPUSH
6860: LD_EXP 16
6864: PUSH
6865: LD_VAR 0 5
6869: ARRAY
6870: PPUSH
6871: LD_EXP 19
6875: PUSH
6876: LD_VAR 0 5
6880: ARRAY
6881: PPUSH
6882: CALL 7441 0 3
// PlaceComputerUnits ( base , ai_apemen_engineers [ base ] , [ ] ) ;
6886: LD_VAR 0 5
6890: PPUSH
6891: LD_EXP 44
6895: PUSH
6896: LD_VAR 0 5
6900: ARRAY
6901: PPUSH
6902: EMPTY
6903: PPUSH
6904: CALL 7441 0 3
// end ;
6908: GO 6759
6910: POP
6911: POP
// if difficulty >= 2 then
6912: LD_OWVAR 67
6916: PUSH
6917: LD_INT 2
6919: GREATEREQUAL
6920: IFFALSE 6937
// SetTech ( tech_comp1 , russians , state_researched ) ;
6922: LD_INT 57
6924: PPUSH
6925: LD_EXP 3
6929: PPUSH
6930: LD_INT 2
6932: PPUSH
6933: CALL_OW 322
// if difficulty = 3 then
6937: LD_OWVAR 67
6941: PUSH
6942: LD_INT 3
6944: EQUAL
6945: IFFALSE 6962
// SetTech ( tech_comp2 , russians , state_researched ) ;
6947: LD_INT 58
6949: PPUSH
6950: LD_EXP 3
6954: PPUSH
6955: LD_INT 2
6957: PPUSH
6958: CALL_OW 322
// Burlak = NewCharacter ( Burlak ) ;
6962: LD_ADDR_EXP 11
6966: PUSH
6967: LD_STRING Burlak
6969: PPUSH
6970: CALL_OW 25
6974: ST_TO_ADDR
// Yashin = NewCharacter ( Yashin ) ;
6975: LD_ADDR_EXP 12
6979: PUSH
6980: LD_STRING Yashin
6982: PPUSH
6983: CALL_OW 25
6987: ST_TO_ADDR
// SetSide ( Yashin , russians_alt ) ;
6988: LD_EXP 12
6992: PPUSH
6993: LD_EXP 5
6997: PPUSH
6998: CALL_OW 235
// for base in ai_bases do
7002: LD_ADDR_VAR 0 5
7006: PUSH
7007: LD_EXP 40
7011: PUSH
7012: FOR_IN
7013: IFFALSE 7070
// begin ResetVehicleAttackDelay ( base ) ;
7015: LD_VAR 0 5
7019: PPUSH
7020: CALL 7645 0 1
// ResetHumanAttackDelay ( base ) ;
7024: LD_VAR 0 5
7028: PPUSH
7029: CALL 7678 0 1
// ai_human_attack_delay = Replace ( ai_human_attack_delay , base , ai_human_attack_delay [ base ] div 2 ) ;
7033: LD_ADDR_EXP 49
7037: PUSH
7038: LD_EXP 49
7042: PPUSH
7043: LD_VAR 0 5
7047: PPUSH
7048: LD_EXP 49
7052: PUSH
7053: LD_VAR 0 5
7057: ARRAY
7058: PUSH
7059: LD_INT 2
7061: DIV
7062: PPUSH
7063: CALL_OW 1
7067: ST_TO_ADDR
// end ;
7068: GO 7012
7070: POP
7071: POP
// end ;
7072: LD_VAR 0 1
7076: RET
// export function CreateUnitsWithClass ( num_units , un_class , side ) ; var i , overskill ; begin
7077: LD_INT 0
7079: PPUSH
7080: PPUSH
7081: PPUSH
// result = [ ] ;
7082: LD_ADDR_VAR 0 4
7086: PUSH
7087: EMPTY
7088: ST_TO_ADDR
// InitUc ;
7089: CALL_OW 18
// InitHc ;
7093: CALL_OW 19
// case side of russians :
7097: LD_VAR 0 3
7101: PUSH
7102: LD_EXP 3
7106: DOUBLE
7107: EQUAL
7108: IFTRUE 7112
7110: GO 7123
7112: POP
// begin uc_nation = nation_russian ;
7113: LD_ADDR_OWVAR 21
7117: PUSH
7118: LD_INT 3
7120: ST_TO_ADDR
// end ; you :
7121: GO 7145
7123: LD_EXP 2
7127: DOUBLE
7128: EQUAL
7129: IFTRUE 7133
7131: GO 7144
7133: POP
// begin uc_nation = nation_arabian ;
7134: LD_ADDR_OWVAR 21
7138: PUSH
7139: LD_INT 2
7141: ST_TO_ADDR
// end ; end ;
7142: GO 7145
7144: POP
// uc_side = side ;
7145: LD_ADDR_OWVAR 20
7149: PUSH
7150: LD_VAR 0 3
7154: ST_TO_ADDR
// overskill = difficulty + 3 ;
7155: LD_ADDR_VAR 0 6
7159: PUSH
7160: LD_OWVAR 67
7164: PUSH
7165: LD_INT 3
7167: PLUS
7168: ST_TO_ADDR
// for i = 1 to num_units do
7169: LD_ADDR_VAR 0 5
7173: PUSH
7174: DOUBLE
7175: LD_INT 1
7177: DEC
7178: ST_TO_ADDR
7179: LD_VAR 0 1
7183: PUSH
7184: FOR_TO
7185: IFFALSE 7258
// begin if Rand ( 1 , 3 ) = 1 then
7187: LD_INT 1
7189: PPUSH
7190: LD_INT 3
7192: PPUSH
7193: CALL_OW 12
7197: PUSH
7198: LD_INT 1
7200: EQUAL
7201: IFFALSE 7223
// PrepareHuman ( false , un_class , - overskill ) else
7203: LD_INT 0
7205: PPUSH
7206: LD_VAR 0 2
7210: PPUSH
7211: LD_VAR 0 6
7215: NEG
7216: PPUSH
7217: CALL_OW 380
7221: GO 7240
// PrepareHuman ( false , un_class , overskill ) ;
7223: LD_INT 0
7225: PPUSH
7226: LD_VAR 0 2
7230: PPUSH
7231: LD_VAR 0 6
7235: PPUSH
7236: CALL_OW 380
// result = result ^ CreateHuman ;
7240: LD_ADDR_VAR 0 4
7244: PUSH
7245: LD_VAR 0 4
7249: PUSH
7250: CALL_OW 44
7254: ADD
7255: ST_TO_ADDR
// end ;
7256: GO 7184
7258: POP
7259: POP
// end ;
7260: LD_VAR 0 4
7264: RET
// export function CreateApemenWithClass ( num_units , un_class , side ) ; var i ; begin
7265: LD_INT 0
7267: PPUSH
7268: PPUSH
// result = [ ] ;
7269: LD_ADDR_VAR 0 4
7273: PUSH
7274: EMPTY
7275: ST_TO_ADDR
// InitUc ;
7276: CALL_OW 18
// InitHc ;
7280: CALL_OW 19
// uc_side = side ;
7284: LD_ADDR_OWVAR 20
7288: PUSH
7289: LD_VAR 0 3
7293: ST_TO_ADDR
// uc_nation = nation_nature ;
7294: LD_ADDR_OWVAR 21
7298: PUSH
7299: LD_INT 0
7301: ST_TO_ADDR
// hc_class = un_class ;
7302: LD_ADDR_OWVAR 28
7306: PUSH
7307: LD_VAR 0 2
7311: ST_TO_ADDR
// for i = 1 to num_units do
7312: LD_ADDR_VAR 0 5
7316: PUSH
7317: DOUBLE
7318: LD_INT 1
7320: DEC
7321: ST_TO_ADDR
7322: LD_VAR 0 1
7326: PUSH
7327: FOR_TO
7328: IFFALSE 7434
// begin hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
7330: LD_ADDR_OWVAR 29
7334: PUSH
7335: LD_INT 11
7337: PPUSH
7338: LD_INT 13
7340: PPUSH
7341: CALL_OW 12
7345: PUSH
7346: LD_INT 10
7348: PPUSH
7349: LD_INT 11
7351: PPUSH
7352: CALL_OW 12
7356: PUSH
7357: EMPTY
7358: LIST
7359: LIST
7360: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
7361: LD_ADDR_OWVAR 27
7365: PUSH
7366: LD_INT 1
7368: PPUSH
7369: LD_INT 2
7371: PPUSH
7372: CALL_OW 12
7376: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 1 ) , Rand ( 0 , 1 ) , 0 , 0 ] ;
7377: LD_ADDR_OWVAR 31
7381: PUSH
7382: LD_INT 0
7384: PPUSH
7385: LD_INT 1
7387: PPUSH
7388: CALL_OW 12
7392: PUSH
7393: LD_INT 0
7395: PPUSH
7396: LD_INT 1
7398: PPUSH
7399: CALL_OW 12
7403: PUSH
7404: LD_INT 0
7406: PUSH
7407: LD_INT 0
7409: PUSH
7410: EMPTY
7411: LIST
7412: LIST
7413: LIST
7414: LIST
7415: ST_TO_ADDR
// result = result ^ CreateHuman ;
7416: LD_ADDR_VAR 0 4
7420: PUSH
7421: LD_VAR 0 4
7425: PUSH
7426: CALL_OW 44
7430: ADD
7431: ST_TO_ADDR
// end ;
7432: GO 7327
7434: POP
7435: POP
// end ;
7436: LD_VAR 0 4
7440: RET
// function PlaceComputerUnits ( base , un_list , buildings_list ) ; var num , i , b ; begin
7441: LD_INT 0
7443: PPUSH
7444: PPUSH
7445: PPUSH
7446: PPUSH
// num = 1 ;
7447: LD_ADDR_VAR 0 5
7451: PUSH
7452: LD_INT 1
7454: ST_TO_ADDR
// for b in buildings_list do
7455: LD_ADDR_VAR 0 7
7459: PUSH
7460: LD_VAR 0 3
7464: PUSH
7465: FOR_IN
7466: IFFALSE 7563
// begin if num > un_list then
7468: LD_VAR 0 5
7472: PUSH
7473: LD_VAR 0 2
7477: GREATER
7478: IFFALSE 7482
// break ;
7480: GO 7563
// for i = UnitsInside ( b ) + 1 to 6 do
7482: LD_ADDR_VAR 0 6
7486: PUSH
7487: DOUBLE
7488: LD_VAR 0 7
7492: PPUSH
7493: CALL_OW 313
7497: PUSH
7498: LD_INT 1
7500: PLUS
7501: DEC
7502: ST_TO_ADDR
7503: LD_INT 6
7505: PUSH
7506: FOR_TO
7507: IFFALSE 7559
// begin if num > un_list then
7509: LD_VAR 0 5
7513: PUSH
7514: LD_VAR 0 2
7518: GREATER
7519: IFFALSE 7523
// break ;
7521: GO 7559
// PlaceHumanInUnit ( un_list [ num ] , b ) ;
7523: LD_VAR 0 2
7527: PUSH
7528: LD_VAR 0 5
7532: ARRAY
7533: PPUSH
7534: LD_VAR 0 7
7538: PPUSH
7539: CALL_OW 52
// num = num + 1 ;
7543: LD_ADDR_VAR 0 5
7547: PUSH
7548: LD_VAR 0 5
7552: PUSH
7553: LD_INT 1
7555: PLUS
7556: ST_TO_ADDR
// end ;
7557: GO 7506
7559: POP
7560: POP
// end ;
7561: GO 7465
7563: POP
7564: POP
// for i = num to un_list do
7565: LD_ADDR_VAR 0 6
7569: PUSH
7570: DOUBLE
7571: LD_VAR 0 5
7575: DEC
7576: ST_TO_ADDR
7577: LD_VAR 0 2
7581: PUSH
7582: FOR_TO
7583: IFFALSE 7638
// PlaceUnitXYR ( un_list [ i ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] , 7 , false ) ;
7585: LD_VAR 0 2
7589: PUSH
7590: LD_VAR 0 6
7594: ARRAY
7595: PPUSH
7596: LD_EXP 24
7600: PUSH
7601: LD_VAR 0 1
7605: ARRAY
7606: PUSH
7607: LD_INT 1
7609: ARRAY
7610: PPUSH
7611: LD_EXP 24
7615: PUSH
7616: LD_VAR 0 1
7620: ARRAY
7621: PUSH
7622: LD_INT 2
7624: ARRAY
7625: PPUSH
7626: LD_INT 7
7628: PPUSH
7629: LD_INT 0
7631: PPUSH
7632: CALL_OW 50
7636: GO 7582
7638: POP
7639: POP
// end ;
7640: LD_VAR 0 4
7644: RET
// export function ResetVehicleAttackDelay ( base ) ; begin
7645: LD_INT 0
7647: PPUSH
// ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , base , CalculateAttackDelay ) ;
7648: LD_ADDR_EXP 39
7652: PUSH
7653: LD_EXP 39
7657: PPUSH
7658: LD_VAR 0 1
7662: PPUSH
7663: CALL 7711 0 0
7667: PPUSH
7668: CALL_OW 1
7672: ST_TO_ADDR
// end ;
7673: LD_VAR 0 2
7677: RET
// export function ResetHumanAttackDelay ( base ) ; begin
7678: LD_INT 0
7680: PPUSH
// ai_human_attack_delay = Replace ( ai_human_attack_delay , base , CalculateAttackDelay ) ;
7681: LD_ADDR_EXP 49
7685: PUSH
7686: LD_EXP 49
7690: PPUSH
7691: LD_VAR 0 1
7695: PPUSH
7696: CALL 7711 0 0
7700: PPUSH
7701: CALL_OW 1
7705: ST_TO_ADDR
// end ;
7706: LD_VAR 0 2
7710: RET
// function CalculateAttackDelay ; var extra ; begin
7711: LD_INT 0
7713: PPUSH
7714: PPUSH
// extra = 3 3$0 - 3 3$0 * 1 / [ 50 50$0 , 40 40$0 , 35 35$0 ] [ difficulty ] * tick ;
7715: LD_ADDR_VAR 0 2
7719: PUSH
7720: LD_INT 6300
7722: PUSH
7723: LD_INT 6300
7725: PUSH
7726: LD_INT 1
7728: MUL
7729: PUSH
7730: LD_INT 105000
7732: PUSH
7733: LD_INT 84000
7735: PUSH
7736: LD_INT 73500
7738: PUSH
7739: EMPTY
7740: LIST
7741: LIST
7742: LIST
7743: PUSH
7744: LD_OWVAR 67
7748: ARRAY
7749: DIVREAL
7750: PUSH
7751: LD_OWVAR 1
7755: MUL
7756: MINUS
7757: ST_TO_ADDR
// if extra < 0 then
7758: LD_VAR 0 2
7762: PUSH
7763: LD_INT 0
7765: LESS
7766: IFFALSE 7776
// extra = 0 ;
7768: LD_ADDR_VAR 0 2
7772: PUSH
7773: LD_INT 0
7775: ST_TO_ADDR
// result = Rand ( 5 5$30 , 6 6$30 ) - 1 1$0 * difficulty + extra ;
7776: LD_ADDR_VAR 0 1
7780: PUSH
7781: LD_INT 11550
7783: PPUSH
7784: LD_INT 13650
7786: PPUSH
7787: CALL_OW 12
7791: PUSH
7792: LD_INT 2100
7794: PUSH
7795: LD_OWVAR 67
7799: MUL
7800: MINUS
7801: PUSH
7802: LD_VAR 0 2
7806: PLUS
7807: ST_TO_ADDR
// end ;
7808: LD_VAR 0 1
7812: RET
// function Action ; var heavy_gun , temp_list , count , i ; begin
7813: LD_INT 0
7815: PPUSH
7816: PPUSH
7817: PPUSH
7818: PPUSH
7819: PPUSH
// for i in FilterAllUnits ( [ f_side , nature ] ) do
7820: LD_ADDR_VAR 0 5
7824: PUSH
7825: LD_INT 22
7827: PUSH
7828: LD_EXP 4
7832: PUSH
7833: EMPTY
7834: LIST
7835: LIST
7836: PPUSH
7837: CALL_OW 69
7841: PUSH
7842: FOR_IN
7843: IFFALSE 7856
// ComStand ( i ) ;
7845: LD_VAR 0 5
7849: PPUSH
7850: CALL_OW 165
7854: GO 7842
7856: POP
7857: POP
// InGameOn ;
7858: CALL_OW 8
// ExclusiveOff ;
7862: CALL_OW 5
// SetDir ( heike_vehicle , 2 ) ;
7866: LD_EXP 63
7870: PPUSH
7871: LD_INT 2
7873: PPUSH
7874: CALL_OW 233
// PlaceUnitXY ( heike_vehicle , 5 , 4 , false ) ;
7878: LD_EXP 63
7882: PPUSH
7883: LD_INT 5
7885: PPUSH
7886: LD_INT 4
7888: PPUSH
7889: LD_INT 0
7891: PPUSH
7892: CALL_OW 48
// CenterNowOnUnits ( heike_vehicle ) ;
7896: LD_EXP 63
7900: PPUSH
7901: CALL_OW 87
// ComMoveXY ( heike_vehicle , 19 , 15 ) ;
7905: LD_EXP 63
7909: PPUSH
7910: LD_INT 19
7912: PPUSH
7913: LD_INT 15
7915: PPUSH
7916: CALL_OW 111
// AddComMoveXY ( heike_vehicle , 78 , 11 ) ;
7920: LD_EXP 63
7924: PPUSH
7925: LD_INT 78
7927: PPUSH
7928: LD_INT 11
7930: PPUSH
7931: CALL_OW 171
// InitUc ;
7935: CALL_OW 18
// InitVc ;
7939: CALL_OW 20
// uc_side = russians ;
7943: LD_ADDR_OWVAR 20
7947: PUSH
7948: LD_EXP 3
7952: ST_TO_ADDR
// uc_nation = nation_russian ;
7953: LD_ADDR_OWVAR 21
7957: PUSH
7958: LD_INT 3
7960: ST_TO_ADDR
// vc_chassis = ru_heavy_wheeled ;
7961: LD_ADDR_OWVAR 37
7965: PUSH
7966: LD_INT 23
7968: ST_TO_ADDR
// vc_weapon = ru_heavy_gun ;
7969: LD_ADDR_OWVAR 40
7973: PUSH
7974: LD_INT 46
7976: ST_TO_ADDR
// vc_control = control_computer ;
7977: LD_ADDR_OWVAR 38
7981: PUSH
7982: LD_INT 3
7984: ST_TO_ADDR
// vc_engine = engine_combustion ;
7985: LD_ADDR_OWVAR 39
7989: PUSH
7990: LD_INT 1
7992: ST_TO_ADDR
// heavy_gun = CreateVehicle ;
7993: LD_ADDR_VAR 0 2
7997: PUSH
7998: CALL_OW 45
8002: ST_TO_ADDR
// SetDir ( heavy_gun , 0 ) ;
8003: LD_VAR 0 2
8007: PPUSH
8008: LD_INT 0
8010: PPUSH
8011: CALL_OW 233
// PlaceUnitXY ( heavy_gun , 35 , 26 , false ) ;
8015: LD_VAR 0 2
8019: PPUSH
8020: LD_INT 35
8022: PPUSH
8023: LD_INT 26
8025: PPUSH
8026: LD_INT 0
8028: PPUSH
8029: CALL_OW 48
// ComStand ( heavy_gun ) ;
8033: LD_VAR 0 2
8037: PPUSH
8038: CALL_OW 165
// repeat wait ( 0 0$0.2 ) ;
8042: LD_INT 7
8044: PPUSH
8045: CALL_OW 67
// until GetDistUnits ( heavy_gun , heike_vehicle ) <= 12 ;
8049: LD_VAR 0 2
8053: PPUSH
8054: LD_EXP 63
8058: PPUSH
8059: CALL_OW 296
8063: PUSH
8064: LD_INT 12
8066: LESSEQUAL
8067: IFFALSE 8042
// CenterOnUnits ( heike_vehicle ) ;
8069: LD_EXP 63
8073: PPUSH
8074: CALL_OW 85
// ComAttackUnit ( heavy_gun , heike_vehicle ) ;
8078: LD_VAR 0 2
8082: PPUSH
8083: LD_EXP 63
8087: PPUSH
8088: CALL_OW 115
// repeat wait ( 1 ) ;
8092: LD_INT 1
8094: PPUSH
8095: CALL_OW 67
// until ContactTime ( [ you , russians ] ) < 0 0$5 ;
8099: LD_EXP 2
8103: PUSH
8104: LD_EXP 3
8108: PUSH
8109: EMPTY
8110: LIST
8111: LIST
8112: PPUSH
8113: CALL_OW 462
8117: PUSH
8118: LD_INT 175
8120: LESS
8121: IFFALSE 8092
// ComStop ( heavy_gun ) ;
8123: LD_VAR 0 2
8127: PPUSH
8128: CALL_OW 141
// DoNotAttack ( russians , heike_vehicle ) ;
8132: LD_EXP 3
8136: PPUSH
8137: LD_EXP 63
8141: PPUSH
8142: CALL_OW 471
// wait ( 0 0$0.3 ) ;
8146: LD_INT 10
8148: PPUSH
8149: CALL_OW 67
// Say ( Heike , D1H1 ) ;
8153: LD_EXP 7
8157: PPUSH
8158: LD_STRING D1H1
8160: PPUSH
8161: CALL_OW 88
// ComMoveXY ( heavy_gun , 35 , 26 ) ;
8165: LD_VAR 0 2
8169: PPUSH
8170: LD_INT 35
8172: PPUSH
8173: LD_INT 26
8175: PPUSH
8176: CALL_OW 111
// repeat wait ( 0 0$0.5 ) ;
8180: LD_INT 18
8182: PPUSH
8183: CALL_OW 67
// until not See ( you , heavy_gun ) ;
8187: LD_EXP 2
8191: PPUSH
8192: LD_VAR 0 2
8196: PPUSH
8197: CALL_OW 292
8201: NOT
8202: IFFALSE 8180
// DestroyUnit ( heavy_gun ) ;
8204: LD_VAR 0 2
8208: PPUSH
8209: CALL_OW 65
// count = 0 ;
8213: LD_ADDR_VAR 0 4
8217: PUSH
8218: LD_INT 0
8220: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
8221: LD_INT 18
8223: PPUSH
8224: CALL_OW 67
// count = count + 1 ;
8228: LD_ADDR_VAR 0 4
8232: PUSH
8233: LD_VAR 0 4
8237: PUSH
8238: LD_INT 1
8240: PLUS
8241: ST_TO_ADDR
// if count = 4 then
8242: LD_VAR 0 4
8246: PUSH
8247: LD_INT 4
8249: EQUAL
8250: IFFALSE 8269
// begin CenterOnUnits ( heike_vehicle ) ;
8252: LD_EXP 63
8256: PPUSH
8257: CALL_OW 85
// count = 0 ;
8261: LD_ADDR_VAR 0 4
8265: PUSH
8266: LD_INT 0
8268: ST_TO_ADDR
// end ; until GetDistUnitXY ( heike_vehicle , 78 , 11 ) < 8 ;
8269: LD_EXP 63
8273: PPUSH
8274: LD_INT 78
8276: PPUSH
8277: LD_INT 11
8279: PPUSH
8280: CALL_OW 297
8284: PUSH
8285: LD_INT 8
8287: LESS
8288: IFFALSE 8221
// ComTurnUnit ( Erwin , heike_vehicle ) ;
8290: LD_EXP 10
8294: PPUSH
8295: LD_EXP 63
8299: PPUSH
8300: CALL_OW 119
// repeat wait ( 0 0$0.5 ) ;
8304: LD_INT 18
8306: PPUSH
8307: CALL_OW 67
// until GetDistUnitXY ( heike_vehicle , 78 , 11 ) < 3 ;
8311: LD_EXP 63
8315: PPUSH
8316: LD_INT 78
8318: PPUSH
8319: LD_INT 11
8321: PPUSH
8322: CALL_OW 297
8326: PUSH
8327: LD_INT 3
8329: LESS
8330: IFFALSE 8304
// ExclusiveOn ;
8332: CALL_OW 4
// wait ( 0 0$0.5 ) ;
8336: LD_INT 18
8338: PPUSH
8339: CALL_OW 67
// CenterOnUnits ( heike_vehicle ) ;
8343: LD_EXP 63
8347: PPUSH
8348: CALL_OW 85
// ComExitVehicle ( Heike ) ;
8352: LD_EXP 7
8356: PPUSH
8357: CALL_OW 121
// for i in heike_companions_vehicles do
8361: LD_ADDR_VAR 0 5
8365: PUSH
8366: LD_EXP 74
8370: PUSH
8371: FOR_IN
8372: IFFALSE 8426
// begin ComStop ( i ) ;
8374: LD_VAR 0 5
8378: PPUSH
8379: CALL_OW 141
// wait ( 1 ) ;
8383: LD_INT 1
8385: PPUSH
8386: CALL_OW 67
// ComMoveXY ( IsDrivenBy ( i ) , 90 , 19 ) ;
8390: LD_VAR 0 5
8394: PPUSH
8395: CALL_OW 311
8399: PPUSH
8400: LD_INT 90
8402: PPUSH
8403: LD_INT 19
8405: PPUSH
8406: CALL_OW 111
// AddComExitVehicle ( IsDrivenBy ( i ) ) ;
8410: LD_VAR 0 5
8414: PPUSH
8415: CALL_OW 311
8419: PPUSH
8420: CALL_OW 181
// end ;
8424: GO 8371
8426: POP
8427: POP
// wait ( 0 0$0.2 ) ;
8428: LD_INT 7
8430: PPUSH
8431: CALL_OW 67
// ComTurnUnit ( Heike , Erwin ) ;
8435: LD_EXP 7
8439: PPUSH
8440: LD_EXP 10
8444: PPUSH
8445: CALL_OW 119
// ComMoveXY ( Erwin , ShiftX ( GetX ( Heike ) , 1 , 2 ) , ShiftY ( GetY ( Heike ) , 1 , 2 ) ) ;
8449: LD_EXP 10
8453: PPUSH
8454: LD_EXP 7
8458: PPUSH
8459: CALL_OW 250
8463: PPUSH
8464: LD_INT 1
8466: PPUSH
8467: LD_INT 2
8469: PPUSH
8470: CALL_OW 272
8474: PPUSH
8475: LD_EXP 7
8479: PPUSH
8480: CALL_OW 251
8484: PPUSH
8485: LD_INT 1
8487: PPUSH
8488: LD_INT 2
8490: PPUSH
8491: CALL_OW 273
8495: PPUSH
8496: CALL_OW 111
// AddComTurnUnit ( Erwin , Heike ) ;
8500: LD_EXP 10
8504: PPUSH
8505: LD_EXP 7
8509: PPUSH
8510: CALL_OW 179
// Say ( Erwin , D1Er1 ) ;
8514: LD_EXP 10
8518: PPUSH
8519: LD_STRING D1Er1
8521: PPUSH
8522: CALL_OW 88
// Say ( Heike , D1H2 ) ;
8526: LD_EXP 7
8530: PPUSH
8531: LD_STRING D1H2
8533: PPUSH
8534: CALL_OW 88
// Say ( Erwin , D1Er2 ) ;
8538: LD_EXP 10
8542: PPUSH
8543: LD_STRING D1Er2
8545: PPUSH
8546: CALL_OW 88
// Say ( Erwin , D1Er3 ) ;
8550: LD_EXP 10
8554: PPUSH
8555: LD_STRING D1Er3
8557: PPUSH
8558: CALL_OW 88
// Say ( Heike , D1H3 ) ;
8562: LD_EXP 7
8566: PPUSH
8567: LD_STRING D1H3
8569: PPUSH
8570: CALL_OW 88
// Say ( Erwin , D1Er4 ) ;
8574: LD_EXP 10
8578: PPUSH
8579: LD_STRING D1Er4
8581: PPUSH
8582: CALL_OW 88
// Say ( Erwin , D1Er5 ) ;
8586: LD_EXP 10
8590: PPUSH
8591: LD_STRING D1Er5
8593: PPUSH
8594: CALL_OW 88
// Say ( Heike , D1H4 ) ;
8598: LD_EXP 7
8602: PPUSH
8603: LD_STRING D1H4
8605: PPUSH
8606: CALL_OW 88
// Say ( Erwin , D1Er6 ) ;
8610: LD_EXP 10
8614: PPUSH
8615: LD_STRING D1Er6
8617: PPUSH
8618: CALL_OW 88
// Say ( Heike , D1H5 ) ;
8622: LD_EXP 7
8626: PPUSH
8627: LD_STRING D1H5
8629: PPUSH
8630: CALL_OW 88
// wait ( 0 0$0.2 ) ;
8634: LD_INT 7
8636: PPUSH
8637: CALL_OW 67
// ComFree ( Erwin ) ;
8641: LD_EXP 10
8645: PPUSH
8646: CALL_OW 139
// temp_list = UnitsInside ( ardep1 ) diff Louis ;
8650: LD_ADDR_VAR 0 3
8654: PUSH
8655: LD_INT 3
8657: PPUSH
8658: CALL_OW 313
8662: PUSH
8663: LD_EXP 9
8667: DIFF
8668: ST_TO_ADDR
// if temp_list = 5 then
8669: LD_VAR 0 3
8673: PUSH
8674: LD_INT 5
8676: EQUAL
8677: IFFALSE 8692
// ComExitBuilding ( temp_list [ 1 ] ) ;
8679: LD_VAR 0 3
8683: PUSH
8684: LD_INT 1
8686: ARRAY
8687: PPUSH
8688: CALL_OW 122
// ComEnterUnit ( Heike , ardep1 ) ;
8692: LD_EXP 7
8696: PPUSH
8697: LD_INT 3
8699: PPUSH
8700: CALL_OW 120
// repeat wait ( 0 0$0.5 ) ;
8704: LD_INT 18
8706: PPUSH
8707: CALL_OW 67
// until IsInUnit ( Heike ) = ardep1 ;
8711: LD_EXP 7
8715: PPUSH
8716: CALL_OW 310
8720: PUSH
8721: LD_INT 3
8723: EQUAL
8724: IFFALSE 8704
// CenterOnUnits ( ardep1 ) ;
8726: LD_INT 3
8728: PPUSH
8729: CALL_OW 85
// Say ( Louis , D1Lo1 ) ;
8733: LD_EXP 9
8737: PPUSH
8738: LD_STRING D1Lo1
8740: PPUSH
8741: CALL_OW 88
// Say ( Heike , D1H6 ) ;
8745: LD_EXP 7
8749: PPUSH
8750: LD_STRING D1H6
8752: PPUSH
8753: CALL_OW 88
// Say ( Louis , D1Lo2 ) ;
8757: LD_EXP 9
8761: PPUSH
8762: LD_STRING D1Lo2
8764: PPUSH
8765: CALL_OW 88
// Say ( Heike , D1H7 ) ;
8769: LD_EXP 7
8773: PPUSH
8774: LD_STRING D1H7
8776: PPUSH
8777: CALL_OW 88
// Say ( Louis , D1Lo3 ) ;
8781: LD_EXP 9
8785: PPUSH
8786: LD_STRING D1Lo3
8788: PPUSH
8789: CALL_OW 88
// Say ( Heike , D1H8 ) ;
8793: LD_EXP 7
8797: PPUSH
8798: LD_STRING D1H8
8800: PPUSH
8801: CALL_OW 88
// Say ( Louis , D1Lo4 ) ;
8805: LD_EXP 9
8809: PPUSH
8810: LD_STRING D1Lo4
8812: PPUSH
8813: CALL_OW 88
// Say ( Louis , D1Lo5 ) ;
8817: LD_EXP 9
8821: PPUSH
8822: LD_STRING D1Lo5
8824: PPUSH
8825: CALL_OW 88
// InGameOff ;
8829: CALL_OW 9
// wait ( 0 0$0.2 ) ;
8833: LD_INT 7
8835: PPUSH
8836: CALL_OW 67
// ChangeMissionObjectives ( M1 ) ;
8840: LD_STRING M1
8842: PPUSH
8843: CALL_OW 337
// for i in FilterAllUnits ( [ f_side , nature ] ) do
8847: LD_ADDR_VAR 0 5
8851: PUSH
8852: LD_INT 22
8854: PUSH
8855: LD_EXP 4
8859: PUSH
8860: EMPTY
8861: LIST
8862: LIST
8863: PPUSH
8864: CALL_OW 69
8868: PUSH
8869: FOR_IN
8870: IFFALSE 8883
// ComFree ( i ) ;
8872: LD_VAR 0 5
8876: PPUSH
8877: CALL_OW 139
8881: GO 8869
8883: POP
8884: POP
// NormalAttack ( russians , heike_vehicle ) ;
8885: LD_EXP 3
8889: PPUSH
8890: LD_EXP 63
8894: PPUSH
8895: CALL_OW 472
// wait ( 0 0$0.2 ) ;
8899: LD_INT 7
8901: PPUSH
8902: CALL_OW 67
// SaveForQuickRestart ;
8906: CALL_OW 22
// end ;
8910: LD_VAR 0 1
8914: RET
// every 0 0$0.5 do var i , veh , num , temp_list ;
8915: GO 8917
8917: DISABLE
8918: LD_INT 0
8920: PPUSH
8921: PPUSH
8922: PPUSH
8923: PPUSH
// begin InitUc ;
8924: CALL_OW 18
// InitHc ;
8928: CALL_OW 19
// InitVc ;
8932: CALL_OW 20
// uc_side = you ;
8936: LD_ADDR_OWVAR 20
8940: PUSH
8941: LD_EXP 2
8945: ST_TO_ADDR
// uc_nation = nation_arabian ;
8946: LD_ADDR_OWVAR 21
8950: PUSH
8951: LD_INT 2
8953: ST_TO_ADDR
// temp_list = CreateUnitsWithClass ( 3 , class_soldier , you ) ;
8954: LD_ADDR_VAR 0 4
8958: PUSH
8959: LD_INT 3
8961: PPUSH
8962: LD_INT 1
8964: PPUSH
8965: LD_EXP 2
8969: PPUSH
8970: CALL 7077 0 3
8974: ST_TO_ADDR
// vc_control = control_manual ;
8975: LD_ADDR_OWVAR 38
8979: PUSH
8980: LD_INT 1
8982: ST_TO_ADDR
// vc_engine = engine_solar ;
8983: LD_ADDR_OWVAR 39
8987: PUSH
8988: LD_INT 2
8990: ST_TO_ADDR
// vc_chassis = ar_hovercraft ;
8991: LD_ADDR_OWVAR 37
8995: PUSH
8996: LD_INT 11
8998: ST_TO_ADDR
// for i = 1 to 3 do
8999: LD_ADDR_VAR 0 1
9003: PUSH
9004: DOUBLE
9005: LD_INT 1
9007: DEC
9008: ST_TO_ADDR
9009: LD_INT 3
9011: PUSH
9012: FOR_TO
9013: IFFALSE 9102
// begin vc_weapon = [ ar_light_gun , ar_double_machine_gun ] [ Rand ( 1 , 2 ) ] ;
9015: LD_ADDR_OWVAR 40
9019: PUSH
9020: LD_INT 23
9022: PUSH
9023: LD_INT 24
9025: PUSH
9026: EMPTY
9027: LIST
9028: LIST
9029: PUSH
9030: LD_INT 1
9032: PPUSH
9033: LD_INT 2
9035: PPUSH
9036: CALL_OW 12
9040: ARRAY
9041: ST_TO_ADDR
// veh = CreateVehicle ;
9042: LD_ADDR_VAR 0 2
9046: PUSH
9047: CALL_OW 45
9051: ST_TO_ADDR
// PlaceHumanInUnit ( temp_list [ i ] , veh ) ;
9052: LD_VAR 0 4
9056: PUSH
9057: LD_VAR 0 1
9061: ARRAY
9062: PPUSH
9063: LD_VAR 0 2
9067: PPUSH
9068: CALL_OW 52
// SetDir ( veh , 2 ) ;
9072: LD_VAR 0 2
9076: PPUSH
9077: LD_INT 2
9079: PPUSH
9080: CALL_OW 233
// heike_companions_vehicles = heike_companions_vehicles ^ veh ;
9084: LD_ADDR_EXP 74
9088: PUSH
9089: LD_EXP 74
9093: PUSH
9094: LD_VAR 0 2
9098: ADD
9099: ST_TO_ADDR
// end ;
9100: GO 9012
9102: POP
9103: POP
// num = 1 ;
9104: LD_ADDR_VAR 0 3
9108: PUSH
9109: LD_INT 1
9111: ST_TO_ADDR
// repeat wait ( 0 0$0.2 ) ;
9112: LD_INT 7
9114: PPUSH
9115: CALL_OW 67
// if num = 1 then
9119: LD_VAR 0 3
9123: PUSH
9124: LD_INT 1
9126: EQUAL
9127: IFFALSE 9154
// begin if GetDistUnitXY ( heike_vehicle , 5 , 4 ) <= 4 then
9129: LD_EXP 63
9133: PPUSH
9134: LD_INT 5
9136: PPUSH
9137: LD_INT 4
9139: PPUSH
9140: CALL_OW 297
9144: PUSH
9145: LD_INT 4
9147: LESSEQUAL
9148: IFFALSE 9152
// continue ;
9150: GO 9112
// end else
9152: GO 9187
// if GetDistUnitXY ( heike_companions_vehicles [ num - 1 ] , 5 , 4 ) <= 4 then
9154: LD_EXP 74
9158: PUSH
9159: LD_VAR 0 3
9163: PUSH
9164: LD_INT 1
9166: MINUS
9167: ARRAY
9168: PPUSH
9169: LD_INT 5
9171: PPUSH
9172: LD_INT 4
9174: PPUSH
9175: CALL_OW 297
9179: PUSH
9180: LD_INT 4
9182: LESSEQUAL
9183: IFFALSE 9187
// continue ;
9185: GO 9112
// PlaceUnitXY ( heike_companions_vehicles [ num ] , 5 , 4 , false ) ;
9187: LD_EXP 74
9191: PUSH
9192: LD_VAR 0 3
9196: ARRAY
9197: PPUSH
9198: LD_INT 5
9200: PPUSH
9201: LD_INT 4
9203: PPUSH
9204: LD_INT 0
9206: PPUSH
9207: CALL_OW 48
// if num = 1 then
9211: LD_VAR 0 3
9215: PUSH
9216: LD_INT 1
9218: EQUAL
9219: IFFALSE 9243
// ComMoveUnit ( heike_companions_vehicles [ num ] , heike_vehicle ) else
9221: LD_EXP 74
9225: PUSH
9226: LD_VAR 0 3
9230: ARRAY
9231: PPUSH
9232: LD_EXP 63
9236: PPUSH
9237: CALL_OW 112
9241: GO 9273
// ComMoveUnit ( heike_companions_vehicles [ num ] , heike_companions_vehicles [ num - 1 ] ) ;
9243: LD_EXP 74
9247: PUSH
9248: LD_VAR 0 3
9252: ARRAY
9253: PPUSH
9254: LD_EXP 74
9258: PUSH
9259: LD_VAR 0 3
9263: PUSH
9264: LD_INT 1
9266: MINUS
9267: ARRAY
9268: PPUSH
9269: CALL_OW 112
// num = num + 1 ;
9273: LD_ADDR_VAR 0 3
9277: PUSH
9278: LD_VAR 0 3
9282: PUSH
9283: LD_INT 1
9285: PLUS
9286: ST_TO_ADDR
// until num > heike_companions_vehicles + 0 ;
9287: LD_VAR 0 3
9291: PUSH
9292: LD_EXP 74
9296: PUSH
9297: LD_INT 0
9299: PLUS
9300: GREATER
9301: IFFALSE 9112
// end ; end_of_file
9303: PPOPN 4
9305: END
// var dont_gather_crates , going_to_drop_material_units , known_crates_list ; export function InitCrateModule ; begin
9306: LD_INT 0
9308: PPUSH
// dont_gather_crates = [ ] ;
9309: LD_ADDR_LOC 1
9313: PUSH
9314: EMPTY
9315: ST_TO_ADDR
// going_to_drop_material_units = [ ] ;
9316: LD_ADDR_LOC 2
9320: PUSH
9321: EMPTY
9322: ST_TO_ADDR
// known_crates_list = [ [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] ] ;
9323: LD_ADDR_LOC 3
9327: PUSH
9328: EMPTY
9329: PUSH
9330: EMPTY
9331: PUSH
9332: EMPTY
9333: PUSH
9334: EMPTY
9335: PUSH
9336: EMPTY
9337: PUSH
9338: EMPTY
9339: PUSH
9340: EMPTY
9341: PUSH
9342: EMPTY
9343: PUSH
9344: EMPTY
9345: LIST
9346: LIST
9347: LIST
9348: LIST
9349: LIST
9350: LIST
9351: LIST
9352: LIST
9353: ST_TO_ADDR
// end ;
9354: LD_VAR 0 1
9358: RET
// every 0 0$1 + 0 0$0.4 do
9359: GO 9361
9361: DISABLE
// begin wait ( Rand ( 1 1$30 , 2 2$0 ) ) ;
9362: LD_INT 3150
9364: PPUSH
9365: LD_INT 4200
9367: PPUSH
9368: CALL_OW 12
9372: PPUSH
9373: CALL_OW 67
// if Rand ( 1 , 3 ) = 1 then
9377: LD_INT 1
9379: PPUSH
9380: LD_INT 3
9382: PPUSH
9383: CALL_OW 12
9387: PUSH
9388: LD_INT 1
9390: EQUAL
9391: IFFALSE 9413
// CreateCratesAnywhere ( Rand ( 3 , 5 ) , true ) else
9393: LD_INT 3
9395: PPUSH
9396: LD_INT 5
9398: PPUSH
9399: CALL_OW 12
9403: PPUSH
9404: LD_INT 1
9406: PPUSH
9407: CALL_OW 57
9411: GO 9434
// CreateCratesArea ( Rand ( 3 , 5 ) , player_crate_deny_area , true ) ;
9413: LD_INT 3
9415: PPUSH
9416: LD_INT 5
9418: PPUSH
9419: CALL_OW 12
9423: PPUSH
9424: LD_INT 9
9426: PPUSH
9427: LD_INT 1
9429: PPUSH
9430: CALL_OW 55
// if Rand ( 1 , 4 ) = 1 then
9434: LD_INT 1
9436: PPUSH
9437: LD_INT 4
9439: PPUSH
9440: CALL_OW 12
9444: PUSH
9445: LD_INT 1
9447: EQUAL
9448: IFFALSE 9483
// begin wait ( Rand ( 0 0$5 , 0 0$20 ) ) ;
9450: LD_INT 175
9452: PPUSH
9453: LD_INT 700
9455: PPUSH
9456: CALL_OW 12
9460: PPUSH
9461: CALL_OW 67
// CreateCratesAnywhere ( Rand ( 2 , 4 ) , true ) ;
9465: LD_INT 2
9467: PPUSH
9468: LD_INT 4
9470: PPUSH
9471: CALL_OW 12
9475: PPUSH
9476: LD_INT 1
9478: PPUSH
9479: CALL_OW 57
// end ; enable ;
9483: ENABLE
// end ;
9484: END
// every 0 0$1 + 0 0$0.6 do var crate_list , temp_list , i , temp_list_2 , hex ;
9485: GO 9487
9487: DISABLE
9488: LD_INT 0
9490: PPUSH
9491: PPUSH
9492: PPUSH
9493: PPUSH
9494: PPUSH
// begin crate_list = [ ] ;
9495: LD_ADDR_VAR 0 1
9499: PUSH
9500: EMPTY
9501: ST_TO_ADDR
// repeat i = 1 ;
9502: LD_ADDR_VAR 0 3
9506: PUSH
9507: LD_INT 1
9509: ST_TO_ADDR
// while i <= crate_list do
9510: LD_VAR 0 3
9514: PUSH
9515: LD_VAR 0 1
9519: LESSEQUAL
9520: IFFALSE 9600
// begin if GetResourceAmountXY ( crate_list [ i ] [ 1 ] , crate_list [ i ] [ 2 ] ) = 0 then
9522: LD_VAR 0 1
9526: PUSH
9527: LD_VAR 0 3
9531: ARRAY
9532: PUSH
9533: LD_INT 1
9535: ARRAY
9536: PPUSH
9537: LD_VAR 0 1
9541: PUSH
9542: LD_VAR 0 3
9546: ARRAY
9547: PUSH
9548: LD_INT 2
9550: ARRAY
9551: PPUSH
9552: CALL_OW 284
9556: PUSH
9557: LD_INT 0
9559: EQUAL
9560: IFFALSE 9584
// begin crate_list = Delete ( crate_list , i ) ;
9562: LD_ADDR_VAR 0 1
9566: PUSH
9567: LD_VAR 0 1
9571: PPUSH
9572: LD_VAR 0 3
9576: PPUSH
9577: CALL_OW 3
9581: ST_TO_ADDR
// continue ;
9582: GO 9510
// end ; i = i + 1 ;
9584: LD_ADDR_VAR 0 3
9588: PUSH
9589: LD_VAR 0 3
9593: PUSH
9594: LD_INT 1
9596: PLUS
9597: ST_TO_ADDR
// end ;
9598: GO 9510
// temp_list = GetListOfCratesInArea ( player_crate_deny_area ) ;
9600: LD_ADDR_VAR 0 2
9604: PUSH
9605: LD_INT 9
9607: PPUSH
9608: CALL_OW 435
9612: ST_TO_ADDR
// temp_list_2 = [ ] ;
9613: LD_ADDR_VAR 0 4
9617: PUSH
9618: EMPTY
9619: ST_TO_ADDR
// i = 1 ;
9620: LD_ADDR_VAR 0 3
9624: PUSH
9625: LD_INT 1
9627: ST_TO_ADDR
// while i < temp_list do
9628: LD_VAR 0 3
9632: PUSH
9633: LD_VAR 0 2
9637: LESS
9638: IFFALSE 9751
// begin hex = [ temp_list [ i ] , temp_list [ i + 1 ] ] ;
9640: LD_ADDR_VAR 0 5
9644: PUSH
9645: LD_VAR 0 2
9649: PUSH
9650: LD_VAR 0 3
9654: ARRAY
9655: PUSH
9656: LD_VAR 0 2
9660: PUSH
9661: LD_VAR 0 3
9665: PUSH
9666: LD_INT 1
9668: PLUS
9669: ARRAY
9670: PUSH
9671: EMPTY
9672: LIST
9673: LIST
9674: ST_TO_ADDR
// if not hex in crate_list and GetResourceTypeXY ( hex [ 1 ] , hex [ 2 ] ) = mat_cans then
9675: LD_VAR 0 5
9679: PUSH
9680: LD_VAR 0 1
9684: IN
9685: NOT
9686: PUSH
9687: LD_VAR 0 5
9691: PUSH
9692: LD_INT 1
9694: ARRAY
9695: PPUSH
9696: LD_VAR 0 5
9700: PUSH
9701: LD_INT 2
9703: ARRAY
9704: PPUSH
9705: CALL_OW 283
9709: PUSH
9710: LD_INT 1
9712: EQUAL
9713: AND
9714: IFFALSE 9735
// temp_list_2 = temp_list_2 ^ [ hex ] ;
9716: LD_ADDR_VAR 0 4
9720: PUSH
9721: LD_VAR 0 4
9725: PUSH
9726: LD_VAR 0 5
9730: PUSH
9731: EMPTY
9732: LIST
9733: ADD
9734: ST_TO_ADDR
// i = i + 2 ;
9735: LD_ADDR_VAR 0 3
9739: PUSH
9740: LD_VAR 0 3
9744: PUSH
9745: LD_INT 2
9747: PLUS
9748: ST_TO_ADDR
// end ;
9749: GO 9628
// for hex in temp_list_2 do
9751: LD_ADDR_VAR 0 5
9755: PUSH
9756: LD_VAR 0 4
9760: PUSH
9761: FOR_IN
9762: IFFALSE 9819
// begin deny_crates_spawned = deny_crates_spawned + GetResourceAmountXY ( hex [ 1 ] , hex [ 2 ] ) ;
9764: LD_ADDR_EXP 61
9768: PUSH
9769: LD_EXP 61
9773: PUSH
9774: LD_VAR 0 5
9778: PUSH
9779: LD_INT 1
9781: ARRAY
9782: PPUSH
9783: LD_VAR 0 5
9787: PUSH
9788: LD_INT 2
9790: ARRAY
9791: PPUSH
9792: CALL_OW 284
9796: PLUS
9797: ST_TO_ADDR
// crate_list = crate_list ^ [ hex ] ;
9798: LD_ADDR_VAR 0 1
9802: PUSH
9803: LD_VAR 0 1
9807: PUSH
9808: LD_VAR 0 5
9812: PUSH
9813: EMPTY
9814: LIST
9815: ADD
9816: ST_TO_ADDR
// end ;
9817: GO 9761
9819: POP
9820: POP
// wait ( 0 0$1 ) ;
9821: LD_INT 35
9823: PPUSH
9824: CALL_OW 67
// until false ;
9828: LD_INT 0
9830: IFFALSE 9502
// end ;
9832: PPOPN 5
9834: END
// every 0 0$1 + 0 0$0.7 do var i , val , russian_gatherers , temp ; var rus_gatherers_deny_crates_amount , rus_gatherers_nondeny_crates_amount ;
9835: GO 9837
9837: DISABLE
9838: LD_INT 0
9840: PPUSH
9841: PPUSH
9842: PPUSH
9843: PPUSH
9844: PPUSH
9845: PPUSH
// begin rus_gatherers_deny_crates_amount = [ ] ;
9846: LD_ADDR_VAR 0 5
9850: PUSH
9851: EMPTY
9852: ST_TO_ADDR
// rus_gatherers_nondeny_crates_amount = [ ] ;
9853: LD_ADDR_VAR 0 6
9857: PUSH
9858: EMPTY
9859: ST_TO_ADDR
// repeat russian_gatherers = [ ] ;
9860: LD_ADDR_VAR 0 3
9864: PUSH
9865: EMPTY
9866: ST_TO_ADDR
// for i in ai_engineers ^ ai_apemen_engineers ^ ( ai_cargo_bay diff 0 ) do
9867: LD_ADDR_VAR 0 1
9871: PUSH
9872: LD_EXP 14
9876: PUSH
9877: LD_EXP 44
9881: ADD
9882: PUSH
9883: LD_EXP 42
9887: PUSH
9888: LD_INT 0
9890: DIFF
9891: ADD
9892: PUSH
9893: FOR_IN
9894: IFFALSE 9914
// russian_gatherers = russian_gatherers ^ i ;
9896: LD_ADDR_VAR 0 3
9900: PUSH
9901: LD_VAR 0 3
9905: PUSH
9906: LD_VAR 0 1
9910: ADD
9911: ST_TO_ADDR
9912: GO 9893
9914: POP
9915: POP
// for i in russian_gatherers do
9916: LD_ADDR_VAR 0 1
9920: PUSH
9921: LD_VAR 0 3
9925: PUSH
9926: FOR_IN
9927: IFFALSE 10268
// begin val = GetCargo ( i , mat_cans ) ;
9929: LD_ADDR_VAR 0 2
9933: PUSH
9934: LD_VAR 0 1
9938: PPUSH
9939: LD_INT 1
9941: PPUSH
9942: CALL_OW 289
9946: ST_TO_ADDR
// if rus_gatherers_deny_crates_amount < i then
9947: LD_VAR 0 5
9951: PUSH
9952: LD_VAR 0 1
9956: LESS
9957: IFFALSE 9982
// rus_gatherers_deny_crates_amount = Replace ( rus_gatherers_deny_crates_amount , i , 0 ) ;
9959: LD_ADDR_VAR 0 5
9963: PUSH
9964: LD_VAR 0 5
9968: PPUSH
9969: LD_VAR 0 1
9973: PPUSH
9974: LD_INT 0
9976: PPUSH
9977: CALL_OW 1
9981: ST_TO_ADDR
// if rus_gatherers_nondeny_crates_amount < i then
9982: LD_VAR 0 6
9986: PUSH
9987: LD_VAR 0 1
9991: LESS
9992: IFFALSE 10017
// rus_gatherers_nondeny_crates_amount = Replace ( rus_gatherers_nondeny_crates_amount , i , 0 ) ;
9994: LD_ADDR_VAR 0 6
9998: PUSH
9999: LD_VAR 0 6
10003: PPUSH
10004: LD_VAR 0 1
10008: PPUSH
10009: LD_INT 0
10011: PPUSH
10012: CALL_OW 1
10016: ST_TO_ADDR
// temp = val - rus_gatherers_deny_crates_amount [ i ] - rus_gatherers_nondeny_crates_amount [ i ] ;
10017: LD_ADDR_VAR 0 4
10021: PUSH
10022: LD_VAR 0 2
10026: PUSH
10027: LD_VAR 0 5
10031: PUSH
10032: LD_VAR 0 1
10036: ARRAY
10037: MINUS
10038: PUSH
10039: LD_VAR 0 6
10043: PUSH
10044: LD_VAR 0 1
10048: ARRAY
10049: MINUS
10050: ST_TO_ADDR
// if IsInArea ( i , player_crate_deny_area ) and temp > 0 then
10051: LD_VAR 0 1
10055: PPUSH
10056: LD_INT 9
10058: PPUSH
10059: CALL_OW 308
10063: PUSH
10064: LD_VAR 0 4
10068: PUSH
10069: LD_INT 0
10071: GREATER
10072: AND
10073: IFFALSE 10114
// begin rus_gatherers_deny_crates_amount = Replace ( rus_gatherers_deny_crates_amount , i , rus_gatherers_deny_crates_amount [ i ] + temp ) ;
10075: LD_ADDR_VAR 0 5
10079: PUSH
10080: LD_VAR 0 5
10084: PPUSH
10085: LD_VAR 0 1
10089: PPUSH
10090: LD_VAR 0 5
10094: PUSH
10095: LD_VAR 0 1
10099: ARRAY
10100: PUSH
10101: LD_VAR 0 4
10105: PLUS
10106: PPUSH
10107: CALL_OW 1
10111: ST_TO_ADDR
// end else
10112: GO 10266
// if temp > 0 then
10114: LD_VAR 0 4
10118: PUSH
10119: LD_INT 0
10121: GREATER
10122: IFFALSE 10163
// begin rus_gatherers_nondeny_crates_amount = Replace ( rus_gatherers_nondeny_crates_amount , i , rus_gatherers_nondeny_crates_amount [ i ] + temp ) ;
10124: LD_ADDR_VAR 0 6
10128: PUSH
10129: LD_VAR 0 6
10133: PPUSH
10134: LD_VAR 0 1
10138: PPUSH
10139: LD_VAR 0 6
10143: PUSH
10144: LD_VAR 0 1
10148: ARRAY
10149: PUSH
10150: LD_VAR 0 4
10154: PLUS
10155: PPUSH
10156: CALL_OW 1
10160: ST_TO_ADDR
// end else
10161: GO 10266
// if temp < 0 and val = 0 and IsOk ( i ) then
10163: LD_VAR 0 4
10167: PUSH
10168: LD_INT 0
10170: LESS
10171: PUSH
10172: LD_VAR 0 2
10176: PUSH
10177: LD_INT 0
10179: EQUAL
10180: AND
10181: PUSH
10182: LD_VAR 0 1
10186: PPUSH
10187: CALL_OW 302
10191: AND
10192: IFFALSE 10266
// begin deny_crates_gathered = deny_crates_gathered + rus_gatherers_deny_crates_amount [ i ] div 10 ;
10194: LD_ADDR_EXP 62
10198: PUSH
10199: LD_EXP 62
10203: PUSH
10204: LD_VAR 0 5
10208: PUSH
10209: LD_VAR 0 1
10213: ARRAY
10214: PUSH
10215: LD_INT 10
10217: DIV
10218: PLUS
10219: ST_TO_ADDR
// rus_gatherers_deny_crates_amount = Replace ( rus_gatherers_deny_crates_amount , i , 0 ) ;
10220: LD_ADDR_VAR 0 5
10224: PUSH
10225: LD_VAR 0 5
10229: PPUSH
10230: LD_VAR 0 1
10234: PPUSH
10235: LD_INT 0
10237: PPUSH
10238: CALL_OW 1
10242: ST_TO_ADDR
// rus_gatherers_nondeny_crates_amount = Replace ( rus_gatherers_nondeny_crates_amount , i , 0 ) ;
10243: LD_ADDR_VAR 0 6
10247: PUSH
10248: LD_VAR 0 6
10252: PPUSH
10253: LD_VAR 0 1
10257: PPUSH
10258: LD_INT 0
10260: PPUSH
10261: CALL_OW 1
10265: ST_TO_ADDR
// end ; end ;
10266: GO 9926
10268: POP
10269: POP
// wait ( 0 0$1 ) ;
10270: LD_INT 35
10272: PPUSH
10273: CALL_OW 67
// until false ;
10277: LD_INT 0
10279: IFFALSE 9860
// end ;
10281: PPOPN 6
10283: END
// function OnCommand_CrateDropDetection ( com ) ; var b , temp_list , t ; begin
10284: LD_INT 0
10286: PPUSH
10287: PPUSH
10288: PPUSH
10289: PPUSH
// if com <> 74 then
10290: LD_VAR 0 1
10294: PUSH
10295: LD_INT 74
10297: NONEQUAL
10298: IFFALSE 10302
// exit ;
10300: GO 10474
// for b in FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_class , class_engineer ] , [ f_class , class_apeman_engineer ] , [ f_weapon , us_cargo_bay ] , [ f_weapon , ru_cargo_bay ] ] ] ) do
10302: LD_ADDR_VAR 0 3
10306: PUSH
10307: LD_INT 22
10309: PUSH
10310: LD_EXP 2
10314: PUSH
10315: EMPTY
10316: LIST
10317: LIST
10318: PUSH
10319: LD_INT 2
10321: PUSH
10322: LD_INT 25
10324: PUSH
10325: LD_INT 2
10327: PUSH
10328: EMPTY
10329: LIST
10330: LIST
10331: PUSH
10332: LD_INT 25
10334: PUSH
10335: LD_INT 16
10337: PUSH
10338: EMPTY
10339: LIST
10340: LIST
10341: PUSH
10342: LD_INT 34
10344: PUSH
10345: LD_INT 12
10347: PUSH
10348: EMPTY
10349: LIST
10350: LIST
10351: PUSH
10352: LD_INT 34
10354: PUSH
10355: LD_INT 51
10357: PUSH
10358: EMPTY
10359: LIST
10360: LIST
10361: PUSH
10362: EMPTY
10363: LIST
10364: LIST
10365: LIST
10366: LIST
10367: LIST
10368: PUSH
10369: EMPTY
10370: LIST
10371: LIST
10372: PPUSH
10373: CALL_OW 69
10377: PUSH
10378: FOR_IN
10379: IFFALSE 10472
// if IsSelected ( b ) and not b in going_to_drop_material_units then
10381: LD_VAR 0 3
10385: PPUSH
10386: CALL_OW 306
10390: PUSH
10391: LD_VAR 0 3
10395: PUSH
10396: LD_LOC 2
10400: IN
10401: NOT
10402: AND
10403: IFFALSE 10470
// if HasTask ( b ) then
10405: LD_VAR 0 3
10409: PPUSH
10410: CALL_OW 314
10414: IFFALSE 10470
// begin for t in GetTaskList ( b ) do
10416: LD_ADDR_VAR 0 5
10420: PUSH
10421: LD_VAR 0 3
10425: PPUSH
10426: CALL_OW 437
10430: PUSH
10431: FOR_IN
10432: IFFALSE 10468
// begin if t [ 1 ] = m then
10434: LD_VAR 0 5
10438: PUSH
10439: LD_INT 1
10441: ARRAY
10442: PUSH
10443: LD_STRING m
10445: EQUAL
10446: IFFALSE 10466
// begin going_to_drop_material_units = going_to_drop_material_units ^ b ;
10448: LD_ADDR_LOC 2
10452: PUSH
10453: LD_LOC 2
10457: PUSH
10458: LD_VAR 0 3
10462: ADD
10463: ST_TO_ADDR
// break ;
10464: GO 10468
// end ; end ;
10466: GO 10431
10468: POP
10469: POP
// end ;
10470: GO 10378
10472: POP
10473: POP
// end ;
10474: LD_VAR 0 2
10478: RET
// on Command ( com ) do begin OnCommand_CrateDropDetection ( com ) ;
10479: LD_VAR 0 1
10483: PPUSH
10484: CALL 10284 0 1
// end ;
10488: PPOPN 1
10490: END
// every 0 0$1 + 0 0$0.1 do var un , temp_list , t , dist , hex ;
10491: GO 10493
10493: DISABLE
10494: LD_INT 0
10496: PPUSH
10497: PPUSH
10498: PPUSH
10499: PPUSH
10500: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
10501: LD_INT 18
10503: PPUSH
10504: CALL_OW 67
// if going_to_drop_material_units = 0 then
10508: LD_LOC 2
10512: PUSH
10513: LD_INT 0
10515: EQUAL
10516: IFFALSE 10520
// continue ;
10518: GO 10501
// for un in going_to_drop_material_units do
10520: LD_ADDR_VAR 0 1
10524: PUSH
10525: LD_LOC 2
10529: PUSH
10530: FOR_IN
10531: IFFALSE 10673
// if not Carry ( un ) then
10533: LD_VAR 0 1
10537: PPUSH
10538: CALL_OW 281
10542: NOT
10543: IFFALSE 10671
// begin if GetType ( un ) = unit_human then
10545: LD_VAR 0 1
10549: PPUSH
10550: CALL_OW 247
10554: PUSH
10555: LD_INT 1
10557: EQUAL
10558: IFFALSE 10570
// dist = 2 else
10560: LD_ADDR_VAR 0 4
10564: PUSH
10565: LD_INT 2
10567: ST_TO_ADDR
10568: GO 10578
// dist = 4 ;
10570: LD_ADDR_VAR 0 4
10574: PUSH
10575: LD_INT 4
10577: ST_TO_ADDR
// for hex in GetHexesNearHex ( GetX ( un ) , GetY ( un ) , dist ) do
10578: LD_ADDR_VAR 0 5
10582: PUSH
10583: LD_VAR 0 1
10587: PPUSH
10588: CALL_OW 250
10592: PPUSH
10593: LD_VAR 0 1
10597: PPUSH
10598: CALL_OW 251
10602: PPUSH
10603: LD_VAR 0 4
10607: PPUSH
10608: CALL 10791 0 3
10612: PUSH
10613: FOR_IN
10614: IFFALSE 10669
// if GetResourceAmountXY ( hex [ 1 ] , hex [ 2 ] ) > 0 then
10616: LD_VAR 0 5
10620: PUSH
10621: LD_INT 1
10623: ARRAY
10624: PPUSH
10625: LD_VAR 0 5
10629: PUSH
10630: LD_INT 2
10632: ARRAY
10633: PPUSH
10634: CALL_OW 284
10638: PUSH
10639: LD_INT 0
10641: GREATER
10642: IFFALSE 10667
// dont_gather_crates = Insert ( dont_gather_crates , 1 , hex ) ;
10644: LD_ADDR_LOC 1
10648: PUSH
10649: LD_LOC 1
10653: PPUSH
10654: LD_INT 1
10656: PPUSH
10657: LD_VAR 0 5
10661: PPUSH
10662: CALL_OW 2
10666: ST_TO_ADDR
10667: GO 10613
10669: POP
10670: POP
// end ;
10671: GO 10530
10673: POP
10674: POP
// going_to_drop_material_units = UnitFilter ( going_to_drop_material_units , [ f_hastask ] ) ;
10675: LD_ADDR_LOC 2
10679: PUSH
10680: LD_LOC 2
10684: PPUSH
10685: LD_INT 60
10687: PUSH
10688: EMPTY
10689: LIST
10690: PPUSH
10691: CALL_OW 72
10695: ST_TO_ADDR
// temp_list = [ ] ;
10696: LD_ADDR_VAR 0 2
10700: PUSH
10701: EMPTY
10702: ST_TO_ADDR
// for un in going_to_drop_material_units do
10703: LD_ADDR_VAR 0 1
10707: PUSH
10708: LD_LOC 2
10712: PUSH
10713: FOR_IN
10714: IFFALSE 10772
// begin for t in GetTaskList ( un ) do
10716: LD_ADDR_VAR 0 3
10720: PUSH
10721: LD_VAR 0 1
10725: PPUSH
10726: CALL_OW 437
10730: PUSH
10731: FOR_IN
10732: IFFALSE 10768
// if t [ 1 ] = m then
10734: LD_VAR 0 3
10738: PUSH
10739: LD_INT 1
10741: ARRAY
10742: PUSH
10743: LD_STRING m
10745: EQUAL
10746: IFFALSE 10766
// begin temp_list = temp_list ^ un ;
10748: LD_ADDR_VAR 0 2
10752: PUSH
10753: LD_VAR 0 2
10757: PUSH
10758: LD_VAR 0 1
10762: ADD
10763: ST_TO_ADDR
// break ;
10764: GO 10768
// end ;
10766: GO 10731
10768: POP
10769: POP
// end ;
10770: GO 10713
10772: POP
10773: POP
// going_to_drop_material_units = temp_list ;
10774: LD_ADDR_LOC 2
10778: PUSH
10779: LD_VAR 0 2
10783: ST_TO_ADDR
// until false ;
10784: LD_INT 0
10786: IFFALSE 10501
// end ;
10788: PPOPN 5
10790: END
// function GetHexesNearHex ( x , y , dist ) ; var d , list_coords , b ; begin
10791: LD_INT 0
10793: PPUSH
10794: PPUSH
10795: PPUSH
10796: PPUSH
// result = [ [ x , y ] ] ;
10797: LD_ADDR_VAR 0 4
10801: PUSH
10802: LD_VAR 0 1
10806: PUSH
10807: LD_VAR 0 2
10811: PUSH
10812: EMPTY
10813: LIST
10814: LIST
10815: PUSH
10816: EMPTY
10817: LIST
10818: ST_TO_ADDR
// for d = 1 to dist do
10819: LD_ADDR_VAR 0 5
10823: PUSH
10824: DOUBLE
10825: LD_INT 1
10827: DEC
10828: ST_TO_ADDR
10829: LD_VAR 0 3
10833: PUSH
10834: FOR_TO
10835: IFFALSE 11430
// begin list_coords = [ ] ;
10837: LD_ADDR_VAR 0 6
10841: PUSH
10842: EMPTY
10843: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x , y - d ] ) ;
10844: LD_ADDR_VAR 0 6
10848: PUSH
10849: LD_VAR 0 6
10853: PPUSH
10854: LD_INT 1
10856: PPUSH
10857: LD_VAR 0 1
10861: PUSH
10862: LD_VAR 0 2
10866: PUSH
10867: LD_VAR 0 5
10871: MINUS
10872: PUSH
10873: EMPTY
10874: LIST
10875: LIST
10876: PPUSH
10877: CALL_OW 2
10881: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d , y ] ) ;
10882: LD_ADDR_VAR 0 6
10886: PUSH
10887: LD_VAR 0 6
10891: PPUSH
10892: LD_INT 1
10894: PPUSH
10895: LD_VAR 0 1
10899: PUSH
10900: LD_VAR 0 5
10904: PLUS
10905: PUSH
10906: LD_VAR 0 2
10910: PUSH
10911: EMPTY
10912: LIST
10913: LIST
10914: PPUSH
10915: CALL_OW 2
10919: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d , y + d ] ) ;
10920: LD_ADDR_VAR 0 6
10924: PUSH
10925: LD_VAR 0 6
10929: PPUSH
10930: LD_INT 1
10932: PPUSH
10933: LD_VAR 0 1
10937: PUSH
10938: LD_VAR 0 5
10942: PLUS
10943: PUSH
10944: LD_VAR 0 2
10948: PUSH
10949: LD_VAR 0 5
10953: PLUS
10954: PUSH
10955: EMPTY
10956: LIST
10957: LIST
10958: PPUSH
10959: CALL_OW 2
10963: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x , y + d ] ) ;
10964: LD_ADDR_VAR 0 6
10968: PUSH
10969: LD_VAR 0 6
10973: PPUSH
10974: LD_INT 1
10976: PPUSH
10977: LD_VAR 0 1
10981: PUSH
10982: LD_VAR 0 2
10986: PUSH
10987: LD_VAR 0 5
10991: PLUS
10992: PUSH
10993: EMPTY
10994: LIST
10995: LIST
10996: PPUSH
10997: CALL_OW 2
11001: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d , y ] ) ;
11002: LD_ADDR_VAR 0 6
11006: PUSH
11007: LD_VAR 0 6
11011: PPUSH
11012: LD_INT 1
11014: PPUSH
11015: LD_VAR 0 1
11019: PUSH
11020: LD_VAR 0 5
11024: MINUS
11025: PUSH
11026: LD_VAR 0 2
11030: PUSH
11031: EMPTY
11032: LIST
11033: LIST
11034: PPUSH
11035: CALL_OW 2
11039: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d , y - d ] ) ;
11040: LD_ADDR_VAR 0 6
11044: PUSH
11045: LD_VAR 0 6
11049: PPUSH
11050: LD_INT 1
11052: PPUSH
11053: LD_VAR 0 1
11057: PUSH
11058: LD_VAR 0 5
11062: MINUS
11063: PUSH
11064: LD_VAR 0 2
11068: PUSH
11069: LD_VAR 0 5
11073: MINUS
11074: PUSH
11075: EMPTY
11076: LIST
11077: LIST
11078: PPUSH
11079: CALL_OW 2
11083: ST_TO_ADDR
// b = 1 ;
11084: LD_ADDR_VAR 0 7
11088: PUSH
11089: LD_INT 1
11091: ST_TO_ADDR
// while b <= ( d - 1 ) do
11092: LD_VAR 0 7
11096: PUSH
11097: LD_VAR 0 5
11101: PUSH
11102: LD_INT 1
11104: MINUS
11105: LESSEQUAL
11106: IFFALSE 11412
// begin list_coords = Insert ( list_coords , 1 , [ x + b , y - d + b ] ) ;
11108: LD_ADDR_VAR 0 6
11112: PUSH
11113: LD_VAR 0 6
11117: PPUSH
11118: LD_INT 1
11120: PPUSH
11121: LD_VAR 0 1
11125: PUSH
11126: LD_VAR 0 7
11130: PLUS
11131: PUSH
11132: LD_VAR 0 2
11136: PUSH
11137: LD_VAR 0 5
11141: MINUS
11142: PUSH
11143: LD_VAR 0 7
11147: PLUS
11148: PUSH
11149: EMPTY
11150: LIST
11151: LIST
11152: PPUSH
11153: CALL_OW 2
11157: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d , y + b ] ) ;
11158: LD_ADDR_VAR 0 6
11162: PUSH
11163: LD_VAR 0 6
11167: PPUSH
11168: LD_INT 1
11170: PPUSH
11171: LD_VAR 0 1
11175: PUSH
11176: LD_VAR 0 5
11180: PLUS
11181: PUSH
11182: LD_VAR 0 2
11186: PUSH
11187: LD_VAR 0 7
11191: PLUS
11192: PUSH
11193: EMPTY
11194: LIST
11195: LIST
11196: PPUSH
11197: CALL_OW 2
11201: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x + d - b , y + d ] ) ;
11202: LD_ADDR_VAR 0 6
11206: PUSH
11207: LD_VAR 0 6
11211: PPUSH
11212: LD_INT 1
11214: PPUSH
11215: LD_VAR 0 1
11219: PUSH
11220: LD_VAR 0 5
11224: PLUS
11225: PUSH
11226: LD_VAR 0 7
11230: MINUS
11231: PUSH
11232: LD_VAR 0 2
11236: PUSH
11237: LD_VAR 0 5
11241: PLUS
11242: PUSH
11243: EMPTY
11244: LIST
11245: LIST
11246: PPUSH
11247: CALL_OW 2
11251: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - b , y + d - b ] ) ;
11252: LD_ADDR_VAR 0 6
11256: PUSH
11257: LD_VAR 0 6
11261: PPUSH
11262: LD_INT 1
11264: PPUSH
11265: LD_VAR 0 1
11269: PUSH
11270: LD_VAR 0 7
11274: MINUS
11275: PUSH
11276: LD_VAR 0 2
11280: PUSH
11281: LD_VAR 0 5
11285: PLUS
11286: PUSH
11287: LD_VAR 0 7
11291: MINUS
11292: PUSH
11293: EMPTY
11294: LIST
11295: LIST
11296: PPUSH
11297: CALL_OW 2
11301: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d , y - b ] ) ;
11302: LD_ADDR_VAR 0 6
11306: PUSH
11307: LD_VAR 0 6
11311: PPUSH
11312: LD_INT 1
11314: PPUSH
11315: LD_VAR 0 1
11319: PUSH
11320: LD_VAR 0 5
11324: MINUS
11325: PUSH
11326: LD_VAR 0 2
11330: PUSH
11331: LD_VAR 0 7
11335: MINUS
11336: PUSH
11337: EMPTY
11338: LIST
11339: LIST
11340: PPUSH
11341: CALL_OW 2
11345: ST_TO_ADDR
// list_coords = Insert ( list_coords , 1 , [ x - d + b , y - d ] ) ;
11346: LD_ADDR_VAR 0 6
11350: PUSH
11351: LD_VAR 0 6
11355: PPUSH
11356: LD_INT 1
11358: PPUSH
11359: LD_VAR 0 1
11363: PUSH
11364: LD_VAR 0 5
11368: MINUS
11369: PUSH
11370: LD_VAR 0 7
11374: PLUS
11375: PUSH
11376: LD_VAR 0 2
11380: PUSH
11381: LD_VAR 0 5
11385: MINUS
11386: PUSH
11387: EMPTY
11388: LIST
11389: LIST
11390: PPUSH
11391: CALL_OW 2
11395: ST_TO_ADDR
// b = b + 1 ;
11396: LD_ADDR_VAR 0 7
11400: PUSH
11401: LD_VAR 0 7
11405: PUSH
11406: LD_INT 1
11408: PLUS
11409: ST_TO_ADDR
// end ;
11410: GO 11092
// result = result ^ list_coords ;
11412: LD_ADDR_VAR 0 4
11416: PUSH
11417: LD_VAR 0 4
11421: PUSH
11422: LD_VAR 0 6
11426: ADD
11427: ST_TO_ADDR
// end ;
11428: GO 10834
11430: POP
11431: POP
// end ;
11432: LD_VAR 0 4
11436: RET
// every 0 0$1 do var i ;
11437: GO 11439
11439: DISABLE
11440: LD_INT 0
11442: PPUSH
// begin repeat wait ( 0 0$1 ) ;
11443: LD_INT 35
11445: PPUSH
11446: CALL_OW 67
// if dont_gather_crates = 0 then
11450: LD_LOC 1
11454: PUSH
11455: LD_INT 0
11457: EQUAL
11458: IFFALSE 11462
// continue ;
11460: GO 11443
// i = 1 ;
11462: LD_ADDR_VAR 0 1
11466: PUSH
11467: LD_INT 1
11469: ST_TO_ADDR
// while i <= dont_gather_crates do
11470: LD_VAR 0 1
11474: PUSH
11475: LD_LOC 1
11479: LESSEQUAL
11480: IFFALSE 11560
// begin if GetResourceAmountXY ( dont_gather_crates [ i ] [ 1 ] , dont_gather_crates [ i ] [ 2 ] ) = 0 then
11482: LD_LOC 1
11486: PUSH
11487: LD_VAR 0 1
11491: ARRAY
11492: PUSH
11493: LD_INT 1
11495: ARRAY
11496: PPUSH
11497: LD_LOC 1
11501: PUSH
11502: LD_VAR 0 1
11506: ARRAY
11507: PUSH
11508: LD_INT 2
11510: ARRAY
11511: PPUSH
11512: CALL_OW 284
11516: PUSH
11517: LD_INT 0
11519: EQUAL
11520: IFFALSE 11544
// begin dont_gather_crates = Delete ( dont_gather_crates , i ) ;
11522: LD_ADDR_LOC 1
11526: PUSH
11527: LD_LOC 1
11531: PPUSH
11532: LD_VAR 0 1
11536: PPUSH
11537: CALL_OW 3
11541: ST_TO_ADDR
// continue ;
11542: GO 11470
// end ; i = i + 1 ;
11544: LD_ADDR_VAR 0 1
11548: PUSH
11549: LD_VAR 0 1
11553: PUSH
11554: LD_INT 1
11556: PLUS
11557: ST_TO_ADDR
// end ;
11558: GO 11470
// until false ;
11560: LD_INT 0
11562: IFFALSE 11443
// end ;
11564: PPOPN 1
11566: END
// every 0 0$1 + 0 0$0.1 do var temp_list , c , i , fog_numbers , crates_list ;
11567: GO 11569
11569: DISABLE
11570: LD_INT 0
11572: PPUSH
11573: PPUSH
11574: PPUSH
11575: PPUSH
11576: PPUSH
// begin repeat wait ( 0 0$1 ) ;
11577: LD_INT 35
11579: PPUSH
11580: CALL_OW 67
// temp_list = GetListOfCratesInArea ( whole_map_area ) ;
11584: LD_ADDR_VAR 0 1
11588: PUSH
11589: LD_INT 14
11591: PPUSH
11592: CALL_OW 435
11596: ST_TO_ADDR
// if temp_list = 0 then
11597: LD_VAR 0 1
11601: PUSH
11602: LD_INT 0
11604: EQUAL
11605: IFFALSE 11609
// continue ;
11607: GO 11577
// fog_numbers = [ ] ;
11609: LD_ADDR_VAR 0 4
11613: PUSH
11614: EMPTY
11615: ST_TO_ADDR
// for i in ai_bases do
11616: LD_ADDR_VAR 0 3
11620: PUSH
11621: LD_EXP 40
11625: PUSH
11626: FOR_IN
11627: IFFALSE 11657
// fog_numbers = fog_numbers union GetSideFog ( GetBaseSide ( i ) ) ;
11629: LD_ADDR_VAR 0 4
11633: PUSH
11634: LD_VAR 0 4
11638: PUSH
11639: LD_VAR 0 3
11643: PPUSH
11644: CALL 17829 0 1
11648: PPUSH
11649: CALL_OW 342
11653: UNION
11654: ST_TO_ADDR
11655: GO 11626
11657: POP
11658: POP
// if fog_numbers = 0 then
11659: LD_VAR 0 4
11663: PUSH
11664: LD_INT 0
11666: EQUAL
11667: IFFALSE 11671
// continue ;
11669: GO 11577
// c = 1 ;
11671: LD_ADDR_VAR 0 2
11675: PUSH
11676: LD_INT 1
11678: ST_TO_ADDR
// crates_list = [ ] ;
11679: LD_ADDR_VAR 0 5
11683: PUSH
11684: EMPTY
11685: ST_TO_ADDR
// repeat crates_list = Insert ( crates_list , 1 , [ temp_list [ c ] , temp_list [ c + 1 ] ] ) ;
11686: LD_ADDR_VAR 0 5
11690: PUSH
11691: LD_VAR 0 5
11695: PPUSH
11696: LD_INT 1
11698: PPUSH
11699: LD_VAR 0 1
11703: PUSH
11704: LD_VAR 0 2
11708: ARRAY
11709: PUSH
11710: LD_VAR 0 1
11714: PUSH
11715: LD_VAR 0 2
11719: PUSH
11720: LD_INT 1
11722: PLUS
11723: ARRAY
11724: PUSH
11725: EMPTY
11726: LIST
11727: LIST
11728: PPUSH
11729: CALL_OW 2
11733: ST_TO_ADDR
// c = c + 2 ;
11734: LD_ADDR_VAR 0 2
11738: PUSH
11739: LD_VAR 0 2
11743: PUSH
11744: LD_INT 2
11746: PLUS
11747: ST_TO_ADDR
// until c > temp_list ;
11748: LD_VAR 0 2
11752: PUSH
11753: LD_VAR 0 1
11757: GREATER
11758: IFFALSE 11686
// for i in fog_numbers do
11760: LD_ADDR_VAR 0 3
11764: PUSH
11765: LD_VAR 0 4
11769: PUSH
11770: FOR_IN
11771: IFFALSE 11822
// begin temp_list = known_crates_list [ i ] union crates_list ;
11773: LD_ADDR_VAR 0 1
11777: PUSH
11778: LD_LOC 3
11782: PUSH
11783: LD_VAR 0 3
11787: ARRAY
11788: PUSH
11789: LD_VAR 0 5
11793: UNION
11794: ST_TO_ADDR
// known_crates_list = Replace ( known_crates_list , i , temp_list ) ;
11795: LD_ADDR_LOC 3
11799: PUSH
11800: LD_LOC 3
11804: PPUSH
11805: LD_VAR 0 3
11809: PPUSH
11810: LD_VAR 0 1
11814: PPUSH
11815: CALL_OW 1
11819: ST_TO_ADDR
// end ;
11820: GO 11770
11822: POP
11823: POP
// until false ;
11824: LD_INT 0
11826: IFFALSE 11577
// end ;
11828: PPOPN 5
11830: END
// every 0 0$1 + 0 0$0.2 do var i , fog_numbers , k , temp_list ;
11831: GO 11833
11833: DISABLE
11834: LD_INT 0
11836: PPUSH
11837: PPUSH
11838: PPUSH
11839: PPUSH
// begin repeat wait ( 0 0$1 ) ;
11840: LD_INT 35
11842: PPUSH
11843: CALL_OW 67
// fog_numbers = [ ] ;
11847: LD_ADDR_VAR 0 2
11851: PUSH
11852: EMPTY
11853: ST_TO_ADDR
// for i in ai_bases do
11854: LD_ADDR_VAR 0 1
11858: PUSH
11859: LD_EXP 40
11863: PUSH
11864: FOR_IN
11865: IFFALSE 11895
// fog_numbers = fog_numbers union GetSideFog ( GetBaseSide ( i ) ) ;
11867: LD_ADDR_VAR 0 2
11871: PUSH
11872: LD_VAR 0 2
11876: PUSH
11877: LD_VAR 0 1
11881: PPUSH
11882: CALL 17829 0 1
11886: PPUSH
11887: CALL_OW 342
11891: UNION
11892: ST_TO_ADDR
11893: GO 11864
11895: POP
11896: POP
// if fog_numbers = 0 then
11897: LD_VAR 0 2
11901: PUSH
11902: LD_INT 0
11904: EQUAL
11905: IFFALSE 11909
// continue ;
11907: GO 11840
// for i in fog_numbers do
11909: LD_ADDR_VAR 0 1
11913: PUSH
11914: LD_VAR 0 2
11918: PUSH
11919: FOR_IN
11920: IFFALSE 12128
// begin k = 1 ;
11922: LD_ADDR_VAR 0 3
11926: PUSH
11927: LD_INT 1
11929: ST_TO_ADDR
// while k <= known_crates_list [ i ] + 0 do
11930: LD_VAR 0 3
11934: PUSH
11935: LD_LOC 3
11939: PUSH
11940: LD_VAR 0 1
11944: ARRAY
11945: PUSH
11946: LD_INT 0
11948: PLUS
11949: LESSEQUAL
11950: IFFALSE 12126
// begin if SeeXY ( i , known_crates_list [ i ] [ k ] [ 1 ] , known_crates_list [ i ] [ k ] [ 2 ] ) and GetResourceAmountXY ( known_crates_list [ i ] [ k ] [ 1 ] , known_crates_list [ i ] [ k ] [ 2 ] ) = 0 then
11952: LD_VAR 0 1
11956: PPUSH
11957: LD_LOC 3
11961: PUSH
11962: LD_VAR 0 1
11966: ARRAY
11967: PUSH
11968: LD_VAR 0 3
11972: ARRAY
11973: PUSH
11974: LD_INT 1
11976: ARRAY
11977: PPUSH
11978: LD_LOC 3
11982: PUSH
11983: LD_VAR 0 1
11987: ARRAY
11988: PUSH
11989: LD_VAR 0 3
11993: ARRAY
11994: PUSH
11995: LD_INT 2
11997: ARRAY
11998: PPUSH
11999: CALL_OW 293
12003: PUSH
12004: LD_LOC 3
12008: PUSH
12009: LD_VAR 0 1
12013: ARRAY
12014: PUSH
12015: LD_VAR 0 3
12019: ARRAY
12020: PUSH
12021: LD_INT 1
12023: ARRAY
12024: PPUSH
12025: LD_LOC 3
12029: PUSH
12030: LD_VAR 0 1
12034: ARRAY
12035: PUSH
12036: LD_VAR 0 3
12040: ARRAY
12041: PUSH
12042: LD_INT 2
12044: ARRAY
12045: PPUSH
12046: CALL_OW 284
12050: PUSH
12051: LD_INT 0
12053: EQUAL
12054: AND
12055: IFFALSE 12110
// begin temp_list = Delete ( known_crates_list [ i ] , k ) ;
12057: LD_ADDR_VAR 0 4
12061: PUSH
12062: LD_LOC 3
12066: PUSH
12067: LD_VAR 0 1
12071: ARRAY
12072: PPUSH
12073: LD_VAR 0 3
12077: PPUSH
12078: CALL_OW 3
12082: ST_TO_ADDR
// known_crates_list = Replace ( known_crates_list , i , temp_list ) ;
12083: LD_ADDR_LOC 3
12087: PUSH
12088: LD_LOC 3
12092: PPUSH
12093: LD_VAR 0 1
12097: PPUSH
12098: LD_VAR 0 4
12102: PPUSH
12103: CALL_OW 1
12107: ST_TO_ADDR
// continue ;
12108: GO 11930
// end ; k = k + 1 ;
12110: LD_ADDR_VAR 0 3
12114: PUSH
12115: LD_VAR 0 3
12119: PUSH
12120: LD_INT 1
12122: PLUS
12123: ST_TO_ADDR
// end ;
12124: GO 11930
// end ;
12126: GO 11919
12128: POP
12129: POP
// until false ;
12130: LD_INT 0
12132: IFFALSE 11840
// end ;
12134: PPOPN 4
12136: END
// export function GetListOfCratesInArea_ForGathering ( base , area ) ; var temp_list , c ; begin
12137: LD_INT 0
12139: PPUSH
12140: PPUSH
12141: PPUSH
// result = [ ] ;
12142: LD_ADDR_VAR 0 3
12146: PUSH
12147: EMPTY
12148: ST_TO_ADDR
// temp_list = [ ] ;
12149: LD_ADDR_VAR 0 4
12153: PUSH
12154: EMPTY
12155: ST_TO_ADDR
// for c in known_crates_list [ GetSideFog ( GetBaseSide ( base ) ) ] do
12156: LD_ADDR_VAR 0 5
12160: PUSH
12161: LD_LOC 3
12165: PUSH
12166: LD_VAR 0 1
12170: PPUSH
12171: CALL 17829 0 1
12175: PPUSH
12176: CALL_OW 342
12180: ARRAY
12181: PUSH
12182: FOR_IN
12183: IFFALSE 12235
// if InArea ( c [ 1 ] , c [ 2 ] , area ) then
12185: LD_VAR 0 5
12189: PUSH
12190: LD_INT 1
12192: ARRAY
12193: PPUSH
12194: LD_VAR 0 5
12198: PUSH
12199: LD_INT 2
12201: ARRAY
12202: PPUSH
12203: LD_VAR 0 2
12207: PPUSH
12208: CALL_OW 309
12212: IFFALSE 12233
// temp_list = temp_list ^ [ c ] ;
12214: LD_ADDR_VAR 0 4
12218: PUSH
12219: LD_VAR 0 4
12223: PUSH
12224: LD_VAR 0 5
12228: PUSH
12229: EMPTY
12230: LIST
12231: ADD
12232: ST_TO_ADDR
12233: GO 12182
12235: POP
12236: POP
// for c in temp_list do
12237: LD_ADDR_VAR 0 5
12241: PUSH
12242: LD_VAR 0 4
12246: PUSH
12247: FOR_IN
12248: IFFALSE 12346
// begin if GetResourceTypeXY ( c [ 1 ] , c [ 2 ] ) <> mat_artifact and ( InArea ( c [ 1 ] , c [ 2 ] , GetBaseArea ( base ) ) or not c in dont_gather_crates ) then
12250: LD_VAR 0 5
12254: PUSH
12255: LD_INT 1
12257: ARRAY
12258: PPUSH
12259: LD_VAR 0 5
12263: PUSH
12264: LD_INT 2
12266: ARRAY
12267: PPUSH
12268: CALL_OW 283
12272: PUSH
12273: LD_INT 4
12275: NONEQUAL
12276: PUSH
12277: LD_VAR 0 5
12281: PUSH
12282: LD_INT 1
12284: ARRAY
12285: PPUSH
12286: LD_VAR 0 5
12290: PUSH
12291: LD_INT 2
12293: ARRAY
12294: PPUSH
12295: LD_VAR 0 1
12299: PPUSH
12300: CALL 17847 0 1
12304: PPUSH
12305: CALL_OW 309
12309: PUSH
12310: LD_VAR 0 5
12314: PUSH
12315: LD_LOC 1
12319: IN
12320: NOT
12321: OR
12322: AND
12323: IFFALSE 12344
// result = result ^ [ c ] ;
12325: LD_ADDR_VAR 0 3
12329: PUSH
12330: LD_VAR 0 3
12334: PUSH
12335: LD_VAR 0 5
12339: PUSH
12340: EMPTY
12341: LIST
12342: ADD
12343: ST_TO_ADDR
// end ;
12344: GO 12247
12346: POP
12347: POP
// end ; end_of_file
12348: LD_VAR 0 3
12352: RET
// export function AI_GetAwayFromXY ( unit1 , x , y , dist , add ) ; var list_nearest , list_coords , temp_dir , dir_list , b , min_dist , temp_dist , c , rand_num , rand_near_hex , attempts ; begin
12353: LD_INT 0
12355: PPUSH
12356: PPUSH
12357: PPUSH
12358: PPUSH
12359: PPUSH
12360: PPUSH
12361: PPUSH
12362: PPUSH
12363: PPUSH
12364: PPUSH
12365: PPUSH
12366: PPUSH
// if not IsOk ( unit1 ) or dist = 1 or not ValidHex ( x , y ) or GetDistUnitXY ( unit1 , x , y ) >= dist or not add in [ true , false ] then
12367: LD_VAR 0 1
12371: PPUSH
12372: CALL_OW 302
12376: NOT
12377: PUSH
12378: LD_VAR 0 4
12382: PUSH
12383: LD_INT 1
12385: EQUAL
12386: OR
12387: PUSH
12388: LD_VAR 0 2
12392: PPUSH
12393: LD_VAR 0 3
12397: PPUSH
12398: CALL_OW 488
12402: NOT
12403: OR
12404: PUSH
12405: LD_VAR 0 1
12409: PPUSH
12410: LD_VAR 0 2
12414: PPUSH
12415: LD_VAR 0 3
12419: PPUSH
12420: CALL_OW 297
12424: PUSH
12425: LD_VAR 0 4
12429: GREATEREQUAL
12430: OR
12431: PUSH
12432: LD_VAR 0 5
12436: PUSH
12437: LD_INT 1
12439: PUSH
12440: LD_INT 0
12442: PUSH
12443: EMPTY
12444: LIST
12445: LIST
12446: IN
12447: NOT
12448: OR
12449: IFFALSE 12453
// exit ;
12451: GO 14010
// attempts = 0 ;
12453: LD_ADDR_VAR 0 17
12457: PUSH
12458: LD_INT 0
12460: ST_TO_ADDR
// repeat list_nearest = [ ] ;
12461: LD_ADDR_VAR 0 7
12465: PUSH
12466: EMPTY
12467: ST_TO_ADDR
// list_coords = [ ] ;
12468: LD_ADDR_VAR 0 8
12472: PUSH
12473: EMPTY
12474: ST_TO_ADDR
// temp_dir = AI_GetTurnDirection ( x , y , GetX ( unit1 ) , GetY ( unit1 ) ) ;
12475: LD_ADDR_VAR 0 9
12479: PUSH
12480: LD_VAR 0 2
12484: PPUSH
12485: LD_VAR 0 3
12489: PPUSH
12490: LD_VAR 0 1
12494: PPUSH
12495: CALL_OW 250
12499: PPUSH
12500: LD_VAR 0 1
12504: PPUSH
12505: CALL_OW 251
12509: PPUSH
12510: CALL 14015 0 4
12514: ST_TO_ADDR
// if attempts = 0 then
12515: LD_VAR 0 17
12519: PUSH
12520: LD_INT 0
12522: EQUAL
12523: IFFALSE 12631
// begin dir_list = [ temp_dir , temp_dir + 1 , temp_dir - 1 ] ;
12525: LD_ADDR_VAR 0 10
12529: PUSH
12530: LD_VAR 0 9
12534: PUSH
12535: LD_VAR 0 9
12539: PUSH
12540: LD_INT 1
12542: PLUS
12543: PUSH
12544: LD_VAR 0 9
12548: PUSH
12549: LD_INT 1
12551: MINUS
12552: PUSH
12553: EMPTY
12554: LIST
12555: LIST
12556: LIST
12557: ST_TO_ADDR
// if dir_list [ 2 ] = 6 then
12558: LD_VAR 0 10
12562: PUSH
12563: LD_INT 2
12565: ARRAY
12566: PUSH
12567: LD_INT 6
12569: EQUAL
12570: IFFALSE 12593
// dir_list = Replace ( dir_list , 2 , 0 ) ;
12572: LD_ADDR_VAR 0 10
12576: PUSH
12577: LD_VAR 0 10
12581: PPUSH
12582: LD_INT 2
12584: PPUSH
12585: LD_INT 0
12587: PPUSH
12588: CALL_OW 1
12592: ST_TO_ADDR
// if dir_list [ 3 ] = - 1 then
12593: LD_VAR 0 10
12597: PUSH
12598: LD_INT 3
12600: ARRAY
12601: PUSH
12602: LD_INT 1
12604: NEG
12605: EQUAL
12606: IFFALSE 12629
// dir_list = Replace ( dir_list , 3 , 5 ) ;
12608: LD_ADDR_VAR 0 10
12612: PUSH
12613: LD_VAR 0 10
12617: PPUSH
12618: LD_INT 3
12620: PPUSH
12621: LD_INT 5
12623: PPUSH
12624: CALL_OW 1
12628: ST_TO_ADDR
// end else
12629: GO 12668
// dir_list = [ 0 , 1 , 2 , 3 , 4 , 5 ] diff temp_dir ;
12631: LD_ADDR_VAR 0 10
12635: PUSH
12636: LD_INT 0
12638: PUSH
12639: LD_INT 1
12641: PUSH
12642: LD_INT 2
12644: PUSH
12645: LD_INT 3
12647: PUSH
12648: LD_INT 4
12650: PUSH
12651: LD_INT 5
12653: PUSH
12654: EMPTY
12655: LIST
12656: LIST
12657: LIST
12658: LIST
12659: LIST
12660: LIST
12661: PUSH
12662: LD_VAR 0 9
12666: DIFF
12667: ST_TO_ADDR
// for c = 1 to ( dir_list + 0 ) do
12668: LD_ADDR_VAR 0 14
12672: PUSH
12673: DOUBLE
12674: LD_INT 1
12676: DEC
12677: ST_TO_ADDR
12678: LD_VAR 0 10
12682: PUSH
12683: LD_INT 0
12685: PLUS
12686: PUSH
12687: FOR_TO
12688: IFFALSE 13010
// case dir_list [ c ] of 0 :
12690: LD_VAR 0 10
12694: PUSH
12695: LD_VAR 0 14
12699: ARRAY
12700: PUSH
12701: LD_INT 0
12703: DOUBLE
12704: EQUAL
12705: IFTRUE 12709
12707: GO 12750
12709: POP
// list_coords = Insert ( list_coords , 1 , [ x , y - dist ] ) ; 1 :
12710: LD_ADDR_VAR 0 8
12714: PUSH
12715: LD_VAR 0 8
12719: PPUSH
12720: LD_INT 1
12722: PPUSH
12723: LD_VAR 0 2
12727: PUSH
12728: LD_VAR 0 3
12732: PUSH
12733: LD_VAR 0 4
12737: MINUS
12738: PUSH
12739: EMPTY
12740: LIST
12741: LIST
12742: PPUSH
12743: CALL_OW 2
12747: ST_TO_ADDR
12748: GO 13008
12750: LD_INT 1
12752: DOUBLE
12753: EQUAL
12754: IFTRUE 12758
12756: GO 12799
12758: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y ] ) ; 2 :
12759: LD_ADDR_VAR 0 8
12763: PUSH
12764: LD_VAR 0 8
12768: PPUSH
12769: LD_INT 1
12771: PPUSH
12772: LD_VAR 0 2
12776: PUSH
12777: LD_VAR 0 4
12781: PLUS
12782: PUSH
12783: LD_VAR 0 3
12787: PUSH
12788: EMPTY
12789: LIST
12790: LIST
12791: PPUSH
12792: CALL_OW 2
12796: ST_TO_ADDR
12797: GO 13008
12799: LD_INT 2
12801: DOUBLE
12802: EQUAL
12803: IFTRUE 12807
12805: GO 12854
12807: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + dist ] ) ; 3 :
12808: LD_ADDR_VAR 0 8
12812: PUSH
12813: LD_VAR 0 8
12817: PPUSH
12818: LD_INT 1
12820: PPUSH
12821: LD_VAR 0 2
12825: PUSH
12826: LD_VAR 0 4
12830: PLUS
12831: PUSH
12832: LD_VAR 0 3
12836: PUSH
12837: LD_VAR 0 4
12841: PLUS
12842: PUSH
12843: EMPTY
12844: LIST
12845: LIST
12846: PPUSH
12847: CALL_OW 2
12851: ST_TO_ADDR
12852: GO 13008
12854: LD_INT 3
12856: DOUBLE
12857: EQUAL
12858: IFTRUE 12862
12860: GO 12903
12862: POP
// list_coords = Insert ( list_coords , 1 , [ x , y + dist ] ) ; 4 :
12863: LD_ADDR_VAR 0 8
12867: PUSH
12868: LD_VAR 0 8
12872: PPUSH
12873: LD_INT 1
12875: PPUSH
12876: LD_VAR 0 2
12880: PUSH
12881: LD_VAR 0 3
12885: PUSH
12886: LD_VAR 0 4
12890: PLUS
12891: PUSH
12892: EMPTY
12893: LIST
12894: LIST
12895: PPUSH
12896: CALL_OW 2
12900: ST_TO_ADDR
12901: GO 13008
12903: LD_INT 4
12905: DOUBLE
12906: EQUAL
12907: IFTRUE 12911
12909: GO 12952
12911: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y ] ) ; 5 :
12912: LD_ADDR_VAR 0 8
12916: PUSH
12917: LD_VAR 0 8
12921: PPUSH
12922: LD_INT 1
12924: PPUSH
12925: LD_VAR 0 2
12929: PUSH
12930: LD_VAR 0 4
12934: MINUS
12935: PUSH
12936: LD_VAR 0 3
12940: PUSH
12941: EMPTY
12942: LIST
12943: LIST
12944: PPUSH
12945: CALL_OW 2
12949: ST_TO_ADDR
12950: GO 13008
12952: LD_INT 5
12954: DOUBLE
12955: EQUAL
12956: IFTRUE 12960
12958: GO 13007
12960: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - dist ] ) ; end ;
12961: LD_ADDR_VAR 0 8
12965: PUSH
12966: LD_VAR 0 8
12970: PPUSH
12971: LD_INT 1
12973: PPUSH
12974: LD_VAR 0 2
12978: PUSH
12979: LD_VAR 0 4
12983: MINUS
12984: PUSH
12985: LD_VAR 0 3
12989: PUSH
12990: LD_VAR 0 4
12994: MINUS
12995: PUSH
12996: EMPTY
12997: LIST
12998: LIST
12999: PPUSH
13000: CALL_OW 2
13004: ST_TO_ADDR
13005: GO 13008
13007: POP
13008: GO 12687
13010: POP
13011: POP
// if dist < 30 then
13012: LD_VAR 0 4
13016: PUSH
13017: LD_INT 30
13019: LESS
13020: IFFALSE 13032
// c = 1 else
13022: LD_ADDR_VAR 0 14
13026: PUSH
13027: LD_INT 1
13029: ST_TO_ADDR
13030: GO 13040
// c = 2 ;
13032: LD_ADDR_VAR 0 14
13036: PUSH
13037: LD_INT 2
13039: ST_TO_ADDR
// b = 1 ;
13040: LD_ADDR_VAR 0 11
13044: PUSH
13045: LD_INT 1
13047: ST_TO_ADDR
// while b <= ( dist - 1 ) do
13048: LD_VAR 0 11
13052: PUSH
13053: LD_VAR 0 4
13057: PUSH
13058: LD_INT 1
13060: MINUS
13061: LESSEQUAL
13062: IFFALSE 13490
// begin if 0 in dir_list and 1 in dir_list then
13064: LD_INT 0
13066: PUSH
13067: LD_VAR 0 10
13071: IN
13072: PUSH
13073: LD_INT 1
13075: PUSH
13076: LD_VAR 0 10
13080: IN
13081: AND
13082: IFFALSE 13134
// list_coords = Insert ( list_coords , 1 , [ x + b , y - dist + b ] ) ;
13084: LD_ADDR_VAR 0 8
13088: PUSH
13089: LD_VAR 0 8
13093: PPUSH
13094: LD_INT 1
13096: PPUSH
13097: LD_VAR 0 2
13101: PUSH
13102: LD_VAR 0 11
13106: PLUS
13107: PUSH
13108: LD_VAR 0 3
13112: PUSH
13113: LD_VAR 0 4
13117: MINUS
13118: PUSH
13119: LD_VAR 0 11
13123: PLUS
13124: PUSH
13125: EMPTY
13126: LIST
13127: LIST
13128: PPUSH
13129: CALL_OW 2
13133: ST_TO_ADDR
// if 1 in dir_list and 2 in dir_list then
13134: LD_INT 1
13136: PUSH
13137: LD_VAR 0 10
13141: IN
13142: PUSH
13143: LD_INT 2
13145: PUSH
13146: LD_VAR 0 10
13150: IN
13151: AND
13152: IFFALSE 13198
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + b ] ) ;
13154: LD_ADDR_VAR 0 8
13158: PUSH
13159: LD_VAR 0 8
13163: PPUSH
13164: LD_INT 1
13166: PPUSH
13167: LD_VAR 0 2
13171: PUSH
13172: LD_VAR 0 4
13176: PLUS
13177: PUSH
13178: LD_VAR 0 3
13182: PUSH
13183: LD_VAR 0 11
13187: PLUS
13188: PUSH
13189: EMPTY
13190: LIST
13191: LIST
13192: PPUSH
13193: CALL_OW 2
13197: ST_TO_ADDR
// if 2 in dir_list and 3 in dir_list then
13198: LD_INT 2
13200: PUSH
13201: LD_VAR 0 10
13205: IN
13206: PUSH
13207: LD_INT 3
13209: PUSH
13210: LD_VAR 0 10
13214: IN
13215: AND
13216: IFFALSE 13268
// list_coords = Insert ( list_coords , 1 , [ x + dist - b , y + dist ] ) ;
13218: LD_ADDR_VAR 0 8
13222: PUSH
13223: LD_VAR 0 8
13227: PPUSH
13228: LD_INT 1
13230: PPUSH
13231: LD_VAR 0 2
13235: PUSH
13236: LD_VAR 0 4
13240: PLUS
13241: PUSH
13242: LD_VAR 0 11
13246: MINUS
13247: PUSH
13248: LD_VAR 0 3
13252: PUSH
13253: LD_VAR 0 4
13257: PLUS
13258: PUSH
13259: EMPTY
13260: LIST
13261: LIST
13262: PPUSH
13263: CALL_OW 2
13267: ST_TO_ADDR
// if 3 in dir_list and 4 in dir_list then
13268: LD_INT 3
13270: PUSH
13271: LD_VAR 0 10
13275: IN
13276: PUSH
13277: LD_INT 4
13279: PUSH
13280: LD_VAR 0 10
13284: IN
13285: AND
13286: IFFALSE 13338
// list_coords = Insert ( list_coords , 1 , [ x - b , y + dist - b ] ) ;
13288: LD_ADDR_VAR 0 8
13292: PUSH
13293: LD_VAR 0 8
13297: PPUSH
13298: LD_INT 1
13300: PPUSH
13301: LD_VAR 0 2
13305: PUSH
13306: LD_VAR 0 11
13310: MINUS
13311: PUSH
13312: LD_VAR 0 3
13316: PUSH
13317: LD_VAR 0 4
13321: PLUS
13322: PUSH
13323: LD_VAR 0 11
13327: MINUS
13328: PUSH
13329: EMPTY
13330: LIST
13331: LIST
13332: PPUSH
13333: CALL_OW 2
13337: ST_TO_ADDR
// if 4 in dir_list and 5 in dir_list then
13338: LD_INT 4
13340: PUSH
13341: LD_VAR 0 10
13345: IN
13346: PUSH
13347: LD_INT 5
13349: PUSH
13350: LD_VAR 0 10
13354: IN
13355: AND
13356: IFFALSE 13402
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - b ] ) ;
13358: LD_ADDR_VAR 0 8
13362: PUSH
13363: LD_VAR 0 8
13367: PPUSH
13368: LD_INT 1
13370: PPUSH
13371: LD_VAR 0 2
13375: PUSH
13376: LD_VAR 0 4
13380: MINUS
13381: PUSH
13382: LD_VAR 0 3
13386: PUSH
13387: LD_VAR 0 11
13391: MINUS
13392: PUSH
13393: EMPTY
13394: LIST
13395: LIST
13396: PPUSH
13397: CALL_OW 2
13401: ST_TO_ADDR
// if 5 in dir_list and 0 in dir_list then
13402: LD_INT 5
13404: PUSH
13405: LD_VAR 0 10
13409: IN
13410: PUSH
13411: LD_INT 0
13413: PUSH
13414: LD_VAR 0 10
13418: IN
13419: AND
13420: IFFALSE 13472
// list_coords = Insert ( list_coords , 1 , [ x - dist + b , y - dist ] ) ;
13422: LD_ADDR_VAR 0 8
13426: PUSH
13427: LD_VAR 0 8
13431: PPUSH
13432: LD_INT 1
13434: PPUSH
13435: LD_VAR 0 2
13439: PUSH
13440: LD_VAR 0 4
13444: MINUS
13445: PUSH
13446: LD_VAR 0 11
13450: PLUS
13451: PUSH
13452: LD_VAR 0 3
13456: PUSH
13457: LD_VAR 0 4
13461: MINUS
13462: PUSH
13463: EMPTY
13464: LIST
13465: LIST
13466: PPUSH
13467: CALL_OW 2
13471: ST_TO_ADDR
// b = b + c end ;
13472: LD_ADDR_VAR 0 11
13476: PUSH
13477: LD_VAR 0 11
13481: PUSH
13482: LD_VAR 0 14
13486: PLUS
13487: ST_TO_ADDR
13488: GO 13048
// if list_coords = 0 then
13490: LD_VAR 0 8
13494: PUSH
13495: LD_INT 0
13497: EQUAL
13498: IFFALSE 13502
// exit ;
13500: GO 14010
// repeat min_dist = 5000 ;
13502: LD_ADDR_VAR 0 12
13506: PUSH
13507: LD_INT 5000
13509: ST_TO_ADDR
// for b in list_coords do
13510: LD_ADDR_VAR 0 11
13514: PUSH
13515: LD_VAR 0 8
13519: PUSH
13520: FOR_IN
13521: IFFALSE 13580
// begin temp_dist = GetDistUnitXY ( unit1 , b [ 1 ] , b [ 2 ] ) ;
13523: LD_ADDR_VAR 0 13
13527: PUSH
13528: LD_VAR 0 1
13532: PPUSH
13533: LD_VAR 0 11
13537: PUSH
13538: LD_INT 1
13540: ARRAY
13541: PPUSH
13542: LD_VAR 0 11
13546: PUSH
13547: LD_INT 2
13549: ARRAY
13550: PPUSH
13551: CALL_OW 297
13555: ST_TO_ADDR
// if temp_dist < min_dist then
13556: LD_VAR 0 13
13560: PUSH
13561: LD_VAR 0 12
13565: LESS
13566: IFFALSE 13578
// min_dist = temp_dist ;
13568: LD_ADDR_VAR 0 12
13572: PUSH
13573: LD_VAR 0 13
13577: ST_TO_ADDR
// end ;
13578: GO 13520
13580: POP
13581: POP
// c = 0 ;
13582: LD_ADDR_VAR 0 14
13586: PUSH
13587: LD_INT 0
13589: ST_TO_ADDR
// repeat c = c + 1 ;
13590: LD_ADDR_VAR 0 14
13594: PUSH
13595: LD_VAR 0 14
13599: PUSH
13600: LD_INT 1
13602: PLUS
13603: ST_TO_ADDR
// if GetDistUnitXY ( unit1 , list_coords [ c ] [ 1 ] , list_coords [ c ] [ 2 ] ) = min_dist then
13604: LD_VAR 0 1
13608: PPUSH
13609: LD_VAR 0 8
13613: PUSH
13614: LD_VAR 0 14
13618: ARRAY
13619: PUSH
13620: LD_INT 1
13622: ARRAY
13623: PPUSH
13624: LD_VAR 0 8
13628: PUSH
13629: LD_VAR 0 14
13633: ARRAY
13634: PUSH
13635: LD_INT 2
13637: ARRAY
13638: PPUSH
13639: CALL_OW 297
13643: PUSH
13644: LD_VAR 0 12
13648: EQUAL
13649: IFFALSE 13714
// begin list_nearest = Insert ( list_nearest , 1 , list_coords [ c ] ) ;
13651: LD_ADDR_VAR 0 7
13655: PUSH
13656: LD_VAR 0 7
13660: PPUSH
13661: LD_INT 1
13663: PPUSH
13664: LD_VAR 0 8
13668: PUSH
13669: LD_VAR 0 14
13673: ARRAY
13674: PPUSH
13675: CALL_OW 2
13679: ST_TO_ADDR
// list_coords = Delete ( list_coords , c ) ;
13680: LD_ADDR_VAR 0 8
13684: PUSH
13685: LD_VAR 0 8
13689: PPUSH
13690: LD_VAR 0 14
13694: PPUSH
13695: CALL_OW 3
13699: ST_TO_ADDR
// c = c - 1 ;
13700: LD_ADDR_VAR 0 14
13704: PUSH
13705: LD_VAR 0 14
13709: PUSH
13710: LD_INT 1
13712: MINUS
13713: ST_TO_ADDR
// end ; until c = list_coords ;
13714: LD_VAR 0 14
13718: PUSH
13719: LD_VAR 0 8
13723: EQUAL
13724: IFFALSE 13590
// c = 0 ;
13726: LD_ADDR_VAR 0 14
13730: PUSH
13731: LD_INT 0
13733: ST_TO_ADDR
// if list_nearest > 0 then
13734: LD_VAR 0 7
13738: PUSH
13739: LD_INT 0
13741: GREATER
13742: IFFALSE 13884
// begin repeat rand_num = Rand ( 1 , list_nearest ) ;
13744: LD_ADDR_VAR 0 15
13748: PUSH
13749: LD_INT 1
13751: PPUSH
13752: LD_VAR 0 7
13756: PPUSH
13757: CALL_OW 12
13761: ST_TO_ADDR
// rand_near_hex = list_nearest [ rand_num ] ;
13762: LD_ADDR_VAR 0 16
13766: PUSH
13767: LD_VAR 0 7
13771: PUSH
13772: LD_VAR 0 15
13776: ARRAY
13777: ST_TO_ADDR
// if ValidHex ( rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) > 0 and HexInfo ( rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) = 0 then
13778: LD_VAR 0 16
13782: PUSH
13783: LD_INT 1
13785: ARRAY
13786: PPUSH
13787: LD_VAR 0 16
13791: PUSH
13792: LD_INT 2
13794: ARRAY
13795: PPUSH
13796: CALL_OW 488
13800: PUSH
13801: LD_INT 0
13803: GREATER
13804: PUSH
13805: LD_VAR 0 16
13809: PUSH
13810: LD_INT 1
13812: ARRAY
13813: PPUSH
13814: LD_VAR 0 16
13818: PUSH
13819: LD_INT 2
13821: ARRAY
13822: PPUSH
13823: CALL_OW 428
13827: PUSH
13828: LD_INT 0
13830: EQUAL
13831: AND
13832: IFFALSE 13844
// c = 1 else
13834: LD_ADDR_VAR 0 14
13838: PUSH
13839: LD_INT 1
13841: ST_TO_ADDR
13842: GO 13864
// list_nearest = Delete ( list_nearest , rand_num ) ;
13844: LD_ADDR_VAR 0 7
13848: PUSH
13849: LD_VAR 0 7
13853: PPUSH
13854: LD_VAR 0 15
13858: PPUSH
13859: CALL_OW 3
13863: ST_TO_ADDR
// until c = 1 or list_nearest = 0 ;
13864: LD_VAR 0 14
13868: PUSH
13869: LD_INT 1
13871: EQUAL
13872: PUSH
13873: LD_VAR 0 7
13877: PUSH
13878: LD_INT 0
13880: EQUAL
13881: OR
13882: IFFALSE 13744
// end ; until c = 1 or list_coords = 0 ;
13884: LD_VAR 0 14
13888: PUSH
13889: LD_INT 1
13891: EQUAL
13892: PUSH
13893: LD_VAR 0 8
13897: PUSH
13898: LD_INT 0
13900: EQUAL
13901: OR
13902: IFFALSE 13502
// attempts = attempts + 1 ;
13904: LD_ADDR_VAR 0 17
13908: PUSH
13909: LD_VAR 0 17
13913: PUSH
13914: LD_INT 1
13916: PLUS
13917: ST_TO_ADDR
// until c = 1 or attempts > 1 ;
13918: LD_VAR 0 14
13922: PUSH
13923: LD_INT 1
13925: EQUAL
13926: PUSH
13927: LD_VAR 0 17
13931: PUSH
13932: LD_INT 1
13934: GREATER
13935: OR
13936: IFFALSE 12461
// if c = 1 then
13938: LD_VAR 0 14
13942: PUSH
13943: LD_INT 1
13945: EQUAL
13946: IFFALSE 14010
// if add then
13948: LD_VAR 0 5
13952: IFFALSE 13983
// AddComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) else
13954: LD_VAR 0 1
13958: PPUSH
13959: LD_VAR 0 16
13963: PUSH
13964: LD_INT 1
13966: ARRAY
13967: PPUSH
13968: LD_VAR 0 16
13972: PUSH
13973: LD_INT 2
13975: ARRAY
13976: PPUSH
13977: CALL_OW 171
13981: GO 14010
// ComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) ;
13983: LD_VAR 0 1
13987: PPUSH
13988: LD_VAR 0 16
13992: PUSH
13993: LD_INT 1
13995: ARRAY
13996: PPUSH
13997: LD_VAR 0 16
14001: PUSH
14002: LD_INT 2
14004: ARRAY
14005: PPUSH
14006: CALL_OW 111
// end ;
14010: LD_VAR 0 6
14014: RET
// export function AI_GetTurnDirection ( x1 , y1 , x , y ) ; var dist_1 , dist_2 , b , temp_dist , dir ; begin
14015: LD_INT 0
14017: PPUSH
14018: PPUSH
14019: PPUSH
14020: PPUSH
14021: PPUSH
14022: PPUSH
// if not ValidHex ( x1 , y1 ) or not ValidHex ( x , y ) then
14023: LD_VAR 0 1
14027: PPUSH
14028: LD_VAR 0 2
14032: PPUSH
14033: CALL_OW 488
14037: NOT
14038: PUSH
14039: LD_VAR 0 3
14043: PPUSH
14044: LD_VAR 0 4
14048: PPUSH
14049: CALL_OW 488
14053: NOT
14054: OR
14055: IFFALSE 14068
// begin result = - 1 ;
14057: LD_ADDR_VAR 0 5
14061: PUSH
14062: LD_INT 1
14064: NEG
14065: ST_TO_ADDR
// exit ;
14066: GO 14228
// end ; dist_1 = GetDistXY ( x1 , y1 , x , y ) ;
14068: LD_ADDR_VAR 0 6
14072: PUSH
14073: LD_VAR 0 1
14077: PPUSH
14078: LD_VAR 0 2
14082: PPUSH
14083: LD_VAR 0 3
14087: PPUSH
14088: LD_VAR 0 4
14092: PPUSH
14093: CALL_OW 298
14097: ST_TO_ADDR
// dist_2 = 99999 ;
14098: LD_ADDR_VAR 0 7
14102: PUSH
14103: LD_INT 99999
14105: ST_TO_ADDR
// for b = 0 to 5 do
14106: LD_ADDR_VAR 0 8
14110: PUSH
14111: DOUBLE
14112: LD_INT 0
14114: DEC
14115: ST_TO_ADDR
14116: LD_INT 5
14118: PUSH
14119: FOR_TO
14120: IFFALSE 14216
// begin temp_dist = GetDistXY ( ShiftX ( x1 , b , dist_1 ) , ShiftY ( y1 , b , dist_1 ) , x , y ) ;
14122: LD_ADDR_VAR 0 9
14126: PUSH
14127: LD_VAR 0 1
14131: PPUSH
14132: LD_VAR 0 8
14136: PPUSH
14137: LD_VAR 0 6
14141: PPUSH
14142: CALL_OW 272
14146: PPUSH
14147: LD_VAR 0 2
14151: PPUSH
14152: LD_VAR 0 8
14156: PPUSH
14157: LD_VAR 0 6
14161: PPUSH
14162: CALL_OW 273
14166: PPUSH
14167: LD_VAR 0 3
14171: PPUSH
14172: LD_VAR 0 4
14176: PPUSH
14177: CALL_OW 298
14181: ST_TO_ADDR
// if temp_dist < dist_2 then
14182: LD_VAR 0 9
14186: PUSH
14187: LD_VAR 0 7
14191: LESS
14192: IFFALSE 14214
// begin dist_2 = temp_dist ;
14194: LD_ADDR_VAR 0 7
14198: PUSH
14199: LD_VAR 0 9
14203: ST_TO_ADDR
// dir = b ;
14204: LD_ADDR_VAR 0 10
14208: PUSH
14209: LD_VAR 0 8
14213: ST_TO_ADDR
// end ; end ;
14214: GO 14119
14216: POP
14217: POP
// result = dir ;
14218: LD_ADDR_VAR 0 5
14222: PUSH
14223: LD_VAR 0 10
14227: ST_TO_ADDR
// end ; end_of_file
14228: LD_VAR 0 5
14232: RET
// every 0 0$10 do var i , base ;
14233: GO 14235
14235: DISABLE
14236: LD_INT 0
14238: PPUSH
14239: PPUSH
// begin for i = 1 to ai_depot do
14240: LD_ADDR_VAR 0 1
14244: PUSH
14245: DOUBLE
14246: LD_INT 1
14248: DEC
14249: ST_TO_ADDR
14250: LD_EXP 18
14254: PUSH
14255: FOR_TO
14256: IFFALSE 14366
// if IsOk ( ai_depot [ i ] ) and GetSide ( ai_depot [ i ] ) = russians then
14258: LD_EXP 18
14262: PUSH
14263: LD_VAR 0 1
14267: ARRAY
14268: PPUSH
14269: CALL_OW 302
14273: PUSH
14274: LD_EXP 18
14278: PUSH
14279: LD_VAR 0 1
14283: ARRAY
14284: PPUSH
14285: CALL_OW 255
14289: PUSH
14290: LD_EXP 3
14294: EQUAL
14295: AND
14296: IFFALSE 14364
// begin base = GetBase ( ai_depot [ i ] ) ;
14298: LD_ADDR_VAR 0 2
14302: PUSH
14303: LD_EXP 18
14307: PUSH
14308: LD_VAR 0 1
14312: ARRAY
14313: PPUSH
14314: CALL_OW 274
14318: ST_TO_ADDR
// SetResourceType ( base , mat_cans , 300 ) ;
14319: LD_VAR 0 2
14323: PPUSH
14324: LD_INT 1
14326: PPUSH
14327: LD_INT 300
14329: PPUSH
14330: CALL_OW 277
// SetResourceType ( base , mat_oil , 300 ) ;
14334: LD_VAR 0 2
14338: PPUSH
14339: LD_INT 2
14341: PPUSH
14342: LD_INT 300
14344: PPUSH
14345: CALL_OW 277
// SetResourceType ( base , mat_siberit , 300 ) ;
14349: LD_VAR 0 2
14353: PPUSH
14354: LD_INT 3
14356: PPUSH
14357: LD_INT 300
14359: PPUSH
14360: CALL_OW 277
// end ;
14364: GO 14255
14366: POP
14367: POP
// enable ;
14368: ENABLE
// end ;
14369: PPOPN 2
14371: END
// every 0 0$1.1 do var val , un_list , un , temp_list , baz ; var ape_engi_cycle_count , ape_engi_cycle_limit ;
14372: GO 14374
14374: DISABLE
14375: LD_INT 0
14377: PPUSH
14378: PPUSH
14379: PPUSH
14380: PPUSH
14381: PPUSH
14382: PPUSH
14383: PPUSH
// begin ape_engi_cycle_count = 1 ;
14384: LD_ADDR_VAR 0 6
14388: PUSH
14389: LD_INT 1
14391: ST_TO_ADDR
// ape_engi_cycle_limit = [ 6 , 4 , 2 ] [ difficulty ] ;
14392: LD_ADDR_VAR 0 7
14396: PUSH
14397: LD_INT 6
14399: PUSH
14400: LD_INT 4
14402: PUSH
14403: LD_INT 2
14405: PUSH
14406: EMPTY
14407: LIST
14408: LIST
14409: LIST
14410: PUSH
14411: LD_OWVAR 67
14415: ARRAY
14416: ST_TO_ADDR
// repeat wait ( Rand ( 1 1$30 , 2 2$0 ) ) ;
14417: LD_INT 3150
14419: PPUSH
14420: LD_INT 4200
14422: PPUSH
14423: CALL_OW 12
14427: PPUSH
14428: CALL_OW 67
// un_list = [ ] ;
14432: LD_ADDR_VAR 0 2
14436: PUSH
14437: EMPTY
14438: ST_TO_ADDR
// val = ai_bunkers [ 1 ] + ai_armouries [ 1 ] * 6 - ( ai_soldiers [ 1 ] + UnitFilter ( ai_attacking_soldiers [ 1 ] , [ f_ok ] ) + spawned_soldiers ) ;
14439: LD_ADDR_VAR 0 1
14443: PUSH
14444: LD_EXP 32
14448: PUSH
14449: LD_INT 1
14451: ARRAY
14452: PUSH
14453: LD_EXP 31
14457: PUSH
14458: LD_INT 1
14460: ARRAY
14461: PUSH
14462: LD_INT 6
14464: MUL
14465: PLUS
14466: PUSH
14467: LD_EXP 13
14471: PUSH
14472: LD_INT 1
14474: ARRAY
14475: PUSH
14476: LD_EXP 45
14480: PUSH
14481: LD_INT 1
14483: ARRAY
14484: PPUSH
14485: LD_INT 50
14487: PUSH
14488: EMPTY
14489: LIST
14490: PPUSH
14491: CALL_OW 72
14495: PLUS
14496: PUSH
14497: LD_EXP 52
14501: PLUS
14502: MINUS
14503: ST_TO_ADDR
// if val > 0 then
14504: LD_VAR 0 1
14508: PUSH
14509: LD_INT 0
14511: GREATER
14512: IFFALSE 14616
// begin temp_list = CreateUnitsWithClass ( val div 2 , class_soldier , russians ) ;
14514: LD_ADDR_VAR 0 4
14518: PUSH
14519: LD_VAR 0 1
14523: PUSH
14524: LD_INT 2
14526: DIV
14527: PPUSH
14528: LD_INT 1
14530: PPUSH
14531: LD_EXP 3
14535: PPUSH
14536: CALL 7077 0 3
14540: ST_TO_ADDR
// temp_list = temp_list ^ CreateUnitsWithClass ( val div 2 + val mod 2 , class_bazooker , russians ) ;
14541: LD_ADDR_VAR 0 4
14545: PUSH
14546: LD_VAR 0 4
14550: PUSH
14551: LD_VAR 0 1
14555: PUSH
14556: LD_INT 2
14558: DIV
14559: PUSH
14560: LD_VAR 0 1
14564: PUSH
14565: LD_INT 2
14567: MOD
14568: PLUS
14569: PPUSH
14570: LD_INT 9
14572: PPUSH
14573: LD_EXP 3
14577: PPUSH
14578: CALL 7077 0 3
14582: ADD
14583: ST_TO_ADDR
// un_list = un_list ^ temp_list ;
14584: LD_ADDR_VAR 0 2
14588: PUSH
14589: LD_VAR 0 2
14593: PUSH
14594: LD_VAR 0 4
14598: ADD
14599: ST_TO_ADDR
// spawned_soldiers = spawned_soldiers ^ temp_list ;
14600: LD_ADDR_EXP 52
14604: PUSH
14605: LD_EXP 52
14609: PUSH
14610: LD_VAR 0 4
14614: ADD
14615: ST_TO_ADDR
// end ; val = orig_num_engineers - ( ai_engineers [ 1 ] + spawned_engineers ) ;
14616: LD_ADDR_VAR 0 1
14620: PUSH
14621: LD_EXP 57
14625: PUSH
14626: LD_EXP 14
14630: PUSH
14631: LD_INT 1
14633: ARRAY
14634: PUSH
14635: LD_EXP 53
14639: PLUS
14640: MINUS
14641: ST_TO_ADDR
// if val > 0 then
14642: LD_VAR 0 1
14646: PUSH
14647: LD_INT 0
14649: GREATER
14650: IFFALSE 14707
// begin temp_list = CreateUnitsWithClass ( val , class_engineer , russians ) ;
14652: LD_ADDR_VAR 0 4
14656: PUSH
14657: LD_VAR 0 1
14661: PPUSH
14662: LD_INT 2
14664: PPUSH
14665: LD_EXP 3
14669: PPUSH
14670: CALL 7077 0 3
14674: ST_TO_ADDR
// un_list = un_list ^ temp_list ;
14675: LD_ADDR_VAR 0 2
14679: PUSH
14680: LD_VAR 0 2
14684: PUSH
14685: LD_VAR 0 4
14689: ADD
14690: ST_TO_ADDR
// spawned_engineers = spawned_engineers ^ temp_list ;
14691: LD_ADDR_EXP 53
14695: PUSH
14696: LD_EXP 53
14700: PUSH
14701: LD_VAR 0 4
14705: ADD
14706: ST_TO_ADDR
// end ; val = orig_num_apemen_engineers - ( ai_apemen_engineers [ 1 ] + spawned_apemen_engineers ) ;
14707: LD_ADDR_VAR 0 1
14711: PUSH
14712: LD_EXP 58
14716: PUSH
14717: LD_EXP 44
14721: PUSH
14722: LD_INT 1
14724: ARRAY
14725: PUSH
14726: LD_EXP 54
14730: PLUS
14731: MINUS
14732: ST_TO_ADDR
// if val > 0 then
14733: LD_VAR 0 1
14737: PUSH
14738: LD_INT 0
14740: GREATER
14741: IFFALSE 14834
// begin if ape_engi_cycle_count = ape_engi_cycle_limit then
14743: LD_VAR 0 6
14747: PUSH
14748: LD_VAR 0 7
14752: EQUAL
14753: IFFALSE 14818
// begin ape_engi_cycle_count = 1 ;
14755: LD_ADDR_VAR 0 6
14759: PUSH
14760: LD_INT 1
14762: ST_TO_ADDR
// temp_list = CreateApemenWithClass ( 1 , class_apeman_engineer , russians ) ;
14763: LD_ADDR_VAR 0 4
14767: PUSH
14768: LD_INT 1
14770: PPUSH
14771: LD_INT 16
14773: PPUSH
14774: LD_EXP 3
14778: PPUSH
14779: CALL 7265 0 3
14783: ST_TO_ADDR
// un_list = un_list ^ temp_list ;
14784: LD_ADDR_VAR 0 2
14788: PUSH
14789: LD_VAR 0 2
14793: PUSH
14794: LD_VAR 0 4
14798: ADD
14799: ST_TO_ADDR
// spawned_apemen_engineers = spawned_apemen_engineers ^ temp_list ;
14800: LD_ADDR_EXP 54
14804: PUSH
14805: LD_EXP 54
14809: PUSH
14810: LD_VAR 0 4
14814: ADD
14815: ST_TO_ADDR
// end else
14816: GO 14832
// ape_engi_cycle_count = ape_engi_cycle_count + 1 ;
14818: LD_ADDR_VAR 0 6
14822: PUSH
14823: LD_VAR 0 6
14827: PUSH
14828: LD_INT 1
14830: PLUS
14831: ST_TO_ADDR
// end else
14832: GO 14842
// ape_engi_cycle_count = 1 ;
14834: LD_ADDR_VAR 0 6
14838: PUSH
14839: LD_INT 1
14841: ST_TO_ADDR
// val = orig_num_mechanics - ( ai_mechanics_defend [ 1 ] + spawned_mechanics ) ;
14842: LD_ADDR_VAR 0 1
14846: PUSH
14847: LD_EXP 59
14851: PUSH
14852: LD_EXP 15
14856: PUSH
14857: LD_INT 1
14859: ARRAY
14860: PUSH
14861: LD_EXP 55
14865: PLUS
14866: MINUS
14867: ST_TO_ADDR
// if val > 0 then
14868: LD_VAR 0 1
14872: PUSH
14873: LD_INT 0
14875: GREATER
14876: IFFALSE 14933
// begin temp_list = CreateUnitsWithclass ( val , class_mechanic , russians ) ;
14878: LD_ADDR_VAR 0 4
14882: PUSH
14883: LD_VAR 0 1
14887: PPUSH
14888: LD_INT 3
14890: PPUSH
14891: LD_EXP 3
14895: PPUSH
14896: CALL 7077 0 3
14900: ST_TO_ADDR
// un_list = un_list ^ temp_list ;
14901: LD_ADDR_VAR 0 2
14905: PUSH
14906: LD_VAR 0 2
14910: PUSH
14911: LD_VAR 0 4
14915: ADD
14916: ST_TO_ADDR
// spawned_mechanics = spawned_mechanics ^ temp_list ;
14917: LD_ADDR_EXP 55
14921: PUSH
14922: LD_EXP 55
14926: PUSH
14927: LD_VAR 0 4
14931: ADD
14932: ST_TO_ADDR
// end ; val = orig_num_scientists - ( ai_scientists [ 1 ] + UnitFilter ( ai_attacking_scientists [ 1 ] , [ f_ok ] ) + spawned_scientists ) ;
14933: LD_ADDR_VAR 0 1
14937: PUSH
14938: LD_EXP 60
14942: PUSH
14943: LD_EXP 16
14947: PUSH
14948: LD_INT 1
14950: ARRAY
14951: PUSH
14952: LD_EXP 46
14956: PUSH
14957: LD_INT 1
14959: ARRAY
14960: PPUSH
14961: LD_INT 50
14963: PUSH
14964: EMPTY
14965: LIST
14966: PPUSH
14967: CALL_OW 72
14971: PLUS
14972: PUSH
14973: LD_EXP 56
14977: PLUS
14978: MINUS
14979: ST_TO_ADDR
// if val > 0 then
14980: LD_VAR 0 1
14984: PUSH
14985: LD_INT 0
14987: GREATER
14988: IFFALSE 15045
// begin temp_list = CreateUnitsWithClass ( val , class_scientistic , russians ) ;
14990: LD_ADDR_VAR 0 4
14994: PUSH
14995: LD_VAR 0 1
14999: PPUSH
15000: LD_INT 4
15002: PPUSH
15003: LD_EXP 3
15007: PPUSH
15008: CALL 7077 0 3
15012: ST_TO_ADDR
// un_list = un_list ^ temp_list ;
15013: LD_ADDR_VAR 0 2
15017: PUSH
15018: LD_VAR 0 2
15022: PUSH
15023: LD_VAR 0 4
15027: ADD
15028: ST_TO_ADDR
// spawned_scientists = spawned_scientists ^ temp_list ;
15029: LD_ADDR_EXP 56
15033: PUSH
15034: LD_EXP 56
15038: PUSH
15039: LD_VAR 0 4
15043: ADD
15044: ST_TO_ADDR
// end ; repeat wait ( 0 0$1 ) ;
15045: LD_INT 35
15047: PPUSH
15048: CALL_OW 67
// for un in un_list do
15052: LD_ADDR_VAR 0 3
15056: PUSH
15057: LD_VAR 0 2
15061: PUSH
15062: FOR_IN
15063: IFFALSE 15100
// if PlaceUnitArea ( un , ru_enter_area , false ) then
15065: LD_VAR 0 3
15069: PPUSH
15070: LD_INT 6
15072: PPUSH
15073: LD_INT 0
15075: PPUSH
15076: CALL_OW 49
15080: IFFALSE 15098
// un_list = un_list diff un ;
15082: LD_ADDR_VAR 0 2
15086: PUSH
15087: LD_VAR 0 2
15091: PUSH
15092: LD_VAR 0 3
15096: DIFF
15097: ST_TO_ADDR
15098: GO 15062
15100: POP
15101: POP
// until un_list = 0 ;
15102: LD_VAR 0 2
15106: PUSH
15107: LD_INT 0
15109: EQUAL
15110: IFFALSE 15045
// until false ;
15112: LD_INT 0
15114: IFFALSE 14417
// end ;
15116: PPOPN 7
15118: END
// every 0 0$1 + 0 0$0.2 do var i , k , temp_list ; var hexes_list , un_hex_index , dist ;
15119: GO 15121
15121: DISABLE
15122: LD_INT 0
15124: PPUSH
15125: PPUSH
15126: PPUSH
15127: PPUSH
15128: PPUSH
15129: PPUSH
// begin hexes_list = [ [ 87 , 121 ] , [ 77 , 103 ] , [ 70 , 88 ] , [ 64 , 73 ] , [ 53 , 58 ] ] ;
15130: LD_ADDR_VAR 0 4
15134: PUSH
15135: LD_INT 87
15137: PUSH
15138: LD_INT 121
15140: PUSH
15141: EMPTY
15142: LIST
15143: LIST
15144: PUSH
15145: LD_INT 77
15147: PUSH
15148: LD_INT 103
15150: PUSH
15151: EMPTY
15152: LIST
15153: LIST
15154: PUSH
15155: LD_INT 70
15157: PUSH
15158: LD_INT 88
15160: PUSH
15161: EMPTY
15162: LIST
15163: LIST
15164: PUSH
15165: LD_INT 64
15167: PUSH
15168: LD_INT 73
15170: PUSH
15171: EMPTY
15172: LIST
15173: LIST
15174: PUSH
15175: LD_INT 53
15177: PUSH
15178: LD_INT 58
15180: PUSH
15181: EMPTY
15182: LIST
15183: LIST
15184: PUSH
15185: EMPTY
15186: LIST
15187: LIST
15188: LIST
15189: LIST
15190: LIST
15191: ST_TO_ADDR
// un_hex_index = [ ] ;
15192: LD_ADDR_VAR 0 5
15196: PUSH
15197: EMPTY
15198: ST_TO_ADDR
// dist = 3 ;
15199: LD_ADDR_VAR 0 6
15203: PUSH
15204: LD_INT 3
15206: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
15207: LD_INT 35
15209: PPUSH
15210: CALL_OW 67
// spawned_soldiers = UnitFilter ( spawned_soldiers , [ f_lives , 1 ] ) ;
15214: LD_ADDR_EXP 52
15218: PUSH
15219: LD_EXP 52
15223: PPUSH
15224: LD_INT 24
15226: PUSH
15227: LD_INT 1
15229: PUSH
15230: EMPTY
15231: LIST
15232: LIST
15233: PPUSH
15234: CALL_OW 72
15238: ST_TO_ADDR
// spawned_engineers = UnitFilter ( spawned_engineers , [ f_lives , 1 ] ) ;
15239: LD_ADDR_EXP 53
15243: PUSH
15244: LD_EXP 53
15248: PPUSH
15249: LD_INT 24
15251: PUSH
15252: LD_INT 1
15254: PUSH
15255: EMPTY
15256: LIST
15257: LIST
15258: PPUSH
15259: CALL_OW 72
15263: ST_TO_ADDR
// spawned_apemen_engineers = UnitFilter ( spawned_apemen_engineers , [ f_lives , 1 ] ) ;
15264: LD_ADDR_EXP 54
15268: PUSH
15269: LD_EXP 54
15273: PPUSH
15274: LD_INT 24
15276: PUSH
15277: LD_INT 1
15279: PUSH
15280: EMPTY
15281: LIST
15282: LIST
15283: PPUSH
15284: CALL_OW 72
15288: ST_TO_ADDR
// spawned_mechanics = UnitFilter ( spawned_mechanics , [ f_lives , 1 ] ) ;
15289: LD_ADDR_EXP 55
15293: PUSH
15294: LD_EXP 55
15298: PPUSH
15299: LD_INT 24
15301: PUSH
15302: LD_INT 1
15304: PUSH
15305: EMPTY
15306: LIST
15307: LIST
15308: PPUSH
15309: CALL_OW 72
15313: ST_TO_ADDR
// spawned_scientists = UnitFilter ( spawned_scientists , [ f_lives , 1 ] ) ;
15314: LD_ADDR_EXP 56
15318: PUSH
15319: LD_EXP 56
15323: PPUSH
15324: LD_INT 24
15326: PUSH
15327: LD_INT 1
15329: PUSH
15330: EMPTY
15331: LIST
15332: LIST
15333: PPUSH
15334: CALL_OW 72
15338: ST_TO_ADDR
// for i in spawned_soldiers ^ spawned_engineers ^ spawned_apemen_engineers ^ spawned_mechanics ^ spawned_scientists do
15339: LD_ADDR_VAR 0 1
15343: PUSH
15344: LD_EXP 52
15348: PUSH
15349: LD_EXP 53
15353: ADD
15354: PUSH
15355: LD_EXP 54
15359: ADD
15360: PUSH
15361: LD_EXP 55
15365: ADD
15366: PUSH
15367: LD_EXP 56
15371: ADD
15372: PUSH
15373: FOR_IN
15374: IFFALSE 15461
// begin k = false ;
15376: LD_ADDR_VAR 0 2
15380: PUSH
15381: LD_INT 0
15383: ST_TO_ADDR
// if un_hex_index < i then
15384: LD_VAR 0 5
15388: PUSH
15389: LD_VAR 0 1
15393: LESS
15394: IFFALSE 15406
// k = true else
15396: LD_ADDR_VAR 0 2
15400: PUSH
15401: LD_INT 1
15403: ST_TO_ADDR
15404: GO 15430
// if un_hex_index [ i ] = 0 then
15406: LD_VAR 0 5
15410: PUSH
15411: LD_VAR 0 1
15415: ARRAY
15416: PUSH
15417: LD_INT 0
15419: EQUAL
15420: IFFALSE 15430
// k = true ;
15422: LD_ADDR_VAR 0 2
15426: PUSH
15427: LD_INT 1
15429: ST_TO_ADDR
// if k then
15430: LD_VAR 0 2
15434: IFFALSE 15459
// un_hex_index = Replace ( un_hex_index , i , 1 ) ;
15436: LD_ADDR_VAR 0 5
15440: PUSH
15441: LD_VAR 0 5
15445: PPUSH
15446: LD_VAR 0 1
15450: PPUSH
15451: LD_INT 1
15453: PPUSH
15454: CALL_OW 1
15458: ST_TO_ADDR
// end ;
15459: GO 15373
15461: POP
15462: POP
// for i in spawned_soldiers ^ spawned_engineers ^ spawned_apemen_engineers ^ spawned_mechanics ^ spawned_scientists do
15463: LD_ADDR_VAR 0 1
15467: PUSH
15468: LD_EXP 52
15472: PUSH
15473: LD_EXP 53
15477: ADD
15478: PUSH
15479: LD_EXP 54
15483: ADD
15484: PUSH
15485: LD_EXP 55
15489: ADD
15490: PUSH
15491: LD_EXP 56
15495: ADD
15496: PUSH
15497: FOR_IN
15498: IFFALSE 16123
// begin if not IsPlaced ( i ) then
15500: LD_VAR 0 1
15504: PPUSH
15505: CALL_OW 305
15509: NOT
15510: IFFALSE 15514
// continue ;
15512: GO 15497
// if IsInArea ( i , rubase1 ) then
15514: LD_VAR 0 1
15518: PPUSH
15519: LD_INT 1
15521: PPUSH
15522: CALL_OW 308
15526: IFFALSE 15893
// begin if i in spawned_soldiers then
15528: LD_VAR 0 1
15532: PUSH
15533: LD_EXP 52
15537: IN
15538: IFFALSE 15601
// begin temp_list = ai_soldiers [ 1 ] ^ i ;
15540: LD_ADDR_VAR 0 3
15544: PUSH
15545: LD_EXP 13
15549: PUSH
15550: LD_INT 1
15552: ARRAY
15553: PUSH
15554: LD_VAR 0 1
15558: ADD
15559: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , 1 , temp_list ) ;
15560: LD_ADDR_EXP 13
15564: PUSH
15565: LD_EXP 13
15569: PPUSH
15570: LD_INT 1
15572: PPUSH
15573: LD_VAR 0 3
15577: PPUSH
15578: CALL_OW 1
15582: ST_TO_ADDR
// spawned_soldiers = spawned_soldiers diff i ;
15583: LD_ADDR_EXP 52
15587: PUSH
15588: LD_EXP 52
15592: PUSH
15593: LD_VAR 0 1
15597: DIFF
15598: ST_TO_ADDR
// end else
15599: GO 15891
// if i in spawned_engineers then
15601: LD_VAR 0 1
15605: PUSH
15606: LD_EXP 53
15610: IN
15611: IFFALSE 15674
// begin temp_list = ai_engineers [ 1 ] ^ i ;
15613: LD_ADDR_VAR 0 3
15617: PUSH
15618: LD_EXP 14
15622: PUSH
15623: LD_INT 1
15625: ARRAY
15626: PUSH
15627: LD_VAR 0 1
15631: ADD
15632: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , 1 , temp_list ) ;
15633: LD_ADDR_EXP 14
15637: PUSH
15638: LD_EXP 14
15642: PPUSH
15643: LD_INT 1
15645: PPUSH
15646: LD_VAR 0 3
15650: PPUSH
15651: CALL_OW 1
15655: ST_TO_ADDR
// spawned_engineers = spawned_engineers diff i ;
15656: LD_ADDR_EXP 53
15660: PUSH
15661: LD_EXP 53
15665: PUSH
15666: LD_VAR 0 1
15670: DIFF
15671: ST_TO_ADDR
// end else
15672: GO 15891
// if i in spawned_apemen_engineers then
15674: LD_VAR 0 1
15678: PUSH
15679: LD_EXP 54
15683: IN
15684: IFFALSE 15747
// begin temp_list = ai_apemen_engineers [ 1 ] ^ i ;
15686: LD_ADDR_VAR 0 3
15690: PUSH
15691: LD_EXP 44
15695: PUSH
15696: LD_INT 1
15698: ARRAY
15699: PUSH
15700: LD_VAR 0 1
15704: ADD
15705: ST_TO_ADDR
// ai_apemen_engineers = Replace ( ai_apemen_engineers , 1 , temp_list ) ;
15706: LD_ADDR_EXP 44
15710: PUSH
15711: LD_EXP 44
15715: PPUSH
15716: LD_INT 1
15718: PPUSH
15719: LD_VAR 0 3
15723: PPUSH
15724: CALL_OW 1
15728: ST_TO_ADDR
// spawned_apemen_engineers = spawned_apemen_engineers diff i ;
15729: LD_ADDR_EXP 54
15733: PUSH
15734: LD_EXP 54
15738: PUSH
15739: LD_VAR 0 1
15743: DIFF
15744: ST_TO_ADDR
// end else
15745: GO 15891
// if i in spawned_mechanics then
15747: LD_VAR 0 1
15751: PUSH
15752: LD_EXP 55
15756: IN
15757: IFFALSE 15820
// begin temp_list = ai_mechanics_defend [ 1 ] ^ i ;
15759: LD_ADDR_VAR 0 3
15763: PUSH
15764: LD_EXP 15
15768: PUSH
15769: LD_INT 1
15771: ARRAY
15772: PUSH
15773: LD_VAR 0 1
15777: ADD
15778: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , 1 , temp_list ) ;
15779: LD_ADDR_EXP 15
15783: PUSH
15784: LD_EXP 15
15788: PPUSH
15789: LD_INT 1
15791: PPUSH
15792: LD_VAR 0 3
15796: PPUSH
15797: CALL_OW 1
15801: ST_TO_ADDR
// spawned_mechanics = spawned_mechanics diff i ;
15802: LD_ADDR_EXP 55
15806: PUSH
15807: LD_EXP 55
15811: PUSH
15812: LD_VAR 0 1
15816: DIFF
15817: ST_TO_ADDR
// end else
15818: GO 15891
// if i in spawned_scientists then
15820: LD_VAR 0 1
15824: PUSH
15825: LD_EXP 56
15829: IN
15830: IFFALSE 15891
// begin temp_list = ai_scientists [ 1 ] ^ i ;
15832: LD_ADDR_VAR 0 3
15836: PUSH
15837: LD_EXP 16
15841: PUSH
15842: LD_INT 1
15844: ARRAY
15845: PUSH
15846: LD_VAR 0 1
15850: ADD
15851: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , 1 , temp_list ) ;
15852: LD_ADDR_EXP 16
15856: PUSH
15857: LD_EXP 16
15861: PPUSH
15862: LD_INT 1
15864: PPUSH
15865: LD_VAR 0 3
15869: PPUSH
15870: CALL_OW 1
15874: ST_TO_ADDR
// spawned_scientists = spawned_scientists diff i ;
15875: LD_ADDR_EXP 56
15879: PUSH
15880: LD_EXP 56
15884: PUSH
15885: LD_VAR 0 1
15889: DIFF
15890: ST_TO_ADDR
// end ; end else
15891: GO 16121
// begin if GetDistUnitXY ( i , hexes_list [ un_hex_index [ i ] ] [ 1 ] , hexes_list [ un_hex_index [ i ] ] [ 2 ] ) <= dist and un_hex_index [ i ] < hexes_list then
15893: LD_VAR 0 1
15897: PPUSH
15898: LD_VAR 0 4
15902: PUSH
15903: LD_VAR 0 5
15907: PUSH
15908: LD_VAR 0 1
15912: ARRAY
15913: ARRAY
15914: PUSH
15915: LD_INT 1
15917: ARRAY
15918: PPUSH
15919: LD_VAR 0 4
15923: PUSH
15924: LD_VAR 0 5
15928: PUSH
15929: LD_VAR 0 1
15933: ARRAY
15934: ARRAY
15935: PUSH
15936: LD_INT 2
15938: ARRAY
15939: PPUSH
15940: CALL_OW 297
15944: PUSH
15945: LD_VAR 0 6
15949: LESSEQUAL
15950: PUSH
15951: LD_VAR 0 5
15955: PUSH
15956: LD_VAR 0 1
15960: ARRAY
15961: PUSH
15962: LD_VAR 0 4
15966: LESS
15967: AND
15968: IFFALSE 16005
// un_hex_index = Replace ( un_hex_index , i , un_hex_index [ i ] + 1 ) ;
15970: LD_ADDR_VAR 0 5
15974: PUSH
15975: LD_VAR 0 5
15979: PPUSH
15980: LD_VAR 0 1
15984: PPUSH
15985: LD_VAR 0 5
15989: PUSH
15990: LD_VAR 0 1
15994: ARRAY
15995: PUSH
15996: LD_INT 1
15998: PLUS
15999: PPUSH
16000: CALL_OW 1
16004: ST_TO_ADDR
// if i in spawned_soldiers then
16005: LD_VAR 0 1
16009: PUSH
16010: LD_EXP 52
16014: IN
16015: IFFALSE 16070
// ComAgressiveMove ( i , hexes_list [ un_hex_index [ i ] ] [ 1 ] , hexes_list [ un_hex_index [ i ] ] [ 2 ] ) else
16017: LD_VAR 0 1
16021: PPUSH
16022: LD_VAR 0 4
16026: PUSH
16027: LD_VAR 0 5
16031: PUSH
16032: LD_VAR 0 1
16036: ARRAY
16037: ARRAY
16038: PUSH
16039: LD_INT 1
16041: ARRAY
16042: PPUSH
16043: LD_VAR 0 4
16047: PUSH
16048: LD_VAR 0 5
16052: PUSH
16053: LD_VAR 0 1
16057: ARRAY
16058: ARRAY
16059: PUSH
16060: LD_INT 2
16062: ARRAY
16063: PPUSH
16064: CALL_OW 114
16068: GO 16121
// ComMoveXY ( i , hexes_list [ un_hex_index [ i ] ] [ 1 ] , hexes_list [ un_hex_index [ i ] ] [ 2 ] ) ;
16070: LD_VAR 0 1
16074: PPUSH
16075: LD_VAR 0 4
16079: PUSH
16080: LD_VAR 0 5
16084: PUSH
16085: LD_VAR 0 1
16089: ARRAY
16090: ARRAY
16091: PUSH
16092: LD_INT 1
16094: ARRAY
16095: PPUSH
16096: LD_VAR 0 4
16100: PUSH
16101: LD_VAR 0 5
16105: PUSH
16106: LD_VAR 0 1
16110: ARRAY
16111: ARRAY
16112: PUSH
16113: LD_INT 2
16115: ARRAY
16116: PPUSH
16117: CALL_OW 111
// end ; end ;
16121: GO 15497
16123: POP
16124: POP
// until false ;
16125: LD_INT 0
16127: IFFALSE 15207
// end ;
16129: PPOPN 6
16131: END
// on UnitDestroyed ( un ) do var side , temp_list , base ;
16132: LD_INT 0
16134: PPUSH
16135: PPUSH
16136: PPUSH
// begin if un = Heike then
16137: LD_VAR 0 1
16141: PUSH
16142: LD_EXP 7
16146: EQUAL
16147: IFFALSE 16171
// begin ExclusiveOn ;
16149: CALL_OW 4
// Wait ( 0 0$1 ) ;
16153: LD_INT 35
16155: PPUSH
16156: CALL_OW 67
// YouLost ( HeikeDead ) ;
16160: LD_STRING HeikeDead
16162: PPUSH
16163: CALL_OW 104
// ExclusiveOff ;
16167: CALL_OW 5
// end ; for base in ai_bases do
16171: LD_ADDR_VAR 0 4
16175: PUSH
16176: LD_EXP 40
16180: PUSH
16181: FOR_IN
16182: IFFALSE 16233
// begin temp_list = ai_captured_buildings [ base ] diff un ;
16184: LD_ADDR_VAR 0 3
16188: PUSH
16189: LD_EXP 38
16193: PUSH
16194: LD_VAR 0 4
16198: ARRAY
16199: PUSH
16200: LD_VAR 0 1
16204: DIFF
16205: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
16206: LD_ADDR_EXP 38
16210: PUSH
16211: LD_EXP 38
16215: PPUSH
16216: LD_VAR 0 4
16220: PPUSH
16221: LD_VAR 0 3
16225: PPUSH
16226: CALL_OW 1
16230: ST_TO_ADDR
// end ;
16231: GO 16181
16233: POP
16234: POP
// side = GetSide ( un ) ;
16235: LD_ADDR_VAR 0 2
16239: PUSH
16240: LD_VAR 0 1
16244: PPUSH
16245: CALL_OW 255
16249: ST_TO_ADDR
// if side <> russians then
16250: LD_VAR 0 2
16254: PUSH
16255: LD_EXP 3
16259: NONEQUAL
16260: IFFALSE 16264
// exit ;
16262: GO 16404
// case GetType ( un ) of unit_human :
16264: LD_VAR 0 1
16268: PPUSH
16269: CALL_OW 247
16273: PUSH
16274: LD_INT 1
16276: DOUBLE
16277: EQUAL
16278: IFTRUE 16282
16280: GO 16319
16282: POP
// for base in ai_bases do
16283: LD_ADDR_VAR 0 4
16287: PUSH
16288: LD_EXP 40
16292: PUSH
16293: FOR_IN
16294: IFFALSE 16315
// RemoveHumanFromVariables ( base , un , true ) ; unit_vehicle :
16296: LD_VAR 0 4
16300: PPUSH
16301: LD_VAR 0 1
16305: PPUSH
16306: LD_INT 1
16308: PPUSH
16309: CALL 16791 0 3
16313: GO 16293
16315: POP
16316: POP
16317: GO 16404
16319: LD_INT 2
16321: DOUBLE
16322: EQUAL
16323: IFTRUE 16327
16325: GO 16361
16327: POP
// for base in ai_bases do
16328: LD_ADDR_VAR 0 4
16332: PUSH
16333: LD_EXP 40
16337: PUSH
16338: FOR_IN
16339: IFFALSE 16357
// RemoveVehicleFromVariables ( base , un ) ; unit_building :
16341: LD_VAR 0 4
16345: PPUSH
16346: LD_VAR 0 1
16350: PPUSH
16351: CALL 16521 0 2
16355: GO 16338
16357: POP
16358: POP
16359: GO 16404
16361: LD_INT 3
16363: DOUBLE
16364: EQUAL
16365: IFTRUE 16369
16367: GO 16403
16369: POP
// for base in ai_bases do
16370: LD_ADDR_VAR 0 4
16374: PUSH
16375: LD_EXP 40
16379: PUSH
16380: FOR_IN
16381: IFFALSE 16399
// RemoveBuildingFromVariables ( base , un ) ; end ;
16383: LD_VAR 0 4
16387: PPUSH
16388: LD_VAR 0 1
16392: PPUSH
16393: CALL 16407 0 2
16397: GO 16380
16399: POP
16400: POP
16401: GO 16404
16403: POP
// end ;
16404: PPOPN 4
16406: END
// function RemoveBuildingFromVariables ( base , building ) ; var temp_list ; begin
16407: LD_INT 0
16409: PPUSH
16410: PPUSH
// temp_list = ai_all_buildings [ base ] diff building ;
16411: LD_ADDR_VAR 0 4
16415: PUSH
16416: LD_EXP 27
16420: PUSH
16421: LD_VAR 0 1
16425: ARRAY
16426: PUSH
16427: LD_VAR 0 2
16431: DIFF
16432: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
16433: LD_ADDR_EXP 27
16437: PUSH
16438: LD_EXP 27
16442: PPUSH
16443: LD_VAR 0 1
16447: PPUSH
16448: LD_VAR 0 4
16452: PPUSH
16453: CALL_OW 1
16457: ST_TO_ADDR
// if building = ai_building_under_construction [ base ] then
16458: LD_VAR 0 2
16462: PUSH
16463: LD_EXP 25
16467: PUSH
16468: LD_VAR 0 1
16472: ARRAY
16473: EQUAL
16474: IFFALSE 16499
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
16476: LD_ADDR_EXP 25
16480: PUSH
16481: LD_EXP 25
16485: PPUSH
16486: LD_VAR 0 1
16490: PPUSH
16491: LD_INT 0
16493: PPUSH
16494: CALL_OW 1
16498: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , false ) ;
16499: LD_VAR 0 1
16503: PPUSH
16504: LD_VAR 0 2
16508: PPUSH
16509: LD_INT 0
16511: PPUSH
16512: CALL 4392 0 3
// end ;
16516: LD_VAR 0 3
16520: RET
// function RemoveVehicleFromVariables ( base , vehicle ) ; var temp_list ; begin
16521: LD_INT 0
16523: PPUSH
16524: PPUSH
// if vehicle in ai_vehicles_defend [ base ] then
16525: LD_VAR 0 2
16529: PUSH
16530: LD_EXP 22
16534: PUSH
16535: LD_VAR 0 1
16539: ARRAY
16540: IN
16541: IFFALSE 16590
// begin temp_list = ai_vehicles_defend [ base ] diff vehicle ;
16543: LD_ADDR_VAR 0 4
16547: PUSH
16548: LD_EXP 22
16552: PUSH
16553: LD_VAR 0 1
16557: ARRAY
16558: PUSH
16559: LD_VAR 0 2
16563: DIFF
16564: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
16565: LD_ADDR_EXP 22
16569: PUSH
16570: LD_EXP 22
16574: PPUSH
16575: LD_VAR 0 1
16579: PPUSH
16580: LD_VAR 0 4
16584: PPUSH
16585: CALL_OW 1
16589: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_attack [ base ] then
16590: LD_VAR 0 2
16594: PUSH
16595: LD_EXP 23
16599: PUSH
16600: LD_VAR 0 1
16604: ARRAY
16605: IN
16606: IFFALSE 16655
// begin temp_list = ai_vehicles_attack [ base ] diff vehicle ;
16608: LD_ADDR_VAR 0 4
16612: PUSH
16613: LD_EXP 23
16617: PUSH
16618: LD_VAR 0 1
16622: ARRAY
16623: PUSH
16624: LD_VAR 0 2
16628: DIFF
16629: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
16630: LD_ADDR_EXP 23
16634: PUSH
16635: LD_EXP 23
16639: PPUSH
16640: LD_VAR 0 1
16644: PPUSH
16645: LD_VAR 0 4
16649: PPUSH
16650: CALL_OW 1
16654: ST_TO_ADDR
// end ; if vehicle = ai_cargo_bay [ base ] then
16655: LD_VAR 0 2
16659: PUSH
16660: LD_EXP 42
16664: PUSH
16665: LD_VAR 0 1
16669: ARRAY
16670: EQUAL
16671: IFFALSE 16721
// begin ai_cargo_bay = Replace ( ai_cargo_bay , base , 0 ) ;
16673: LD_ADDR_EXP 42
16677: PUSH
16678: LD_EXP 42
16682: PPUSH
16683: LD_VAR 0 1
16687: PPUSH
16688: LD_INT 0
16690: PPUSH
16691: CALL_OW 1
16695: ST_TO_ADDR
// cargo_bay_destroy_tick = Replace ( cargo_bay_destroy_tick , base , tick ) ;
16696: LD_ADDR_EXP 70
16700: PUSH
16701: LD_EXP 70
16705: PPUSH
16706: LD_VAR 0 1
16710: PPUSH
16711: LD_OWVAR 1
16715: PPUSH
16716: CALL_OW 1
16720: ST_TO_ADDR
// end ; if vehicle in ai_refuel_vehicles_list [ base ] then
16721: LD_VAR 0 2
16725: PUSH
16726: LD_EXP 36
16730: PUSH
16731: LD_VAR 0 1
16735: ARRAY
16736: IN
16737: IFFALSE 16786
// begin temp_list = ai_refuel_vehicles_list [ base ] diff vehicle ;
16739: LD_ADDR_VAR 0 4
16743: PUSH
16744: LD_EXP 36
16748: PUSH
16749: LD_VAR 0 1
16753: ARRAY
16754: PUSH
16755: LD_VAR 0 2
16759: DIFF
16760: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
16761: LD_ADDR_EXP 36
16765: PUSH
16766: LD_EXP 36
16770: PPUSH
16771: LD_VAR 0 1
16775: PPUSH
16776: LD_VAR 0 4
16780: PPUSH
16781: CALL_OW 1
16785: ST_TO_ADDR
// end ; end ;
16786: LD_VAR 0 3
16790: RET
// function RemoveHumanFromVariables ( base , human , check_if_base_is_dead ) ; var temp_list ; begin
16791: LD_INT 0
16793: PPUSH
16794: PPUSH
// if human in ai_soldiers [ base ] then
16795: LD_VAR 0 2
16799: PUSH
16800: LD_EXP 13
16804: PUSH
16805: LD_VAR 0 1
16809: ARRAY
16810: IN
16811: IFFALSE 16860
// begin temp_list = ai_soldiers [ base ] diff human ;
16813: LD_ADDR_VAR 0 5
16817: PUSH
16818: LD_EXP 13
16822: PUSH
16823: LD_VAR 0 1
16827: ARRAY
16828: PUSH
16829: LD_VAR 0 2
16833: DIFF
16834: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
16835: LD_ADDR_EXP 13
16839: PUSH
16840: LD_EXP 13
16844: PPUSH
16845: LD_VAR 0 1
16849: PPUSH
16850: LD_VAR 0 5
16854: PPUSH
16855: CALL_OW 1
16859: ST_TO_ADDR
// end ; if human in ai_attacking_soldiers [ base ] then
16860: LD_VAR 0 2
16864: PUSH
16865: LD_EXP 45
16869: PUSH
16870: LD_VAR 0 1
16874: ARRAY
16875: IN
16876: IFFALSE 16925
// begin temp_list = ai_attacking_soldiers [ base ] diff human ;
16878: LD_ADDR_VAR 0 5
16882: PUSH
16883: LD_EXP 45
16887: PUSH
16888: LD_VAR 0 1
16892: ARRAY
16893: PUSH
16894: LD_VAR 0 2
16898: DIFF
16899: ST_TO_ADDR
// ai_attacking_soldiers = Replace ( ai_attacking_soldiers , base , temp_list ) ;
16900: LD_ADDR_EXP 45
16904: PUSH
16905: LD_EXP 45
16909: PPUSH
16910: LD_VAR 0 1
16914: PPUSH
16915: LD_VAR 0 5
16919: PPUSH
16920: CALL_OW 1
16924: ST_TO_ADDR
// end ; if human in ai_engineers [ base ] then
16925: LD_VAR 0 2
16929: PUSH
16930: LD_EXP 14
16934: PUSH
16935: LD_VAR 0 1
16939: ARRAY
16940: IN
16941: IFFALSE 16990
// begin temp_list = ai_engineers [ base ] diff human ;
16943: LD_ADDR_VAR 0 5
16947: PUSH
16948: LD_EXP 14
16952: PUSH
16953: LD_VAR 0 1
16957: ARRAY
16958: PUSH
16959: LD_VAR 0 2
16963: DIFF
16964: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , base , temp_list ) ;
16965: LD_ADDR_EXP 14
16969: PUSH
16970: LD_EXP 14
16974: PPUSH
16975: LD_VAR 0 1
16979: PPUSH
16980: LD_VAR 0 5
16984: PPUSH
16985: CALL_OW 1
16989: ST_TO_ADDR
// end ; if human in ai_apemen_engineers [ base ] then
16990: LD_VAR 0 2
16994: PUSH
16995: LD_EXP 44
16999: PUSH
17000: LD_VAR 0 1
17004: ARRAY
17005: IN
17006: IFFALSE 17055
// begin temp_list = ai_apemen_engineers [ base ] diff human ;
17008: LD_ADDR_VAR 0 5
17012: PUSH
17013: LD_EXP 44
17017: PUSH
17018: LD_VAR 0 1
17022: ARRAY
17023: PUSH
17024: LD_VAR 0 2
17028: DIFF
17029: ST_TO_ADDR
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , temp_list ) ;
17030: LD_ADDR_EXP 44
17034: PUSH
17035: LD_EXP 44
17039: PPUSH
17040: LD_VAR 0 1
17044: PPUSH
17045: LD_VAR 0 5
17049: PPUSH
17050: CALL_OW 1
17054: ST_TO_ADDR
// end ; if human in ai_mechanics_defend [ base ] then
17055: LD_VAR 0 2
17059: PUSH
17060: LD_EXP 15
17064: PUSH
17065: LD_VAR 0 1
17069: ARRAY
17070: IN
17071: IFFALSE 17120
// begin temp_list = ai_mechanics_defend [ base ] diff human ;
17073: LD_ADDR_VAR 0 5
17077: PUSH
17078: LD_EXP 15
17082: PUSH
17083: LD_VAR 0 1
17087: ARRAY
17088: PUSH
17089: LD_VAR 0 2
17093: DIFF
17094: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , temp_list ) ;
17095: LD_ADDR_EXP 15
17099: PUSH
17100: LD_EXP 15
17104: PPUSH
17105: LD_VAR 0 1
17109: PPUSH
17110: LD_VAR 0 5
17114: PPUSH
17115: CALL_OW 1
17119: ST_TO_ADDR
// end ; if human in ai_scientists [ base ] then
17120: LD_VAR 0 2
17124: PUSH
17125: LD_EXP 16
17129: PUSH
17130: LD_VAR 0 1
17134: ARRAY
17135: IN
17136: IFFALSE 17185
// begin temp_list = ai_scientists [ base ] diff human ;
17138: LD_ADDR_VAR 0 5
17142: PUSH
17143: LD_EXP 16
17147: PUSH
17148: LD_VAR 0 1
17152: ARRAY
17153: PUSH
17154: LD_VAR 0 2
17158: DIFF
17159: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , temp_list ) ;
17160: LD_ADDR_EXP 16
17164: PUSH
17165: LD_EXP 16
17169: PPUSH
17170: LD_VAR 0 1
17174: PPUSH
17175: LD_VAR 0 5
17179: PPUSH
17180: CALL_OW 1
17184: ST_TO_ADDR
// end ; if human in ai_attacking_scientists [ base ] then
17185: LD_VAR 0 2
17189: PUSH
17190: LD_EXP 46
17194: PUSH
17195: LD_VAR 0 1
17199: ARRAY
17200: IN
17201: IFFALSE 17250
// begin temp_list = ai_attacking_scientists [ base ] diff human ;
17203: LD_ADDR_VAR 0 5
17207: PUSH
17208: LD_EXP 46
17212: PUSH
17213: LD_VAR 0 1
17217: ARRAY
17218: PUSH
17219: LD_VAR 0 2
17223: DIFF
17224: ST_TO_ADDR
// ai_attacking_scientists = Replace ( ai_attacking_scientists , base , temp_list ) ;
17225: LD_ADDR_EXP 46
17229: PUSH
17230: LD_EXP 46
17234: PPUSH
17235: LD_VAR 0 1
17239: PPUSH
17240: LD_VAR 0 5
17244: PPUSH
17245: CALL_OW 1
17249: ST_TO_ADDR
// end ; if human in ai_heal_these_humans [ base ] then
17250: LD_VAR 0 2
17254: PUSH
17255: LD_EXP 26
17259: PUSH
17260: LD_VAR 0 1
17264: ARRAY
17265: IN
17266: IFFALSE 17315
// begin temp_list = ai_heal_these_humans [ base ] diff human ;
17268: LD_ADDR_VAR 0 5
17272: PUSH
17273: LD_EXP 26
17277: PUSH
17278: LD_VAR 0 1
17282: ARRAY
17283: PUSH
17284: LD_VAR 0 2
17288: DIFF
17289: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
17290: LD_ADDR_EXP 26
17294: PUSH
17295: LD_EXP 26
17299: PPUSH
17300: LD_VAR 0 1
17304: PPUSH
17305: LD_VAR 0 5
17309: PPUSH
17310: CALL_OW 1
17314: ST_TO_ADDR
// end ; if human = ai_building_constructor [ base ] then
17315: LD_VAR 0 2
17319: PUSH
17320: LD_EXP 28
17324: PUSH
17325: LD_VAR 0 1
17329: ARRAY
17330: EQUAL
17331: IFFALSE 17356
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
17333: LD_ADDR_EXP 28
17337: PUSH
17338: LD_EXP 28
17342: PPUSH
17343: LD_VAR 0 1
17347: PPUSH
17348: LD_INT 0
17350: PPUSH
17351: CALL_OW 1
17355: ST_TO_ADDR
// if human in ai_retreating_attacking_humans [ base ] then
17356: LD_VAR 0 2
17360: PUSH
17361: LD_EXP 48
17365: PUSH
17366: LD_VAR 0 1
17370: ARRAY
17371: IN
17372: IFFALSE 17421
// begin temp_list = ai_retreating_attacking_humans [ base ] diff human ;
17374: LD_ADDR_VAR 0 5
17378: PUSH
17379: LD_EXP 48
17383: PUSH
17384: LD_VAR 0 1
17388: ARRAY
17389: PUSH
17390: LD_VAR 0 2
17394: DIFF
17395: ST_TO_ADDR
// ai_retreating_attacking_humans = Replace ( ai_retreating_attacking_humans , base , temp_list ) ;
17396: LD_ADDR_EXP 48
17400: PUSH
17401: LD_EXP 48
17405: PPUSH
17406: LD_VAR 0 1
17410: PPUSH
17411: LD_VAR 0 5
17415: PPUSH
17416: CALL_OW 1
17420: ST_TO_ADDR
// end ; if check_if_base_is_dead then
17421: LD_VAR 0 3
17425: IFFALSE 17565
// 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 ] ^ spawned_soldiers ^ spawned_engineers ^ spawned_apemen_engineers ^ spawned_mechanics ^ spawned_scientists ) diff 0 ) = 0 then
17427: LD_EXP 13
17431: PUSH
17432: LD_VAR 0 1
17436: ARRAY
17437: PUSH
17438: LD_EXP 45
17442: PUSH
17443: LD_VAR 0 1
17447: ARRAY
17448: ADD
17449: PUSH
17450: LD_EXP 14
17454: PUSH
17455: LD_VAR 0 1
17459: ARRAY
17460: ADD
17461: PUSH
17462: LD_EXP 44
17466: PUSH
17467: LD_VAR 0 1
17471: ARRAY
17472: ADD
17473: PUSH
17474: LD_EXP 15
17478: PUSH
17479: LD_VAR 0 1
17483: ARRAY
17484: ADD
17485: PUSH
17486: LD_EXP 16
17490: PUSH
17491: LD_VAR 0 1
17495: ARRAY
17496: ADD
17497: PUSH
17498: LD_EXP 46
17502: PUSH
17503: LD_VAR 0 1
17507: ARRAY
17508: ADD
17509: PUSH
17510: LD_EXP 52
17514: ADD
17515: PUSH
17516: LD_EXP 53
17520: ADD
17521: PUSH
17522: LD_EXP 54
17526: ADD
17527: PUSH
17528: LD_EXP 55
17532: ADD
17533: PUSH
17534: LD_EXP 56
17538: ADD
17539: PUSH
17540: LD_INT 0
17542: DIFF
17543: PUSH
17544: LD_INT 0
17546: EQUAL
17547: IFFALSE 17565
// ai_bases = ai_bases diff base ;
17549: LD_ADDR_EXP 40
17553: PUSH
17554: LD_EXP 40
17558: PUSH
17559: LD_VAR 0 1
17563: DIFF
17564: ST_TO_ADDR
// end ;
17565: LD_VAR 0 4
17569: RET
// function GetBaseNation ( base ) ; begin
17570: LD_INT 0
17572: PPUSH
// case base of 1 :
17573: LD_VAR 0 1
17577: PUSH
17578: LD_INT 1
17580: DOUBLE
17581: EQUAL
17582: IFTRUE 17586
17584: GO 17597
17586: POP
// result = nation_russian ; 2 :
17587: LD_ADDR_VAR 0 2
17591: PUSH
17592: LD_INT 3
17594: ST_TO_ADDR
17595: GO 17617
17597: LD_INT 2
17599: DOUBLE
17600: EQUAL
17601: IFTRUE 17605
17603: GO 17616
17605: POP
// result = nation_russian ; end ;
17606: LD_ADDR_VAR 0 2
17610: PUSH
17611: LD_INT 3
17613: ST_TO_ADDR
17614: GO 17617
17616: POP
// end ;
17617: LD_VAR 0 2
17621: RET
// function FindBase ( un ) ; var i , hexes , k ; begin
17622: LD_INT 0
17624: PPUSH
17625: PPUSH
17626: PPUSH
17627: PPUSH
// hexes = [ ] ;
17628: LD_ADDR_VAR 0 4
17632: PUSH
17633: EMPTY
17634: ST_TO_ADDR
// for i in ai_bases do
17635: LD_ADDR_VAR 0 3
17639: PUSH
17640: LD_EXP 40
17644: PUSH
17645: FOR_IN
17646: IFFALSE 17738
// for k in ai_buildings_locations [ i ] do
17648: LD_ADDR_VAR 0 5
17652: PUSH
17653: LD_EXP 21
17657: PUSH
17658: LD_VAR 0 3
17662: ARRAY
17663: PUSH
17664: FOR_IN
17665: IFFALSE 17734
// if k [ 4 ] in [ b_depot , b_warehouse ] then
17667: LD_VAR 0 5
17671: PUSH
17672: LD_INT 4
17674: ARRAY
17675: PUSH
17676: LD_INT 0
17678: PUSH
17679: LD_INT 1
17681: PUSH
17682: EMPTY
17683: LIST
17684: LIST
17685: IN
17686: IFFALSE 17732
// begin hexes = Replace ( hexes , i , [ k [ 1 ] , k [ 2 ] ] ) ;
17688: LD_ADDR_VAR 0 4
17692: PUSH
17693: LD_VAR 0 4
17697: PPUSH
17698: LD_VAR 0 3
17702: PPUSH
17703: LD_VAR 0 5
17707: PUSH
17708: LD_INT 1
17710: ARRAY
17711: PUSH
17712: LD_VAR 0 5
17716: PUSH
17717: LD_INT 2
17719: ARRAY
17720: PUSH
17721: EMPTY
17722: LIST
17723: LIST
17724: PPUSH
17725: CALL_OW 1
17729: ST_TO_ADDR
// continue ;
17730: GO 17664
// end ;
17732: GO 17664
17734: POP
17735: POP
17736: GO 17645
17738: POP
17739: POP
// for i in ai_bases do
17740: LD_ADDR_VAR 0 3
17744: PUSH
17745: LD_EXP 40
17749: PUSH
17750: FOR_IN
17751: IFFALSE 17814
// if GetDistUnitXY ( un , hexes [ i ] [ 1 ] , hexes [ i ] [ 2 ] ) <= 40 then
17753: LD_VAR 0 1
17757: PPUSH
17758: LD_VAR 0 4
17762: PUSH
17763: LD_VAR 0 3
17767: ARRAY
17768: PUSH
17769: LD_INT 1
17771: ARRAY
17772: PPUSH
17773: LD_VAR 0 4
17777: PUSH
17778: LD_VAR 0 3
17782: ARRAY
17783: PUSH
17784: LD_INT 2
17786: ARRAY
17787: PPUSH
17788: CALL_OW 297
17792: PUSH
17793: LD_INT 40
17795: LESSEQUAL
17796: IFFALSE 17812
// begin result = i ;
17798: LD_ADDR_VAR 0 2
17802: PUSH
17803: LD_VAR 0 3
17807: ST_TO_ADDR
// exit ;
17808: POP
17809: POP
17810: GO 17824
// end ;
17812: GO 17750
17814: POP
17815: POP
// result = 0 ;
17816: LD_ADDR_VAR 0 2
17820: PUSH
17821: LD_INT 0
17823: ST_TO_ADDR
// end ;
17824: LD_VAR 0 2
17828: RET
// export function GetBaseSide ( base ) ; begin
17829: LD_INT 0
17831: PPUSH
// result = russians ;
17832: LD_ADDR_VAR 0 2
17836: PUSH
17837: LD_EXP 3
17841: ST_TO_ADDR
// end ;
17842: LD_VAR 0 2
17846: RET
// export function GetBaseArea ( base ) ; begin
17847: LD_INT 0
17849: PPUSH
// case base of 1 :
17850: LD_VAR 0 1
17854: PUSH
17855: LD_INT 1
17857: DOUBLE
17858: EQUAL
17859: IFTRUE 17863
17861: GO 17874
17863: POP
// result = rubase1 ; 2 :
17864: LD_ADDR_VAR 0 2
17868: PUSH
17869: LD_INT 1
17871: ST_TO_ADDR
17872: GO 17894
17874: LD_INT 2
17876: DOUBLE
17877: EQUAL
17878: IFTRUE 17882
17880: GO 17893
17882: POP
// result = rubase2 ; end ;
17883: LD_ADDR_VAR 0 2
17887: PUSH
17888: LD_INT 2
17890: ST_TO_ADDR
17891: GO 17894
17893: POP
// end ;
17894: LD_VAR 0 2
17898: RET
// every 0 0$1 do var side , i , temp_list , buildings_list , soldiers_list , temp_unit , base , val , bazookers , bunkers , under_attack , j ;
17899: GO 17901
17901: DISABLE
17902: LD_INT 0
17904: PPUSH
17905: PPUSH
17906: PPUSH
17907: PPUSH
17908: PPUSH
17909: PPUSH
17910: PPUSH
17911: PPUSH
17912: PPUSH
17913: PPUSH
17914: PPUSH
17915: PPUSH
// begin side = russians ;
17916: LD_ADDR_VAR 0 1
17920: PUSH
17921: LD_EXP 3
17925: ST_TO_ADDR
// for base in ai_bases do
17926: LD_ADDR_VAR 0 7
17930: PUSH
17931: LD_EXP 40
17935: PUSH
17936: FOR_IN
17937: IFFALSE 18854
// begin soldiers_list = ai_soldiers [ base ] ;
17939: LD_ADDR_VAR 0 5
17943: PUSH
17944: LD_EXP 13
17948: PUSH
17949: LD_VAR 0 7
17953: ARRAY
17954: ST_TO_ADDR
// under_attack := BaseUnderAttack ( side , base ) ;
17955: LD_ADDR_VAR 0 11
17959: PUSH
17960: LD_VAR 0 1
17964: PPUSH
17965: LD_VAR 0 7
17969: PPUSH
17970: CALL 25929 0 2
17974: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
17975: LD_ADDR_VAR 0 3
17979: PUSH
17980: LD_EXP 26
17984: PUSH
17985: LD_VAR 0 7
17989: ARRAY
17990: ST_TO_ADDR
// for i in soldiers_list diff ai_heal_these_humans [ base ] do
17991: LD_ADDR_VAR 0 2
17995: PUSH
17996: LD_VAR 0 5
18000: PUSH
18001: LD_EXP 26
18005: PUSH
18006: LD_VAR 0 7
18010: ARRAY
18011: DIFF
18012: PUSH
18013: FOR_IN
18014: IFFALSE 18049
// if GetLives ( i ) < 800 then
18016: LD_VAR 0 2
18020: PPUSH
18021: CALL_OW 256
18025: PUSH
18026: LD_INT 800
18028: LESS
18029: IFFALSE 18047
// temp_list = temp_list ^ i ;
18031: LD_ADDR_VAR 0 3
18035: PUSH
18036: LD_VAR 0 3
18040: PUSH
18041: LD_VAR 0 2
18045: ADD
18046: ST_TO_ADDR
18047: GO 18013
18049: POP
18050: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
18051: LD_ADDR_EXP 26
18055: PUSH
18056: LD_EXP 26
18060: PPUSH
18061: LD_VAR 0 7
18065: PPUSH
18066: LD_VAR 0 3
18070: PPUSH
18071: CALL_OW 1
18075: ST_TO_ADDR
// if not under_attack then
18076: LD_VAR 0 11
18080: NOT
18081: IFFALSE 18196
// begin for i in ai_heal_these_humans [ base ] do
18083: LD_ADDR_VAR 0 2
18087: PUSH
18088: LD_EXP 26
18092: PUSH
18093: LD_VAR 0 7
18097: ARRAY
18098: PUSH
18099: FOR_IN
18100: IFFALSE 18172
// if i in soldiers_list then
18102: LD_VAR 0 2
18106: PUSH
18107: LD_VAR 0 5
18111: IN
18112: IFFALSE 18170
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
18114: LD_VAR 0 2
18118: PPUSH
18119: CALL_OW 310
18123: PPUSH
18124: CALL_OW 247
18128: PUSH
18129: LD_INT 2
18131: DOUBLE
18132: EQUAL
18133: IFTRUE 18137
18135: GO 18149
18137: POP
// ComExitVehicle ( i ) ; unit_building :
18138: LD_VAR 0 2
18142: PPUSH
18143: CALL_OW 121
18147: GO 18170
18149: LD_INT 3
18151: DOUBLE
18152: EQUAL
18153: IFTRUE 18157
18155: GO 18169
18157: POP
// ComExitBuilding ( i ) ; end ;
18158: LD_VAR 0 2
18162: PPUSH
18163: CALL_OW 122
18167: GO 18170
18169: POP
18170: GO 18099
18172: POP
18173: POP
// soldiers_list = soldiers_list diff ai_heal_these_humans [ base ] ;
18174: LD_ADDR_VAR 0 5
18178: PUSH
18179: LD_VAR 0 5
18183: PUSH
18184: LD_EXP 26
18188: PUSH
18189: LD_VAR 0 7
18193: ARRAY
18194: DIFF
18195: ST_TO_ADDR
// end ; if soldiers_list = 0 then
18196: LD_VAR 0 5
18200: PUSH
18201: LD_INT 0
18203: EQUAL
18204: IFFALSE 18208
// continue ;
18206: GO 17936
// i = false ;
18208: LD_ADDR_VAR 0 2
18212: PUSH
18213: LD_INT 0
18215: ST_TO_ADDR
// if IsOk ( ai_depot [ base ] ) then
18216: LD_EXP 18
18220: PUSH
18221: LD_VAR 0 7
18225: ARRAY
18226: PPUSH
18227: CALL_OW 302
18231: IFFALSE 18271
// if GetEnergy ( GetBase ( ai_depot [ base ] ) ) [ 4 ] > 0 then
18233: LD_EXP 18
18237: PUSH
18238: LD_VAR 0 7
18242: ARRAY
18243: PPUSH
18244: CALL_OW 274
18248: PPUSH
18249: CALL_OW 278
18253: PUSH
18254: LD_INT 4
18256: ARRAY
18257: PUSH
18258: LD_INT 0
18260: GREATER
18261: IFFALSE 18271
// i = true ;
18263: LD_ADDR_VAR 0 2
18267: PUSH
18268: LD_INT 1
18270: ST_TO_ADDR
// if i then
18271: LD_VAR 0 2
18275: IFFALSE 18295
// bunkers = ai_bunkers [ base ] else
18277: LD_ADDR_VAR 0 10
18281: PUSH
18282: LD_EXP 32
18286: PUSH
18287: LD_VAR 0 7
18291: ARRAY
18292: ST_TO_ADDR
18293: GO 18356
// begin bunkers = [ ] ;
18295: LD_ADDR_VAR 0 10
18299: PUSH
18300: EMPTY
18301: ST_TO_ADDR
// for i in ai_bunkers [ base ] do
18302: LD_ADDR_VAR 0 2
18306: PUSH
18307: LD_EXP 32
18311: PUSH
18312: LD_VAR 0 7
18316: ARRAY
18317: PUSH
18318: FOR_IN
18319: IFFALSE 18354
// if GetBType ( i ) = b_breastwork then
18321: LD_VAR 0 2
18325: PPUSH
18326: CALL_OW 266
18330: PUSH
18331: LD_INT 31
18333: EQUAL
18334: IFFALSE 18352
// bunkers = bunkers ^ i ;
18336: LD_ADDR_VAR 0 10
18340: PUSH
18341: LD_VAR 0 10
18345: PUSH
18346: LD_VAR 0 2
18350: ADD
18351: ST_TO_ADDR
18352: GO 18318
18354: POP
18355: POP
// end ; buildings_list = [ ] ;
18356: LD_ADDR_VAR 0 4
18360: PUSH
18361: EMPTY
18362: ST_TO_ADDR
// for i in UnitFilter ( bunkers , [ f_ok ] ) do
18363: LD_ADDR_VAR 0 2
18367: PUSH
18368: LD_VAR 0 10
18372: PPUSH
18373: LD_INT 50
18375: PUSH
18376: EMPTY
18377: LIST
18378: PPUSH
18379: CALL_OW 72
18383: PUSH
18384: FOR_IN
18385: IFFALSE 18448
// begin temp_unit = UnitsInside ( i ) ;
18387: LD_ADDR_VAR 0 6
18391: PUSH
18392: LD_VAR 0 2
18396: PPUSH
18397: CALL_OW 313
18401: ST_TO_ADDR
// if temp_unit = 0 then
18402: LD_VAR 0 6
18406: PUSH
18407: LD_INT 0
18409: EQUAL
18410: IFFALSE 18430
// buildings_list = buildings_list ^ i else
18412: LD_ADDR_VAR 0 4
18416: PUSH
18417: LD_VAR 0 4
18421: PUSH
18422: LD_VAR 0 2
18426: ADD
18427: ST_TO_ADDR
18428: GO 18446
// soldiers_list = soldiers_list diff temp_unit ;
18430: LD_ADDR_VAR 0 5
18434: PUSH
18435: LD_VAR 0 5
18439: PUSH
18440: LD_VAR 0 6
18444: DIFF
18445: ST_TO_ADDR
// end ;
18446: GO 18384
18448: POP
18449: POP
// if buildings_list > 0 then
18450: LD_VAR 0 4
18454: PUSH
18455: LD_INT 0
18457: GREATER
18458: IFFALSE 18774
// begin if not under_attack then
18460: LD_VAR 0 11
18464: NOT
18465: IFFALSE 18535
// begin temp_list = [ ] ;
18467: LD_ADDR_VAR 0 3
18471: PUSH
18472: EMPTY
18473: ST_TO_ADDR
// for i in soldiers_list do
18474: LD_ADDR_VAR 0 2
18478: PUSH
18479: LD_VAR 0 5
18483: PUSH
18484: FOR_IN
18485: IFFALSE 18513
// temp_list = temp_list ^ GetSkill ( i , skill_combat ) ;
18487: LD_ADDR_VAR 0 3
18491: PUSH
18492: LD_VAR 0 3
18496: PUSH
18497: LD_VAR 0 2
18501: PPUSH
18502: LD_INT 1
18504: PPUSH
18505: CALL_OW 259
18509: ADD
18510: ST_TO_ADDR
18511: GO 18484
18513: POP
18514: POP
// soldiers_list = SortListByListDesc ( soldiers_list , temp_list ) ;
18515: LD_ADDR_VAR 0 5
18519: PUSH
18520: LD_VAR 0 5
18524: PPUSH
18525: LD_VAR 0 3
18529: PPUSH
18530: CALL_OW 77
18534: ST_TO_ADDR
// end ; bazookers = UnitFilter ( soldiers_list , [ f_class , class_bazooker ] ) ;
18535: LD_ADDR_VAR 0 9
18539: PUSH
18540: LD_VAR 0 5
18544: PPUSH
18545: LD_INT 25
18547: PUSH
18548: LD_INT 9
18550: PUSH
18551: EMPTY
18552: LIST
18553: LIST
18554: PPUSH
18555: CALL_OW 72
18559: ST_TO_ADDR
// soldiers_list = soldiers_list diff bazookers ;
18560: LD_ADDR_VAR 0 5
18564: PUSH
18565: LD_VAR 0 5
18569: PUSH
18570: LD_VAR 0 9
18574: DIFF
18575: ST_TO_ADDR
// for i = 1 to buildings_list do
18576: LD_ADDR_VAR 0 2
18580: PUSH
18581: DOUBLE
18582: LD_INT 1
18584: DEC
18585: ST_TO_ADDR
18586: LD_VAR 0 4
18590: PUSH
18591: FOR_TO
18592: IFFALSE 18770
// begin if soldiers_list = 0 then
18594: LD_VAR 0 5
18598: PUSH
18599: LD_INT 0
18601: EQUAL
18602: IFFALSE 18633
// begin if bazookers = 0 then
18604: LD_VAR 0 9
18608: PUSH
18609: LD_INT 0
18611: EQUAL
18612: IFFALSE 18616
// break ;
18614: GO 18770
// soldiers_list = bazookers ;
18616: LD_ADDR_VAR 0 5
18620: PUSH
18621: LD_VAR 0 9
18625: ST_TO_ADDR
// bazookers = [ ] ;
18626: LD_ADDR_VAR 0 9
18630: PUSH
18631: EMPTY
18632: ST_TO_ADDR
// end ; if not under_attack then
18633: LD_VAR 0 11
18637: NOT
18638: IFFALSE 18656
// temp_unit = soldiers_list [ 1 ] else
18640: LD_ADDR_VAR 0 6
18644: PUSH
18645: LD_VAR 0 5
18649: PUSH
18650: LD_INT 1
18652: ARRAY
18653: ST_TO_ADDR
18654: GO 18732
// begin temp_list = [ ] ;
18656: LD_ADDR_VAR 0 3
18660: PUSH
18661: EMPTY
18662: ST_TO_ADDR
// for j in soldiers_list do
18663: LD_ADDR_VAR 0 12
18667: PUSH
18668: LD_VAR 0 5
18672: PUSH
18673: FOR_IN
18674: IFFALSE 18710
// temp_list = temp_list ^ GetDistUnits ( j , buildings_list [ i ] ) ;
18676: LD_ADDR_VAR 0 3
18680: PUSH
18681: LD_VAR 0 3
18685: PUSH
18686: LD_VAR 0 12
18690: PPUSH
18691: LD_VAR 0 4
18695: PUSH
18696: LD_VAR 0 2
18700: ARRAY
18701: PPUSH
18702: CALL_OW 296
18706: ADD
18707: ST_TO_ADDR
18708: GO 18673
18710: POP
18711: POP
// temp_unit = WorstFromListByList ( soldiers_list , temp_list ) ;
18712: LD_ADDR_VAR 0 6
18716: PUSH
18717: LD_VAR 0 5
18721: PPUSH
18722: LD_VAR 0 3
18726: PPUSH
18727: CALL_OW 78
18731: ST_TO_ADDR
// end ; ComEnterUnit ( temp_unit , buildings_list [ i ] ) ;
18732: LD_VAR 0 6
18736: PPUSH
18737: LD_VAR 0 4
18741: PUSH
18742: LD_VAR 0 2
18746: ARRAY
18747: PPUSH
18748: CALL_OW 120
// soldiers_list = soldiers_list diff temp_unit ;
18752: LD_ADDR_VAR 0 5
18756: PUSH
18757: LD_VAR 0 5
18761: PUSH
18762: LD_VAR 0 6
18766: DIFF
18767: ST_TO_ADDR
// end ;
18768: GO 18591
18770: POP
18771: POP
// end else
18772: GO 18781
// bazookers = [ ] ;
18774: LD_ADDR_VAR 0 9
18778: PUSH
18779: EMPTY
18780: ST_TO_ADDR
// DistributeHumansToBuildings ( base , soldiers_list ^ bazookers , UnitFilter ( ai_armouries [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , false , 6 , true , true ) ;
18781: LD_VAR 0 7
18785: PPUSH
18786: LD_VAR 0 5
18790: PUSH
18791: LD_VAR 0 9
18795: ADD
18796: PPUSH
18797: LD_EXP 31
18801: PUSH
18802: LD_VAR 0 7
18806: ARRAY
18807: PPUSH
18808: LD_INT 50
18810: PUSH
18811: EMPTY
18812: LIST
18813: PUSH
18814: LD_INT 3
18816: PUSH
18817: LD_INT 57
18819: PUSH
18820: EMPTY
18821: LIST
18822: PUSH
18823: EMPTY
18824: LIST
18825: LIST
18826: PUSH
18827: EMPTY
18828: LIST
18829: LIST
18830: PPUSH
18831: CALL_OW 72
18835: PPUSH
18836: LD_INT 0
18838: PPUSH
18839: LD_INT 6
18841: PPUSH
18842: LD_INT 1
18844: PPUSH
18845: LD_INT 1
18847: PPUSH
18848: CALL 20275 0 7
// end ;
18852: GO 17936
18854: POP
18855: POP
// enable ;
18856: ENABLE
// end ;
18857: PPOPN 12
18859: END
// every 0 0$1 do var base , i , temp_list , temp_list_2 , baz ;
18860: GO 18862
18862: DISABLE
18863: LD_INT 0
18865: PPUSH
18866: PPUSH
18867: PPUSH
18868: PPUSH
18869: PPUSH
// begin if final_battle_begin then
18870: LD_EXP 69
18874: IFFALSE 18878
// exit ;
18876: GO 19903
// for base in ai_bases do
18878: LD_ADDR_VAR 0 1
18882: PUSH
18883: LD_EXP 40
18887: PUSH
18888: FOR_IN
18889: IFFALSE 19900
// begin if UnitFilter ( ai_attacking_soldiers [ base ] , [ f_ok ] ) = 0 and UnitFilter ( ai_attacking_scientists [ base ] , [ f_ok ] ) = 0 then
18891: LD_EXP 45
18895: PUSH
18896: LD_VAR 0 1
18900: ARRAY
18901: PPUSH
18902: LD_INT 50
18904: PUSH
18905: EMPTY
18906: LIST
18907: PPUSH
18908: CALL_OW 72
18912: PUSH
18913: LD_INT 0
18915: EQUAL
18916: PUSH
18917: LD_EXP 46
18921: PUSH
18922: LD_VAR 0 1
18926: ARRAY
18927: PPUSH
18928: LD_INT 50
18930: PUSH
18931: EMPTY
18932: LIST
18933: PPUSH
18934: CALL_OW 72
18938: PUSH
18939: LD_INT 0
18941: EQUAL
18942: AND
18943: IFFALSE 19898
// repeat if ai_human_attack_delay [ base ] > 0 0$0 then
18945: LD_EXP 49
18949: PUSH
18950: LD_VAR 0 1
18954: ARRAY
18955: PUSH
18956: LD_INT 0
18958: GREATER
18959: IFFALSE 19121
// begin ai_human_attack_delay = Replace ( ai_human_attack_delay , base , ai_human_attack_delay [ base ] - 0 0$1 ) ;
18961: LD_ADDR_EXP 49
18965: PUSH
18966: LD_EXP 49
18970: PPUSH
18971: LD_VAR 0 1
18975: PPUSH
18976: LD_EXP 49
18980: PUSH
18981: LD_VAR 0 1
18985: ARRAY
18986: PUSH
18987: LD_INT 35
18989: MINUS
18990: PPUSH
18991: CALL_OW 1
18995: ST_TO_ADDR
// if ai_human_attack_delay [ base ] <= 0 0$0 and UnitFilter ( ai_vehicles_attack [ base ] , [ f_ok ] ) = 0 and base = 1 and Rand ( 1 , 2 ) = 1 then
18996: LD_EXP 49
19000: PUSH
19001: LD_VAR 0 1
19005: ARRAY
19006: PUSH
19007: LD_INT 0
19009: LESSEQUAL
19010: PUSH
19011: LD_EXP 23
19015: PUSH
19016: LD_VAR 0 1
19020: ARRAY
19021: PPUSH
19022: LD_INT 50
19024: PUSH
19025: EMPTY
19026: LIST
19027: PPUSH
19028: CALL_OW 72
19032: PUSH
19033: LD_INT 0
19035: EQUAL
19036: AND
19037: PUSH
19038: LD_VAR 0 1
19042: PUSH
19043: LD_INT 1
19045: EQUAL
19046: AND
19047: PUSH
19048: LD_INT 1
19050: PPUSH
19051: LD_INT 2
19053: PPUSH
19054: CALL_OW 12
19058: PUSH
19059: LD_INT 1
19061: EQUAL
19062: AND
19063: IFFALSE 19119
// begin ai_human_attack_delay = Replace ( ai_human_attack_delay , base , ai_vehicle_attack_delay [ base ] ) ;
19065: LD_ADDR_EXP 49
19069: PUSH
19070: LD_EXP 49
19074: PPUSH
19075: LD_VAR 0 1
19079: PPUSH
19080: LD_EXP 39
19084: PUSH
19085: LD_VAR 0 1
19089: ARRAY
19090: PPUSH
19091: CALL_OW 1
19095: ST_TO_ADDR
// ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , base , 0 0$0 ) ;
19096: LD_ADDR_EXP 39
19100: PUSH
19101: LD_EXP 39
19105: PPUSH
19106: LD_VAR 0 1
19110: PPUSH
19111: LD_INT 0
19113: PPUSH
19114: CALL_OW 1
19118: ST_TO_ADDR
// end ; break ;
19119: GO 19898
// end ; if ai_soldiers [ base ] - ai_bunkers [ base ] - ai_armouries [ base ] >= NumOfSoldiersReqToAttack and ai_scientists [ base ] >= NumOfScientistsReqToAttack then
19121: LD_EXP 13
19125: PUSH
19126: LD_VAR 0 1
19130: ARRAY
19131: PUSH
19132: LD_EXP 32
19136: PUSH
19137: LD_VAR 0 1
19141: ARRAY
19142: MINUS
19143: PUSH
19144: LD_EXP 31
19148: PUSH
19149: LD_VAR 0 1
19153: ARRAY
19154: MINUS
19155: PUSH
19156: CALL 19906 0 0
19160: GREATEREQUAL
19161: PUSH
19162: LD_EXP 16
19166: PUSH
19167: LD_VAR 0 1
19171: ARRAY
19172: PUSH
19173: CALL 20152 0 0
19177: GREATEREQUAL
19178: AND
19179: IFFALSE 19894
// begin temp_list_2 = [ ] ;
19181: LD_ADDR_VAR 0 4
19185: PUSH
19186: EMPTY
19187: ST_TO_ADDR
// for i in ai_soldiers [ base ] do
19188: LD_ADDR_VAR 0 2
19192: PUSH
19193: LD_EXP 13
19197: PUSH
19198: LD_VAR 0 1
19202: ARRAY
19203: PUSH
19204: FOR_IN
19205: IFFALSE 19249
// if not IsInUnit ( i ) in ai_bunkers [ base ] then
19207: LD_VAR 0 2
19211: PPUSH
19212: CALL_OW 310
19216: PUSH
19217: LD_EXP 32
19221: PUSH
19222: LD_VAR 0 1
19226: ARRAY
19227: IN
19228: NOT
19229: IFFALSE 19247
// temp_list_2 = temp_list_2 ^ i ;
19231: LD_ADDR_VAR 0 4
19235: PUSH
19236: LD_VAR 0 4
19240: PUSH
19241: LD_VAR 0 2
19245: ADD
19246: ST_TO_ADDR
19247: GO 19204
19249: POP
19250: POP
// temp_list = [ ] ;
19251: LD_ADDR_VAR 0 3
19255: PUSH
19256: EMPTY
19257: ST_TO_ADDR
// for i = 1 to NumOfSoldiersReqToAttack do
19258: LD_ADDR_VAR 0 2
19262: PUSH
19263: DOUBLE
19264: LD_INT 1
19266: DEC
19267: ST_TO_ADDR
19268: CALL 19906 0 0
19272: PUSH
19273: FOR_TO
19274: IFFALSE 19328
// begin if temp_list_2 = 0 then
19276: LD_VAR 0 4
19280: PUSH
19281: LD_INT 0
19283: EQUAL
19284: IFFALSE 19288
// break ;
19286: GO 19328
// temp_list = temp_list ^ temp_list_2 [ 1 ] ;
19288: LD_ADDR_VAR 0 3
19292: PUSH
19293: LD_VAR 0 3
19297: PUSH
19298: LD_VAR 0 4
19302: PUSH
19303: LD_INT 1
19305: ARRAY
19306: ADD
19307: ST_TO_ADDR
// temp_list_2 = Delete ( temp_list_2 , 1 ) ;
19308: LD_ADDR_VAR 0 4
19312: PUSH
19313: LD_VAR 0 4
19317: PPUSH
19318: LD_INT 1
19320: PPUSH
19321: CALL_OW 3
19325: ST_TO_ADDR
// end ;
19326: GO 19273
19328: POP
19329: POP
// temp_list_2 = ai_soldiers [ base ] diff temp_list ;
19330: LD_ADDR_VAR 0 4
19334: PUSH
19335: LD_EXP 13
19339: PUSH
19340: LD_VAR 0 1
19344: ARRAY
19345: PUSH
19346: LD_VAR 0 3
19350: DIFF
19351: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list_2 ) ;
19352: LD_ADDR_EXP 13
19356: PUSH
19357: LD_EXP 13
19361: PPUSH
19362: LD_VAR 0 1
19366: PPUSH
19367: LD_VAR 0 4
19371: PPUSH
19372: CALL_OW 1
19376: ST_TO_ADDR
// ai_attacking_soldiers = Replace ( ai_attacking_soldiers , base , temp_list ) ;
19377: LD_ADDR_EXP 45
19381: PUSH
19382: LD_EXP 45
19386: PPUSH
19387: LD_VAR 0 1
19391: PPUSH
19392: LD_VAR 0 3
19396: PPUSH
19397: CALL_OW 1
19401: ST_TO_ADDR
// baz = UnitFilter ( ai_attacking_soldiers [ base ] , [ f_class , class_bazooker ] ) ;
19402: LD_ADDR_VAR 0 5
19406: PUSH
19407: LD_EXP 45
19411: PUSH
19412: LD_VAR 0 1
19416: ARRAY
19417: PPUSH
19418: LD_INT 25
19420: PUSH
19421: LD_INT 9
19423: PUSH
19424: EMPTY
19425: LIST
19426: LIST
19427: PPUSH
19428: CALL_OW 72
19432: ST_TO_ADDR
// if baz <> NumOfBazookersInAttack then
19433: LD_VAR 0 5
19437: PUSH
19438: CALL 20029 0 0
19442: NONEQUAL
19443: IFFALSE 19578
// begin for i in ai_attacking_soldiers [ base ] do
19445: LD_ADDR_VAR 0 2
19449: PUSH
19450: LD_EXP 45
19454: PUSH
19455: LD_VAR 0 1
19459: ARRAY
19460: PUSH
19461: FOR_IN
19462: IFFALSE 19576
// begin if baz = NumOfBazookersInAttack then
19464: LD_VAR 0 5
19468: PUSH
19469: CALL 20029 0 0
19473: EQUAL
19474: IFFALSE 19478
// break ;
19476: GO 19576
// if baz < NumOfBazookersInAttack then
19478: LD_VAR 0 5
19482: PUSH
19483: CALL 20029 0 0
19487: LESS
19488: IFFALSE 19533
// begin if GetClass ( i ) <> class_bazooker then
19490: LD_VAR 0 2
19494: PPUSH
19495: CALL_OW 257
19499: PUSH
19500: LD_INT 9
19502: NONEQUAL
19503: IFFALSE 19531
// begin SetClass ( i , class_bazooker ) ;
19505: LD_VAR 0 2
19509: PPUSH
19510: LD_INT 9
19512: PPUSH
19513: CALL_OW 336
// baz = baz + 1 ;
19517: LD_ADDR_VAR 0 5
19521: PUSH
19522: LD_VAR 0 5
19526: PUSH
19527: LD_INT 1
19529: PLUS
19530: ST_TO_ADDR
// end ; end else
19531: GO 19574
// begin if GetClass ( i ) = class_bazooker then
19533: LD_VAR 0 2
19537: PPUSH
19538: CALL_OW 257
19542: PUSH
19543: LD_INT 9
19545: EQUAL
19546: IFFALSE 19574
// begin SetClass ( i , class_soldier ) ;
19548: LD_VAR 0 2
19552: PPUSH
19553: LD_INT 1
19555: PPUSH
19556: CALL_OW 336
// baz = baz - 1 ;
19560: LD_ADDR_VAR 0 5
19564: PUSH
19565: LD_VAR 0 5
19569: PUSH
19570: LD_INT 1
19572: MINUS
19573: ST_TO_ADDR
// end ; end ; end ;
19574: GO 19461
19576: POP
19577: POP
// end ; temp_list = [ ] ;
19578: LD_ADDR_VAR 0 3
19582: PUSH
19583: EMPTY
19584: ST_TO_ADDR
// for i = 1 to NumOfScientistsReqToAttack do
19585: LD_ADDR_VAR 0 2
19589: PUSH
19590: DOUBLE
19591: LD_INT 1
19593: DEC
19594: ST_TO_ADDR
19595: CALL 20152 0 0
19599: PUSH
19600: FOR_TO
19601: IFFALSE 19633
// temp_list = temp_list ^ ai_scientists [ base ] [ i ] ;
19603: LD_ADDR_VAR 0 3
19607: PUSH
19608: LD_VAR 0 3
19612: PUSH
19613: LD_EXP 16
19617: PUSH
19618: LD_VAR 0 1
19622: ARRAY
19623: PUSH
19624: LD_VAR 0 2
19628: ARRAY
19629: ADD
19630: ST_TO_ADDR
19631: GO 19600
19633: POP
19634: POP
// temp_list_2 = ai_scientists [ base ] diff temp_list ;
19635: LD_ADDR_VAR 0 4
19639: PUSH
19640: LD_EXP 16
19644: PUSH
19645: LD_VAR 0 1
19649: ARRAY
19650: PUSH
19651: LD_VAR 0 3
19655: DIFF
19656: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , temp_list_2 ) ;
19657: LD_ADDR_EXP 16
19661: PUSH
19662: LD_EXP 16
19666: PPUSH
19667: LD_VAR 0 1
19671: PPUSH
19672: LD_VAR 0 4
19676: PPUSH
19677: CALL_OW 1
19681: ST_TO_ADDR
// ai_attacking_scientists = Replace ( ai_attacking_scientists , base , temp_list ) ;
19682: LD_ADDR_EXP 46
19686: PUSH
19687: LD_EXP 46
19691: PPUSH
19692: LD_VAR 0 1
19696: PPUSH
19697: LD_VAR 0 3
19701: PPUSH
19702: CALL_OW 1
19706: ST_TO_ADDR
// for i in ai_attacking_soldiers [ base ] ^ ai_attacking_scientists [ base ] do
19707: LD_ADDR_VAR 0 2
19711: PUSH
19712: LD_EXP 45
19716: PUSH
19717: LD_VAR 0 1
19721: ARRAY
19722: PUSH
19723: LD_EXP 46
19727: PUSH
19728: LD_VAR 0 1
19732: ARRAY
19733: ADD
19734: PUSH
19735: FOR_IN
19736: IFFALSE 19794
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , i , 1 ) ;
19738: LD_ADDR_VAR 0 3
19742: PUSH
19743: LD_EXP 47
19747: PUSH
19748: LD_VAR 0 1
19752: ARRAY
19753: PPUSH
19754: LD_VAR 0 2
19758: PPUSH
19759: LD_INT 1
19761: PPUSH
19762: CALL_OW 1
19766: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
19767: LD_ADDR_EXP 47
19771: PUSH
19772: LD_EXP 47
19776: PPUSH
19777: LD_VAR 0 1
19781: PPUSH
19782: LD_VAR 0 3
19786: PPUSH
19787: CALL_OW 1
19791: ST_TO_ADDR
// end ;
19792: GO 19735
19794: POP
19795: POP
// if FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] , [ f_inarea , rubase2scanarea ] ] ) > 0 and Rand ( 1 , 2 ) = 1 then
19796: LD_INT 22
19798: PUSH
19799: LD_EXP 2
19803: PUSH
19804: EMPTY
19805: LIST
19806: LIST
19807: PUSH
19808: LD_INT 21
19810: PUSH
19811: LD_INT 3
19813: PUSH
19814: EMPTY
19815: LIST
19816: LIST
19817: PUSH
19818: LD_INT 95
19820: PUSH
19821: LD_INT 8
19823: PUSH
19824: EMPTY
19825: LIST
19826: LIST
19827: PUSH
19828: EMPTY
19829: LIST
19830: LIST
19831: LIST
19832: PPUSH
19833: CALL_OW 69
19837: PUSH
19838: LD_INT 0
19840: GREATER
19841: PUSH
19842: LD_INT 1
19844: PPUSH
19845: LD_INT 2
19847: PPUSH
19848: CALL_OW 12
19852: PUSH
19853: LD_INT 1
19855: EQUAL
19856: AND
19857: IFFALSE 19869
// human_attack_strategy = 4 else
19859: LD_ADDR_EXP 50
19863: PUSH
19864: LD_INT 4
19866: ST_TO_ADDR
19867: GO 19885
// human_attack_strategy = Rand ( 1 , 3 ) ;
19869: LD_ADDR_EXP 50
19873: PUSH
19874: LD_INT 1
19876: PPUSH
19877: LD_INT 3
19879: PPUSH
19880: CALL_OW 12
19884: ST_TO_ADDR
// ResetHumanAttackDelay ( base ) ;
19885: LD_VAR 0 1
19889: PPUSH
19890: CALL 7678 0 1
// end ; until true ;
19894: LD_INT 1
19896: IFFALSE 18945
// end ;
19898: GO 18888
19900: POP
19901: POP
// enable ;
19902: ENABLE
// end ;
19903: PPOPN 5
19905: END
// function NumOfSoldiersReqToAttack ; begin
19906: LD_INT 0
19908: PPUSH
// case tick of 0 .. 15 15$0 :
19909: LD_OWVAR 1
19913: PUSH
19914: LD_INT 0
19916: DOUBLE
19917: GREATEREQUAL
19918: IFFALSE 19926
19920: LD_INT 31500
19922: DOUBLE
19923: LESSEQUAL
19924: IFTRUE 19928
19926: GO 19956
19928: POP
// result = [ 2 , 3 , 4 ] [ difficulty ] ; 0 .. 30 30$0 :
19929: LD_ADDR_VAR 0 1
19933: PUSH
19934: LD_INT 2
19936: PUSH
19937: LD_INT 3
19939: PUSH
19940: LD_INT 4
19942: PUSH
19943: EMPTY
19944: LIST
19945: LIST
19946: LIST
19947: PUSH
19948: LD_OWVAR 67
19952: ARRAY
19953: ST_TO_ADDR
19954: GO 20024
19956: LD_INT 0
19958: DOUBLE
19959: GREATEREQUAL
19960: IFFALSE 19968
19962: LD_INT 63000
19964: DOUBLE
19965: LESSEQUAL
19966: IFTRUE 19970
19968: GO 19998
19970: POP
// result = [ 3 , 4 , 5 ] [ difficulty ] ; else
19971: LD_ADDR_VAR 0 1
19975: PUSH
19976: LD_INT 3
19978: PUSH
19979: LD_INT 4
19981: PUSH
19982: LD_INT 5
19984: PUSH
19985: EMPTY
19986: LIST
19987: LIST
19988: LIST
19989: PUSH
19990: LD_OWVAR 67
19994: ARRAY
19995: ST_TO_ADDR
19996: GO 20024
19998: POP
// result = [ 4 , 5 , 6 ] [ difficulty ] ; end ;
19999: LD_ADDR_VAR 0 1
20003: PUSH
20004: LD_INT 4
20006: PUSH
20007: LD_INT 5
20009: PUSH
20010: LD_INT 6
20012: PUSH
20013: EMPTY
20014: LIST
20015: LIST
20016: LIST
20017: PUSH
20018: LD_OWVAR 67
20022: ARRAY
20023: ST_TO_ADDR
// end ;
20024: LD_VAR 0 1
20028: RET
// function NumOfBazookersInAttack ; begin
20029: LD_INT 0
20031: PPUSH
// case tick of 0 .. 15 15$0 :
20032: LD_OWVAR 1
20036: PUSH
20037: LD_INT 0
20039: DOUBLE
20040: GREATEREQUAL
20041: IFFALSE 20049
20043: LD_INT 31500
20045: DOUBLE
20046: LESSEQUAL
20047: IFTRUE 20051
20049: GO 20079
20051: POP
// result = [ 0 , 1 , 2 ] [ difficulty ] ; 0 .. 30 30$0 :
20052: LD_ADDR_VAR 0 1
20056: PUSH
20057: LD_INT 0
20059: PUSH
20060: LD_INT 1
20062: PUSH
20063: LD_INT 2
20065: PUSH
20066: EMPTY
20067: LIST
20068: LIST
20069: LIST
20070: PUSH
20071: LD_OWVAR 67
20075: ARRAY
20076: ST_TO_ADDR
20077: GO 20147
20079: LD_INT 0
20081: DOUBLE
20082: GREATEREQUAL
20083: IFFALSE 20091
20085: LD_INT 63000
20087: DOUBLE
20088: LESSEQUAL
20089: IFTRUE 20093
20091: GO 20121
20093: POP
// result = [ 1 , 2 , 3 ] [ difficulty ] ; else
20094: LD_ADDR_VAR 0 1
20098: PUSH
20099: LD_INT 1
20101: PUSH
20102: LD_INT 2
20104: PUSH
20105: LD_INT 3
20107: PUSH
20108: EMPTY
20109: LIST
20110: LIST
20111: LIST
20112: PUSH
20113: LD_OWVAR 67
20117: ARRAY
20118: ST_TO_ADDR
20119: GO 20147
20121: POP
// result = [ 2 , 3 , 4 ] [ difficulty ] ; end ;
20122: LD_ADDR_VAR 0 1
20126: PUSH
20127: LD_INT 2
20129: PUSH
20130: LD_INT 3
20132: PUSH
20133: LD_INT 4
20135: PUSH
20136: EMPTY
20137: LIST
20138: LIST
20139: LIST
20140: PUSH
20141: LD_OWVAR 67
20145: ARRAY
20146: ST_TO_ADDR
// end ;
20147: LD_VAR 0 1
20151: RET
// function NumOfScientistsReqToAttack ; begin
20152: LD_INT 0
20154: PPUSH
// case tick of 0 .. 15 15$0 :
20155: LD_OWVAR 1
20159: PUSH
20160: LD_INT 0
20162: DOUBLE
20163: GREATEREQUAL
20164: IFFALSE 20172
20166: LD_INT 31500
20168: DOUBLE
20169: LESSEQUAL
20170: IFTRUE 20174
20172: GO 20202
20174: POP
// result = [ 1 , 1 , 2 ] [ difficulty ] ; 0 .. 30 30$0 :
20175: LD_ADDR_VAR 0 1
20179: PUSH
20180: LD_INT 1
20182: PUSH
20183: LD_INT 1
20185: PUSH
20186: LD_INT 2
20188: PUSH
20189: EMPTY
20190: LIST
20191: LIST
20192: LIST
20193: PUSH
20194: LD_OWVAR 67
20198: ARRAY
20199: ST_TO_ADDR
20200: GO 20270
20202: LD_INT 0
20204: DOUBLE
20205: GREATEREQUAL
20206: IFFALSE 20214
20208: LD_INT 63000
20210: DOUBLE
20211: LESSEQUAL
20212: IFTRUE 20216
20214: GO 20244
20216: POP
// result = [ 1 , 2 , 2 ] [ difficulty ] ; else
20217: LD_ADDR_VAR 0 1
20221: PUSH
20222: LD_INT 1
20224: PUSH
20225: LD_INT 2
20227: PUSH
20228: LD_INT 2
20230: PUSH
20231: EMPTY
20232: LIST
20233: LIST
20234: LIST
20235: PUSH
20236: LD_OWVAR 67
20240: ARRAY
20241: ST_TO_ADDR
20242: GO 20270
20244: POP
// result = [ 2 , 2 , 3 ] [ difficulty ] ; end ;
20245: LD_ADDR_VAR 0 1
20249: PUSH
20250: LD_INT 2
20252: PUSH
20253: LD_INT 2
20255: PUSH
20256: LD_INT 3
20258: PUSH
20259: EMPTY
20260: LIST
20261: LIST
20262: LIST
20263: PUSH
20264: LD_OWVAR 67
20268: ARRAY
20269: ST_TO_ADDR
// end ;
20270: LD_VAR 0 1
20274: 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
20275: LD_INT 0
20277: PPUSH
20278: PPUSH
20279: PPUSH
20280: PPUSH
20281: PPUSH
20282: PPUSH
20283: PPUSH
20284: PPUSH
20285: PPUSH
20286: PPUSH
// if human_list = 0 then
20287: LD_VAR 0 2
20291: PUSH
20292: LD_INT 0
20294: EQUAL
20295: IFFALSE 20299
// exit ;
20297: GO 21612
// case base of 1 :
20299: LD_VAR 0 1
20303: PUSH
20304: LD_INT 1
20306: DOUBLE
20307: EQUAL
20308: IFTRUE 20312
20310: GO 20323
20312: POP
// area = rubase1 ; 2 :
20313: LD_ADDR_VAR 0 13
20317: PUSH
20318: LD_INT 1
20320: ST_TO_ADDR
20321: GO 20343
20323: LD_INT 2
20325: DOUBLE
20326: EQUAL
20327: IFTRUE 20331
20329: GO 20342
20331: POP
// area = rubase2 ; end ;
20332: LD_ADDR_VAR 0 13
20336: PUSH
20337: LD_INT 2
20339: ST_TO_ADDR
20340: GO 20343
20342: POP
// under_attack = BaseUnderAttack ( GetBaseSide ( base ) , base ) ;
20343: LD_ADDR_VAR 0 17
20347: PUSH
20348: LD_VAR 0 1
20352: PPUSH
20353: CALL 17829 0 1
20357: PPUSH
20358: LD_VAR 0 1
20362: PPUSH
20363: CALL 25929 0 2
20367: ST_TO_ADDR
// if not GetClass ( human_list [ 1 ] ) in [ class_engineer , class_apeman_engineer , class_mechanic , class_scientistic ] and building_list > 0 then
20368: LD_VAR 0 2
20372: PUSH
20373: LD_INT 1
20375: ARRAY
20376: PPUSH
20377: CALL_OW 257
20381: PUSH
20382: LD_INT 2
20384: PUSH
20385: LD_INT 16
20387: PUSH
20388: LD_INT 3
20390: PUSH
20391: LD_INT 4
20393: PUSH
20394: EMPTY
20395: LIST
20396: LIST
20397: LIST
20398: LIST
20399: IN
20400: NOT
20401: PUSH
20402: LD_VAR 0 3
20406: PUSH
20407: LD_INT 0
20409: GREATER
20410: AND
20411: IFFALSE 20500
// begin val = 0 ;
20413: LD_ADDR_VAR 0 11
20417: PUSH
20418: LD_INT 0
20420: ST_TO_ADDR
// for i in human_list do
20421: LD_ADDR_VAR 0 9
20425: PUSH
20426: LD_VAR 0 2
20430: PUSH
20431: FOR_IN
20432: IFFALSE 20476
// if GetClass ( i ) in [ class_sniper , class_mortar , class_bazooker ] then
20434: LD_VAR 0 9
20438: PPUSH
20439: CALL_OW 257
20443: PUSH
20444: LD_INT 5
20446: PUSH
20447: LD_INT 8
20449: PUSH
20450: LD_INT 9
20452: PUSH
20453: EMPTY
20454: LIST
20455: LIST
20456: LIST
20457: IN
20458: IFFALSE 20474
// val = val + 1 ;
20460: LD_ADDR_VAR 0 11
20464: PUSH
20465: LD_VAR 0 11
20469: PUSH
20470: LD_INT 1
20472: PLUS
20473: ST_TO_ADDR
20474: GO 20431
20476: POP
20477: POP
// special_un_count = val div ( building_list + 0 ) ;
20478: LD_ADDR_VAR 0 14
20482: PUSH
20483: LD_VAR 0 11
20487: PUSH
20488: LD_VAR 0 3
20492: PUSH
20493: LD_INT 0
20495: PLUS
20496: DIV
20497: ST_TO_ADDR
// end else
20498: GO 20508
// special_un_count = 0 ;
20500: LD_ADDR_VAR 0 14
20504: PUSH
20505: LD_INT 0
20507: ST_TO_ADDR
// val = building_list + 0 ;
20508: LD_ADDR_VAR 0 11
20512: PUSH
20513: LD_VAR 0 3
20517: PUSH
20518: LD_INT 0
20520: PLUS
20521: ST_TO_ADDR
// while val > 0 and human_list > 0 do
20522: LD_VAR 0 11
20526: PUSH
20527: LD_INT 0
20529: GREATER
20530: PUSH
20531: LD_VAR 0 2
20535: PUSH
20536: LD_INT 0
20538: GREATER
20539: AND
20540: IFFALSE 21346
// begin temp_list = [ ] ;
20542: LD_ADDR_VAR 0 10
20546: PUSH
20547: EMPTY
20548: ST_TO_ADDR
// for i in human_list do
20549: LD_ADDR_VAR 0 9
20553: PUSH
20554: LD_VAR 0 2
20558: PUSH
20559: FOR_IN
20560: IFFALSE 20603
// if IsInUnit ( i ) = building_list [ val ] then
20562: LD_VAR 0 9
20566: PPUSH
20567: CALL_OW 310
20571: PUSH
20572: LD_VAR 0 3
20576: PUSH
20577: LD_VAR 0 11
20581: ARRAY
20582: EQUAL
20583: IFFALSE 20601
// temp_list = temp_list ^ i ;
20585: LD_ADDR_VAR 0 10
20589: PUSH
20590: LD_VAR 0 10
20594: PUSH
20595: LD_VAR 0 9
20599: ADD
20600: ST_TO_ADDR
20601: GO 20559
20603: POP
20604: POP
// human_list = temp_list ^ ( human_list diff temp_list ) ;
20605: LD_ADDR_VAR 0 2
20609: PUSH
20610: LD_VAR 0 10
20614: PUSH
20615: LD_VAR 0 2
20619: PUSH
20620: LD_VAR 0 10
20624: DIFF
20625: ADD
20626: ST_TO_ADDR
// counter = 0 ;
20627: LD_ADDR_VAR 0 15
20631: PUSH
20632: LD_INT 0
20634: ST_TO_ADDR
// temp_list = [ ] ;
20635: LD_ADDR_VAR 0 10
20639: PUSH
20640: EMPTY
20641: ST_TO_ADDR
// for i = 1 to human_list div val do
20642: LD_ADDR_VAR 0 9
20646: PUSH
20647: DOUBLE
20648: LD_INT 1
20650: DEC
20651: ST_TO_ADDR
20652: LD_VAR 0 2
20656: PUSH
20657: LD_VAR 0 11
20661: DIV
20662: PUSH
20663: FOR_TO
20664: IFFALSE 21029
// begin if i > building_capacity then
20666: LD_VAR 0 9
20670: PUSH
20671: LD_VAR 0 5
20675: GREATER
20676: IFFALSE 20680
// break ;
20678: GO 21029
// if special_un_count = 0 then
20680: LD_VAR 0 14
20684: PUSH
20685: LD_INT 0
20687: EQUAL
20688: IFFALSE 20730
// begin temp_list = temp_list ^ human_list [ 1 ] ;
20690: LD_ADDR_VAR 0 10
20694: PUSH
20695: LD_VAR 0 10
20699: PUSH
20700: LD_VAR 0 2
20704: PUSH
20705: LD_INT 1
20707: ARRAY
20708: ADD
20709: ST_TO_ADDR
// human_list = Delete ( human_list , 1 ) ;
20710: LD_ADDR_VAR 0 2
20714: PUSH
20715: LD_VAR 0 2
20719: PPUSH
20720: LD_INT 1
20722: PPUSH
20723: CALL_OW 3
20727: ST_TO_ADDR
// end else
20728: GO 21027
// if counter = special_un_count then
20730: LD_VAR 0 15
20734: PUSH
20735: LD_VAR 0 14
20739: EQUAL
20740: IFFALSE 20879
// begin temp_unit = 0 ;
20742: LD_ADDR_VAR 0 12
20746: PUSH
20747: LD_INT 0
20749: ST_TO_ADDR
// for k = 1 to human_list do
20750: LD_ADDR_VAR 0 16
20754: PUSH
20755: DOUBLE
20756: LD_INT 1
20758: DEC
20759: ST_TO_ADDR
20760: LD_VAR 0 2
20764: PUSH
20765: FOR_TO
20766: IFFALSE 20815
// if not GetClass ( human_list [ k ] ) in [ class_sniper , class_mortar , class_bazooker ] then
20768: LD_VAR 0 2
20772: PUSH
20773: LD_VAR 0 16
20777: ARRAY
20778: PPUSH
20779: CALL_OW 257
20783: PUSH
20784: LD_INT 5
20786: PUSH
20787: LD_INT 8
20789: PUSH
20790: LD_INT 9
20792: PUSH
20793: EMPTY
20794: LIST
20795: LIST
20796: LIST
20797: IN
20798: NOT
20799: IFFALSE 20813
// begin temp_unit = k ;
20801: LD_ADDR_VAR 0 12
20805: PUSH
20806: LD_VAR 0 16
20810: ST_TO_ADDR
// break ;
20811: GO 20815
// end ;
20813: GO 20765
20815: POP
20816: POP
// if temp_unit = 0 then
20817: LD_VAR 0 12
20821: PUSH
20822: LD_INT 0
20824: EQUAL
20825: IFFALSE 20835
// temp_unit = 1 ;
20827: LD_ADDR_VAR 0 12
20831: PUSH
20832: LD_INT 1
20834: ST_TO_ADDR
// temp_list = temp_list ^ human_list [ temp_unit ] ;
20835: LD_ADDR_VAR 0 10
20839: PUSH
20840: LD_VAR 0 10
20844: PUSH
20845: LD_VAR 0 2
20849: PUSH
20850: LD_VAR 0 12
20854: ARRAY
20855: ADD
20856: ST_TO_ADDR
// human_list = Delete ( human_list , temp_unit ) ;
20857: LD_ADDR_VAR 0 2
20861: PUSH
20862: LD_VAR 0 2
20866: PPUSH
20867: LD_VAR 0 12
20871: PPUSH
20872: CALL_OW 3
20876: ST_TO_ADDR
// end else
20877: GO 21027
// begin counter = counter + 1 ;
20879: LD_ADDR_VAR 0 15
20883: PUSH
20884: LD_VAR 0 15
20888: PUSH
20889: LD_INT 1
20891: PLUS
20892: ST_TO_ADDR
// temp_unit = 0 ;
20893: LD_ADDR_VAR 0 12
20897: PUSH
20898: LD_INT 0
20900: ST_TO_ADDR
// for k = 1 to human_list do
20901: LD_ADDR_VAR 0 16
20905: PUSH
20906: DOUBLE
20907: LD_INT 1
20909: DEC
20910: ST_TO_ADDR
20911: LD_VAR 0 2
20915: PUSH
20916: FOR_TO
20917: IFFALSE 20965
// if GetClass ( human_list [ k ] ) in [ class_sniper , class_mortar , class_bazooker ] then
20919: LD_VAR 0 2
20923: PUSH
20924: LD_VAR 0 16
20928: ARRAY
20929: PPUSH
20930: CALL_OW 257
20934: PUSH
20935: LD_INT 5
20937: PUSH
20938: LD_INT 8
20940: PUSH
20941: LD_INT 9
20943: PUSH
20944: EMPTY
20945: LIST
20946: LIST
20947: LIST
20948: IN
20949: IFFALSE 20963
// begin temp_unit = k ;
20951: LD_ADDR_VAR 0 12
20955: PUSH
20956: LD_VAR 0 16
20960: ST_TO_ADDR
// break ;
20961: GO 20965
// end ;
20963: GO 20916
20965: POP
20966: POP
// if temp_unit = 0 then
20967: LD_VAR 0 12
20971: PUSH
20972: LD_INT 0
20974: EQUAL
20975: IFFALSE 20985
// temp_unit = 1 ;
20977: LD_ADDR_VAR 0 12
20981: PUSH
20982: LD_INT 1
20984: ST_TO_ADDR
// temp_list = temp_list ^ human_list [ temp_unit ] ;
20985: LD_ADDR_VAR 0 10
20989: PUSH
20990: LD_VAR 0 10
20994: PUSH
20995: LD_VAR 0 2
20999: PUSH
21000: LD_VAR 0 12
21004: ARRAY
21005: ADD
21006: ST_TO_ADDR
// human_list = Delete ( human_list , temp_unit ) ;
21007: LD_ADDR_VAR 0 2
21011: PUSH
21012: LD_VAR 0 2
21016: PPUSH
21017: LD_VAR 0 12
21021: PPUSH
21022: CALL_OW 3
21026: ST_TO_ADDR
// end ; end ;
21027: GO 20663
21029: POP
21030: POP
// for i in temp_list do
21031: LD_ADDR_VAR 0 9
21035: PUSH
21036: LD_VAR 0 10
21040: PUSH
21041: FOR_IN
21042: IFFALSE 21328
// begin temp_unit = IsInUnit ( i ) ;
21044: LD_ADDR_VAR 0 12
21048: PUSH
21049: LD_VAR 0 9
21053: PPUSH
21054: CALL_OW 310
21058: ST_TO_ADDR
// if temp_unit <> building_list [ val ] then
21059: LD_VAR 0 12
21063: PUSH
21064: LD_VAR 0 3
21068: PUSH
21069: LD_VAR 0 11
21073: ARRAY
21074: NONEQUAL
21075: IFFALSE 21326
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
21077: LD_VAR 0 9
21081: PPUSH
21082: CALL_OW 310
21086: PPUSH
21087: CALL_OW 247
21091: PUSH
21092: LD_INT 2
21094: DOUBLE
21095: EQUAL
21096: IFTRUE 21100
21098: GO 21112
21100: POP
// ComExitVehicle ( i ) ; unit_building :
21101: LD_VAR 0 9
21105: PPUSH
21106: CALL_OW 121
21110: GO 21326
21112: LD_INT 3
21114: DOUBLE
21115: EQUAL
21116: IFTRUE 21120
21118: GO 21132
21120: POP
// ComExitBuilding ( i ) ; else
21121: LD_VAR 0 9
21125: PPUSH
21126: CALL_OW 122
21130: GO 21326
21132: POP
// begin if IsInArea ( i , area ) or not aggressive_pullback then
21133: LD_VAR 0 9
21137: PPUSH
21138: LD_VAR 0 13
21142: PPUSH
21143: CALL_OW 308
21147: PUSH
21148: LD_VAR 0 7
21152: NOT
21153: OR
21154: IFFALSE 21178
// ComEnterUnit ( i , building_list [ val ] ) else
21156: LD_VAR 0 9
21160: PPUSH
21161: LD_VAR 0 3
21165: PUSH
21166: LD_VAR 0 11
21170: ARRAY
21171: PPUSH
21172: CALL_OW 120
21176: GO 21219
// ComAgressiveMove ( i , GetX ( building_list [ val ] ) , GetY ( building_list [ val ] ) ) ;
21178: LD_VAR 0 9
21182: PPUSH
21183: LD_VAR 0 3
21187: PUSH
21188: LD_VAR 0 11
21192: ARRAY
21193: PPUSH
21194: CALL_OW 250
21198: PPUSH
21199: LD_VAR 0 3
21203: PUSH
21204: LD_VAR 0 11
21208: ARRAY
21209: PPUSH
21210: CALL_OW 251
21214: PPUSH
21215: CALL_OW 114
// if change_to_this_class > 0 then
21219: LD_VAR 0 4
21223: PUSH
21224: LD_INT 0
21226: GREATER
21227: IFFALSE 21326
// begin if GetClass ( i ) <> change_to_this_class and GetNation ( i ) <> nation_nature then
21229: LD_VAR 0 9
21233: PPUSH
21234: CALL_OW 257
21238: PUSH
21239: LD_VAR 0 4
21243: NONEQUAL
21244: PUSH
21245: LD_VAR 0 9
21249: PPUSH
21250: CALL_OW 248
21254: PUSH
21255: LD_INT 0
21257: NONEQUAL
21258: AND
21259: IFFALSE 21326
// 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
21261: LD_VAR 0 4
21265: PUSH
21266: LD_INT 5
21268: PUSH
21269: LD_INT 8
21271: PUSH
21272: LD_INT 9
21274: PUSH
21275: EMPTY
21276: LIST
21277: LIST
21278: LIST
21279: IN
21280: PUSH
21281: LD_VAR 0 3
21285: PUSH
21286: LD_VAR 0 11
21290: ARRAY
21291: PPUSH
21292: CALL_OW 266
21296: PUSH
21297: LD_INT 5
21299: PUSH
21300: LD_INT 35
21302: PUSH
21303: EMPTY
21304: LIST
21305: LIST
21306: IN
21307: NOT
21308: AND
21309: NOT
21310: IFFALSE 21326
// AddComChangeProfession ( i , change_to_this_class ) ;
21312: LD_VAR 0 9
21316: PPUSH
21317: LD_VAR 0 4
21321: PPUSH
21322: CALL_OW 183
// end ; end ; end ; end ;
21326: GO 21041
21328: POP
21329: POP
// val = val - 1 ;
21330: LD_ADDR_VAR 0 11
21334: PUSH
21335: LD_VAR 0 11
21339: PUSH
21340: LD_INT 1
21342: MINUS
21343: ST_TO_ADDR
// end ;
21344: GO 20522
// if human_list > 0 then
21346: LD_VAR 0 2
21350: PUSH
21351: LD_INT 0
21353: GREATER
21354: IFFALSE 21612
// if ai_building_under_construction [ base ] > 0 and help_building and not under_attack then
21356: LD_EXP 25
21360: PUSH
21361: LD_VAR 0 1
21365: ARRAY
21366: PUSH
21367: LD_INT 0
21369: GREATER
21370: PUSH
21371: LD_VAR 0 6
21375: AND
21376: PUSH
21377: LD_VAR 0 17
21381: NOT
21382: AND
21383: IFFALSE 21459
// begin for i in GetHumansOutOfUnits ( human_list ) do
21385: LD_ADDR_VAR 0 9
21389: PUSH
21390: LD_VAR 0 2
21394: PPUSH
21395: CALL 25824 0 1
21399: PUSH
21400: FOR_IN
21401: IFFALSE 21455
// SetTaskList ( i , [ [ h , 0 , 0 , ai_building_under_construction [ base ] , 0 , 0 , 0 ] ] ) ;
21403: LD_VAR 0 9
21407: PPUSH
21408: LD_STRING h
21410: PUSH
21411: LD_INT 0
21413: PUSH
21414: LD_INT 0
21416: PUSH
21417: LD_EXP 25
21421: PUSH
21422: LD_VAR 0 1
21426: ARRAY
21427: PUSH
21428: LD_INT 0
21430: PUSH
21431: LD_INT 0
21433: PUSH
21434: LD_INT 0
21436: PUSH
21437: EMPTY
21438: LIST
21439: LIST
21440: LIST
21441: LIST
21442: LIST
21443: LIST
21444: LIST
21445: PUSH
21446: EMPTY
21447: LIST
21448: PPUSH
21449: CALL_OW 446
21453: GO 21400
21455: POP
21456: POP
// end else
21457: GO 21612
// for i in GetHumansOutOfUnits ( human_list ) do
21459: LD_ADDR_VAR 0 9
21463: PUSH
21464: LD_VAR 0 2
21468: PPUSH
21469: CALL 25824 0 1
21473: PUSH
21474: FOR_IN
21475: IFFALSE 21610
// if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
21477: LD_VAR 0 9
21481: PPUSH
21482: LD_EXP 24
21486: PUSH
21487: LD_VAR 0 1
21491: ARRAY
21492: PUSH
21493: LD_INT 1
21495: ARRAY
21496: PPUSH
21497: LD_EXP 24
21501: PUSH
21502: LD_VAR 0 1
21506: ARRAY
21507: PUSH
21508: LD_INT 2
21510: ARRAY
21511: PPUSH
21512: CALL_OW 297
21516: PUSH
21517: LD_INT 4
21519: GREATER
21520: IFFALSE 21608
// if aggressive_pullback then
21522: LD_VAR 0 7
21526: IFFALSE 21569
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) else
21528: LD_VAR 0 9
21532: PPUSH
21533: LD_EXP 24
21537: PUSH
21538: LD_VAR 0 1
21542: ARRAY
21543: PUSH
21544: LD_INT 1
21546: ARRAY
21547: PPUSH
21548: LD_EXP 24
21552: PUSH
21553: LD_VAR 0 1
21557: ARRAY
21558: PUSH
21559: LD_INT 2
21561: ARRAY
21562: PPUSH
21563: CALL_OW 114
21567: GO 21608
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
21569: LD_VAR 0 9
21573: PPUSH
21574: LD_EXP 24
21578: PUSH
21579: LD_VAR 0 1
21583: ARRAY
21584: PUSH
21585: LD_INT 1
21587: ARRAY
21588: PPUSH
21589: LD_EXP 24
21593: PUSH
21594: LD_VAR 0 1
21598: ARRAY
21599: PUSH
21600: LD_INT 2
21602: ARRAY
21603: PPUSH
21604: CALL_OW 111
21608: GO 21474
21610: POP
21611: POP
// end ;
21612: LD_VAR 0 8
21616: 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 , k ;
21617: GO 21619
21619: DISABLE
21620: LD_INT 0
21622: PPUSH
21623: PPUSH
21624: PPUSH
21625: PPUSH
21626: PPUSH
21627: PPUSH
21628: PPUSH
21629: PPUSH
21630: PPUSH
21631: PPUSH
21632: PPUSH
21633: PPUSH
// begin side = russians ;
21634: LD_ADDR_VAR 0 1
21638: PUSH
21639: LD_EXP 3
21643: ST_TO_ADDR
// for base in ai_bases do
21644: LD_ADDR_VAR 0 9
21648: PUSH
21649: LD_EXP 40
21653: PUSH
21654: FOR_IN
21655: IFFALSE 24703
// begin engineers_list = ai_engineers [ base ] diff ai_heal_these_humans [ base ] ;
21657: LD_ADDR_VAR 0 3
21661: PUSH
21662: LD_EXP 14
21666: PUSH
21667: LD_VAR 0 9
21671: ARRAY
21672: PUSH
21673: LD_EXP 26
21677: PUSH
21678: LD_VAR 0 9
21682: ARRAY
21683: DIFF
21684: ST_TO_ADDR
// apemen_engineers_list = ai_apemen_engineers [ base ] diff ai_heal_these_humans [ base ] ;
21685: LD_ADDR_VAR 0 10
21689: PUSH
21690: LD_EXP 44
21694: PUSH
21695: LD_VAR 0 9
21699: ARRAY
21700: PUSH
21701: LD_EXP 26
21705: PUSH
21706: LD_VAR 0 9
21710: ARRAY
21711: DIFF
21712: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
21713: LD_ADDR_VAR 0 4
21717: PUSH
21718: LD_EXP 26
21722: PUSH
21723: LD_VAR 0 9
21727: ARRAY
21728: ST_TO_ADDR
// humans_list = engineers_list ^ apemen_engineers_list ;
21729: LD_ADDR_VAR 0 11
21733: PUSH
21734: LD_VAR 0 3
21738: PUSH
21739: LD_VAR 0 10
21743: ADD
21744: ST_TO_ADDR
// i = 1 ;
21745: LD_ADDR_VAR 0 2
21749: PUSH
21750: LD_INT 1
21752: ST_TO_ADDR
// while i <= humans_list do
21753: LD_VAR 0 2
21757: PUSH
21758: LD_VAR 0 11
21762: LESSEQUAL
21763: IFFALSE 21902
// begin if GetLives ( humans_list [ i ] ) <= 700 then
21765: LD_VAR 0 11
21769: PUSH
21770: LD_VAR 0 2
21774: ARRAY
21775: PPUSH
21776: CALL_OW 256
21780: PUSH
21781: LD_INT 700
21783: LESSEQUAL
21784: IFFALSE 21886
// begin temp_list = temp_list ^ humans_list [ i ] ;
21786: LD_ADDR_VAR 0 4
21790: PUSH
21791: LD_VAR 0 4
21795: PUSH
21796: LD_VAR 0 11
21800: PUSH
21801: LD_VAR 0 2
21805: ARRAY
21806: ADD
21807: ST_TO_ADDR
// engineers_list = engineers_list diff humans_list [ i ] ;
21808: LD_ADDR_VAR 0 3
21812: PUSH
21813: LD_VAR 0 3
21817: PUSH
21818: LD_VAR 0 11
21822: PUSH
21823: LD_VAR 0 2
21827: ARRAY
21828: DIFF
21829: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff humans_list [ i ] ;
21830: LD_ADDR_VAR 0 10
21834: PUSH
21835: LD_VAR 0 10
21839: PUSH
21840: LD_VAR 0 11
21844: PUSH
21845: LD_VAR 0 2
21849: ARRAY
21850: DIFF
21851: ST_TO_ADDR
// humans_list = Delete ( humans_list , i ) ;
21852: LD_ADDR_VAR 0 11
21856: PUSH
21857: LD_VAR 0 11
21861: PPUSH
21862: LD_VAR 0 2
21866: PPUSH
21867: CALL_OW 3
21871: ST_TO_ADDR
// i = i - 1 ;
21872: LD_ADDR_VAR 0 2
21876: PUSH
21877: LD_VAR 0 2
21881: PUSH
21882: LD_INT 1
21884: MINUS
21885: ST_TO_ADDR
// end ; i = i + 1 ;
21886: LD_ADDR_VAR 0 2
21890: PUSH
21891: LD_VAR 0 2
21895: PUSH
21896: LD_INT 1
21898: PLUS
21899: ST_TO_ADDR
// end ;
21900: GO 21753
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
21902: LD_ADDR_EXP 26
21906: PUSH
21907: LD_EXP 26
21911: PPUSH
21912: LD_VAR 0 9
21916: PPUSH
21917: LD_VAR 0 4
21921: PPUSH
21922: CALL_OW 1
21926: ST_TO_ADDR
// if engineers_list = 0 and apemen_engineers_list = 0 then
21927: LD_VAR 0 3
21931: PUSH
21932: LD_INT 0
21934: EQUAL
21935: PUSH
21936: LD_VAR 0 10
21940: PUSH
21941: LD_INT 0
21943: EQUAL
21944: AND
21945: IFFALSE 21949
// continue ;
21947: GO 21654
// temp_list_2 = UnitFilter ( engineers_list , [ f_class , class_engineer ] ) ;
21949: LD_ADDR_VAR 0 8
21953: PUSH
21954: LD_VAR 0 3
21958: PPUSH
21959: LD_INT 25
21961: PUSH
21962: LD_INT 2
21964: PUSH
21965: EMPTY
21966: LIST
21967: LIST
21968: PPUSH
21969: CALL_OW 72
21973: ST_TO_ADDR
// if ai_captured_buildings [ base ] > 0 and temp_list_2 > 0 then
21974: LD_EXP 38
21978: PUSH
21979: LD_VAR 0 9
21983: ARRAY
21984: PUSH
21985: LD_INT 0
21987: GREATER
21988: PUSH
21989: LD_VAR 0 8
21993: PUSH
21994: LD_INT 0
21996: GREATER
21997: AND
21998: IFFALSE 22269
// begin temp_list = [ ] ;
22000: LD_ADDR_VAR 0 4
22004: PUSH
22005: EMPTY
22006: ST_TO_ADDR
// for i in ai_captured_buildings [ base ] do
22007: LD_ADDR_VAR 0 2
22011: PUSH
22012: LD_EXP 38
22016: PUSH
22017: LD_VAR 0 9
22021: ARRAY
22022: PUSH
22023: FOR_IN
22024: IFFALSE 22080
// if GetBType ( i ) in [ b_depot , b_warehouse ] then
22026: LD_VAR 0 2
22030: PPUSH
22031: CALL_OW 266
22035: PUSH
22036: LD_INT 0
22038: PUSH
22039: LD_INT 1
22041: PUSH
22042: EMPTY
22043: LIST
22044: LIST
22045: IN
22046: IFFALSE 22064
// temp_list = temp_list ^ 1 else
22048: LD_ADDR_VAR 0 4
22052: PUSH
22053: LD_VAR 0 4
22057: PUSH
22058: LD_INT 1
22060: ADD
22061: ST_TO_ADDR
22062: GO 22078
// temp_list = temp_list ^ 0 ;
22064: LD_ADDR_VAR 0 4
22068: PUSH
22069: LD_VAR 0 4
22073: PUSH
22074: LD_INT 0
22076: ADD
22077: ST_TO_ADDR
22078: GO 22023
22080: POP
22081: POP
// temp_list = SortListByListDesc ( ai_captured_buildings [ base ] , temp_list ) ;
22082: LD_ADDR_VAR 0 4
22086: PUSH
22087: LD_EXP 38
22091: PUSH
22092: LD_VAR 0 9
22096: ARRAY
22097: PPUSH
22098: LD_VAR 0 4
22102: PPUSH
22103: CALL_OW 77
22107: ST_TO_ADDR
// temp_list_2 = GetHumansOutOfUnits ( temp_list_2 ) ;
22108: LD_ADDR_VAR 0 8
22112: PUSH
22113: LD_VAR 0 8
22117: PPUSH
22118: CALL 25824 0 1
22122: ST_TO_ADDR
// if temp_list_2 > 0 then
22123: LD_VAR 0 8
22127: PUSH
22128: LD_INT 0
22130: GREATER
22131: IFFALSE 22247
// begin temp_list_2 = SortListByListDesc ( temp_list_2 , temp_list_2 ) ;
22133: LD_ADDR_VAR 0 8
22137: PUSH
22138: LD_VAR 0 8
22142: PPUSH
22143: LD_VAR 0 8
22147: PPUSH
22148: CALL_OW 77
22152: ST_TO_ADDR
// SetTaskList ( temp_list_2 [ 1 ] , [ [ e , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) , temp_list [ 1 ] , 0 , 0 , 0 ] ] ) ;
22153: LD_VAR 0 8
22157: PUSH
22158: LD_INT 1
22160: ARRAY
22161: PPUSH
22162: LD_STRING e
22164: PUSH
22165: LD_VAR 0 4
22169: PUSH
22170: LD_INT 1
22172: ARRAY
22173: PPUSH
22174: CALL_OW 250
22178: PUSH
22179: LD_VAR 0 4
22183: PUSH
22184: LD_INT 1
22186: ARRAY
22187: PPUSH
22188: CALL_OW 251
22192: PUSH
22193: LD_VAR 0 4
22197: PUSH
22198: LD_INT 1
22200: ARRAY
22201: PUSH
22202: LD_INT 0
22204: PUSH
22205: LD_INT 0
22207: PUSH
22208: LD_INT 0
22210: PUSH
22211: EMPTY
22212: LIST
22213: LIST
22214: LIST
22215: LIST
22216: LIST
22217: LIST
22218: LIST
22219: PUSH
22220: EMPTY
22221: LIST
22222: PPUSH
22223: CALL_OW 446
// engineers_list = engineers_list diff temp_list_2 [ 1 ] ;
22227: LD_ADDR_VAR 0 3
22231: PUSH
22232: LD_VAR 0 3
22236: PUSH
22237: LD_VAR 0 8
22241: PUSH
22242: LD_INT 1
22244: ARRAY
22245: DIFF
22246: ST_TO_ADDR
// end ; if engineers_list = 0 and apemen_engineers_list = 0 then
22247: LD_VAR 0 3
22251: PUSH
22252: LD_INT 0
22254: EQUAL
22255: PUSH
22256: LD_VAR 0 10
22260: PUSH
22261: LD_INT 0
22263: EQUAL
22264: AND
22265: IFFALSE 22269
// continue ;
22267: GO 21654
// end ; i = 1 ;
22269: LD_ADDR_VAR 0 2
22273: PUSH
22274: LD_INT 1
22276: ST_TO_ADDR
// buildings_list = [ ] ;
22277: LD_ADDR_VAR 0 5
22281: PUSH
22282: EMPTY
22283: ST_TO_ADDR
// repeat case i of 1 :
22284: LD_VAR 0 2
22288: PUSH
22289: LD_INT 1
22291: DOUBLE
22292: EQUAL
22293: IFTRUE 22297
22295: GO 22334
22297: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] , [ f_not , [ f_ok ] ] ) ; 2 :
22298: LD_ADDR_VAR 0 5
22302: PUSH
22303: LD_EXP 27
22307: PUSH
22308: LD_VAR 0 9
22312: ARRAY
22313: PPUSH
22314: LD_INT 3
22316: PUSH
22317: LD_INT 50
22319: PUSH
22320: EMPTY
22321: LIST
22322: PUSH
22323: EMPTY
22324: LIST
22325: LIST
22326: PPUSH
22327: CALL_OW 72
22331: ST_TO_ADDR
22332: GO 22384
22334: LD_INT 2
22336: DOUBLE
22337: EQUAL
22338: IFTRUE 22342
22340: GO 22383
22342: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] , [ f_not , [ f_lives , 1000 ] ] ) ; end ;
22343: LD_ADDR_VAR 0 5
22347: PUSH
22348: LD_EXP 27
22352: PUSH
22353: LD_VAR 0 9
22357: ARRAY
22358: PPUSH
22359: LD_INT 3
22361: PUSH
22362: LD_INT 24
22364: PUSH
22365: LD_INT 1000
22367: PUSH
22368: EMPTY
22369: LIST
22370: LIST
22371: PUSH
22372: EMPTY
22373: LIST
22374: LIST
22375: PPUSH
22376: CALL_OW 72
22380: ST_TO_ADDR
22381: GO 22384
22383: POP
// i = i + 1 ;
22384: LD_ADDR_VAR 0 2
22388: PUSH
22389: LD_VAR 0 2
22393: PUSH
22394: LD_INT 1
22396: PLUS
22397: ST_TO_ADDR
// until buildings_list > 0 or i > 2 ;
22398: LD_VAR 0 5
22402: PUSH
22403: LD_INT 0
22405: GREATER
22406: PUSH
22407: LD_VAR 0 2
22411: PUSH
22412: LD_INT 2
22414: GREATER
22415: OR
22416: IFFALSE 22284
// if buildings_list > 0 then
22418: LD_VAR 0 5
22422: PUSH
22423: LD_INT 0
22425: GREATER
22426: IFFALSE 22613
// begin humans_list = engineers_list ^ apemen_engineers_list ;
22428: LD_ADDR_VAR 0 11
22432: PUSH
22433: LD_VAR 0 3
22437: PUSH
22438: LD_VAR 0 10
22442: ADD
22443: ST_TO_ADDR
// humans_list = GetHumansOutOfUnits ( humans_list ) ;
22444: LD_ADDR_VAR 0 11
22448: PUSH
22449: LD_VAR 0 11
22453: PPUSH
22454: CALL 25824 0 1
22458: ST_TO_ADDR
// repeat i = 1 ;
22459: LD_ADDR_VAR 0 2
22463: PUSH
22464: LD_INT 1
22466: ST_TO_ADDR
// while i <= buildings_list do
22467: LD_VAR 0 2
22471: PUSH
22472: LD_VAR 0 5
22476: LESSEQUAL
22477: IFFALSE 22601
// begin if humans_list = 0 then
22479: LD_VAR 0 11
22483: PUSH
22484: LD_INT 0
22486: EQUAL
22487: IFFALSE 22491
// break ;
22489: GO 22601
// temp_unit = NearestUnitToUnit ( humans_list , buildings_list [ i ] ) ;
22491: LD_ADDR_VAR 0 6
22495: PUSH
22496: LD_VAR 0 11
22500: PPUSH
22501: LD_VAR 0 5
22505: PUSH
22506: LD_VAR 0 2
22510: ARRAY
22511: PPUSH
22512: CALL_OW 74
22516: ST_TO_ADDR
// ComRepairBuilding ( temp_unit , buildings_list [ i ] ) ;
22517: LD_VAR 0 6
22521: PPUSH
22522: LD_VAR 0 5
22526: PUSH
22527: LD_VAR 0 2
22531: ARRAY
22532: PPUSH
22533: CALL_OW 130
// humans_list = humans_list diff temp_unit ;
22537: LD_ADDR_VAR 0 11
22541: PUSH
22542: LD_VAR 0 11
22546: PUSH
22547: LD_VAR 0 6
22551: DIFF
22552: ST_TO_ADDR
// engineers_list = engineers_list diff temp_unit ;
22553: LD_ADDR_VAR 0 3
22557: PUSH
22558: LD_VAR 0 3
22562: PUSH
22563: LD_VAR 0 6
22567: DIFF
22568: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff temp_unit ;
22569: LD_ADDR_VAR 0 10
22573: PUSH
22574: LD_VAR 0 10
22578: PUSH
22579: LD_VAR 0 6
22583: DIFF
22584: ST_TO_ADDR
// i = i + 1 ;
22585: LD_ADDR_VAR 0 2
22589: PUSH
22590: LD_VAR 0 2
22594: PUSH
22595: LD_INT 1
22597: PLUS
22598: ST_TO_ADDR
// end ;
22599: GO 22467
// until humans_list = 0 ;
22601: LD_VAR 0 11
22605: PUSH
22606: LD_INT 0
22608: EQUAL
22609: IFFALSE 22459
// continue ;
22611: GO 21654
// end ; if not BaseUnderAttack ( side , base ) then
22613: LD_VAR 0 1
22617: PPUSH
22618: LD_VAR 0 9
22622: PPUSH
22623: CALL 25929 0 2
22627: NOT
22628: IFFALSE 24370
// begin if ai_building_under_construction [ base ] > 0 then
22630: LD_EXP 25
22634: PUSH
22635: LD_VAR 0 9
22639: ARRAY
22640: PUSH
22641: LD_INT 0
22643: GREATER
22644: IFFALSE 22757
// if BuildingStatus ( ai_building_under_construction [ base ] ) = bs_build then
22646: LD_EXP 25
22650: PUSH
22651: LD_VAR 0 9
22655: ARRAY
22656: PPUSH
22657: CALL_OW 461
22661: PUSH
22662: LD_INT 1
22664: EQUAL
22665: IFFALSE 22719
// begin for i in GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) do
22667: LD_ADDR_VAR 0 2
22671: PUSH
22672: LD_VAR 0 3
22676: PUSH
22677: LD_VAR 0 10
22681: ADD
22682: PPUSH
22683: CALL 25824 0 1
22687: PUSH
22688: FOR_IN
22689: IFFALSE 22713
// ComRepairBuilding ( i , ai_building_under_construction [ base ] ) ;
22691: LD_VAR 0 2
22695: PPUSH
22696: LD_EXP 25
22700: PUSH
22701: LD_VAR 0 9
22705: ARRAY
22706: PPUSH
22707: CALL_OW 130
22711: GO 22688
22713: POP
22714: POP
// continue ;
22715: GO 21654
// end else
22717: GO 22757
// begin ComCancel ( ai_building_under_construction [ base ] ) ;
22719: LD_EXP 25
22723: PUSH
22724: LD_VAR 0 9
22728: ARRAY
22729: PPUSH
22730: CALL_OW 127
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
22734: LD_ADDR_EXP 25
22738: PUSH
22739: LD_EXP 25
22743: PPUSH
22744: LD_VAR 0 9
22748: PPUSH
22749: LD_INT 0
22751: PPUSH
22752: CALL_OW 1
22756: ST_TO_ADDR
// end ; if ai_all_buildings [ base ] < ai_buildings_locations [ base ] or ai_upcoming_building_data [ base ] > 0 then
22757: LD_EXP 27
22761: PUSH
22762: LD_VAR 0 9
22766: ARRAY
22767: PUSH
22768: LD_EXP 21
22772: PUSH
22773: LD_VAR 0 9
22777: ARRAY
22778: LESS
22779: PUSH
22780: LD_EXP 29
22784: PUSH
22785: LD_VAR 0 9
22789: ARRAY
22790: PUSH
22791: LD_INT 0
22793: GREATER
22794: OR
22795: IFFALSE 24236
// begin if ai_upcoming_building_data [ base ] = 0 then
22797: LD_EXP 29
22801: PUSH
22802: LD_VAR 0 9
22806: ARRAY
22807: PUSH
22808: LD_INT 0
22810: EQUAL
22811: IFFALSE 23220
// begin temp_list = [ ] ;
22813: LD_ADDR_VAR 0 4
22817: PUSH
22818: EMPTY
22819: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
22820: LD_ADDR_VAR 0 2
22824: PUSH
22825: LD_EXP 21
22829: PUSH
22830: LD_VAR 0 9
22834: ARRAY
22835: PUSH
22836: FOR_IN
22837: IFFALSE 22887
// if GetBType ( HexInfo ( i [ 1 ] , i [ 2 ] ) ) = - 1 then
22839: LD_VAR 0 2
22843: PUSH
22844: LD_INT 1
22846: ARRAY
22847: PPUSH
22848: LD_VAR 0 2
22852: PUSH
22853: LD_INT 2
22855: ARRAY
22856: PPUSH
22857: CALL_OW 428
22861: PPUSH
22862: CALL_OW 266
22866: PUSH
22867: LD_INT 1
22869: NEG
22870: EQUAL
22871: IFFALSE 22885
// begin temp_list = i ;
22873: LD_ADDR_VAR 0 4
22877: PUSH
22878: LD_VAR 0 2
22882: ST_TO_ADDR
// break ;
22883: GO 22887
// end ;
22885: GO 22836
22887: POP
22888: POP
// if temp_list > 0 then
22889: LD_VAR 0 4
22893: PUSH
22894: LD_INT 0
22896: GREATER
22897: IFFALSE 23220
// begin if temp_list [ 4 ] = b_bunker and GetBaseNation ( base ) in [ nation_american , nation_russian ] then
22899: LD_VAR 0 4
22903: PUSH
22904: LD_INT 4
22906: ARRAY
22907: PUSH
22908: LD_INT 32
22910: EQUAL
22911: PUSH
22912: LD_VAR 0 9
22916: PPUSH
22917: CALL 17570 0 1
22921: PUSH
22922: LD_INT 1
22924: PUSH
22925: LD_INT 3
22927: PUSH
22928: EMPTY
22929: LIST
22930: LIST
22931: IN
22932: AND
22933: IFFALSE 23195
// begin k = 0 ;
22935: LD_ADDR_VAR 0 12
22939: PUSH
22940: LD_INT 0
22942: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
22943: LD_ADDR_VAR 0 2
22947: PUSH
22948: LD_EXP 21
22952: PUSH
22953: LD_VAR 0 9
22957: ARRAY
22958: PUSH
22959: FOR_IN
22960: IFFALSE 23011
// if i [ 4 ] in [ b_breastwork , b_bunker , b_armoury , b_barracks , b_fort ] then
22962: LD_VAR 0 2
22966: PUSH
22967: LD_INT 4
22969: ARRAY
22970: PUSH
22971: LD_INT 31
22973: PUSH
22974: LD_INT 32
22976: PUSH
22977: LD_INT 4
22979: PUSH
22980: LD_INT 5
22982: PUSH
22983: LD_INT 35
22985: PUSH
22986: EMPTY
22987: LIST
22988: LIST
22989: LIST
22990: LIST
22991: LIST
22992: IN
22993: IFFALSE 23009
// k = k + 1 ;
22995: LD_ADDR_VAR 0 12
22999: PUSH
23000: LD_VAR 0 12
23004: PUSH
23005: LD_INT 1
23007: PLUS
23008: ST_TO_ADDR
23009: GO 22959
23011: POP
23012: POP
// if k > ai_soldiers [ base ] then
23013: LD_VAR 0 12
23017: PUSH
23018: LD_EXP 13
23022: PUSH
23023: LD_VAR 0 9
23027: ARRAY
23028: GREATER
23029: IFFALSE 23195
// begin for i = 1 to ai_buildings_locations [ base ] do
23031: LD_ADDR_VAR 0 2
23035: PUSH
23036: DOUBLE
23037: LD_INT 1
23039: DEC
23040: ST_TO_ADDR
23041: LD_EXP 21
23045: PUSH
23046: LD_VAR 0 9
23050: ARRAY
23051: PUSH
23052: FOR_TO
23053: IFFALSE 23172
// if ai_buildings_locations [ base ] [ i ] = temp_list then
23055: LD_EXP 21
23059: PUSH
23060: LD_VAR 0 9
23064: ARRAY
23065: PUSH
23066: LD_VAR 0 2
23070: ARRAY
23071: PUSH
23072: LD_VAR 0 4
23076: EQUAL
23077: IFFALSE 23170
// begin temp_list_2 = Replace ( ai_buildings_locations [ base ] [ i ] , 4 , b_turret ) ;
23079: LD_ADDR_VAR 0 8
23083: PUSH
23084: LD_EXP 21
23088: PUSH
23089: LD_VAR 0 9
23093: ARRAY
23094: PUSH
23095: LD_VAR 0 2
23099: ARRAY
23100: PPUSH
23101: LD_INT 4
23103: PPUSH
23104: LD_INT 33
23106: PPUSH
23107: CALL_OW 1
23111: ST_TO_ADDR
// temp_list_2 = Replace ( ai_buildings_locations [ base ] , i , temp_list_2 ) ;
23112: LD_ADDR_VAR 0 8
23116: PUSH
23117: LD_EXP 21
23121: PUSH
23122: LD_VAR 0 9
23126: ARRAY
23127: PPUSH
23128: LD_VAR 0 2
23132: PPUSH
23133: LD_VAR 0 8
23137: PPUSH
23138: CALL_OW 1
23142: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list_2 ) ;
23143: LD_ADDR_EXP 21
23147: PUSH
23148: LD_EXP 21
23152: PPUSH
23153: LD_VAR 0 9
23157: PPUSH
23158: LD_VAR 0 8
23162: PPUSH
23163: CALL_OW 1
23167: ST_TO_ADDR
// break ;
23168: GO 23172
// end ;
23170: GO 23052
23172: POP
23173: POP
// temp_list = Replace ( temp_list , 4 , b_turret ) ;
23174: LD_ADDR_VAR 0 4
23178: PUSH
23179: LD_VAR 0 4
23183: PPUSH
23184: LD_INT 4
23186: PPUSH
23187: LD_INT 33
23189: PPUSH
23190: CALL_OW 1
23194: ST_TO_ADDR
// end ; end ; ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , temp_list ) ;
23195: LD_ADDR_EXP 29
23199: PUSH
23200: LD_EXP 29
23204: PPUSH
23205: LD_VAR 0 9
23209: PPUSH
23210: LD_VAR 0 4
23214: PPUSH
23215: CALL_OW 1
23219: ST_TO_ADDR
// end ; end ; if ai_upcoming_building_data [ base ] > 0 then
23220: LD_EXP 29
23224: PUSH
23225: LD_VAR 0 9
23229: ARRAY
23230: PUSH
23231: LD_INT 0
23233: GREATER
23234: IFFALSE 24236
// begin if ai_building_constructor [ base ] = 0 then
23236: LD_EXP 28
23240: PUSH
23241: LD_VAR 0 9
23245: ARRAY
23246: PUSH
23247: LD_INT 0
23249: EQUAL
23250: IFFALSE 23376
// begin temp_list_2 = UnitFilter ( ai_engineers [ base ] , [ f_class , class_engineer ] ) ;
23252: LD_ADDR_VAR 0 8
23256: PUSH
23257: LD_EXP 14
23261: PUSH
23262: LD_VAR 0 9
23266: ARRAY
23267: PPUSH
23268: LD_INT 25
23270: PUSH
23271: LD_INT 2
23273: PUSH
23274: EMPTY
23275: LIST
23276: LIST
23277: PPUSH
23278: CALL_OW 72
23282: ST_TO_ADDR
// if temp_list_2 > 0 then
23283: LD_VAR 0 8
23287: PUSH
23288: LD_INT 0
23290: GREATER
23291: IFFALSE 23376
// begin temp_list = [ ] ;
23293: LD_ADDR_VAR 0 4
23297: PUSH
23298: EMPTY
23299: ST_TO_ADDR
// for i in temp_list_2 do
23300: LD_ADDR_VAR 0 2
23304: PUSH
23305: LD_VAR 0 8
23309: PUSH
23310: FOR_IN
23311: IFFALSE 23339
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
23313: LD_ADDR_VAR 0 4
23317: PUSH
23318: LD_VAR 0 4
23322: PUSH
23323: LD_VAR 0 2
23327: PPUSH
23328: LD_INT 2
23330: PPUSH
23331: CALL_OW 259
23335: ADD
23336: ST_TO_ADDR
23337: GO 23310
23339: POP
23340: POP
// ai_building_constructor = Replace ( ai_building_constructor , base , BestFromListByList ( temp_list_2 , temp_list ) ) ;
23341: LD_ADDR_EXP 28
23345: PUSH
23346: LD_EXP 28
23350: PPUSH
23351: LD_VAR 0 9
23355: PPUSH
23356: LD_VAR 0 8
23360: PPUSH
23361: LD_VAR 0 4
23365: PPUSH
23366: CALL_OW 79
23370: PPUSH
23371: CALL_OW 1
23375: ST_TO_ADDR
// end ; end ; if ai_building_constructor [ base ] in engineers_list and ai_building_constructor [ base ] > 0 then
23376: LD_EXP 28
23380: PUSH
23381: LD_VAR 0 9
23385: ARRAY
23386: PUSH
23387: LD_VAR 0 3
23391: IN
23392: PUSH
23393: LD_EXP 28
23397: PUSH
23398: LD_VAR 0 9
23402: ARRAY
23403: PUSH
23404: LD_INT 0
23406: GREATER
23407: AND
23408: IFFALSE 24236
// begin engineers_list = engineers_list diff ai_building_constructor [ base ] ;
23410: LD_ADDR_VAR 0 3
23414: PUSH
23415: LD_VAR 0 3
23419: PUSH
23420: LD_EXP 28
23424: PUSH
23425: LD_VAR 0 9
23429: ARRAY
23430: DIFF
23431: ST_TO_ADDR
// case GetType ( IsInUnit ( ai_building_constructor [ base ] ) ) of unit_building :
23432: LD_EXP 28
23436: PUSH
23437: LD_VAR 0 9
23441: ARRAY
23442: PPUSH
23443: CALL_OW 310
23447: PPUSH
23448: CALL_OW 247
23452: PUSH
23453: LD_INT 3
23455: DOUBLE
23456: EQUAL
23457: IFTRUE 23461
23459: GO 23479
23461: POP
// ComExitBuilding ( ai_building_constructor [ base ] ) ; unit_vehicle :
23462: LD_EXP 28
23466: PUSH
23467: LD_VAR 0 9
23471: ARRAY
23472: PPUSH
23473: CALL_OW 122
23477: GO 24236
23479: LD_INT 2
23481: DOUBLE
23482: EQUAL
23483: IFTRUE 23487
23485: GO 23505
23487: POP
// ComExitVehicle ( ai_building_constructor [ base ] ) ; else
23488: LD_EXP 28
23492: PUSH
23493: LD_VAR 0 9
23497: ARRAY
23498: PPUSH
23499: CALL_OW 121
23503: GO 24236
23505: POP
// case GetBType ( HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ) of - 1 :
23506: LD_EXP 29
23510: PUSH
23511: LD_VAR 0 9
23515: ARRAY
23516: PUSH
23517: LD_INT 1
23519: ARRAY
23520: PPUSH
23521: LD_EXP 29
23525: PUSH
23526: LD_VAR 0 9
23530: ARRAY
23531: PUSH
23532: LD_INT 2
23534: ARRAY
23535: PPUSH
23536: CALL_OW 428
23540: PPUSH
23541: CALL_OW 266
23545: PUSH
23546: LD_INT 1
23548: NEG
23549: DOUBLE
23550: EQUAL
23551: IFTRUE 23555
23553: GO 23741
23555: POP
// begin case ai_upcoming_building_data [ base ] [ 4 ] of b_warehouse :
23556: LD_EXP 29
23560: PUSH
23561: LD_VAR 0 9
23565: ARRAY
23566: PUSH
23567: LD_INT 4
23569: ARRAY
23570: PUSH
23571: LD_INT 1
23573: DOUBLE
23574: EQUAL
23575: IFTRUE 23579
23577: GO 23590
23579: POP
// i = b_depot ; b_factory :
23580: LD_ADDR_VAR 0 2
23584: PUSH
23585: LD_INT 0
23587: ST_TO_ADDR
23588: GO 23674
23590: LD_INT 3
23592: DOUBLE
23593: EQUAL
23594: IFTRUE 23598
23596: GO 23609
23598: POP
// i = b_workshop ; b_lab_half , b_lab_full :
23599: LD_ADDR_VAR 0 2
23603: PUSH
23604: LD_INT 2
23606: ST_TO_ADDR
23607: GO 23674
23609: LD_INT 7
23611: DOUBLE
23612: EQUAL
23613: IFTRUE 23623
23615: LD_INT 8
23617: DOUBLE
23618: EQUAL
23619: IFTRUE 23623
23621: GO 23634
23623: POP
// i = b_lab ; b_barracks :
23624: LD_ADDR_VAR 0 2
23628: PUSH
23629: LD_INT 6
23631: ST_TO_ADDR
23632: GO 23674
23634: LD_INT 5
23636: DOUBLE
23637: EQUAL
23638: IFTRUE 23642
23640: GO 23653
23642: POP
// i = b_armoury ; else
23643: LD_ADDR_VAR 0 2
23647: PUSH
23648: LD_INT 4
23650: ST_TO_ADDR
23651: GO 23674
23653: POP
// i = ai_upcoming_building_data [ base ] [ 4 ] ; end ;
23654: LD_ADDR_VAR 0 2
23658: PUSH
23659: LD_EXP 29
23663: PUSH
23664: LD_VAR 0 9
23668: ARRAY
23669: PUSH
23670: LD_INT 4
23672: ARRAY
23673: ST_TO_ADDR
// ComBuild ( ai_building_constructor [ base ] , i , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , ai_upcoming_building_data [ base ] [ 3 ] ) ;
23674: LD_EXP 28
23678: PUSH
23679: LD_VAR 0 9
23683: ARRAY
23684: PPUSH
23685: LD_VAR 0 2
23689: PPUSH
23690: LD_EXP 29
23694: PUSH
23695: LD_VAR 0 9
23699: ARRAY
23700: PUSH
23701: LD_INT 1
23703: ARRAY
23704: PPUSH
23705: LD_EXP 29
23709: PUSH
23710: LD_VAR 0 9
23714: ARRAY
23715: PUSH
23716: LD_INT 2
23718: ARRAY
23719: PPUSH
23720: LD_EXP 29
23724: PUSH
23725: LD_VAR 0 9
23729: ARRAY
23730: PUSH
23731: LD_INT 3
23733: ARRAY
23734: PPUSH
23735: CALL_OW 145
// end ; b_depot :
23739: GO 24236
23741: LD_INT 0
23743: DOUBLE
23744: EQUAL
23745: IFTRUE 23749
23747: GO 23798
23749: POP
// begin ComUpgrade ( ai_depot [ base ] ) ;
23750: LD_EXP 18
23754: PUSH
23755: LD_VAR 0 9
23759: ARRAY
23760: PPUSH
23761: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , ai_depot [ base ] ) ;
23765: LD_ADDR_EXP 25
23769: PUSH
23770: LD_EXP 25
23774: PPUSH
23775: LD_VAR 0 9
23779: PPUSH
23780: LD_EXP 18
23784: PUSH
23785: LD_VAR 0 9
23789: ARRAY
23790: PPUSH
23791: CALL_OW 1
23795: ST_TO_ADDR
// end ; b_workshop :
23796: GO 24236
23798: LD_INT 2
23800: DOUBLE
23801: EQUAL
23802: IFTRUE 23806
23804: GO 23883
23806: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
23807: LD_ADDR_VAR 0 6
23811: PUSH
23812: LD_EXP 29
23816: PUSH
23817: LD_VAR 0 9
23821: ARRAY
23822: PUSH
23823: LD_INT 1
23825: ARRAY
23826: PPUSH
23827: LD_EXP 29
23831: PUSH
23832: LD_VAR 0 9
23836: ARRAY
23837: PUSH
23838: LD_INT 2
23840: ARRAY
23841: PPUSH
23842: CALL_OW 428
23846: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
23847: LD_VAR 0 6
23851: PPUSH
23852: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
23856: LD_ADDR_EXP 25
23860: PUSH
23861: LD_EXP 25
23865: PPUSH
23866: LD_VAR 0 9
23870: PPUSH
23871: LD_VAR 0 6
23875: PPUSH
23876: CALL_OW 1
23880: ST_TO_ADDR
// end ; b_lab , b_lab_half :
23881: GO 24236
23883: LD_INT 6
23885: DOUBLE
23886: EQUAL
23887: IFTRUE 23897
23889: LD_INT 7
23891: DOUBLE
23892: EQUAL
23893: IFTRUE 23897
23895: GO 24150
23897: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
23898: LD_ADDR_VAR 0 6
23902: PUSH
23903: LD_EXP 29
23907: PUSH
23908: LD_VAR 0 9
23912: ARRAY
23913: PUSH
23914: LD_INT 1
23916: ARRAY
23917: PPUSH
23918: LD_EXP 29
23922: PUSH
23923: LD_VAR 0 9
23927: ARRAY
23928: PUSH
23929: LD_INT 2
23931: ARRAY
23932: PPUSH
23933: CALL_OW 428
23937: 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
23938: LD_EXP 29
23942: PUSH
23943: LD_VAR 0 9
23947: ARRAY
23948: PUSH
23949: LD_INT 5
23951: ARRAY
23952: PUSH
23953: LD_INT 9
23955: NONEQUAL
23956: PUSH
23957: LD_EXP 29
23961: PUSH
23962: LD_VAR 0 9
23966: ARRAY
23967: PUSH
23968: LD_INT 5
23970: ARRAY
23971: PUSH
23972: LD_VAR 0 6
23976: PPUSH
23977: LD_INT 1
23979: PPUSH
23980: CALL_OW 268
23984: PUSH
23985: LD_VAR 0 6
23989: PPUSH
23990: LD_INT 2
23992: PPUSH
23993: CALL_OW 268
23997: PUSH
23998: EMPTY
23999: LIST
24000: LIST
24001: IN
24002: NOT
24003: AND
24004: IFFALSE 24032
// ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 5 ] ) else
24006: LD_VAR 0 6
24010: PPUSH
24011: LD_EXP 29
24015: PUSH
24016: LD_VAR 0 9
24020: ARRAY
24021: PUSH
24022: LD_INT 5
24024: ARRAY
24025: PPUSH
24026: CALL_OW 147
24030: GO 24123
// if ai_upcoming_building_data [ base ] [ 6 ] <> b_lab_basic then
24032: LD_EXP 29
24036: PUSH
24037: LD_VAR 0 9
24041: ARRAY
24042: PUSH
24043: LD_INT 6
24045: ARRAY
24046: PUSH
24047: LD_INT 9
24049: NONEQUAL
24050: IFFALSE 24078
// ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 6 ] ) else
24052: LD_VAR 0 6
24056: PPUSH
24057: LD_EXP 29
24061: PUSH
24062: LD_VAR 0 9
24066: ARRAY
24067: PUSH
24068: LD_INT 6
24070: ARRAY
24071: PPUSH
24072: CALL_OW 147
24076: GO 24123
// begin ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
24078: LD_ADDR_EXP 28
24082: PUSH
24083: LD_EXP 28
24087: PPUSH
24088: LD_VAR 0 9
24092: PPUSH
24093: LD_INT 0
24095: PPUSH
24096: CALL_OW 1
24100: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
24101: LD_ADDR_EXP 29
24105: PUSH
24106: LD_EXP 29
24110: PPUSH
24111: LD_VAR 0 9
24115: PPUSH
24116: EMPTY
24117: PPUSH
24118: CALL_OW 1
24122: ST_TO_ADDR
// end ; ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
24123: LD_ADDR_EXP 25
24127: PUSH
24128: LD_EXP 25
24132: PPUSH
24133: LD_VAR 0 9
24137: PPUSH
24138: LD_VAR 0 6
24142: PPUSH
24143: CALL_OW 1
24147: ST_TO_ADDR
// end ; b_armoury :
24148: GO 24236
24150: LD_INT 4
24152: DOUBLE
24153: EQUAL
24154: IFTRUE 24158
24156: GO 24235
24158: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
24159: LD_ADDR_VAR 0 6
24163: PUSH
24164: LD_EXP 29
24168: PUSH
24169: LD_VAR 0 9
24173: ARRAY
24174: PUSH
24175: LD_INT 1
24177: ARRAY
24178: PPUSH
24179: LD_EXP 29
24183: PUSH
24184: LD_VAR 0 9
24188: ARRAY
24189: PUSH
24190: LD_INT 2
24192: ARRAY
24193: PPUSH
24194: CALL_OW 428
24198: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
24199: LD_VAR 0 6
24203: PPUSH
24204: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
24208: LD_ADDR_EXP 25
24212: PUSH
24213: LD_EXP 25
24217: PPUSH
24218: LD_VAR 0 9
24222: PPUSH
24223: LD_VAR 0 6
24227: PPUSH
24228: CALL_OW 1
24232: ST_TO_ADDR
// end ; end ; end ;
24233: GO 24236
24235: POP
// end ; end ; end ; if engineers_list > 0 and ai_depot [ base ] > 0 then
24236: LD_VAR 0 3
24240: PUSH
24241: LD_INT 0
24243: GREATER
24244: PUSH
24245: LD_EXP 18
24249: PUSH
24250: LD_VAR 0 9
24254: ARRAY
24255: PUSH
24256: LD_INT 0
24258: GREATER
24259: AND
24260: IFFALSE 24370
// begin case base of 1 :
24262: LD_VAR 0 9
24266: PUSH
24267: LD_INT 1
24269: DOUBLE
24270: EQUAL
24271: IFTRUE 24275
24273: GO 24286
24275: POP
// temp_unit = rubase1 ; 2 :
24276: LD_ADDR_VAR 0 6
24280: PUSH
24281: LD_INT 1
24283: ST_TO_ADDR
24284: GO 24306
24286: LD_INT 2
24288: DOUBLE
24289: EQUAL
24290: IFTRUE 24294
24292: GO 24305
24294: POP
// temp_unit = rubase2 ; end ;
24295: LD_ADDR_VAR 0 6
24299: PUSH
24300: LD_INT 2
24302: ST_TO_ADDR
24303: GO 24306
24305: POP
// temp_list = GetListOfCratesInArea ( temp_unit ) ;
24306: LD_ADDR_VAR 0 4
24310: PUSH
24311: LD_VAR 0 6
24315: PPUSH
24316: CALL_OW 435
24320: ST_TO_ADDR
// if temp_list > 0 then
24321: LD_VAR 0 4
24325: PUSH
24326: LD_INT 0
24328: GREATER
24329: IFFALSE 24370
// begin ComCollect ( GetHumansOutOfUnits ( engineers_list ) , temp_list [ 1 ] , temp_list [ 2 ] ) ;
24331: LD_VAR 0 3
24335: PPUSH
24336: CALL 25824 0 1
24340: PPUSH
24341: LD_VAR 0 4
24345: PUSH
24346: LD_INT 1
24348: ARRAY
24349: PPUSH
24350: LD_VAR 0 4
24354: PUSH
24355: LD_INT 2
24357: ARRAY
24358: PPUSH
24359: CALL_OW 117
// engineers_list = [ ] ;
24363: LD_ADDR_VAR 0 3
24367: PUSH
24368: EMPTY
24369: ST_TO_ADDR
// end ; end ; end ; if apemen_engineers_list > 0 and ai_depot [ base ] > 0 then
24370: LD_VAR 0 10
24374: PUSH
24375: LD_INT 0
24377: GREATER
24378: PUSH
24379: LD_EXP 18
24383: PUSH
24384: LD_VAR 0 9
24388: ARRAY
24389: PUSH
24390: LD_INT 0
24392: GREATER
24393: AND
24394: IFFALSE 24630
// begin temp_list = GetListOfCratesInArea_ForGathering ( base , ru_crate_area_ape ) ;
24396: LD_ADDR_VAR 0 4
24400: PUSH
24401: LD_VAR 0 9
24405: PPUSH
24406: LD_INT 5
24408: PPUSH
24409: CALL 12137 0 2
24413: ST_TO_ADDR
// if ai_cargo_bay [ base ] = 0 then
24414: LD_EXP 42
24418: PUSH
24419: LD_VAR 0 9
24423: ARRAY
24424: PUSH
24425: LD_INT 0
24427: EQUAL
24428: IFFALSE 24492
// begin temp_list = temp_list ^ GetListOfCratesInArea_ForGathering ( base , ru_crate_area_bay ) ;
24430: LD_ADDR_VAR 0 4
24434: PUSH
24435: LD_VAR 0 4
24439: PUSH
24440: LD_VAR 0 9
24444: PPUSH
24445: LD_INT 4
24447: PPUSH
24448: CALL 12137 0 2
24452: ADD
24453: ST_TO_ADDR
// if ai_depot [ 2 ] = 0 then
24454: LD_EXP 18
24458: PUSH
24459: LD_INT 2
24461: ARRAY
24462: PUSH
24463: LD_INT 0
24465: EQUAL
24466: IFFALSE 24492
// temp_list = temp_list ^ GetListOfCratesInArea_ForGathering ( base , rubase2 ) ;
24468: LD_ADDR_VAR 0 4
24472: PUSH
24473: LD_VAR 0 4
24477: PUSH
24478: LD_VAR 0 9
24482: PPUSH
24483: LD_INT 2
24485: PPUSH
24486: CALL 12137 0 2
24490: ADD
24491: ST_TO_ADDR
// end ; if temp_list > 0 then
24492: LD_VAR 0 4
24496: PUSH
24497: LD_INT 0
24499: GREATER
24500: IFFALSE 24630
// begin temp_list_2 = [ ] ;
24502: LD_ADDR_VAR 0 8
24506: PUSH
24507: EMPTY
24508: ST_TO_ADDR
// for i in temp_list do
24509: LD_ADDR_VAR 0 2
24513: PUSH
24514: LD_VAR 0 4
24518: PUSH
24519: FOR_IN
24520: IFFALSE 24569
// temp_list_2 = temp_list_2 ^ GetDistUnitXY ( ai_depot [ base ] , i [ 1 ] , i [ 2 ] ) ;
24522: LD_ADDR_VAR 0 8
24526: PUSH
24527: LD_VAR 0 8
24531: PUSH
24532: LD_EXP 18
24536: PUSH
24537: LD_VAR 0 9
24541: ARRAY
24542: PPUSH
24543: LD_VAR 0 2
24547: PUSH
24548: LD_INT 1
24550: ARRAY
24551: PPUSH
24552: LD_VAR 0 2
24556: PUSH
24557: LD_INT 2
24559: ARRAY
24560: PPUSH
24561: CALL_OW 297
24565: ADD
24566: ST_TO_ADDR
24567: GO 24519
24569: POP
24570: POP
// temp_list = WorstFromListByList ( temp_list , temp_list_2 ) ;
24571: LD_ADDR_VAR 0 4
24575: PUSH
24576: LD_VAR 0 4
24580: PPUSH
24581: LD_VAR 0 8
24585: PPUSH
24586: CALL_OW 78
24590: ST_TO_ADDR
// ComCollect ( GetHumansOutOfUnits ( apemen_engineers_list ) , temp_list [ 1 ] , temp_list [ 2 ] ) ;
24591: LD_VAR 0 10
24595: PPUSH
24596: CALL 25824 0 1
24600: PPUSH
24601: LD_VAR 0 4
24605: PUSH
24606: LD_INT 1
24608: ARRAY
24609: PPUSH
24610: LD_VAR 0 4
24614: PUSH
24615: LD_INT 2
24617: ARRAY
24618: PPUSH
24619: CALL_OW 117
// apemen_engineers_list = [ ] ;
24623: LD_ADDR_VAR 0 10
24627: PUSH
24628: EMPTY
24629: ST_TO_ADDR
// end ; end ; DistributeHumansToBuildings ( base , engineers_list ^ apemen_engineers_list , UnitFilter ( ai_depot [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_engineer , 6 , false , false ) ;
24630: LD_VAR 0 9
24634: PPUSH
24635: LD_VAR 0 3
24639: PUSH
24640: LD_VAR 0 10
24644: ADD
24645: PPUSH
24646: LD_EXP 18
24650: PUSH
24651: LD_VAR 0 9
24655: ARRAY
24656: PPUSH
24657: LD_INT 50
24659: PUSH
24660: EMPTY
24661: LIST
24662: PUSH
24663: LD_INT 3
24665: PUSH
24666: LD_INT 57
24668: PUSH
24669: EMPTY
24670: LIST
24671: PUSH
24672: EMPTY
24673: LIST
24674: LIST
24675: PUSH
24676: EMPTY
24677: LIST
24678: LIST
24679: PPUSH
24680: CALL_OW 72
24684: PPUSH
24685: LD_INT 2
24687: PPUSH
24688: LD_INT 6
24690: PPUSH
24691: LD_INT 0
24693: PPUSH
24694: LD_INT 0
24696: PPUSH
24697: CALL 20275 0 7
// end ;
24701: GO 21654
24703: POP
24704: POP
// enable ;
24705: ENABLE
// end ;
24706: PPOPN 12
24708: END
// on BuildingStarted ( building , builder ) do var side , temp_list , base , i ;
24709: LD_INT 0
24711: PPUSH
24712: PPUSH
24713: PPUSH
24714: PPUSH
// begin side = GetSide ( building ) ;
24715: LD_ADDR_VAR 0 3
24719: PUSH
24720: LD_VAR 0 1
24724: PPUSH
24725: CALL_OW 255
24729: ST_TO_ADDR
// if side <> russians then
24730: LD_VAR 0 3
24734: PUSH
24735: LD_EXP 3
24739: NONEQUAL
24740: IFFALSE 24744
// exit ;
24742: GO 24819
// base = FindBase ( building ) ;
24744: LD_ADDR_VAR 0 5
24748: PUSH
24749: LD_VAR 0 1
24753: PPUSH
24754: CALL 17622 0 1
24758: ST_TO_ADDR
// if base = 0 then
24759: LD_VAR 0 5
24763: PUSH
24764: LD_INT 0
24766: EQUAL
24767: IFFALSE 24771
// exit ;
24769: GO 24819
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
24771: LD_ADDR_EXP 28
24775: PUSH
24776: LD_EXP 28
24780: PPUSH
24781: LD_VAR 0 5
24785: PPUSH
24786: LD_INT 0
24788: PPUSH
24789: CALL_OW 1
24793: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , building ) ;
24794: LD_ADDR_EXP 25
24798: PUSH
24799: LD_EXP 25
24803: PPUSH
24804: LD_VAR 0 5
24808: PPUSH
24809: LD_VAR 0 1
24813: PPUSH
24814: CALL_OW 1
24818: ST_TO_ADDR
// end ;
24819: PPOPN 6
24821: END
// on BuildingComplete ( building ) do var side , temp_list , temp_unit , base , i ;
24822: LD_INT 0
24824: PPUSH
24825: PPUSH
24826: PPUSH
24827: PPUSH
24828: PPUSH
// begin side = GetSide ( building ) ;
24829: LD_ADDR_VAR 0 2
24833: PUSH
24834: LD_VAR 0 1
24838: PPUSH
24839: CALL_OW 255
24843: ST_TO_ADDR
// if side <> russians then
24844: LD_VAR 0 2
24848: PUSH
24849: LD_EXP 3
24853: NONEQUAL
24854: IFFALSE 24858
// exit ;
24856: GO 24963
// base = FindBase ( building ) ;
24858: LD_ADDR_VAR 0 5
24862: PUSH
24863: LD_VAR 0 1
24867: PPUSH
24868: CALL 17622 0 1
24872: ST_TO_ADDR
// if base = 0 then
24873: LD_VAR 0 5
24877: PUSH
24878: LD_INT 0
24880: EQUAL
24881: IFFALSE 24885
// exit ;
24883: GO 24963
// BuildUpgradeCommon ( base , building ) ;
24885: LD_VAR 0 5
24889: PPUSH
24890: LD_VAR 0 1
24894: PPUSH
24895: CALL 25044 0 2
// temp_list = ai_all_buildings [ base ] ^ building ;
24899: LD_ADDR_VAR 0 3
24903: PUSH
24904: LD_EXP 27
24908: PUSH
24909: LD_VAR 0 5
24913: ARRAY
24914: PUSH
24915: LD_VAR 0 1
24919: ADD
24920: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
24921: LD_ADDR_EXP 27
24925: PUSH
24926: LD_EXP 27
24930: PPUSH
24931: LD_VAR 0 5
24935: PPUSH
24936: LD_VAR 0 3
24940: PPUSH
24941: CALL_OW 1
24945: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , true ) ;
24946: LD_VAR 0 5
24950: PPUSH
24951: LD_VAR 0 1
24955: PPUSH
24956: LD_INT 1
24958: PPUSH
24959: CALL 4392 0 3
// end ;
24963: PPOPN 6
24965: END
// on UpgradeComplete ( building ) do var side , temp_list , base ;
24966: LD_INT 0
24968: PPUSH
24969: PPUSH
24970: PPUSH
// begin side = GetSide ( building ) ;
24971: LD_ADDR_VAR 0 2
24975: PUSH
24976: LD_VAR 0 1
24980: PPUSH
24981: CALL_OW 255
24985: ST_TO_ADDR
// if side <> russians then
24986: LD_VAR 0 2
24990: PUSH
24991: LD_EXP 3
24995: NONEQUAL
24996: IFFALSE 25000
// exit ;
24998: GO 25041
// base = FindBase ( building ) ;
25000: LD_ADDR_VAR 0 4
25004: PUSH
25005: LD_VAR 0 1
25009: PPUSH
25010: CALL 17622 0 1
25014: ST_TO_ADDR
// if base = 0 then
25015: LD_VAR 0 4
25019: PUSH
25020: LD_INT 0
25022: EQUAL
25023: IFFALSE 25027
// exit ;
25025: GO 25041
// BuildUpgradeCommon ( base , building ) ;
25027: LD_VAR 0 4
25031: PPUSH
25032: LD_VAR 0 1
25036: PPUSH
25037: CALL 25044 0 2
// end ;
25041: PPOPN 4
25043: END
// function BuildUpgradeCommon ( base , building ) ; begin
25044: LD_INT 0
25046: PPUSH
// if GetBType ( building ) = ai_upcoming_building_data [ base ] [ 4 ] then
25047: LD_VAR 0 2
25051: PPUSH
25052: CALL_OW 266
25056: PUSH
25057: LD_EXP 29
25061: PUSH
25062: LD_VAR 0 1
25066: ARRAY
25067: PUSH
25068: LD_INT 4
25070: ARRAY
25071: EQUAL
25072: IFFALSE 25096
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
25074: LD_ADDR_EXP 29
25078: PUSH
25079: LD_EXP 29
25083: PPUSH
25084: LD_VAR 0 1
25088: PPUSH
25089: EMPTY
25090: PPUSH
25091: CALL_OW 1
25095: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
25096: LD_ADDR_EXP 25
25100: PUSH
25101: LD_EXP 25
25105: PPUSH
25106: LD_VAR 0 1
25110: PPUSH
25111: LD_INT 0
25113: PPUSH
25114: CALL_OW 1
25118: ST_TO_ADDR
// end ;
25119: LD_VAR 0 3
25123: RET
// on BuildingCaptured ( captured_building , building_former_side , capturing_unit ) do var temp_list , base ;
25124: LD_INT 0
25126: PPUSH
25127: PPUSH
// begin if captured_building in ai_depot then
25128: LD_VAR 0 1
25132: PUSH
25133: LD_EXP 18
25137: IN
25138: IFFALSE 25344
// begin if captured_building = ai_depot [ 2 ] then
25140: LD_VAR 0 1
25144: PUSH
25145: LD_EXP 18
25149: PUSH
25150: LD_INT 2
25152: ARRAY
25153: EQUAL
25154: IFFALSE 25240
// begin SetResourceType ( GetBase ( captured_building ) , mat_cans , 200 - difficulty * 50 ) ;
25156: LD_VAR 0 1
25160: PPUSH
25161: CALL_OW 274
25165: PPUSH
25166: LD_INT 1
25168: PPUSH
25169: LD_INT 200
25171: PUSH
25172: LD_OWVAR 67
25176: PUSH
25177: LD_INT 50
25179: MUL
25180: MINUS
25181: PPUSH
25182: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_oil , 150 + Rand ( 0 , 50 ) ) ;
25186: LD_VAR 0 1
25190: PPUSH
25191: CALL_OW 274
25195: PPUSH
25196: LD_INT 2
25198: PPUSH
25199: LD_INT 150
25201: PUSH
25202: LD_INT 0
25204: PPUSH
25205: LD_INT 50
25207: PPUSH
25208: CALL_OW 12
25212: PLUS
25213: PPUSH
25214: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_siberit , 0 ) ;
25218: LD_VAR 0 1
25222: PPUSH
25223: CALL_OW 274
25227: PPUSH
25228: LD_INT 3
25230: PPUSH
25231: LD_INT 0
25233: PPUSH
25234: CALL_OW 277
// end else
25238: GO 25344
// begin SetResourceType ( GetBase ( captured_building ) , mat_cans , 200 + Rand ( 0 , 7 ) * 10 ) ;
25240: LD_VAR 0 1
25244: PPUSH
25245: CALL_OW 274
25249: PPUSH
25250: LD_INT 1
25252: PPUSH
25253: LD_INT 200
25255: PUSH
25256: LD_INT 0
25258: PPUSH
25259: LD_INT 7
25261: PPUSH
25262: CALL_OW 12
25266: PUSH
25267: LD_INT 10
25269: MUL
25270: PLUS
25271: PPUSH
25272: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_oil , 600 + Rand ( 0 , 100 ) ) ;
25276: LD_VAR 0 1
25280: PPUSH
25281: CALL_OW 274
25285: PPUSH
25286: LD_INT 2
25288: PPUSH
25289: LD_INT 600
25291: PUSH
25292: LD_INT 0
25294: PPUSH
25295: LD_INT 100
25297: PPUSH
25298: CALL_OW 12
25302: PLUS
25303: PPUSH
25304: CALL_OW 277
// SetResourceType ( GetBase ( captured_building ) , mat_siberit , 20 + Rand ( 0 , 5 ) * 5 ) ;
25308: LD_VAR 0 1
25312: PPUSH
25313: CALL_OW 274
25317: PPUSH
25318: LD_INT 3
25320: PPUSH
25321: LD_INT 20
25323: PUSH
25324: LD_INT 0
25326: PPUSH
25327: LD_INT 5
25329: PPUSH
25330: CALL_OW 12
25334: PUSH
25335: LD_INT 5
25337: MUL
25338: PLUS
25339: PPUSH
25340: CALL_OW 277
// end ; end ; base = FindBase ( captured_building ) ;
25344: LD_ADDR_VAR 0 5
25348: PUSH
25349: LD_VAR 0 1
25353: PPUSH
25354: CALL 17622 0 1
25358: ST_TO_ADDR
// if base = 0 then
25359: LD_VAR 0 5
25363: PUSH
25364: LD_INT 0
25366: EQUAL
25367: IFFALSE 25371
// exit ;
25369: GO 25602
// if building_former_side = GetBaseSide ( base ) then
25371: LD_VAR 0 2
25375: PUSH
25376: LD_VAR 0 5
25380: PPUSH
25381: CALL 17829 0 1
25385: EQUAL
25386: IFFALSE 25469
// begin if captured_building in ai_all_buildings [ base ] then
25388: LD_VAR 0 1
25392: PUSH
25393: LD_EXP 27
25397: PUSH
25398: LD_VAR 0 5
25402: ARRAY
25403: IN
25404: IFFALSE 25467
// begin RemoveBuildingFromVariables ( base , captured_building ) ;
25406: LD_VAR 0 5
25410: PPUSH
25411: LD_VAR 0 1
25415: PPUSH
25416: CALL 16407 0 2
// temp_list = ai_captured_buildings [ base ] ^ captured_building ;
25420: LD_ADDR_VAR 0 4
25424: PUSH
25425: LD_EXP 38
25429: PUSH
25430: LD_VAR 0 5
25434: ARRAY
25435: PUSH
25436: LD_VAR 0 1
25440: ADD
25441: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
25442: LD_ADDR_EXP 38
25446: PUSH
25447: LD_EXP 38
25451: PPUSH
25452: LD_VAR 0 5
25456: PPUSH
25457: LD_VAR 0 4
25461: PPUSH
25462: CALL_OW 1
25466: ST_TO_ADDR
// end ; end else
25467: GO 25602
// begin if GetSide ( captured_building ) = GetBaseSide ( base ) then
25469: LD_VAR 0 1
25473: PPUSH
25474: CALL_OW 255
25478: PUSH
25479: LD_VAR 0 5
25483: PPUSH
25484: CALL 17829 0 1
25488: EQUAL
25489: IFFALSE 25602
// begin temp_list = ai_all_buildings [ base ] ^ captured_building ;
25491: LD_ADDR_VAR 0 4
25495: PUSH
25496: LD_EXP 27
25500: PUSH
25501: LD_VAR 0 5
25505: ARRAY
25506: PUSH
25507: LD_VAR 0 1
25511: ADD
25512: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
25513: LD_ADDR_EXP 27
25517: PUSH
25518: LD_EXP 27
25522: PPUSH
25523: LD_VAR 0 5
25527: PPUSH
25528: LD_VAR 0 4
25532: PPUSH
25533: CALL_OW 1
25537: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , captured_building , true ) ;
25538: LD_VAR 0 5
25542: PPUSH
25543: LD_VAR 0 1
25547: PPUSH
25548: LD_INT 1
25550: PPUSH
25551: CALL 4392 0 3
// temp_list = ai_captured_buildings [ base ] diff captured_building ;
25555: LD_ADDR_VAR 0 4
25559: PUSH
25560: LD_EXP 38
25564: PUSH
25565: LD_VAR 0 5
25569: ARRAY
25570: PUSH
25571: LD_VAR 0 1
25575: DIFF
25576: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
25577: LD_ADDR_EXP 38
25581: PUSH
25582: LD_EXP 38
25586: PPUSH
25587: LD_VAR 0 5
25591: PPUSH
25592: LD_VAR 0 4
25596: PPUSH
25597: CALL_OW 1
25601: ST_TO_ADDR
// end ; end ; end ;
25602: PPOPN 5
25604: END
// on UnitGoesToRed ( un ) do begin if un in ai_depot then
25605: LD_VAR 0 1
25609: PUSH
25610: LD_EXP 18
25614: IN
25615: IFFALSE 25821
// begin if un = ai_depot [ 2 ] then
25617: LD_VAR 0 1
25621: PUSH
25622: LD_EXP 18
25626: PUSH
25627: LD_INT 2
25629: ARRAY
25630: EQUAL
25631: IFFALSE 25717
// begin SetResourceType ( GetBase ( un ) , mat_cans , 200 - difficulty * 50 ) ;
25633: LD_VAR 0 1
25637: PPUSH
25638: CALL_OW 274
25642: PPUSH
25643: LD_INT 1
25645: PPUSH
25646: LD_INT 200
25648: PUSH
25649: LD_OWVAR 67
25653: PUSH
25654: LD_INT 50
25656: MUL
25657: MINUS
25658: PPUSH
25659: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_oil , 150 + Rand ( 0 , 50 ) ) ;
25663: LD_VAR 0 1
25667: PPUSH
25668: CALL_OW 274
25672: PPUSH
25673: LD_INT 2
25675: PPUSH
25676: LD_INT 150
25678: PUSH
25679: LD_INT 0
25681: PPUSH
25682: LD_INT 50
25684: PPUSH
25685: CALL_OW 12
25689: PLUS
25690: PPUSH
25691: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_siberit , 0 ) ;
25695: LD_VAR 0 1
25699: PPUSH
25700: CALL_OW 274
25704: PPUSH
25705: LD_INT 3
25707: PPUSH
25708: LD_INT 0
25710: PPUSH
25711: CALL_OW 277
// end else
25715: GO 25821
// begin SetResourceType ( GetBase ( un ) , mat_cans , 200 + Rand ( 0 , 7 ) * 10 ) ;
25717: LD_VAR 0 1
25721: PPUSH
25722: CALL_OW 274
25726: PPUSH
25727: LD_INT 1
25729: PPUSH
25730: LD_INT 200
25732: PUSH
25733: LD_INT 0
25735: PPUSH
25736: LD_INT 7
25738: PPUSH
25739: CALL_OW 12
25743: PUSH
25744: LD_INT 10
25746: MUL
25747: PLUS
25748: PPUSH
25749: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_oil , 600 + Rand ( 0 , 100 ) ) ;
25753: LD_VAR 0 1
25757: PPUSH
25758: CALL_OW 274
25762: PPUSH
25763: LD_INT 2
25765: PPUSH
25766: LD_INT 600
25768: PUSH
25769: LD_INT 0
25771: PPUSH
25772: LD_INT 100
25774: PPUSH
25775: CALL_OW 12
25779: PLUS
25780: PPUSH
25781: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_siberit , 20 + Rand ( 0 , 5 ) * 5 ) ;
25785: LD_VAR 0 1
25789: PPUSH
25790: CALL_OW 274
25794: PPUSH
25795: LD_INT 3
25797: PPUSH
25798: LD_INT 20
25800: PUSH
25801: LD_INT 0
25803: PPUSH
25804: LD_INT 5
25806: PPUSH
25807: CALL_OW 12
25811: PUSH
25812: LD_INT 5
25814: MUL
25815: PLUS
25816: PPUSH
25817: CALL_OW 277
// end ; end ; end ;
25821: PPOPN 1
25823: END
// export function GetHumansOutOfUnits ( un_list ) ; var i ; begin
25824: LD_INT 0
25826: PPUSH
25827: PPUSH
// result = [ ] ;
25828: LD_ADDR_VAR 0 2
25832: PUSH
25833: EMPTY
25834: ST_TO_ADDR
// for i in un_list do
25835: LD_ADDR_VAR 0 3
25839: PUSH
25840: LD_VAR 0 1
25844: PUSH
25845: FOR_IN
25846: IFFALSE 25922
// case GetType ( IsInUnit ( i ) ) of unit_building :
25848: LD_VAR 0 3
25852: PPUSH
25853: CALL_OW 310
25857: PPUSH
25858: CALL_OW 247
25862: PUSH
25863: LD_INT 3
25865: DOUBLE
25866: EQUAL
25867: IFTRUE 25871
25869: GO 25883
25871: POP
// ComExitBuilding ( i ) ; unit_vehicle :
25872: LD_VAR 0 3
25876: PPUSH
25877: CALL_OW 122
25881: GO 25920
25883: LD_INT 2
25885: DOUBLE
25886: EQUAL
25887: IFTRUE 25891
25889: GO 25903
25891: POP
// ComExitVehicle ( i ) ; else
25892: LD_VAR 0 3
25896: PPUSH
25897: CALL_OW 121
25901: GO 25920
25903: POP
// result = result ^ i ; end ;
25904: LD_ADDR_VAR 0 2
25908: PUSH
25909: LD_VAR 0 2
25913: PUSH
25914: LD_VAR 0 3
25918: ADD
25919: ST_TO_ADDR
25920: GO 25845
25922: POP
25923: POP
// end ;
25924: LD_VAR 0 2
25928: RET
// export function BaseUnderAttack ( side , base ) ; var area ; begin
25929: LD_INT 0
25931: PPUSH
25932: PPUSH
// case base of 1 :
25933: LD_VAR 0 2
25937: PUSH
25938: LD_INT 1
25940: DOUBLE
25941: EQUAL
25942: IFTRUE 25946
25944: GO 25957
25946: POP
// area = rubase1scanarea ; 2 :
25947: LD_ADDR_VAR 0 4
25951: PUSH
25952: LD_INT 7
25954: ST_TO_ADDR
25955: GO 25977
25957: LD_INT 2
25959: DOUBLE
25960: EQUAL
25961: IFTRUE 25965
25963: GO 25976
25965: POP
// area = rubase2scanarea ; end ;
25966: LD_ADDR_VAR 0 4
25970: PUSH
25971: LD_INT 8
25973: ST_TO_ADDR
25974: GO 25977
25976: POP
// result = ContactTime ( side ) < 0 0$10 and FilterAllUnits ( [ [ f_enemy , side ] , [ f_inarea , area ] ] ) > 0 ;
25977: LD_ADDR_VAR 0 3
25981: PUSH
25982: LD_VAR 0 1
25986: PPUSH
25987: CALL_OW 462
25991: PUSH
25992: LD_INT 350
25994: LESS
25995: PUSH
25996: LD_INT 81
25998: PUSH
25999: LD_VAR 0 1
26003: PUSH
26004: EMPTY
26005: LIST
26006: LIST
26007: PUSH
26008: LD_INT 95
26010: PUSH
26011: LD_VAR 0 4
26015: PUSH
26016: EMPTY
26017: LIST
26018: LIST
26019: PUSH
26020: EMPTY
26021: LIST
26022: LIST
26023: PPUSH
26024: CALL_OW 69
26028: PUSH
26029: LD_INT 0
26031: GREATER
26032: AND
26033: ST_TO_ADDR
// end ;
26034: LD_VAR 0 3
26038: RET
// 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 , base_area ;
26039: GO 26041
26041: DISABLE
26042: LD_INT 0
26044: PPUSH
26045: PPUSH
26046: PPUSH
26047: PPUSH
26048: PPUSH
26049: PPUSH
26050: PPUSH
26051: PPUSH
26052: PPUSH
26053: PPUSH
26054: PPUSH
26055: PPUSH
26056: PPUSH
26057: PPUSH
26058: PPUSH
26059: PPUSH
26060: PPUSH
// begin side = russians ;
26061: LD_ADDR_VAR 0 1
26065: PUSH
26066: LD_EXP 3
26070: ST_TO_ADDR
// for base in ai_bases do
26071: LD_ADDR_VAR 0 14
26075: PUSH
26076: LD_EXP 40
26080: PUSH
26081: FOR_IN
26082: IFFALSE 27752
// begin under_attack = BaseUnderAttack ( side , base ) ;
26084: LD_ADDR_VAR 0 10
26088: PUSH
26089: LD_VAR 0 1
26093: PPUSH
26094: LD_VAR 0 14
26098: PPUSH
26099: CALL 25929 0 2
26103: ST_TO_ADDR
// ready_to_attack = not under_attack ;
26104: LD_ADDR_VAR 0 13
26108: PUSH
26109: LD_VAR 0 10
26113: NOT
26114: ST_TO_ADDR
// case base of 1 :
26115: LD_VAR 0 14
26119: PUSH
26120: LD_INT 1
26122: DOUBLE
26123: EQUAL
26124: IFTRUE 26128
26126: GO 26139
26128: POP
// base_area = rubase1 ; 2 :
26129: LD_ADDR_VAR 0 17
26133: PUSH
26134: LD_INT 1
26136: ST_TO_ADDR
26137: GO 26159
26139: LD_INT 2
26141: DOUBLE
26142: EQUAL
26143: IFTRUE 26147
26145: GO 26158
26147: POP
// base_area = rubase2 ; end ;
26148: LD_ADDR_VAR 0 17
26152: PUSH
26153: LD_INT 2
26155: ST_TO_ADDR
26156: GO 26159
26158: POP
// mechanics_list = ai_mechanics_defend [ base ] diff ai_heal_these_humans [ base ] ;
26159: LD_ADDR_VAR 0 3
26163: PUSH
26164: LD_EXP 15
26168: PUSH
26169: LD_VAR 0 14
26173: ARRAY
26174: PUSH
26175: LD_EXP 26
26179: PUSH
26180: LD_VAR 0 14
26184: ARRAY
26185: DIFF
26186: ST_TO_ADDR
// if ai_vehicle_attack_delay [ base ] > 0 0$0 and UnitFilter ( ai_vehicles_attack [ base ] , [ f_ok ] ) = 0 and not final_battle_begin then
26187: LD_EXP 39
26191: PUSH
26192: LD_VAR 0 14
26196: ARRAY
26197: PUSH
26198: LD_INT 0
26200: GREATER
26201: PUSH
26202: LD_EXP 23
26206: PUSH
26207: LD_VAR 0 14
26211: ARRAY
26212: PPUSH
26213: LD_INT 50
26215: PUSH
26216: EMPTY
26217: LIST
26218: PPUSH
26219: CALL_OW 72
26223: PUSH
26224: LD_INT 0
26226: EQUAL
26227: AND
26228: PUSH
26229: LD_EXP 69
26233: NOT
26234: AND
26235: IFFALSE 26408
// begin ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , base , ai_vehicle_attack_delay [ base ] - 0 0$1 ) ;
26237: LD_ADDR_EXP 39
26241: PUSH
26242: LD_EXP 39
26246: PPUSH
26247: LD_VAR 0 14
26251: PPUSH
26252: LD_EXP 39
26256: PUSH
26257: LD_VAR 0 14
26261: ARRAY
26262: PUSH
26263: LD_INT 35
26265: MINUS
26266: PPUSH
26267: CALL_OW 1
26271: ST_TO_ADDR
// if ai_vehicle_attack_delay [ base ] <= 0 0$0 and ai_attacking_soldiers [ base ] = 0 and ai_attacking_scientists [ base ] = 0 and base = 1 and Rand ( 1 , 2 ) = 1 then
26272: LD_EXP 39
26276: PUSH
26277: LD_VAR 0 14
26281: ARRAY
26282: PUSH
26283: LD_INT 0
26285: LESSEQUAL
26286: PUSH
26287: LD_EXP 45
26291: PUSH
26292: LD_VAR 0 14
26296: ARRAY
26297: PUSH
26298: LD_INT 0
26300: EQUAL
26301: AND
26302: PUSH
26303: LD_EXP 46
26307: PUSH
26308: LD_VAR 0 14
26312: ARRAY
26313: PUSH
26314: LD_INT 0
26316: EQUAL
26317: AND
26318: PUSH
26319: LD_VAR 0 14
26323: PUSH
26324: LD_INT 1
26326: EQUAL
26327: AND
26328: PUSH
26329: LD_INT 1
26331: PPUSH
26332: LD_INT 2
26334: PPUSH
26335: CALL_OW 12
26339: PUSH
26340: LD_INT 1
26342: EQUAL
26343: AND
26344: IFFALSE 26400
// begin ai_vehicle_attack_delay = Replace ( ai_vehicle_attack_delay , base , ai_human_attack_delay [ base ] ) ;
26346: LD_ADDR_EXP 39
26350: PUSH
26351: LD_EXP 39
26355: PPUSH
26356: LD_VAR 0 14
26360: PPUSH
26361: LD_EXP 49
26365: PUSH
26366: LD_VAR 0 14
26370: ARRAY
26371: PPUSH
26372: CALL_OW 1
26376: ST_TO_ADDR
// ai_human_attack_delay = Replace ( ai_human_attack_delay , base , 0 0$0 ) ;
26377: LD_ADDR_EXP 49
26381: PUSH
26382: LD_EXP 49
26386: PPUSH
26387: LD_VAR 0 14
26391: PPUSH
26392: LD_INT 0
26394: PPUSH
26395: CALL_OW 1
26399: ST_TO_ADDR
// end ; ready_to_attack = false ;
26400: LD_ADDR_VAR 0 13
26404: PUSH
26405: LD_INT 0
26407: ST_TO_ADDR
// end ; temp_list = ai_heal_these_humans [ base ] ;
26408: LD_ADDR_VAR 0 4
26412: PUSH
26413: LD_EXP 26
26417: PUSH
26418: LD_VAR 0 14
26422: ARRAY
26423: ST_TO_ADDR
// i = 1 ;
26424: LD_ADDR_VAR 0 2
26428: PUSH
26429: LD_INT 1
26431: ST_TO_ADDR
// while i <= mechanics_list do
26432: LD_VAR 0 2
26436: PUSH
26437: LD_VAR 0 3
26441: LESSEQUAL
26442: IFFALSE 26537
// begin if GetLives ( mechanics_list [ i ] ) <= 900 then
26444: LD_VAR 0 3
26448: PUSH
26449: LD_VAR 0 2
26453: ARRAY
26454: PPUSH
26455: CALL_OW 256
26459: PUSH
26460: LD_INT 900
26462: LESSEQUAL
26463: IFFALSE 26521
// begin temp_list = temp_list ^ mechanics_list [ i ] ;
26465: LD_ADDR_VAR 0 4
26469: PUSH
26470: LD_VAR 0 4
26474: PUSH
26475: LD_VAR 0 3
26479: PUSH
26480: LD_VAR 0 2
26484: ARRAY
26485: ADD
26486: ST_TO_ADDR
// mechanics_list = Delete ( mechanics_list , i ) ;
26487: LD_ADDR_VAR 0 3
26491: PUSH
26492: LD_VAR 0 3
26496: PPUSH
26497: LD_VAR 0 2
26501: PPUSH
26502: CALL_OW 3
26506: ST_TO_ADDR
// i = i - 1 ;
26507: LD_ADDR_VAR 0 2
26511: PUSH
26512: LD_VAR 0 2
26516: PUSH
26517: LD_INT 1
26519: MINUS
26520: ST_TO_ADDR
// end ; i = i + 1 ;
26521: LD_ADDR_VAR 0 2
26525: PUSH
26526: LD_VAR 0 2
26530: PUSH
26531: LD_INT 1
26533: PLUS
26534: ST_TO_ADDR
// end ;
26535: GO 26432
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
26537: LD_ADDR_EXP 26
26541: PUSH
26542: LD_EXP 26
26546: PPUSH
26547: LD_VAR 0 14
26551: PPUSH
26552: LD_VAR 0 4
26556: PPUSH
26557: CALL_OW 1
26561: ST_TO_ADDR
// temp_list = [ ] ;
26562: LD_ADDR_VAR 0 4
26566: PUSH
26567: EMPTY
26568: ST_TO_ADDR
// for i in ai_refuel_vehicles_list [ base ] do
26569: LD_ADDR_VAR 0 2
26573: PUSH
26574: LD_EXP 36
26578: PUSH
26579: LD_VAR 0 14
26583: ARRAY
26584: PUSH
26585: FOR_IN
26586: IFFALSE 26621
// if GetFuel ( i ) < 95 then
26588: LD_VAR 0 2
26592: PPUSH
26593: CALL_OW 261
26597: PUSH
26598: LD_INT 95
26600: LESS
26601: IFFALSE 26619
// temp_list = temp_list ^ i ;
26603: LD_ADDR_VAR 0 4
26607: PUSH
26608: LD_VAR 0 4
26612: PUSH
26613: LD_VAR 0 2
26617: ADD
26618: ST_TO_ADDR
26619: GO 26585
26621: POP
26622: POP
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
26623: LD_ADDR_EXP 36
26627: PUSH
26628: LD_EXP 36
26632: PPUSH
26633: LD_VAR 0 14
26637: PPUSH
26638: LD_VAR 0 4
26642: PPUSH
26643: CALL_OW 1
26647: ST_TO_ADDR
// if under_attack then
26648: LD_VAR 0 10
26652: IFFALSE 26745
// begin case base of 1 :
26654: LD_VAR 0 14
26658: PUSH
26659: LD_INT 1
26661: DOUBLE
26662: EQUAL
26663: IFTRUE 26667
26665: GO 26678
26667: POP
// area = rubase1scanarea ; 2 :
26668: LD_ADDR_VAR 0 15
26672: PUSH
26673: LD_INT 7
26675: ST_TO_ADDR
26676: GO 26698
26678: LD_INT 2
26680: DOUBLE
26681: EQUAL
26682: IFTRUE 26686
26684: GO 26697
26686: POP
// area = rubase2scanarea ; end ;
26687: LD_ADDR_VAR 0 15
26691: PUSH
26692: LD_INT 8
26694: ST_TO_ADDR
26695: GO 26698
26697: POP
// temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_ok ] , [ f_inarea , area ] ] ) ;
26698: LD_ADDR_VAR 0 4
26702: PUSH
26703: LD_INT 81
26705: PUSH
26706: LD_VAR 0 1
26710: PUSH
26711: EMPTY
26712: LIST
26713: LIST
26714: PUSH
26715: LD_INT 50
26717: PUSH
26718: EMPTY
26719: LIST
26720: PUSH
26721: LD_INT 95
26723: PUSH
26724: LD_VAR 0 15
26728: PUSH
26729: EMPTY
26730: LIST
26731: LIST
26732: PUSH
26733: EMPTY
26734: LIST
26735: LIST
26736: LIST
26737: PPUSH
26738: CALL_OW 69
26742: ST_TO_ADDR
// end else
26743: GO 26752
// temp_list = [ ] ;
26745: LD_ADDR_VAR 0 4
26749: PUSH
26750: EMPTY
26751: ST_TO_ADDR
// if temp_list > 0 then
26752: LD_VAR 0 4
26756: PUSH
26757: LD_INT 0
26759: GREATER
26760: IFFALSE 26817
// begin vehicles_list = ai_vehicles_defend [ base ] ;
26762: LD_ADDR_VAR 0 8
26766: PUSH
26767: LD_EXP 22
26771: PUSH
26772: LD_VAR 0 14
26776: ARRAY
26777: ST_TO_ADDR
// ComAgressiveMove ( vehicles_list , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
26778: LD_VAR 0 8
26782: PPUSH
26783: LD_VAR 0 4
26787: PUSH
26788: LD_INT 1
26790: ARRAY
26791: PPUSH
26792: CALL_OW 250
26796: PPUSH
26797: LD_VAR 0 4
26801: PUSH
26802: LD_INT 1
26804: ARRAY
26805: PPUSH
26806: CALL_OW 251
26810: PPUSH
26811: CALL_OW 114
// end else
26815: GO 27168
// begin if IsOk ( ai_depot [ base ] ) then
26817: LD_EXP 18
26821: PUSH
26822: LD_VAR 0 14
26826: ARRAY
26827: PPUSH
26828: CALL_OW 302
26832: IFFALSE 27069
// begin temp_list = ai_refuel_vehicles_list [ base ] ;
26834: LD_ADDR_VAR 0 4
26838: PUSH
26839: LD_EXP 36
26843: PUSH
26844: LD_VAR 0 14
26848: ARRAY
26849: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] diff ai_refuel_vehicles_list [ base ] do
26850: LD_ADDR_VAR 0 2
26854: PUSH
26855: LD_EXP 22
26859: PUSH
26860: LD_VAR 0 14
26864: ARRAY
26865: PUSH
26866: LD_EXP 36
26870: PUSH
26871: LD_VAR 0 14
26875: ARRAY
26876: DIFF
26877: PUSH
26878: FOR_IN
26879: IFFALSE 26914
// if GetFuel ( i ) < 80 then
26881: LD_VAR 0 2
26885: PPUSH
26886: CALL_OW 261
26890: PUSH
26891: LD_INT 80
26893: LESS
26894: IFFALSE 26912
// temp_list = temp_list ^ i ;
26896: LD_ADDR_VAR 0 4
26900: PUSH
26901: LD_VAR 0 4
26905: PUSH
26906: LD_VAR 0 2
26910: ADD
26911: ST_TO_ADDR
26912: GO 26878
26914: POP
26915: POP
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
26916: LD_ADDR_EXP 36
26920: PUSH
26921: LD_EXP 36
26925: PPUSH
26926: LD_VAR 0 14
26930: PPUSH
26931: LD_VAR 0 4
26935: PPUSH
26936: CALL_OW 1
26940: ST_TO_ADDR
// for i in ai_refuel_vehicles_list [ base ] do
26941: LD_ADDR_VAR 0 2
26945: PUSH
26946: LD_EXP 36
26950: PUSH
26951: LD_VAR 0 14
26955: ARRAY
26956: PUSH
26957: FOR_IN
26958: IFFALSE 27067
// begin if IsInArea ( i , base_area ) then
26960: LD_VAR 0 2
26964: PPUSH
26965: LD_VAR 0 17
26969: PPUSH
26970: CALL_OW 308
26974: IFFALSE 27018
// begin ComMoveUnit ( i , ai_depot [ base ] ) ;
26976: LD_VAR 0 2
26980: PPUSH
26981: LD_EXP 18
26985: PUSH
26986: LD_VAR 0 14
26990: ARRAY
26991: PPUSH
26992: CALL_OW 112
// AddComRefuel ( i , ai_depot [ base ] ) ;
26996: LD_VAR 0 2
27000: PPUSH
27001: LD_EXP 18
27005: PUSH
27006: LD_VAR 0 14
27010: ARRAY
27011: PPUSH
27012: CALL_OW 210
// end else
27016: GO 27065
// ComAgressiveMove ( i , ai_buildings_locations [ base ] [ 1 ] [ 1 ] , ai_buildings_locations [ base ] [ 1 ] [ 2 ] ) ;
27018: LD_VAR 0 2
27022: PPUSH
27023: LD_EXP 21
27027: PUSH
27028: LD_VAR 0 14
27032: ARRAY
27033: PUSH
27034: LD_INT 1
27036: ARRAY
27037: PUSH
27038: LD_INT 1
27040: ARRAY
27041: PPUSH
27042: LD_EXP 21
27046: PUSH
27047: LD_VAR 0 14
27051: ARRAY
27052: PUSH
27053: LD_INT 1
27055: ARRAY
27056: PUSH
27057: LD_INT 2
27059: ARRAY
27060: PPUSH
27061: CALL_OW 114
// end ;
27065: GO 26957
27067: POP
27068: POP
// end ; for i in ai_vehicles_defend [ base ] diff ai_refuel_vehicles_list [ base ] do
27069: LD_ADDR_VAR 0 2
27073: PUSH
27074: LD_EXP 22
27078: PUSH
27079: LD_VAR 0 14
27083: ARRAY
27084: PUSH
27085: LD_EXP 36
27089: PUSH
27090: LD_VAR 0 14
27094: ARRAY
27095: DIFF
27096: PUSH
27097: FOR_IN
27098: IFFALSE 27166
// if not IsInArea ( i , base_area ) then
27100: LD_VAR 0 2
27104: PPUSH
27105: LD_VAR 0 17
27109: PPUSH
27110: CALL_OW 308
27114: NOT
27115: IFFALSE 27164
// ComAgressiveMove ( i , ai_buildings_locations [ base ] [ 1 ] [ 1 ] , ai_buildings_locations [ base ] [ 1 ] [ 2 ] ) ;
27117: LD_VAR 0 2
27121: PPUSH
27122: LD_EXP 21
27126: PUSH
27127: LD_VAR 0 14
27131: ARRAY
27132: PUSH
27133: LD_INT 1
27135: ARRAY
27136: PUSH
27137: LD_INT 1
27139: ARRAY
27140: PPUSH
27141: LD_EXP 21
27145: PUSH
27146: LD_VAR 0 14
27150: ARRAY
27151: PUSH
27152: LD_INT 1
27154: ARRAY
27155: PUSH
27156: LD_INT 2
27158: ARRAY
27159: PPUSH
27160: CALL_OW 114
27164: GO 27097
27166: POP
27167: POP
// end ; if mechanics_list = 0 then
27168: LD_VAR 0 3
27172: PUSH
27173: LD_INT 0
27175: EQUAL
27176: IFFALSE 27180
// continue ;
27178: GO 26081
// allowed_to_repair_vehicles = UnitFilter ( ai_vehicles_defend [ base ] , [ [ f_not , [ f_lives , 1000 ] ] , [ f_inarea , base_area ] ] ) ;
27180: LD_ADDR_VAR 0 9
27184: PUSH
27185: LD_EXP 22
27189: PUSH
27190: LD_VAR 0 14
27194: ARRAY
27195: PPUSH
27196: LD_INT 3
27198: PUSH
27199: LD_INT 24
27201: PUSH
27202: LD_INT 1000
27204: PUSH
27205: EMPTY
27206: LIST
27207: LIST
27208: PUSH
27209: EMPTY
27210: LIST
27211: LIST
27212: PUSH
27213: LD_INT 95
27215: PUSH
27216: LD_VAR 0 17
27220: PUSH
27221: EMPTY
27222: LIST
27223: LIST
27224: PUSH
27225: EMPTY
27226: LIST
27227: LIST
27228: PPUSH
27229: CALL_OW 72
27233: ST_TO_ADDR
// if not under_attack then
27234: LD_VAR 0 10
27238: NOT
27239: IFFALSE 27305
// allowed_to_repair_vehicles = allowed_to_repair_vehicles ^ UnitFilter ( ai_cargo_bay [ base ] diff 0 , [ [ f_not , [ f_lives , 1000 ] ] , [ f_inarea , base_area ] ] ) ;
27241: LD_ADDR_VAR 0 9
27245: PUSH
27246: LD_VAR 0 9
27250: PUSH
27251: LD_EXP 42
27255: PUSH
27256: LD_VAR 0 14
27260: ARRAY
27261: PUSH
27262: LD_INT 0
27264: DIFF
27265: PPUSH
27266: LD_INT 3
27268: PUSH
27269: LD_INT 24
27271: PUSH
27272: LD_INT 1000
27274: PUSH
27275: EMPTY
27276: LIST
27277: LIST
27278: PUSH
27279: EMPTY
27280: LIST
27281: LIST
27282: PUSH
27283: LD_INT 95
27285: PUSH
27286: LD_VAR 0 17
27290: PUSH
27291: EMPTY
27292: LIST
27293: LIST
27294: PUSH
27295: EMPTY
27296: LIST
27297: LIST
27298: PPUSH
27299: CALL_OW 72
27303: ADD
27304: ST_TO_ADDR
// if allowed_to_repair_vehicles > 0 then
27305: LD_VAR 0 9
27309: PUSH
27310: LD_INT 0
27312: GREATER
27313: IFFALSE 27340
// begin ComRepairVehicle ( GetHumansOutOfUnits ( mechanics_list ) , allowed_to_repair_vehicles [ 1 ] ) ;
27315: LD_VAR 0 3
27319: PPUSH
27320: CALL 25824 0 1
27324: PPUSH
27325: LD_VAR 0 9
27329: PUSH
27330: LD_INT 1
27332: ARRAY
27333: PPUSH
27334: CALL_OW 129
// end else
27338: GO 27750
// begin if UnitFilter ( ai_vehicles_attack [ base ] , [ f_ok ] ) = 0 and ready_to_attack and ai_refuel_vehicles_list [ base ] = 0 and ai_vehicles_defend [ base ] >= NumOfVehicleReqToAttack and not final_battle_begin then
27340: LD_EXP 23
27344: PUSH
27345: LD_VAR 0 14
27349: ARRAY
27350: PPUSH
27351: LD_INT 50
27353: PUSH
27354: EMPTY
27355: LIST
27356: PPUSH
27357: CALL_OW 72
27361: PUSH
27362: LD_INT 0
27364: EQUAL
27365: PUSH
27366: LD_VAR 0 13
27370: AND
27371: PUSH
27372: LD_EXP 36
27376: PUSH
27377: LD_VAR 0 14
27381: ARRAY
27382: PUSH
27383: LD_INT 0
27385: EQUAL
27386: AND
27387: PUSH
27388: LD_EXP 22
27392: PUSH
27393: LD_VAR 0 14
27397: ARRAY
27398: PUSH
27399: CALL 27758 0 0
27403: GREATEREQUAL
27404: AND
27405: PUSH
27406: LD_EXP 69
27410: NOT
27411: AND
27412: IFFALSE 27685
// begin temp_list = [ ] ;
27414: LD_ADDR_VAR 0 4
27418: PUSH
27419: EMPTY
27420: ST_TO_ADDR
// for k = 1 to NumOfVehicleReqToAttack do
27421: LD_ADDR_VAR 0 12
27425: PUSH
27426: DOUBLE
27427: LD_INT 1
27429: DEC
27430: ST_TO_ADDR
27431: CALL 27758 0 0
27435: PUSH
27436: FOR_TO
27437: IFFALSE 27491
// begin temp_list = temp_list ^ ai_vehicles_defend [ base ] [ 1 ] ;
27439: LD_ADDR_VAR 0 4
27443: PUSH
27444: LD_VAR 0 4
27448: PUSH
27449: LD_EXP 22
27453: PUSH
27454: LD_VAR 0 14
27458: ARRAY
27459: PUSH
27460: LD_INT 1
27462: ARRAY
27463: ADD
27464: ST_TO_ADDR
// RemoveVehicleFromVariables ( base , ai_vehicles_defend [ base ] [ 1 ] ) ;
27465: LD_VAR 0 14
27469: PPUSH
27470: LD_EXP 22
27474: PUSH
27475: LD_VAR 0 14
27479: ARRAY
27480: PUSH
27481: LD_INT 1
27483: ARRAY
27484: PPUSH
27485: CALL 16521 0 2
// end ;
27489: GO 27436
27491: POP
27492: POP
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
27493: LD_ADDR_EXP 23
27497: PUSH
27498: LD_EXP 23
27502: PPUSH
27503: LD_VAR 0 14
27507: PPUSH
27508: LD_VAR 0 4
27512: PPUSH
27513: CALL_OW 1
27517: ST_TO_ADDR
// for k in ai_vehicles_attack [ base ] do
27518: LD_ADDR_VAR 0 12
27522: PUSH
27523: LD_EXP 23
27527: PUSH
27528: LD_VAR 0 14
27532: ARRAY
27533: PUSH
27534: FOR_IN
27535: IFFALSE 27593
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , k , 1 ) ;
27537: LD_ADDR_VAR 0 4
27541: PUSH
27542: LD_EXP 47
27546: PUSH
27547: LD_VAR 0 14
27551: ARRAY
27552: PPUSH
27553: LD_VAR 0 12
27557: PPUSH
27558: LD_INT 1
27560: PPUSH
27561: CALL_OW 1
27565: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
27566: LD_ADDR_EXP 47
27570: PUSH
27571: LD_EXP 47
27575: PPUSH
27576: LD_VAR 0 14
27580: PPUSH
27581: LD_VAR 0 4
27585: PPUSH
27586: CALL_OW 1
27590: ST_TO_ADDR
// end ;
27591: GO 27534
27593: POP
27594: POP
// if FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] , [ f_inarea , rubase2scanarea ] ] ) > 0 and Rand ( 1 , 2 ) = 1 then
27595: LD_INT 22
27597: PUSH
27598: LD_EXP 2
27602: PUSH
27603: EMPTY
27604: LIST
27605: LIST
27606: PUSH
27607: LD_INT 21
27609: PUSH
27610: LD_INT 3
27612: PUSH
27613: EMPTY
27614: LIST
27615: LIST
27616: PUSH
27617: LD_INT 95
27619: PUSH
27620: LD_INT 8
27622: PUSH
27623: EMPTY
27624: LIST
27625: LIST
27626: PUSH
27627: EMPTY
27628: LIST
27629: LIST
27630: LIST
27631: PPUSH
27632: CALL_OW 69
27636: PUSH
27637: LD_INT 0
27639: GREATER
27640: PUSH
27641: LD_INT 1
27643: PPUSH
27644: LD_INT 2
27646: PPUSH
27647: CALL_OW 12
27651: PUSH
27652: LD_INT 1
27654: EQUAL
27655: AND
27656: IFFALSE 27668
// vehicle_attack_strategy = 2 else
27658: LD_ADDR_EXP 51
27662: PUSH
27663: LD_INT 2
27665: ST_TO_ADDR
27666: GO 27676
// vehicle_attack_strategy = 1 ;
27668: LD_ADDR_EXP 51
27672: PUSH
27673: LD_INT 1
27675: ST_TO_ADDR
// ResetVehicleAttackDelay ( base ) ;
27676: LD_VAR 0 14
27680: PPUSH
27681: CALL 7645 0 1
// end ; DistributeHumansToBuildings ( base , mechanics_list , UnitFilter ( ai_facts [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
27685: LD_VAR 0 14
27689: PPUSH
27690: LD_VAR 0 3
27694: PPUSH
27695: LD_EXP 30
27699: PUSH
27700: LD_VAR 0 14
27704: ARRAY
27705: PPUSH
27706: LD_INT 50
27708: PUSH
27709: EMPTY
27710: LIST
27711: PUSH
27712: LD_INT 3
27714: PUSH
27715: LD_INT 57
27717: PUSH
27718: EMPTY
27719: LIST
27720: PUSH
27721: EMPTY
27722: LIST
27723: LIST
27724: PUSH
27725: EMPTY
27726: LIST
27727: LIST
27728: PPUSH
27729: CALL_OW 72
27733: PPUSH
27734: LD_INT 3
27736: PPUSH
27737: LD_INT 6
27739: PPUSH
27740: LD_INT 1
27742: PPUSH
27743: LD_INT 0
27745: PPUSH
27746: CALL 20275 0 7
// end ; end ;
27750: GO 26081
27752: POP
27753: POP
// enable ;
27754: ENABLE
// end ;
27755: PPOPN 17
27757: END
// function NumOfVehicleReqToAttack ; var val ; begin
27758: LD_INT 0
27760: PPUSH
27761: PPUSH
// case tick of 0 .. 15 15$0 :
27762: LD_OWVAR 1
27766: PUSH
27767: LD_INT 0
27769: DOUBLE
27770: GREATEREQUAL
27771: IFFALSE 27779
27773: LD_INT 31500
27775: DOUBLE
27776: LESSEQUAL
27777: IFTRUE 27781
27779: GO 27809
27781: POP
// result = [ 2 , 4 , 4 ] [ difficulty ] ; 0 .. 30 30$0 :
27782: LD_ADDR_VAR 0 1
27786: PUSH
27787: LD_INT 2
27789: PUSH
27790: LD_INT 4
27792: PUSH
27793: LD_INT 4
27795: PUSH
27796: EMPTY
27797: LIST
27798: LIST
27799: LIST
27800: PUSH
27801: LD_OWVAR 67
27805: ARRAY
27806: ST_TO_ADDR
27807: GO 27877
27809: LD_INT 0
27811: DOUBLE
27812: GREATEREQUAL
27813: IFFALSE 27821
27815: LD_INT 63000
27817: DOUBLE
27818: LESSEQUAL
27819: IFTRUE 27823
27821: GO 27851
27823: POP
// result = [ 3 , 5 , 5 ] [ difficulty ] ; else
27824: LD_ADDR_VAR 0 1
27828: PUSH
27829: LD_INT 3
27831: PUSH
27832: LD_INT 5
27834: PUSH
27835: LD_INT 5
27837: PUSH
27838: EMPTY
27839: LIST
27840: LIST
27841: LIST
27842: PUSH
27843: LD_OWVAR 67
27847: ARRAY
27848: ST_TO_ADDR
27849: GO 27877
27851: POP
// result = [ 4 , 6 , 7 ] [ difficulty ] ; end ;
27852: LD_ADDR_VAR 0 1
27856: PUSH
27857: LD_INT 4
27859: PUSH
27860: LD_INT 6
27862: PUSH
27863: LD_INT 7
27865: PUSH
27866: EMPTY
27867: LIST
27868: LIST
27869: LIST
27870: PUSH
27871: LD_OWVAR 67
27875: ARRAY
27876: ST_TO_ADDR
// if deny_crates_spawned >= 30 then
27877: LD_EXP 61
27881: PUSH
27882: LD_INT 30
27884: GREATEREQUAL
27885: IFFALSE 28003
// begin case deny_crates_gathered / deny_crates_spawned of 0 .. 0.2 :
27887: LD_EXP 62
27891: PUSH
27892: LD_EXP 61
27896: DIVREAL
27897: PUSH
27898: LD_INT 0
27900: DOUBLE
27901: GREATEREQUAL
27902: IFFALSE 27911
27904: LD_REAL  2.00000000000000E-0001
27907: DOUBLE
27908: LESSEQUAL
27909: IFTRUE 27913
27911: GO 27925
27913: POP
// val = - 2 ; 0 .. 0.5 :
27914: LD_ADDR_VAR 0 2
27918: PUSH
27919: LD_INT 2
27921: NEG
27922: ST_TO_ADDR
27923: GO 27987
27925: LD_INT 0
27927: DOUBLE
27928: GREATEREQUAL
27929: IFFALSE 27938
27931: LD_REAL  5.00000000000000E-0001
27934: DOUBLE
27935: LESSEQUAL
27936: IFTRUE 27940
27938: GO 27952
27940: POP
// val = - 1 ; 0 .. 0.8 :
27941: LD_ADDR_VAR 0 2
27945: PUSH
27946: LD_INT 1
27948: NEG
27949: ST_TO_ADDR
27950: GO 27987
27952: LD_INT 0
27954: DOUBLE
27955: GREATEREQUAL
27956: IFFALSE 27965
27958: LD_REAL  8.00000000000000E-0001
27961: DOUBLE
27962: LESSEQUAL
27963: IFTRUE 27967
27965: GO 27978
27967: POP
// val = 1 ; else
27968: LD_ADDR_VAR 0 2
27972: PUSH
27973: LD_INT 1
27975: ST_TO_ADDR
27976: GO 27987
27978: POP
// val = 2 ; end ;
27979: LD_ADDR_VAR 0 2
27983: PUSH
27984: LD_INT 2
27986: ST_TO_ADDR
// result = result + val ;
27987: LD_ADDR_VAR 0 1
27991: PUSH
27992: LD_VAR 0 1
27996: PUSH
27997: LD_VAR 0 2
28001: PLUS
28002: ST_TO_ADDR
// end ; end ;
28003: LD_VAR 0 1
28007: RET
// every 0 0$1 + 0 0$0.1 do var side , i , temp_value , temp_unit , temp_list , base , idle_factories , fact ;
28008: GO 28010
28010: DISABLE
28011: LD_INT 0
28013: PPUSH
28014: PPUSH
28015: PPUSH
28016: PPUSH
28017: PPUSH
28018: PPUSH
28019: PPUSH
28020: PPUSH
// begin side = russians ;
28021: LD_ADDR_VAR 0 1
28025: PUSH
28026: LD_EXP 3
28030: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
28031: LD_INT 35
28033: PPUSH
28034: CALL_OW 67
// for base in ai_bases do
28038: LD_ADDR_VAR 0 6
28042: PUSH
28043: LD_EXP 40
28047: PUSH
28048: FOR_IN
28049: IFFALSE 28827
// begin idle_factories = [ ] ;
28051: LD_ADDR_VAR 0 7
28055: PUSH
28056: EMPTY
28057: ST_TO_ADDR
// for i in ai_facts [ base ] do
28058: LD_ADDR_VAR 0 2
28062: PUSH
28063: LD_EXP 30
28067: PUSH
28068: LD_VAR 0 6
28072: ARRAY
28073: PUSH
28074: FOR_IN
28075: IFFALSE 28136
// if BuildingStatus ( i ) = bs_idle and IsOk ( i ) and GetBType ( i ) = b_factory then
28077: LD_VAR 0 2
28081: PPUSH
28082: CALL_OW 461
28086: PUSH
28087: LD_INT 2
28089: EQUAL
28090: PUSH
28091: LD_VAR 0 2
28095: PPUSH
28096: CALL_OW 302
28100: AND
28101: PUSH
28102: LD_VAR 0 2
28106: PPUSH
28107: CALL_OW 266
28111: PUSH
28112: LD_INT 3
28114: EQUAL
28115: AND
28116: IFFALSE 28134
// idle_factories = idle_factories ^ i ;
28118: LD_ADDR_VAR 0 7
28122: PUSH
28123: LD_VAR 0 7
28127: PUSH
28128: LD_VAR 0 2
28132: ADD
28133: ST_TO_ADDR
28134: GO 28074
28136: POP
28137: POP
// if idle_factories = 0 then
28138: LD_VAR 0 7
28142: PUSH
28143: LD_INT 0
28145: EQUAL
28146: IFFALSE 28150
// continue ;
28148: GO 28048
// temp_value = false ;
28150: LD_ADDR_VAR 0 3
28154: PUSH
28155: LD_INT 0
28157: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
28158: LD_ADDR_VAR 0 2
28162: PUSH
28163: LD_EXP 21
28167: PUSH
28168: LD_VAR 0 6
28172: ARRAY
28173: PUSH
28174: FOR_IN
28175: IFFALSE 28347
// if i [ 4 ] in [ b_bunker , b_turret ] then
28177: LD_VAR 0 2
28181: PUSH
28182: LD_INT 4
28184: ARRAY
28185: PUSH
28186: LD_INT 32
28188: PUSH
28189: LD_INT 33
28191: PUSH
28192: EMPTY
28193: LIST
28194: LIST
28195: IN
28196: IFFALSE 28345
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
28198: LD_ADDR_VAR 0 4
28202: PUSH
28203: LD_VAR 0 2
28207: PUSH
28208: LD_INT 1
28210: ARRAY
28211: PPUSH
28212: LD_VAR 0 2
28216: PUSH
28217: LD_INT 2
28219: ARRAY
28220: PPUSH
28221: CALL_OW 428
28225: ST_TO_ADDR
// if GetBType ( temp_unit ) in [ b_bunker , b_turret ] and not IsConstructed ( temp_unit ) and GetBWeapon ( temp_unit ) <> i [ 7 ] then
28226: LD_VAR 0 4
28230: PPUSH
28231: CALL_OW 266
28235: PUSH
28236: LD_INT 32
28238: PUSH
28239: LD_INT 33
28241: PUSH
28242: EMPTY
28243: LIST
28244: LIST
28245: IN
28246: PUSH
28247: LD_VAR 0 4
28251: PPUSH
28252: CALL_OW 304
28256: NOT
28257: AND
28258: PUSH
28259: LD_VAR 0 4
28263: PPUSH
28264: CALL_OW 269
28268: PUSH
28269: LD_VAR 0 2
28273: PUSH
28274: LD_INT 7
28276: ARRAY
28277: NONEQUAL
28278: AND
28279: IFFALSE 28337
// for fact in idle_factories do
28281: LD_ADDR_VAR 0 8
28285: PUSH
28286: LD_VAR 0 7
28290: PUSH
28291: FOR_IN
28292: IFFALSE 28335
// if IsWeaponFactory ( fact ) then
28294: LD_VAR 0 8
28298: PPUSH
28299: CALL 28836 0 1
28303: IFFALSE 28333
// begin ComPlaceWeapon ( temp_unit , i [ 7 ] ) ;
28305: LD_VAR 0 4
28309: PPUSH
28310: LD_VAR 0 2
28314: PUSH
28315: LD_INT 7
28317: ARRAY
28318: PPUSH
28319: CALL_OW 148
// temp_value = true ;
28323: LD_ADDR_VAR 0 3
28327: PUSH
28328: LD_INT 1
28330: ST_TO_ADDR
// break ;
28331: GO 28335
// end ;
28333: GO 28291
28335: POP
28336: POP
// if temp_value then
28337: LD_VAR 0 3
28341: IFFALSE 28345
// break ;
28343: GO 28347
// end ;
28345: GO 28174
28347: POP
28348: POP
// if temp_value then
28349: LD_VAR 0 3
28353: IFFALSE 28357
// continue ;
28355: GO 28048
// temp_value = false ;
28357: LD_ADDR_VAR 0 3
28361: PUSH
28362: LD_INT 0
28364: ST_TO_ADDR
// if ai_cargo_bay [ base ] = 0 and not ai_cargo_bay_under_construction [ base ] and tick - cargo_bay_destroy_tick [ base ] >= CalculateCargoBayCooldown then
28365: LD_EXP 42
28369: PUSH
28370: LD_VAR 0 6
28374: ARRAY
28375: PUSH
28376: LD_INT 0
28378: EQUAL
28379: PUSH
28380: LD_EXP 43
28384: PUSH
28385: LD_VAR 0 6
28389: ARRAY
28390: NOT
28391: AND
28392: PUSH
28393: LD_OWVAR 1
28397: PUSH
28398: LD_EXP 70
28402: PUSH
28403: LD_VAR 0 6
28407: ARRAY
28408: MINUS
28409: PUSH
28410: CALL 29130 0 0
28414: GREATEREQUAL
28415: AND
28416: IFFALSE 28534
// for fact in idle_factories do
28418: LD_ADDR_VAR 0 8
28422: PUSH
28423: LD_VAR 0 7
28427: PUSH
28428: FOR_IN
28429: IFFALSE 28532
// if ru_medium_tracked in AvailableChassisList ( fact ) and ru_cargo_bay in AvailableWeaponList ( fact ) and control_computer in AvailableControlList ( fact ) then
28431: LD_INT 22
28433: PUSH
28434: LD_VAR 0 8
28438: PPUSH
28439: CALL_OW 475
28443: IN
28444: PUSH
28445: LD_INT 51
28447: PUSH
28448: LD_VAR 0 8
28452: PPUSH
28453: CALL_OW 478
28457: IN
28458: AND
28459: PUSH
28460: LD_INT 3
28462: PUSH
28463: LD_VAR 0 8
28467: PPUSH
28468: CALL_OW 477
28472: IN
28473: AND
28474: IFFALSE 28530
// begin ComConstruct ( fact , ru_medium_tracked , engine_combustion , control_computer , ru_cargo_bay ) ;
28476: LD_VAR 0 8
28480: PPUSH
28481: LD_INT 22
28483: PPUSH
28484: LD_INT 1
28486: PPUSH
28487: LD_INT 3
28489: PPUSH
28490: LD_INT 51
28492: PPUSH
28493: CALL_OW 125
// temp_value = true ;
28497: LD_ADDR_VAR 0 3
28501: PUSH
28502: LD_INT 1
28504: ST_TO_ADDR
// ai_cargo_bay_under_construction = Replace ( ai_cargo_bay_under_construction , base , true ) ;
28505: LD_ADDR_EXP 43
28509: PUSH
28510: LD_EXP 43
28514: PPUSH
28515: LD_VAR 0 6
28519: PPUSH
28520: LD_INT 1
28522: PPUSH
28523: CALL_OW 1
28527: ST_TO_ADDR
// break ;
28528: GO 28532
// end ;
28530: GO 28428
28532: POP
28533: POP
// if temp_value then
28534: LD_VAR 0 3
28538: IFFALSE 28542
// continue ;
28540: GO 28048
// if UnitFilter ( ai_vehicles_defend [ base ] , [ f_ok ] ) < BestFromListByList ( [ NumOfVehicleReqToAttack , 6 ] , [ NumOfVehicleReqToAttack , 6 ] ) then
28542: LD_EXP 22
28546: PUSH
28547: LD_VAR 0 6
28551: ARRAY
28552: PPUSH
28553: LD_INT 50
28555: PUSH
28556: EMPTY
28557: LIST
28558: PPUSH
28559: CALL_OW 72
28563: PUSH
28564: CALL 27758 0 0
28568: PUSH
28569: LD_INT 6
28571: PUSH
28572: EMPTY
28573: LIST
28574: LIST
28575: PPUSH
28576: CALL 27758 0 0
28580: PUSH
28581: LD_INT 6
28583: PUSH
28584: EMPTY
28585: LIST
28586: LIST
28587: PPUSH
28588: CALL_OW 79
28592: LESS
28593: IFFALSE 28825
// case side of russians :
28595: LD_VAR 0 1
28599: PUSH
28600: LD_EXP 3
28604: DOUBLE
28605: EQUAL
28606: IFTRUE 28610
28608: GO 28824
28610: POP
// begin if Rand ( 1 , 4 ) = 1 then
28611: LD_INT 1
28613: PPUSH
28614: LD_INT 4
28616: PPUSH
28617: CALL_OW 12
28621: PUSH
28622: LD_INT 1
28624: EQUAL
28625: IFFALSE 28673
// begin if Rand ( 1 , 3 ) = 1 and difficulty = 1 then
28627: LD_INT 1
28629: PPUSH
28630: LD_INT 3
28632: PPUSH
28633: CALL_OW 12
28637: PUSH
28638: LD_INT 1
28640: EQUAL
28641: PUSH
28642: LD_OWVAR 67
28646: PUSH
28647: LD_INT 1
28649: EQUAL
28650: AND
28651: IFFALSE 28663
// temp_value = ru_heavy_machine_gun else
28653: LD_ADDR_VAR 0 3
28657: PUSH
28658: LD_INT 42
28660: ST_TO_ADDR
28661: GO 28671
// temp_value = ru_gatling_gun ;
28663: LD_ADDR_VAR 0 3
28667: PUSH
28668: LD_INT 43
28670: ST_TO_ADDR
// end else
28671: GO 28707
// if Rand ( 1 , 3 ) = 1 then
28673: LD_INT 1
28675: PPUSH
28676: LD_INT 3
28678: PPUSH
28679: CALL_OW 12
28683: PUSH
28684: LD_INT 1
28686: EQUAL
28687: IFFALSE 28699
// temp_value = ru_gun else
28689: LD_ADDR_VAR 0 3
28693: PUSH
28694: LD_INT 44
28696: ST_TO_ADDR
28697: GO 28707
// temp_value = ru_heavy_gun ;
28699: LD_ADDR_VAR 0 3
28703: PUSH
28704: LD_INT 46
28706: ST_TO_ADDR
// if not IsWeaponFactory ( idle_factories [ 1 ] ) then
28707: LD_VAR 0 7
28711: PUSH
28712: LD_INT 1
28714: ARRAY
28715: PPUSH
28716: CALL 28836 0 1
28720: NOT
28721: IFFALSE 28731
// temp_value = ru_heavy_machine_gun ;
28723: LD_ADDR_VAR 0 3
28727: PUSH
28728: LD_INT 42
28730: ST_TO_ADDR
// if difficulty = 1 and Rand ( 1 , 3 ) = 1 then
28731: LD_OWVAR 67
28735: PUSH
28736: LD_INT 1
28738: EQUAL
28739: PUSH
28740: LD_INT 1
28742: PPUSH
28743: LD_INT 3
28745: PPUSH
28746: CALL_OW 12
28750: PUSH
28751: LD_INT 1
28753: EQUAL
28754: AND
28755: IFFALSE 28785
// begin i = ru_medium_tracked ;
28757: LD_ADDR_VAR 0 2
28761: PUSH
28762: LD_INT 22
28764: ST_TO_ADDR
// if temp_value = ru_heavy_gun then
28765: LD_VAR 0 3
28769: PUSH
28770: LD_INT 46
28772: EQUAL
28773: IFFALSE 28783
// temp_value = ru_gun ;
28775: LD_ADDR_VAR 0 3
28779: PUSH
28780: LD_INT 44
28782: ST_TO_ADDR
// end else
28783: GO 28793
// i = ru_heavy_tracked ;
28785: LD_ADDR_VAR 0 2
28789: PUSH
28790: LD_INT 24
28792: ST_TO_ADDR
// ComConstruct ( idle_factories [ 1 ] , i , engine_combustion , control_computer , temp_value ) ;
28793: LD_VAR 0 7
28797: PUSH
28798: LD_INT 1
28800: ARRAY
28801: PPUSH
28802: LD_VAR 0 2
28806: PPUSH
28807: LD_INT 1
28809: PPUSH
28810: LD_INT 3
28812: PPUSH
28813: LD_VAR 0 3
28817: PPUSH
28818: CALL_OW 125
// end ; end ;
28822: GO 28825
28824: POP
// end ;
28825: GO 28048
28827: POP
28828: POP
// until false ;
28829: LD_INT 0
28831: IFFALSE 28031
// end ;
28833: PPOPN 8
28835: END
// function IsWeaponFactory ( factory ) ; begin
28836: LD_INT 0
28838: PPUSH
// if FilterAllUnits ( [ [ f_dist , factory , 4 ] , [ f_btype , b_ext_gun ] ] ) > 0 then
28839: LD_INT 91
28841: PUSH
28842: LD_VAR 0 1
28846: PUSH
28847: LD_INT 4
28849: PUSH
28850: EMPTY
28851: LIST
28852: LIST
28853: LIST
28854: PUSH
28855: LD_INT 30
28857: PUSH
28858: LD_INT 17
28860: PUSH
28861: EMPTY
28862: LIST
28863: LIST
28864: PUSH
28865: EMPTY
28866: LIST
28867: LIST
28868: PPUSH
28869: CALL_OW 69
28873: PUSH
28874: LD_INT 0
28876: GREATER
28877: IFFALSE 28889
// result = true else
28879: LD_ADDR_VAR 0 2
28883: PUSH
28884: LD_INT 1
28886: ST_TO_ADDR
28887: GO 28897
// result = false ;
28889: LD_ADDR_VAR 0 2
28893: PUSH
28894: LD_INT 0
28896: ST_TO_ADDR
// end ;
28897: LD_VAR 0 2
28901: RET
// on VehicleCaptured ( new_identifier , old_identifier , old_side , capturing_unit ) do var temp_list , base ;
28902: LD_INT 0
28904: PPUSH
28905: PPUSH
// begin if old_side <> russians then
28906: LD_VAR 0 3
28910: PUSH
28911: LD_EXP 3
28915: NONEQUAL
28916: IFFALSE 28920
// exit ;
28918: GO 28951
// for base in ai_bases do
28920: LD_ADDR_VAR 0 6
28924: PUSH
28925: LD_EXP 40
28929: PUSH
28930: FOR_IN
28931: IFFALSE 28949
// RemoveVehicleFromVariables ( base , old_identifier ) ;
28933: LD_VAR 0 6
28937: PPUSH
28938: LD_VAR 0 2
28942: PPUSH
28943: CALL 16521 0 2
28947: GO 28930
28949: POP
28950: POP
// end ;
28951: PPOPN 6
28953: END
// on VehicleConstructed ( vehicle , factory ) do var side , temp_list , base ;
28954: LD_INT 0
28956: PPUSH
28957: PPUSH
28958: PPUSH
// begin side = GetSide ( vehicle ) ;
28959: LD_ADDR_VAR 0 3
28963: PUSH
28964: LD_VAR 0 1
28968: PPUSH
28969: CALL_OW 255
28973: ST_TO_ADDR
// if side <> russians then
28974: LD_VAR 0 3
28978: PUSH
28979: LD_EXP 3
28983: NONEQUAL
28984: IFFALSE 28988
// exit ;
28986: GO 29127
// base = FindBase ( vehicle ) ;
28988: LD_ADDR_VAR 0 5
28992: PUSH
28993: LD_VAR 0 1
28997: PPUSH
28998: CALL 17622 0 1
29002: ST_TO_ADDR
// if base = 0 then
29003: LD_VAR 0 5
29007: PUSH
29008: LD_INT 0
29010: EQUAL
29011: IFFALSE 29015
// exit ;
29013: GO 29127
// if GetWeapon ( vehicle ) <> ru_cargo_bay then
29015: LD_VAR 0 1
29019: PPUSH
29020: CALL_OW 264
29024: PUSH
29025: LD_INT 51
29027: NONEQUAL
29028: IFFALSE 29079
// begin temp_list = ai_vehicles_defend [ base ] ^ vehicle ;
29030: LD_ADDR_VAR 0 4
29034: PUSH
29035: LD_EXP 22
29039: PUSH
29040: LD_VAR 0 5
29044: ARRAY
29045: PUSH
29046: LD_VAR 0 1
29050: ADD
29051: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
29052: LD_ADDR_EXP 22
29056: PUSH
29057: LD_EXP 22
29061: PPUSH
29062: LD_VAR 0 5
29066: PPUSH
29067: LD_VAR 0 4
29071: PPUSH
29072: CALL_OW 1
29076: ST_TO_ADDR
// end else
29077: GO 29127
// begin ai_cargo_bay = Replace ( ai_cargo_bay , base , vehicle ) ;
29079: LD_ADDR_EXP 42
29083: PUSH
29084: LD_EXP 42
29088: PPUSH
29089: LD_VAR 0 5
29093: PPUSH
29094: LD_VAR 0 1
29098: PPUSH
29099: CALL_OW 1
29103: ST_TO_ADDR
// ai_cargo_bay_under_construction = Replace ( ai_cargo_bay_under_construction , base , false ) ;
29104: LD_ADDR_EXP 43
29108: PUSH
29109: LD_EXP 43
29113: PPUSH
29114: LD_VAR 0 5
29118: PPUSH
29119: LD_INT 0
29121: PPUSH
29122: CALL_OW 1
29126: ST_TO_ADDR
// end ; end ;
29127: PPOPN 5
29129: END
// function CalculateCargoBayCooldown ; var val ; begin
29130: LD_INT 0
29132: PPUSH
29133: PPUSH
// result = [ 20 20$0 , 15 15$0 , 10 10$0 ] [ difficulty ] ;
29134: LD_ADDR_VAR 0 1
29138: PUSH
29139: LD_INT 42000
29141: PUSH
29142: LD_INT 31500
29144: PUSH
29145: LD_INT 21000
29147: PUSH
29148: EMPTY
29149: LIST
29150: LIST
29151: LIST
29152: PUSH
29153: LD_OWVAR 67
29157: ARRAY
29158: ST_TO_ADDR
// if deny_crates_spawned >= 30 then
29159: LD_EXP 61
29163: PUSH
29164: LD_INT 30
29166: GREATEREQUAL
29167: IFFALSE 29211
// begin val = 2.0 - 1.5 * ( deny_crates_gathered / deny_crates_spawned ) ;
29169: LD_ADDR_VAR 0 2
29173: PUSH
29174: LD_REAL  2.00000000000000E+0000
29177: PUSH
29178: LD_REAL  1.50000000000000E+0000
29181: PUSH
29182: LD_EXP 62
29186: PUSH
29187: LD_EXP 61
29191: DIVREAL
29192: MUL
29193: MINUS
29194: ST_TO_ADDR
// result = result * val ;
29195: LD_ADDR_VAR 0 1
29199: PUSH
29200: LD_VAR 0 1
29204: PUSH
29205: LD_VAR 0 2
29209: MUL
29210: ST_TO_ADDR
// end ; end ;
29211: LD_VAR 0 1
29215: RET
// every 0 0$1 do var side , i , temp_value , base , temp_list , attack_hexes , temp_unit , temp_list_2 , k , turn , attacking_units ; var center_hex , center_dist , attacking_scientists , attacking_soldiers , area , x , y ; var human_dist , vehicle_dist , human_at_strat_after_4 , dist_changed ; var temp_hex ;
29216: GO 29218
29218: DISABLE
29219: LD_INT 0
29221: PPUSH
29222: PPUSH
29223: PPUSH
29224: PPUSH
29225: PPUSH
29226: PPUSH
29227: PPUSH
29228: PPUSH
29229: PPUSH
29230: PPUSH
29231: PPUSH
29232: PPUSH
29233: PPUSH
29234: PPUSH
29235: PPUSH
29236: PPUSH
29237: PPUSH
29238: PPUSH
29239: PPUSH
29240: PPUSH
29241: PPUSH
29242: PPUSH
29243: PPUSH
// begin side = russians ;
29244: LD_ADDR_VAR 0 1
29248: PUSH
29249: LD_EXP 3
29253: ST_TO_ADDR
// human_dist = 3 ;
29254: LD_ADDR_VAR 0 19
29258: PUSH
29259: LD_INT 3
29261: ST_TO_ADDR
// vehicle_dist = 6 ;
29262: LD_ADDR_VAR 0 20
29266: PUSH
29267: LD_INT 6
29269: ST_TO_ADDR
// human_at_strat_after_4 = 0 ;
29270: LD_ADDR_VAR 0 21
29274: PUSH
29275: LD_INT 0
29277: ST_TO_ADDR
// dist_changed = false ;
29278: LD_ADDR_VAR 0 22
29282: PUSH
29283: LD_INT 0
29285: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
29286: LD_INT 35
29288: PPUSH
29289: CALL_OW 67
// if final_battle_begin and not dist_changed then
29293: LD_EXP 69
29297: PUSH
29298: LD_VAR 0 22
29302: NOT
29303: AND
29304: IFFALSE 29322
// begin dist_changed = true ;
29306: LD_ADDR_VAR 0 22
29310: PUSH
29311: LD_INT 1
29313: ST_TO_ADDR
// human_dist = 7 ;
29314: LD_ADDR_VAR 0 19
29318: PUSH
29319: LD_INT 7
29321: ST_TO_ADDR
// end ; for base in ai_bases do
29322: LD_ADDR_VAR 0 4
29326: PUSH
29327: LD_EXP 40
29331: PUSH
29332: FOR_IN
29333: IFFALSE 32883
// for turn = 1 to 2 do
29335: LD_ADDR_VAR 0 10
29339: PUSH
29340: DOUBLE
29341: LD_INT 1
29343: DEC
29344: ST_TO_ADDR
29345: LD_INT 2
29347: PUSH
29348: FOR_TO
29349: IFFALSE 32879
// begin case turn of 1 :
29351: LD_VAR 0 10
29355: PUSH
29356: LD_INT 1
29358: DOUBLE
29359: EQUAL
29360: IFTRUE 29364
29362: GO 29716
29364: POP
// begin if UnitFilter ( ai_vehicles_attack [ base ] , [ f_ok ] ) = 0 then
29365: LD_EXP 23
29369: PUSH
29370: LD_VAR 0 4
29374: ARRAY
29375: PPUSH
29376: LD_INT 50
29378: PUSH
29379: EMPTY
29380: LIST
29381: PPUSH
29382: CALL_OW 72
29386: PUSH
29387: LD_INT 0
29389: EQUAL
29390: IFFALSE 29394
// continue ;
29392: GO 29348
// if vehicle_attack_strategy = 2 then
29394: LD_EXP 51
29398: PUSH
29399: LD_INT 2
29401: EQUAL
29402: IFFALSE 29512
// attack_hexes = [ [ 53 , 58 ] , [ 69 , 85 ] , [ 77 , 96 ] , [ 95 , 118 ] , [ 108 , 132 ] , [ 89 , 124 ] , [ 78 , 101 ] , [ 70 , 84 ] , [ 53 , 58 ] ] else
29404: LD_ADDR_VAR 0 6
29408: PUSH
29409: LD_INT 53
29411: PUSH
29412: LD_INT 58
29414: PUSH
29415: EMPTY
29416: LIST
29417: LIST
29418: PUSH
29419: LD_INT 69
29421: PUSH
29422: LD_INT 85
29424: PUSH
29425: EMPTY
29426: LIST
29427: LIST
29428: PUSH
29429: LD_INT 77
29431: PUSH
29432: LD_INT 96
29434: PUSH
29435: EMPTY
29436: LIST
29437: LIST
29438: PUSH
29439: LD_INT 95
29441: PUSH
29442: LD_INT 118
29444: PUSH
29445: EMPTY
29446: LIST
29447: LIST
29448: PUSH
29449: LD_INT 108
29451: PUSH
29452: LD_INT 132
29454: PUSH
29455: EMPTY
29456: LIST
29457: LIST
29458: PUSH
29459: LD_INT 89
29461: PUSH
29462: LD_INT 124
29464: PUSH
29465: EMPTY
29466: LIST
29467: LIST
29468: PUSH
29469: LD_INT 78
29471: PUSH
29472: LD_INT 101
29474: PUSH
29475: EMPTY
29476: LIST
29477: LIST
29478: PUSH
29479: LD_INT 70
29481: PUSH
29482: LD_INT 84
29484: PUSH
29485: EMPTY
29486: LIST
29487: LIST
29488: PUSH
29489: LD_INT 53
29491: PUSH
29492: LD_INT 58
29494: PUSH
29495: EMPTY
29496: LIST
29497: LIST
29498: PUSH
29499: EMPTY
29500: LIST
29501: LIST
29502: LIST
29503: LIST
29504: LIST
29505: LIST
29506: LIST
29507: LIST
29508: LIST
29509: ST_TO_ADDR
29510: GO 29519
// attack_hexes = [ ] ;
29512: LD_ADDR_VAR 0 6
29516: PUSH
29517: EMPTY
29518: ST_TO_ADDR
// attack_hexes = attack_hexes ^ [ [ 39 , 36 ] , [ 36 , 25 ] , [ 38 , 16 ] , [ 44 , 15 ] , [ 51 , 15 ] , [ 70 , 15 ] , [ 88 , 15 ] , [ 95 , 15 ] ] ;
29519: LD_ADDR_VAR 0 6
29523: PUSH
29524: LD_VAR 0 6
29528: PUSH
29529: LD_INT 39
29531: PUSH
29532: LD_INT 36
29534: PUSH
29535: EMPTY
29536: LIST
29537: LIST
29538: PUSH
29539: LD_INT 36
29541: PUSH
29542: LD_INT 25
29544: PUSH
29545: EMPTY
29546: LIST
29547: LIST
29548: PUSH
29549: LD_INT 38
29551: PUSH
29552: LD_INT 16
29554: PUSH
29555: EMPTY
29556: LIST
29557: LIST
29558: PUSH
29559: LD_INT 44
29561: PUSH
29562: LD_INT 15
29564: PUSH
29565: EMPTY
29566: LIST
29567: LIST
29568: PUSH
29569: LD_INT 51
29571: PUSH
29572: LD_INT 15
29574: PUSH
29575: EMPTY
29576: LIST
29577: LIST
29578: PUSH
29579: LD_INT 70
29581: PUSH
29582: LD_INT 15
29584: PUSH
29585: EMPTY
29586: LIST
29587: LIST
29588: PUSH
29589: LD_INT 88
29591: PUSH
29592: LD_INT 15
29594: PUSH
29595: EMPTY
29596: LIST
29597: LIST
29598: PUSH
29599: LD_INT 95
29601: PUSH
29602: LD_INT 15
29604: PUSH
29605: EMPTY
29606: LIST
29607: LIST
29608: PUSH
29609: EMPTY
29610: LIST
29611: LIST
29612: LIST
29613: LIST
29614: LIST
29615: LIST
29616: LIST
29617: LIST
29618: ADD
29619: ST_TO_ADDR
// attacking_units = ai_vehicles_attack [ base ] ;
29620: LD_ADDR_VAR 0 11
29624: PUSH
29625: LD_EXP 23
29629: PUSH
29630: LD_VAR 0 4
29634: ARRAY
29635: ST_TO_ADDR
// for i in attacking_units do
29636: LD_ADDR_VAR 0 2
29640: PUSH
29641: LD_VAR 0 11
29645: PUSH
29646: FOR_IN
29647: IFFALSE 29712
// if gettag ( i ) = 0 then
29649: LD_VAR 0 2
29653: PPUSH
29654: CALL_OW 110
29658: PUSH
29659: LD_INT 0
29661: EQUAL
29662: IFFALSE 29710
// settag ( i , [ 4 , 0 , - 4 , - 8 , - 12 ] [ rand ( 1 , 5 ) ] ) ;
29664: LD_VAR 0 2
29668: PPUSH
29669: LD_INT 4
29671: PUSH
29672: LD_INT 0
29674: PUSH
29675: LD_INT 4
29677: NEG
29678: PUSH
29679: LD_INT 8
29681: NEG
29682: PUSH
29683: LD_INT 12
29685: NEG
29686: PUSH
29687: EMPTY
29688: LIST
29689: LIST
29690: LIST
29691: LIST
29692: LIST
29693: PUSH
29694: LD_INT 1
29696: PPUSH
29697: LD_INT 5
29699: PPUSH
29700: CALL_OW 12
29704: ARRAY
29705: PPUSH
29706: CALL_OW 109
29710: GO 29646
29712: POP
29713: POP
// end ; 2 :
29714: GO 31543
29716: LD_INT 2
29718: DOUBLE
29719: EQUAL
29720: IFTRUE 29724
29722: GO 31542
29724: POP
// begin if UnitFilter ( ai_attacking_soldiers [ base ] ^ ai_attacking_scientists [ base ] , [ f_ok ] ) = 0 then
29725: LD_EXP 45
29729: PUSH
29730: LD_VAR 0 4
29734: ARRAY
29735: PUSH
29736: LD_EXP 46
29740: PUSH
29741: LD_VAR 0 4
29745: ARRAY
29746: ADD
29747: PPUSH
29748: LD_INT 50
29750: PUSH
29751: EMPTY
29752: LIST
29753: PPUSH
29754: CALL_OW 72
29758: PUSH
29759: LD_INT 0
29761: EQUAL
29762: IFFALSE 29782
// begin human_at_strat_after_4 = Rand ( 1 , 3 ) ;
29764: LD_ADDR_VAR 0 21
29768: PUSH
29769: LD_INT 1
29771: PPUSH
29772: LD_INT 3
29774: PPUSH
29775: CALL_OW 12
29779: ST_TO_ADDR
// continue ;
29780: GO 29348
// end ; if human_attack_strategy = 4 then
29782: LD_EXP 50
29786: PUSH
29787: LD_INT 4
29789: EQUAL
29790: IFFALSE 29943
// begin attack_hexes = [ [ 69 , 55 ] , [ 88 , 68 ] , [ 96 , 82 ] , [ 102 , 94 ] , [ 99 , 105 ] , [ 107 , 117 ] , [ 116 , 131 ] , [ 108 , 113 ] , [ 102 , 94 ] , [ 96 , 82 ] , [ 88 , 68 ] , [ 85 , 50 ] ] ;
29792: LD_ADDR_VAR 0 6
29796: PUSH
29797: LD_INT 69
29799: PUSH
29800: LD_INT 55
29802: PUSH
29803: EMPTY
29804: LIST
29805: LIST
29806: PUSH
29807: LD_INT 88
29809: PUSH
29810: LD_INT 68
29812: PUSH
29813: EMPTY
29814: LIST
29815: LIST
29816: PUSH
29817: LD_INT 96
29819: PUSH
29820: LD_INT 82
29822: PUSH
29823: EMPTY
29824: LIST
29825: LIST
29826: PUSH
29827: LD_INT 102
29829: PUSH
29830: LD_INT 94
29832: PUSH
29833: EMPTY
29834: LIST
29835: LIST
29836: PUSH
29837: LD_INT 99
29839: PUSH
29840: LD_INT 105
29842: PUSH
29843: EMPTY
29844: LIST
29845: LIST
29846: PUSH
29847: LD_INT 107
29849: PUSH
29850: LD_INT 117
29852: PUSH
29853: EMPTY
29854: LIST
29855: LIST
29856: PUSH
29857: LD_INT 116
29859: PUSH
29860: LD_INT 131
29862: PUSH
29863: EMPTY
29864: LIST
29865: LIST
29866: PUSH
29867: LD_INT 108
29869: PUSH
29870: LD_INT 113
29872: PUSH
29873: EMPTY
29874: LIST
29875: LIST
29876: PUSH
29877: LD_INT 102
29879: PUSH
29880: LD_INT 94
29882: PUSH
29883: EMPTY
29884: LIST
29885: LIST
29886: PUSH
29887: LD_INT 96
29889: PUSH
29890: LD_INT 82
29892: PUSH
29893: EMPTY
29894: LIST
29895: LIST
29896: PUSH
29897: LD_INT 88
29899: PUSH
29900: LD_INT 68
29902: PUSH
29903: EMPTY
29904: LIST
29905: LIST
29906: PUSH
29907: LD_INT 85
29909: PUSH
29910: LD_INT 50
29912: PUSH
29913: EMPTY
29914: LIST
29915: LIST
29916: PUSH
29917: EMPTY
29918: LIST
29919: LIST
29920: LIST
29921: LIST
29922: LIST
29923: LIST
29924: LIST
29925: LIST
29926: LIST
29927: LIST
29928: LIST
29929: LIST
29930: ST_TO_ADDR
// temp_value = human_at_strat_after_4 ;
29931: LD_ADDR_VAR 0 3
29935: PUSH
29936: LD_VAR 0 21
29940: ST_TO_ADDR
// end else
29941: GO 29993
// begin attack_hexes = [ [ 69 , 55 ] , [ 76 , 49 ] , [ 85 , 50 ] ] ;
29943: LD_ADDR_VAR 0 6
29947: PUSH
29948: LD_INT 69
29950: PUSH
29951: LD_INT 55
29953: PUSH
29954: EMPTY
29955: LIST
29956: LIST
29957: PUSH
29958: LD_INT 76
29960: PUSH
29961: LD_INT 49
29963: PUSH
29964: EMPTY
29965: LIST
29966: LIST
29967: PUSH
29968: LD_INT 85
29970: PUSH
29971: LD_INT 50
29973: PUSH
29974: EMPTY
29975: LIST
29976: LIST
29977: PUSH
29978: EMPTY
29979: LIST
29980: LIST
29981: LIST
29982: ST_TO_ADDR
// temp_value = human_attack_strategy ;
29983: LD_ADDR_VAR 0 3
29987: PUSH
29988: LD_EXP 50
29992: ST_TO_ADDR
// end ; case temp_value of 1 :
29993: LD_VAR 0 3
29997: PUSH
29998: LD_INT 1
30000: DOUBLE
30001: EQUAL
30002: IFTRUE 30006
30004: GO 30044
30006: POP
// attack_hexes = attack_hexes ^ [ [ 83 , 37 ] , [ 77 , 20 ] ] ; 2 :
30007: LD_ADDR_VAR 0 6
30011: PUSH
30012: LD_VAR 0 6
30016: PUSH
30017: LD_INT 83
30019: PUSH
30020: LD_INT 37
30022: PUSH
30023: EMPTY
30024: LIST
30025: LIST
30026: PUSH
30027: LD_INT 77
30029: PUSH
30030: LD_INT 20
30032: PUSH
30033: EMPTY
30034: LIST
30035: LIST
30036: PUSH
30037: EMPTY
30038: LIST
30039: LIST
30040: ADD
30041: ST_TO_ADDR
30042: GO 30192
30044: LD_INT 2
30046: DOUBLE
30047: EQUAL
30048: IFTRUE 30052
30050: GO 30112
30052: POP
// attack_hexes = attack_hexes ^ [ [ 93 , 49 ] , [ 98 , 46 ] , [ 94 , 37 ] , [ 89 , 20 ] ] ; 3 :
30053: LD_ADDR_VAR 0 6
30057: PUSH
30058: LD_VAR 0 6
30062: PUSH
30063: LD_INT 93
30065: PUSH
30066: LD_INT 49
30068: PUSH
30069: EMPTY
30070: LIST
30071: LIST
30072: PUSH
30073: LD_INT 98
30075: PUSH
30076: LD_INT 46
30078: PUSH
30079: EMPTY
30080: LIST
30081: LIST
30082: PUSH
30083: LD_INT 94
30085: PUSH
30086: LD_INT 37
30088: PUSH
30089: EMPTY
30090: LIST
30091: LIST
30092: PUSH
30093: LD_INT 89
30095: PUSH
30096: LD_INT 20
30098: PUSH
30099: EMPTY
30100: LIST
30101: LIST
30102: PUSH
30103: EMPTY
30104: LIST
30105: LIST
30106: LIST
30107: LIST
30108: ADD
30109: ST_TO_ADDR
30110: GO 30192
30112: LD_INT 3
30114: DOUBLE
30115: EQUAL
30116: IFTRUE 30120
30118: GO 30191
30120: POP
// attack_hexes = attack_hexes ^ [ [ 93 , 49 ] , [ 103 , 50 ] , [ 112 , 51 ] , [ 110 , 42 ] , [ 100 , 21 ] ] ; end ;
30121: LD_ADDR_VAR 0 6
30125: PUSH
30126: LD_VAR 0 6
30130: PUSH
30131: LD_INT 93
30133: PUSH
30134: LD_INT 49
30136: PUSH
30137: EMPTY
30138: LIST
30139: LIST
30140: PUSH
30141: LD_INT 103
30143: PUSH
30144: LD_INT 50
30146: PUSH
30147: EMPTY
30148: LIST
30149: LIST
30150: PUSH
30151: LD_INT 112
30153: PUSH
30154: LD_INT 51
30156: PUSH
30157: EMPTY
30158: LIST
30159: LIST
30160: PUSH
30161: LD_INT 110
30163: PUSH
30164: LD_INT 42
30166: PUSH
30167: EMPTY
30168: LIST
30169: LIST
30170: PUSH
30171: LD_INT 100
30173: PUSH
30174: LD_INT 21
30176: PUSH
30177: EMPTY
30178: LIST
30179: LIST
30180: PUSH
30181: EMPTY
30182: LIST
30183: LIST
30184: LIST
30185: LIST
30186: LIST
30187: ADD
30188: ST_TO_ADDR
30189: GO 30192
30191: POP
// attack_hexes = attack_hexes ^ [ [ 87 , 11 ] ] ;
30192: LD_ADDR_VAR 0 6
30196: PUSH
30197: LD_VAR 0 6
30201: PUSH
30202: LD_INT 87
30204: PUSH
30205: LD_INT 11
30207: PUSH
30208: EMPTY
30209: LIST
30210: LIST
30211: PUSH
30212: EMPTY
30213: LIST
30214: ADD
30215: ST_TO_ADDR
// case base of 1 :
30216: LD_VAR 0 4
30220: PUSH
30221: LD_INT 1
30223: DOUBLE
30224: EQUAL
30225: IFTRUE 30229
30227: GO 30240
30229: POP
// area = rubase1 ; 2 :
30230: LD_ADDR_VAR 0 16
30234: PUSH
30235: LD_INT 1
30237: ST_TO_ADDR
30238: GO 30260
30240: LD_INT 2
30242: DOUBLE
30243: EQUAL
30244: IFTRUE 30248
30246: GO 30259
30248: POP
// area = rubase2 ; end ;
30249: LD_ADDR_VAR 0 16
30253: PUSH
30254: LD_INT 2
30256: ST_TO_ADDR
30257: GO 30260
30259: POP
// temp_list = ai_retreating_attacking_humans [ base ] ;
30260: LD_ADDR_VAR 0 5
30264: PUSH
30265: LD_EXP 48
30269: PUSH
30270: LD_VAR 0 4
30274: ARRAY
30275: ST_TO_ADDR
// for i in ( ai_attacking_soldiers [ base ] ^ ai_attacking_scientists [ base ] ) diff ai_retreating_attacking_humans [ base ] do
30276: LD_ADDR_VAR 0 2
30280: PUSH
30281: LD_EXP 45
30285: PUSH
30286: LD_VAR 0 4
30290: ARRAY
30291: PUSH
30292: LD_EXP 46
30296: PUSH
30297: LD_VAR 0 4
30301: ARRAY
30302: ADD
30303: PUSH
30304: LD_EXP 48
30308: PUSH
30309: LD_VAR 0 4
30313: ARRAY
30314: DIFF
30315: PUSH
30316: FOR_IN
30317: IFFALSE 30424
// if GetLives ( i ) <= 500 then
30319: LD_VAR 0 2
30323: PPUSH
30324: CALL_OW 256
30328: PUSH
30329: LD_INT 500
30331: LESSEQUAL
30332: IFFALSE 30422
// begin temp_list = temp_list ^ i ;
30334: LD_ADDR_VAR 0 5
30338: PUSH
30339: LD_VAR 0 5
30343: PUSH
30344: LD_VAR 0 2
30348: ADD
30349: ST_TO_ADDR
// temp_list_2 = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] - 1 ) ;
30350: LD_ADDR_VAR 0 8
30354: PUSH
30355: LD_EXP 47
30359: PUSH
30360: LD_VAR 0 4
30364: ARRAY
30365: PPUSH
30366: LD_VAR 0 2
30370: PPUSH
30371: LD_EXP 47
30375: PUSH
30376: LD_VAR 0 4
30380: ARRAY
30381: PUSH
30382: LD_VAR 0 2
30386: ARRAY
30387: PUSH
30388: LD_INT 1
30390: MINUS
30391: PPUSH
30392: CALL_OW 1
30396: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list_2 ) ;
30397: LD_ADDR_EXP 47
30401: PUSH
30402: LD_EXP 47
30406: PPUSH
30407: LD_VAR 0 4
30411: PPUSH
30412: LD_VAR 0 8
30416: PPUSH
30417: CALL_OW 1
30421: ST_TO_ADDR
// end ;
30422: GO 30316
30424: POP
30425: POP
// ai_retreating_attacking_humans = Replace ( ai_retreating_attacking_humans , base , temp_list ) ;
30426: LD_ADDR_EXP 48
30430: PUSH
30431: LD_EXP 48
30435: PPUSH
30436: LD_VAR 0 4
30440: PPUSH
30441: LD_VAR 0 5
30445: PPUSH
30446: CALL_OW 1
30450: ST_TO_ADDR
// for i in ai_retreating_attacking_humans [ base ] do
30451: LD_ADDR_VAR 0 2
30455: PUSH
30456: LD_EXP 48
30460: PUSH
30461: LD_VAR 0 4
30465: ARRAY
30466: PUSH
30467: FOR_IN
30468: IFFALSE 31009
// if IsInArea ( i , area ) then
30470: LD_VAR 0 2
30474: PPUSH
30475: LD_VAR 0 16
30479: PPUSH
30480: CALL_OW 308
30484: IFFALSE 30761
// begin if i in ai_attacking_soldiers [ base ] then
30486: LD_VAR 0 2
30490: PUSH
30491: LD_EXP 45
30495: PUSH
30496: LD_VAR 0 4
30500: ARRAY
30501: IN
30502: IFFALSE 30600
// begin temp_list_2 = ai_attacking_soldiers [ base ] diff i ;
30504: LD_ADDR_VAR 0 8
30508: PUSH
30509: LD_EXP 45
30513: PUSH
30514: LD_VAR 0 4
30518: ARRAY
30519: PUSH
30520: LD_VAR 0 2
30524: DIFF
30525: ST_TO_ADDR
// ai_attacking_soldiers = Replace ( ai_attacking_soldiers , base , temp_list_2 ) ;
30526: LD_ADDR_EXP 45
30530: PUSH
30531: LD_EXP 45
30535: PPUSH
30536: LD_VAR 0 4
30540: PPUSH
30541: LD_VAR 0 8
30545: PPUSH
30546: CALL_OW 1
30550: ST_TO_ADDR
// temp_list = ai_soldiers [ base ] ^ i ;
30551: LD_ADDR_VAR 0 5
30555: PUSH
30556: LD_EXP 13
30560: PUSH
30561: LD_VAR 0 4
30565: ARRAY
30566: PUSH
30567: LD_VAR 0 2
30571: ADD
30572: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
30573: LD_ADDR_EXP 13
30577: PUSH
30578: LD_EXP 13
30582: PPUSH
30583: LD_VAR 0 4
30587: PPUSH
30588: LD_VAR 0 5
30592: PPUSH
30593: CALL_OW 1
30597: ST_TO_ADDR
// end else
30598: GO 30712
// if i in ai_attacking_scientists [ base ] then
30600: LD_VAR 0 2
30604: PUSH
30605: LD_EXP 46
30609: PUSH
30610: LD_VAR 0 4
30614: ARRAY
30615: IN
30616: IFFALSE 30712
// begin temp_list_2 = ai_attacking_scientists [ base ] diff i ;
30618: LD_ADDR_VAR 0 8
30622: PUSH
30623: LD_EXP 46
30627: PUSH
30628: LD_VAR 0 4
30632: ARRAY
30633: PUSH
30634: LD_VAR 0 2
30638: DIFF
30639: ST_TO_ADDR
// ai_attacking_scientists = Replace ( ai_attacking_scientists , base , temp_list_2 ) ;
30640: LD_ADDR_EXP 46
30644: PUSH
30645: LD_EXP 46
30649: PPUSH
30650: LD_VAR 0 4
30654: PPUSH
30655: LD_VAR 0 8
30659: PPUSH
30660: CALL_OW 1
30664: ST_TO_ADDR
// temp_list = ai_scientists [ base ] ^ i ;
30665: LD_ADDR_VAR 0 5
30669: PUSH
30670: LD_EXP 16
30674: PUSH
30675: LD_VAR 0 4
30679: ARRAY
30680: PUSH
30681: LD_VAR 0 2
30685: ADD
30686: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , temp_list ) ;
30687: LD_ADDR_EXP 16
30691: PUSH
30692: LD_EXP 16
30696: PPUSH
30697: LD_VAR 0 4
30701: PPUSH
30702: LD_VAR 0 5
30706: PPUSH
30707: CALL_OW 1
30711: ST_TO_ADDR
// end ; temp_list_2 = ai_retreating_attacking_humans [ base ] diff i ;
30712: LD_ADDR_VAR 0 8
30716: PUSH
30717: LD_EXP 48
30721: PUSH
30722: LD_VAR 0 4
30726: ARRAY
30727: PUSH
30728: LD_VAR 0 2
30732: DIFF
30733: ST_TO_ADDR
// ai_retreating_attacking_humans = Replace ( ai_retreating_attacking_humans , base , temp_list_2 ) ;
30734: LD_ADDR_EXP 48
30738: PUSH
30739: LD_EXP 48
30743: PPUSH
30744: LD_VAR 0 4
30748: PPUSH
30749: LD_VAR 0 8
30753: PPUSH
30754: CALL_OW 1
30758: ST_TO_ADDR
// end else
30759: GO 31007
// begin if ai_attacking_unit_hex_index [ base ] [ i ] = 0 then
30761: LD_EXP 47
30765: PUSH
30766: LD_VAR 0 4
30770: ARRAY
30771: PUSH
30772: LD_VAR 0 2
30776: ARRAY
30777: PUSH
30778: LD_INT 0
30780: EQUAL
30781: IFFALSE 30799
// ComMoveToArea ( i , area ) else
30783: LD_VAR 0 2
30787: PPUSH
30788: LD_VAR 0 16
30792: PPUSH
30793: CALL_OW 113
30797: GO 31007
// if GetDistUnitXY ( i , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) > human_dist then
30799: LD_VAR 0 2
30803: PPUSH
30804: LD_VAR 0 6
30808: PUSH
30809: LD_EXP 47
30813: PUSH
30814: LD_VAR 0 4
30818: ARRAY
30819: PUSH
30820: LD_VAR 0 2
30824: ARRAY
30825: ARRAY
30826: PUSH
30827: LD_INT 1
30829: ARRAY
30830: PPUSH
30831: LD_VAR 0 6
30835: PUSH
30836: LD_EXP 47
30840: PUSH
30841: LD_VAR 0 4
30845: ARRAY
30846: PUSH
30847: LD_VAR 0 2
30851: ARRAY
30852: ARRAY
30853: PUSH
30854: LD_INT 2
30856: ARRAY
30857: PPUSH
30858: CALL_OW 297
30862: PUSH
30863: LD_VAR 0 19
30867: GREATER
30868: IFFALSE 30935
// ComMoveXY ( i , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) else
30870: LD_VAR 0 2
30874: PPUSH
30875: LD_VAR 0 6
30879: PUSH
30880: LD_EXP 47
30884: PUSH
30885: LD_VAR 0 4
30889: ARRAY
30890: PUSH
30891: LD_VAR 0 2
30895: ARRAY
30896: ARRAY
30897: PUSH
30898: LD_INT 1
30900: ARRAY
30901: PPUSH
30902: LD_VAR 0 6
30906: PUSH
30907: LD_EXP 47
30911: PUSH
30912: LD_VAR 0 4
30916: ARRAY
30917: PUSH
30918: LD_VAR 0 2
30922: ARRAY
30923: ARRAY
30924: PUSH
30925: LD_INT 2
30927: ARRAY
30928: PPUSH
30929: CALL_OW 111
30933: GO 31007
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] - 1 ) ;
30935: LD_ADDR_VAR 0 5
30939: PUSH
30940: LD_EXP 47
30944: PUSH
30945: LD_VAR 0 4
30949: ARRAY
30950: PPUSH
30951: LD_VAR 0 2
30955: PPUSH
30956: LD_EXP 47
30960: PUSH
30961: LD_VAR 0 4
30965: ARRAY
30966: PUSH
30967: LD_VAR 0 2
30971: ARRAY
30972: PUSH
30973: LD_INT 1
30975: MINUS
30976: PPUSH
30977: CALL_OW 1
30981: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
30982: LD_ADDR_EXP 47
30986: PUSH
30987: LD_EXP 47
30991: PPUSH
30992: LD_VAR 0 4
30996: PPUSH
30997: LD_VAR 0 5
31001: PPUSH
31002: CALL_OW 1
31006: ST_TO_ADDR
// end ; end ;
31007: GO 30467
31009: POP
31010: POP
// attacking_soldiers = ai_attacking_soldiers [ base ] diff ai_retreating_attacking_humans [ base ] ;
31011: LD_ADDR_VAR 0 15
31015: PUSH
31016: LD_EXP 45
31020: PUSH
31021: LD_VAR 0 4
31025: ARRAY
31026: PUSH
31027: LD_EXP 48
31031: PUSH
31032: LD_VAR 0 4
31036: ARRAY
31037: DIFF
31038: ST_TO_ADDR
// attacking_scientists = ai_attacking_scientists [ base ] diff ai_retreating_attacking_humans [ base ] ;
31039: LD_ADDR_VAR 0 14
31043: PUSH
31044: LD_EXP 46
31048: PUSH
31049: LD_VAR 0 4
31053: ARRAY
31054: PUSH
31055: LD_EXP 48
31059: PUSH
31060: LD_VAR 0 4
31064: ARRAY
31065: DIFF
31066: ST_TO_ADDR
// if attacking_scientists > 0 then
31067: LD_VAR 0 14
31071: PUSH
31072: LD_INT 0
31074: GREATER
31075: IFFALSE 31530
// if attacking_soldiers = 0 then
31077: LD_VAR 0 15
31081: PUSH
31082: LD_INT 0
31084: EQUAL
31085: IFFALSE 31232
// begin temp_list = ai_retreating_attacking_humans [ base ] ^ attacking_scientists ;
31087: LD_ADDR_VAR 0 5
31091: PUSH
31092: LD_EXP 48
31096: PUSH
31097: LD_VAR 0 4
31101: ARRAY
31102: PUSH
31103: LD_VAR 0 14
31107: ADD
31108: ST_TO_ADDR
// ai_retreating_attacking_humans = Replace ( ai_retreating_attacking_humans , base , temp_list ) ;
31109: LD_ADDR_EXP 48
31113: PUSH
31114: LD_EXP 48
31118: PPUSH
31119: LD_VAR 0 4
31123: PPUSH
31124: LD_VAR 0 5
31128: PPUSH
31129: CALL_OW 1
31133: ST_TO_ADDR
// for i in attacking_scientists do
31134: LD_ADDR_VAR 0 2
31138: PUSH
31139: LD_VAR 0 14
31143: PUSH
31144: FOR_IN
31145: IFFALSE 31221
// begin temp_list_2 = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] - 1 ) ;
31147: LD_ADDR_VAR 0 8
31151: PUSH
31152: LD_EXP 47
31156: PUSH
31157: LD_VAR 0 4
31161: ARRAY
31162: PPUSH
31163: LD_VAR 0 2
31167: PPUSH
31168: LD_EXP 47
31172: PUSH
31173: LD_VAR 0 4
31177: ARRAY
31178: PUSH
31179: LD_VAR 0 2
31183: ARRAY
31184: PUSH
31185: LD_INT 1
31187: MINUS
31188: PPUSH
31189: CALL_OW 1
31193: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list_2 ) ;
31194: LD_ADDR_EXP 47
31198: PUSH
31199: LD_EXP 47
31203: PPUSH
31204: LD_VAR 0 4
31208: PPUSH
31209: LD_VAR 0 8
31213: PPUSH
31214: CALL_OW 1
31218: ST_TO_ADDR
// end ;
31219: GO 31144
31221: POP
31222: POP
// attacking_scientists = [ ] ;
31223: LD_ADDR_VAR 0 14
31227: PUSH
31228: EMPTY
31229: ST_TO_ADDR
// end else
31230: GO 31530
// begin x = 0 ;
31232: LD_ADDR_VAR 0 17
31236: PUSH
31237: LD_INT 0
31239: ST_TO_ADDR
// y = 0 ;
31240: LD_ADDR_VAR 0 18
31244: PUSH
31245: LD_INT 0
31247: ST_TO_ADDR
// for i in attacking_soldiers do
31248: LD_ADDR_VAR 0 2
31252: PUSH
31253: LD_VAR 0 15
31257: PUSH
31258: FOR_IN
31259: IFFALSE 31305
// begin x = x + GetX ( i ) ;
31261: LD_ADDR_VAR 0 17
31265: PUSH
31266: LD_VAR 0 17
31270: PUSH
31271: LD_VAR 0 2
31275: PPUSH
31276: CALL_OW 250
31280: PLUS
31281: ST_TO_ADDR
// y = y + GetY ( i ) ;
31282: LD_ADDR_VAR 0 18
31286: PUSH
31287: LD_VAR 0 18
31291: PUSH
31292: LD_VAR 0 2
31296: PPUSH
31297: CALL_OW 251
31301: PLUS
31302: ST_TO_ADDR
// end ;
31303: GO 31258
31305: POP
31306: POP
// x = x div attacking_soldiers ;
31307: LD_ADDR_VAR 0 17
31311: PUSH
31312: LD_VAR 0 17
31316: PUSH
31317: LD_VAR 0 15
31321: DIV
31322: ST_TO_ADDR
// y = y div attacking_soldiers ;
31323: LD_ADDR_VAR 0 18
31327: PUSH
31328: LD_VAR 0 18
31332: PUSH
31333: LD_VAR 0 15
31337: DIV
31338: ST_TO_ADDR
// temp_value = 0 ;
31339: LD_ADDR_VAR 0 3
31343: PUSH
31344: LD_INT 0
31346: ST_TO_ADDR
// for i in attacking_soldiers do
31347: LD_ADDR_VAR 0 2
31351: PUSH
31352: LD_VAR 0 15
31356: PUSH
31357: FOR_IN
31358: IFFALSE 31409
// begin k = GetDistUnitXY ( i , x , y ) ;
31360: LD_ADDR_VAR 0 9
31364: PUSH
31365: LD_VAR 0 2
31369: PPUSH
31370: LD_VAR 0 17
31374: PPUSH
31375: LD_VAR 0 18
31379: PPUSH
31380: CALL_OW 297
31384: ST_TO_ADDR
// if k > temp_value then
31385: LD_VAR 0 9
31389: PUSH
31390: LD_VAR 0 3
31394: GREATER
31395: IFFALSE 31407
// temp_value = k ;
31397: LD_ADDR_VAR 0 3
31401: PUSH
31402: LD_VAR 0 9
31406: ST_TO_ADDR
// end ;
31407: GO 31357
31409: POP
31410: POP
// for i in attacking_scientists do
31411: LD_ADDR_VAR 0 2
31415: PUSH
31416: LD_VAR 0 14
31420: PUSH
31421: FOR_IN
31422: IFFALSE 31528
// if GetDistUnitXY ( i , x , y ) > temp_value then
31424: LD_VAR 0 2
31428: PPUSH
31429: LD_VAR 0 17
31433: PPUSH
31434: LD_VAR 0 18
31438: PPUSH
31439: CALL_OW 297
31443: PUSH
31444: LD_VAR 0 3
31448: GREATER
31449: IFFALSE 31526
// case GetType ( IsInUnit ( i ) ) of unit_building :
31451: LD_VAR 0 2
31455: PPUSH
31456: CALL_OW 310
31460: PPUSH
31461: CALL_OW 247
31465: PUSH
31466: LD_INT 3
31468: DOUBLE
31469: EQUAL
31470: IFTRUE 31474
31472: GO 31486
31474: POP
// ComExitBuilding ( i ) ; unit_vehicle :
31475: LD_VAR 0 2
31479: PPUSH
31480: CALL_OW 122
31484: GO 31526
31486: LD_INT 2
31488: DOUBLE
31489: EQUAL
31490: IFTRUE 31494
31492: GO 31506
31494: POP
// ComExitVehicle ( i ) ; else
31495: LD_VAR 0 2
31499: PPUSH
31500: CALL_OW 121
31504: GO 31526
31506: POP
// ComMoveXY ( i , x , y ) ; end ;
31507: LD_VAR 0 2
31511: PPUSH
31512: LD_VAR 0 17
31516: PPUSH
31517: LD_VAR 0 18
31521: PPUSH
31522: CALL_OW 111
31526: GO 31421
31528: POP
31529: POP
// end ; attacking_units = attacking_soldiers ;
31530: LD_ADDR_VAR 0 11
31534: PUSH
31535: LD_VAR 0 15
31539: ST_TO_ADDR
// end ; end ;
31540: GO 31543
31542: POP
// if turn = 2 then
31543: LD_VAR 0 10
31547: PUSH
31548: LD_INT 2
31550: EQUAL
31551: IFFALSE 31796
// begin temp_value = true ;
31553: LD_ADDR_VAR 0 3
31557: PUSH
31558: LD_INT 1
31560: ST_TO_ADDR
// for i in attacking_soldiers do
31561: LD_ADDR_VAR 0 2
31565: PUSH
31566: LD_VAR 0 15
31570: PUSH
31571: FOR_IN
31572: IFFALSE 31693
// if ai_attacking_unit_hex_index [ base ] [ i ] < attack_hexes then
31574: LD_EXP 47
31578: PUSH
31579: LD_VAR 0 4
31583: ARRAY
31584: PUSH
31585: LD_VAR 0 2
31589: ARRAY
31590: PUSH
31591: LD_VAR 0 6
31595: LESS
31596: IFFALSE 31681
// begin if GetDistUnitXY ( i , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ) > human_dist then
31598: LD_VAR 0 2
31602: PPUSH
31603: LD_VAR 0 6
31607: PUSH
31608: LD_EXP 47
31612: PUSH
31613: LD_VAR 0 4
31617: ARRAY
31618: PUSH
31619: LD_VAR 0 2
31623: ARRAY
31624: ARRAY
31625: PUSH
31626: LD_INT 1
31628: ARRAY
31629: PPUSH
31630: LD_VAR 0 6
31634: PUSH
31635: LD_EXP 47
31639: PUSH
31640: LD_VAR 0 4
31644: ARRAY
31645: PUSH
31646: LD_VAR 0 2
31650: ARRAY
31651: ARRAY
31652: PUSH
31653: LD_INT 2
31655: ARRAY
31656: PPUSH
31657: CALL_OW 297
31661: PUSH
31662: LD_VAR 0 19
31666: GREATER
31667: IFFALSE 31679
// begin temp_value = false ;
31669: LD_ADDR_VAR 0 3
31673: PUSH
31674: LD_INT 0
31676: ST_TO_ADDR
// break ;
31677: GO 31693
// end ; end else
31679: GO 31691
// begin temp_value = false ;
31681: LD_ADDR_VAR 0 3
31685: PUSH
31686: LD_INT 0
31688: ST_TO_ADDR
// break ;
31689: GO 31693
// end ;
31691: GO 31571
31693: POP
31694: POP
// if temp_value then
31695: LD_VAR 0 3
31699: IFFALSE 31796
// for i in attacking_units ^ attacking_scientists do
31701: LD_ADDR_VAR 0 2
31705: PUSH
31706: LD_VAR 0 11
31710: PUSH
31711: LD_VAR 0 14
31715: ADD
31716: PUSH
31717: FOR_IN
31718: IFFALSE 31794
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] + 1 ) ;
31720: LD_ADDR_VAR 0 5
31724: PUSH
31725: LD_EXP 47
31729: PUSH
31730: LD_VAR 0 4
31734: ARRAY
31735: PPUSH
31736: LD_VAR 0 2
31740: PPUSH
31741: LD_EXP 47
31745: PUSH
31746: LD_VAR 0 4
31750: ARRAY
31751: PUSH
31752: LD_VAR 0 2
31756: ARRAY
31757: PUSH
31758: LD_INT 1
31760: PLUS
31761: PPUSH
31762: CALL_OW 1
31766: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
31767: LD_ADDR_EXP 47
31771: PUSH
31772: LD_EXP 47
31776: PPUSH
31777: LD_VAR 0 4
31781: PPUSH
31782: LD_VAR 0 5
31786: PPUSH
31787: CALL_OW 1
31791: ST_TO_ADDR
// end ;
31792: GO 31717
31794: POP
31795: POP
// end ; for i in attacking_units do
31796: LD_ADDR_VAR 0 2
31800: PUSH
31801: LD_VAR 0 11
31805: PUSH
31806: FOR_IN
31807: IFFALSE 32875
// begin temp_value = GetTaskList ( i ) ;
31809: LD_ADDR_VAR 0 3
31813: PUSH
31814: LD_VAR 0 2
31818: PPUSH
31819: CALL_OW 437
31823: ST_TO_ADDR
// if ai_attacking_unit_hex_index [ base ] [ i ] < attack_hexes then
31824: LD_EXP 47
31828: PUSH
31829: LD_VAR 0 4
31833: ARRAY
31834: PUSH
31835: LD_VAR 0 2
31839: ARRAY
31840: PUSH
31841: LD_VAR 0 6
31845: LESS
31846: IFFALSE 32029
// if turn = 1 and attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] = 15 then
31848: LD_VAR 0 10
31852: PUSH
31853: LD_INT 1
31855: EQUAL
31856: PUSH
31857: LD_VAR 0 6
31861: PUSH
31862: LD_EXP 47
31866: PUSH
31867: LD_VAR 0 4
31871: ARRAY
31872: PUSH
31873: LD_VAR 0 2
31877: ARRAY
31878: ARRAY
31879: PUSH
31880: LD_INT 2
31882: ARRAY
31883: PUSH
31884: LD_INT 15
31886: EQUAL
31887: AND
31888: IFFALSE 31966
// temp_hex = [ attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] + gettag ( i ) ] else
31890: LD_ADDR_VAR 0 23
31894: PUSH
31895: LD_VAR 0 6
31899: PUSH
31900: LD_EXP 47
31904: PUSH
31905: LD_VAR 0 4
31909: ARRAY
31910: PUSH
31911: LD_VAR 0 2
31915: ARRAY
31916: ARRAY
31917: PUSH
31918: LD_INT 1
31920: ARRAY
31921: PUSH
31922: LD_VAR 0 6
31926: PUSH
31927: LD_EXP 47
31931: PUSH
31932: LD_VAR 0 4
31936: ARRAY
31937: PUSH
31938: LD_VAR 0 2
31942: ARRAY
31943: ARRAY
31944: PUSH
31945: LD_INT 2
31947: ARRAY
31948: PUSH
31949: LD_VAR 0 2
31953: PPUSH
31954: CALL_OW 110
31958: PLUS
31959: PUSH
31960: EMPTY
31961: LIST
31962: LIST
31963: ST_TO_ADDR
31964: GO 32029
// temp_hex = [ attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 1 ] , attack_hexes [ ai_attacking_unit_hex_index [ base ] [ i ] ] [ 2 ] ] ;
31966: LD_ADDR_VAR 0 23
31970: PUSH
31971: LD_VAR 0 6
31975: PUSH
31976: LD_EXP 47
31980: PUSH
31981: LD_VAR 0 4
31985: ARRAY
31986: PUSH
31987: LD_VAR 0 2
31991: ARRAY
31992: ARRAY
31993: PUSH
31994: LD_INT 1
31996: ARRAY
31997: PUSH
31998: LD_VAR 0 6
32002: PUSH
32003: LD_EXP 47
32007: PUSH
32008: LD_VAR 0 4
32012: ARRAY
32013: PUSH
32014: LD_VAR 0 2
32018: ARRAY
32019: ARRAY
32020: PUSH
32021: LD_INT 2
32023: ARRAY
32024: PUSH
32025: EMPTY
32026: LIST
32027: LIST
32028: ST_TO_ADDR
// if not IsInArea ( i , player_base ) and not IsInArea ( i , rubase2scanarea ) and not final_battle_begin then
32029: LD_VAR 0 2
32033: PPUSH
32034: LD_INT 3
32036: PPUSH
32037: CALL_OW 308
32041: NOT
32042: PUSH
32043: LD_VAR 0 2
32047: PPUSH
32048: LD_INT 8
32050: PPUSH
32051: CALL_OW 308
32055: NOT
32056: AND
32057: PUSH
32058: LD_EXP 69
32062: NOT
32063: AND
32064: IFFALSE 32309
// begin if ai_attacking_unit_hex_index [ base ] [ i ] < attack_hexes then
32066: LD_EXP 47
32070: PUSH
32071: LD_VAR 0 4
32075: ARRAY
32076: PUSH
32077: LD_VAR 0 2
32081: ARRAY
32082: PUSH
32083: LD_VAR 0 6
32087: LESS
32088: IFFALSE 32307
// if GetDistUnitXY ( i , temp_hex [ 1 ] , temp_hex [ 2 ] ) > [ vehicle_dist , human_dist ] [ turn ] then
32090: LD_VAR 0 2
32094: PPUSH
32095: LD_VAR 0 23
32099: PUSH
32100: LD_INT 1
32102: ARRAY
32103: PPUSH
32104: LD_VAR 0 23
32108: PUSH
32109: LD_INT 2
32111: ARRAY
32112: PPUSH
32113: CALL_OW 297
32117: PUSH
32118: LD_VAR 0 20
32122: PUSH
32123: LD_VAR 0 19
32127: PUSH
32128: EMPTY
32129: LIST
32130: LIST
32131: PUSH
32132: LD_VAR 0 10
32136: ARRAY
32137: GREATER
32138: IFFALSE 32225
// begin case GetType ( IsInUnit ( i ) ) of unit_building :
32140: LD_VAR 0 2
32144: PPUSH
32145: CALL_OW 310
32149: PPUSH
32150: CALL_OW 247
32154: PUSH
32155: LD_INT 3
32157: DOUBLE
32158: EQUAL
32159: IFTRUE 32163
32161: GO 32175
32163: POP
// ComExitBuilding ( i ) ; unit_vehicle :
32164: LD_VAR 0 2
32168: PPUSH
32169: CALL_OW 122
32173: GO 32223
32175: LD_INT 2
32177: DOUBLE
32178: EQUAL
32179: IFTRUE 32183
32181: GO 32195
32183: POP
// ComExitVehicle ( i ) ; else
32184: LD_VAR 0 2
32188: PPUSH
32189: CALL_OW 121
32193: GO 32223
32195: POP
// ComAgressiveMove ( i , temp_hex [ 1 ] , temp_hex [ 2 ] ) ; end ;
32196: LD_VAR 0 2
32200: PPUSH
32201: LD_VAR 0 23
32205: PUSH
32206: LD_INT 1
32208: ARRAY
32209: PPUSH
32210: LD_VAR 0 23
32214: PUSH
32215: LD_INT 2
32217: ARRAY
32218: PPUSH
32219: CALL_OW 114
// end else
32223: GO 32307
// if turn = 1 then
32225: LD_VAR 0 10
32229: PUSH
32230: LD_INT 1
32232: EQUAL
32233: IFFALSE 32307
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] + 1 ) ;
32235: LD_ADDR_VAR 0 5
32239: PUSH
32240: LD_EXP 47
32244: PUSH
32245: LD_VAR 0 4
32249: ARRAY
32250: PPUSH
32251: LD_VAR 0 2
32255: PPUSH
32256: LD_EXP 47
32260: PUSH
32261: LD_VAR 0 4
32265: ARRAY
32266: PUSH
32267: LD_VAR 0 2
32271: ARRAY
32272: PUSH
32273: LD_INT 1
32275: PLUS
32276: PPUSH
32277: CALL_OW 1
32281: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
32282: LD_ADDR_EXP 47
32286: PUSH
32287: LD_EXP 47
32291: PPUSH
32292: LD_VAR 0 4
32296: PPUSH
32297: LD_VAR 0 5
32301: PPUSH
32302: CALL_OW 1
32306: ST_TO_ADDR
// end ; end else
32307: GO 32873
// begin temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_dist , i , 20 ] , [ f_see , side ] ] ) ;
32309: LD_ADDR_VAR 0 5
32313: PUSH
32314: LD_INT 81
32316: PUSH
32317: LD_VAR 0 1
32321: PUSH
32322: EMPTY
32323: LIST
32324: LIST
32325: PUSH
32326: LD_INT 21
32328: PUSH
32329: LD_INT 1
32331: PUSH
32332: EMPTY
32333: LIST
32334: LIST
32335: PUSH
32336: LD_INT 91
32338: PUSH
32339: LD_VAR 0 2
32343: PUSH
32344: LD_INT 20
32346: PUSH
32347: EMPTY
32348: LIST
32349: LIST
32350: LIST
32351: PUSH
32352: LD_INT 101
32354: PUSH
32355: LD_VAR 0 1
32359: PUSH
32360: EMPTY
32361: LIST
32362: LIST
32363: PUSH
32364: EMPTY
32365: LIST
32366: LIST
32367: LIST
32368: LIST
32369: PPUSH
32370: CALL_OW 69
32374: ST_TO_ADDR
// if final_battle_begin then
32375: LD_EXP 69
32379: IFFALSE 32397
// temp_list = temp_list diff Heike ;
32381: LD_ADDR_VAR 0 5
32385: PUSH
32386: LD_VAR 0 5
32390: PUSH
32391: LD_EXP 7
32395: DIFF
32396: ST_TO_ADDR
// temp_list_2 = UnitFilter ( temp_list , [ f_not , [ f_lives , 250 ] ] ) ;
32397: LD_ADDR_VAR 0 8
32401: PUSH
32402: LD_VAR 0 5
32406: PPUSH
32407: LD_INT 3
32409: PUSH
32410: LD_INT 24
32412: PUSH
32413: LD_INT 250
32415: PUSH
32416: EMPTY
32417: LIST
32418: LIST
32419: PUSH
32420: EMPTY
32421: LIST
32422: LIST
32423: PPUSH
32424: CALL_OW 72
32428: ST_TO_ADDR
// if temp_list_2 > 0 then
32429: LD_VAR 0 8
32433: PUSH
32434: LD_INT 0
32436: GREATER
32437: IFFALSE 32449
// temp_list = temp_list_2 ;
32439: LD_ADDR_VAR 0 5
32443: PUSH
32444: LD_VAR 0 8
32448: ST_TO_ADDR
// if temp_list > 0 then
32449: LD_VAR 0 5
32453: PUSH
32454: LD_INT 0
32456: GREATER
32457: IFFALSE 32541
// begin temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
32459: LD_ADDR_VAR 0 7
32463: PUSH
32464: LD_VAR 0 5
32468: PPUSH
32469: LD_VAR 0 2
32473: PPUSH
32474: CALL_OW 75
32478: ST_TO_ADDR
// if GetLives ( temp_unit ) > 250 then
32479: LD_VAR 0 7
32483: PPUSH
32484: CALL_OW 256
32488: PUSH
32489: LD_INT 250
32491: GREATER
32492: IFFALSE 32525
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
32494: LD_VAR 0 2
32498: PPUSH
32499: LD_VAR 0 7
32503: PPUSH
32504: CALL_OW 250
32508: PPUSH
32509: LD_VAR 0 7
32513: PPUSH
32514: CALL_OW 251
32518: PPUSH
32519: CALL_OW 114
32523: GO 32539
// ComAttackUnit ( i , temp_unit ) ;
32525: LD_VAR 0 2
32529: PPUSH
32530: LD_VAR 0 7
32534: PPUSH
32535: CALL_OW 115
// end else
32539: GO 32873
// begin temp_list = FindNonhumansNearUnit ( side , i , 20 , true ) ;
32541: LD_ADDR_VAR 0 5
32545: PUSH
32546: LD_VAR 0 1
32550: PPUSH
32551: LD_VAR 0 2
32555: PPUSH
32556: LD_INT 20
32558: PPUSH
32559: LD_INT 1
32561: PPUSH
32562: CALL 32892 0 4
32566: ST_TO_ADDR
// if temp_list > 0 then
32567: LD_VAR 0 5
32571: PUSH
32572: LD_INT 0
32574: GREATER
32575: IFFALSE 32616
// begin ComAgressiveMove ( i , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
32577: LD_VAR 0 2
32581: PPUSH
32582: LD_VAR 0 5
32586: PUSH
32587: LD_INT 1
32589: ARRAY
32590: PPUSH
32591: CALL_OW 250
32595: PPUSH
32596: LD_VAR 0 5
32600: PUSH
32601: LD_INT 1
32603: ARRAY
32604: PPUSH
32605: CALL_OW 251
32609: PPUSH
32610: CALL_OW 114
// end else
32614: GO 32873
// begin temp_list = FindNonhumansNearUnit ( side , i , 20 , false ) ;
32616: LD_ADDR_VAR 0 5
32620: PUSH
32621: LD_VAR 0 1
32625: PPUSH
32626: LD_VAR 0 2
32630: PPUSH
32631: LD_INT 20
32633: PPUSH
32634: LD_INT 0
32636: PPUSH
32637: CALL 32892 0 4
32641: ST_TO_ADDR
// if temp_list > 0 then
32642: LD_VAR 0 5
32646: PUSH
32647: LD_INT 0
32649: GREATER
32650: IFFALSE 32688
// begin temp_unit = NearestUnitToUnit ( temp_list , i ) ;
32652: LD_ADDR_VAR 0 7
32656: PUSH
32657: LD_VAR 0 5
32661: PPUSH
32662: LD_VAR 0 2
32666: PPUSH
32667: CALL_OW 74
32671: ST_TO_ADDR
// ComAttackUnit ( i , temp_unit ) ;
32672: LD_VAR 0 2
32676: PPUSH
32677: LD_VAR 0 7
32681: PPUSH
32682: CALL_OW 115
// end else
32686: GO 32873
// if ai_attacking_unit_hex_index [ base ] [ i ] < attack_hexes then
32688: LD_EXP 47
32692: PUSH
32693: LD_VAR 0 4
32697: ARRAY
32698: PUSH
32699: LD_VAR 0 2
32703: ARRAY
32704: PUSH
32705: LD_VAR 0 6
32709: LESS
32710: IFFALSE 32873
// if GetDistUnitXY ( i , temp_hex [ 1 ] , temp_hex [ 2 ] ) > [ vehicle_dist , human_dist ] [ turn ] then
32712: LD_VAR 0 2
32716: PPUSH
32717: LD_VAR 0 23
32721: PUSH
32722: LD_INT 1
32724: ARRAY
32725: PPUSH
32726: LD_VAR 0 23
32730: PUSH
32731: LD_INT 2
32733: ARRAY
32734: PPUSH
32735: CALL_OW 297
32739: PUSH
32740: LD_VAR 0 20
32744: PUSH
32745: LD_VAR 0 19
32749: PUSH
32750: EMPTY
32751: LIST
32752: LIST
32753: PUSH
32754: LD_VAR 0 10
32758: ARRAY
32759: GREATER
32760: IFFALSE 32791
// begin ComAgressiveMove ( i , temp_hex [ 1 ] , temp_hex [ 2 ] ) ;
32762: LD_VAR 0 2
32766: PPUSH
32767: LD_VAR 0 23
32771: PUSH
32772: LD_INT 1
32774: ARRAY
32775: PPUSH
32776: LD_VAR 0 23
32780: PUSH
32781: LD_INT 2
32783: ARRAY
32784: PPUSH
32785: CALL_OW 114
// end else
32789: GO 32873
// if turn = 1 then
32791: LD_VAR 0 10
32795: PUSH
32796: LD_INT 1
32798: EQUAL
32799: IFFALSE 32873
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ base ] , i , ai_attacking_unit_hex_index [ base ] [ i ] + 1 ) ;
32801: LD_ADDR_VAR 0 5
32805: PUSH
32806: LD_EXP 47
32810: PUSH
32811: LD_VAR 0 4
32815: ARRAY
32816: PPUSH
32817: LD_VAR 0 2
32821: PPUSH
32822: LD_EXP 47
32826: PUSH
32827: LD_VAR 0 4
32831: ARRAY
32832: PUSH
32833: LD_VAR 0 2
32837: ARRAY
32838: PUSH
32839: LD_INT 1
32841: PLUS
32842: PPUSH
32843: CALL_OW 1
32847: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , base , temp_list ) ;
32848: LD_ADDR_EXP 47
32852: PUSH
32853: LD_EXP 47
32857: PPUSH
32858: LD_VAR 0 4
32862: PPUSH
32863: LD_VAR 0 5
32867: PPUSH
32868: CALL_OW 1
32872: ST_TO_ADDR
// end ; end ; end ; end ; end ;
32873: GO 31806
32875: POP
32876: POP
// end ;
32877: GO 29348
32879: POP
32880: POP
32881: GO 29332
32883: POP
32884: POP
// until false ;
32885: LD_INT 0
32887: IFFALSE 29286
// end ;
32889: PPOPN 23
32891: END
// function FindNonhumansNearUnit ( side , un , dist , only_dangerous ) ; var weapon_list , temp_list , i , btype , b , val ; begin
32892: LD_INT 0
32894: PPUSH
32895: PPUSH
32896: PPUSH
32897: PPUSH
32898: PPUSH
32899: PPUSH
32900: PPUSH
// temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_not , [ f_type , unit_human ] ] , [ f_dist , un , dist ] , [ f_see , side ] ] ) ;
32901: LD_ADDR_VAR 0 7
32905: PUSH
32906: LD_INT 81
32908: PUSH
32909: LD_VAR 0 1
32913: PUSH
32914: EMPTY
32915: LIST
32916: LIST
32917: PUSH
32918: LD_INT 3
32920: PUSH
32921: LD_INT 21
32923: PUSH
32924: LD_INT 1
32926: PUSH
32927: EMPTY
32928: LIST
32929: LIST
32930: PUSH
32931: EMPTY
32932: LIST
32933: LIST
32934: PUSH
32935: LD_INT 91
32937: PUSH
32938: LD_VAR 0 2
32942: PUSH
32943: LD_VAR 0 3
32947: PUSH
32948: EMPTY
32949: LIST
32950: LIST
32951: LIST
32952: PUSH
32953: LD_INT 101
32955: PUSH
32956: LD_VAR 0 1
32960: PUSH
32961: EMPTY
32962: LIST
32963: LIST
32964: PUSH
32965: EMPTY
32966: LIST
32967: LIST
32968: LIST
32969: LIST
32970: PPUSH
32971: CALL_OW 69
32975: ST_TO_ADDR
// if only_dangerous then
32976: LD_VAR 0 4
32980: IFFALSE 33511
// begin 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 ] ;
32982: LD_ADDR_VAR 0 6
32986: PUSH
32987: LD_INT 2
32989: PUSH
32990: LD_INT 3
32992: PUSH
32993: LD_INT 4
32995: PUSH
32996: LD_INT 5
32998: PUSH
32999: LD_INT 6
33001: PUSH
33002: LD_INT 7
33004: PUSH
33005: LD_INT 8
33007: PUSH
33008: LD_INT 9
33010: PUSH
33011: LD_INT 10
33013: PUSH
33014: LD_INT 22
33016: PUSH
33017: LD_INT 23
33019: PUSH
33020: LD_INT 24
33022: PUSH
33023: LD_INT 25
33025: PUSH
33026: LD_INT 26
33028: PUSH
33029: LD_INT 27
33031: PUSH
33032: LD_INT 28
33034: PUSH
33035: LD_INT 29
33037: PUSH
33038: LD_INT 42
33040: PUSH
33041: LD_INT 43
33043: PUSH
33044: LD_INT 44
33046: PUSH
33047: LD_INT 45
33049: PUSH
33050: LD_INT 46
33052: PUSH
33053: LD_INT 47
33055: PUSH
33056: LD_INT 48
33058: PUSH
33059: LD_INT 49
33061: PUSH
33062: EMPTY
33063: LIST
33064: LIST
33065: LIST
33066: LIST
33067: LIST
33068: LIST
33069: LIST
33070: LIST
33071: LIST
33072: LIST
33073: LIST
33074: LIST
33075: LIST
33076: LIST
33077: LIST
33078: LIST
33079: LIST
33080: LIST
33081: LIST
33082: LIST
33083: LIST
33084: LIST
33085: LIST
33086: LIST
33087: LIST
33088: ST_TO_ADDR
// temp_list = UnitFilter ( temp_list , [ f_ok ] ) ;
33089: LD_ADDR_VAR 0 7
33093: PUSH
33094: LD_VAR 0 7
33098: PPUSH
33099: LD_INT 50
33101: PUSH
33102: EMPTY
33103: LIST
33104: PPUSH
33105: CALL_OW 72
33109: ST_TO_ADDR
// result = [ ] ;
33110: LD_ADDR_VAR 0 5
33114: PUSH
33115: EMPTY
33116: ST_TO_ADDR
// for i in temp_list do
33117: LD_ADDR_VAR 0 8
33121: PUSH
33122: LD_VAR 0 7
33126: PUSH
33127: FOR_IN
33128: IFFALSE 33507
// case GetType ( i ) of unit_vehicle :
33130: LD_VAR 0 8
33134: PPUSH
33135: CALL_OW 247
33139: PUSH
33140: LD_INT 2
33142: DOUBLE
33143: EQUAL
33144: IFTRUE 33148
33146: GO 33274
33148: POP
// begin case GetControl ( i ) of control_manual , control_rider :
33149: LD_VAR 0 8
33153: PPUSH
33154: CALL_OW 263
33158: PUSH
33159: LD_INT 1
33161: DOUBLE
33162: EQUAL
33163: IFTRUE 33173
33165: LD_INT 4
33167: DOUBLE
33168: EQUAL
33169: IFTRUE 33173
33171: GO 33193
33173: POP
// begin if UnitsInside ( i ) = 0 then
33174: LD_VAR 0 8
33178: PPUSH
33179: CALL_OW 313
33183: PUSH
33184: LD_INT 0
33186: EQUAL
33187: IFFALSE 33191
// continue ;
33189: GO 33127
// end ; control_remote :
33191: GO 33239
33193: LD_INT 2
33195: DOUBLE
33196: EQUAL
33197: IFTRUE 33201
33199: GO 33221
33201: POP
// begin if IsControledBy ( i ) = 0 then
33202: LD_VAR 0 8
33206: PPUSH
33207: CALL_OW 312
33211: PUSH
33212: LD_INT 0
33214: EQUAL
33215: IFFALSE 33219
// continue ;
33217: GO 33127
// end ; control_computer , control_apeman :
33219: GO 33239
33221: LD_INT 3
33223: DOUBLE
33224: EQUAL
33225: IFTRUE 33235
33227: LD_INT 5
33229: DOUBLE
33230: EQUAL
33231: IFTRUE 33235
33233: GO 33238
33235: POP
// begin end ; end ;
33236: GO 33239
33238: POP
// if GetWeapon ( i ) in weapon_list then
33239: LD_VAR 0 8
33243: PPUSH
33244: CALL_OW 264
33248: PUSH
33249: LD_VAR 0 6
33253: IN
33254: IFFALSE 33272
// result = result ^ i ;
33256: LD_ADDR_VAR 0 5
33260: PUSH
33261: LD_VAR 0 5
33265: PUSH
33266: LD_VAR 0 8
33270: ADD
33271: ST_TO_ADDR
// end ; unit_building :
33272: GO 33505
33274: LD_INT 3
33276: DOUBLE
33277: EQUAL
33278: IFTRUE 33282
33280: GO 33504
33282: POP
// begin btype = GetBType ( i ) ;
33283: LD_ADDR_VAR 0 9
33287: PUSH
33288: LD_VAR 0 8
33292: PPUSH
33293: CALL_OW 266
33297: ST_TO_ADDR
// case btype of b_turret :
33298: LD_VAR 0 9
33302: PUSH
33303: LD_INT 33
33305: DOUBLE
33306: EQUAL
33307: IFTRUE 33311
33309: GO 33314
33311: POP
// begin end ; b_bunker , b_breastwork , b_armoury , b_barracks , b_fort :
33312: GO 33369
33314: LD_INT 32
33316: DOUBLE
33317: EQUAL
33318: IFTRUE 33346
33320: LD_INT 31
33322: DOUBLE
33323: EQUAL
33324: IFTRUE 33346
33326: LD_INT 4
33328: DOUBLE
33329: EQUAL
33330: IFTRUE 33346
33332: LD_INT 5
33334: DOUBLE
33335: EQUAL
33336: IFTRUE 33346
33338: LD_INT 35
33340: DOUBLE
33341: EQUAL
33342: IFTRUE 33346
33344: GO 33366
33346: POP
// begin if UnitsInside ( i ) = 0 then
33347: LD_VAR 0 8
33351: PPUSH
33352: CALL_OW 313
33356: PUSH
33357: LD_INT 0
33359: EQUAL
33360: IFFALSE 33364
// continue ;
33362: GO 33127
// end ; else
33364: GO 33369
33366: POP
// continue ; end ;
33367: GO 33127
// if btype in [ b_bunker , b_turret ] then
33369: LD_VAR 0 9
33373: PUSH
33374: LD_INT 32
33376: PUSH
33377: LD_INT 33
33379: PUSH
33380: EMPTY
33381: LIST
33382: LIST
33383: IN
33384: IFFALSE 33486
// if not GetBWeapon ( i ) in weapon_list then
33386: LD_VAR 0 8
33390: PPUSH
33391: CALL_OW 269
33395: PUSH
33396: LD_VAR 0 6
33400: IN
33401: NOT
33402: IFFALSE 33408
// continue else
33404: GO 33127
33406: GO 33486
// begin b = GetBase ( i ) ;
33408: LD_ADDR_VAR 0 10
33412: PUSH
33413: LD_VAR 0 8
33417: PPUSH
33418: CALL_OW 274
33422: ST_TO_ADDR
// val = false ;
33423: LD_ADDR_VAR 0 11
33427: PUSH
33428: LD_INT 0
33430: ST_TO_ADDR
// if b = 0 then
33431: LD_VAR 0 10
33435: PUSH
33436: LD_INT 0
33438: EQUAL
33439: IFFALSE 33451
// val = true else
33441: LD_ADDR_VAR 0 11
33445: PUSH
33446: LD_INT 1
33448: ST_TO_ADDR
33449: GO 33478
// if GetEnergy ( b ) [ 4 ] = 0 then
33451: LD_VAR 0 10
33455: PPUSH
33456: CALL_OW 278
33460: PUSH
33461: LD_INT 4
33463: ARRAY
33464: PUSH
33465: LD_INT 0
33467: EQUAL
33468: IFFALSE 33478
// val = true ;
33470: LD_ADDR_VAR 0 11
33474: PUSH
33475: LD_INT 1
33477: ST_TO_ADDR
// if val then
33478: LD_VAR 0 11
33482: IFFALSE 33486
// continue ;
33484: GO 33127
// end ; result = result ^ i ;
33486: LD_ADDR_VAR 0 5
33490: PUSH
33491: LD_VAR 0 5
33495: PUSH
33496: LD_VAR 0 8
33500: ADD
33501: ST_TO_ADDR
// end ; end ;
33502: GO 33505
33504: POP
33505: GO 33127
33507: POP
33508: POP
// end else
33509: GO 33521
// result = temp_list end ;
33511: LD_ADDR_VAR 0 5
33515: PUSH
33516: LD_VAR 0 7
33520: ST_TO_ADDR
33521: LD_VAR 0 5
33525: RET
// every 0 0$5 do var base , i ;
33526: GO 33528
33528: DISABLE
33529: LD_INT 0
33531: PPUSH
33532: PPUSH
// begin for base in ai_bases do
33533: LD_ADDR_VAR 0 1
33537: PUSH
33538: LD_EXP 40
33542: PUSH
33543: FOR_IN
33544: IFFALSE 33626
// for i in ( ai_vehicles_attack [ base ] ^ ai_vehicles_defend [ base ] ^ ai_cargo_bay [ base ] ) diff 0 do
33546: LD_ADDR_VAR 0 2
33550: PUSH
33551: LD_EXP 23
33555: PUSH
33556: LD_VAR 0 1
33560: ARRAY
33561: PUSH
33562: LD_EXP 22
33566: PUSH
33567: LD_VAR 0 1
33571: ARRAY
33572: ADD
33573: PUSH
33574: LD_EXP 42
33578: PUSH
33579: LD_VAR 0 1
33583: ARRAY
33584: ADD
33585: PUSH
33586: LD_INT 0
33588: DIFF
33589: PUSH
33590: FOR_IN
33591: IFFALSE 33622
// if GetFuel ( i ) < 10 then
33593: LD_VAR 0 2
33597: PPUSH
33598: CALL_OW 261
33602: PUSH
33603: LD_INT 10
33605: LESS
33606: IFFALSE 33620
// SetFuel ( i , 10 ) ;
33608: LD_VAR 0 2
33612: PPUSH
33613: LD_INT 10
33615: PPUSH
33616: CALL_OW 240
33620: GO 33590
33622: POP
33623: POP
33624: GO 33543
33626: POP
33627: POP
// enable ;
33628: ENABLE
// end ;
33629: PPOPN 2
33631: END
// every 0 0$1 + 0 0$0.5 do var base , area_list , area , c , temp_list , crates_list , b , temp_value ; var refueling ;
33632: GO 33634
33634: DISABLE
33635: LD_INT 0
33637: PPUSH
33638: PPUSH
33639: PPUSH
33640: PPUSH
33641: PPUSH
33642: PPUSH
33643: PPUSH
33644: PPUSH
33645: PPUSH
// begin refueling = [ false , false ] ;
33646: LD_ADDR_VAR 0 9
33650: PUSH
33651: LD_INT 0
33653: PUSH
33654: LD_INT 0
33656: PUSH
33657: EMPTY
33658: LIST
33659: LIST
33660: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
33661: LD_INT 35
33663: PPUSH
33664: CALL_OW 67
// for base in ai_bases do
33668: LD_ADDR_VAR 0 1
33672: PUSH
33673: LD_EXP 40
33677: PUSH
33678: FOR_IN
33679: IFFALSE 34490
// begin if ai_cargo_bay [ base ] = 0 then
33681: LD_EXP 42
33685: PUSH
33686: LD_VAR 0 1
33690: ARRAY
33691: PUSH
33692: LD_INT 0
33694: EQUAL
33695: IFFALSE 33699
// continue ;
33697: GO 33678
// temp_value = GetLives ( ai_cargo_bay [ base ] ) ;
33699: LD_ADDR_VAR 0 8
33703: PUSH
33704: LD_EXP 42
33708: PUSH
33709: LD_VAR 0 1
33713: ARRAY
33714: PPUSH
33715: CALL_OW 256
33719: ST_TO_ADDR
// case base of 1 :
33720: LD_VAR 0 1
33724: PUSH
33725: LD_INT 1
33727: DOUBLE
33728: EQUAL
33729: IFTRUE 33733
33731: GO 33744
33733: POP
// area = rubase1 ; 2 :
33734: LD_ADDR_VAR 0 3
33738: PUSH
33739: LD_INT 1
33741: ST_TO_ADDR
33742: GO 33764
33744: LD_INT 2
33746: DOUBLE
33747: EQUAL
33748: IFTRUE 33752
33750: GO 33763
33752: POP
// area = rubase2 ; end ;
33753: LD_ADDR_VAR 0 3
33757: PUSH
33758: LD_INT 2
33760: ST_TO_ADDR
33761: GO 33764
33763: POP
// if IsInArea ( ai_cargo_bay [ base ] , area ) then
33764: LD_EXP 42
33768: PUSH
33769: LD_VAR 0 1
33773: ARRAY
33774: PPUSH
33775: LD_VAR 0 3
33779: PPUSH
33780: CALL_OW 308
33784: IFFALSE 33800
// begin if temp_value < 1000 then
33786: LD_VAR 0 8
33790: PUSH
33791: LD_INT 1000
33793: LESS
33794: IFFALSE 33798
// continue ;
33796: GO 33678
// end else
33798: GO 33902
// if temp_value < 600 then
33800: LD_VAR 0 8
33804: PUSH
33805: LD_INT 600
33807: LESS
33808: IFFALSE 33902
// begin if IsLive ( ai_depot [ base ] ) then
33810: LD_EXP 18
33814: PUSH
33815: LD_VAR 0 1
33819: ARRAY
33820: PPUSH
33821: CALL_OW 300
33825: IFFALSE 33855
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) else
33827: LD_EXP 42
33831: PUSH
33832: LD_VAR 0 1
33836: ARRAY
33837: PPUSH
33838: LD_EXP 18
33842: PUSH
33843: LD_VAR 0 1
33847: ARRAY
33848: PPUSH
33849: CALL_OW 161
33853: GO 33900
// ComMoveXY ( ai_cargo_bay [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
33855: LD_EXP 42
33859: PUSH
33860: LD_VAR 0 1
33864: ARRAY
33865: PPUSH
33866: LD_EXP 24
33870: PUSH
33871: LD_VAR 0 1
33875: ARRAY
33876: PUSH
33877: LD_INT 1
33879: ARRAY
33880: PPUSH
33881: LD_EXP 24
33885: PUSH
33886: LD_VAR 0 1
33890: ARRAY
33891: PUSH
33892: LD_INT 2
33894: ARRAY
33895: PPUSH
33896: CALL_OW 111
// continue ;
33900: GO 33678
// end ; c = GetFuel ( ai_cargo_bay [ base ] ) ;
33902: LD_ADDR_VAR 0 4
33906: PUSH
33907: LD_EXP 42
33911: PUSH
33912: LD_VAR 0 1
33916: ARRAY
33917: PPUSH
33918: CALL_OW 261
33922: ST_TO_ADDR
// if c > 90 then
33923: LD_VAR 0 4
33927: PUSH
33928: LD_INT 90
33930: GREATER
33931: IFFALSE 33958
// refueling = Replace ( refueling , base , false ) else
33933: LD_ADDR_VAR 0 9
33937: PUSH
33938: LD_VAR 0 9
33942: PPUSH
33943: LD_VAR 0 1
33947: PPUSH
33948: LD_INT 0
33950: PPUSH
33951: CALL_OW 1
33955: ST_TO_ADDR
33956: GO 34074
// if ( c < 25 or refueling [ base ] ) and IsLive ( ai_depot [ base ] ) then
33958: LD_VAR 0 4
33962: PUSH
33963: LD_INT 25
33965: LESS
33966: PUSH
33967: LD_VAR 0 9
33971: PUSH
33972: LD_VAR 0 1
33976: ARRAY
33977: OR
33978: PUSH
33979: LD_EXP 18
33983: PUSH
33984: LD_VAR 0 1
33988: ARRAY
33989: PPUSH
33990: CALL_OW 300
33994: AND
33995: IFFALSE 34074
// begin ComMoveUnit ( ai_cargo_bay [ base ] , ai_depot [ base ] ) ;
33997: LD_EXP 42
34001: PUSH
34002: LD_VAR 0 1
34006: ARRAY
34007: PPUSH
34008: LD_EXP 18
34012: PUSH
34013: LD_VAR 0 1
34017: ARRAY
34018: PPUSH
34019: CALL_OW 112
// AddComRefuel ( ai_cargo_bay [ base ] , ai_depot [ base ] ) ;
34023: LD_EXP 42
34027: PUSH
34028: LD_VAR 0 1
34032: ARRAY
34033: PPUSH
34034: LD_EXP 18
34038: PUSH
34039: LD_VAR 0 1
34043: ARRAY
34044: PPUSH
34045: CALL_OW 210
// refueling = Replace ( refueling , base , true ) ;
34049: LD_ADDR_VAR 0 9
34053: PUSH
34054: LD_VAR 0 9
34058: PPUSH
34059: LD_VAR 0 1
34063: PPUSH
34064: LD_INT 1
34066: PPUSH
34067: CALL_OW 1
34071: ST_TO_ADDR
// continue ;
34072: GO 33678
// end ; area_list = [ ru_crate_area_bay ] ;
34074: LD_ADDR_VAR 0 2
34078: PUSH
34079: LD_INT 4
34081: PUSH
34082: EMPTY
34083: LIST
34084: ST_TO_ADDR
// if ai_depot [ 2 ] = 0 then
34085: LD_EXP 18
34089: PUSH
34090: LD_INT 2
34092: ARRAY
34093: PUSH
34094: LD_INT 0
34096: EQUAL
34097: IFFALSE 34113
// area_list = area_list ^ rubase2 ;
34099: LD_ADDR_VAR 0 2
34103: PUSH
34104: LD_VAR 0 2
34108: PUSH
34109: LD_INT 2
34111: ADD
34112: ST_TO_ADDR
// crates_list = [ ] ;
34113: LD_ADDR_VAR 0 6
34117: PUSH
34118: EMPTY
34119: ST_TO_ADDR
// for b in area_list do
34120: LD_ADDR_VAR 0 7
34124: PUSH
34125: LD_VAR 0 2
34129: PUSH
34130: FOR_IN
34131: IFFALSE 34161
// begin crates_list = crates_list ^ GetListOfCratesInArea_ForGathering ( base , b ) ;
34133: LD_ADDR_VAR 0 6
34137: PUSH
34138: LD_VAR 0 6
34142: PUSH
34143: LD_VAR 0 1
34147: PPUSH
34148: LD_VAR 0 7
34152: PPUSH
34153: CALL 12137 0 2
34157: ADD
34158: ST_TO_ADDR
// end ;
34159: GO 34130
34161: POP
34162: POP
// if crates_list > 0 and ai_depot [ base ] > 0 then
34163: LD_VAR 0 6
34167: PUSH
34168: LD_INT 0
34170: GREATER
34171: PUSH
34172: LD_EXP 18
34176: PUSH
34177: LD_VAR 0 1
34181: ARRAY
34182: PUSH
34183: LD_INT 0
34185: GREATER
34186: AND
34187: IFFALSE 34313
// begin temp_list = [ ] ;
34189: LD_ADDR_VAR 0 5
34193: PUSH
34194: EMPTY
34195: ST_TO_ADDR
// for c in crates_list do
34196: LD_ADDR_VAR 0 4
34200: PUSH
34201: LD_VAR 0 6
34205: PUSH
34206: FOR_IN
34207: IFFALSE 34256
// temp_list = temp_list ^ GetDistUnitXY ( ai_cargo_bay [ base ] , c [ 1 ] , c [ 2 ] ) ;
34209: LD_ADDR_VAR 0 5
34213: PUSH
34214: LD_VAR 0 5
34218: PUSH
34219: LD_EXP 42
34223: PUSH
34224: LD_VAR 0 1
34228: ARRAY
34229: PPUSH
34230: LD_VAR 0 4
34234: PUSH
34235: LD_INT 1
34237: ARRAY
34238: PPUSH
34239: LD_VAR 0 4
34243: PUSH
34244: LD_INT 2
34246: ARRAY
34247: PPUSH
34248: CALL_OW 297
34252: ADD
34253: ST_TO_ADDR
34254: GO 34206
34256: POP
34257: POP
// temp_list = WorstFromListByList ( crates_list , temp_list ) ;
34258: LD_ADDR_VAR 0 5
34262: PUSH
34263: LD_VAR 0 6
34267: PPUSH
34268: LD_VAR 0 5
34272: PPUSH
34273: CALL_OW 78
34277: ST_TO_ADDR
// ComCollect ( ai_cargo_bay [ base ] , temp_list [ 1 ] , temp_list [ 2 ] ) ;
34278: LD_EXP 42
34282: PUSH
34283: LD_VAR 0 1
34287: ARRAY
34288: PPUSH
34289: LD_VAR 0 5
34293: PUSH
34294: LD_INT 1
34296: ARRAY
34297: PPUSH
34298: LD_VAR 0 5
34302: PUSH
34303: LD_INT 2
34305: ARRAY
34306: PPUSH
34307: CALL_OW 117
// end else
34311: GO 34488
// if IsOk ( ai_depot [ base ] ) and Carry ( ai_cargo_bay [ base ] ) then
34313: LD_EXP 18
34317: PUSH
34318: LD_VAR 0 1
34322: ARRAY
34323: PPUSH
34324: CALL_OW 302
34328: PUSH
34329: LD_EXP 42
34333: PUSH
34334: LD_VAR 0 1
34338: ARRAY
34339: PPUSH
34340: CALL_OW 281
34344: AND
34345: IFFALSE 34375
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) else
34347: LD_EXP 42
34351: PUSH
34352: LD_VAR 0 1
34356: ARRAY
34357: PPUSH
34358: LD_EXP 18
34362: PUSH
34363: LD_VAR 0 1
34367: ARRAY
34368: PPUSH
34369: CALL_OW 161
34373: GO 34488
// if not IsInArea ( ai_cargo_bay [ base ] , area ) then
34375: LD_EXP 42
34379: PUSH
34380: LD_VAR 0 1
34384: ARRAY
34385: PPUSH
34386: LD_VAR 0 3
34390: PPUSH
34391: CALL_OW 308
34395: NOT
34396: IFFALSE 34488
// if IsOk ( ai_depot [ base ] ) then
34398: LD_EXP 18
34402: PUSH
34403: LD_VAR 0 1
34407: ARRAY
34408: PPUSH
34409: CALL_OW 302
34413: IFFALSE 34443
// ComGive ( ai_cargo_bay [ base ] , ai_depot [ base ] ) else
34415: LD_EXP 42
34419: PUSH
34420: LD_VAR 0 1
34424: ARRAY
34425: PPUSH
34426: LD_EXP 18
34430: PUSH
34431: LD_VAR 0 1
34435: ARRAY
34436: PPUSH
34437: CALL_OW 161
34441: GO 34488
// ComMoveXY ( ai_cargo_bay [ base ] , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
34443: LD_EXP 42
34447: PUSH
34448: LD_VAR 0 1
34452: ARRAY
34453: PPUSH
34454: LD_EXP 24
34458: PUSH
34459: LD_VAR 0 1
34463: ARRAY
34464: PUSH
34465: LD_INT 1
34467: ARRAY
34468: PPUSH
34469: LD_EXP 24
34473: PUSH
34474: LD_VAR 0 1
34478: ARRAY
34479: PUSH
34480: LD_INT 2
34482: ARRAY
34483: PPUSH
34484: CALL_OW 111
// end ;
34488: GO 33678
34490: POP
34491: POP
// until false ;
34492: LD_INT 0
34494: IFFALSE 33661
// end ;
34496: PPOPN 9
34498: END
// every 0 0$1 do var side , i , scientists_list , temp_list , temp_unit , base , k , temp_list_3 , free_spaces , area , under_attack ;
34499: GO 34501
34501: DISABLE
34502: LD_INT 0
34504: PPUSH
34505: PPUSH
34506: PPUSH
34507: PPUSH
34508: PPUSH
34509: PPUSH
34510: PPUSH
34511: PPUSH
34512: PPUSH
34513: PPUSH
34514: PPUSH
// begin side = russians ;
34515: LD_ADDR_VAR 0 1
34519: PUSH
34520: LD_EXP 3
34524: ST_TO_ADDR
// for base in ai_bases do
34525: LD_ADDR_VAR 0 6
34529: PUSH
34530: LD_EXP 40
34534: PUSH
34535: FOR_IN
34536: IFFALSE 35290
// begin scientists_list = ai_scientists [ base ] diff ai_heal_these_humans [ base ] ;
34538: LD_ADDR_VAR 0 3
34542: PUSH
34543: LD_EXP 16
34547: PUSH
34548: LD_VAR 0 6
34552: ARRAY
34553: PUSH
34554: LD_EXP 26
34558: PUSH
34559: LD_VAR 0 6
34563: ARRAY
34564: DIFF
34565: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
34566: LD_ADDR_VAR 0 4
34570: PUSH
34571: LD_EXP 26
34575: PUSH
34576: LD_VAR 0 6
34580: ARRAY
34581: ST_TO_ADDR
// i = 1 ;
34582: LD_ADDR_VAR 0 2
34586: PUSH
34587: LD_INT 1
34589: ST_TO_ADDR
// while i <= scientists_list do
34590: LD_VAR 0 2
34594: PUSH
34595: LD_VAR 0 3
34599: LESSEQUAL
34600: IFFALSE 34695
// begin if GetLives ( scientists_list [ i ] ) <= 700 then
34602: LD_VAR 0 3
34606: PUSH
34607: LD_VAR 0 2
34611: ARRAY
34612: PPUSH
34613: CALL_OW 256
34617: PUSH
34618: LD_INT 700
34620: LESSEQUAL
34621: IFFALSE 34679
// begin temp_list = temp_list ^ scientists_list [ i ] ;
34623: LD_ADDR_VAR 0 4
34627: PUSH
34628: LD_VAR 0 4
34632: PUSH
34633: LD_VAR 0 3
34637: PUSH
34638: LD_VAR 0 2
34642: ARRAY
34643: ADD
34644: ST_TO_ADDR
// scientists_list = Delete ( scientists_list , i ) ;
34645: LD_ADDR_VAR 0 3
34649: PUSH
34650: LD_VAR 0 3
34654: PPUSH
34655: LD_VAR 0 2
34659: PPUSH
34660: CALL_OW 3
34664: ST_TO_ADDR
// i = i - 1 ;
34665: LD_ADDR_VAR 0 2
34669: PUSH
34670: LD_VAR 0 2
34674: PUSH
34675: LD_INT 1
34677: MINUS
34678: ST_TO_ADDR
// end ; i = i + 1 ;
34679: LD_ADDR_VAR 0 2
34683: PUSH
34684: LD_VAR 0 2
34688: PUSH
34689: LD_INT 1
34691: PLUS
34692: ST_TO_ADDR
// end ;
34693: GO 34590
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
34695: LD_ADDR_EXP 26
34699: PUSH
34700: LD_EXP 26
34704: PPUSH
34705: LD_VAR 0 6
34709: PPUSH
34710: LD_VAR 0 4
34714: PPUSH
34715: CALL_OW 1
34719: ST_TO_ADDR
// temp_list = [ ] ;
34720: LD_ADDR_VAR 0 4
34724: PUSH
34725: EMPTY
34726: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
34727: LD_ADDR_VAR 0 2
34731: PUSH
34732: LD_EXP 26
34736: PUSH
34737: LD_VAR 0 6
34741: ARRAY
34742: PUSH
34743: FOR_IN
34744: IFFALSE 34794
// if GetLives ( i ) < 1000 and IsInUnit ( i ) = 0 then
34746: LD_VAR 0 2
34750: PPUSH
34751: CALL_OW 256
34755: PUSH
34756: LD_INT 1000
34758: LESS
34759: PUSH
34760: LD_VAR 0 2
34764: PPUSH
34765: CALL_OW 310
34769: PUSH
34770: LD_INT 0
34772: EQUAL
34773: AND
34774: IFFALSE 34792
// temp_list = temp_list ^ i ;
34776: LD_ADDR_VAR 0 4
34780: PUSH
34781: LD_VAR 0 4
34785: PUSH
34786: LD_VAR 0 2
34790: ADD
34791: ST_TO_ADDR
34792: GO 34743
34794: POP
34795: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
34796: LD_ADDR_EXP 26
34800: PUSH
34801: LD_EXP 26
34805: PPUSH
34806: LD_VAR 0 6
34810: PPUSH
34811: LD_VAR 0 4
34815: PPUSH
34816: CALL_OW 1
34820: ST_TO_ADDR
// under_attack = BaseUnderAttack ( side , base ) ;
34821: LD_ADDR_VAR 0 11
34825: PUSH
34826: LD_VAR 0 1
34830: PPUSH
34831: LD_VAR 0 6
34835: PPUSH
34836: CALL 25929 0 2
34840: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
34841: LD_ADDR_VAR 0 2
34845: PUSH
34846: LD_EXP 26
34850: PUSH
34851: LD_VAR 0 6
34855: ARRAY
34856: PUSH
34857: FOR_IN
34858: IFFALSE 34971
// if not ( under_attack and i in ai_soldiers [ base ] ) and GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
34860: LD_VAR 0 11
34864: PUSH
34865: LD_VAR 0 2
34869: PUSH
34870: LD_EXP 13
34874: PUSH
34875: LD_VAR 0 6
34879: ARRAY
34880: IN
34881: AND
34882: NOT
34883: PUSH
34884: LD_VAR 0 2
34888: PPUSH
34889: LD_EXP 24
34893: PUSH
34894: LD_VAR 0 6
34898: ARRAY
34899: PUSH
34900: LD_INT 1
34902: ARRAY
34903: PPUSH
34904: LD_EXP 24
34908: PUSH
34909: LD_VAR 0 6
34913: ARRAY
34914: PUSH
34915: LD_INT 2
34917: ARRAY
34918: PPUSH
34919: CALL_OW 297
34923: PUSH
34924: LD_INT 4
34926: GREATER
34927: AND
34928: IFFALSE 34969
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
34930: LD_VAR 0 2
34934: PPUSH
34935: LD_EXP 24
34939: PUSH
34940: LD_VAR 0 6
34944: ARRAY
34945: PUSH
34946: LD_INT 1
34948: ARRAY
34949: PPUSH
34950: LD_EXP 24
34954: PUSH
34955: LD_VAR 0 6
34959: ARRAY
34960: PUSH
34961: LD_INT 2
34963: ARRAY
34964: PPUSH
34965: CALL_OW 111
34969: GO 34857
34971: POP
34972: POP
// if scientists_list = 0 then
34973: LD_VAR 0 3
34977: PUSH
34978: LD_INT 0
34980: EQUAL
34981: IFFALSE 34985
// continue ;
34983: GO 34535
// if ai_heal_these_humans [ base ] > 0 then
34985: LD_EXP 26
34989: PUSH
34990: LD_VAR 0 6
34994: ARRAY
34995: PUSH
34996: LD_INT 0
34998: GREATER
34999: IFFALSE 35223
// begin case base of 1 :
35001: LD_VAR 0 6
35005: PUSH
35006: LD_INT 1
35008: DOUBLE
35009: EQUAL
35010: IFTRUE 35014
35012: GO 35025
35014: POP
// area = rubase1 ; 2 :
35015: LD_ADDR_VAR 0 10
35019: PUSH
35020: LD_INT 1
35022: ST_TO_ADDR
35023: GO 35045
35025: LD_INT 2
35027: DOUBLE
35028: EQUAL
35029: IFTRUE 35033
35031: GO 35044
35033: POP
// area = rubase2 ; end ;
35034: LD_ADDR_VAR 0 10
35038: PUSH
35039: LD_INT 2
35041: ST_TO_ADDR
35042: GO 35045
35044: POP
// temp_list = UnitFilter ( ai_heal_these_humans [ base ] , [ f_inarea , area ] ) ;
35045: LD_ADDR_VAR 0 4
35049: PUSH
35050: LD_EXP 26
35054: PUSH
35055: LD_VAR 0 6
35059: ARRAY
35060: PPUSH
35061: LD_INT 95
35063: PUSH
35064: LD_VAR 0 10
35068: PUSH
35069: EMPTY
35070: LIST
35071: LIST
35072: PPUSH
35073: CALL_OW 72
35077: ST_TO_ADDR
// if temp_list > 0 then
35078: LD_VAR 0 4
35082: PUSH
35083: LD_INT 0
35085: GREATER
35086: IFFALSE 35223
// begin scientists_list = GetHumansOutOfUnits ( scientists_list ) ;
35088: LD_ADDR_VAR 0 3
35092: PUSH
35093: LD_VAR 0 3
35097: PPUSH
35098: CALL 25824 0 1
35102: ST_TO_ADDR
// repeat i = 1 ;
35103: LD_ADDR_VAR 0 2
35107: PUSH
35108: LD_INT 1
35110: ST_TO_ADDR
// while i <= temp_list do
35111: LD_VAR 0 2
35115: PUSH
35116: LD_VAR 0 4
35120: LESSEQUAL
35121: IFFALSE 35213
// begin if scientists_list = 0 then
35123: LD_VAR 0 3
35127: PUSH
35128: LD_INT 0
35130: EQUAL
35131: IFFALSE 35135
// break ;
35133: GO 35213
// temp_unit = NearestUnitToUnit ( scientists_list , temp_list [ i ] ) ;
35135: LD_ADDR_VAR 0 5
35139: PUSH
35140: LD_VAR 0 3
35144: PPUSH
35145: LD_VAR 0 4
35149: PUSH
35150: LD_VAR 0 2
35154: ARRAY
35155: PPUSH
35156: CALL_OW 74
35160: ST_TO_ADDR
// ComHeal ( temp_unit , temp_list [ i ] ) ;
35161: LD_VAR 0 5
35165: PPUSH
35166: LD_VAR 0 4
35170: PUSH
35171: LD_VAR 0 2
35175: ARRAY
35176: PPUSH
35177: CALL_OW 128
// scientists_list = scientists_list diff temp_unit ;
35181: LD_ADDR_VAR 0 3
35185: PUSH
35186: LD_VAR 0 3
35190: PUSH
35191: LD_VAR 0 5
35195: DIFF
35196: ST_TO_ADDR
// i = i + 1 ;
35197: LD_ADDR_VAR 0 2
35201: PUSH
35202: LD_VAR 0 2
35206: PUSH
35207: LD_INT 1
35209: PLUS
35210: ST_TO_ADDR
// end ;
35211: GO 35111
// until scientists_list = 0 ;
35213: LD_VAR 0 3
35217: PUSH
35218: LD_INT 0
35220: EQUAL
35221: IFFALSE 35103
// end ; end ; DistributeHumansToBuildings ( base , scientists_list , UnitFilter ( ai_labs [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_scientistic , 6 , true , false ) ;
35223: LD_VAR 0 6
35227: PPUSH
35228: LD_VAR 0 3
35232: PPUSH
35233: LD_EXP 19
35237: PUSH
35238: LD_VAR 0 6
35242: ARRAY
35243: PPUSH
35244: LD_INT 50
35246: PUSH
35247: EMPTY
35248: LIST
35249: PUSH
35250: LD_INT 3
35252: PUSH
35253: LD_INT 57
35255: PUSH
35256: EMPTY
35257: LIST
35258: PUSH
35259: EMPTY
35260: LIST
35261: LIST
35262: PUSH
35263: EMPTY
35264: LIST
35265: LIST
35266: PPUSH
35267: CALL_OW 72
35271: PPUSH
35272: LD_INT 4
35274: PPUSH
35275: LD_INT 6
35277: PPUSH
35278: LD_INT 1
35280: PPUSH
35281: LD_INT 0
35283: PPUSH
35284: CALL 20275 0 7
// end ;
35288: GO 34535
35290: POP
35291: POP
// enable ;
35292: ENABLE
// end ; end_of_file
35293: PPOPN 11
35295: END
// function PlayerApes ; begin
35296: LD_INT 0
35298: PPUSH
// result = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_class , class_apeman ] , [ f_class , class_apeman_soldier ] , [ f_class , class_apeman_engineer ] , [ f_class , class_apeman_kamikaze ] ] ] ) ;
35299: LD_ADDR_VAR 0 1
35303: PUSH
35304: LD_INT 22
35306: PUSH
35307: LD_EXP 2
35311: PUSH
35312: EMPTY
35313: LIST
35314: LIST
35315: PUSH
35316: LD_INT 2
35318: PUSH
35319: LD_INT 25
35321: PUSH
35322: LD_INT 12
35324: PUSH
35325: EMPTY
35326: LIST
35327: LIST
35328: PUSH
35329: LD_INT 25
35331: PUSH
35332: LD_INT 15
35334: PUSH
35335: EMPTY
35336: LIST
35337: LIST
35338: PUSH
35339: LD_INT 25
35341: PUSH
35342: LD_INT 16
35344: PUSH
35345: EMPTY
35346: LIST
35347: LIST
35348: PUSH
35349: LD_INT 25
35351: PUSH
35352: LD_INT 17
35354: PUSH
35355: EMPTY
35356: LIST
35357: LIST
35358: PUSH
35359: EMPTY
35360: LIST
35361: LIST
35362: LIST
35363: LIST
35364: LIST
35365: PUSH
35366: EMPTY
35367: LIST
35368: LIST
35369: PPUSH
35370: CALL_OW 69
35374: ST_TO_ADDR
// end ;
35375: LD_VAR 0 1
35379: RET
// on ResearchComplete ( tech , lab ) do var temp_unit , temp_list , temp_list_2 , un ;
35380: LD_INT 0
35382: PPUSH
35383: PPUSH
35384: PPUSH
35385: PPUSH
// begin if tech = tech_explos then
35386: LD_VAR 0 1
35390: PUSH
35391: LD_INT 42
35393: EQUAL
35394: IFFALSE 35403
// begin Hint ( Mines ) ;
35396: LD_STRING Mines
35398: PPUSH
35399: CALL_OW 339
// end ; if tech = tech_stimdrugs then
35403: LD_VAR 0 1
35407: PUSH
35408: LD_INT 5
35410: EQUAL
35411: IFFALSE 36083
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_class , class_scientistic ] , [ f_ok ] ] ) diff Heike ;
35413: LD_ADDR_VAR 0 4
35417: PUSH
35418: LD_INT 22
35420: PUSH
35421: LD_EXP 2
35425: PUSH
35426: EMPTY
35427: LIST
35428: LIST
35429: PUSH
35430: LD_INT 25
35432: PUSH
35433: LD_INT 4
35435: PUSH
35436: EMPTY
35437: LIST
35438: LIST
35439: PUSH
35440: LD_INT 50
35442: PUSH
35443: EMPTY
35444: LIST
35445: PUSH
35446: EMPTY
35447: LIST
35448: LIST
35449: LIST
35450: PPUSH
35451: CALL_OW 69
35455: PUSH
35456: LD_EXP 7
35460: DIFF
35461: ST_TO_ADDR
// temp_list_2 = [ ] ;
35462: LD_ADDR_VAR 0 5
35466: PUSH
35467: EMPTY
35468: ST_TO_ADDR
// for un in temp_list do
35469: LD_ADDR_VAR 0 6
35473: PUSH
35474: LD_VAR 0 4
35478: PUSH
35479: FOR_IN
35480: IFFALSE 35517
// if IsInUnit ( un ) = lab then
35482: LD_VAR 0 6
35486: PPUSH
35487: CALL_OW 310
35491: PUSH
35492: LD_VAR 0 2
35496: EQUAL
35497: IFFALSE 35515
// temp_list_2 = temp_list_2 ^ un ;
35499: LD_ADDR_VAR 0 5
35503: PUSH
35504: LD_VAR 0 5
35508: PUSH
35509: LD_VAR 0 6
35513: ADD
35514: ST_TO_ADDR
35515: GO 35479
35517: POP
35518: POP
// if temp_list_2 > 0 then
35519: LD_VAR 0 5
35523: PUSH
35524: LD_INT 0
35526: GREATER
35527: IFFALSE 35545
// temp_unit = temp_list_2 [ 1 ] else
35529: LD_ADDR_VAR 0 3
35533: PUSH
35534: LD_VAR 0 5
35538: PUSH
35539: LD_INT 1
35541: ARRAY
35542: ST_TO_ADDR
35543: GO 35747
// if temp_list > 0 then
35545: LD_VAR 0 4
35549: PUSH
35550: LD_INT 0
35552: GREATER
35553: IFFALSE 35571
// temp_unit = temp_list [ 1 ] else
35555: LD_ADDR_VAR 0 3
35559: PUSH
35560: LD_VAR 0 4
35564: PUSH
35565: LD_INT 1
35567: ARRAY
35568: ST_TO_ADDR
35569: GO 35747
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_ok ] ] ) diff ( [ Heike , Martin , Louis , Erwin ] ^ PlayerApes ) ;
35571: LD_ADDR_VAR 0 4
35575: PUSH
35576: LD_INT 22
35578: PUSH
35579: LD_EXP 2
35583: PUSH
35584: EMPTY
35585: LIST
35586: LIST
35587: PUSH
35588: LD_INT 21
35590: PUSH
35591: LD_INT 1
35593: PUSH
35594: EMPTY
35595: LIST
35596: LIST
35597: PUSH
35598: LD_INT 50
35600: PUSH
35601: EMPTY
35602: LIST
35603: PUSH
35604: EMPTY
35605: LIST
35606: LIST
35607: LIST
35608: PPUSH
35609: CALL_OW 69
35613: PUSH
35614: LD_EXP 7
35618: PUSH
35619: LD_EXP 8
35623: PUSH
35624: LD_EXP 9
35628: PUSH
35629: LD_EXP 10
35633: PUSH
35634: EMPTY
35635: LIST
35636: LIST
35637: LIST
35638: LIST
35639: PUSH
35640: CALL 35296 0 0
35644: ADD
35645: DIFF
35646: ST_TO_ADDR
// if temp_list > 0 then
35647: LD_VAR 0 4
35651: PUSH
35652: LD_INT 0
35654: GREATER
35655: IFFALSE 35673
// temp_unit = temp_list [ 1 ] else
35657: LD_ADDR_VAR 0 3
35661: PUSH
35662: LD_VAR 0 4
35666: PUSH
35667: LD_INT 1
35669: ARRAY
35670: ST_TO_ADDR
35671: GO 35747
// begin temp_list = UnitFilter ( [ Martin , Louis , Erwin ] , [ f_ok ] ) ;
35673: LD_ADDR_VAR 0 4
35677: PUSH
35678: LD_EXP 8
35682: PUSH
35683: LD_EXP 9
35687: PUSH
35688: LD_EXP 10
35692: PUSH
35693: EMPTY
35694: LIST
35695: LIST
35696: LIST
35697: PPUSH
35698: LD_INT 50
35700: PUSH
35701: EMPTY
35702: LIST
35703: PPUSH
35704: CALL_OW 72
35708: ST_TO_ADDR
// if temp_list > 0 then
35709: LD_VAR 0 4
35713: PUSH
35714: LD_INT 0
35716: GREATER
35717: IFFALSE 35745
// temp_unit = temp_list [ Rand ( 1 , temp_list ) ] else
35719: LD_ADDR_VAR 0 3
35723: PUSH
35724: LD_VAR 0 4
35728: PUSH
35729: LD_INT 1
35731: PPUSH
35732: LD_VAR 0 4
35736: PPUSH
35737: CALL_OW 12
35741: ARRAY
35742: ST_TO_ADDR
35743: GO 35747
// exit ;
35745: GO 36348
// end ; end ; DialogueOn ;
35747: CALL_OW 6
// case temp_unit of Martin :
35751: LD_VAR 0 3
35755: PUSH
35756: LD_EXP 8
35760: DOUBLE
35761: EQUAL
35762: IFTRUE 35766
35764: GO 35793
35766: POP
// begin Say ( temp_unit , DStimMartin1 ) ;
35767: LD_VAR 0 3
35771: PPUSH
35772: LD_STRING DStimMartin1
35774: PPUSH
35775: CALL_OW 88
// Say ( temp_unit , DStimMartin2 ) ;
35779: LD_VAR 0 3
35783: PPUSH
35784: LD_STRING DStimMartin2
35786: PPUSH
35787: CALL_OW 88
// end ; Louis :
35791: GO 35933
35793: LD_EXP 9
35797: DOUBLE
35798: EQUAL
35799: IFTRUE 35803
35801: GO 35830
35803: POP
// begin Say ( temp_unit , DStimLo1 ) ;
35804: LD_VAR 0 3
35808: PPUSH
35809: LD_STRING DStimLo1
35811: PPUSH
35812: CALL_OW 88
// Say ( temp_unit , DStimLo2 ) ;
35816: LD_VAR 0 3
35820: PPUSH
35821: LD_STRING DStimLo2
35823: PPUSH
35824: CALL_OW 88
// end ; Erwin :
35828: GO 35933
35830: LD_EXP 10
35834: DOUBLE
35835: EQUAL
35836: IFTRUE 35840
35838: GO 35867
35840: POP
// begin Say ( temp_unit , DStimEr1 ) ;
35841: LD_VAR 0 3
35845: PPUSH
35846: LD_STRING DStimEr1
35848: PPUSH
35849: CALL_OW 88
// Say ( temp_unit , DStimEr2 ) ;
35853: LD_VAR 0 3
35857: PPUSH
35858: LD_STRING DStimEr2
35860: PPUSH
35861: CALL_OW 88
// end ; else
35865: GO 35933
35867: POP
// if GetSex ( temp_unit ) = sex_male then
35868: LD_VAR 0 3
35872: PPUSH
35873: CALL_OW 258
35877: PUSH
35878: LD_INT 1
35880: EQUAL
35881: IFFALSE 35909
// begin Say ( temp_unit , DStimSciM1 ) ;
35883: LD_VAR 0 3
35887: PPUSH
35888: LD_STRING DStimSciM1
35890: PPUSH
35891: CALL_OW 88
// Say ( temp_unit , DStimSciM2 ) ;
35895: LD_VAR 0 3
35899: PPUSH
35900: LD_STRING DStimSciM2
35902: PPUSH
35903: CALL_OW 88
// end else
35907: GO 35933
// begin Say ( temp_unit , DStimSciF1 ) ;
35909: LD_VAR 0 3
35913: PPUSH
35914: LD_STRING DStimSciF1
35916: PPUSH
35917: CALL_OW 88
// Say ( temp_unit , DStimSciF2 ) ;
35921: LD_VAR 0 3
35925: PPUSH
35926: LD_STRING DStimSciF2
35928: PPUSH
35929: CALL_OW 88
// end ; end ; Say ( Heike , DStimH1 ) ;
35933: LD_EXP 7
35937: PPUSH
35938: LD_STRING DStimH1
35940: PPUSH
35941: CALL_OW 88
// case temp_unit of Martin :
35945: LD_VAR 0 3
35949: PUSH
35950: LD_EXP 8
35954: DOUBLE
35955: EQUAL
35956: IFTRUE 35960
35958: GO 35975
35960: POP
// Say ( temp_unit , DStimMartin3 ) ; Louis :
35961: LD_VAR 0 3
35965: PPUSH
35966: LD_STRING DStimMartin3
35968: PPUSH
35969: CALL_OW 88
35973: GO 36067
35975: LD_EXP 9
35979: DOUBLE
35980: EQUAL
35981: IFTRUE 35985
35983: GO 36000
35985: POP
// Say ( temp_unit , DStimLo3 ) ; Erwin :
35986: LD_VAR 0 3
35990: PPUSH
35991: LD_STRING DStimLo3
35993: PPUSH
35994: CALL_OW 88
35998: GO 36067
36000: LD_EXP 10
36004: DOUBLE
36005: EQUAL
36006: IFTRUE 36010
36008: GO 36025
36010: POP
// Say ( temp_unit , DStimEr3 ) ; else
36011: LD_VAR 0 3
36015: PPUSH
36016: LD_STRING DStimEr3
36018: PPUSH
36019: CALL_OW 88
36023: GO 36067
36025: POP
// if GetSex ( temp_unit ) = sex_male then
36026: LD_VAR 0 3
36030: PPUSH
36031: CALL_OW 258
36035: PUSH
36036: LD_INT 1
36038: EQUAL
36039: IFFALSE 36055
// Say ( temp_unit , DStimSciM3 ) else
36041: LD_VAR 0 3
36045: PPUSH
36046: LD_STRING DStimSciM3
36048: PPUSH
36049: CALL_OW 88
36053: GO 36067
// Say ( temp_unit , DStimSciF3 ) ; end ;
36055: LD_VAR 0 3
36059: PPUSH
36060: LD_STRING DStimSciF3
36062: PPUSH
36063: CALL_OW 88
// Say ( Heike , DStimH2 ) ;
36067: LD_EXP 7
36071: PPUSH
36072: LD_STRING DStimH2
36074: PPUSH
36075: CALL_OW 88
// DialogueOff ;
36079: CALL_OW 7
// end ; if tech = tech_explos and ( apeman_vehicles_researched_07 or testing ) then
36083: LD_VAR 0 1
36087: PUSH
36088: LD_INT 42
36090: EQUAL
36091: PUSH
36092: LD_EXP 75
36096: PUSH
36097: LD_EXP 1
36101: OR
36102: AND
36103: IFFALSE 36348
// begin wait ( 0 0$10 ) ;
36105: LD_INT 350
36107: PPUSH
36108: CALL_OW 67
// repeat wait ( 0 0$1 ) ;
36112: LD_INT 35
36114: PPUSH
36115: CALL_OW 67
// if IsDead ( Louis ) or deserter_begin then
36119: LD_EXP 9
36123: PPUSH
36124: CALL_OW 301
36128: PUSH
36129: LD_EXP 66
36133: OR
36134: IFFALSE 36138
// exit ;
36136: GO 36348
// if not IsOk ( Louis ) then
36138: LD_EXP 9
36142: PPUSH
36143: CALL_OW 302
36147: NOT
36148: IFFALSE 36152
// continue ;
36150: GO 36112
// until ContactTime ( you ) >= 0 0$10 ;
36152: LD_EXP 2
36156: PPUSH
36157: CALL_OW 462
36161: PUSH
36162: LD_INT 350
36164: GREATEREQUAL
36165: IFFALSE 36112
// DialogueOn ;
36167: CALL_OW 6
// Say ( Louis , D10Lo1 ) ;
36171: LD_EXP 9
36175: PPUSH
36176: LD_STRING D10Lo1
36178: PPUSH
36179: CALL_OW 88
// ForceSay ( Heike , D10H1 ) ;
36183: LD_EXP 7
36187: PPUSH
36188: LD_STRING D10H1
36190: PPUSH
36191: CALL_OW 91
// Say ( Louis , D10Lo2 ) ;
36195: LD_EXP 9
36199: PPUSH
36200: LD_STRING D10Lo2
36202: PPUSH
36203: CALL_OW 88
// ForceSay ( Heike , D10H2 ) ;
36207: LD_EXP 7
36211: PPUSH
36212: LD_STRING D10H2
36214: PPUSH
36215: CALL_OW 91
// Say ( Louis , D10Lo3 ) ;
36219: LD_EXP 9
36223: PPUSH
36224: LD_STRING D10Lo3
36226: PPUSH
36227: CALL_OW 88
// dwait ( 0 0$0.2 ) ;
36231: LD_INT 7
36233: PPUSH
36234: CALL_OW 68
// case Query ( QKamikaze ) of 1 :
36238: LD_STRING QKamikaze
36240: PPUSH
36241: CALL_OW 97
36245: PUSH
36246: LD_INT 1
36248: DOUBLE
36249: EQUAL
36250: IFTRUE 36254
36252: GO 36269
36254: POP
// begin ForceSay ( Heike , D101H1 ) ;
36255: LD_EXP 7
36259: PPUSH
36260: LD_STRING D101H1
36262: PPUSH
36263: CALL_OW 91
// end ; 2 :
36267: GO 36329
36269: LD_INT 2
36271: DOUBLE
36272: EQUAL
36273: IFTRUE 36277
36275: GO 36328
36277: POP
// begin ForceSay ( Heike , D102H1 ) ;
36278: LD_EXP 7
36282: PPUSH
36283: LD_STRING D102H1
36285: PPUSH
36286: CALL_OW 91
// Say ( Louis , D102Lo1 ) ;
36290: LD_EXP 9
36294: PPUSH
36295: LD_STRING D102Lo1
36297: PPUSH
36298: CALL_OW 88
// ForceSay ( Heike , D102H2 ) ;
36302: LD_EXP 7
36306: PPUSH
36307: LD_STRING D102H2
36309: PPUSH
36310: CALL_OW 91
// Say ( Louis , D102Lo2 ) ;
36314: LD_EXP 9
36318: PPUSH
36319: LD_STRING D102Lo2
36321: PPUSH
36322: CALL_OW 88
// end ; end ;
36326: GO 36329
36328: POP
// DialogueOff ;
36329: CALL_OW 7
// SetTech ( tech_apebrain , you , state_enabled ) ;
36333: LD_INT 4
36335: PPUSH
36336: LD_EXP 2
36340: PPUSH
36341: LD_INT 1
36343: PPUSH
36344: CALL_OW 322
// end ; end ;
36348: PPOPN 6
36350: END
// every 0 0$1.9 do var temp_list , temp_unit , un , temp_list_2 ;
36351: GO 36353
36353: DISABLE
36354: LD_INT 0
36356: PPUSH
36357: PPUSH
36358: PPUSH
36359: PPUSH
// begin repeat wait ( 0 0$1 ) ;
36360: LD_INT 35
36362: PPUSH
36363: CALL_OW 67
// until ai_vehicles_attack [ 1 ] > 0 or IsDead ( ai_depot [ 1 ] ) ;
36367: LD_EXP 23
36371: PUSH
36372: LD_INT 1
36374: ARRAY
36375: PUSH
36376: LD_INT 0
36378: GREATER
36379: PUSH
36380: LD_EXP 18
36384: PUSH
36385: LD_INT 1
36387: ARRAY
36388: PPUSH
36389: CALL_OW 301
36393: OR
36394: IFFALSE 36360
// repeat wait ( 0 0$1 ) ;
36396: LD_INT 35
36398: PPUSH
36399: CALL_OW 67
// until UnitFilter ( ai_vehicles_attack [ 1 ] , [ f_ok ] ) = 0 or IsDead ( ai_depot [ 1 ] ) ;
36403: LD_EXP 23
36407: PUSH
36408: LD_INT 1
36410: ARRAY
36411: PPUSH
36412: LD_INT 50
36414: PUSH
36415: EMPTY
36416: LIST
36417: PPUSH
36418: CALL_OW 72
36422: PUSH
36423: LD_INT 0
36425: EQUAL
36426: PUSH
36427: LD_EXP 18
36431: PUSH
36432: LD_INT 1
36434: ARRAY
36435: PPUSH
36436: CALL_OW 301
36440: OR
36441: IFFALSE 36396
// wait ( Rand ( 0 0$10 , 0 0$30 ) ) ;
36443: LD_INT 350
36445: PPUSH
36446: LD_INT 1050
36448: PPUSH
36449: CALL_OW 12
36453: PPUSH
36454: CALL_OW 67
// DialogueOn ;
36458: CALL_OW 6
// Say ( Burlak , D2Bu1 ) ;
36462: LD_EXP 11
36466: PPUSH
36467: LD_STRING D2Bu1
36469: PPUSH
36470: CALL_OW 88
// if IsOk ( Erwin ) then
36474: LD_EXP 10
36478: PPUSH
36479: CALL_OW 302
36483: IFFALSE 36497
// Say ( Erwin , D2Er1 ) ;
36485: LD_EXP 10
36489: PPUSH
36490: LD_STRING D2Er1
36492: PPUSH
36493: CALL_OW 88
// Say ( Heike , D2H1 ) ;
36497: LD_EXP 7
36501: PPUSH
36502: LD_STRING D2H1
36504: PPUSH
36505: CALL_OW 88
// Say ( Burlak , D2Bu2 ) ;
36509: LD_EXP 11
36513: PPUSH
36514: LD_STRING D2Bu2
36516: PPUSH
36517: CALL_OW 88
// Say ( Heike , D2H2 ) ;
36521: LD_EXP 7
36525: PPUSH
36526: LD_STRING D2H2
36528: PPUSH
36529: CALL_OW 88
// Say ( Burlak , D2Bu3 ) ;
36533: LD_EXP 11
36537: PPUSH
36538: LD_STRING D2Bu3
36540: PPUSH
36541: CALL_OW 88
// dwait ( 0 0$0.2 ) ;
36545: LD_INT 7
36547: PPUSH
36548: CALL_OW 68
// case Query ( QSurrender ) of 1 :
36552: LD_STRING QSurrender
36554: PPUSH
36555: CALL_OW 97
36559: PUSH
36560: LD_INT 1
36562: DOUBLE
36563: EQUAL
36564: IFTRUE 36568
36566: GO 36609
36568: POP
// begin Say ( Heike , D21H1 ) ;
36569: LD_EXP 7
36573: PPUSH
36574: LD_STRING D21H1
36576: PPUSH
36577: CALL_OW 88
// Say ( Heike , D21H2 ) ;
36581: LD_EXP 7
36585: PPUSH
36586: LD_STRING D21H2
36588: PPUSH
36589: CALL_OW 88
// dwait ( 0 0$0.2 ) ;
36593: LD_INT 7
36595: PPUSH
36596: CALL_OW 68
// EndMission ( true ) ;
36600: LD_INT 1
36602: PPUSH
36603: CALL 44418 0 1
// end ; 2 :
36607: GO 36633
36609: LD_INT 2
36611: DOUBLE
36612: EQUAL
36613: IFTRUE 36617
36615: GO 36632
36617: POP
// Say ( Heike , D22H1 ) ; end ;
36618: LD_EXP 7
36622: PPUSH
36623: LD_STRING D22H1
36625: PPUSH
36626: CALL_OW 88
36630: GO 36633
36632: POP
// DialogueOff ;
36633: CALL_OW 7
// wait ( Rand ( 1 1$0 , 2 2$0 ) ) ;
36637: LD_INT 2100
36639: PPUSH
36640: LD_INT 4200
36642: PPUSH
36643: CALL_OW 12
36647: PPUSH
36648: CALL_OW 67
// for un in FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] ] ) do
36652: LD_ADDR_VAR 0 3
36656: PUSH
36657: LD_INT 22
36659: PUSH
36660: LD_EXP 2
36664: PUSH
36665: EMPTY
36666: LIST
36667: LIST
36668: PUSH
36669: LD_INT 21
36671: PUSH
36672: LD_INT 3
36674: PUSH
36675: EMPTY
36676: LIST
36677: LIST
36678: PUSH
36679: EMPTY
36680: LIST
36681: LIST
36682: PPUSH
36683: CALL_OW 69
36687: PUSH
36688: FOR_IN
36689: IFFALSE 36762
// begin temp_list = UnitsInside ( un ) diff ( [ Heike , Martin , Erwin , Louis ] ^ PlayerApes ) ;
36691: LD_ADDR_VAR 0 1
36695: PUSH
36696: LD_VAR 0 3
36700: PPUSH
36701: CALL_OW 313
36705: PUSH
36706: LD_EXP 7
36710: PUSH
36711: LD_EXP 8
36715: PUSH
36716: LD_EXP 10
36720: PUSH
36721: LD_EXP 9
36725: PUSH
36726: EMPTY
36727: LIST
36728: LIST
36729: LIST
36730: LIST
36731: PUSH
36732: CALL 35296 0 0
36736: ADD
36737: DIFF
36738: ST_TO_ADDR
// if temp_list >= 2 then
36739: LD_VAR 0 1
36743: PUSH
36744: LD_INT 2
36746: GREATEREQUAL
36747: IFFALSE 36753
// break else
36749: GO 36762
36751: GO 36760
// temp_list = [ ] ;
36753: LD_ADDR_VAR 0 1
36757: PUSH
36758: EMPTY
36759: ST_TO_ADDR
// end ;
36760: GO 36688
36762: POP
36763: POP
// if temp_list = 0 then
36764: LD_VAR 0 1
36768: PUSH
36769: LD_INT 0
36771: EQUAL
36772: IFFALSE 36850
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_ok ] ] ) diff ( [ Heike , Martin , Erwin , Louis ] ^ PlayerApes ) ;
36774: LD_ADDR_VAR 0 1
36778: PUSH
36779: LD_INT 22
36781: PUSH
36782: LD_EXP 2
36786: PUSH
36787: EMPTY
36788: LIST
36789: LIST
36790: PUSH
36791: LD_INT 21
36793: PUSH
36794: LD_INT 1
36796: PUSH
36797: EMPTY
36798: LIST
36799: LIST
36800: PUSH
36801: LD_INT 50
36803: PUSH
36804: EMPTY
36805: LIST
36806: PUSH
36807: EMPTY
36808: LIST
36809: LIST
36810: LIST
36811: PPUSH
36812: CALL_OW 69
36816: PUSH
36817: LD_EXP 7
36821: PUSH
36822: LD_EXP 8
36826: PUSH
36827: LD_EXP 10
36831: PUSH
36832: LD_EXP 9
36836: PUSH
36837: EMPTY
36838: LIST
36839: LIST
36840: LIST
36841: LIST
36842: PUSH
36843: CALL 35296 0 0
36847: ADD
36848: DIFF
36849: ST_TO_ADDR
// if temp_list >= 2 then
36850: LD_VAR 0 1
36854: PUSH
36855: LD_INT 2
36857: GREATEREQUAL
36858: IFFALSE 37036
// begin temp_list_2 = [ ] ;
36860: LD_ADDR_VAR 0 4
36864: PUSH
36865: EMPTY
36866: ST_TO_ADDR
// for un = 1 to 2 do
36867: LD_ADDR_VAR 0 3
36871: PUSH
36872: DOUBLE
36873: LD_INT 1
36875: DEC
36876: ST_TO_ADDR
36877: LD_INT 2
36879: PUSH
36880: FOR_TO
36881: IFFALSE 36936
// if GetSex ( temp_list [ un ] ) = sex_male then
36883: LD_VAR 0 1
36887: PUSH
36888: LD_VAR 0 3
36892: ARRAY
36893: PPUSH
36894: CALL_OW 258
36898: PUSH
36899: LD_INT 1
36901: EQUAL
36902: IFFALSE 36920
// temp_list_2 = temp_list_2 ^ M else
36904: LD_ADDR_VAR 0 4
36908: PUSH
36909: LD_VAR 0 4
36913: PUSH
36914: LD_STRING M
36916: ADD
36917: ST_TO_ADDR
36918: GO 36934
// temp_list_2 = temp_list_2 ^ F ;
36920: LD_ADDR_VAR 0 4
36924: PUSH
36925: LD_VAR 0 4
36929: PUSH
36930: LD_STRING F
36932: ADD
36933: ST_TO_ADDR
36934: GO 36880
36936: POP
36937: POP
// DialogueOn ;
36938: CALL_OW 6
// Say ( temp_list [ 1 ] , D3Some & temp_list_2 [ 1 ] & 1-1 ) ;
36942: LD_VAR 0 1
36946: PUSH
36947: LD_INT 1
36949: ARRAY
36950: PPUSH
36951: LD_STRING D3Some
36953: PUSH
36954: LD_VAR 0 4
36958: PUSH
36959: LD_INT 1
36961: ARRAY
36962: STR
36963: PUSH
36964: LD_STRING 1-1
36966: STR
36967: PPUSH
36968: CALL_OW 88
// Say ( temp_list [ 2 ] , D3Some & temp_list_2 [ 2 ] & 2-1 ) ;
36972: LD_VAR 0 1
36976: PUSH
36977: LD_INT 2
36979: ARRAY
36980: PPUSH
36981: LD_STRING D3Some
36983: PUSH
36984: LD_VAR 0 4
36988: PUSH
36989: LD_INT 2
36991: ARRAY
36992: STR
36993: PUSH
36994: LD_STRING 2-1
36996: STR
36997: PPUSH
36998: CALL_OW 88
// Say ( temp_list [ 1 ] , D3Some & temp_list_2 [ 1 ] & 1-2 ) ;
37002: LD_VAR 0 1
37006: PUSH
37007: LD_INT 1
37009: ARRAY
37010: PPUSH
37011: LD_STRING D3Some
37013: PUSH
37014: LD_VAR 0 4
37018: PUSH
37019: LD_INT 1
37021: ARRAY
37022: STR
37023: PUSH
37024: LD_STRING 1-2
37026: STR
37027: PPUSH
37028: CALL_OW 88
// DialogueOff ;
37032: CALL_OW 7
// end ; wait ( Rand ( 9 9$0 , 10 10$0 ) ) ;
37036: LD_INT 18900
37038: PPUSH
37039: LD_INT 21000
37041: PPUSH
37042: CALL_OW 12
37046: PPUSH
37047: CALL_OW 67
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_class , class_scientistic ] , [ f_ok ] ] ) diff [ Heike , Martin , Erwin , Louis ] ;
37051: LD_ADDR_VAR 0 1
37055: PUSH
37056: LD_INT 22
37058: PUSH
37059: LD_EXP 2
37063: PUSH
37064: EMPTY
37065: LIST
37066: LIST
37067: PUSH
37068: LD_INT 25
37070: PUSH
37071: LD_INT 4
37073: PUSH
37074: EMPTY
37075: LIST
37076: LIST
37077: PUSH
37078: LD_INT 50
37080: PUSH
37081: EMPTY
37082: LIST
37083: PUSH
37084: EMPTY
37085: LIST
37086: LIST
37087: LIST
37088: PPUSH
37089: CALL_OW 69
37093: PUSH
37094: LD_EXP 7
37098: PUSH
37099: LD_EXP 8
37103: PUSH
37104: LD_EXP 10
37108: PUSH
37109: LD_EXP 9
37113: PUSH
37114: EMPTY
37115: LIST
37116: LIST
37117: LIST
37118: LIST
37119: DIFF
37120: ST_TO_ADDR
// if temp_list > 0 then
37121: LD_VAR 0 1
37125: PUSH
37126: LD_INT 0
37128: GREATER
37129: IFFALSE 37157
// temp_unit = temp_list [ Rand ( 1 , temp_list ) ] else
37131: LD_ADDR_VAR 0 2
37135: PUSH
37136: LD_VAR 0 1
37140: PUSH
37141: LD_INT 1
37143: PPUSH
37144: LD_VAR 0 1
37148: PPUSH
37149: CALL_OW 12
37153: ARRAY
37154: ST_TO_ADDR
37155: GO 37277
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_ok ] ] ) diff ( [ Heike , Martin , Erwin , Louis ] ^ PlayerApes ) ;
37157: LD_ADDR_VAR 0 1
37161: PUSH
37162: LD_INT 22
37164: PUSH
37165: LD_EXP 2
37169: PUSH
37170: EMPTY
37171: LIST
37172: LIST
37173: PUSH
37174: LD_INT 21
37176: PUSH
37177: LD_INT 1
37179: PUSH
37180: EMPTY
37181: LIST
37182: LIST
37183: PUSH
37184: LD_INT 50
37186: PUSH
37187: EMPTY
37188: LIST
37189: PUSH
37190: EMPTY
37191: LIST
37192: LIST
37193: LIST
37194: PPUSH
37195: CALL_OW 69
37199: PUSH
37200: LD_EXP 7
37204: PUSH
37205: LD_EXP 8
37209: PUSH
37210: LD_EXP 10
37214: PUSH
37215: LD_EXP 9
37219: PUSH
37220: EMPTY
37221: LIST
37222: LIST
37223: LIST
37224: LIST
37225: PUSH
37226: CALL 35296 0 0
37230: ADD
37231: DIFF
37232: ST_TO_ADDR
// if temp_list > 0 then
37233: LD_VAR 0 1
37237: PUSH
37238: LD_INT 0
37240: GREATER
37241: IFFALSE 37269
// temp_unit = temp_list [ Rand ( 1 , temp_list ) ] else
37243: LD_ADDR_VAR 0 2
37247: PUSH
37248: LD_VAR 0 1
37252: PUSH
37253: LD_INT 1
37255: PPUSH
37256: LD_VAR 0 1
37260: PPUSH
37261: CALL_OW 12
37265: ARRAY
37266: ST_TO_ADDR
37267: GO 37277
// temp_unit = 0 ;
37269: LD_ADDR_VAR 0 2
37273: PUSH
37274: LD_INT 0
37276: ST_TO_ADDR
// end ; if temp_unit > 0 then
37277: LD_VAR 0 2
37281: PUSH
37282: LD_INT 0
37284: GREATER
37285: IFFALSE 37480
// begin if GetSex ( temp_unit ) = sex_male then
37287: LD_VAR 0 2
37291: PPUSH
37292: CALL_OW 258
37296: PUSH
37297: LD_INT 1
37299: EQUAL
37300: IFFALSE 37312
// un = M else
37302: LD_ADDR_VAR 0 3
37306: PUSH
37307: LD_STRING M
37309: ST_TO_ADDR
37310: GO 37320
// un = F ;
37312: LD_ADDR_VAR 0 3
37316: PUSH
37317: LD_STRING F
37319: ST_TO_ADDR
// DialogueOn ;
37320: CALL_OW 6
// Say ( temp_unit , D4Sci & un & 1 ) ;
37324: LD_VAR 0 2
37328: PPUSH
37329: LD_STRING D4Sci
37331: PUSH
37332: LD_VAR 0 3
37336: STR
37337: PUSH
37338: LD_STRING 1
37340: STR
37341: PPUSH
37342: CALL_OW 88
// SayRadio ( Yashin , D4Ya1 ) ;
37346: LD_EXP 12
37350: PPUSH
37351: LD_STRING D4Ya1
37353: PPUSH
37354: CALL_OW 94
// SayRadio ( Burlak , D4Bu1 ) ;
37358: LD_EXP 11
37362: PPUSH
37363: LD_STRING D4Bu1
37365: PPUSH
37366: CALL_OW 94
// SayRadio ( Yashin , D4Ya2 ) ;
37370: LD_EXP 12
37374: PPUSH
37375: LD_STRING D4Ya2
37377: PPUSH
37378: CALL_OW 94
// Say ( Heike , D4H1 ) ;
37382: LD_EXP 7
37386: PPUSH
37387: LD_STRING D4H1
37389: PPUSH
37390: CALL_OW 88
// Say ( temp_unit , D4Sci & un & 2 ) ;
37394: LD_VAR 0 2
37398: PPUSH
37399: LD_STRING D4Sci
37401: PUSH
37402: LD_VAR 0 3
37406: STR
37407: PUSH
37408: LD_STRING 2
37410: STR
37411: PPUSH
37412: CALL_OW 88
// Say ( Heike , D4H2 ) ;
37416: LD_EXP 7
37420: PPUSH
37421: LD_STRING D4H2
37423: PPUSH
37424: CALL_OW 88
// Say ( temp_unit , D4Sci & un & 3 ) ;
37428: LD_VAR 0 2
37432: PPUSH
37433: LD_STRING D4Sci
37435: PUSH
37436: LD_VAR 0 3
37440: STR
37441: PUSH
37442: LD_STRING 3
37444: STR
37445: PPUSH
37446: CALL_OW 88
// Say ( Heike , D4H3 ) ;
37450: LD_EXP 7
37454: PPUSH
37455: LD_STRING D4H3
37457: PPUSH
37458: CALL_OW 88
// DialogueOff ;
37462: CALL_OW 7
// wait ( 0 0$0.2 ) ;
37466: LD_INT 7
37468: PPUSH
37469: CALL_OW 67
// ChangeMissionObjectives ( MKillYashin ) ;
37473: LD_STRING MKillYashin
37475: PPUSH
37476: CALL_OW 337
// end ; yashin_begin = true ;
37480: LD_ADDR_EXP 64
37484: PUSH
37485: LD_INT 1
37487: ST_TO_ADDR
// wait ( Rand ( 9 9$0 , 10 10$0 ) ) ;
37488: LD_INT 18900
37490: PPUSH
37491: LD_INT 21000
37493: PPUSH
37494: CALL_OW 12
37498: PPUSH
37499: CALL_OW 67
// PlaceUnitXYR ( Martin , 73 , 131 , 5 , true ) ;
37503: LD_EXP 8
37507: PPUSH
37508: LD_INT 73
37510: PPUSH
37511: LD_INT 131
37513: PPUSH
37514: LD_INT 5
37516: PPUSH
37517: LD_INT 1
37519: PPUSH
37520: CALL_OW 50
// DoNotAttack ( nature , Martin ) ;
37524: LD_EXP 4
37528: PPUSH
37529: LD_EXP 8
37533: PPUSH
37534: CALL_OW 471
// wait ( 0 0$6 ) ;
37538: LD_INT 210
37540: PPUSH
37541: CALL_OW 67
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_class , class_scientistic ] , [ f_ok ] ] ) diff [ Heike , Martin , Erwin , Louis ] ;
37545: LD_ADDR_VAR 0 1
37549: PUSH
37550: LD_INT 22
37552: PUSH
37553: LD_EXP 2
37557: PUSH
37558: EMPTY
37559: LIST
37560: LIST
37561: PUSH
37562: LD_INT 25
37564: PUSH
37565: LD_INT 4
37567: PUSH
37568: EMPTY
37569: LIST
37570: LIST
37571: PUSH
37572: LD_INT 50
37574: PUSH
37575: EMPTY
37576: LIST
37577: PUSH
37578: EMPTY
37579: LIST
37580: LIST
37581: LIST
37582: PPUSH
37583: CALL_OW 69
37587: PUSH
37588: LD_EXP 7
37592: PUSH
37593: LD_EXP 8
37597: PUSH
37598: LD_EXP 10
37602: PUSH
37603: LD_EXP 9
37607: PUSH
37608: EMPTY
37609: LIST
37610: LIST
37611: LIST
37612: LIST
37613: DIFF
37614: ST_TO_ADDR
// if temp_list > 0 then
37615: LD_VAR 0 1
37619: PUSH
37620: LD_INT 0
37622: GREATER
37623: IFFALSE 37651
// temp_unit = temp_list [ Rand ( 1 , temp_list ) ] else
37625: LD_ADDR_VAR 0 2
37629: PUSH
37630: LD_VAR 0 1
37634: PUSH
37635: LD_INT 1
37637: PPUSH
37638: LD_VAR 0 1
37642: PPUSH
37643: CALL_OW 12
37647: ARRAY
37648: ST_TO_ADDR
37649: GO 37771
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_ok ] ] ) diff ( [ Heike , Martin , Erwin , Louis ] ^ PlayerApes ) ;
37651: LD_ADDR_VAR 0 1
37655: PUSH
37656: LD_INT 22
37658: PUSH
37659: LD_EXP 2
37663: PUSH
37664: EMPTY
37665: LIST
37666: LIST
37667: PUSH
37668: LD_INT 21
37670: PUSH
37671: LD_INT 1
37673: PUSH
37674: EMPTY
37675: LIST
37676: LIST
37677: PUSH
37678: LD_INT 50
37680: PUSH
37681: EMPTY
37682: LIST
37683: PUSH
37684: EMPTY
37685: LIST
37686: LIST
37687: LIST
37688: PPUSH
37689: CALL_OW 69
37693: PUSH
37694: LD_EXP 7
37698: PUSH
37699: LD_EXP 8
37703: PUSH
37704: LD_EXP 10
37708: PUSH
37709: LD_EXP 9
37713: PUSH
37714: EMPTY
37715: LIST
37716: LIST
37717: LIST
37718: LIST
37719: PUSH
37720: CALL 35296 0 0
37724: ADD
37725: DIFF
37726: ST_TO_ADDR
// if temp_list > 0 then
37727: LD_VAR 0 1
37731: PUSH
37732: LD_INT 0
37734: GREATER
37735: IFFALSE 37763
// temp_unit = temp_list [ Rand ( 1 , temp_list ) ] else
37737: LD_ADDR_VAR 0 2
37741: PUSH
37742: LD_VAR 0 1
37746: PUSH
37747: LD_INT 1
37749: PPUSH
37750: LD_VAR 0 1
37754: PPUSH
37755: CALL_OW 12
37759: ARRAY
37760: ST_TO_ADDR
37761: GO 37771
// temp_unit = 0 ;
37763: LD_ADDR_VAR 0 2
37767: PUSH
37768: LD_INT 0
37770: ST_TO_ADDR
// end ; DialogueOn ;
37771: CALL_OW 6
// SayRadio ( Martin , D5Martin1 ) ;
37775: LD_EXP 8
37779: PPUSH
37780: LD_STRING D5Martin1
37782: PPUSH
37783: CALL_OW 94
// Say ( Heike , D5H1 ) ;
37787: LD_EXP 7
37791: PPUSH
37792: LD_STRING D5H1
37794: PPUSH
37795: CALL_OW 88
// SayRadio ( Martin , D5Martin2 ) ;
37799: LD_EXP 8
37803: PPUSH
37804: LD_STRING D5Martin2
37806: PPUSH
37807: CALL_OW 94
// Say ( Heike , D5H2 ) ;
37811: LD_EXP 7
37815: PPUSH
37816: LD_STRING D5H2
37818: PPUSH
37819: CALL_OW 88
// SayRadio ( Martin , D5Martin3 ) ;
37823: LD_EXP 8
37827: PPUSH
37828: LD_STRING D5Martin3
37830: PPUSH
37831: CALL_OW 94
// if temp_unit > 0 then
37835: LD_VAR 0 2
37839: PUSH
37840: LD_INT 0
37842: GREATER
37843: IFFALSE 37886
// if GetSex ( temp_unit ) = sex_male then
37845: LD_VAR 0 2
37849: PPUSH
37850: CALL_OW 258
37854: PUSH
37855: LD_INT 1
37857: EQUAL
37858: IFFALSE 37874
// Say ( temp_unit , D5SciM1 ) else
37860: LD_VAR 0 2
37864: PPUSH
37865: LD_STRING D5SciM1
37867: PPUSH
37868: CALL_OW 88
37872: GO 37886
// Say ( temp_unit , D5SciF1 ) ;
37874: LD_VAR 0 2
37878: PPUSH
37879: LD_STRING D5SciF1
37881: PPUSH
37882: CALL_OW 88
// DialogueOff ;
37886: CALL_OW 7
// martin_begin = true ;
37890: LD_ADDR_EXP 65
37894: PUSH
37895: LD_INT 1
37897: ST_TO_ADDR
// RevealFogArea ( you , martin_area ) ;
37898: LD_EXP 2
37902: PPUSH
37903: LD_INT 11
37905: PPUSH
37906: CALL_OW 332
// wait ( Rand ( 13 13$0 , 15 15$0 ) ) ;
37910: LD_INT 27300
37912: PPUSH
37913: LD_INT 31500
37915: PPUSH
37916: CALL_OW 12
37920: PPUSH
37921: CALL_OW 67
// repeat wait ( 0 0$1 ) ;
37925: LD_INT 35
37927: PPUSH
37928: CALL_OW 67
// until ai_vehicles_attack [ 1 ] > 0 or IsDead ( ai_depot [ 1 ] ) ;
37932: LD_EXP 23
37936: PUSH
37937: LD_INT 1
37939: ARRAY
37940: PUSH
37941: LD_INT 0
37943: GREATER
37944: PUSH
37945: LD_EXP 18
37949: PUSH
37950: LD_INT 1
37952: ARRAY
37953: PPUSH
37954: CALL_OW 301
37958: OR
37959: IFFALSE 37925
// repeat wait ( 0 0$1 ) ;
37961: LD_INT 35
37963: PPUSH
37964: CALL_OW 67
// until UnitFilter ( ai_vehicles_attack [ 1 ] , [ f_ok ] ) = 0 or IsDead ( ai_depot [ 1 ] ) ;
37968: LD_EXP 23
37972: PUSH
37973: LD_INT 1
37975: ARRAY
37976: PPUSH
37977: LD_INT 50
37979: PUSH
37980: EMPTY
37981: LIST
37982: PPUSH
37983: CALL_OW 72
37987: PUSH
37988: LD_INT 0
37990: EQUAL
37991: PUSH
37992: LD_EXP 18
37996: PUSH
37997: LD_INT 1
37999: ARRAY
38000: PPUSH
38001: CALL_OW 301
38005: OR
38006: IFFALSE 37961
// wait ( Rand ( 0 0$10 , 0 0$30 ) ) ;
38008: LD_INT 350
38010: PPUSH
38011: LD_INT 1050
38013: PPUSH
38014: CALL_OW 12
38018: PPUSH
38019: CALL_OW 67
// DialogueOn ;
38023: CALL_OW 6
// Say ( Burlak , D6Bu1 ) ;
38027: LD_EXP 11
38031: PPUSH
38032: LD_STRING D6Bu1
38034: PPUSH
38035: CALL_OW 88
// dwait ( 0 0$0.2 ) ;
38039: LD_INT 7
38041: PPUSH
38042: CALL_OW 68
// case Query ( QSurrender ) of 1 :
38046: LD_STRING QSurrender
38048: PPUSH
38049: CALL_OW 97
38053: PUSH
38054: LD_INT 1
38056: DOUBLE
38057: EQUAL
38058: IFTRUE 38062
38060: GO 38103
38062: POP
// begin Say ( Heike , D61H1 ) ;
38063: LD_EXP 7
38067: PPUSH
38068: LD_STRING D61H1
38070: PPUSH
38071: CALL_OW 88
// Say ( Heike , D61H2 ) ;
38075: LD_EXP 7
38079: PPUSH
38080: LD_STRING D61H2
38082: PPUSH
38083: CALL_OW 88
// dwait ( 0 0$0.2 ) ;
38087: LD_INT 7
38089: PPUSH
38090: CALL_OW 68
// EndMission ( true ) ;
38094: LD_INT 1
38096: PPUSH
38097: CALL 44418 0 1
// end ; 2 :
38101: GO 38139
38103: LD_INT 2
38105: DOUBLE
38106: EQUAL
38107: IFTRUE 38111
38109: GO 38138
38111: POP
// begin Say ( Heike , D62H1 ) ;
38112: LD_EXP 7
38116: PPUSH
38117: LD_STRING D62H1
38119: PPUSH
38120: CALL_OW 88
// Say ( Burlak , D62Bu1 ) ;
38124: LD_EXP 11
38128: PPUSH
38129: LD_STRING D62Bu1
38131: PPUSH
38132: CALL_OW 88
// end ; end ;
38136: GO 38139
38138: POP
// DialogueOff ;
38139: CALL_OW 7
// wait ( Rand ( 0 0$30 , 1 1$0 ) ) ;
38143: LD_INT 1050
38145: PPUSH
38146: LD_INT 2100
38148: PPUSH
38149: CALL_OW 12
38153: PPUSH
38154: CALL_OW 67
// if not IsDead ( Louis ) then
38158: LD_EXP 9
38162: PPUSH
38163: CALL_OW 301
38167: NOT
38168: IFFALSE 38542
// begin for un in FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] ] ) do
38170: LD_ADDR_VAR 0 3
38174: PUSH
38175: LD_INT 22
38177: PUSH
38178: LD_EXP 2
38182: PUSH
38183: EMPTY
38184: LIST
38185: LIST
38186: PUSH
38187: LD_INT 21
38189: PUSH
38190: LD_INT 3
38192: PUSH
38193: EMPTY
38194: LIST
38195: LIST
38196: PUSH
38197: EMPTY
38198: LIST
38199: LIST
38200: PPUSH
38201: CALL_OW 69
38205: PUSH
38206: FOR_IN
38207: IFFALSE 38286
// begin temp_list = UnitsInside ( un ) diff ( [ Heike , Martin , Erwin ] ^ PlayerApes ) ;
38209: LD_ADDR_VAR 0 1
38213: PUSH
38214: LD_VAR 0 3
38218: PPUSH
38219: CALL_OW 313
38223: PUSH
38224: LD_EXP 7
38228: PUSH
38229: LD_EXP 8
38233: PUSH
38234: LD_EXP 10
38238: PUSH
38239: EMPTY
38240: LIST
38241: LIST
38242: LIST
38243: PUSH
38244: CALL 35296 0 0
38248: ADD
38249: DIFF
38250: ST_TO_ADDR
// if temp_list >= 3 and Louis in temp_list then
38251: LD_VAR 0 1
38255: PUSH
38256: LD_INT 3
38258: GREATEREQUAL
38259: PUSH
38260: LD_EXP 9
38264: PUSH
38265: LD_VAR 0 1
38269: IN
38270: AND
38271: IFFALSE 38277
// break else
38273: GO 38286
38275: GO 38284
// temp_list = [ ] ;
38277: LD_ADDR_VAR 0 1
38281: PUSH
38282: EMPTY
38283: ST_TO_ADDR
// end ;
38284: GO 38206
38286: POP
38287: POP
// if temp_list = 0 then
38288: LD_VAR 0 1
38292: PUSH
38293: LD_INT 0
38295: EQUAL
38296: IFFALSE 38374
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_ok ] ] ) diff ( [ Heike , Martin , Erwin , Louis ] ^ PlayerApes ) ;
38298: LD_ADDR_VAR 0 1
38302: PUSH
38303: LD_INT 22
38305: PUSH
38306: LD_EXP 2
38310: PUSH
38311: EMPTY
38312: LIST
38313: LIST
38314: PUSH
38315: LD_INT 21
38317: PUSH
38318: LD_INT 1
38320: PUSH
38321: EMPTY
38322: LIST
38323: LIST
38324: PUSH
38325: LD_INT 50
38327: PUSH
38328: EMPTY
38329: LIST
38330: PUSH
38331: EMPTY
38332: LIST
38333: LIST
38334: LIST
38335: PPUSH
38336: CALL_OW 69
38340: PUSH
38341: LD_EXP 7
38345: PUSH
38346: LD_EXP 8
38350: PUSH
38351: LD_EXP 10
38355: PUSH
38356: LD_EXP 9
38360: PUSH
38361: EMPTY
38362: LIST
38363: LIST
38364: LIST
38365: LIST
38366: PUSH
38367: CALL 35296 0 0
38371: ADD
38372: DIFF
38373: ST_TO_ADDR
// if temp_list >= 2 then
38374: LD_VAR 0 1
38378: PUSH
38379: LD_INT 2
38381: GREATEREQUAL
38382: IFFALSE 38542
// begin temp_list_2 = [ ] ;
38384: LD_ADDR_VAR 0 4
38388: PUSH
38389: EMPTY
38390: ST_TO_ADDR
// for un = 1 to 2 do
38391: LD_ADDR_VAR 0 3
38395: PUSH
38396: DOUBLE
38397: LD_INT 1
38399: DEC
38400: ST_TO_ADDR
38401: LD_INT 2
38403: PUSH
38404: FOR_TO
38405: IFFALSE 38460
// if GetSex ( temp_list [ un ] ) = sex_male then
38407: LD_VAR 0 1
38411: PUSH
38412: LD_VAR 0 3
38416: ARRAY
38417: PPUSH
38418: CALL_OW 258
38422: PUSH
38423: LD_INT 1
38425: EQUAL
38426: IFFALSE 38444
// temp_list_2 = temp_list_2 ^ M else
38428: LD_ADDR_VAR 0 4
38432: PUSH
38433: LD_VAR 0 4
38437: PUSH
38438: LD_STRING M
38440: ADD
38441: ST_TO_ADDR
38442: GO 38458
// temp_list_2 = temp_list_2 ^ F ;
38444: LD_ADDR_VAR 0 4
38448: PUSH
38449: LD_VAR 0 4
38453: PUSH
38454: LD_STRING F
38456: ADD
38457: ST_TO_ADDR
38458: GO 38404
38460: POP
38461: POP
// DialogueOn ;
38462: CALL_OW 6
// ForceSay ( Louis , D7Lo1 ) ;
38466: LD_EXP 9
38470: PPUSH
38471: LD_STRING D7Lo1
38473: PPUSH
38474: CALL_OW 91
// Say ( temp_list [ 1 ] , D7Some & temp_list_2 [ 1 ] & 1-1 ) ;
38478: LD_VAR 0 1
38482: PUSH
38483: LD_INT 1
38485: ARRAY
38486: PPUSH
38487: LD_STRING D7Some
38489: PUSH
38490: LD_VAR 0 4
38494: PUSH
38495: LD_INT 1
38497: ARRAY
38498: STR
38499: PUSH
38500: LD_STRING 1-1
38502: STR
38503: PPUSH
38504: CALL_OW 88
// Say ( temp_list [ 2 ] , D7Some & temp_list_2 [ 2 ] & 2-1 ) ;
38508: LD_VAR 0 1
38512: PUSH
38513: LD_INT 2
38515: ARRAY
38516: PPUSH
38517: LD_STRING D7Some
38519: PUSH
38520: LD_VAR 0 4
38524: PUSH
38525: LD_INT 2
38527: ARRAY
38528: STR
38529: PUSH
38530: LD_STRING 2-1
38532: STR
38533: PPUSH
38534: CALL_OW 88
// DialogueOff ;
38538: CALL_OW 7
// end ; end ; wait ( Rand ( 4 4$0 , 5 5$0 ) ) ;
38542: LD_INT 8400
38544: PPUSH
38545: LD_INT 10500
38547: PPUSH
38548: CALL_OW 12
38552: PPUSH
38553: CALL_OW 67
// repeat wait ( 0 0$1 ) ;
38557: LD_INT 35
38559: PPUSH
38560: CALL_OW 67
// until ai_vehicles_attack [ 1 ] > 0 or IsDead ( ai_depot [ 1 ] ) ;
38564: LD_EXP 23
38568: PUSH
38569: LD_INT 1
38571: ARRAY
38572: PUSH
38573: LD_INT 0
38575: GREATER
38576: PUSH
38577: LD_EXP 18
38581: PUSH
38582: LD_INT 1
38584: ARRAY
38585: PPUSH
38586: CALL_OW 301
38590: OR
38591: IFFALSE 38557
// repeat wait ( 0 0$1 ) ;
38593: LD_INT 35
38595: PPUSH
38596: CALL_OW 67
// until UnitFilter ( ai_vehicles_attack [ 1 ] , [ f_ok ] ) = 0 or IsDead ( ai_depot [ 1 ] ) ;
38600: LD_EXP 23
38604: PUSH
38605: LD_INT 1
38607: ARRAY
38608: PPUSH
38609: LD_INT 50
38611: PUSH
38612: EMPTY
38613: LIST
38614: PPUSH
38615: CALL_OW 72
38619: PUSH
38620: LD_INT 0
38622: EQUAL
38623: PUSH
38624: LD_EXP 18
38628: PUSH
38629: LD_INT 1
38631: ARRAY
38632: PPUSH
38633: CALL_OW 301
38637: OR
38638: IFFALSE 38593
// wait ( Rand ( 0 0$20 , 0 0$40 ) ) ;
38640: LD_INT 700
38642: PPUSH
38643: LD_INT 1400
38645: PPUSH
38646: CALL_OW 12
38650: PPUSH
38651: CALL_OW 67
// deserter_begin = true ;
38655: LD_ADDR_EXP 66
38659: PUSH
38660: LD_INT 1
38662: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
38663: LD_INT 35
38665: PPUSH
38666: CALL_OW 67
// until deserters_are_done ;
38670: LD_EXP 72
38674: IFFALSE 38663
// wait ( Rand ( 4 4$0 , 5 5$0 ) ) ;
38676: LD_INT 8400
38678: PPUSH
38679: LD_INT 10500
38681: PPUSH
38682: CALL_OW 12
38686: PPUSH
38687: CALL_OW 67
// final_battle_begin = true ;
38691: LD_ADDR_EXP 69
38695: PUSH
38696: LD_INT 1
38698: ST_TO_ADDR
// end ;
38699: PPOPN 4
38701: END
// every 0 0$1 + 0 0$0.3 trigger yashin_begin do var yashin_vehicle , rounds , target_base , wait_time , veh_arg , going_to_exit , i ;
38702: LD_EXP 64
38706: IFFALSE 39539
38708: GO 38710
38710: DISABLE
38711: LD_INT 0
38713: PPUSH
38714: PPUSH
38715: PPUSH
38716: PPUSH
38717: PPUSH
38718: PPUSH
38719: PPUSH
// begin wait ( Rand ( 2 2$30 , 3 3$30 ) ) ;
38720: LD_INT 5250
38722: PPUSH
38723: LD_INT 7350
38725: PPUSH
38726: CALL_OW 12
38730: PPUSH
38731: CALL_OW 67
// SetDir ( Yashin , 1 ) ;
38735: LD_EXP 12
38739: PPUSH
38740: LD_INT 1
38742: PPUSH
38743: CALL_OW 233
// repeat wait ( 0 0$1 ) ;
38747: LD_INT 35
38749: PPUSH
38750: CALL_OW 67
// until PlaceUnitXYR ( Yashin , 66 , 130 , 1 , false ) ;
38754: LD_EXP 12
38758: PPUSH
38759: LD_INT 66
38761: PPUSH
38762: LD_INT 130
38764: PPUSH
38765: LD_INT 1
38767: PPUSH
38768: LD_INT 0
38770: PPUSH
38771: CALL_OW 50
38775: IFFALSE 38747
// DoNotAttack ( nature , Yashin ) ;
38777: LD_EXP 4
38781: PPUSH
38782: LD_EXP 12
38786: PPUSH
38787: CALL_OW 471
// rounds = [ 5 , 4 , 3 ] [ difficulty ] ;
38791: LD_ADDR_VAR 0 2
38795: PUSH
38796: LD_INT 5
38798: PUSH
38799: LD_INT 4
38801: PUSH
38802: LD_INT 3
38804: PUSH
38805: EMPTY
38806: LIST
38807: LIST
38808: LIST
38809: PUSH
38810: LD_OWVAR 67
38814: ARRAY
38815: ST_TO_ADDR
// target_base = 1 ;
38816: LD_ADDR_VAR 0 3
38820: PUSH
38821: LD_INT 1
38823: ST_TO_ADDR
// yashin_vehicle = 0 ;
38824: LD_ADDR_VAR 0 1
38828: PUSH
38829: LD_INT 0
38831: ST_TO_ADDR
// going_to_exit = false ;
38832: LD_ADDR_VAR 0 6
38836: PUSH
38837: LD_INT 0
38839: ST_TO_ADDR
// repeat wait_time = 0 0$0 ;
38840: LD_ADDR_VAR 0 4
38844: PUSH
38845: LD_INT 0
38847: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
38848: LD_INT 35
38850: PPUSH
38851: CALL_OW 67
// if IsDead ( Yashin ) then
38855: LD_EXP 12
38859: PPUSH
38860: CALL_OW 301
38864: IFFALSE 38868
// exit ;
38866: GO 39539
// if IsInUnit ( Yashin ) = 0 then
38868: LD_EXP 12
38872: PPUSH
38873: CALL_OW 310
38877: PUSH
38878: LD_INT 0
38880: EQUAL
38881: IFFALSE 38967
// begin for i in FilterAllUnits ( [ [ f_side , nature ] , [ f_dist , Yashin , 4 ] ] ) do
38883: LD_ADDR_VAR 0 7
38887: PUSH
38888: LD_INT 22
38890: PUSH
38891: LD_EXP 4
38895: PUSH
38896: EMPTY
38897: LIST
38898: LIST
38899: PUSH
38900: LD_INT 91
38902: PUSH
38903: LD_EXP 12
38907: PUSH
38908: LD_INT 4
38910: PUSH
38911: EMPTY
38912: LIST
38913: LIST
38914: LIST
38915: PUSH
38916: EMPTY
38917: LIST
38918: LIST
38919: PPUSH
38920: CALL_OW 69
38924: PUSH
38925: FOR_IN
38926: IFFALSE 38965
// AI_GetAwayFromXY ( i , GetX ( Yashin ) , GetY ( Yashin ) , 4 , false ) ;
38928: LD_VAR 0 7
38932: PPUSH
38933: LD_EXP 12
38937: PPUSH
38938: CALL_OW 250
38942: PPUSH
38943: LD_EXP 12
38947: PPUSH
38948: CALL_OW 251
38952: PPUSH
38953: LD_INT 4
38955: PPUSH
38956: LD_INT 0
38958: PPUSH
38959: CALL 12353 0 5
38963: GO 38925
38965: POP
38966: POP
// end ; veh_arg = not IsOk ( yashin_vehicle ) or yashin_vehicle = 0 ;
38967: LD_ADDR_VAR 0 5
38971: PUSH
38972: LD_VAR 0 1
38976: PPUSH
38977: CALL_OW 302
38981: NOT
38982: PUSH
38983: LD_VAR 0 1
38987: PUSH
38988: LD_INT 0
38990: EQUAL
38991: OR
38992: ST_TO_ADDR
// if veh_arg then
38993: LD_VAR 0 5
38997: IFFALSE 39015
// begin target_base = 1 ;
38999: LD_ADDR_VAR 0 3
39003: PUSH
39004: LD_INT 1
39006: ST_TO_ADDR
// going_to_exit = false ;
39007: LD_ADDR_VAR 0 6
39011: PUSH
39012: LD_INT 0
39014: ST_TO_ADDR
// end ; if going_to_exit then
39015: LD_VAR 0 6
39019: IFFALSE 39072
// begin if IsInArea ( Yashin , yashin_exit_area ) then
39021: LD_EXP 12
39025: PPUSH
39026: LD_INT 12
39028: PPUSH
39029: CALL_OW 308
39033: IFFALSE 39055
// begin RemoveUnit ( Yashin ) ;
39035: LD_EXP 12
39039: PPUSH
39040: CALL_OW 64
// RemoveUnit ( yashin_vehicle ) ;
39044: LD_VAR 0 1
39048: PPUSH
39049: CALL_OW 64
// exit ;
39053: GO 39539
// end ; ComMoveXY ( Yashin , 70 , 137 ) ;
39055: LD_EXP 12
39059: PPUSH
39060: LD_INT 70
39062: PPUSH
39063: LD_INT 137
39065: PPUSH
39066: CALL_OW 111
// end else
39070: GO 39290
// begin if GetDistUnitXY ( Yashin , ai_human_pullback_hex [ target_base ] [ 1 ] , ai_human_pullback_hex [ target_base ] [ 2 ] ) < 6 then
39072: LD_EXP 12
39076: PPUSH
39077: LD_EXP 24
39081: PUSH
39082: LD_VAR 0 3
39086: ARRAY
39087: PUSH
39088: LD_INT 1
39090: ARRAY
39091: PPUSH
39092: LD_EXP 24
39096: PUSH
39097: LD_VAR 0 3
39101: ARRAY
39102: PUSH
39103: LD_INT 2
39105: ARRAY
39106: PPUSH
39107: CALL_OW 297
39111: PUSH
39112: LD_INT 6
39114: LESS
39115: IFFALSE 39251
// begin wait_time = wait_time + 0 0$1 ;
39117: LD_ADDR_VAR 0 4
39121: PUSH
39122: LD_VAR 0 4
39126: PUSH
39127: LD_INT 35
39129: PLUS
39130: ST_TO_ADDR
// if wait_time >= 1 1$0 then
39131: LD_VAR 0 4
39135: PUSH
39136: LD_INT 2100
39138: GREATEREQUAL
39139: IFFALSE 39249
// begin if not veh_arg and target_base = 1 then
39141: LD_VAR 0 5
39145: NOT
39146: PUSH
39147: LD_VAR 0 3
39151: PUSH
39152: LD_INT 1
39154: EQUAL
39155: AND
39156: IFFALSE 39172
// rounds = rounds - 1 ;
39158: LD_ADDR_VAR 0 2
39162: PUSH
39163: LD_VAR 0 2
39167: PUSH
39168: LD_INT 1
39170: MINUS
39171: ST_TO_ADDR
// if rounds <= 0 then
39172: LD_VAR 0 2
39176: PUSH
39177: LD_INT 0
39179: LESSEQUAL
39180: IFFALSE 39192
// going_to_exit = true else
39182: LD_ADDR_VAR 0 6
39186: PUSH
39187: LD_INT 1
39189: ST_TO_ADDR
39190: GO 39200
// going_to_exit = false ;
39192: LD_ADDR_VAR 0 6
39196: PUSH
39197: LD_INT 0
39199: ST_TO_ADDR
// if 2 in ai_bases then
39200: LD_INT 2
39202: PUSH
39203: LD_EXP 40
39207: IN
39208: IFFALSE 39233
// target_base = [ 2 , 1 ] [ target_base ] else
39210: LD_ADDR_VAR 0 3
39214: PUSH
39215: LD_INT 2
39217: PUSH
39218: LD_INT 1
39220: PUSH
39221: EMPTY
39222: LIST
39223: LIST
39224: PUSH
39225: LD_VAR 0 3
39229: ARRAY
39230: ST_TO_ADDR
39231: GO 39241
// target_base = 1 ;
39233: LD_ADDR_VAR 0 3
39237: PUSH
39238: LD_INT 1
39240: ST_TO_ADDR
// if veh_arg then
39241: LD_VAR 0 5
39245: IFFALSE 39249
// break ;
39247: GO 39294
// end ; end else
39249: GO 39290
// ComAgressiveMove ( Yashin , ai_human_pullback_hex [ target_base ] [ 1 ] , ai_human_pullback_hex [ target_base ] [ 2 ] ) ;
39251: LD_EXP 12
39255: PPUSH
39256: LD_EXP 24
39260: PUSH
39261: LD_VAR 0 3
39265: ARRAY
39266: PUSH
39267: LD_INT 1
39269: ARRAY
39270: PPUSH
39271: LD_EXP 24
39275: PUSH
39276: LD_VAR 0 3
39280: ARRAY
39281: PUSH
39282: LD_INT 2
39284: ARRAY
39285: PPUSH
39286: CALL_OW 114
// end ; until false ;
39290: LD_INT 0
39292: IFFALSE 38848
// InitUc ;
39294: CALL_OW 18
// InitVc ;
39298: CALL_OW 20
// uc_side = russians_alt ;
39302: LD_ADDR_OWVAR 20
39306: PUSH
39307: LD_EXP 5
39311: ST_TO_ADDR
// uc_nation = nation_russian ;
39312: LD_ADDR_OWVAR 21
39316: PUSH
39317: LD_INT 3
39319: ST_TO_ADDR
// vc_control = control_manual ;
39320: LD_ADDR_OWVAR 38
39324: PUSH
39325: LD_INT 1
39327: ST_TO_ADDR
// vc_engine = engine_combustion ;
39328: LD_ADDR_OWVAR 39
39332: PUSH
39333: LD_INT 1
39335: ST_TO_ADDR
// vc_chassis = [ ru_medium_wheeled , ru_medium_tracked ] [ Rand ( 1 , 2 ) ] ;
39336: LD_ADDR_OWVAR 37
39340: PUSH
39341: LD_INT 21
39343: PUSH
39344: LD_INT 22
39346: PUSH
39347: EMPTY
39348: LIST
39349: LIST
39350: PUSH
39351: LD_INT 1
39353: PPUSH
39354: LD_INT 2
39356: PPUSH
39357: CALL_OW 12
39361: ARRAY
39362: ST_TO_ADDR
// if difficulty = 1 then
39363: LD_OWVAR 67
39367: PUSH
39368: LD_INT 1
39370: EQUAL
39371: IFFALSE 39383
// vc_weapon = ru_heavy_machine_gun else
39373: LD_ADDR_OWVAR 40
39377: PUSH
39378: LD_INT 42
39380: ST_TO_ADDR
39381: GO 39410
// vc_weapon = [ ru_gatling_gun , ru_gun ] [ Rand ( 1 , 2 ) ] ;
39383: LD_ADDR_OWVAR 40
39387: PUSH
39388: LD_INT 43
39390: PUSH
39391: LD_INT 44
39393: PUSH
39394: EMPTY
39395: LIST
39396: LIST
39397: PUSH
39398: LD_INT 1
39400: PPUSH
39401: LD_INT 2
39403: PPUSH
39404: CALL_OW 12
39408: ARRAY
39409: ST_TO_ADDR
// yashin_vehicle = CreateVehicle ;
39410: LD_ADDR_VAR 0 1
39414: PUSH
39415: CALL_OW 45
39419: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
39420: LD_INT 18
39422: PPUSH
39423: CALL_OW 67
// if IsDead ( Yashin ) then
39427: LD_EXP 12
39431: PPUSH
39432: CALL_OW 301
39436: IFFALSE 39440
// exit ;
39438: GO 39539
// until PlaceUnitXYR ( yashin_vehicle , GetX ( Yashin ) , GetY ( Yashin ) , 8 , false ) ;
39440: LD_VAR 0 1
39444: PPUSH
39445: LD_EXP 12
39449: PPUSH
39450: CALL_OW 250
39454: PPUSH
39455: LD_EXP 12
39459: PPUSH
39460: CALL_OW 251
39464: PPUSH
39465: LD_INT 8
39467: PPUSH
39468: LD_INT 0
39470: PPUSH
39471: CALL_OW 50
39475: IFFALSE 39420
// repeat ComEnterUnit ( Yashin , yashin_vehicle ) ;
39477: LD_EXP 12
39481: PPUSH
39482: LD_VAR 0 1
39486: PPUSH
39487: CALL_OW 120
// wait ( 0 0$1 ) ;
39491: LD_INT 35
39493: PPUSH
39494: CALL_OW 67
// if IsDead ( Yashin ) then
39498: LD_EXP 12
39502: PPUSH
39503: CALL_OW 301
39507: IFFALSE 39511
// exit ;
39509: GO 39539
// until IsInUnit ( Yashin ) = yashin_vehicle ;
39511: LD_EXP 12
39515: PPUSH
39516: CALL_OW 310
39520: PUSH
39521: LD_VAR 0 1
39525: EQUAL
39526: IFFALSE 39477
// until IsDead ( Yashin ) ;
39528: LD_EXP 12
39532: PPUSH
39533: CALL_OW 301
39537: IFFALSE 38840
// end ;
39539: PPOPN 7
39541: END
// every 0 0$1 + 0 0$0.2 trigger yashin_begin do
39542: LD_EXP 64
39546: IFFALSE 39572
39548: GO 39550
39550: DISABLE
// begin if IsDead ( Yashin ) then
39551: LD_EXP 12
39555: PPUSH
39556: CALL_OW 301
39560: IFFALSE 39571
// begin ChangeMissionObjectives ( MOutKillYashin ) ;
39562: LD_STRING MOutKillYashin
39564: PPUSH
39565: CALL_OW 337
// exit ;
39569: GO 39572
// end ; enable ;
39571: ENABLE
// end ;
39572: END
// every 0 0$1 + 0 0$0.5 trigger martin_begin do var time , russian_killers , i , rus_see_dialogue , under_attack ;
39573: LD_EXP 65
39577: IFFALSE 40170
39579: GO 39581
39581: DISABLE
39582: LD_INT 0
39584: PPUSH
39585: PPUSH
39586: PPUSH
39587: PPUSH
39588: PPUSH
// begin russian_killers = [ ] ;
39589: LD_ADDR_VAR 0 2
39593: PUSH
39594: EMPTY
39595: ST_TO_ADDR
// time = 0 0$0 ;
39596: LD_ADDR_VAR 0 1
39600: PUSH
39601: LD_INT 0
39603: ST_TO_ADDR
// rus_see_dialogue = false ;
39604: LD_ADDR_VAR 0 4
39608: PUSH
39609: LD_INT 0
39611: ST_TO_ADDR
// under_attack = false ;
39612: LD_ADDR_VAR 0 5
39616: PUSH
39617: LD_INT 0
39619: ST_TO_ADDR
// repeat if GetDistUnitXY ( Martin , 73 , 131 ) > 4 and GetSide ( Martin ) = you_alt then
39620: LD_EXP 8
39624: PPUSH
39625: LD_INT 73
39627: PPUSH
39628: LD_INT 131
39630: PPUSH
39631: CALL_OW 297
39635: PUSH
39636: LD_INT 4
39638: GREATER
39639: PUSH
39640: LD_EXP 8
39644: PPUSH
39645: CALL_OW 255
39649: PUSH
39650: LD_EXP 6
39654: EQUAL
39655: AND
39656: IFFALSE 39673
// ComMoveXY ( Martin , 73 , 131 ) ;
39658: LD_EXP 8
39662: PPUSH
39663: LD_INT 73
39665: PPUSH
39666: LD_INT 131
39668: PPUSH
39669: CALL_OW 111
// if russian_killers > 0 then
39673: LD_VAR 0 2
39677: PUSH
39678: LD_INT 0
39680: GREATER
39681: IFFALSE 39820
// begin russian_killers = UnitFilter ( russian_killers , [ f_alive ] ) ;
39683: LD_ADDR_VAR 0 2
39687: PUSH
39688: LD_VAR 0 2
39692: PPUSH
39693: LD_INT 51
39695: PUSH
39696: EMPTY
39697: LIST
39698: PPUSH
39699: CALL_OW 72
39703: ST_TO_ADDR
// if IsLive ( Martin ) and GetSide ( Martin ) = you_alt then
39704: LD_EXP 8
39708: PPUSH
39709: CALL_OW 300
39713: PUSH
39714: LD_EXP 8
39718: PPUSH
39719: CALL_OW 255
39723: PUSH
39724: LD_EXP 6
39728: EQUAL
39729: AND
39730: IFFALSE 39763
// ComAgressiveMove ( russian_killers , GetX ( Martin ) , GetY ( Martin ) ) else
39732: LD_VAR 0 2
39736: PPUSH
39737: LD_EXP 8
39741: PPUSH
39742: CALL_OW 250
39746: PPUSH
39747: LD_EXP 8
39751: PPUSH
39752: CALL_OW 251
39756: PPUSH
39757: CALL_OW 114
39761: GO 39818
// for i in russian_killers do
39763: LD_ADDR_VAR 0 3
39767: PUSH
39768: LD_VAR 0 2
39772: PUSH
39773: FOR_IN
39774: IFFALSE 39816
// if not IsInArea ( i , ru_enter_area ) then
39776: LD_VAR 0 3
39780: PPUSH
39781: LD_INT 6
39783: PPUSH
39784: CALL_OW 308
39788: NOT
39789: IFFALSE 39805
// ComMoveToArea ( i , ru_enter_area ) else
39791: LD_VAR 0 3
39795: PPUSH
39796: LD_INT 6
39798: PPUSH
39799: CALL_OW 113
39803: GO 39814
// DestroyUnit ( i ) ;
39805: LD_VAR 0 3
39809: PPUSH
39810: CALL_OW 65
39814: GO 39773
39816: POP
39817: POP
// end else
39818: GO 39964
// begin if IsLive ( Martin ) and GetSide ( Martin ) = you_alt then
39820: LD_EXP 8
39824: PPUSH
39825: CALL_OW 300
39829: PUSH
39830: LD_EXP 8
39834: PPUSH
39835: CALL_OW 255
39839: PUSH
39840: LD_EXP 6
39844: EQUAL
39845: AND
39846: IFFALSE 39954
// begin if time >= [ 9 9$0 , 6 6$30 , 5 5$0 ] [ difficulty ] then
39848: LD_VAR 0 1
39852: PUSH
39853: LD_INT 18900
39855: PUSH
39856: LD_INT 13650
39858: PUSH
39859: LD_INT 10500
39861: PUSH
39862: EMPTY
39863: LIST
39864: LIST
39865: LIST
39866: PUSH
39867: LD_OWVAR 67
39871: ARRAY
39872: GREATEREQUAL
39873: IFFALSE 39938
// begin russian_killers = CreateUnitsWithClass ( 2 , class_soldier , russians ) ;
39875: LD_ADDR_VAR 0 2
39879: PUSH
39880: LD_INT 2
39882: PPUSH
39883: LD_INT 1
39885: PPUSH
39886: LD_EXP 3
39890: PPUSH
39891: CALL 7077 0 3
39895: ST_TO_ADDR
// for i in russian_killers do
39896: LD_ADDR_VAR 0 3
39900: PUSH
39901: LD_VAR 0 2
39905: PUSH
39906: FOR_IN
39907: IFFALSE 39926
// PlaceUnitArea ( i , ru_enter_area , false ) ;
39909: LD_VAR 0 3
39913: PPUSH
39914: LD_INT 6
39916: PPUSH
39917: LD_INT 0
39919: PPUSH
39920: CALL_OW 49
39924: GO 39906
39926: POP
39927: POP
// time = 0 0$0 ;
39928: LD_ADDR_VAR 0 1
39932: PUSH
39933: LD_INT 0
39935: ST_TO_ADDR
// end else
39936: GO 39952
// time = time + 0 0$1 ;
39938: LD_ADDR_VAR 0 1
39942: PUSH
39943: LD_VAR 0 1
39947: PUSH
39948: LD_INT 35
39950: PLUS
39951: ST_TO_ADDR
// end else
39952: GO 39956
// exit ;
39954: GO 40170
// under_attack = false ;
39956: LD_ADDR_VAR 0 5
39960: PUSH
39961: LD_INT 0
39963: ST_TO_ADDR
// end ; if not under_attack then
39964: LD_VAR 0 5
39968: NOT
39969: IFFALSE 40015
// for i in russian_killers do
39971: LD_ADDR_VAR 0 3
39975: PUSH
39976: LD_VAR 0 2
39980: PUSH
39981: FOR_IN
39982: IFFALSE 40013
// if Attacks ( i ) = Martin then
39984: LD_VAR 0 3
39988: PPUSH
39989: CALL_OW 320
39993: PUSH
39994: LD_EXP 8
39998: EQUAL
39999: IFFALSE 40011
// begin under_attack = true ;
40001: LD_ADDR_VAR 0 5
40005: PUSH
40006: LD_INT 1
40008: ST_TO_ADDR
// break ;
40009: GO 40013
// end ;
40011: GO 39981
40013: POP
40014: POP
// if under_attack then
40015: LD_VAR 0 5
40019: IFFALSE 40058
// begin if not rus_see_dialogue then
40021: LD_VAR 0 4
40025: NOT
40026: IFFALSE 40056
// begin DialogueOn ;
40028: CALL_OW 6
// SayRadio ( Martin , D5Martin4a ) ;
40032: LD_EXP 8
40036: PPUSH
40037: LD_STRING D5Martin4a
40039: PPUSH
40040: CALL_OW 94
// DialogueOff ;
40044: CALL_OW 7
// rus_see_dialogue = true ;
40048: LD_ADDR_VAR 0 4
40052: PUSH
40053: LD_INT 1
40055: ST_TO_ADDR
// end ; end else
40056: GO 40159
// if See ( you , Martin ) and IsOk ( Martin ) and GetSide ( Martin ) = you_alt then
40058: LD_EXP 2
40062: PPUSH
40063: LD_EXP 8
40067: PPUSH
40068: CALL_OW 292
40072: PUSH
40073: LD_EXP 8
40077: PPUSH
40078: CALL_OW 302
40082: AND
40083: PUSH
40084: LD_EXP 8
40088: PPUSH
40089: CALL_OW 255
40093: PUSH
40094: LD_EXP 6
40098: EQUAL
40099: AND
40100: IFFALSE 40159
// begin CenterOnUnits ( Martin ) ;
40102: LD_EXP 8
40106: PPUSH
40107: CALL_OW 85
// DialogueOn ;
40111: CALL_OW 6
// Say ( Martin , D5Martin4b ) ;
40115: LD_EXP 8
40119: PPUSH
40120: LD_STRING D5Martin4b
40122: PPUSH
40123: CALL_OW 88
// DialogueOff ;
40127: CALL_OW 7
// SetSide ( Martin , you ) ;
40131: LD_EXP 8
40135: PPUSH
40136: LD_EXP 2
40140: PPUSH
40141: CALL_OW 235
// NormalAttack ( nature , Martin ) ;
40145: LD_EXP 4
40149: PPUSH
40150: LD_EXP 8
40154: PPUSH
40155: CALL_OW 472
// end ; wait ( 0 0$1 ) ;
40159: LD_INT 35
40161: PPUSH
40162: CALL_OW 67
// until false ;
40166: LD_INT 0
40168: IFFALSE 39620
// end ;
40170: PPOPN 5
40172: END
// every 0 0$1 + 0 0$0.9 trigger deserter_begin do var deserters_list , dialogue_played , i , temp_list , time , hex_list_home , hex_list_out , is_gathered , out_hex_index , under_attack , k ; var escaped_list ;
40173: LD_EXP 66
40177: IFFALSE 42053
40179: GO 40181
40181: DISABLE
40182: LD_INT 0
40184: PPUSH
40185: PPUSH
40186: PPUSH
40187: PPUSH
40188: PPUSH
40189: PPUSH
40190: PPUSH
40191: PPUSH
40192: PPUSH
40193: PPUSH
40194: PPUSH
40195: PPUSH
// begin if IsDead ( Louis ) then
40196: LD_EXP 9
40200: PPUSH
40201: CALL_OW 301
40205: IFFALSE 40217
// begin deserters_are_done = true ;
40207: LD_ADDR_EXP 72
40211: PUSH
40212: LD_INT 1
40214: ST_TO_ADDR
// exit ;
40215: GO 42053
// end ; escaped_list = [ ] ;
40217: LD_ADDR_VAR 0 12
40221: PUSH
40222: EMPTY
40223: ST_TO_ADDR
// deserters_list = [ Louis ] ;
40224: LD_ADDR_VAR 0 1
40228: PUSH
40229: LD_EXP 9
40233: PUSH
40234: EMPTY
40235: LIST
40236: ST_TO_ADDR
// dialogue_played = false ;
40237: LD_ADDR_VAR 0 2
40241: PUSH
40242: LD_INT 0
40244: ST_TO_ADDR
// time = 0 0$0 ;
40245: LD_ADDR_VAR 0 5
40249: PUSH
40250: LD_INT 0
40252: ST_TO_ADDR
// out_hex_index = 1 ;
40253: LD_ADDR_VAR 0 9
40257: PUSH
40258: LD_INT 1
40260: ST_TO_ADDR
// SetAttitude ( russians , you_alt , att_friend , true ) ;
40261: LD_EXP 3
40265: PPUSH
40266: LD_EXP 6
40270: PPUSH
40271: LD_INT 1
40273: PPUSH
40274: LD_INT 1
40276: PPUSH
40277: CALL_OW 80
// hex_list_home = [ ] ;
40281: LD_ADDR_VAR 0 6
40285: PUSH
40286: EMPTY
40287: ST_TO_ADDR
// temp_list = [ [ 22 , 14 ] , [ 30 , 14 ] , [ 38 , 14 ] , [ 45 , 14 ] ] ;
40288: LD_ADDR_VAR 0 4
40292: PUSH
40293: LD_INT 22
40295: PUSH
40296: LD_INT 14
40298: PUSH
40299: EMPTY
40300: LIST
40301: LIST
40302: PUSH
40303: LD_INT 30
40305: PUSH
40306: LD_INT 14
40308: PUSH
40309: EMPTY
40310: LIST
40311: LIST
40312: PUSH
40313: LD_INT 38
40315: PUSH
40316: LD_INT 14
40318: PUSH
40319: EMPTY
40320: LIST
40321: LIST
40322: PUSH
40323: LD_INT 45
40325: PUSH
40326: LD_INT 14
40328: PUSH
40329: EMPTY
40330: LIST
40331: LIST
40332: PUSH
40333: EMPTY
40334: LIST
40335: LIST
40336: LIST
40337: LIST
40338: ST_TO_ADDR
// hex_list_home = hex_list_home ^ temp_list ;
40339: LD_ADDR_VAR 0 6
40343: PUSH
40344: LD_VAR 0 6
40348: PUSH
40349: LD_VAR 0 4
40353: ADD
40354: ST_TO_ADDR
// temp_list = [ [ 137 , 132 ] , [ 135 , 128 ] , [ 122 , 102 ] , [ 113 , 84 ] , [ 106 , 69 ] , [ 99 , 53 ] , [ 91 , 37 ] , [ 84 , 23 ] ] ;
40355: LD_ADDR_VAR 0 4
40359: PUSH
40360: LD_INT 137
40362: PUSH
40363: LD_INT 132
40365: PUSH
40366: EMPTY
40367: LIST
40368: LIST
40369: PUSH
40370: LD_INT 135
40372: PUSH
40373: LD_INT 128
40375: PUSH
40376: EMPTY
40377: LIST
40378: LIST
40379: PUSH
40380: LD_INT 122
40382: PUSH
40383: LD_INT 102
40385: PUSH
40386: EMPTY
40387: LIST
40388: LIST
40389: PUSH
40390: LD_INT 113
40392: PUSH
40393: LD_INT 84
40395: PUSH
40396: EMPTY
40397: LIST
40398: LIST
40399: PUSH
40400: LD_INT 106
40402: PUSH
40403: LD_INT 69
40405: PUSH
40406: EMPTY
40407: LIST
40408: LIST
40409: PUSH
40410: LD_INT 99
40412: PUSH
40413: LD_INT 53
40415: PUSH
40416: EMPTY
40417: LIST
40418: LIST
40419: PUSH
40420: LD_INT 91
40422: PUSH
40423: LD_INT 37
40425: PUSH
40426: EMPTY
40427: LIST
40428: LIST
40429: PUSH
40430: LD_INT 84
40432: PUSH
40433: LD_INT 23
40435: PUSH
40436: EMPTY
40437: LIST
40438: LIST
40439: PUSH
40440: EMPTY
40441: LIST
40442: LIST
40443: LIST
40444: LIST
40445: LIST
40446: LIST
40447: LIST
40448: LIST
40449: ST_TO_ADDR
// hex_list_home = hex_list_home ^ temp_list ;
40450: LD_ADDR_VAR 0 6
40454: PUSH
40455: LD_VAR 0 6
40459: PUSH
40460: LD_VAR 0 4
40464: ADD
40465: ST_TO_ADDR
// temp_list = [ [ 74 , 129 ] , [ 76 , 123 ] , [ 75 , 115 ] , [ 68 , 104 ] , [ 69 , 98 ] , [ 70 , 91 ] , [ 70 , 89 ] , [ 86 , 90 ] , [ 93 , 87 ] , [ 112 , 81 ] , [ 105 , 66 ] , [ 97 , 50 ] , [ 89 , 34 ] , [ 82 , 21 ] ] ;
40466: LD_ADDR_VAR 0 4
40470: PUSH
40471: LD_INT 74
40473: PUSH
40474: LD_INT 129
40476: PUSH
40477: EMPTY
40478: LIST
40479: LIST
40480: PUSH
40481: LD_INT 76
40483: PUSH
40484: LD_INT 123
40486: PUSH
40487: EMPTY
40488: LIST
40489: LIST
40490: PUSH
40491: LD_INT 75
40493: PUSH
40494: LD_INT 115
40496: PUSH
40497: EMPTY
40498: LIST
40499: LIST
40500: PUSH
40501: LD_INT 68
40503: PUSH
40504: LD_INT 104
40506: PUSH
40507: EMPTY
40508: LIST
40509: LIST
40510: PUSH
40511: LD_INT 69
40513: PUSH
40514: LD_INT 98
40516: PUSH
40517: EMPTY
40518: LIST
40519: LIST
40520: PUSH
40521: LD_INT 70
40523: PUSH
40524: LD_INT 91
40526: PUSH
40527: EMPTY
40528: LIST
40529: LIST
40530: PUSH
40531: LD_INT 70
40533: PUSH
40534: LD_INT 89
40536: PUSH
40537: EMPTY
40538: LIST
40539: LIST
40540: PUSH
40541: LD_INT 86
40543: PUSH
40544: LD_INT 90
40546: PUSH
40547: EMPTY
40548: LIST
40549: LIST
40550: PUSH
40551: LD_INT 93
40553: PUSH
40554: LD_INT 87
40556: PUSH
40557: EMPTY
40558: LIST
40559: LIST
40560: PUSH
40561: LD_INT 112
40563: PUSH
40564: LD_INT 81
40566: PUSH
40567: EMPTY
40568: LIST
40569: LIST
40570: PUSH
40571: LD_INT 105
40573: PUSH
40574: LD_INT 66
40576: PUSH
40577: EMPTY
40578: LIST
40579: LIST
40580: PUSH
40581: LD_INT 97
40583: PUSH
40584: LD_INT 50
40586: PUSH
40587: EMPTY
40588: LIST
40589: LIST
40590: PUSH
40591: LD_INT 89
40593: PUSH
40594: LD_INT 34
40596: PUSH
40597: EMPTY
40598: LIST
40599: LIST
40600: PUSH
40601: LD_INT 82
40603: PUSH
40604: LD_INT 21
40606: PUSH
40607: EMPTY
40608: LIST
40609: LIST
40610: PUSH
40611: EMPTY
40612: LIST
40613: LIST
40614: LIST
40615: LIST
40616: LIST
40617: LIST
40618: LIST
40619: LIST
40620: LIST
40621: LIST
40622: LIST
40623: LIST
40624: LIST
40625: LIST
40626: ST_TO_ADDR
// hex_list_home = hex_list_home ^ temp_list ;
40627: LD_ADDR_VAR 0 6
40631: PUSH
40632: LD_VAR 0 6
40636: PUSH
40637: LD_VAR 0 4
40641: ADD
40642: ST_TO_ADDR
// hex_list_out = [ [ 88 , 12 ] , [ 75 , 12 ] , [ 61 , 4 ] , [ 48 , 4 ] , [ 38 , 4 ] , [ 28 , 4 ] , [ 18 , 4 ] , [ 3 , 2 ] ] ;
40643: LD_ADDR_VAR 0 7
40647: PUSH
40648: LD_INT 88
40650: PUSH
40651: LD_INT 12
40653: PUSH
40654: EMPTY
40655: LIST
40656: LIST
40657: PUSH
40658: LD_INT 75
40660: PUSH
40661: LD_INT 12
40663: PUSH
40664: EMPTY
40665: LIST
40666: LIST
40667: PUSH
40668: LD_INT 61
40670: PUSH
40671: LD_INT 4
40673: PUSH
40674: EMPTY
40675: LIST
40676: LIST
40677: PUSH
40678: LD_INT 48
40680: PUSH
40681: LD_INT 4
40683: PUSH
40684: EMPTY
40685: LIST
40686: LIST
40687: PUSH
40688: LD_INT 38
40690: PUSH
40691: LD_INT 4
40693: PUSH
40694: EMPTY
40695: LIST
40696: LIST
40697: PUSH
40698: LD_INT 28
40700: PUSH
40701: LD_INT 4
40703: PUSH
40704: EMPTY
40705: LIST
40706: LIST
40707: PUSH
40708: LD_INT 18
40710: PUSH
40711: LD_INT 4
40713: PUSH
40714: EMPTY
40715: LIST
40716: LIST
40717: PUSH
40718: LD_INT 3
40720: PUSH
40721: LD_INT 2
40723: PUSH
40724: EMPTY
40725: LIST
40726: LIST
40727: PUSH
40728: EMPTY
40729: LIST
40730: LIST
40731: LIST
40732: LIST
40733: LIST
40734: LIST
40735: LIST
40736: LIST
40737: ST_TO_ADDR
// if IsOk ( Martin ) and GetSide ( Martin ) = you then
40738: LD_EXP 8
40742: PPUSH
40743: CALL_OW 302
40747: PUSH
40748: LD_EXP 8
40752: PPUSH
40753: CALL_OW 255
40757: PUSH
40758: LD_EXP 2
40762: EQUAL
40763: AND
40764: IFFALSE 40782
// deserters_list = deserters_list ^ Martin ;
40766: LD_ADDR_VAR 0 1
40770: PUSH
40771: LD_VAR 0 1
40775: PUSH
40776: LD_EXP 8
40780: ADD
40781: ST_TO_ADDR
// for i in louis_main_companions do
40782: LD_ADDR_VAR 0 3
40786: PUSH
40787: LD_EXP 73
40791: PUSH
40792: FOR_IN
40793: IFFALSE 40824
// if IsOk ( i ) then
40795: LD_VAR 0 3
40799: PPUSH
40800: CALL_OW 302
40804: IFFALSE 40822
// deserters_list = deserters_list ^ i ;
40806: LD_ADDR_VAR 0 1
40810: PUSH
40811: LD_VAR 0 1
40815: PUSH
40816: LD_VAR 0 3
40820: ADD
40821: ST_TO_ADDR
40822: GO 40792
40824: POP
40825: POP
// if deserters_list + 0 < 4 then
40826: LD_VAR 0 1
40830: PUSH
40831: LD_INT 0
40833: PLUS
40834: PUSH
40835: LD_INT 4
40837: LESS
40838: IFFALSE 41105
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_inarea , player_base ] , [ f_ok ] ] ) diff ( [ Heike , Martin , Erwin , Louis ] ^ PlayerApes ^ louis_main_companions ) ;
40840: LD_ADDR_VAR 0 4
40844: PUSH
40845: LD_INT 22
40847: PUSH
40848: LD_EXP 2
40852: PUSH
40853: EMPTY
40854: LIST
40855: LIST
40856: PUSH
40857: LD_INT 21
40859: PUSH
40860: LD_INT 1
40862: PUSH
40863: EMPTY
40864: LIST
40865: LIST
40866: PUSH
40867: LD_INT 95
40869: PUSH
40870: LD_INT 3
40872: PUSH
40873: EMPTY
40874: LIST
40875: LIST
40876: PUSH
40877: LD_INT 50
40879: PUSH
40880: EMPTY
40881: LIST
40882: PUSH
40883: EMPTY
40884: LIST
40885: LIST
40886: LIST
40887: LIST
40888: PPUSH
40889: CALL_OW 69
40893: PUSH
40894: LD_EXP 7
40898: PUSH
40899: LD_EXP 8
40903: PUSH
40904: LD_EXP 10
40908: PUSH
40909: LD_EXP 9
40913: PUSH
40914: EMPTY
40915: LIST
40916: LIST
40917: LIST
40918: LIST
40919: PUSH
40920: CALL 35296 0 0
40924: ADD
40925: PUSH
40926: LD_EXP 73
40930: ADD
40931: DIFF
40932: ST_TO_ADDR
// if temp_list < 4 - deserters_list then
40933: LD_VAR 0 4
40937: PUSH
40938: LD_INT 4
40940: PUSH
40941: LD_VAR 0 1
40945: MINUS
40946: LESS
40947: IFFALSE 41057
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_ok ] ] ) diff ( [ Heike , Martin , Erwin , Louis ] ^ PlayerApes ^ louis_main_companions ) ;
40949: LD_ADDR_VAR 0 4
40953: PUSH
40954: LD_INT 22
40956: PUSH
40957: LD_EXP 2
40961: PUSH
40962: EMPTY
40963: LIST
40964: LIST
40965: PUSH
40966: LD_INT 21
40968: PUSH
40969: LD_INT 1
40971: PUSH
40972: EMPTY
40973: LIST
40974: LIST
40975: PUSH
40976: LD_INT 50
40978: PUSH
40979: EMPTY
40980: LIST
40981: PUSH
40982: EMPTY
40983: LIST
40984: LIST
40985: LIST
40986: PPUSH
40987: CALL_OW 69
40991: PUSH
40992: LD_EXP 7
40996: PUSH
40997: LD_EXP 8
41001: PUSH
41002: LD_EXP 10
41006: PUSH
41007: LD_EXP 9
41011: PUSH
41012: EMPTY
41013: LIST
41014: LIST
41015: LIST
41016: LIST
41017: PUSH
41018: CALL 35296 0 0
41022: ADD
41023: PUSH
41024: LD_EXP 73
41028: ADD
41029: DIFF
41030: ST_TO_ADDR
// if temp_list < 4 - deserters_list then
41031: LD_VAR 0 4
41035: PUSH
41036: LD_INT 4
41038: PUSH
41039: LD_VAR 0 1
41043: MINUS
41044: LESS
41045: IFFALSE 41057
// begin deserters_are_done = true ;
41047: LD_ADDR_EXP 72
41051: PUSH
41052: LD_INT 1
41054: ST_TO_ADDR
// exit ;
41055: GO 42053
// end ; end ; for i = 1 to 4 - deserters_list do
41057: LD_ADDR_VAR 0 3
41061: PUSH
41062: DOUBLE
41063: LD_INT 1
41065: DEC
41066: ST_TO_ADDR
41067: LD_INT 4
41069: PUSH
41070: LD_VAR 0 1
41074: MINUS
41075: PUSH
41076: FOR_TO
41077: IFFALSE 41103
// deserters_list = deserters_list ^ temp_list [ i ] ;
41079: LD_ADDR_VAR 0 1
41083: PUSH
41084: LD_VAR 0 1
41088: PUSH
41089: LD_VAR 0 4
41093: PUSH
41094: LD_VAR 0 3
41098: ARRAY
41099: ADD
41100: ST_TO_ADDR
41101: GO 41076
41103: POP
41104: POP
// end ; for i in deserters_list do
41105: LD_ADDR_VAR 0 3
41109: PUSH
41110: LD_VAR 0 1
41114: PUSH
41115: FOR_IN
41116: IFFALSE 41134
// SetSide ( i , you_alt ) ;
41118: LD_VAR 0 3
41122: PPUSH
41123: LD_EXP 6
41127: PPUSH
41128: CALL_OW 235
41132: GO 41115
41134: POP
41135: POP
// repeat deserters_list = UnitFilter ( deserters_list , [ f_alive ] ) ;
41136: LD_ADDR_VAR 0 1
41140: PUSH
41141: LD_VAR 0 1
41145: PPUSH
41146: LD_INT 51
41148: PUSH
41149: EMPTY
41150: LIST
41151: PPUSH
41152: CALL_OW 72
41156: ST_TO_ADDR
// under_attack = false ;
41157: LD_ADDR_VAR 0 10
41161: PUSH
41162: LD_INT 0
41164: ST_TO_ADDR
// for i in deserters_list do
41165: LD_ADDR_VAR 0 3
41169: PUSH
41170: LD_VAR 0 1
41174: PUSH
41175: FOR_IN
41176: IFFALSE 41207
// if SideShoot ( i ) = you then
41178: LD_VAR 0 3
41182: PPUSH
41183: CALL_OW 503
41187: PUSH
41188: LD_EXP 2
41192: EQUAL
41193: IFFALSE 41205
// begin under_attack = true ;
41195: LD_ADDR_VAR 0 10
41199: PUSH
41200: LD_INT 1
41202: ST_TO_ADDR
// break ;
41203: GO 41207
// end ;
41205: GO 41175
41207: POP
41208: POP
// if not dialogue_played then
41209: LD_VAR 0 2
41213: NOT
41214: IFFALSE 41435
// if time >= 0 0$3 then
41216: LD_VAR 0 5
41220: PUSH
41221: LD_INT 105
41223: GREATEREQUAL
41224: IFFALSE 41421
// begin if IsDead ( Louis ) then
41226: LD_EXP 9
41230: PPUSH
41231: CALL_OW 301
41235: IFFALSE 41278
// begin for i in deserters_list do
41237: LD_ADDR_VAR 0 3
41241: PUSH
41242: LD_VAR 0 1
41246: PUSH
41247: FOR_IN
41248: IFFALSE 41266
// SetSide ( i , you ) ;
41250: LD_VAR 0 3
41254: PPUSH
41255: LD_EXP 2
41259: PPUSH
41260: CALL_OW 235
41264: GO 41247
41266: POP
41267: POP
// deserters_are_done = true ;
41268: LD_ADDR_EXP 72
41272: PUSH
41273: LD_INT 1
41275: ST_TO_ADDR
// exit ;
41276: GO 42053
// end ; CenterOnUnits ( Louis ) ;
41278: LD_EXP 9
41282: PPUSH
41283: CALL_OW 85
// DialogueOn ;
41287: CALL_OW 6
// Say ( Heike , D8H1 ) ;
41291: LD_EXP 7
41295: PPUSH
41296: LD_STRING D8H1
41298: PPUSH
41299: CALL_OW 88
// Say ( Louis , D8Lo1 ) ;
41303: LD_EXP 9
41307: PPUSH
41308: LD_STRING D8Lo1
41310: PPUSH
41311: CALL_OW 88
// Say ( Heike , D8H2 ) ;
41315: LD_EXP 7
41319: PPUSH
41320: LD_STRING D8H2
41322: PPUSH
41323: CALL_OW 88
// Say ( Louis , D8Lo2 ) ;
41327: LD_EXP 9
41331: PPUSH
41332: LD_STRING D8Lo2
41334: PPUSH
41335: CALL_OW 88
// Say ( Heike , D8H3 ) ;
41339: LD_EXP 7
41343: PPUSH
41344: LD_STRING D8H3
41346: PPUSH
41347: CALL_OW 88
// Say ( Louis , D8Lo3 ) ;
41351: LD_EXP 9
41355: PPUSH
41356: LD_STRING D8Lo3
41358: PPUSH
41359: CALL_OW 88
// Say ( Heike , D8H4 ) ;
41363: LD_EXP 7
41367: PPUSH
41368: LD_STRING D8H4
41370: PPUSH
41371: CALL_OW 88
// Say ( Louis , D8Lo4 ) ;
41375: LD_EXP 9
41379: PPUSH
41380: LD_STRING D8Lo4
41382: PPUSH
41383: CALL_OW 88
// DialogueOff ;
41387: CALL_OW 7
// dialogue_played = true ;
41391: LD_ADDR_VAR 0 2
41395: PUSH
41396: LD_INT 1
41398: ST_TO_ADDR
// SetAttitude ( you , you_alt , att_neutral , true ) ;
41399: LD_EXP 2
41403: PPUSH
41404: LD_EXP 6
41408: PPUSH
41409: LD_INT 0
41411: PPUSH
41412: LD_INT 1
41414: PPUSH
41415: CALL_OW 80
// end else
41419: GO 41435
// time = time + 0 0$0.5 ;
41421: LD_ADDR_VAR 0 5
41425: PUSH
41426: LD_VAR 0 5
41430: PUSH
41431: LD_INT 18
41433: PLUS
41434: ST_TO_ADDR
// is_gathered = true ;
41435: LD_ADDR_VAR 0 8
41439: PUSH
41440: LD_INT 1
41442: ST_TO_ADDR
// for i in deserters_list do
41443: LD_ADDR_VAR 0 3
41447: PUSH
41448: LD_VAR 0 1
41452: PUSH
41453: FOR_IN
41454: IFFALSE 41969
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
41456: LD_VAR 0 3
41460: PPUSH
41461: CALL_OW 310
41465: PPUSH
41466: CALL_OW 247
41470: PUSH
41471: LD_INT 2
41473: DOUBLE
41474: EQUAL
41475: IFTRUE 41479
41477: GO 41499
41479: POP
// begin ComExitVehicle ( i ) ;
41480: LD_VAR 0 3
41484: PPUSH
41485: CALL_OW 121
// is_gathered = false ;
41489: LD_ADDR_VAR 0 8
41493: PUSH
41494: LD_INT 0
41496: ST_TO_ADDR
// end ; unit_building :
41497: GO 41967
41499: LD_INT 3
41501: DOUBLE
41502: EQUAL
41503: IFTRUE 41507
41505: GO 41527
41507: POP
// begin ComExitBuilding ( i ) ;
41508: LD_VAR 0 3
41512: PPUSH
41513: CALL_OW 122
// is_gathered = false ;
41517: LD_ADDR_VAR 0 8
41521: PUSH
41522: LD_INT 0
41524: ST_TO_ADDR
// end ; else
41525: GO 41967
41527: POP
// if out_hex_index = 1 and not IsInArea ( i , player_base ) then
41528: LD_VAR 0 9
41532: PUSH
41533: LD_INT 1
41535: EQUAL
41536: PUSH
41537: LD_VAR 0 3
41541: PPUSH
41542: LD_INT 3
41544: PPUSH
41545: CALL_OW 308
41549: NOT
41550: AND
41551: IFFALSE 41699
// begin is_gathered = false ;
41553: LD_ADDR_VAR 0 8
41557: PUSH
41558: LD_INT 0
41560: ST_TO_ADDR
// k = FindClosestHexIndex ( i , hex_list_home ) + 1 ;
41561: LD_ADDR_VAR 0 11
41565: PUSH
41566: LD_VAR 0 3
41570: PPUSH
41571: LD_VAR 0 6
41575: PPUSH
41576: CALL 42056 0 2
41580: PUSH
41581: LD_INT 1
41583: PLUS
41584: ST_TO_ADDR
// if k > hex_list_home then
41585: LD_VAR 0 11
41589: PUSH
41590: LD_VAR 0 6
41594: GREATER
41595: IFFALSE 41611
// k = hex_list_home + 0 ;
41597: LD_ADDR_VAR 0 11
41601: PUSH
41602: LD_VAR 0 6
41606: PUSH
41607: LD_INT 0
41609: PLUS
41610: ST_TO_ADDR
// if under_attack then
41611: LD_VAR 0 10
41615: IFFALSE 41658
// ComAgressiveMove ( i , hex_list_home [ k ] [ 1 ] , hex_list_home [ k ] [ 2 ] ) else
41617: LD_VAR 0 3
41621: PPUSH
41622: LD_VAR 0 6
41626: PUSH
41627: LD_VAR 0 11
41631: ARRAY
41632: PUSH
41633: LD_INT 1
41635: ARRAY
41636: PPUSH
41637: LD_VAR 0 6
41641: PUSH
41642: LD_VAR 0 11
41646: ARRAY
41647: PUSH
41648: LD_INT 2
41650: ARRAY
41651: PPUSH
41652: CALL_OW 114
41656: GO 41697
// ComMoveXY ( i , hex_list_home [ k ] [ 1 ] , hex_list_home [ k ] [ 2 ] ) ;
41658: LD_VAR 0 3
41662: PPUSH
41663: LD_VAR 0 6
41667: PUSH
41668: LD_VAR 0 11
41672: ARRAY
41673: PUSH
41674: LD_INT 1
41676: ARRAY
41677: PPUSH
41678: LD_VAR 0 6
41682: PUSH
41683: LD_VAR 0 11
41687: ARRAY
41688: PUSH
41689: LD_INT 2
41691: ARRAY
41692: PPUSH
41693: CALL_OW 111
// end else
41697: GO 41967
// if GetDistUnitXY ( i , hex_list_out [ out_hex_index ] [ 1 ] , hex_list_out [ out_hex_index ] [ 2 ] ) > 5 then
41699: LD_VAR 0 3
41703: PPUSH
41704: LD_VAR 0 7
41708: PUSH
41709: LD_VAR 0 9
41713: ARRAY
41714: PUSH
41715: LD_INT 1
41717: ARRAY
41718: PPUSH
41719: LD_VAR 0 7
41723: PUSH
41724: LD_VAR 0 9
41728: ARRAY
41729: PUSH
41730: LD_INT 2
41732: ARRAY
41733: PPUSH
41734: CALL_OW 297
41738: PUSH
41739: LD_INT 5
41741: GREATER
41742: IFFALSE 41840
// begin is_gathered = false ;
41744: LD_ADDR_VAR 0 8
41748: PUSH
41749: LD_INT 0
41751: ST_TO_ADDR
// if under_attack then
41752: LD_VAR 0 10
41756: IFFALSE 41799
// ComAgressiveMove ( i , hex_list_out [ out_hex_index ] [ 1 ] , hex_list_out [ out_hex_index ] [ 2 ] ) else
41758: LD_VAR 0 3
41762: PPUSH
41763: LD_VAR 0 7
41767: PUSH
41768: LD_VAR 0 9
41772: ARRAY
41773: PUSH
41774: LD_INT 1
41776: ARRAY
41777: PPUSH
41778: LD_VAR 0 7
41782: PUSH
41783: LD_VAR 0 9
41787: ARRAY
41788: PUSH
41789: LD_INT 2
41791: ARRAY
41792: PPUSH
41793: CALL_OW 114
41797: GO 41838
// ComMoveXY ( i , hex_list_out [ out_hex_index ] [ 1 ] , hex_list_out [ out_hex_index ] [ 2 ] ) ;
41799: LD_VAR 0 3
41803: PPUSH
41804: LD_VAR 0 7
41808: PUSH
41809: LD_VAR 0 9
41813: ARRAY
41814: PUSH
41815: LD_INT 1
41817: ARRAY
41818: PPUSH
41819: LD_VAR 0 7
41823: PUSH
41824: LD_VAR 0 9
41828: ARRAY
41829: PUSH
41830: LD_INT 2
41832: ARRAY
41833: PPUSH
41834: CALL_OW 111
// end else
41838: GO 41967
// if out_hex_index = hex_list_out + 0 then
41840: LD_VAR 0 9
41844: PUSH
41845: LD_VAR 0 7
41849: PUSH
41850: LD_INT 0
41852: PLUS
41853: EQUAL
41854: IFFALSE 41967
// if GetDistUnitXY ( i , hex_list_out [ out_hex_index ] [ 1 ] , hex_list_out [ out_hex_index ] [ 2 ] ) > 2 then
41856: LD_VAR 0 3
41860: PPUSH
41861: LD_VAR 0 7
41865: PUSH
41866: LD_VAR 0 9
41870: ARRAY
41871: PUSH
41872: LD_INT 1
41874: ARRAY
41875: PPUSH
41876: LD_VAR 0 7
41880: PUSH
41881: LD_VAR 0 9
41885: ARRAY
41886: PUSH
41887: LD_INT 2
41889: ARRAY
41890: PPUSH
41891: CALL_OW 297
41895: PUSH
41896: LD_INT 2
41898: GREATER
41899: IFFALSE 41942
// ComMoveXY ( i , hex_list_out [ out_hex_index ] [ 1 ] , hex_list_out [ out_hex_index ] [ 2 ] ) else
41901: LD_VAR 0 3
41905: PPUSH
41906: LD_VAR 0 7
41910: PUSH
41911: LD_VAR 0 9
41915: ARRAY
41916: PUSH
41917: LD_INT 1
41919: ARRAY
41920: PPUSH
41921: LD_VAR 0 7
41925: PUSH
41926: LD_VAR 0 9
41930: ARRAY
41931: PUSH
41932: LD_INT 2
41934: ARRAY
41935: PPUSH
41936: CALL_OW 111
41940: GO 41967
// begin escaped_list = escaped_list ^ i ;
41942: LD_ADDR_VAR 0 12
41946: PUSH
41947: LD_VAR 0 12
41951: PUSH
41952: LD_VAR 0 3
41956: ADD
41957: ST_TO_ADDR
// RemoveUnit ( i ) ;
41958: LD_VAR 0 3
41962: PPUSH
41963: CALL_OW 64
// end ; end ;
41967: GO 41453
41969: POP
41970: POP
// if is_gathered and out_hex_index < hex_list_out + 0 then
41971: LD_VAR 0 8
41975: PUSH
41976: LD_VAR 0 9
41980: PUSH
41981: LD_VAR 0 7
41985: PUSH
41986: LD_INT 0
41988: PLUS
41989: LESS
41990: AND
41991: IFFALSE 42007
// out_hex_index = out_hex_index + 1 ;
41993: LD_ADDR_VAR 0 9
41997: PUSH
41998: LD_VAR 0 9
42002: PUSH
42003: LD_INT 1
42005: PLUS
42006: ST_TO_ADDR
// wait ( 0 0$0.5 ) ;
42007: LD_INT 18
42009: PPUSH
42010: CALL_OW 67
// until UnitFilter ( deserters_list , [ f_placed ] ) = 0 ;
42014: LD_VAR 0 1
42018: PPUSH
42019: LD_INT 52
42021: PUSH
42022: EMPTY
42023: LIST
42024: PPUSH
42025: CALL_OW 72
42029: PUSH
42030: LD_INT 0
42032: EQUAL
42033: IFFALSE 41136
// deserters = escaped_list ;
42035: LD_ADDR_EXP 67
42039: PUSH
42040: LD_VAR 0 12
42044: ST_TO_ADDR
// deserters_are_done = true ;
42045: LD_ADDR_EXP 72
42049: PUSH
42050: LD_INT 1
42052: ST_TO_ADDR
// end ;
42053: PPOPN 12
42055: END
// function FindClosestHexIndex ( un , hex_list ) ; var low_dist , dist , b ; begin
42056: LD_INT 0
42058: PPUSH
42059: PPUSH
42060: PPUSH
42061: PPUSH
// low_dist = GetDistUnitXY ( un , hex_list [ 1 ] [ 1 ] , hex_list [ 1 ] [ 2 ] ) ;
42062: LD_ADDR_VAR 0 4
42066: PUSH
42067: LD_VAR 0 1
42071: PPUSH
42072: LD_VAR 0 2
42076: PUSH
42077: LD_INT 1
42079: ARRAY
42080: PUSH
42081: LD_INT 1
42083: ARRAY
42084: PPUSH
42085: LD_VAR 0 2
42089: PUSH
42090: LD_INT 1
42092: ARRAY
42093: PUSH
42094: LD_INT 2
42096: ARRAY
42097: PPUSH
42098: CALL_OW 297
42102: ST_TO_ADDR
// result = 1 ;
42103: LD_ADDR_VAR 0 3
42107: PUSH
42108: LD_INT 1
42110: ST_TO_ADDR
// for b = 2 to hex_list do
42111: LD_ADDR_VAR 0 6
42115: PUSH
42116: DOUBLE
42117: LD_INT 2
42119: DEC
42120: ST_TO_ADDR
42121: LD_VAR 0 2
42125: PUSH
42126: FOR_TO
42127: IFFALSE 42208
// begin dist = GetDistUnitXY ( un , hex_list [ b ] [ 1 ] , hex_list [ b ] [ 2 ] ) ;
42129: LD_ADDR_VAR 0 5
42133: PUSH
42134: LD_VAR 0 1
42138: PPUSH
42139: LD_VAR 0 2
42143: PUSH
42144: LD_VAR 0 6
42148: ARRAY
42149: PUSH
42150: LD_INT 1
42152: ARRAY
42153: PPUSH
42154: LD_VAR 0 2
42158: PUSH
42159: LD_VAR 0 6
42163: ARRAY
42164: PUSH
42165: LD_INT 2
42167: ARRAY
42168: PPUSH
42169: CALL_OW 297
42173: ST_TO_ADDR
// if dist < low_dist then
42174: LD_VAR 0 5
42178: PUSH
42179: LD_VAR 0 4
42183: LESS
42184: IFFALSE 42206
// begin low_dist = dist ;
42186: LD_ADDR_VAR 0 4
42190: PUSH
42191: LD_VAR 0 5
42195: ST_TO_ADDR
// result = b ;
42196: LD_ADDR_VAR 0 3
42200: PUSH
42201: LD_VAR 0 6
42205: ST_TO_ADDR
// end ; end ;
42206: GO 42126
42208: POP
42209: POP
// end ;
42210: LD_VAR 0 3
42214: RET
// every 0 0$1 + 0 0$0.8 trigger final_battle_begin do var temp_list , i , k ; var num_veh , time , veh_start_time ;
42215: LD_EXP 69
42219: IFFALSE 43097
42221: GO 42223
42223: DISABLE
42224: LD_INT 0
42226: PPUSH
42227: PPUSH
42228: PPUSH
42229: PPUSH
42230: PPUSH
42231: PPUSH
// begin repeat wait ( 0 0$1 ) ;
42232: LD_INT 35
42234: PPUSH
42235: CALL_OW 67
// until ( ai_attacking_soldiers [ 1 ] ^ ai_attacking_scientists [ 1 ] ^ ai_vehicles_attack [ 1 ] ) = 0 ;
42239: LD_EXP 45
42243: PUSH
42244: LD_INT 1
42246: ARRAY
42247: PUSH
42248: LD_EXP 46
42252: PUSH
42253: LD_INT 1
42255: ARRAY
42256: ADD
42257: PUSH
42258: LD_EXP 23
42262: PUSH
42263: LD_INT 1
42265: ARRAY
42266: ADD
42267: PUSH
42268: LD_INT 0
42270: EQUAL
42271: IFFALSE 42232
// human_attack_strategy = 2 ;
42273: LD_ADDR_EXP 50
42277: PUSH
42278: LD_INT 2
42280: ST_TO_ADDR
// vehicle_attack_strategy = 1 ;
42281: LD_ADDR_EXP 51
42285: PUSH
42286: LD_INT 1
42288: ST_TO_ADDR
// num_veh = 8 ;
42289: LD_ADDR_VAR 0 4
42293: PUSH
42294: LD_INT 8
42296: ST_TO_ADDR
// final_battle_units = CreateUnitsWithClass ( 12 , class_bazooker , russians ) ;
42297: LD_ADDR_EXP 71
42301: PUSH
42302: LD_INT 12
42304: PPUSH
42305: LD_INT 9
42307: PPUSH
42308: LD_EXP 3
42312: PPUSH
42313: CALL 7077 0 3
42317: ST_TO_ADDR
// final_battle_units = final_battle_units ^ CreateUnitsWithClass ( 8 , class_soldier , russians ) ;
42318: LD_ADDR_EXP 71
42322: PUSH
42323: LD_EXP 71
42327: PUSH
42328: LD_INT 8
42330: PPUSH
42331: LD_INT 1
42333: PPUSH
42334: LD_EXP 3
42338: PPUSH
42339: CALL 7077 0 3
42343: ADD
42344: ST_TO_ADDR
// final_battle_units = final_battle_units ^ CreateUnitsWithClass ( 6 , class_scientistic , russians ) ;
42345: LD_ADDR_EXP 71
42349: PUSH
42350: LD_EXP 71
42354: PUSH
42355: LD_INT 6
42357: PPUSH
42358: LD_INT 4
42360: PPUSH
42361: LD_EXP 3
42365: PPUSH
42366: CALL 7077 0 3
42370: ADD
42371: ST_TO_ADDR
// for i in final_battle_units do
42372: LD_ADDR_VAR 0 2
42376: PUSH
42377: LD_EXP 71
42381: PUSH
42382: FOR_IN
42383: IFFALSE 42505
// begin SetAttr ( i , attr_speed , 10 ) ;
42385: LD_VAR 0 2
42389: PPUSH
42390: LD_INT 2
42392: PPUSH
42393: LD_INT 10
42395: PPUSH
42396: CALL_OW 239
// if GetClass ( i ) = class_scientistic then
42400: LD_VAR 0 2
42404: PPUSH
42405: CALL_OW 257
42409: PUSH
42410: LD_INT 4
42412: EQUAL
42413: IFFALSE 42460
// begin temp_list = ai_attacking_scientists [ 1 ] ^ i ;
42415: LD_ADDR_VAR 0 1
42419: PUSH
42420: LD_EXP 46
42424: PUSH
42425: LD_INT 1
42427: ARRAY
42428: PUSH
42429: LD_VAR 0 2
42433: ADD
42434: ST_TO_ADDR
// ai_attacking_scientists = Replace ( ai_attacking_scientists , 1 , temp_list ) ;
42435: LD_ADDR_EXP 46
42439: PUSH
42440: LD_EXP 46
42444: PPUSH
42445: LD_INT 1
42447: PPUSH
42448: LD_VAR 0 1
42452: PPUSH
42453: CALL_OW 1
42457: ST_TO_ADDR
// end else
42458: GO 42503
// begin temp_list = ai_attacking_soldiers [ 1 ] ^ i ;
42460: LD_ADDR_VAR 0 1
42464: PUSH
42465: LD_EXP 45
42469: PUSH
42470: LD_INT 1
42472: ARRAY
42473: PUSH
42474: LD_VAR 0 2
42478: ADD
42479: ST_TO_ADDR
// ai_attacking_soldiers = Replace ( ai_attacking_soldiers , 1 , temp_list ) ;
42480: LD_ADDR_EXP 45
42484: PUSH
42485: LD_EXP 45
42489: PPUSH
42490: LD_INT 1
42492: PPUSH
42493: LD_VAR 0 1
42497: PPUSH
42498: CALL_OW 1
42502: ST_TO_ADDR
// end ; end ;
42503: GO 42382
42505: POP
42506: POP
// time = 0 0$0 ;
42507: LD_ADDR_VAR 0 5
42511: PUSH
42512: LD_INT 0
42514: ST_TO_ADDR
// veh_start_time = 1 1$0 ;
42515: LD_ADDR_VAR 0 6
42519: PUSH
42520: LD_INT 2100
42522: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
42523: LD_INT 35
42525: PPUSH
42526: CALL_OW 67
// time = time + 0 0$1 ;
42530: LD_ADDR_VAR 0 5
42534: PUSH
42535: LD_VAR 0 5
42539: PUSH
42540: LD_INT 35
42542: PLUS
42543: ST_TO_ADDR
// if time = veh_start_time then
42544: LD_VAR 0 5
42548: PUSH
42549: LD_VAR 0 6
42553: EQUAL
42554: IFFALSE 42614
// begin temp_list = ai_vehicles_attack [ 1 ] ^ UnitFilter ( final_battle_units , [ f_type , unit_vehicle ] ) ;
42556: LD_ADDR_VAR 0 1
42560: PUSH
42561: LD_EXP 23
42565: PUSH
42566: LD_INT 1
42568: ARRAY
42569: PUSH
42570: LD_EXP 71
42574: PPUSH
42575: LD_INT 21
42577: PUSH
42578: LD_INT 2
42580: PUSH
42581: EMPTY
42582: LIST
42583: LIST
42584: PPUSH
42585: CALL_OW 72
42589: ADD
42590: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , 1 , temp_list ) ;
42591: LD_ADDR_EXP 23
42595: PUSH
42596: LD_EXP 23
42600: PPUSH
42601: LD_INT 1
42603: PPUSH
42604: LD_VAR 0 1
42608: PPUSH
42609: CALL_OW 1
42613: ST_TO_ADDR
// end ; temp_list = [ ] ;
42614: LD_ADDR_VAR 0 1
42618: PUSH
42619: EMPTY
42620: ST_TO_ADDR
// for i in final_battle_units do
42621: LD_ADDR_VAR 0 2
42625: PUSH
42626: LD_EXP 71
42630: PUSH
42631: FOR_IN
42632: IFFALSE 42667
// if GetLives ( i ) > 0 then
42634: LD_VAR 0 2
42638: PPUSH
42639: CALL_OW 256
42643: PUSH
42644: LD_INT 0
42646: GREATER
42647: IFFALSE 42665
// temp_list = temp_list ^ i ;
42649: LD_ADDR_VAR 0 1
42653: PUSH
42654: LD_VAR 0 1
42658: PUSH
42659: LD_VAR 0 2
42663: ADD
42664: ST_TO_ADDR
42665: GO 42631
42667: POP
42668: POP
// final_battle_units = temp_list ;
42669: LD_ADDR_EXP 71
42673: PUSH
42674: LD_VAR 0 1
42678: ST_TO_ADDR
// k = UnitFilter ( final_battle_units , [ f_type , unit_vehicle ] ) ;
42679: LD_ADDR_VAR 0 3
42683: PUSH
42684: LD_EXP 71
42688: PPUSH
42689: LD_INT 21
42691: PUSH
42692: LD_INT 2
42694: PUSH
42695: EMPTY
42696: LIST
42697: LIST
42698: PPUSH
42699: CALL_OW 72
42703: ST_TO_ADDR
// if k < num_veh then
42704: LD_VAR 0 3
42708: PUSH
42709: LD_VAR 0 4
42713: LESS
42714: IFFALSE 42919
// begin InitUc ;
42716: CALL_OW 18
// InitVc ;
42720: CALL_OW 20
// uc_side = russians ;
42724: LD_ADDR_OWVAR 20
42728: PUSH
42729: LD_EXP 3
42733: ST_TO_ADDR
// uc_nation = nation_russian ;
42734: LD_ADDR_OWVAR 21
42738: PUSH
42739: LD_INT 3
42741: ST_TO_ADDR
// vc_engine = engine_combustion ;
42742: LD_ADDR_OWVAR 39
42746: PUSH
42747: LD_INT 1
42749: ST_TO_ADDR
// vc_control = control_computer ;
42750: LD_ADDR_OWVAR 38
42754: PUSH
42755: LD_INT 3
42757: ST_TO_ADDR
// vc_chassis = ru_heavy_tracked ;
42758: LD_ADDR_OWVAR 37
42762: PUSH
42763: LD_INT 24
42765: ST_TO_ADDR
// temp_list = [ ] ;
42766: LD_ADDR_VAR 0 1
42770: PUSH
42771: EMPTY
42772: ST_TO_ADDR
// for i = k + 0 to num_veh - 1 do
42773: LD_ADDR_VAR 0 2
42777: PUSH
42778: DOUBLE
42779: LD_VAR 0 3
42783: PUSH
42784: LD_INT 0
42786: PLUS
42787: DEC
42788: ST_TO_ADDR
42789: LD_VAR 0 4
42793: PUSH
42794: LD_INT 1
42796: MINUS
42797: PUSH
42798: FOR_TO
42799: IFFALSE 42846
// begin vc_weapon = [ ru_gun , ru_heavy_gun ] [ Rand ( 1 , 2 ) ] ;
42801: LD_ADDR_OWVAR 40
42805: PUSH
42806: LD_INT 44
42808: PUSH
42809: LD_INT 46
42811: PUSH
42812: EMPTY
42813: LIST
42814: LIST
42815: PUSH
42816: LD_INT 1
42818: PPUSH
42819: LD_INT 2
42821: PPUSH
42822: CALL_OW 12
42826: ARRAY
42827: ST_TO_ADDR
// temp_list = temp_list ^ CreateVehicle ;
42828: LD_ADDR_VAR 0 1
42832: PUSH
42833: LD_VAR 0 1
42837: PUSH
42838: CALL_OW 45
42842: ADD
42843: ST_TO_ADDR
// end ;
42844: GO 42798
42846: POP
42847: POP
// final_battle_units = final_battle_units ^ temp_list ;
42848: LD_ADDR_EXP 71
42852: PUSH
42853: LD_EXP 71
42857: PUSH
42858: LD_VAR 0 1
42862: ADD
42863: ST_TO_ADDR
// if time >= veh_start_time then
42864: LD_VAR 0 5
42868: PUSH
42869: LD_VAR 0 6
42873: GREATEREQUAL
42874: IFFALSE 42919
// begin temp_list = ai_vehicles_attack [ 1 ] ^ temp_list ;
42876: LD_ADDR_VAR 0 1
42880: PUSH
42881: LD_EXP 23
42885: PUSH
42886: LD_INT 1
42888: ARRAY
42889: PUSH
42890: LD_VAR 0 1
42894: ADD
42895: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , 1 , temp_list ) ;
42896: LD_ADDR_EXP 23
42900: PUSH
42901: LD_EXP 23
42905: PPUSH
42906: LD_INT 1
42908: PPUSH
42909: LD_VAR 0 1
42913: PPUSH
42914: CALL_OW 1
42918: ST_TO_ADDR
// end ; end ; for i in final_battle_units do
42919: LD_ADDR_VAR 0 2
42923: PUSH
42924: LD_EXP 71
42928: PUSH
42929: FOR_IN
42930: IFFALSE 43091
// if not IsPlaced ( i ) and GetLives ( i ) > 0 then
42932: LD_VAR 0 2
42936: PPUSH
42937: CALL_OW 305
42941: NOT
42942: PUSH
42943: LD_VAR 0 2
42947: PPUSH
42948: CALL_OW 256
42952: PUSH
42953: LD_INT 0
42955: GREATER
42956: AND
42957: IFFALSE 43026
// begin temp_list = Replace ( ai_attacking_unit_hex_index [ 1 ] , i , 1 ) ;
42959: LD_ADDR_VAR 0 1
42963: PUSH
42964: LD_EXP 47
42968: PUSH
42969: LD_INT 1
42971: ARRAY
42972: PPUSH
42973: LD_VAR 0 2
42977: PPUSH
42978: LD_INT 1
42980: PPUSH
42981: CALL_OW 1
42985: ST_TO_ADDR
// ai_attacking_unit_hex_index = Replace ( ai_attacking_unit_hex_index , 1 , temp_list ) ;
42986: LD_ADDR_EXP 47
42990: PUSH
42991: LD_EXP 47
42995: PPUSH
42996: LD_INT 1
42998: PPUSH
42999: LD_VAR 0 1
43003: PPUSH
43004: CALL_OW 1
43008: ST_TO_ADDR
// PlaceUnitArea ( i , ru_enter_area_west , false ) ;
43009: LD_VAR 0 2
43013: PPUSH
43014: LD_INT 13
43016: PPUSH
43017: LD_INT 0
43019: PPUSH
43020: CALL_OW 49
// end else
43024: GO 43089
// if GetType ( i ) = unit_vehicle and time < veh_start_time then
43026: LD_VAR 0 2
43030: PPUSH
43031: CALL_OW 247
43035: PUSH
43036: LD_INT 2
43038: EQUAL
43039: PUSH
43040: LD_VAR 0 5
43044: PUSH
43045: LD_VAR 0 6
43049: LESS
43050: AND
43051: IFFALSE 43089
// begin if GetDistUnitXY ( i , 53 , 57 ) > 10 then
43053: LD_VAR 0 2
43057: PPUSH
43058: LD_INT 53
43060: PPUSH
43061: LD_INT 57
43063: PPUSH
43064: CALL_OW 297
43068: PUSH
43069: LD_INT 10
43071: GREATER
43072: IFFALSE 43089
// ComMoveXY ( i , 53 , 57 ) ;
43074: LD_VAR 0 2
43078: PPUSH
43079: LD_INT 53
43081: PPUSH
43082: LD_INT 57
43084: PPUSH
43085: CALL_OW 111
// end ;
43089: GO 42929
43091: POP
43092: POP
// until false ;
43093: LD_INT 0
43095: IFFALSE 42523
// end ;
43097: PPOPN 6
43099: END
// every 0 0$1 + 0 0$0.9 trigger final_battle_begin do var temp_list , i , k , time , dir , un_list ;
43100: LD_EXP 69
43104: IFFALSE 43960
43106: GO 43108
43108: DISABLE
43109: LD_INT 0
43111: PPUSH
43112: PPUSH
43113: PPUSH
43114: PPUSH
43115: PPUSH
43116: PPUSH
// begin k = false ;
43117: LD_ADDR_VAR 0 3
43121: PUSH
43122: LD_INT 0
43124: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
43125: LD_INT 35
43127: PPUSH
43128: CALL_OW 67
// for i in final_battle_units do
43132: LD_ADDR_VAR 0 2
43136: PUSH
43137: LD_EXP 71
43141: PUSH
43142: FOR_IN
43143: IFFALSE 43177
// if GetType ( Attacks ( i ) ) = unit_building then
43145: LD_VAR 0 2
43149: PPUSH
43150: CALL_OW 320
43154: PPUSH
43155: CALL_OW 247
43159: PUSH
43160: LD_INT 3
43162: EQUAL
43163: IFFALSE 43175
// begin k = true ;
43165: LD_ADDR_VAR 0 3
43169: PUSH
43170: LD_INT 1
43172: ST_TO_ADDR
// break ;
43173: GO 43177
// end ;
43175: GO 43142
43177: POP
43178: POP
// until k ;
43179: LD_VAR 0 3
43183: IFFALSE 43125
// CenterOnUnits ( i ) ;
43185: LD_VAR 0 2
43189: PPUSH
43190: CALL_OW 85
// for i in final_battle_units do
43194: LD_ADDR_VAR 0 2
43198: PUSH
43199: LD_EXP 71
43203: PUSH
43204: FOR_IN
43205: IFFALSE 43286
// if GetType ( i ) = unit_human then
43207: LD_VAR 0 2
43211: PPUSH
43212: CALL_OW 247
43216: PUSH
43217: LD_INT 1
43219: EQUAL
43220: IFFALSE 43284
// begin if GetClass ( i ) = class_scientistic then
43222: LD_VAR 0 2
43226: PPUSH
43227: CALL_OW 257
43231: PUSH
43232: LD_INT 4
43234: EQUAL
43235: IFFALSE 43254
// SetSkill ( i , skill_scientistic , 10 ) else
43237: LD_VAR 0 2
43241: PPUSH
43242: LD_INT 4
43244: PPUSH
43245: LD_INT 10
43247: PPUSH
43248: CALL_OW 237
43252: GO 43269
// SetSkill ( i , skill_combat , 10 ) ;
43254: LD_VAR 0 2
43258: PPUSH
43259: LD_INT 1
43261: PPUSH
43262: LD_INT 10
43264: PPUSH
43265: CALL_OW 237
// SetAttr ( i , attr_stamina , 999 ) ;
43269: LD_VAR 0 2
43273: PPUSH
43274: LD_INT 1
43276: PPUSH
43277: LD_INT 999
43279: PPUSH
43280: CALL_OW 239
// end ;
43284: GO 43204
43286: POP
43287: POP
// SetTech ( tech_comp1 , russians , state_researched ) ;
43288: LD_INT 57
43290: PPUSH
43291: LD_EXP 3
43295: PPUSH
43296: LD_INT 2
43298: PPUSH
43299: CALL_OW 322
// SetTech ( tech_comp2 , russians , state_researched ) ;
43303: LD_INT 58
43305: PPUSH
43306: LD_EXP 3
43310: PPUSH
43311: LD_INT 2
43313: PPUSH
43314: CALL_OW 322
// SetTech ( tech_comp3 , russians , state_researched ) ;
43318: LD_INT 59
43320: PPUSH
43321: LD_EXP 3
43325: PPUSH
43326: LD_INT 2
43328: PPUSH
43329: CALL_OW 322
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] ] ) do
43333: LD_ADDR_VAR 0 2
43337: PUSH
43338: LD_INT 22
43340: PUSH
43341: LD_EXP 2
43345: PUSH
43346: EMPTY
43347: LIST
43348: LIST
43349: PUSH
43350: LD_INT 21
43352: PUSH
43353: LD_INT 3
43355: PUSH
43356: EMPTY
43357: LIST
43358: LIST
43359: PUSH
43360: EMPTY
43361: LIST
43362: LIST
43363: PPUSH
43364: CALL_OW 69
43368: PUSH
43369: FOR_IN
43370: IFFALSE 43386
// SetBLevel ( i , 0 ) ;
43372: LD_VAR 0 2
43376: PPUSH
43377: LD_INT 0
43379: PPUSH
43380: CALL_OW 241
43384: GO 43369
43386: POP
43387: POP
// SetTech ( tech_tech3 , you , state_enabled ) ;
43388: LD_INT 50
43390: PPUSH
43391: LD_EXP 2
43395: PPUSH
43396: LD_INT 1
43398: PPUSH
43399: CALL_OW 322
// SetTech ( tech_tech2 , you , state_enabled ) ;
43403: LD_INT 49
43405: PPUSH
43406: LD_EXP 2
43410: PPUSH
43411: LD_INT 1
43413: PPUSH
43414: CALL_OW 322
// SetTech ( tech_tech1 , you , state_enabled ) ;
43418: LD_INT 48
43420: PPUSH
43421: LD_EXP 2
43425: PPUSH
43426: LD_INT 1
43428: PPUSH
43429: CALL_OW 322
// DoNotAttack ( russians , Heike ) ;
43433: LD_EXP 3
43437: PPUSH
43438: LD_EXP 7
43442: PPUSH
43443: CALL_OW 471
// InGameOn ;
43447: CALL_OW 8
// ExclusiveOff ;
43451: CALL_OW 5
// RaiseSailEvent ( 1 ) ;
43455: LD_INT 1
43457: PPUSH
43458: CALL_OW 427
// DialogueOn ;
43462: CALL_OW 6
// SayRadio ( Burlak , D9Bu1 ) ;
43466: LD_EXP 11
43470: PPUSH
43471: LD_STRING D9Bu1
43473: PPUSH
43474: CALL_OW 94
// DialogueOff ;
43478: CALL_OW 7
// un_list = final_battle_units ;
43482: LD_ADDR_VAR 0 6
43486: PUSH
43487: LD_EXP 71
43491: ST_TO_ADDR
// time = 0 ;
43492: LD_ADDR_VAR 0 4
43496: PUSH
43497: LD_INT 0
43499: ST_TO_ADDR
// repeat if time mod 2 = 0 then
43500: LD_VAR 0 4
43504: PUSH
43505: LD_INT 2
43507: MOD
43508: PUSH
43509: LD_INT 0
43511: EQUAL
43512: IFFALSE 43524
// k = unit_vehicle else
43514: LD_ADDR_VAR 0 3
43518: PUSH
43519: LD_INT 2
43521: ST_TO_ADDR
43522: GO 43532
// k = unit_human ;
43524: LD_ADDR_VAR 0 3
43528: PUSH
43529: LD_INT 1
43531: ST_TO_ADDR
// un_list = UnitFilter ( un_list , [ f_ok ] ) ;
43532: LD_ADDR_VAR 0 6
43536: PUSH
43537: LD_VAR 0 6
43541: PPUSH
43542: LD_INT 50
43544: PUSH
43545: EMPTY
43546: LIST
43547: PPUSH
43548: CALL_OW 72
43552: ST_TO_ADDR
// temp_list = UnitFilter ( un_list , [ [ f_type , k ] , [ f_see , you ] ] ) ;
43553: LD_ADDR_VAR 0 1
43557: PUSH
43558: LD_VAR 0 6
43562: PPUSH
43563: LD_INT 21
43565: PUSH
43566: LD_VAR 0 3
43570: PUSH
43571: EMPTY
43572: LIST
43573: LIST
43574: PUSH
43575: LD_INT 101
43577: PUSH
43578: LD_EXP 2
43582: PUSH
43583: EMPTY
43584: LIST
43585: LIST
43586: PUSH
43587: EMPTY
43588: LIST
43589: LIST
43590: PPUSH
43591: CALL_OW 72
43595: ST_TO_ADDR
// if temp_list > 0 then
43596: LD_VAR 0 1
43600: PUSH
43601: LD_INT 0
43603: GREATER
43604: IFFALSE 43808
// begin k = temp_list [ Rand ( 1 , temp_list ) ] ;
43606: LD_ADDR_VAR 0 3
43610: PUSH
43611: LD_VAR 0 1
43615: PUSH
43616: LD_INT 1
43618: PPUSH
43619: LD_VAR 0 1
43623: PPUSH
43624: CALL_OW 12
43628: ARRAY
43629: ST_TO_ADDR
// temp_list = [ GetX ( k ) , GetY ( k ) ] ;
43630: LD_ADDR_VAR 0 1
43634: PUSH
43635: LD_VAR 0 3
43639: PPUSH
43640: CALL_OW 250
43644: PUSH
43645: LD_VAR 0 3
43649: PPUSH
43650: CALL_OW 251
43654: PUSH
43655: EMPTY
43656: LIST
43657: LIST
43658: ST_TO_ADDR
// dir = AI_GetTurnDirection ( temp_list [ 1 ] , temp_list [ 2 ] , 99 , 4 ) ;
43659: LD_ADDR_VAR 0 5
43663: PUSH
43664: LD_VAR 0 1
43668: PUSH
43669: LD_INT 1
43671: ARRAY
43672: PPUSH
43673: LD_VAR 0 1
43677: PUSH
43678: LD_INT 2
43680: ARRAY
43681: PPUSH
43682: LD_INT 99
43684: PPUSH
43685: LD_INT 4
43687: PPUSH
43688: CALL 44041 0 4
43692: ST_TO_ADDR
// temp_list = [ ShiftX ( temp_list [ 1 ] , dir , 10 ) , ShiftY ( temp_list [ 2 ] , dir , 10 ) ] ;
43693: LD_ADDR_VAR 0 1
43697: PUSH
43698: LD_VAR 0 1
43702: PUSH
43703: LD_INT 1
43705: ARRAY
43706: PPUSH
43707: LD_VAR 0 5
43711: PPUSH
43712: LD_INT 10
43714: PPUSH
43715: CALL_OW 272
43719: PUSH
43720: LD_VAR 0 1
43724: PUSH
43725: LD_INT 2
43727: ARRAY
43728: PPUSH
43729: LD_VAR 0 5
43733: PPUSH
43734: LD_INT 10
43736: PPUSH
43737: CALL_OW 273
43741: PUSH
43742: EMPTY
43743: LIST
43744: LIST
43745: ST_TO_ADDR
// if not ValidHex ( temp_list [ 1 ] , temp_list [ 2 ] ) then
43746: LD_VAR 0 1
43750: PUSH
43751: LD_INT 1
43753: ARRAY
43754: PPUSH
43755: LD_VAR 0 1
43759: PUSH
43760: LD_INT 2
43762: ARRAY
43763: PPUSH
43764: CALL_OW 488
43768: NOT
43769: IFFALSE 43786
// temp_list = [ 99 , 4 ] ;
43771: LD_ADDR_VAR 0 1
43775: PUSH
43776: LD_INT 99
43778: PUSH
43779: LD_INT 4
43781: PUSH
43782: EMPTY
43783: LIST
43784: LIST
43785: ST_TO_ADDR
// CenterOnXY ( temp_list [ 1 ] , temp_list [ 2 ] ) ;
43786: LD_VAR 0 1
43790: PUSH
43791: LD_INT 1
43793: ARRAY
43794: PPUSH
43795: LD_VAR 0 1
43799: PUSH
43800: LD_INT 2
43802: ARRAY
43803: PPUSH
43804: CALL_OW 84
// end ; wait ( 0 0$5 ) ;
43808: LD_INT 175
43810: PPUSH
43811: CALL_OW 67
// time = time + 5 ;
43815: LD_ADDR_VAR 0 4
43819: PUSH
43820: LD_VAR 0 4
43824: PUSH
43825: LD_INT 5
43827: PLUS
43828: ST_TO_ADDR
// until time >= 50 or ( time >= 30 and FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_ok ] ] ) < 5 ) ;
43829: LD_VAR 0 4
43833: PUSH
43834: LD_INT 50
43836: GREATEREQUAL
43837: PUSH
43838: LD_VAR 0 4
43842: PUSH
43843: LD_INT 30
43845: GREATEREQUAL
43846: PUSH
43847: LD_INT 22
43849: PUSH
43850: LD_EXP 2
43854: PUSH
43855: EMPTY
43856: LIST
43857: LIST
43858: PUSH
43859: LD_INT 21
43861: PUSH
43862: LD_INT 1
43864: PUSH
43865: EMPTY
43866: LIST
43867: LIST
43868: PUSH
43869: LD_INT 50
43871: PUSH
43872: EMPTY
43873: LIST
43874: PUSH
43875: EMPTY
43876: LIST
43877: LIST
43878: LIST
43879: PPUSH
43880: CALL_OW 69
43884: PUSH
43885: LD_INT 5
43887: LESS
43888: AND
43889: OR
43890: IFFALSE 43500
// DialogueOn ;
43892: CALL_OW 6
// if See ( russians , Heike ) then
43896: LD_EXP 3
43900: PPUSH
43901: LD_EXP 7
43905: PPUSH
43906: CALL_OW 292
43910: IFFALSE 43926
// Say ( Burlak , D9Bu2a ) else
43912: LD_EXP 11
43916: PPUSH
43917: LD_STRING D9Bu2a
43919: PPUSH
43920: CALL_OW 88
43924: GO 43938
// Say ( Burlak , D9Bu2b ) ;
43926: LD_EXP 11
43930: PPUSH
43931: LD_STRING D9Bu2b
43933: PPUSH
43934: CALL_OW 88
// DialogueOff ;
43938: CALL_OW 7
// wait ( 0 0$0.2 ) ;
43942: LD_INT 7
43944: PPUSH
43945: CALL_OW 67
// EndMission ( false ) ;
43949: LD_INT 0
43951: PPUSH
43952: CALL 44418 0 1
// InGameOff ;
43956: CALL_OW 9
// end ;
43960: PPOPN 6
43962: END
// on SailEvent ( arg ) do begin case arg of 1 :
43963: LD_VAR 0 1
43967: PUSH
43968: LD_INT 1
43970: DOUBLE
43971: EQUAL
43972: IFTRUE 43976
43974: GO 44037
43976: POP
// begin heike_original_stamina = GetAttr ( Heike , attr_stamina ) ;
43977: LD_ADDR_EXP 68
43981: PUSH
43982: LD_EXP 7
43986: PPUSH
43987: LD_INT 1
43989: PPUSH
43990: CALL_OW 260
43994: ST_TO_ADDR
// SetAttr ( Heike , attr_stamina , 9999 ) ;
43995: LD_EXP 7
43999: PPUSH
44000: LD_INT 1
44002: PPUSH
44003: LD_INT 9999
44005: PPUSH
44006: CALL_OW 239
// repeat wait ( 0 0$1 ) ;
44010: LD_INT 35
44012: PPUSH
44013: CALL_OW 67
// SetLives ( Heike , 1000 ) ;
44017: LD_EXP 7
44021: PPUSH
44022: LD_INT 1000
44024: PPUSH
44025: CALL_OW 234
// until end_of_mission ;
44029: LD_OWVAR 63
44033: IFFALSE 44010
// end ; end ;
44035: GO 44038
44037: POP
// end ;
44038: PPOPN 1
44040: END
// function AI_GetTurnDirection ( x1 , y1 , x , y ) ; var dist_1 , dist_2 , b , temp_dist , dir ; begin
44041: LD_INT 0
44043: PPUSH
44044: PPUSH
44045: PPUSH
44046: PPUSH
44047: PPUSH
44048: PPUSH
// if not ValidHex ( x1 , y1 ) or not ValidHex ( x , y ) then
44049: LD_VAR 0 1
44053: PPUSH
44054: LD_VAR 0 2
44058: PPUSH
44059: CALL_OW 488
44063: NOT
44064: PUSH
44065: LD_VAR 0 3
44069: PPUSH
44070: LD_VAR 0 4
44074: PPUSH
44075: CALL_OW 488
44079: NOT
44080: OR
44081: IFFALSE 44094
// begin result = - 1 ;
44083: LD_ADDR_VAR 0 5
44087: PUSH
44088: LD_INT 1
44090: NEG
44091: ST_TO_ADDR
// exit ;
44092: GO 44254
// end ; dist_1 = GetDistXY ( x1 , y1 , x , y ) ;
44094: LD_ADDR_VAR 0 6
44098: PUSH
44099: LD_VAR 0 1
44103: PPUSH
44104: LD_VAR 0 2
44108: PPUSH
44109: LD_VAR 0 3
44113: PPUSH
44114: LD_VAR 0 4
44118: PPUSH
44119: CALL_OW 298
44123: ST_TO_ADDR
// dist_2 = 99999 ;
44124: LD_ADDR_VAR 0 7
44128: PUSH
44129: LD_INT 99999
44131: ST_TO_ADDR
// for b = 0 to 5 do
44132: LD_ADDR_VAR 0 8
44136: PUSH
44137: DOUBLE
44138: LD_INT 0
44140: DEC
44141: ST_TO_ADDR
44142: LD_INT 5
44144: PUSH
44145: FOR_TO
44146: IFFALSE 44242
// begin temp_dist = GetDistXY ( ShiftX ( x1 , b , dist_1 ) , ShiftY ( y1 , b , dist_1 ) , x , y ) ;
44148: LD_ADDR_VAR 0 9
44152: PUSH
44153: LD_VAR 0 1
44157: PPUSH
44158: LD_VAR 0 8
44162: PPUSH
44163: LD_VAR 0 6
44167: PPUSH
44168: CALL_OW 272
44172: PPUSH
44173: LD_VAR 0 2
44177: PPUSH
44178: LD_VAR 0 8
44182: PPUSH
44183: LD_VAR 0 6
44187: PPUSH
44188: CALL_OW 273
44192: PPUSH
44193: LD_VAR 0 3
44197: PPUSH
44198: LD_VAR 0 4
44202: PPUSH
44203: CALL_OW 298
44207: ST_TO_ADDR
// if temp_dist < dist_2 then
44208: LD_VAR 0 9
44212: PUSH
44213: LD_VAR 0 7
44217: LESS
44218: IFFALSE 44240
// begin dist_2 = temp_dist ;
44220: LD_ADDR_VAR 0 7
44224: PUSH
44225: LD_VAR 0 9
44229: ST_TO_ADDR
// dir = b ;
44230: LD_ADDR_VAR 0 10
44234: PUSH
44235: LD_VAR 0 8
44239: ST_TO_ADDR
// end ; end ;
44240: GO 44145
44242: POP
44243: POP
// result = dir ;
44244: LD_ADDR_VAR 0 5
44248: PUSH
44249: LD_VAR 0 10
44253: ST_TO_ADDR
// end ; end_of_file
44254: LD_VAR 0 5
44258: RET
// every 0 0$1 + 0 0$0.7 do var i , bol ;
44259: GO 44261
44261: DISABLE
44262: LD_INT 0
44264: PPUSH
44265: PPUSH
// begin repeat wait ( 0 0$4 ) ;
44266: LD_INT 140
44268: PPUSH
44269: CALL_OW 67
// bol = false ;
44273: LD_ADDR_VAR 0 2
44277: PUSH
44278: LD_INT 0
44280: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , player_base ] , [ f_type , unit_building ] ] ) do
44281: LD_ADDR_VAR 0 1
44285: PUSH
44286: LD_INT 22
44288: PUSH
44289: LD_EXP 2
44293: PUSH
44294: EMPTY
44295: LIST
44296: LIST
44297: PUSH
44298: LD_INT 95
44300: PUSH
44301: LD_INT 3
44303: PUSH
44304: EMPTY
44305: LIST
44306: LIST
44307: PUSH
44308: LD_INT 21
44310: PUSH
44311: LD_INT 3
44313: PUSH
44314: EMPTY
44315: LIST
44316: LIST
44317: PUSH
44318: EMPTY
44319: LIST
44320: LIST
44321: LIST
44322: PPUSH
44323: CALL_OW 69
44327: PUSH
44328: FOR_IN
44329: IFFALSE 44393
// if GetBType ( i ) in [ b_depot , b_warehouse , b_workshop , b_factory , b_armoury , b_barracks , b_lab , b_lab_half , b_lab_full ] then
44331: LD_VAR 0 1
44335: PPUSH
44336: CALL_OW 266
44340: PUSH
44341: LD_INT 0
44343: PUSH
44344: LD_INT 1
44346: PUSH
44347: LD_INT 2
44349: PUSH
44350: LD_INT 3
44352: PUSH
44353: LD_INT 4
44355: PUSH
44356: LD_INT 5
44358: PUSH
44359: LD_INT 6
44361: PUSH
44362: LD_INT 7
44364: PUSH
44365: LD_INT 8
44367: PUSH
44368: EMPTY
44369: LIST
44370: LIST
44371: LIST
44372: LIST
44373: LIST
44374: LIST
44375: LIST
44376: LIST
44377: LIST
44378: IN
44379: IFFALSE 44391
// begin bol = true ;
44381: LD_ADDR_VAR 0 2
44385: PUSH
44386: LD_INT 1
44388: ST_TO_ADDR
// break ;
44389: GO 44393
// end ;
44391: GO 44328
44393: POP
44394: POP
// if not bol then
44395: LD_VAR 0 2
44399: NOT
44400: IFFALSE 44409
// YouLost ( NewKabulDestroyed ) ;
44402: LD_STRING NewKabulDestroyed
44404: PPUSH
44405: CALL_OW 104
// until final_battle_begin ;
44409: LD_EXP 69
44413: IFFALSE 44266
// end ;
44415: PPOPN 2
44417: END
// export function EndMission ( heike_surrendered ) ; var val ; begin
44418: LD_INT 0
44420: PPUSH
44421: PPUSH
// if deny_crates_gathered = deny_crates_spawned then
44422: LD_EXP 62
44426: PUSH
44427: LD_EXP 61
44431: EQUAL
44432: IFFALSE 44445
// val = - 3 else
44434: LD_ADDR_VAR 0 3
44438: PUSH
44439: LD_INT 3
44441: NEG
44442: ST_TO_ADDR
44443: GO 44545
// case deny_crates_gathered / deny_crates_spawned of 0 .. 0.2 :
44445: LD_EXP 62
44449: PUSH
44450: LD_EXP 61
44454: DIVREAL
44455: PUSH
44456: LD_INT 0
44458: DOUBLE
44459: GREATEREQUAL
44460: IFFALSE 44469
44462: LD_REAL  2.00000000000000E-0001
44465: DOUBLE
44466: LESSEQUAL
44467: IFTRUE 44471
44469: GO 44482
44471: POP
// val = 2 ; 0 .. 0.5 :
44472: LD_ADDR_VAR 0 3
44476: PUSH
44477: LD_INT 2
44479: ST_TO_ADDR
44480: GO 44545
44482: LD_INT 0
44484: DOUBLE
44485: GREATEREQUAL
44486: IFFALSE 44495
44488: LD_REAL  5.00000000000000E-0001
44491: DOUBLE
44492: LESSEQUAL
44493: IFTRUE 44497
44495: GO 44508
44497: POP
// val = 1 ; 0 .. 0.8 :
44498: LD_ADDR_VAR 0 3
44502: PUSH
44503: LD_INT 1
44505: ST_TO_ADDR
44506: GO 44545
44508: LD_INT 0
44510: DOUBLE
44511: GREATEREQUAL
44512: IFFALSE 44521
44514: LD_REAL  8.00000000000000E-0001
44517: DOUBLE
44518: LESSEQUAL
44519: IFTRUE 44523
44521: GO 44535
44523: POP
// val = - 1 ; else
44524: LD_ADDR_VAR 0 3
44528: PUSH
44529: LD_INT 1
44531: NEG
44532: ST_TO_ADDR
44533: GO 44545
44535: POP
// val = - 2 ; end ;
44536: LD_ADDR_VAR 0 3
44540: PUSH
44541: LD_INT 2
44543: NEG
44544: ST_TO_ADDR
// AddMedal ( CrateDeny , val ) ;
44545: LD_STRING CrateDeny
44547: PPUSH
44548: LD_VAR 0 3
44552: PPUSH
44553: CALL_OW 101
// if IsDead ( Yashin ) then
44557: LD_EXP 12
44561: PPUSH
44562: CALL_OW 301
44566: IFFALSE 44578
// val = 1 else
44568: LD_ADDR_VAR 0 3
44572: PUSH
44573: LD_INT 1
44575: ST_TO_ADDR
44576: GO 44616
// begin SaveCharacters ( Yashin , Yashin_08 ) ;
44578: LD_EXP 12
44582: PPUSH
44583: LD_STRING Yashin_08
44585: PPUSH
44586: CALL_OW 38
// if yashin_begin then
44590: LD_EXP 64
44594: IFFALSE 44607
// val = - 1 else
44596: LD_ADDR_VAR 0 3
44600: PUSH
44601: LD_INT 1
44603: NEG
44604: ST_TO_ADDR
44605: GO 44616
// val = - 2 ;
44607: LD_ADDR_VAR 0 3
44611: PUSH
44612: LD_INT 2
44614: NEG
44615: ST_TO_ADDR
// end ; AddMedal ( YashinKill , val ) ;
44616: LD_STRING YashinKill
44618: PPUSH
44619: LD_VAR 0 3
44623: PPUSH
44624: CALL_OW 101
// if heike_surrendered then
44628: LD_VAR 0 1
44632: IFFALSE 44645
// val = - 1 else
44634: LD_ADDR_VAR 0 3
44638: PUSH
44639: LD_INT 1
44641: NEG
44642: ST_TO_ADDR
44643: GO 44653
// val = 1 ;
44645: LD_ADDR_VAR 0 3
44649: PUSH
44650: LD_INT 1
44652: ST_TO_ADDR
// AddMedal ( BitterEnd , val ) ;
44653: LD_STRING BitterEnd
44655: PPUSH
44656: LD_VAR 0 3
44660: PPUSH
44661: CALL_OW 101
// SaveVariable ( heike_surrendered , Heike_surrendered_08 ) ;
44665: LD_VAR 0 1
44669: PPUSH
44670: LD_STRING Heike_surrendered_08
44672: PPUSH
44673: CALL_OW 39
// GiveMedals ( Medals ) ;
44677: LD_STRING Medals
44679: PPUSH
44680: CALL_OW 102
// RewardPeople ( Heike ) ;
44684: LD_EXP 7
44688: PPUSH
44689: CALL_OW 43
// SetAttr ( Heike , attr_stamina , heike_original_stamina ) ;
44693: LD_EXP 7
44697: PPUSH
44698: LD_INT 1
44700: PPUSH
44701: LD_EXP 68
44705: PPUSH
44706: CALL_OW 239
// SaveCharacters ( Heike , Heike_08 ) ;
44710: LD_EXP 7
44714: PPUSH
44715: LD_STRING Heike_08
44717: PPUSH
44718: CALL_OW 38
// if deserters + 0 > 0 then
44722: LD_EXP 67
44726: PUSH
44727: LD_INT 0
44729: PLUS
44730: PUSH
44731: LD_INT 0
44733: GREATER
44734: IFFALSE 44849
// begin if GetLives ( Louis ) > 250 then
44736: LD_EXP 9
44740: PPUSH
44741: CALL_OW 256
44745: PUSH
44746: LD_INT 250
44748: GREATER
44749: IFFALSE 44763
// SaveCharacters ( Louis , Louis_08 ) ;
44751: LD_EXP 9
44755: PPUSH
44756: LD_STRING Louis_08
44758: PPUSH
44759: CALL_OW 38
// if GetLives ( Martin ) > 250 and Martin in deserters then
44763: LD_EXP 8
44767: PPUSH
44768: CALL_OW 256
44772: PUSH
44773: LD_INT 250
44775: GREATER
44776: PUSH
44777: LD_EXP 8
44781: PUSH
44782: LD_EXP 67
44786: IN
44787: AND
44788: IFFALSE 44802
// SaveCharacters ( Martin , Martin_08 ) ;
44790: LD_EXP 8
44794: PPUSH
44795: LD_STRING Martin_08
44797: PPUSH
44798: CALL_OW 38
// deserters = deserters diff [ Louis , Martin ] ;
44802: LD_ADDR_EXP 67
44806: PUSH
44807: LD_EXP 67
44811: PUSH
44812: LD_EXP 9
44816: PUSH
44817: LD_EXP 8
44821: PUSH
44822: EMPTY
44823: LIST
44824: LIST
44825: DIFF
44826: ST_TO_ADDR
// if deserters > 0 then
44827: LD_EXP 67
44831: PUSH
44832: LD_INT 0
44834: GREATER
44835: IFFALSE 44849
// SaveCharacters ( deserters , other_deserters_08 ) ;
44837: LD_EXP 67
44841: PPUSH
44842: LD_STRING other_deserters_08
44844: PPUSH
44845: CALL_OW 38
// end ; YouWin ;
44849: CALL_OW 103
// end ;
44853: LD_VAR 0 2
44857: RET
